I released my indie game on steam this morning. (Some folks here may have already seen the itch release, which is slightly cheaper.) I’ve made & deployed some fixes already based on feedback by people who got the itch release (including somebody on lobste.rs), and I may end up doing more of that if there are other bugs I somehow missed during playtesting. Otherwise, I plan to spend some time getting it in front of people (since it’s a fringe title that’s a little hard to accurately categorize, no matter how I target it most players will probably be disappointed, & so I need to target more widely to find folks for whom it’ll resonate). If I get more overarching feedback – complaints about the structure or the way whole characters are written – that will probably influence the sequel, which is still at the concept stage & very malleable. (I wrote about what I was trying to do with this game here.)
I’m still working my way through computer history books as part of my preparation for my next book. Thanks to whoever here recommended A People’s History of Computing: it’s a little repetitive but it’s covering some material that I haven’t seen covered in detail elsewhere (specifically with regard to how usability concerns around timesharing systems for non-technical users were addressed in the 60s). The Friendly Orange Glow was a fantastic read, & I have a collection of ACM papers on the history of user interfaces ordered (recommended by Paul Ford). If you guys have any other recommendations, I’d like to hear them! I’m specifically looking for stuff on unusual or overlooked user interface experiments (regardless of whether they are aimed at novice or professional users, & regardless of whether or not they involve graphics). I’d especially like to hear about non-visual user interfaces (for instance, stuff based on sound or haptics), particularly if they are capable of being used for programming, & anything using unusual input devices (chording keyboards, sonar, theremins, rings, foot pedals, whatever).
I’ve been working on a conf badge framework that people can learn to solder with, so I need to do a PCB design for the generic model
I need to start on some container-based honeypot management automation and a workshop session for a customer and local technology college on it.
I’m also doing stuff on the 44CON CFP, sponsor followup and other bits and pieces
If I get to the end of the week with spare time I’m going to write something for chargen
I fell down the stairs just over a week ago and my foot’s still swollen. Haven’t left the house since, so I’m hoping to be able to wear shoes at some point this week too. Then I can at least go out for a walk or something.
I’m going to a UK Research and Innovation event in London tomorrow, on cloud computing in research. Then staying overnight on a friend’s houseboat, and going to a Learning Technology conference on Wednesday. The rest of the week is talking to prospects. I ordered the Rock64 boards I want for an upcoming project, but I don’t expect them to ship soon.
Work: I’m in the middle of jobhunting. After discovering a previously-unknown graphics department at the university I’m scouting it out to see if there are any opportunities there and working the professional network. It’s hampered a tad by the current snowstorm in Seattle, where the university and most other places have been shutdown for the better part of a week.
Other work: Last week I successfully gave my 3rd Papers We Love talk, which I used as a springboard to talk about VR and CG history. This week I finished writing up the research notes and have been floating it as a general-purpose talk to other groups.
Personal: After receiving some new network hardware this weekend, I can now run a wired LAN in my apartment after a year of wifi only. Once I work out cabling I have to decide if a TonidoPlug2 is worth salvaging as a local media hub, or if it’s too insecure/outdated to allow on the LAN.
I’ve moved to Amsterdam now almost two weeks ago. Since the study cycles between Germany and the Netherlands vary quite a bit, there are still exams coming up, the first one was today. So I am studying for that mostly while trying to keep up with course work as the semester at the UvA started a week ago. But all in all I am starting to get used to the new city.
On top of that I am trying to start my Master’s thesis while still enrolled here and there is still some stuff that I have to figure out regarding that. I had a lot of freedom for choosing my Master’s thesis, which is why I’m happy about the topic, although it is not entirely fixed as of now. It will be related to autoencoders and sequence compression. If anyone has interesting links or papers that are somewhat related to the topic I’d be happy to read them.
This morning is the fifth day of learning about our company’s transportation optimization system. The problem is a variant of the vehicle routing problem (VRPPD, but it’s open, has capacity constraints and time windows), albeit with a complex cost function (it’s using common-carriers, so the cost function isn’t just distance). There are also a lot of side constraints that can be enforced.
One of the things I’d like to do is determine whether we should consider making use of any commercial or open-source engines. I took a little time and wrote a model using Optaplanner with a minimal subset of the requirements. It was pretty cool how easy it was to get something working, but the solution falls off a cliff: with just a few hundred shipments, it stops even producing solutions that respect the hard constraints. I’m sure there’s a way to coax Optaplanner to do better, or perhaps I’ve modeled my domain badly, but it’s a bit opaque.
Thanks! This is a little different than the space we’re in. Our tool does planning on the order of days to weeks (our company primarily works with shippers and 3PLs who may not even operate the trucks used–we’re not supplying real-time street-level routing to anyone), but it could be interesting.
Recovering from a trip to Hawaii. The weather is one thing, but the real murder is the time change, and not on myself or my wife, but on the toddlers, who are not enjoying the process of acclimating to EST again.
At work, delivering reviews, and getting back up to speed with what the team did while I was gone.
auditing v2 of a project that processes alot of json data using mysql8 json functions and stored procedures. Today I can compare the output of the legacy v1 tool against the v2 tool. It appears to be accurate and complete. So now I just need to deploy the v2 tool and retire the v1 tool. The v2 tool takes 1minute to run via mysql, the v1 tool takes ~1 hour to run via php + mysql + background prcesses that consumes an XML version of the same dataset.
debugging a d8 webform_product custom registration form for a campus event in July.
exercising
going to the clinic for this persistent cough I’ve had since getting sick ~2 weeks ago … :(
In Turkey, near Syrian border training Syrian epidemiologists on data collection and outbreak response management tools I’ve built. Heading to South Sudan for more of the same soon. Utterly exhausted. Also having discussions about open sourcing our systems. Would anyone be interested in contributing some rust, python, javascript, swift or java to help save some lives?
Please, try announcing it on the front page of lobste.rs (and maybe HN) if you do open-source them, you might get much better visibility and hopefully some response from that! Just remember to add some background and how it’s used to help people. I released one (not humanitarian-related) project on both the websites semi-recently (first on lobste.rs, which is somewhat easier, as it falls down from the front page slower, and also people seem to generally behave gentler and more constructively here). I got really awesome and interesting feedback in comments, and also some surprise contributors (though mostly small stuff; but still was super encouraging and heartwarming to me!). I was especially amazed by the amount of general positivity I got, even on HN; I was prepared for a much tougher experience ;)
Thanks. Yeah. It’s something I’m working towards just thought I’d drop it in to see if anyone would even be interested in contributing to something like this. Once everything is up and public I’ll do a proper announcement to see if people want to contribute to it. A bit worried about getting crucified for my code but also I’m already supporting 7,000 plus users and 13 countries with one developer so have to manage expectations of code quality hah.
Take your chrome/firefox bookmarks and export, add, and synchronize them to windows/mac/linux shortcuts and folders. Shortcut icons are scraped via favicon.
I’m rebuilding my personal site/blog from scratch with Gatsby.js and trying to make some more interesting posts. It’s been fun so far, excited to see where it goes :)
I’ve got a number of personal projects I want to spend time on, but currently I’m working on a simple RSS service in Go. Hopefully something similar to tt-rss, but even easier to deploy and run. I’ve been getting frustrated with how tt-rss handles external APIs like fever. Since I’ve wanted to look into this anyway and I’ve been meaning to brush up on Go webservices lately, this seemed like a good opportunity.
Trying to get used to actually working full time again. Fortunately, we just hit a deadline and everything seems to be working well, so I get the chance to change gears a little. Might give me time to breathe and work on popping the stack of personal projects some. The stack is, from the top:
Finish setting up a robust and reproducible personal email server, inspired by recent posts here about ditching Google for good,
Finish a pull request for Rust finishing off a minor standard library feature that I’m real sick of being nightly-only,
give some love to ggez, a lightweight game framework for Rust, which had a backlog of easy-to-fix bugs and some nice PRs that deserve to be made into another minor release,
Actually get back to refactoring and cleaning up code for what I’d intended to be my main project for the year.
Curious about the Rust feature, would you fancy sharing a link? Also curious about the mail server; are you planning to share? or do you have the progress in a public repo already? how are you approaching the reproducibility aspect?
The Rust feature is TryFrom, which seems to suffer from The Lisp Problem that it’s so easy to implement yourself that it’s not a high priority for anyone to make a general-purpose version. But I am slowly honing my skills for nitpicking to the point where it’s worth spending a few days pushing the official version through instead of ten minutes writing my own. Tracking issue here: https://github.com/rust-lang/rust/issues/33417
As for the mail server, I wasn’t planning to share cause I can’t imagine anyone crazy enough to actually trust me with critical infrastructure – at least not operated on a volunteer basis. But I have enough loosely-coupled domains for different purposes now that putting the work into actually managing vhosts properly is making things simpler. I’m handling reproduciblity by doing all the setup in Ansible, which isn’t a perfect solution but is pretty good. Reproducible infrastructure is still a little bit of a Hard problem but Ansible and Salt make it far easier. I haven’t put it in a public repo because that makes my life easier, since I don’t have to separate out security-sensitive bits, and again never imagined someone else wanting it, but if you want I can clean it up and throw it online somewhere.
Thanks. As to the server, I think no pressure. I’m more on the “theoretically I’d like to do this” front, like most people probably, but still too afraid of trouble and friction to even switch to some popular non-Google hosted provider. So, it’s mostly that I’m looking around in case I stumble upon a solution that will somehow finally feel attractive enough that I’d decide to take the plunge. Also, obviously totally admire you for taking some real action here!
As to Rust, I’ve just recently tried learning it (on a hobby project), and stumbled upon, for me, too many “papercut” rough edges, which made me back off for now, but still somewhat uncertain what to think. Especially given that I also totally got some experience of the good parts and aspects, which cannot be undone, and leaves me with a lingering feeling of longing in any other language. So, I’m particularly interested in efforts aiming to smooth those edges, such as yours seems to be. Though from the looks of it, apparently “my” rough edges are some other ones than this specific one you’re fixing. So, suppose there’s more of them still… I’m kinda pondering a mixed solution: initial prototyping in Nim, then maybe migrating some parts to Rust, as modules, esp. when I feel they’re approaching a “complete” status, to “seal” them as “done”. Not sure how much effort this would be.
Something to consider might be making your own domain and spending the $5/mo or whatever for Gmail to do the email for it. Then when you do decide to make the leap to a different provider, all your email addresses stay the same and you just switch who serves it. That was one of the things that got me willing to do this myself, if I get sick of running my own server I can keep the same email address but switch to protonmail or something.
Out of curiosity, what papercuts did you have with Rust? I love teaching people, but I’m getting to the point where I no longer remember what it was like to Not Know How Things Work, so having someone else’s perspective is useful. And a lot of the goodness in Rust comes from strongly typed functional programming languages in general, so unless you actually need dictatorial control over memory you may get most of the same advantages writing in OCaml, F# or Haskell.
Interesting idea about the custom domain, thanks! I do have one… though then, it reminded me that I’m also afraid of it being potentially easier to hack into than Gmail… :)
As to the Rust question, I kinda hoped a bit you might ask ;) I tried to list the stuff recently here. Sorry for it being somewhat chaotic. As to the goodness, I do especially like the move semantics and strict unique access tracking (with auto-destruction and NLL) very much. This is not something I think I’ve seen in any other language. I tried F#, but to my surprise found some papercuts too; also, .NET runtime requirement. OCaml is interesting to me (fairly close to a sweet spot), but feels somewhat too chaotic (I often had trouble deciding which constructs to use, and how), and also not that readable as I’d like (SML reads better in my opinion, but then too niche/marginal). Haskell is a readability nightmare to me, and also don’t like the reported problems with analyzing program efficiency because of laziness. Oh, Elm is very interesting to me, in readability and ease of use (wow!). But then too narrow domain as of now, and also sometimes feels too repetitive.
Ohohoho, that’s a pretty good list! I definitely sympathize. Rust definitely has a lot of paper cuts like that; it’s someday going to be replaced by something way cooler, I’m sure, the way Perl has been basically replaced by Python and Ruby. But to know how to come up with a way of fitting things together better I guess we need to make all the mistakes first. I like your gripe about incidental complexity at the end, since to me a lot of Rust’s complexity comes from its efforts to hide the complexity whenever feasible… so you can type less and the language can fill in the gaps, whenever the shape of the gaps is unambiguous. There’s a lot of that in Rust, because there’s so many complicated fiddly bits and pieces that actually writing them all gets even more painful. But then all the places where they either don’t cover, or end up working in a way you don’t expect, it gets really awkward.
It’s even worse when people try to do type-level metaprogramming. The fastest way to make Rust code completely unintelligable to anyone besides the writer is to make the type checker unable to help tell you what it expects.
So yes, a better language would be one with fewer complicated fiddly bits and pieces. Something nicer which covers the same conceptual area but with fewer icky seams and incompatible pointer types and type coercions that work until they suddenly don’t and now there’s a toad sitting there somewhere in your code just looking at you and asking what you’re going to do about it.
Well, much of the week will be doing day job stuff, but the fun bit is I am writing a REST generator in the D programming language.
I just finished writing about the first step in my blog: http://dpldocs.info/this-week-in-d/Blog.Posted_2019_02_11.html#what-adam-is-working-on and next up is doing the REST object code. Basically, I think I am going to take data definitions and have just a few little hooks into them for customization… and the rest is going to be generated from that.
I still need to write the code, but my thought right now is you minimally write a class with data members and a load and save method. The rest is automatic - a html website with forms to do the modifications, the json api, validation, the hyperlinking, all done for you. And then if you need to, you can implement other various methods for more efficiency and flexibility.
Work: Final stretch until our new site relaunch next week.
Other Work: Finishing up some audio post for a podcast I produce, meeting with a guy to discuss the state of independent entertainment (standup comedy mostly) in my city, drafting an email for the next comedy show I’m producing in March with who will be billed.
Life: Making music, maybe do some laundry, and try to cook for myself at least once.
I did some work refactoring my static site generator to generate RSS feeds better, and to separate out some of the configuration from the code. I’m planning on launching a buffalo chicken review site, and I’m procrastinating by doing everything from scratch and not just using wordpress.
I’m also working on starting a new improv group with a friend – more slower, patient, meaningful improv.
Mostly just helping a colleague with debugging one of our firmware updaters and reading through 700 text files looking for something that I can’t grep. :(
I’m likely to accept a job offer this week. I’ve got a couple on the table and three more interviews this week. I’ve been funemployed for 10 weeks and only actively looking for about half that time. I’m not sure that I’m ready to go back to work yet so I don’t know my target start date yet beyond “in March”.
In other news, sponsorship for Abstractions is picking up, with five companies signed up as sponsors for this software conference in Pittsburgh in August. That’s been my main focus these last few weeks, aside from getting back into gaming via Destiny 2 and Witcher 3.
I’m also working on a Stripe to Gitlab pipeline for automatic submission of merge requests to a ledger-based accounting system when there’s activity in Stripe, which backs both a donation and an event ticketing system my orgs use.
Putting some final marketing/data touches on one of my Haskell/Elm/Nix projects. My business partner will run a campaign next week to drive some traffic through our app, and the data we get from that is important for negotiating deals with our commercial partners.
Some lessons learned:
Don’t derive ToJSON or FromJSON instances for your data types in Haskell. You probably always want to put some thought into the design of the APIs you’re exposing, and that design won’t map 1:1 with how the data is represented internally.
Haskell’s Persistent library unfortunately doesn’t support UUIDs as primary keys. I wish it did. I’ve been told that tables should use a standard bigint type for primary keys for “improved performance”, but a performance test I read showed that the difference is negligible (~13%). I’m keeping UUIDs for every data type, and ignoring the existence of the real primary keys.
Just because UUIDs are universally unique, doesn’t mean you shouldn’t wrap them in a newtype. Using them raw is basically primitive obsession, and wrapping them helps the compiler to help you. I write about 25 lines of boilerplate for each new kind of UUID I make though, so I’d like to learn enough code generation (Template Haskell) to make this just a single line.
pushing the last two oauth2_proxy fronted endpoints up for employee-restricted HTTPS services, and writing a short note internally for how it was done,
moving more parts of a Fargate-based data pipeline into Airflow,
moving from single instance Airflow deployment to multi
Statistics the last day:
Fixing a distributed lag time series model on health facility visits and state-actor violence so that it better accounts for seasonality and for dependent data (I’d been using a quasipoisson model, but on a per-observation instead of per-village level. So, for that, we need to be using random effects.)
Still trying to catch up on small area estimation and how we’re using it for humanitarian crisis surveys.
For the multi instance airflow, can you elaborate what you did? Like added more workers? Separated segment (dev vs stage vs prod etc)? Or like functionally separates?
Earlier this month, we had just one airflow pod running in an EKS Kubernetes cluster in AWS. We’ve since split that into one prod and one staging EKS cluster, each in its own VPC, each with Airflow web UI + LocalExecutor procs running in a single pod deployment, backed by SQLite.
Next, for both the prod and staging cluster, we’ll deploy instead:
rabbitmq, backed by a persistent volume
An RDS PostgreSQL DB
one airflow deployment for the webui
one airflow deployment for a small number (2 to 4 initially) of celery workers
And keep HTTPS inbound running through as it does already:
We’ve gone for celery and rabbit since celery seems like the best supported of Airflow’s executors, and rabbit as the broker for celery because I’ve found it bit easier to supervise than Redis.
AWS resources are deployed by terraform, K8S resources for the moment just deploy by a shell script running kubectl apply -f.
Awesome thx. We hadn’t jumped to k9s for the operators yet as EKS wasn’t supported in Frankfurt until very recently (and we’re very concerned about GDPR, etc.). Just for the record, redis has been pretty fire and forget for us (whereas I’ve had odd stability issues with Rabbit in the past (> a year ago)).
Thanks! Yes, I’d prefer redis myself, and appreciate the nudge back to it. Seems like it’s equally well supported these days as a celery broker; I’d been supporting older stuff in the past.
At work I’ve been optimizing some parts of our build process around third party libraries, and I’m hoping to finish it up in the next day or two.
After that I’m going to be doing some Android development. We make a plugin for another company’s Android app, and we just got a new build with some features we’ve been waiting for. I’ll be starting a project to integrate those new features with our plugin.
Outside of work I’m writing a quadtree library in Common Lisp, and may implement an oct-tree to go along with it. For now my goal is learning, but I may optimize and improve them later if I need them for other projects. There’s a quadtree in QuickLisp already, though, so I might just use that for other projects.
I’m working on getting more interesting / bigger scope / more architecture-focused projects at work. I’m new to the company and the team, so I have been primarily doing smaller stuff. Hopefully soon I can take ownership of larger components of the project.
For personal projects, I want to start working on my personal library management system.
This week I’ve been working on three presentations for a conference I’m attending next week in Auckland, New Zealand (http://eresearch2019.org.nz/) about various aspects of the product we deployed last week, an open-source web app for managing, describing and publishing academic research data called ReDBox (http://www.redboxresearchdata.com.au/).
That, and helping the team sort out bugs in the new server. And delurking on this website.
I released my indie game on steam this morning. (Some folks here may have already seen the itch release, which is slightly cheaper.) I’ve made & deployed some fixes already based on feedback by people who got the itch release (including somebody on lobste.rs), and I may end up doing more of that if there are other bugs I somehow missed during playtesting. Otherwise, I plan to spend some time getting it in front of people (since it’s a fringe title that’s a little hard to accurately categorize, no matter how I target it most players will probably be disappointed, & so I need to target more widely to find folks for whom it’ll resonate). If I get more overarching feedback – complaints about the structure or the way whole characters are written – that will probably influence the sequel, which is still at the concept stage & very malleable. (I wrote about what I was trying to do with this game here.)
I’m still working my way through computer history books as part of my preparation for my next book. Thanks to whoever here recommended A People’s History of Computing: it’s a little repetitive but it’s covering some material that I haven’t seen covered in detail elsewhere (specifically with regard to how usability concerns around timesharing systems for non-technical users were addressed in the 60s). The Friendly Orange Glow was a fantastic read, & I have a collection of ACM papers on the history of user interfaces ordered (recommended by Paul Ford). If you guys have any other recommendations, I’d like to hear them! I’m specifically looking for stuff on unusual or overlooked user interface experiments (regardless of whether they are aimed at novice or professional users, & regardless of whether or not they involve graphics). I’d especially like to hear about non-visual user interfaces (for instance, stuff based on sound or haptics), particularly if they are capable of being used for programming, & anything using unusual input devices (chording keyboards, sonar, theremins, rings, foot pedals, whatever).
This is interesting. Which papers?
By the way, readers, enki’s game is quite good. The price point is perfect too. Give it a try, it’s cross-platform: https://store.steampowered.com/app/1013580/Manna_for_our_Malices/
The collection in question is A History of Personal Workstations by Adele Goldberg.
I’m preparing for my visa application this week. If everything goes well, I’ll start working in München next month :D
This week I’m writing a lot of content, doing some CAD and a bit of devops:
I fell down the stairs just over a week ago and my foot’s still swollen. Haven’t left the house since, so I’m hoping to be able to wear shoes at some point this week too. Then I can at least go out for a walk or something.
Wow, it’s a surprise to see you here! I believe I met you and your lovely partner at SteelCon :) Good luck with the work and get well soon!
Nice to see you here too!
I’m going to a UK Research and Innovation event in London tomorrow, on cloud computing in research. Then staying overnight on a friend’s houseboat, and going to a Learning Technology conference on Wednesday. The rest of the week is talking to prospects. I ordered the Rock64 boards I want for an upcoming project, but I don’t expect them to ship soon.
Work: I’m in the middle of jobhunting. After discovering a previously-unknown graphics department at the university I’m scouting it out to see if there are any opportunities there and working the professional network. It’s hampered a tad by the current snowstorm in Seattle, where the university and most other places have been shutdown for the better part of a week.
Other work: Last week I successfully gave my 3rd Papers We Love talk, which I used as a springboard to talk about VR and CG history. This week I finished writing up the research notes and have been floating it as a general-purpose talk to other groups.
Personal: After receiving some new network hardware this weekend, I can now run a wired LAN in my apartment after a year of wifi only. Once I work out cabling I have to decide if a TonidoPlug2 is worth salvaging as a local media hub, or if it’s too insecure/outdated to allow on the LAN.
I’ve moved to Amsterdam now almost two weeks ago. Since the study cycles between Germany and the Netherlands vary quite a bit, there are still exams coming up, the first one was today. So I am studying for that mostly while trying to keep up with course work as the semester at the UvA started a week ago. But all in all I am starting to get used to the new city.
On top of that I am trying to start my Master’s thesis while still enrolled here and there is still some stuff that I have to figure out regarding that. I had a lot of freedom for choosing my Master’s thesis, which is why I’m happy about the topic, although it is not entirely fixed as of now. It will be related to autoencoders and sequence compression. If anyone has interesting links or papers that are somewhat related to the topic I’d be happy to read them.
Let me know if you ever want to get a beer, I’m right in your neighborhood.
This morning is the fifth day of learning about our company’s transportation optimization system. The problem is a variant of the vehicle routing problem (VRPPD, but it’s open, has capacity constraints and time windows), albeit with a complex cost function (it’s using common-carriers, so the cost function isn’t just distance). There are also a lot of side constraints that can be enforced.
One of the things I’d like to do is determine whether we should consider making use of any commercial or open-source engines. I took a little time and wrote a model using Optaplanner with a minimal subset of the requirements. It was pretty cool how easy it was to get something working, but the solution falls off a cliff: with just a few hundred shipments, it stops even producing solutions that respect the hard constraints. I’m sure there’s a way to coax Optaplanner to do better, or perhaps I’ve modeled my domain badly, but it’s a bit opaque.
Got a submission for you in case it helps. Did a submission since others might find the problem and solution spaces interesting.
Thanks! This is a little different than the space we’re in. Our tool does planning on the order of days to weeks (our company primarily works with shippers and 3PLs who may not even operate the trucks used–we’re not supplying real-time street-level routing to anyone), but it could be interesting.
Recovering from a trip to Hawaii. The weather is one thing, but the real murder is the time change, and not on myself or my wife, but on the toddlers, who are not enjoying the process of acclimating to EST again.
At work, delivering reviews, and getting back up to speed with what the team did while I was gone.
In Turkey, near Syrian border training Syrian epidemiologists on data collection and outbreak response management tools I’ve built. Heading to South Sudan for more of the same soon. Utterly exhausted. Also having discussions about open sourcing our systems. Would anyone be interested in contributing some rust, python, javascript, swift or java to help save some lives?
Oh, wow, super impressive!
Please, try announcing it on the front page of lobste.rs (and maybe HN) if you do open-source them, you might get much better visibility and hopefully some response from that! Just remember to add some background and how it’s used to help people. I released one (not humanitarian-related) project on both the websites semi-recently (first on lobste.rs, which is somewhat easier, as it falls down from the front page slower, and also people seem to generally behave gentler and more constructively here). I got really awesome and interesting feedback in comments, and also some surprise contributors (though mostly small stuff; but still was super encouraging and heartwarming to me!). I was especially amazed by the amount of general positivity I got, even on HN; I was prepared for a much tougher experience ;)
Thanks. Yeah. It’s something I’m working towards just thought I’d drop it in to see if anyone would even be interested in contributing to something like this. Once everything is up and public I’ll do a proper announcement to see if people want to contribute to it. A bit worried about getting crucified for my code but also I’m already supporting 7,000 plus users and 13 countries with one developer so have to manage expectations of code quality hah.
BookCut: bookmarks to shortcuts.
Take your chrome/firefox bookmarks and export, add, and synchronize them to windows/mac/linux shortcuts and folders. Shortcut icons are scraped via favicon.
I’m rebuilding my personal site/blog from scratch with Gatsby.js and trying to make some more interesting posts. It’s been fun so far, excited to see where it goes :)
I’ve got a number of personal projects I want to spend time on, but currently I’m working on a simple RSS service in Go. Hopefully something similar to tt-rss, but even easier to deploy and run. I’ve been getting frustrated with how tt-rss handles external APIs like fever. Since I’ve wanted to look into this anyway and I’ve been meaning to brush up on Go webservices lately, this seemed like a good opportunity.
Trying to get used to actually working full time again. Fortunately, we just hit a deadline and everything seems to be working well, so I get the chance to change gears a little. Might give me time to breathe and work on popping the stack of personal projects some. The stack is, from the top:
ggez
, a lightweight game framework for Rust, which had a backlog of easy-to-fix bugs and some nice PRs that deserve to be made into another minor release,Curious about the Rust feature, would you fancy sharing a link? Also curious about the mail server; are you planning to share? or do you have the progress in a public repo already? how are you approaching the reproducibility aspect?
The Rust feature is
TryFrom
, which seems to suffer from The Lisp Problem that it’s so easy to implement yourself that it’s not a high priority for anyone to make a general-purpose version. But I am slowly honing my skills for nitpicking to the point where it’s worth spending a few days pushing the official version through instead of ten minutes writing my own. Tracking issue here: https://github.com/rust-lang/rust/issues/33417As for the mail server, I wasn’t planning to share cause I can’t imagine anyone crazy enough to actually trust me with critical infrastructure – at least not operated on a volunteer basis. But I have enough loosely-coupled domains for different purposes now that putting the work into actually managing vhosts properly is making things simpler. I’m handling reproduciblity by doing all the setup in Ansible, which isn’t a perfect solution but is pretty good. Reproducible infrastructure is still a little bit of a Hard problem but Ansible and Salt make it far easier. I haven’t put it in a public repo because that makes my life easier, since I don’t have to separate out security-sensitive bits, and again never imagined someone else wanting it, but if you want I can clean it up and throw it online somewhere.
Thanks. As to the server, I think no pressure. I’m more on the “theoretically I’d like to do this” front, like most people probably, but still too afraid of trouble and friction to even switch to some popular non-Google hosted provider. So, it’s mostly that I’m looking around in case I stumble upon a solution that will somehow finally feel attractive enough that I’d decide to take the plunge. Also, obviously totally admire you for taking some real action here!
As to Rust, I’ve just recently tried learning it (on a hobby project), and stumbled upon, for me, too many “papercut” rough edges, which made me back off for now, but still somewhat uncertain what to think. Especially given that I also totally got some experience of the good parts and aspects, which cannot be undone, and leaves me with a lingering feeling of longing in any other language. So, I’m particularly interested in efforts aiming to smooth those edges, such as yours seems to be. Though from the looks of it, apparently “my” rough edges are some other ones than this specific one you’re fixing. So, suppose there’s more of them still… I’m kinda pondering a mixed solution: initial prototyping in Nim, then maybe migrating some parts to Rust, as modules, esp. when I feel they’re approaching a “complete” status, to “seal” them as “done”. Not sure how much effort this would be.
Something to consider might be making your own domain and spending the $5/mo or whatever for Gmail to do the email for it. Then when you do decide to make the leap to a different provider, all your email addresses stay the same and you just switch who serves it. That was one of the things that got me willing to do this myself, if I get sick of running my own server I can keep the same email address but switch to protonmail or something.
Out of curiosity, what papercuts did you have with Rust? I love teaching people, but I’m getting to the point where I no longer remember what it was like to Not Know How Things Work, so having someone else’s perspective is useful. And a lot of the goodness in Rust comes from strongly typed functional programming languages in general, so unless you actually need dictatorial control over memory you may get most of the same advantages writing in OCaml, F# or Haskell.
Interesting idea about the custom domain, thanks! I do have one… though then, it reminded me that I’m also afraid of it being potentially easier to hack into than Gmail… :)
As to the Rust question, I kinda hoped a bit you might ask ;) I tried to list the stuff recently here. Sorry for it being somewhat chaotic. As to the goodness, I do especially like the move semantics and strict unique access tracking (with auto-destruction and NLL) very much. This is not something I think I’ve seen in any other language. I tried F#, but to my surprise found some papercuts too; also, .NET runtime requirement. OCaml is interesting to me (fairly close to a sweet spot), but feels somewhat too chaotic (I often had trouble deciding which constructs to use, and how), and also not that readable as I’d like (SML reads better in my opinion, but then too niche/marginal). Haskell is a readability nightmare to me, and also don’t like the reported problems with analyzing program efficiency because of laziness. Oh, Elm is very interesting to me, in readability and ease of use (wow!). But then too narrow domain as of now, and also sometimes feels too repetitive.
If you still care, this stuck in my head and I did a more complete analysis of your papercuts here: https://gist.github.com/icefoxen/f5a781f5c38d73c108d8426da851d80c
Ohohoho, that’s a pretty good list! I definitely sympathize. Rust definitely has a lot of paper cuts like that; it’s someday going to be replaced by something way cooler, I’m sure, the way Perl has been basically replaced by Python and Ruby. But to know how to come up with a way of fitting things together better I guess we need to make all the mistakes first. I like your gripe about incidental complexity at the end, since to me a lot of Rust’s complexity comes from its efforts to hide the complexity whenever feasible… so you can type less and the language can fill in the gaps, whenever the shape of the gaps is unambiguous. There’s a lot of that in Rust, because there’s so many complicated fiddly bits and pieces that actually writing them all gets even more painful. But then all the places where they either don’t cover, or end up working in a way you don’t expect, it gets really awkward.
It’s even worse when people try to do type-level metaprogramming. The fastest way to make Rust code completely unintelligable to anyone besides the writer is to make the type checker unable to help tell you what it expects.
So yes, a better language would be one with fewer complicated fiddly bits and pieces. Something nicer which covers the same conceptual area but with fewer icky seams and incompatible pointer types and type coercions that work until they suddenly don’t and now there’s a toad sitting there somewhere in your code just looking at you and asking what you’re going to do about it.
Well, much of the week will be doing day job stuff, but the fun bit is I am writing a REST generator in the D programming language.
I just finished writing about the first step in my blog: http://dpldocs.info/this-week-in-d/Blog.Posted_2019_02_11.html#what-adam-is-working-on and next up is doing the REST object code. Basically, I think I am going to take data definitions and have just a few little hooks into them for customization… and the rest is going to be generated from that.
I still need to write the code, but my thought right now is you minimally write a class with data members and a load and save method. The rest is automatic - a html website with forms to do the modifications, the json api, validation, the hyperlinking, all done for you. And then if you need to, you can implement other various methods for more efficiency and flexibility.
should be fun.
For
$HOME
:For
$COMPANY
For
$CLIENT1
:For
$CLIENT2
:Work: Final stretch until our new site relaunch next week.
Other Work: Finishing up some audio post for a podcast I produce, meeting with a guy to discuss the state of independent entertainment (standup comedy mostly) in my city, drafting an email for the next comedy show I’m producing in March with who will be billed.
Life: Making music, maybe do some laundry, and try to cook for myself at least once.
I did some work refactoring my static site generator to generate RSS feeds better, and to separate out some of the configuration from the code. I’m planning on launching a buffalo chicken review site, and I’m procrastinating by doing everything from scratch and not just using wordpress.
I’m also working on starting a new improv group with a friend – more slower, patient, meaningful improv.
Drafting le posts about various pedestrian software things as Alloy models.
Mostly just helping a colleague with debugging one of our firmware updaters and reading through 700 text files looking for something that I can’t grep. :(
I’m likely to accept a job offer this week. I’ve got a couple on the table and three more interviews this week. I’ve been funemployed for 10 weeks and only actively looking for about half that time. I’m not sure that I’m ready to go back to work yet so I don’t know my target start date yet beyond “in March”.
In other news, sponsorship for Abstractions is picking up, with five companies signed up as sponsors for this software conference in Pittsburgh in August. That’s been my main focus these last few weeks, aside from getting back into gaming via Destiny 2 and Witcher 3.
On the code side of things, I’m produced a couple of small command line tools in Rust, one for retrieving an SSH key from a Blockstack profile and one for using the Blocktap GraphQL API to retrieve cryptocurrency pricing information for use with
ledger-cli
.I’m also working on a Stripe to Gitlab pipeline for automatic submission of merge requests to a ledger-based accounting system when there’s activity in Stripe, which backs both a donation and an event ticketing system my orgs use.
I also published today an article on my home office setup for remote work, something I’ve been working on for several months.
Putting some final marketing/data touches on one of my Haskell/Elm/Nix projects. My business partner will run a campaign next week to drive some traffic through our app, and the data we get from that is important for negotiating deals with our commercial partners.
Some lessons learned:
Don’t derive
ToJSON
orFromJSON
instances for your data types in Haskell. You probably always want to put some thought into the design of the APIs you’re exposing, and that design won’t map 1:1 with how the data is represented internally.Haskell’s Persistent library unfortunately doesn’t support UUIDs as primary keys. I wish it did. I’ve been told that tables should use a standard
bigint
type for primary keys for “improved performance”, but a performance test I read showed that the difference is negligible (~13%). I’m keeping UUIDs for every data type, and ignoring the existence of the real primary keys.Just because UUIDs are universally unique, doesn’t mean you shouldn’t wrap them in a newtype. Using them raw is basically primitive obsession, and wrapping them helps the compiler to help you. I write about 25 lines of boilerplate for each new kind of UUID I make though, so I’d like to learn enough code generation (Template Haskell) to make this just a single line.
I retract this somewhat, since learning about ways to configure how Aeson will (de)serialise JSON.
Data engineering the first 4 days:
Statistics the last day:
For the multi instance airflow, can you elaborate what you did? Like added more workers? Separated segment (dev vs stage vs prod etc)? Or like functionally separates?
Sure! It’s nothing too special but:
And keep HTTPS inbound running through as it does already:
We’ve gone for celery and rabbit since celery seems like the best supported of Airflow’s executors, and rabbit as the broker for celery because I’ve found it bit easier to supervise than Redis.
AWS resources are deployed by terraform, K8S resources for the moment just deploy by a shell script running
kubectl apply -f
.Awesome thx. We hadn’t jumped to k9s for the operators yet as EKS wasn’t supported in Frankfurt until very recently (and we’re very concerned about GDPR, etc.). Just for the record, redis has been pretty fire and forget for us (whereas I’ve had odd stability issues with Rabbit in the past (> a year ago)).
Thanks! Yes, I’d prefer redis myself, and appreciate the nudge back to it. Seems like it’s equally well supported these days as a celery broker; I’d been supporting older stuff in the past.
At work I’ve been optimizing some parts of our build process around third party libraries, and I’m hoping to finish it up in the next day or two. After that I’m going to be doing some Android development. We make a plugin for another company’s Android app, and we just got a new build with some features we’ve been waiting for. I’ll be starting a project to integrate those new features with our plugin.
Outside of work I’m writing a quadtree library in Common Lisp, and may implement an oct-tree to go along with it. For now my goal is learning, but I may optimize and improve them later if I need them for other projects. There’s a quadtree in QuickLisp already, though, so I might just use that for other projects.
I’m working on getting more interesting / bigger scope / more architecture-focused projects at work. I’m new to the company and the team, so I have been primarily doing smaller stuff. Hopefully soon I can take ownership of larger components of the project.
For personal projects, I want to start working on my personal library management system.
This week I’ve been working on three presentations for a conference I’m attending next week in Auckland, New Zealand (http://eresearch2019.org.nz/) about various aspects of the product we deployed last week, an open-source web app for managing, describing and publishing academic research data called ReDBox (http://www.redboxresearchdata.com.au/).
That, and helping the team sort out bugs in the new server. And delurking on this website.