HNHacker News
TopNewBestAskShowJobs

jake_morrison

1,254 karma · joined February 17, 2008

I help startups and entrepreneurs build products, serving as fractional CTO and managing the team at https://www.cogini.com/

Contact me at sales@cogini.com or https://www.linkedin.com/in/jakemorrison/

submissionscomments
jake_morrison··on Pure Sh Bible
I feel the same way about "advanced" shell scripting techniques as I do about "cutting-edge" accounting techniques: someone's probably going to jail.

I have written some big complex systems in shell and regretted it. My rule of thumb is that if a script needs error handling, it's time to write it in a real programming language. Tricky shell programs running as root are a real danger.

It's nice to know that some of these techniques exist, but better not to use them. Many of them have to do with string manipulation, which is a sign that a proper language with data structures would be a win.

Many people don't realize that perl is part of the Debian base system. If you are going to go crazy with one-liners, then that's a better tool. I would generally recommend Python, though.

Avoiding bash-isms is useful so that you can run under busybox shell, reducing the size and dependencies of containers.

Embedded systems often use shell. If you are tempted to install bash for more power, a better solution is probably lua. It's smaller and saner.

jake_morrison··on AOLserver is America Online's Open-Source web server (2010)
This was cool back in the early days of the web. It was used by Philip Greenspun, who wrote the classic "Philip and Alex's Guide to Web Publishing": https://philip.greenspun.com/panda/
jake_morrison··on Firefly – A new compiler and runtime for BEAM languages
I have been thinking about using the Erlang concurrency and messaging model for brower-based applications.

UI components operate in separate threads and communicate with the back end by sending and receiving async messages.

Back-end components communicate with servers using async messages, then publish results to front-end components.

This is similar to what Joe Armstrong was working on for X-Windows GUIs: https://erlang.org/workshop/2004/ex11.pdf

jake_morrison··on On a great interview question
As a real engineer, I ask what the practical problem is that they are trying to solve.

Seems like the practical application of this is to quickly disallow strong memorable passwords of the form "correct horse battery staple". https://xkcd.com/936/ If so, deeply misguided.

jake_morrison··on The one-sentence solution to almost all procrastination (no, really) (2012)
A similar piece of advice for entrepreneurs is, "don't work your feels, work your list". Don't wait until you feel like doing something, work on things that need to be done in order of impact and priority.
jake_morrison··on MQTT vs. Kafka: An IoT Advocate's Perspective
I have done a lot of work with IoT-ish data, e.g. sending location and telemetry data from vehicles and remote sensors over unreliable cellular networks.

I need the ability to queue data on the device to deal with patchy connectivity and some policy for deleting messages in the queue. For example, I might throw away unsent location updates that are "stale" to save space. I might need to prioritize some messages, e.g. "lithium-ion battery pack overheating".

I may be running on embedded hardware that is too small to run Linux. The connection to the modem might be serial.

Data size and bandwidth usage can make a difference. I might get 2MB/month for $3. Bytes count if I want to send frequent updates to get more precision on the location.

I generally know exactly what messages I am sending, so using a compiled format like gRPC or COAP (https://en.wikipedia.org/wiki/Constrained_Application_Protoc...) can be better than JSON.

I may need to get through multiple layers of network address translation, making it different to send messages back. So keeping a persistent TCP connection can help. But using TCP for one-off connections wastes bytes, so UDP can be useful if I don't care about losing packets.

I may want to encrypt or digitally sign your messages.

So, I end up doing a lot of work to handle queueing locally, but using a pretty simple message-oriented binary protocol to send to the server. The server can do whatever it wants, e.g. write it to a Kafka queue.

Amazon's IoT framework nails a lot of these points. https://aws.amazon.com/blogs/compute/building-an-aws-iot-cor...

jake_morrison··on Duolingo Max, a learning experience powered by GPT-4
I have been using Duolingo for years.

I find that you can't really learn anything, you can only practice something you already know. You won't learn grammar, it's only useful for sentence translation drills. And those drills are artificial, e.g. one sentence at a time, not using context, which is a big part of Japanese. It also has problems with characters with multiple readings (many). It often introduces a character and drills pronunciation before introducing the meaning.

While I have gotten use out of it for sentence translation practice in addition to other studies, I likely won't renew. I would recommend using another tool, e.g. LingoDeer.

I don't see this new feature as being useful. Instead of using ML to try to explain what I got wrong, how about just paying someone to write some text to explain the sentence?

Their sentences are already a bit odd. Now I am supposed to learn to talk like an AI? That's very cyberpunk. Sigh.

jake_morrison··on What Is Anglish?
My parents were English majors, and they met in Anglo-Saxon class. My father described speaking Anglo-Saxon as being like cursing all the time. Everything is basic words like "shit" and "blood".
jake_morrison··on Tell HN: Do not store any funds in PayPal or use them for anything critical
I went through a Kafkaesque experience with PayPal's Know Your Customer verification process. They screwed something up internally and decided that my company was in a different country.

https://www.cogini.com/blog/paypal-know-your-customer-failur...

jake_morrison··on Ask HN: Why did medium.com "fail"?
Some writers were attracted to Medium because it was easy get started. It was frustrating to me as a reader, because I was getting enough links there each month to hit the limit. I wished that writers would just set up their own site, which is also better for building their personal brand.

One interesting aspect of the Medium business model is that it can really deliver money for writers who get a lot of traffic. Medium effectively shares some part of the paid user subscriptions with all the sites they visit. So if you only visit one site in a month, they get all the money for that month. If that's a popular post, the writer might make a lot of money. But it depends on the subscriber not visiting many sites.

There is a theory that people will discover the writer's content just because it's on Medium, but that's certainly not how I find things. I follow links from social media or web searches.

If a writer consistently has a lot of good content, they will make more money at Substack, as they keep a larger percentage.

So the business model of users having a subscription to Medium as a destination site for discovery doesn't work particularly well. It doesn't benefit writers with consistently good content, and it doesn't benefit readers. So you end up with medium-value content that might get a windfall. It's kind of an SEO game.

Reminds me that I have hardly seen any interesting links to Medium lately, and I should cancel my subscription.

jake_morrison··on A Spectre Is Haunting Unicode (2018)
In the 90s I worked on a project to digitize land registration in Taiwan.

In order to record deeds and property transfers, we needed to enter people's names and official registered addresses into the computer system. The problem was that some people used non-traditional writing variants for their names, and some of their birthplaces were tiny places in China with weird names.

Someone might write their name with a two-dot water radical instead of three-dot radical. We would print it out in the normal font, and the people would lose their minds, saying that it was wrong. Chinese people can be superstitious about the number of strokes in their name, so adding a stroke might make it unlucky, so they would not buy the property.

The customer went to the agency responsible for managing the big character set, https://en.wikipedia.org/wiki/CNS_11643 Despite having more characters than anything else on earth, it didn't have those variants. The agency said they would not encode them, because they were not real characters, just printing differences.

The solution was for the staff in the office to use a "font maker" program to create a custom font with these characters. Then they could print out the deeds using a Chinese variant of Adobe Acrobat, and everyone was happy.

jake_morrison··on Guile Steel: a proposal for a systems Lisp
Sounds like bitC: https://web.archive.org/web/20160529063027/https://www.bitc-...

It was basically a lisp syntax for C, which enabled things like lisp macros. It died when the author went to work for Microsoft.

jake_morrison··on Ask HN: How is Python's OOP is superior vs. Lisp CLOS?
Multiple inheritance can be confusing, but it's also powerful.

There are generations of Java programmers who have decided that because Java doesn't have multiple inheritance, it must be bad.

People mostly use frameworks these days, so inheriting from the framework uses up our one opportunity to have inheritance. Then when we would like to use it later to consolidate common code, we can't. Or we use ActiveRecord, but then can't actually, god forbid, model our domain using an inheritance hierarchy.

At this point, I think OO has failed to live up to its promise, and I instead use functional programming and macros.

jake_morrison··on Ask HN: Having trouble getting senior applicants, wondering what to do about it
I did one of these after a long day spent deep in the guts of the web framework (Elixir/Phoenix) trying to optimize performance under DDOS on an ad-tech system.

They gave me a codebase with a "REST" API for their mobile client that had some problems and wanted me to spend "4 hours" adding features to it and fixing any problems that I saw.

I made the changes, then told them that the biggest problem was that their REST API was just ad-hoc JSON over HTTP, with ill-defined data and poor error handling. I recommended using GraphQL, which defines the over-the-wire format and error handling, reduces network round-trips, and is "self-serve", avoiding many meetings between front-end and back-end people and increasing dev velocity.

This was too much for them, as they were expecting some changes to put lipstick on the pig. I said that there were other REST-based frameworks that would add standard structure (e.g. JSON API) and support introspection with e.g. OpenAPI.

I got rejected because I "didn't have enough experience with the framework", and "it didn't seem like a good fit". Their "seniors" doing the interviewing were not able to build a system that worked before they ran out of money, and they are now out of business.

jake_morrison··on Ask HN: How is Python's OOP is superior vs. Lisp CLOS?
Python's OOP is not superior to CLOS. CLOS is very full-featured. Python's OO does support features like multiple inheritance, which makes it more sophisticated than e.g. Java.

One CLOS feature that is particularly interesting is multi-dispatch. When you call a method, most languages implement polymorphism by looking at the class of the object and call the corresponding method in the class. In CLOS, it looks at all the parameters of the method. This is similar to pattern matching in functional programming languages like Elixir.

https://lispcookbook.github.io/cl-cookbook/clos.html

jake_morrison··on ZeroStableCoin is out from stealth mode
One of the most interesting things is that Sears shut down its catalog business in 1993, right before Amazon was started.

They could easily have been the dominant e-commerce retailer instead of Amazon, if only they had strategic vision and good management.

jake_morrison··on Ask HN: Why does nobody support h.265/HEVC anymore?
Mobile support comes from the chips (SOC) that the phones are using. Hardware codec support is a major differentiating factor for mobile chips. It has a huge impact on power usage, e.g. decoding video or audio in hardware could be 10x more efficient.

It's common that the manufacturer doesn't actually get a patent license, they get "indemnity". If someone were to sue you, the chip manufacturer would handle it, because they have their own patents and have cross-licensed with the others in the pool. You may have to pay the chip manufacturer for the indemnity in addition to the chip costs, i.e. "paying protection money". "That's a nice restaurant you have there, it would be a shame if someone set it on fire. We can protect you from bad people like that."

jake_morrison··on Ask HN: Why is Hacker News so anti-crypto?
In the .com days, I was active in the e-commerce space, using public-key cryptography to solve problems. We had digital certificates, digital signatures, etc, which we used to solve various problems like authenticating and securing access to websites, creating encrypted and signed emails, etc.

One thing was non-repudiation, i.e. if I send you a digitally-signed email with a purchase order, then you can legally rely on it. There were some attempts to use similar techniques to allow trusted third parties to register documents, but nobody was willing to pay for the service.

jake_morrison··on My Taipei Quarantine
That's partisan nonsense.

China was pressuring the manufacturers, i.e. "Taiwan is part of China, so you should sell to us and we will give them to Taiwan." Then they tried to pressure Taiwan for concessions to get the vaccines to save their lives. Taiwan ordered vaccines, only to have them not show up. They had to trade chips from TSMC for access to vaccines.

This is the same as China using political influence and corruption to keep Taiwan out of the WHO.

jake_morrison··on My Taipei Quarantine
I have been living in Taiwan through the pandemic. The response has been exemplary.

Life has been normal, other than the need to wear masks and scan QR codes when entering shops to enable contact tracing. There has been very little actual risk and fear of infection.

We haven't had a lockdown, and until recently, cases were below 10 per day. You can go a long way with good quarantine and testing policies.

Now the cat is out of the bag, and Omicron will soon be everywhere, but the health system will be able to handle it.

Tight quarantine gave us the opportunity to get people vaccinated. It was initially difficult due to lack of vaccines and interference from mainland China. The vaccination rate is now above 85%. There are still people who have been resistant due to the global anti-vax movement. This will cause unnecessary deaths, particularly in the elderly.

My main criticism of the government was that they have been unnecessarily strict in issuing resident visas. They also could have been clearer about how long people on temporary visas could extend them.

jake_morrison··on Khan Academy launches Khan World School online high school
The majority of the costs associated with universities is for facilities, administration, and housing, not related to teaching.

If students attend classes online while living at home, then the costs go down dramatically. You are left with paying on an hourly basis for a tutor. When my daughter took the AP tests in Oklahoma, some of them were done in nearby churches. They can deliver test proctoring for cheap.

You can already get a respected online master's degree in computer science from Georgia Tech for around $10k. And you can do it at night, while working, eliminating opportunity costs.

This is incredibly cost-competitive with traditional schools. The elite schools will be fine, as they are essentially offering a private club for rich kids.

Other schools will not be sustainable. These dead universities will be great for remote workers, combining office space and housing in a nice walkable campus environment.

jake_morrison··on Khan Academy launches Khan World School online high school
Imagine a physics class with the budget of a Mythbusters episode. The result is pedagogically sound content, the best presenters, and a budget for graphics and special effects. With enough students, the cost per class is very low, less than what we pay for school now.

Students will still need access to people to help when they have questions. And there is a need for some proctoring of exams/certifications.

I expect that the top universities will create content, e.g. Harvard, MIT, Stanford. Then they will partner with local universities and community colleges. Or people can just hire tutors if they need them.

This will wipe out a lot of lower-tier schools.

jake_morrison··on SELinux is unmanageable; just turn it off if it gets in your way
I have built ad-tech systems which get large amounts of traffic and continuous hacking attempts/DDOS attacks.

In 10 years, the servers have never been hacked. I went to the trouble of enabling SELinux and locking things down. Not sure if it was all needed, but I can't say I am unhappy I did it. After setting things up, it hasn't been a problem.

jake_morrison··on I must announce the immediate end of service of SSLPing
The best use of free tier is to allow engineers at big companies to try things without having to get permission from someone.

There can be a lot of abuse, though.

jake_morrison··on Tea – the toolkit that builds the Internet
Apple needs to fund a proper package repository.
jake_morrison··on Ask HN: Who operates at scale without containers?
AWS has a fine stack for deploying "cloud native" apps on top of EC2 instances.

Build a base AMI using Packer and launch it to an Auto Scaling Group behind a load balancer. Deploy code to the ASG using CodeDeploy. Use RDS for the database.

This is a good match for languages that have good concurrency like Elixir. They benefit from deploying to big machines that have a lot of CPU cores, and keeping a common in-memory cache on the EC2 instance is more efficient than using an external cache like Elasticache. It also works well for resource-hungry systems with poor concurrency like Ruby on Rails. Putting these kinds of apps into big containers is just a waste of money.

Here is a complete example of that architecture using Terraform: https://github.com/cogini/multi-env-deploy

Similarly, bare metal can be really cost-effective. For $115/month, I can get a dedicated server with 24 VCPU cores (2x Intel Hexa-Core Xeon E5-2620 CPU), 64 GB RAM, 4x8 TB SATA, 30 TB traffic (see https://www.leaseweb.com/dedicated-servers#NL). That would be an order of magnitude more expensive on AWS with containers.

jake_morrison··on Ask HN: Do you know of freelance dev work with text-only communication?
I have worked with a lot of developers who I only communicated with over text/email/Jira tickets. It's pretty common in remote/international consulting.

If you find a company that is doing async remote, then you would be fine.

You might tell people that you have a hearing impairment.

jake_morrison··on Ask HN: Co-Founder Equity Split
A model I like is that founders need to earn their equity, i.e. everyone gets restricted shares.

So you determine what work needs to be done and the value of doing it. If you do that, you get your shares. If people don't deliver, they lose their shares, and you can compensate new people with those shares or other founders can get compensated for doing that work too.

Monetary funding is separate from that. Putting in cash gets an instant percentage of the company. That's usually e.g. 20% of the company for putting up the cash, even though based on risk it should be more.

jake_morrison··on What use is mental math in 2022?
In consulting, I have had to train myself to not give specific answers in a sales call. Any number for cost or delivery date that you give a customer will become stuck in their head, and you will have to fight to change it to match reality.
jake_morrison··on '50% of transactions were fraudulent' when Steam accepted Bitcoin for payments
I ran a web hosting business. We had a word for people who wanted to pay for servers with an untraceable currency: criminals.
← PreviousPage 2 of 7Next →