1. 19

The weekly thread to discuss what you have done recently and are working on this week.

Be descriptive, and don’t hesitate to ask for help!

    1. 11

      This is my last week attending Recurse Center, which has been a great three months of studying in a wonderful community. Big endorsement to anyone considering attending. I’m finishing my study through Haskell Programming from First Principles.

      I’m also going to start a concolic testing library. This is a really interesting technique where you write assertions like those of property-based testing and the tool introspects on your code to figure out all possible values in each expression and almost prove that your program can never reach a state that violates your assertions. Exciting stuff.

      Drafting a blog post on why the industry forgot about the experiments in Bret Victor’s wonderful talk The Future of Programming, sort of as a sequel to my old post Skyscrapers and Doghouses.

      Advent of Code challenges, if there’s time left over in the week. I’ve done up to part 2 of day 3. Probably won’t get to this, though, with all the excitement of my final week at RC, hassle of returning to Chicago, and fun of catching up with folks there.

      1. 1

        I look forward to seeing what you say about experiences with concolic testing. Far as HPFP, I’ve been taking feedback on that about whether it’s good for total beginners to FP + Haskell or if it’s better to read something else to tackle it easier. Trying to have a list handy for these topics. If I didn’t ask you before, what’s your take on that?

      2. 1

        I’m also going to start a concolic testing library. This is a really interesting technique where you write assertions like those of property-based testing and the tool introspects on your code to figure out all possible values in each expression and almost prove that your program can never reach a state that violates your assertions. Exciting stuff.

        As someone who has been reading about Design by Contract of late and thinking about how it might interact well with PBT, I find this idea extremely fascinating! I’ll have to read up on this a bit more, but see a ton of potential, after simply skimming through things!

    2. 9


      OK, it’s only a small part of the week, but it is fun.

      1. 2

        Thanks for the reminder, I’d completely forgotten about it.

        1. 3

          I’m in smug mode because today’s problem only took me 11 minutes. I would have been on the leaderboard if I’d actually got up at 5am!

          (We’ll gloss over the days that have taken me hours of head scratching :) )

          1. 1

            That leaderboard seems a bit silly. Perhaps they should be timing it from the moment that a particular user first loads the page, although that’s cheatable too.

            1. 1

              Yeah, there’s really no way to make it work that can’t be gamed. Personally, I’m happy to noodle about solving the puzzles without worrying about the leaderboard. Not getting up at 5am is something of an incentive…

      2. 2

        I’m in the lead on my private leaderboard, so the pressure’s on to keep it!

        AoC is definitely one of my favorite things :)

      3. 2

        Having lots of fun with it myself too. Really getting to learn what D can do:


        1. 1

          Cool that you’re learning it since it doesn’t get much attention. I’d be interested in your impressions of it by the end on top of what language background you came from before D.

    3. 7

      I just merged Python 2.7.14 into Tauthon (a Python 2.7.13 fork with backwards-compatible Python3 features) and now I’m waiting for feedback on my pull request: https://github.com/naftaliharris/tauthon/pull/85

      KDiff3 made manually merging dozens of files a bit easier, but I still had to follow a Tauthon - Python 2.7.13 diff to make sure nothing slipped through the cracks. To make matters more interesting, some files needed modifications from both sides and, on top of that, there was no base commit since Tauthon was forked when Python was still on Mercurial.

      Anyway, the 2-way merge was successful and the tests passed. It took me about 15 hours over 3 days, all because I was bothered by a Reddit comment saying that Tauthon is not able to keep track of the latest Python2 fixes :-)

      later edit: the pull request was accepted

      1. 2

        Much to my surprise, it seems that Python 3 conversion really is happening, but I still see a place for Tauthon. It might help with incremental upgrades, perhaps with something like from __future__ import unicode_literals or something.

    4. 6

      I finally started implementing Ethereum’s “precompiled contracts” for our Haskell EVM implementation. After being puzzled for hours about why I was getting the wrong results from an existing elliptic curve library binding, I decided that a reasonable approach would be to make a C library that implements the precompiled contract API in a simple and generic way, along with a very simple Haskell binding to that; thus libethjet and libethjet-haskell were born, currently only exposing the ecrecover contract.

      I’m also working on some operational stuff related to our Nix channel and Nix build server.

      Oh yeah and I made a simple web app for submitting signed Ethereum transactions via QR code. If you encode the binary signed transaction as Base64, make a QR code of it, and then put it into https://dapphub.github.io/qrtx then you should be able to broadcast it to the network (via the Etherscan API).

    5. 4

      The research group I’m part of released Wevva, a free mobile (iOS only, sorry) game-design app!

      The goal is to enable people to design mobile games on mobile devices, trying to reduce the gap and context switch between mobile game playing v. mobile game design. We’re also focusing on non-coding approaches to game design, so it’s a bit different than something like Scratch Jr that wants to make coding accessible on mobile devices; the goal with this project is to highlight other aspects of design, like mechanics design, aesthetics, audio, difficulty balancing, etc. Here’s a trailer video that should give the gist of what you can do in it.

      The overall project, called Gamika, has an ambition of AI-assisted co-creative game design apps, where you do some of the design and there are various bits of AI tech helping out with it too, doing playtesting, balancing, brainstorming, etc. In my opinion that’s necessary to make a really wide-open space of game design possible on a touchscreen without it being incredibly tedious. We have various prototypes doing parts of that, but this first released app focuses on the pure mobile game-design angle without any real AI (there’s a basic crossover/mutation bit used for brainstorming new games, but nothing else). The tradeoff is a cut-down space of games that are reachable through a carefully tailored design interface. Here are various publications on the broader project.

      In any case, it’s nice to have something out there finally, and something that furthermore imo is pretty polished and usable, much better than the usual standards of a research demo. We’ve playtested it with a number of visiting school classes in “rapid game jams” (1 hour long) and they seem able to get up and running with it pretty quickly, especially after we made various UI changes in response to the first few groups who tried it out.

      1. 2

        Very interesting, I’m going to look into this in the morning. Cheers!

      2. 2

        Brilliant demo! Almost looks too good to be true with how easy the mods were. :) So, one thing I was thinking about, did you have to hand-make the spaceship at multiple angles to put in there with software’s benefit being easy swapping? Or does your software automatically produce sprites at multiple angles? Both came to mind as potentially useful when I saw the player (maker? ;) swap them out.

        1. 2

          Thanks! It took a while to make the mods seem easy, and most of the credit goes to my colleagues who are good at UI programming. :-) The actual tech is not incredibly complicated, basically a parameterized game engine where some parts are hardcoded but a bunch of things are variables loaded from a JSON file and interpreted at runtime (e.g. when happens when two sprites collide is a variable). In a handful of cases there’s something slightly fancier going on for optimization reasons but that’s the basic gist. The on-screen design interface can be seen as basically a very special-purpose JSON editor. ;-) In fact we had an in-house prototype of a much more heavily parameterized game engine where it was very obvious it was basically a JSON editor: there were 284 parameters, and you set them on the mobile device with… well, 284 sliders, organized into a few groups.

          The trick is coming up with a design space that’s actually fun to design games in using this kind of tap interface. Too big a space, and you have an overly complicated interface full of hundreds of sliders, where 99% of games end up broken in frustrating ways. Too small and it feels like you can’t really do anything but make cosmetic tweaks to hard-coded games. In between you can (hopefully) find a UI that maps onto the meaningful design decisions, plus the space is constrained enough that the player can start to learn something about how parameters affect gameplay and interact with each other. There’s a bit more in the design philosophy in this short workshop paper, and some discussion of our path from the 284-parameter version to smaller design spaces in this workshop paper (although the 2nd one describes a very out-of-date version of Wevva).

          The sprites are vector graphics and the game engine handles rotation/etc., nothing really magic going on there. The reason for an interface letting you choose horizontal/vertical/etc. for the “controller” (the sprite you control) is because this can be used for some game-design purposes when you have asymmetric sprites (e.g. a long thin one can be used like a bat in some orientations but not others). Another setting is to let it freely rotate under control of the physics engine, like the non-controller sprites, to get some different kinds of game dynamics.

    6. 4

      I recently switched from a 2011 Macbook Air to a X1 Carbon 5th Gen and needed a replacement for 1Password. thankfully @jcs had already handled this for me with bitwarden-ruby - https://jcs.org/2017/11/17/bitwarden & https://github.com/jcs/bitwarden-ruby

      I’m not a fan of ruby and thought this would be a perfect project to write in Go since it can be a single binary and would simplify deployment/installation. I got the majority of it working and will post it up this week when I get it cleaned, tested and documented a bit better. Thanks again to @jcs and Kyle Spearrin for doing the actual hard parts. :)

    7. 3

      Attempting to talk myself out of writing an RSS feed server. I’ve previously tried a couple of paid-for services and found issues with them (at the time, haven’t re-evaluated), and also tried out a mac feed app I love but the sync service has issues and the support team just goes quiet on them (Majorly sad about that.) Tried out ttrss but found it doesn’t do things I consider essential, like importing an OPML of feeds. I don’t want to write a feed server, but I can’t find anything to solve my problem. (Decent fetcher/parser, OPML import, supports fever API. Probably doesn’t expose a web reader interface.)

      Finally got to a place that I’m happy with my hetzner box(es). En-mass migrated from the slower box to the faster box & cancelled the slower one. (Moving VMs between SmartOS hyps is pretty simple. Yay ZFS.) Got the usual LAMP stack setup to run my stuff, split out nicely enough and managed with puppet where appropriate. Also stuck a load-balancer on the public IP, so internally different things can run in isolated zones without using up more IPs. Simples ;-)

      Also spent yesterday hiking up the Wrekin (Big hill in Shropshire UK) in the snow, then building a snow-woman larger than me & an igloo with the kids in the garden. First decent snow we’ve had in 7 years, gotta make the most of that.

      1. 7

        I have been using ttrss for a few years now without a problem, mostly for webcomics and news. There is actually an OPML importer from the preferences menus

        1. 1

          Ah useful to know, thanks

      2. 5

        I like RSS (and ATOM) themselves (sure they could be improved, but there are enough semi-documented versions as it is!) but I think the tooling suffers from a lot of not-invented-here syndrome and/or lack of UNIX-style “do one thing well”.

        For example, my current setup converts RSS posts to maildir messages. There are loads of tools to do this which will periodically check a URL and convert any new posts they find. Not only is this redundant (cron can execute commands periodically and curl can fetch URLs), but the only compelling feature of these tools (their conversion algorithm) can (AFAIK) only be invoked on URLs; yet I also have RSS files I’d like to convert. At one point I was firing up a local web server to make these files available to these tools, but I found this so ridiculous I eventually decided to just fork ‘feed2maildir’ and rip out all of its “features” to get a standalone rss-to-maildir converter.

        1. 1

          I like RSS (and ATOM) themselves (sure they could be improved, but there are enough semi-documented versions as it is!) but I think the tooling suffers from a lot of not-invented-here syndrome and/or lack of UNIX-style “do one thing well”.

          Thanks for posting this, I’ve been thinking about it on and off since you mentioned it and finally came up with a pipeline using smaller tools I prefer to just a single binary that does everything backed by a single db. I guess this means I’m writing a feed server. :->

    8. 3

      I’m working on an Elixir / Phoenix site with my wife that explores the history and backgrounds of Japanese words and the kanji characters they use. And always looking for feedback from anyone interested in this kind of stuff, so just let me know!


    9. 3

      I’m thinking of doing a Hierarchical State Machine implementation in Erlang/Elixir this week. Or maybe over the holiday break.

    10. 3

      I finished the performance benchmarks for Oil I mentioned last week [1]. They are embarrassing, but that’s good motivation to fix the performance. I have an optimization pending, so I’ll be able to show off the improvement.

      I published an alpha release (which I don’t plan to announce) so that there’s a permanent URL for them:


      This release also contains the re2c lexer I’ve mentioned a few times. You can see that at the end of this list – the 14K line file!


      That is because of all the 256-way switch statements which eventually get “lowered”, as I’ve mentioned before. I plan to write a blog post about this, using all my previous lobste.rs posts to guide me.

      [1] https://lobste.rs/s/esqphf/what_are_you_working_on_this_week#c_shsasi

    11. 3

      I’m on-site all week, which is a rarity for me these days, but it means I won’t be able to spend as much time working on the things I normally do. I’ve got a post up tomorrow at Raw Hex about adding a light sensor to a Christmas tree lights project I’m working on. It’s pretty cool. Basically you read light levels with a photoresistor and then calibrate it to the room your Christmas tree’s in, with the upshot that you get to change the colour palette based on how light or dark the room is.

      Aside from that I’m looking into what a cryptocurrency index fund would look like. I’d like to try to create an autonomous fund that invests in a portion of the broader cryptocurrency market based on market cap, but in a way that uses dollar cost averaging to make it affordable to people who haven’t already got in. My hope is that people would just set it up on a raspberry pi, top up an account once a month and forget about it, checking in occasionally to see how it’s all doing. I got the idea from this, but instead of doing it as a one-off, I’m going to do it on a monthly basis and possibly blog about it. If I could automate it with a smart contract instead of a Pi, that would be awesome but I don’t think I know enough to be able to secure it and I don’t want to mess around with other peoples’ money.

    12. 3

      Working on documentation for the Go API that we are going to be releasing for Wallaroo.

    13. 3

      As I transition away from my current gig, I’m going to be moving to the mountains and finally making some more progress on my side project: QueryClips [0]

      I was unhappy with the limits of Heroku Dataclips and wanted a fun project to occupy my spare time. It has all the features of dataclips + the ability to save exports, support for organizations, a (rudimentary) schema explorer, and more. Specifically this week I need to build some background job infra and some caching.

      [0] www.queryclips.com if you want to try it!

    14. 2

      Yeah, Advent of Code like before, but also, Mono upstream merged my months-old Haiku amd64 patch branch, so now I’m going to try to see what I can do to coax Mono into actually working properly. Roslyn works now, but the runtime hangs when doing cleanup on termination… threading, of course?

    15. 2

      Currently going back an forth between learning some Golang, playing with esp8266 mcu’s and studying for my LPI certification to close any gaps in my self-taught Linux knowledge. Specialization is for insects, besides having lots of interest in all kinds of (technical) topics helps with being self-employed :)

    16. 2

      I made a mini FAT12 fs reader to learn a bit about filesystem design:

      1. 1

        Cool! That takes me back!

    17. 2

      Working on Helmspoint, it deploys your machine learning models to the web. Last week:

      • Got resnet50 working, but ran into things I didn’t consider, like custom input preprocessing of images and prediction decoding. I ended up having to build a simple pipeline, to handle these cases.
      • Didn’t get around got the nginx-ingress. This week:
      • Will need to add UI for pipeline editing when creating a new build version.
      • Want to generate hashes all components that go into a build version instead of using database id numbers. Not quite necessary for launch, but it’s something easier to fix now than later. Maybe it’s a form of procrastination to work on this.
      • Need to get nginx-ingress up and running.
    18. 2

      My main project is between stages (the proof-of-concept was funded by a customer, and we’re waiting until the new year to build the MVP) so I’m mucking in on another team’s backlog for a week. I spent yesterday nose-deep in snow redux sagas. Also, we’ve got some logical data modelling to do, and need to write down the physical architecture model for one of our products (something I’ve had on my plate for a while and just haven’t done yet).

      Outside of work, I’m arranging another tune for my Village Band, hosting a folk session on Thursday, and heading to a concert this evening :).

    19. 1

      I’ve been thinking about writing a Go program to parse out a swagger file and output commands for use in a script so that I could automate some form of endpoint testing.

      Turns out I can do that in one clever line of Ruby. Rest of my week is going to be about making the script better and more clever so that I can automate my testing on other future projects.

    20. 1

      Work: Starting off a big project where I turn a feature of our website into a standalone JS app.

      Home: editing the podcast.

    21. 1

      I finished some minor work on my kernel to get syscalls working from both kernel and userspace (unify the code!), it was quite a bit of tinkering with assembly until Rust didn’t spontaeously combust upon contact.

      @university I’m preparing to learn for statistics exam in february, maybe I can finally not fail it!

      I’m also looking at maybe writing something to replace ttrss that makes me happier, ttrss has become a bit of a churn each day but the other options available aren’t that satisfying.

    22. 1

      Fnishing up this security cert before holidays arrive in earnest next week. The live capture-the-flag exercise is turning out to be more entertaining than I thought, since they provide a VPN and suitable target machines.

      The OpenBSD 6.2 upgrade broke inteldrm on my UX305 laptop, so now I’ve got to work out how to exfiltrate a panic dump when the screen is blank, the only built-in network hardware is Wifi, and there is no physical serial port.

      1. 1

        Which cert at SANS?

        1. 2

          SEC542, nothing terribly revelatory but still useful.

    23. 1

      Looking for a job still

      1. 1

        Oh, not an enviable position. Good luck with the search!

    24. 1

      $CLIENT: still working to get the updated app structure verified to be working at least as well as the old monolithic codebase that runs current prod. Then we can cut over prod and have a reasonable way to deploy fixes/new features.

      $INTERNAL: the php docs generator has been progressing nicely. At this point I’d like to review the existing code and see if it can be simplified a little to make it more generically usable as part of the parent framework. Also, I’ve decided on a new name for the ‘helper’ tool, so there’s some renaming of things to do there too.

      $HOME: last week we discovered there’s a short somewhere in ~70m of buried electrical wiring for the front fence lights, and it’s fucking Thailand so forget calling an electrician. So, I have a long fucking trench to dig, and a shit load of conduit to lay. At least we’re going to take the opportunity to add some power outlets/lighting points away from the house.

      Also, still waiting for the car. The engine has been basically rebuilt, and has started, but it’s not finished yet apparently.