Feel free to email me if you want advice for what you have in mind. My email is in my profile.
253 karma · joined April 27, 2021
Feel free to email me if you want advice for what you have in mind. My email is in my profile.
I wouldn’t consider that stagnate.
I was in your situation once. I started remote contracting, then moved to a developing country where I could live on very little of my country’s currency, then started working less.
Instead of feeling stuck, start exploring all the different ways you could live. Here’s some examples to get you thinking:
- Get a remote job and travel and live in cheaper places.
- Figure out how to earn more money with programming. You’ll still be in the M-F grind but you’ll have more money.
- Downsize and live with roommates or parents, so you’ll save more money.
- Join a Buddhist monastery and live with no bills or job at all.
- Work part-time. Make less and live with roommates, but have more free time.
- Consider other ways to earn money besides programming. Become a personal trainer, do landscaping, work at a cafe, teach language classes, become a chef, write ebooks, there’s so many ways to earn a living.
I use a virtual mailbox service, physicaladdress.com. They scan my mail and give me an online interface to view it. If I want, I can choose to scan the contents, forward it, or shred. It’s not a PO Box so I can use it as a real address.
Use <a> for links, use <form> for user input, with <label> and the proper input elements. Use the alt attribute for images that communicate information. The most common accessibility issues I see are recreating input without forms, and recreating links with anchor tags using JavaScript.
The only thing that I usually can’t find a library for is API clients for various services. Most companies don’t make a haskell client. In these cases I have to make HTTP calls to their API myself.
I am wary of large frameworks, so I have not tried IHP. It looks nice though.
Here's an example of a working app using my approach I described above: https://jsbin.com/putonutica/edit?js,output
The two functions, render and dispatch, are essentially the only code I share across the projects. That's the whole "framework". It's 19 lines of code. All it requires is a link to Preact, which is 14K. Oh, and I just keep everything in one big file. Simple, but I've built multiple complex single-page JS apps with this approach.
I'm sure someone will tell me I'm doing it all wrong, and I need to use Next.js with webpack, a giant stack of npm packages, code-splitting and bundling, and whatever craziness front-end developers are doing today.
If zero downtime is required, I write the code to migrate the data to the new schema. Then update the app to write to the new schema while reading from old and new schemas. Then in a subsequent deploy after data is migrated, I write code that removes support for reading from the old schema.
- I try to avoid JS. I do progressive enhancement with vanilla JS, and avoid JS webapps unless absolutely necessary. If I need to write a JS webapp, I use a purely functional approach. I found that when writing React, using frameworks, using TypeScript or PureScript, I lost so much time and effort managing my build step and fighting with APIs and package churn. I use preact with the htm library, vanilla JS, and most importantly no build step and no npm. I don’t use a framework. I use a purely functional approach inspired from Haskell/Elm. I have an update function which returns a new state and effects from the current state and event, and a dispatch function which is attached to onevent props. The dispatch function calls the update function, renders, and runs effects. These few functions are 20 lines of code.
- No challenges specific to Haskell so far. Of course I had to learn the ecosystem when I started, which packages to use, language and tooling gotchas, etc. but that is the case for any language.
Haskell has a mature library for JSON, Aeson. I often use it to interface with APIs. You write your type, then functions to serialize/deserialize. Records using simple types (Text, Int, Maybe, etc.) can automatically derive the serialize/deserialize functions using generics.
Funny you mention PDF, because I’m doing that right now in Haskell for a resume builder project. There’s a few libraries for working with PDFs. HPDF (https://hackage.haskell.org/package/HPDF) supports all the basic functionality you’d expect to create PDFs.
There are plenty of Haskell developers, though not as many as more popular languages. Hiring for Haskell is more competitive, but easier to attract developer attention.
- Twain (like Sinatra) for server and routing: https://hackage.haskell.org/package/twain
- WAI middleware for things like static servers, rate-limiting, body-parsing, etc.: https://hackage.haskell.org/package/wai-extra and https://hackage.haskell.org/package/wai-middleware-static
- Blaze-html for writing HTML views: https://hackage.haskell.org/package/blaze-html
- Selda for a LINQ-style type-safe SQL interface to PostgreSQL and SQLite: https://selda.link
I’d be happy to answer any other questions about developing web apps with Haskell or libraries I use.
Originalists want it to be interpreted in the way it was intended. They go to great lengths to discover the original intent behind the law as it was understood at the time of writing.
https://en.m.wikipedia.org/wiki/Originalism
I’m honestly amazed that any other position but originalism is considered rationally tenable. Laws are written with an intended meaning and understanding. The idea that the intent and meaning of law should change with time is ridiculous. The law should be changed if people come to find it disagreeable, not reinterpreted. Judicial activists seek to subvert the will of the legislature, and in that way they are criminals.
Even if a product doesn’t necessitate a subscription, the revenue compounds, so subscriptions can be 10-100x the revenue of a one-time charge.
For example, if you operate out of a place like California, they charge $900/year even if you have no revenue.
It's not Google Reader, but it's a clean interface for reading RSS, Twitter, and newsletters. And there's a view of the latest post from each feed, so I don't get lost in the firehose and miss out on updates from people who post less frequently.
Why create another reader?
- Sumi.news has a per-feed view, showing only the latest entry, ordered by most recent update. I couldn't find this in other readers.
- Sumi.news is simple. There's a single, clean, chronological feed. Unread counts stress me out, tags and bookmarks are better left to bookmarking services.
- Sumi.news is fast and light. Many other reader webapps are slow, heavy, client-side JS apps.
- Sumi.news is affordable. It's $33 per year. No limits, ads, or business plans.
- Sumi.news lets you follow newsletters and microformats2 blogs (indieweb blogs).
Tech stack: Sumi.news is built with Haskell and PostgreSQL. It uses Warp/WAI, blaze-html, and selda. It's hosted on Linode.
Because you're single with no kids I would get a room in a house with others. That way you're not spending all your money on rent.
I think the solution is to stop sitting around on the computer/phone in the first place. If you stop using YouTube, but sit there on your phone for no reason, you’ll just end up wasting time on something else.