366 karma · joined May 20, 2022
I was about to burn out at my current job at the time. Too much stress, too many hours, too much crazy. At this interview, every one I talked to talked about how “exciting” and “cutting edge” everything they were doing was. “We barely finish a prototype before they’ve changed the design and we have to start over without testing the last one.” “It’s very fast paced, stuff is changing all the time.” “We work over some. Last week, I put in 72 hours, but that’s not typical.” “A dozen companies have tried to solve this problem, but we think we’ve finally figured it out.” And so on. And it was a weapon technology, which I had ethical qualms about.
I called them back and withdrew my application. The HR guy said he was preparing my offer. I told him I didn’t want to see it. My biggest fear was that it would be enough money to tempt me to take the job and I would have been miserable.
Six months later, half of everyone there was laid off. They never got the big problem solved. They lost several contracts. Dodged that bullet (pun intended).
This was a go-to college meal. It’s great on a cold day, very filling.
One day, I made mushroom risotto. I used the right kind of rice. I ladled the made-from-scratch stock over the rice one ladle at a time, stirring slowly. I added the mushrooms and kept stocking and stirring. Finished with some fresh Parmesan. Took about 40 minutes of near constant attention and it was absolutely delicious.
Pareto Analysis:
The Campbell’s soup and Minute Rice is about 80% the same with minimal effort.
So far, the AI assistant in the EAP is one of the better AI integrations I’ve used in an IDE. I’ve used it for refactoring, simplification, generating XML doc comments, finding potential problems, but not much new code generation. I’ve also got Copilot, which mainly serves as a smarter autocomplete.
You do have to be careful - I’ve had it miss parameters on a refactor, but usually telling it “you missed parameter xyz” and it will correct it. But, hopefully, that’s just growing pains and it will improve.
I used a Quest 2 as virtual monitors for a week or so of real work and it was uncomfortable and sweaty and I was isolated and had to keyboard and mouse by touch, but the viewing experience was amazing. And I do use my Quest 2 frequently for games and “workouts” and entertainment. So I’m solidly in the market for this.
But the main thing is that I want to try it, mostly for the AR. I’ll reserve any fanboy comments until I’ve tried it.
Someday, someone is going to get AR/VR right. This isn’t it, but it seems to be moving in the right direction.
I don’t have high hopes for free space holographic displays, a la Star Wars or Minority Report, but augmented reality fills the same niche (with many of the same drawbacks and benefits).
Even the mistakes it made seem like the kind of mistakes people make, not the kind of mistakes software usually makes.
Maybe our personality and being is just a result of our training data with a few genetic quirks thrown in. And what am I really doing when I “decide” or “create” something? Is it that much different from a LLM’s generation of language? Or an AI image generator?
The resulting code worked. Took an interaction or two to add usage info and tweak things, but it’s a neat little utility. Due to the libraries used, it was also simpler than I expected and would have been easy to write if I knew about those libs, so I also learned something.
It’s just one or two steps away from just saying “Go to this YouTube URL and extract the video between 3:20 and 3:27 into an animated GIF named ‘CatAndRaccoon.gif’” and having it write, debug, and execute the code.
I had a bunch of PDF files with coded file names, like ABC-123-abc-999-001.pdf, where each section of the file name was meaningful. Inside the PDF were several form fields. I needed to insert records in a database for each of the 97 files. Easy, but tedious.
I prompted it with a description of the file name breakdown, where the text to grab was in the PDF, and then asked for a Python program to find the files (in subdirectories), extract the PDF text, and write a text file with the SQL Insert statements for all the files.
It took two or three minor iterations, but less time than it would have taken me to write from scratch because my Python is rusty. Regular expressions, PDF processing libs, file system traversal, and SQL generation, and it all compiled and worked from the start (the iterations were to tweak a few things I didn’t specify).
This is the kind of thing that I think is perfect for these tools. With the new tools that let the LLM compile and execute code, it will be cool (and potentially dangerous).
Let me try to restate this in a simpler way. A polynomial is a mathematical expression that involves adding and multiplying powers of a variable, such as x. For example, x^2 + 3x - 5 is a polynomial of degree 2. A coefficient is the number that multiplies a power of x, such as 3 in 3x. A coefficient vector is a list of all the coefficients of a polynomial in order from highest to lowest power of x, such as [1, 3, -5] for x^2 + 3x - 5.
Sometimes, we want to know what happens when we plug in different values of x into a polynomial. For example, what is the value of x^2 + 3x - 5 when x = 2? This is called evaluating the polynomial at a point. We can also evaluate the polynomial at many points at once, such as x = 1, 2, 3, 4. This is called evaluating the polynomial at a set of points.
The Fourier transform is a technique that helps us do this faster and easier. It takes a coefficient vector of a polynomial and transforms it into another vector that contains the values of the polynomial at a special set of points. These points are called powers of a primitive Nth root of unity. This sounds complicated, but it just means that they are numbers that when multiplied by themselves N times give 1. For example, when N = 4, one such number is i (the imaginary unit), because i^4 = 1. The powers of i are i^0 = 1, i^1 = i, i^2 = -1, i^3 = -i. These are the four points that we can evaluate any polynomial of degree 3 or less using the Fourier transform.
The inverse Fourier transform does the opposite. It takes a vector that contains the values of a polynomial at some points and transforms it back into the coefficient vector of the polynomial. This is useful when we want to find the polynomial that passes through some given points. This is called interpolating the polynomial from the points.
The Fourier transform and the inverse Fourier transform are very similar, except that they use different orders of the coefficients and the points, and they have to divide or multiply by some number (the scaling factor) to make sure everything works out.
The nice thing about finite fields is that they always have some numbers that can be used as powers of a primitive Nth root of unity for any N. A finite field is a set of numbers that has a fixed size and follows certain rules for adding and multiplying. For example, GF(7) is a finite field with 7 elements: 0, 1, 2, 3, 4, 5, 6. In GF(7), we add and multiply by taking the remainder after dividing by 7. For example, 4 + 5 = 9 mod 7 = 2 in GF(7). In GF(7), one primitive Nth root of unity for any N is 3, because 3^N mod 7 = 1 for any N that is divisible by 6. The powers of 3 are 3^0 = 1, 3^1 = 3, 3^2 = 9 mod 7 = 2, ..., and so on.
This means that we can use the Fourier transform and the inverse Fourier transform to evaluate and interpolate any polynomial in any finite field without worrying about finding the right points to use.
I hope this helps you understand better what the original text was saying. If you have any questions or want more examples, feel free to ask me.
Of course, new government regulations (not outright bans) are a lot of what drives the need for our software.
My favorite unusual accessory is a little 9 key mechanical auxiliary keyboard. I programmed it to be my debug keyboard with all of key combos for my IDEs debugger - run, stop, pause, next, step over/into, set breakpoints, etc. it saves a lot of time (or seems like it does).