HN user

Tommah

438 karma

I am a software developer who has worked mainly at local startups. I have experience with Python, Django, PostgreSQL, AWS, GCP, and many niche technologies. You can find out more about me at https://www.amecy.com/work/ .

If you play chess, try my tactics trainer at https://www.checkmatechamp.net/ . (It requires JavaScript to be enabled.) It uses Python on the back-end and OCaml and JS on the front-end.

I am looking for work, either full-time or contract. You can reach me by email here:

hn AT amecy.com

Posts2
Comments128
View on HN

I'll add my two cents here. A lot of the work that goes into a codebase doesn't necessarily appear in the final product. Sometimes code is hastily written to get the system working, and then it has to be rewritten to be faster or more stable or what have you. A rewrite can just reimplement the final code. Sometimes the company changes direction (think of the stereotypical aimless startup that pivots every Tuesday) and the code solves a problem that the company is no longer interested in. A rewrite can just ignore that code. Some of this has to do with technical debt, but it's also due to the fact that it's easier to do something when you know exactly what you're trying to do.

It's like the difference between between reproducing a proof from a math textbook and actually proving a new theorem yourself. The latter takes a lot more time and effort, even though the amount of work in both cases looks the same from the outside.

Django has the function render (it used to be render_to_response) that takes a template and converts it to HTML. So it isn't just the JS people who are using the idea of rendering in this sense. More generally, rendering doesn't necessarily mean something visual; for instance, one may talk about how a phrase in one language is rendered in another language.

(I'm also 39. You and I may see each other at the shuffleboard court soon.)

You're right about D, but Rust is drawing some people away from C and C++. Something may emerge that will do the same on the JS front-end. In fact, I'd say that the TypeScript/React combo is more susceptible to being replaced than C and C++ are. There are many large C/C++ codebases that represent many man-years of work and won't be rewritten or thrown away any time soon. JS front-ends don't have that kind of longevity. Think about how many web startups just fizzle out, and their code just goes away.

This is pretty poor writing by PG here. What is "neutral opinion"... fact? Or the people who answer "I don't know" in political polls? And saying "Actual frauds are usually pretty conspicuous" is silly. If an attempt at fraud were really obvious, it wouldn't trick many people. The big frauds are the ones that are outwardly plausible and therefore trick lots of people.

Google I/O 2024 2 years ago

My Chrome installation updated itself recently, and when I restarted it today, it asked me whether I wanted to enable new AI features. I told it no. In retrospect, if it were really intelligent, it would have known I was going to say no.

bee_rider already touched on this in another comment, but the theorem makes sense if you consider a matrix with large diagonal values and small off-diagonal values (in magnitude). If I have a matrix with 1,000,000 on the diagonal and 1 everywhere else, I'd expect the eigenvalues to be 1,000,000 plus or minus some small error. The Gershgorin disk theorem proves this and puts an upper bound on the error.

The diagonal elements of matrices have a lot of rather "magical" properties if you think about it. Their sum is also the sum of the eigenvalues of the matrix. And if you have a matrix A that is singular, you can choose any value x that is not an eigenvalue, and then A - xI is invertible but still mostly behaves like A.

SuperTux 2 years ago

DOTA 2 gets rebalanced constantly; certain characters are made stronger or weaker. Overwatch also received some major changes relating to team composition.

Yeah, I think they're trying to say "Stop writing in C and C++, blockheads!" but in a more diplomatic tone. Most of the common languages today are memory-safe. Really, which ones aren't? C and C++ are the big ones. I guess throw Pascal in there if you don't use pointers correctly. Assembly lets you make indirect accesses anywhere in your allocated memory. Perl lets you leak memory if you create circular structures and then lose references to them. But Java, JavaScript, Go, Python, Ruby, etc. don't let you trample all over memory the way C and C++ let you. You can corrupt memory if you really want to, e.g. in Python by using ctypes to cast integers to pointers, but it takes a lot of effort.

I still see a lot of outdoor signs that alternate between showing the time and the temperature. They're usually outside banks, and near apartment buildings sometimes. Libraries probably still have clocks; they want people to know how close they are to closing time.

One of my startup jobs paid us through ADP. While our ADP account was being set up, my boss told us to be on the lookout for an email from them. So one day, I'm in the middle of programming something, and I check my email. Lo and behold, there is an email from ADP... or is it? It is about fifty words long and contains five grammatical errors. It's asking me to fill out the attached PDF and email it back. The PDF is asking for my full name, address, phone number, SSN, and so on. I figure this may be some kind of phishing attempt, so I ignore it and get back to my work. If it's real, I'll hear about it again, right? Well, two weeks later, my boss tells me amazedly, "Hey, Bill from ADP is still waiting for your information! Why didn't you reply to him?!?!" I laughed and told him why.

As a bonus, when I was finally put into the system, they managed to get my zip code, phone number, and SSN wrong. At ADP, quality is job zero.

I was doing something like this recently, where I implemented movements for the kings and rooks. I didn't even implement check or checkmate; basically, you win by capturing the king. I think that took me about 2.5 hours.

My bet is that the next "hip" thing will be either off-line or off-tech.

IME, the Internet was much cooler when it took real-life things and improved upon them. If you're a writer, you can post something on a blog, and now potentially anybody in the world can read it. If you like to play chess but you're in an isolated area with few other players, you can go online and play on there. If you have kids and you want their grandparents to see how they're growing, you can send them the pictures online, etc., etc. But so much online activity these days is only about itself, and it turns out vapid and pointless. Manufactured outrage on Twitter, "lifestyle" pics on Instagram, political battles with your cousins on Facebook, etc. really add nothing to anyone's life. And these things only exist because the platforms are there to provide a place for them. No one walks down the street looking for strangers to argue with, or holding pictures of food to show to people. I hope we, or at least the younger generations, will eventually see Twitter and Facebook and the rest for the wastelands that they mostly are. And I hope something else comes along that lets people actually hear each other, that magnifies good ideas, and that rewards effort.

Linear algebra was the first math class I took in undergrad. I thought the next one was going to be non-linear algebra! But it wasn't.

Years ago, I worked for a startup that was trying to build a recruitment platform. We fed résumés into a few different SaaS résumé parsers, but the results that we got were generally unsatisfactory. They worked perfectly on maybe 5-10% of the résumés. The rest of the time, we would see some bad results, ranging from minor errors to total nonsense. Maybe AI will make these systems work better and produce more consistent results, but... hey, why are you laughing?

Anyway, a lot of these parsers resembled prototypes that could be solid systems if additional work had been put in, but this additional work had never actually been put in. My favorite example: one parser reported that a lot of the résumés showed experience with storage area networks, even though most of our résumés were from nurses. Hmm. It turns out that a lot of the résumés were from San Francisco, and the parser saw "San" and said "Hey, San is short for Storage Area Network!" This is stupid on several levels, but this is what goes on with these tools.

More recently, I applied to a job opening that was on one of the ATSes that are popular today (I don't remember which one). When it analyzed the text in my résumé, it determined that I worked at a company named Software Engineer. Oddly enough, it couldn't figure out what role I held at that company. These are tools that people pay money for, and they can't figure out that Software Engineer is a job title and not a company. It boggles the mind.

So if you apply to hundreds of jobs and you keep getting rejected, keep in mind that a lot of those rejections are because of nonsense like this. You'll also understand better why so many people advise you to look for jobs through your network. Your former coworker Bill will be able to explain who you are and what you worked on, while that newfangled ATS that just got another $10M in funding may look at your résumé and just get confused.

I think it's résumé-driven development taken to the extreme. Someone at Instacart just added a line to their résumé: "Integrated generative AI into core product, increased media coverage of company by 300%." Now they just have to cross their fingers and hope their prospective employers don't read Business Insider. (Or use Instacart, I guess.)

I hope that our industry eventually revisits (or arrives at) the idea of doing worthwhile things and doing them well. All the software job descriptions these days say that you should know Docker and Kubernetes and AWS Lambda and Terraform and MongoDB and Cassandra and Cloudflare and GraphQL and so on.... Meanwhile, their Facebook-for-dogs site gets ten visitors a day, and it runs dog-slow (pun intended) because their ex-FAANG dev lead wrote code that is bubble-sorting a billion items in main memory.

Back when Facebook games were really popular (Farmville and Bejeweled Blitz come to mind), Facebook was infamous for making breaking changes constantly. I remember this specifically because my friend told me that I should move one of my games over to Facebook, and I told him that if I did that, keeping it working would be a full-time job.

It works fine for a small team (probably three people or fewer), especially when you're still building the product and don't have it deployed yet. Breaking things isn't a major concern at that point. After people have started using your code, or if you hire a bunch of developers, then you probably want to be more careful.