This is the weekly thread to discuss what you’ve done recently and are working on this week.
Please be descriptive and don’t hesitate to ask for help, advice or other guidance.
In the last week, I got to push some changes into LLDB to fix some things that I ran into. I have more to push once I clean it up a bit more and get it through code review. I also worked some on our LLDB debugging integration and wrote about it: http://dylanfoundry.org/2015/03/02/deepening-lldb-integration/
I started learning React finally. I really like it so far as it is an interesting view on things and has been remarkably easy to pick up and do productive things from day one. The way that it handles warnings is particularly nice with URLs pointing to further information. So much in React just makes sense and works well together (and in a way where there’s a minimum of concepts involved). This is in pretty stark contrast to pretty much every other framework in the HTML / JS arena that I’ve seen.
I’m thinking about how something like Presentations from CLIM might interact with React to produce something like what I need. We’ll see. This is one of my longer term projects that I’ve been toying with for a long time. I’m also probably going to end up porting a command line system from Dylan to JS for this project. It provides something with very rich completion and extensibility and is similar to the Lisp Machine command line or a router CLI. (It is also somewhat similar to GCLI which is in JS and used in Firefox and other places.)
I did some reading on L4 microkernels. I’d love to hear if anyone around here has done anything with one or something similar? They are more interesting to me than the Open Mirage stuff, but they seem to be in terrible shape for “casual” usage. (It is somewhat interesting how poorly those communities deal with the outside world in terms of being developer friendly.)
As for this week, we’ll see. I’m continuing some debugger integration work and working on my first React-based prototype. But then, I never know what I’ll end up doing. I did dig out my copy of Art and Fear for the first time in a couple of years after reading Joel Franusic’s Notes on Art and Fear which reminded me of how much I enjoyed the book.
That CLIM part is interesting, are you going to build on this post of yours ?
Somewhat barely related I found out about Climacs, which is a sort of an emacs implementation using McCLIM and Esa, although this seems to be floating dead in the web (most recent news is from 2008 …).
Here’s a pretty application that uses McCLIM and Esa: gsharp.
Yes … I’m building on my previous thinking about rich command shells. (I did that thinking because of this project.)
As for ESA, it is interesting and the code that it builds upon in CLIM is similar to some code in DUIM (due to Scott McKay working on both), but what I’m looking at converting to JS is a fairly different approach.
I’m gonna be trying to finish “Interface Oriented Design” (https://pragprog.com/book/kpiod/interface-oriented-design). Had already read it once, but I figure it’s been a few years since, and I wonder if I’m going to find new things in it this time around.
I’ve also decided that I wanted to learn a new programming language. I’ve been doing Go for the past 2 years, and I wanted to learn something functional and compiled, and I’m interested in unikernels, so I decided that OCaml might be a good fit, although Erlang might also be a good fit. Opinions please? Also, unikernels: I know I can run MirageOS on Xen, and I can run WhateverErlangHas in Xen, but is there any way to run them through like qemu during development? I’m a bit at a loss here.
On the Go side of the world, I’ve been working on a code generator that grabs a DB schema (for now mysql only) and craps out pretty and usable and idiomatic and statically typed Go code, without reflection. Full scope of the project would be to eventually generate basic HTTP handlers, optional caching (got some basic form of that, I need to allow users not to cache super-huge tables or something), respect constraints (got non nullables working last night), generate some basic main function too…. basically, from DB to “working go service” in one simple command line call. My evil plan is to build it as a rough prototype, open source it, bring it to my business people, show them how awesome it is, and then get paid worktime in my office to develop the product.
So yeah. A lot of interesting stuff on my plate. Also: OCaml? Erlang? Unikernels? Opinions! Tips! Suggestions!
I would learn Haskell! It’s relatively practical, has tons of documentation and tutorials out in the wild, and is weird enough to expand your brain. You can bump into type theory, category theory, and other math-ish things pretty easily, and the emphasis on purity and types leads to some really cool new ways of doing things (monadic parser combinators, lenses). If you’re interested, @bitemyapp has a great guide here and you can feel free to PM me here.
Whats the angle with Haskell contra real world stuff?
Is the reason you never (compared to say Golang or JS) hear about Haskell success-stories and cool, in production, awesome stuff because it’s not being used for, well, cool, in production, awesome stuff, or is it because Haskellers are just less inclined to blog and shout on twitter about it?
I’m asking this as a person who has been toying with Haskell for a year and a half but only toying. I have used what I’ve learnt through Haskell other places, but never done anything real with Haskell.
You may have already read this post describing a MirageOS foray. I thought it was pretty enlightening to read someone’s actual experience.
Spent most evenings this last week playing with PPC macs, trying to get some old(er) games working now we don’t have Rosetta & Classic in OS X anymore. (For running PPC OS X apps & OS 9 apps respectively.)
Also accidentally picked up another iMac G4 (the anglepoise ones) as I thought the one I had was dead - turned out to just have a CD drive rather than DVD drive, so now I have two working iMac G4s. Such a hardship! Sadly couldn’t resurrect the 15" TiBook though, hardware failures mean it goes back into storage not-working for now. Of course, now I’ve realised what I want is rosetta rather than classic, I’m investigating whether current macbook pros virtualising 10.6 running the apps under Rosetta is quicker than running them on PPC G4 macs directly.
A fun discovery in my old G3 iBook was a quicktime pre-1.0 beta CD in the drive. Perhaps I’ll get the rest of my mac collection working again slowly now, found a Macintosh SE/30 that I didn’t know was in there. I have no idea where it came from (and from searching, I appear not to have bought it from anywhere that emailed me), which is slightly strange.
Over the weekend, I went to HackIllinois and won the reverse engineering category for a kind of Codecademy for reversing project. However, the project is currently a bit terrible due to the design being driven by a pathological hatred of technology, so I’m trying to clean that up before I release it into the wild this week.
I’m also getting ready for the mid-term in my complex analysis class. If you’re in the market to learn complex analysis, Needham’s text is one of the best math textbooks I have ever read, and I would highly recommend it, but it takes some definite time and effort to understand (at least for me).
On a quite non-technical note, I should also be seeing Tannhauser at the Chicago lyric Friday, which is gonna be awesome!
Bit late, forgot it was Monday. Thanks, Bruce!
Started the weekend off with a rather intense user session with my wife (no, that’s not a euphemism). She found quite a few bugs that I had thought worked fine as well as many features that didn’t actually solve her problems the way I had hoped. Went back to the drawing board and came up with another “Things to fix” list (including one stupidly obvious thing I wish I had thought of at project inception).
The good news is these lists are getting more specific, which I’m interpreting as meaning I’m closing in on Something People Want. I’m also learningW stumbling through the debt tradeoff. Here’s hoping in a month or two I’ll be a lot better at deciding when to make it.
I just released my first gem, Prolly, a DSL to express and query for probabilities in code. I have some reading to chase down for it.
I’ll be designing the base for a model rocket launcher for quick launch at the end of the week, and probably running a quick test.
And then doing a review on which quick project I should tackle next to practice getting things out the door quickly.
Last week I:
This week I plan to:
Working on an assignment for a parallel programming class. Over the last two weeks, I implemented a particle simulation and then parallelized it using pthreads and MPI. This week, we’re supposed to fit the simulation to the GPU.
For research, I’m working on fitting a 3-stage pipeline RISC-V core running on an FPGA. I’ve gotten the basic core running. Now it’s time to explore attaching peripherals to it. We eventually want to tape out the core attached to a ternary CAM and an ethernet MAC so that we can use it as a programmable packet filter.
The RISC-V core sounds really cool. You should do a writeup at some point, would love to read it.
I actually wasn’t the original designer of the core. It was done by one of the senior grad students. I understand the basic micro-architecture, but not the details.
Last week, I rewrote the Hython lexer using Parsec. It now handles all of Python’s lexical analysis needs (minus encodings).
A few notes:
This week, I’d like to add parsing for the remaining terminals in the grammar so I can work on the interpreter and runtime.
A couple of weeks ago went to an open data hackathon to answer the question of, roughly, how many burrito restaurants a smaller town can sustain given urban burrito data. Some of the front-end stuff fell a little short, but it was pretty fun.
Right now I’m messing around with a bunch of little pieces in cljs for roguelike development. I’ve been pecking away at some component-entity arrangments using core.async for communication, as well as some options for display components (wondering about whether to try to draw ascii on canvas or actually build components that render actual text).
So I finally started writing some material on the medcouple (people of the future, this link is unstable, and should some day just live on Wikipedia).
I’m going to keep working on this. Since I couldn’t get the pystatsmodels people to accept my GPL'ed code, I’m going to write this page so that they can use it as the spec document of a clean-room reverse engineering in order to satisfy their GPL phobia.
1) The current scheme where a user’s root keypair is generated deterministically from their username + password. This has the obvious benefit of never having to store the private key anywhere but RAM.
2) Generating a random keypair on user creation and storing it publicly (with the private key encrypted with the password using Keybase’s Triplesec)
Only requirements are the ability for a user to log in from different devices, and obviously sufficient encryption of the private key on the public severs if it is stored there (using the password + username)
Work is still some “boring” engineering stuff: my team did our thinking,
architecting, and planning, and now we “just” have to write the code and
Finally got to the point in writing Haskell where it’s started to make
also was able to get a toy project completed that I’d gotten stuck on in
November, but this weekend everything fell into place. It’s still rough
and fairly inelegant, but I’m willing to accept that this is a normal
stage of learning a new language.
I’m learning Django, MPI, Visual Paradigm, j2me (for university) as well as dipping in clojure and ansible (for myself).
Oh the joys of being a student.
Once in a while it is a good idea to do optimizations. This is that week. I am going to optimize the message transport in Fire★.
This is important because eventually I want Fire★ to work on mobile phones too. Optimizations are important here because performance/watt is important for mobile. I know there are inefficiencies in the current code and I don’t expect to find them all.
Making a new-and-improved syncpoint editor for Soundslice.
It’ll be a web-based UI that lets our users specify syncpoints between audio recordings and the associated music notation. Lots of hairy UI stuff to work out. We already have one, but it’s confusing.
This week is gonna be all a testing our API with different work loads to identify which metrics best predict when we need to trigger autoscaling to avoid latency going south. It is complicated by having two tiers that can scale independently. In practice if the front tier is loaded the back tier usually will be, but it depends on the traffic pattern. The front tier is an aggregator and the back is an index+data store.
$HOME: I have some ideas as to make a strongly consistent redis cluster, so I’d like to spend some time vetting those, and playing. If it were to work, I have an immediate need for it at $WORK to alleviate a SPOF.
Working on answering some questions for the FDA–hopefully done this week, but we’ll see.
It’s kind of reassuring to see how much they care about the quality of the documentation and engineering in software…unfortunately, they also are about twenty years out of date with respect to the sorts of systems we can deploy now. :|
Oh, also, making progress on IP battles, I guess.