What are you doing this week? Feel free to share!
Keep in mind it’s OK to do nothing at all, too.
Animal crossing is our only hope
Working full time on my java compiler (which I’ve posted at least three times in the past months, sorry if that’s now bordering on spam).
Getting lambdas working has taken a long time, but I might be done now. The lambda/invokedynamic part of java and the JVM is a many-layered beast, and my implementation was troubled by several of nasty compiler bugs, the kind where the consequences show up >100k instructions after the problem. Those are usually simple to solve once I can reduce them to a simple test, but the reduction can be a real pain. Facing yet another bug like that is an open invitation to procrastinate. Which is how I found out that Naviki has an excellent procrastination function: Click the loopish icon and enter your preferred distance, and it suggests about eight roughly circular trips.
Haven’t worked that much due to some recent illness. If you get a massively sore throat and a bit of fever, and it passes, my advice is to stay in bed for another week. Don’t assume that you’re well after just one day. This spring’s illness is a sneaky, nasty one, not like a flu.
This week I hope to be able to run my first real time-domain benchmark.
Interesting. Reading your comment below, why not just implement a JVM, rather than the entire compiler toolchain?
That’s sort of what I do, but my code has enough knowledge of Java that I tend to name one language rather than pretend to handle more… the code does parse .class files as input, but it also uses the debug info in the .class files, knows the java type system, does static analysis that probably assumes things, implements many native methods specified by the JDK, etc, enough that it’s somewhat tied to Java. I’m sure it also has unintended dependencies on Java. So although I secretly expect it’ll also work for Kotlin, Clojure etc. with modest effort, I prefer to say just Java.
Why are you building a Java compiler? What are you targeting? Source available?
No source available yet, for several reasons.
I’m building it because I found a way to do garbage collection that I thought should be very much better than the state of the art, and general enough to handle java and probably most languages that target the JVM, but it not possible to implement by modifiyng e.g. hotspot. That is, the Java specification permits my scheme, but the javac/hotspot implementations don’t.
Very much better means much lower memory requirements for most programs, better insight into memory use, predictable performance and perhaps better CPU performance, or perhaps not, I’m not able to measure that yet. I’m targeting headless servers, the kinds that are used by the hundreds or thousands to run a single codebase.
Your next question is perhaps: Explain the GC scheme. I’ve tried to (against advice) and failed. But it works, I’ve the running code to prove it. And I was very relieved when I first saw it run on a complicated self-referential data structure and it it worked, even though n people had told me it couldn’t ;)
Wouldn’t your proof-of-concept be easier with an easier language, like Lua?
I considered about half a dozen languages, including one like Lua.
A proof of concept makes a set of practical effects appear doable. Changing the proof of concept changes the set of practical effects that people will believe in. People’s beliefs may be wrong, they may misunderstand the scope, but that’s life. I concluded that a language like Lua would give me unimpressive, uninteresting results. Results that would not appear likely to be applicable to the kinds of problems where the effects would be bigger.
Well I’m very curious to read more prose about the project and also some code. I work on runtimes for a living and I’m fascinated by everyone’s personal projects. Please do keep us posted.
I’ll post again once I have numbers. Really curious myself to see the effect my code has on e.g. the branch predictor cache. Thanks.
Working on my semantic web framework/database called Lyncex. Maybe this week I can create a website. It’s made in Prolog.
Could you keep us posted? I’m really interested to see what you’re creating.
Yes, of course! It’s my end of degree project, so I will finish “something” at some point. There’s a GitHub repo but no docs and I still think is not very useful yet.
Making pasties, marathoning John Wick, and rationing beer.
Well this weekend I began some assembly experiments. The goal is to stay close to metal while using macros to achieve easy to type and more dense instructions. This week I’ll continue to implement random programs to explore this space.
Here are my experiments so far:
These are valid assembly files - I’m just using unicode characters in my macros and line separator (;) to make it denser.
Comments and concerns are welcome. :)
Other than that, Battlefield 1 is back online (down all weekend), so I’ll be playing that and the usual DS2.
For work, implementing a new fully specified system. :D Get to live in TypeScript world for a bit which is always a pleasure.
All hands on testing is out the window so focusing on simulating new RF power amplifier designs
Spending some time contributing to open source tools (QUCS, scikit-rf) in the hope that one day the field won’t all be proprietary
Reviewing Google Summer of Code applications
General code reviews & fixes
Trialing some 1:1 peer programming/mentoring with community members
Clearing/gardening our tiny backyard since it’s our outside for the next 3-6 months
Figuring out PCIe on FPGAs with LiteX, a Python based System on Chip generator
How are you finding Nomad? We’re using k8s at work and I find it to be disproportionately complicated for what I suspect 95% of people need, us included.
So far me and my team really like it. Compared to k8s I would say that its an order of magnitude simpler. We currently run (in a separated cluster) all our monitoring tooling: ES cluster (~30 nodes), multiple Prometheus instances, M3, etc. and a bunch of periodic jobs.
One of my coleagues wrote an article sometime ago about why and how we do our normal operations with Nomad: https://tech.trivago.com/2019/01/25/nomad-our-experiences-and-best-practices/.
I’m taking leave from my job for two weeks and taking primary parenting responsibilities while my wife figures out how to run a law firm remotely.
$work: end of Q1 deadlines + goals
Mostly relaxing, maybe a little bit of blogging, and otherwise just playing with whatever takes my fancy. I have a few longer-term side projects, but I’m taking a bit of a break from them for a couple of weeks
Yesterday I ordered a nice big dedibox from Hetzner that I’m planning on replacing some older VPSs with - I’m using it as an opportunity to play with some hypervisor stuff until I can get my homelab properly setup
@work Second week focused on removing our legacy persistence layer. It’s my white whale. I started debugging through it early on after joining the company, and it was weird, and confusing. I kept diving back in, and eventually ended up knowing more about it than anyone else except perhaps one person (who didn’t want to touch it at all).
At some point, unprompted, I wrote up a plan to replace it. Two CTOs later, we’re replacing that layer (using a descendant of my plan that was refined by some consultants). Code is being committed (all currently feature flagged), a new schema is mostly done, there’s a migration plan, etc.
@home Working through the Art of Prolog, though a bit slower, now that the Nintendo switch popped up and said “Did you know I have Final Fantasy 7? You’ve wanted to play this again for 15+ years, haven’t you?”
I’m going to have a longer week than normal. My partner works as a shelter coordinator for a domestic violence shelter. Due to new COVID policies her schedule is shifting, as such I’m shifting to work Friday - Tuesday to match.
Right now things are kind of in a weird state.
Right now there is no specific large feature targets. I’m hoping we can use this rest-bit to do a series of papercut releases, and possibly refactor and retool some needed parts.
What’s your go-to bread recipe?
Since last week I’ve been thinking, why isn’t there a better recipe database?
So bearing in mind I’m a terrible baker. I use weight rather than volume. My go to recipe is just a ratio:
For the rest of the instructions I’ll use an sample 500g of flour so between 300 - 350G Water, 5g yeast, & 10g salt.
Due to the store being out of yeast I’ve basically turned a yeast packet into so pseudo sourdough starter and have been feeding it every day. Its actually made some of the best bread I’ve made.
There has been a couple of versions that attempts to apply git’s branching system to recipes. Forkthecookbook and cinc.kitchen being the two that I remember the best. It an interesting thought though. Recipes can’t be copyrighted and the the data is generally well structured (e.g. ingredients, steps, cook time, notes, etc.).
EDIT: I had a conversation a long while back on the big orange site on this a while back.
Surviving another week of work. Hoping to get a project out we’ve been working on for some time now.
In the meantime, playing Mount & Blade II: Bannerlord, a game eight games in the making. This pandemic will give me the justification to sink hours into this game.
2D C99 game engine. 4900 LoC, not including 1350 of comments. I’m still plodding along.
I’m writing a cookie-less privacy-friendly web analytics tool for my websites and my friend’s sites too. I know there are similar tools but I thought it could be pretty fun to write my own — and it is.
Maybe I’ll set up a public access if the tool is useful enough for us.
Other than work, which I’m not sure how much I can talk about:
Working on Alloy documentation and updating workshop exercises.
Reviewing notes on a concept for a disease surveillance data aggregation platform for some countries, working on a research data collaboiration/sharing tool and trying to expedite development on it to get some data sharing happening between orgs on COVID-19 research.
Predictably, with less than a week of billable time left, my “client” (scare quotes because only scare money is involved) has finally had a deep and dramatic change of opinion on how the IA for our app should be organised. So I’m mostly completely rebuilding that. My evenings are largely music sessions held over Zoom or Jitsi.
As a technical co-founder of a company that’s trying to bootstrap, the past month (even before the global lockdown) saw me transitioning to marketing/sales role, something I have zero knowledge of. But in order to survive we also need to sell. It’s a SaaS app for product managers, and it’s a hard sell due to competition. Been reading a lot of resources on sales and found Founding Sales a good resource so far.
Working on a checkin app for ice swimmers. It’s a very popular hobby in the country I live in, lots of clubs. But the only means to track down how much, for how long, and where is by making a note in the paper journal. Decided to try functional languages for this one, Elm and Elixir. It’s still very much in the early stage and will probably be ready for the next season, but going good so far. There’s source available but it’s quite ugly at the moment as I’m doing a lot of prototyping.
Living next to a forest I see lots of fallen trees after winter storms and was thinking of a good use for some of that timber. I only have a hand saw so quite limited in ideas but eventually settled on a small chair made entirely of a single piece of log with no nails. I have cut a ~70cm tall log today and will cut out the inner part to have 4 legs.
Trying to build my own PHP* CRUD generator (yes, really..). Too often I just need something simple (ie a view on some tables). And access to phpMyAdmin is too risky/non user-friendly. And I’ve built the same-ish Bootstrap forms too many times, I thought I could optimize this.
Symfony, Laravel, Yii2, Django and Codeigniter (I have used all these / currently run these in production) are just overkill. It still rubs me the wrong way to deploy 80MB of code for a few PHP pages (which most of these frameworks do).
The goal is connect to a DB, select / set some things and generate CRUD pages. So far (this weekend) I built something to connect to a database, visually select the right tables (give them proper readable names), select the columns (give proper names etc.) : so now I’m looking at using all these variables (stored in one big multidimensional array) to fill PHP templates (or just raw echo / HEREDOC the files…).
*why PHP? Because it’s ubiquitous. You should be able to wget this script/tool and get going.
At work, my current major project is rewriting some front-end stuff. Our whole UI got overhauled for the last major release, and most of the work was contracted out to a cut-rate web dev studio who produced a giant mess – which, for some reason, we shipped anyway! Our customers are complaining about how the first page of search results is taking sometimes multiple minutes to load (although the rewrite is only slightly slower than the previous production version, which they’ve been happily using for a decade), so my manager & I have been put on an emergency rewrite. I am not a web dev, and I hate it, but our office is the only one in the company that can be trusted to deliver performant code & I’m the one with the fewest other responsibilities so I’m stuck rewriting a terrible web app to be merely mediocre.
Outside of work, I’ve been putting off my NaNoRenMo entry since the beginning of the month so I’m going to try to quickly push something out. I’ve also been putting off my (more casual) responsibility to put out an article a week for the medium publication I’m part of, so I’m going to try to finish the two or three drafts I have kicking around.
@work Still writing functional tests.
@home I’m brainstorming ideas about what my Spotify client will look like, reading up on the API, and toying around with some ideas to make the API JSON easier to work with. And there seems to be a bug with auth token refresh, so I need to debug that.
The last few days I’ve been following along with the OCW class on Finance Theory, and hopefully I’ll get some time to read along in the books.
This week I’m working from home (as per usual). I’ve been writing some tools for myself using gotoB, and I have really liked it.
Other than that, we’ll see.
I’m making a discord bot with a friend for a server we’re in, we syncplay movies together every week so this would help coordinate the times (timezones are hard!) and manage backlog and voting.
I’ve been trying to package it for Nix so I can run it on my rpi. It’s an uphill battle because the bot is in F# and the existing package for the dotnet SDK doesn’t currently support arm64, and I also had very little idea about how packaging works in Nix. I might write a blog post on this later.