HN user

sephoric

617 karma

I'm very good at hand-crafting Mac apps among a very few other things. Check out my website, https://sephware.com/ or say hi at contact@sephware.com :)

Posts17
Comments125
View on HN

I had room fulls of boxes of things that I thought might one day be important, or significant to someone. Then I realized, when I die, all those things are just going to be thrown away or donated to a thrift store, and it's highly unlikely that anyone who buys any of that will find the same value in it that I thought it had. If I have created anything truly timeless and worthwhile, then it had better be something I created for a client and got paid for making, otherwise it's just going to probably end up in a garbage heap. So I made a decision to get rid of all of it. Time is too short to be held down by the (truly) endless possibilities of "what if" this or that thing ends up being useful to someone in the future.

You'd be surprised how much documentation you can download. And the ones that are hosted on sites, those sites are often just git repos that you can clone. A few of them (like webpack.org) are trickier because you have to build the static site while online, but then you can run it offline (via python -m SimpleHTTPServer). There's tons of little tricks like this you can use to get documentation for pretty much anything you need. Not to mention Zeal (open source Dash clone) for tons of other things, Win32 API has a CHM file, and actual books at the library work great like for Python or C++, which often have the whole standard library in them, or at least most of it. And it's always a pleasant surprise when an NPM module bundled its thorough README.md file right into the package file (and often even more docs than that), and sometimes even the original source code, so that all I have to do is run `code node_modules/webpack-dev-server` and press Cmd-Shift-V (to preview .md file as Markdown in VS Code) and then it's as if I'm right there on their GitHub page. Also Safari has an amazingly useful feature of saving a page exactly as-is into a single file that can be opened in Safari, instead of saving all the external files into a sibling folder like Chrome does.

It's self sufficiency I want for our family, and those features discourage that. My kids' schools don't teach them many things anymore, including reading an analog clock. I'd rather my children know how to buy a map at a gas station and read it to get where they want to go, or do most simple math in their head instead of using a calculator. Alarms are built into most clocks made today, even (perfectly good) ones you can buy for $3 at a thrift store, and most microwaves have timer features. Using an app for ride sharing discourages phone (or text) conversations that are naturally able to lead to many unexpected places.

At the end of the day, I look at it this way: I'm able to live a full and happy life without a smart phone, the only thing I'm missing is the ability to call someone. That's where a phone comes in handy.

Or they try to not use those features but get sucked back into it, like I did the many times I tried exactly that. I wonder how many people there are who wanted to live a life like this but because such a phone doesn't exist, they keep getting pulled back in and have to abandon having a phone altogether.

It is a lifestyle I'm forcing on my kids, and that's intentional. Kids don't always know what's good for them, and confuse wants and needs. It's a parent's job to create a safe and healthy environment where their kids can grow and thrive. We used to live the kind of life where video games and TV were "bonding experiences" and it just created all sorts of problems inside them. With this lifestyle, I see those problems vanishing one by one. And they all see it too and are happier now.

It looks like you mean the M5 phone, which from what I researched, used 2G towers and thus no longer works since those have all been decommissioned. It also seems to be cheaply made and commonly have a ton of problems.

That looks over engineered and still not as simple as it could be. Think of those cell phones in the 90s that had a single line (or two) of spaces for text, and they had no features but calling and texting. That's perfect, it has literally already been invented, it just needs to be resold, and perhaps put in a pretty package again, but not like this. Not like this.

Sway 1.0 7 years ago

I fell into this same trap with Autumn (https://sephware.com/autumn) because it's such an abstract concept that it's hard to explain all that it can do. First of all the term "window manager" is overloaded and many people thought it was just like i3 or dwm but for Mac, but it was actually a lot like Slate or Hammerspoon. But also, just like Hammerspoon, it's incredibly versatile and allows you to do a whole lot more than "manage windows". I tried to use visuals to fix this problem, namely a video and a lot of screenshots, but I don't think it helped. The fact is that I'm terrible at marketing (despite decades of trying to get better), and I just have to admit that. Well that and the fact that apparently nobody ever wanted or needed a "window manager with an IDE built in" product, and so I also suck at being a PM apparently.

The days of custom software are over in general. Every major niche has at least one major player that offers its services for free, selling your data (or ads, etc) in exchange. I'm not sure Sublime Text gets any money anymore now that VS Code does all the same things and more. Custom music players have been dead since Winamp 3. The 1990s and 2000s were like the Wild West for software, now it's like California, fully settled and complete with monopolies.

I can tell you from experience, PICO-8 has enthralled all my children, especially my oldest, with how little is required to make a really cool game like Jelpi. Every time we realize yet another cool thing you can do with just cos, sin, and atan2, we're always floored. Maybe we're simpler people, but my children were aware of modern video games and web apps, and somehow they still are fascinated by it and the oldest one has mastered it by now.

The project "create-react-app" is a good mixture of #2 and #3 that I have been using for almost a year with almost no issues, it's just a generally great way to use React. The only issue I had is that, even though all your configuration is "for free", you don't really get new features right when they come out. But you get them after their configuration has been polished up, so that you don't have to shave all the yaks yourself.

There's a nice little app called PICO-8 that retains that simplicity, I heartily recommend it for anyone who wants to learn programming (and I don't in any way get paid for saying this). Also that syntax is almost valid Lua which PICO-8 uses.

Can extend itself as it runs. For example Wordpress, running off of php files can download plugins to its own server (which are just more php files) to instantly extend itself. Without restarting or redeployment. (What other web platforms can do this?)

Since it's basically just doing eval(loadFile(...)), any language with eval() can do this, for better or worse. Which is like most of them. Perl, Python, Ruby, and Lua, to name the most common.

I specifically put a disclaimer on my website (sephware.com) that my apps don't even collect, let alone sell, any of your data. Ironically my app (Autumn) was rejected and not allowed on the App Store, even when I filed an appeal, because it uses Accessibility, despite there being a good handful of apps of the same type on the App Store that were grandfathered in before that rule, many of them long abandoned and receiving recent poor reviews with the users asking for them to be updated. I have aimed for Autumn to be not only one of the more polished and aesthetically pleasing apps on the App Store, but among the most ethically conservative also.

When I first encountered hooks about a month ago, I was absolutely confused about how the `a` in `const [a,b] = useState(...)` was just a plain JS object and not some magic proxy. It took me a good hour of researching before I understood that it was because React stores state that remembers the last time it called your component. I think a 20 second well-thought-out gif would clear this up for everyone who doesn't have an hour to devote to understanding this, and I strongly recommend considering it.

Now we can finally have completely clean data loaders:

Create a data loader hook that loads your data in a one-shot effect (you pass it the identities array), and which returns either a valid view (an error or loading view) and no data, or no view and valid data of type T. Then you can just do:

    const loader = useDataLoader(async () => {
      const a = await getDataA();
      const b = await getDataB(a);
      return b.data;
    });

    return loader.view || <MyView data={loader.data} />
I've been using this for a few months and it's amazingly clean compared to render-props. I hope this gets pulled into the React standard library.

It's an intellectual freedom that has no precedent throughout history. If you walked into a library in the 1950s and thumbed through a book about communism, you were probably put on a list. If you walked into a privately owned book store, the owners had a right to gossip and tell others what you purchased, and I'm sure many people unfortunately made use of that liberty. This isn't new.

My son and I have been trying to understand floating point numbers with almost no success, since it's usually explained with arcane mathematical symbols that neither of us understand. This page is brilliant and I'm going to show this to him, after editing the hilarious image with the owl. Why is profanity necessary to convey intensity? It's 2019, surely we have better ways of doing so by now.

This is an excellent layer on top of bash and has some overlap with concepts in other tools like fish shell, but it has me wondering, are we really at the end of the evolution of shells, so that we're now focused on making tools that improve shells? Or can we evolve the very concept of shells even further, making zsh and fish look like assembly language in comparison to Haskell?

This is precisely what drew me to start making Mac apps 10 years ago. There was a whole philosophy behind Mac OS X's Cocoa framework that contrasted sharply with my experience with all the programs I had been accustomed to using on Windows 95-98-2k-XP. In all those OSes, there was invariably some program I would need to run that had its own custom scroll bars that didn't work like normal, and the body of a scrollable page didn't respond to arrow keys and the scroll wheel, or the buttons had unusual semantics and required pressing them in certain ways. This was the norm for Windows programs. When I came to Mac and everything all worked the same, it was a breath of fresh air. The philosophy behind Apple's Human Interface Guidelines (HIG) at the time was that every app should follow the same basic rules with only slight variations where it made sense. I went full force into learning Cocoa because of this genius idea, but unfortunately now every app is Electron and each has their own UX paradigms that reinvent the wheel all over again. It's frustrating and I hope and plan to make apps that hearken back to the days of predictability, familiarity, and simplicity so people can just use their computers to get a thing done and then get off their computers ASAP, like it's meant to be.

We've been using Love2d and PICO-8, but he's a teenager. I too tried to teach him programming at an early age and then every few years after that, but none of it clicked until recent years.

Ethically I think the good old days of software products were superior to the current days of software services. Services are paid for by subscription or ads or selling data, so that they are forced to optimize for continued use. Products are sold as-is, with the hope that they are useful enough that enough people will buy them once and own it forever.

It should work this way: you spend N months making a useful product that fills a real need, start selling it, and ideally make just enough money to cover the time you spent working on it. As soon as you start selling it and money comes in, you start working on another product. This has flaws though. You have to have the cash up front to pay your own bills for the first N months. And you risk not making up the time you spent.

But what I see happening is worse: people make products that sell, get greedy over the money they can make, and milk that product to death, first by paid upgrades (which isn't inherently unethical) but then turning to subscriptions or free but selling you to ad- or data-companies.