1. 27

As per the usual …

Feel free to share what you’ve been working on here. Also mention if you need advice, help, or a second pair of eyes.


  2. 19

    Well, I feel a bit better / less depressed than last week. Thanks for the feedback both public and private last week. It did help me get out of the hole that I was in. :)

    For work, I got a bit more working smoothly with the memory / heap profiler for emscripten. Some old screenshots can be seen at 1 and 2.

    With my un-identified third project that I worked on some in September, it was to have been an entry for the Al Jazeera Innovation Challenge related to non-linear storytelling / narrative in news. This was pretty interesting, but in the end, I wasn’t seeing results that I liked, I didn’t quite have the time that I wanted to focus on it, and I decided not to submit anything. This remains a subject of interest to me, but it is clear to me that some of the complaints that I have about news presentation online aren’t simply a software problem, but require far wider reaching changes in newsroom process, metadata, and other aspects of the knowledge management process. I hope to find the time to write more extensively about that soon.

    For Dylan

    I helped identify (but not yet fix) an interesting compiler optimization bug. We have functions that we can specify as inline-only. We do this in some scenarios where not inlining would break things, usually in very low level code on the border of Dylan types and “raw” types at the machine level inside the run-time. With the new LLVM compiler backend that is under way, if one of that class of inline-only functions is not inlined, then the generated LLVM IR is invalid and this makes us all very sad. In the Dylan compiler, all callsites start out fully dynamic and the compiler upgrades the call to progressively more optimzed forms. In this case, the type information required to upgrade the call to a direct function call was hidden away behind some constant folding. Once the constants were folded though, the type info became available and the compiler upgraded the call. However, at that point, it didn’t go on to inline the call as it normally would have. We’re not sure why this is the case. It takes a pretty specific set of circumstances for it to happen (which I narrowed down).

    The above paragraph mentions an upcoming LLVM backend. This has been a project that someone has been working on for some time … and it is finally getting close. He’s been running through the initialization code of the standard library and fixing bugs. Things aren’t ready to land on the master branch yet, but it is getting closer. This is really exciting to me as it means we’ll be able to (rapidly) move on and fix a bunch of other issues once the basics are in place here. The code for this is really clean and much nicer than either of our existing backends.

    I’ve started re-doing big portions of the website. I could use some minor help with graphics and color here. Part of this is that I’ve decided to have a section on the history of Dylan and am reaching out to people who worked on it professionally years ago at Apple and Harlequin. The other part is that I want to shift the focus from “here’s Dylan a language that is being maintained” to reflect the more accurate status of “here’s Dylan and here’s where we’re taking it in the future.”

    Finally, for something that is tangentially Dylan related but will be a more widely applicable project, I’ve started something new that I hope to have an MVP for in about a month and then I’ll be looking at funding models, whether that is approaching some companies who need it or going the crowd-funding route. Instead of identifying exactly what it is yet, I’ll just share interesting details. As a first step for this, I took the existing Python bindings for a C++ codebase that use SWIG and started making them work with SWIG’s new JavaScript support and node-gyp for generating a Node module. This has gone fairly smoothly so far, although it is clear that the JS support in SWIG is nowhere nearly as mature as the Python support.

    Until next week …

    1. 9

      A HyperCard clone in Racket, for my kids: https://github.com/technomancy/cooper

      We’ve had a lot of fun with Scratch, but there seems to be a big gap between drag-and-drop coding for pre-typists and curriculum targeted at early high-school kids. There are a few existing HyperCard clones, but they seem to copy the worst parts of HyperCard along with the good stuff; in particular the HyperTalk language is just atrocious. This project keeps the spatially-oriented, accessible aspect of HyperCard but lets you write the logic in Racket.

      1. 3

        I have fond memories of Hypertalk, and have been wondering what to show my kids instead of Hypercard when they get to a suitable age (namely, can read.) Very interesting to see someone else doing a modern version without hypertalk, for all that I have great memories of hacking together Stacks, but I bet if I had to write hypertalk now I’d end up thinking it was pretty awkward.

        It was only years later that I realised hypertalk was event driven, and that I’d accepted how it worked without too much trouble incidentally. That was an amusing revelation when I came to pick up ObjC/Cocoa.

      2. 8

        I spent some time helping get Universal SSL out the door, and this week I’ve got some improvements to make to our internal CA infrastructure to improve the overall security.

        Outside of work, I’ve been trying to do less technical stuff. This week, I’ll be trying to finish re-reading the Aeneid.

        1. 1

          What will this look like when it’s rolled out? Will I get an email or something? I’ve been refreshing the HTTPS version of my site all day, but am getting SSL cert errors in Chrome.

          edit ah - just found the setting in the control panel to turn this on.

          1. 1

            Apologies for the delay, work’s been a bit hectic (and home internet is spotty at best). I’m glad to hear you got it resolved. Getting all the certs provisioned has been slower than we’d like.

        2. 8

          Finally shipping TokuMX 2.0 tomorrow! This is a big milestone for us, has a lot of cool things we’re excited about (Ark elections, fast updates, geo features, enterprise audit and point-in-time recovery) and it’s taken a lot of work from my amazing and dedicated coworkers. Thrilled to be getting it out the door on time.

          1. 7

            I’ve been reading a lot of type theory literature as usual. I’ve decided that a good way to commit some of that to memory would be to blog about it! Some things I’m probably going to write about

            • Modal Logic
            • Linear logic
            • Abstract/Existential types (Published)
            • Parametricity (Without the frankly wrong analogy to sets)
            • SSA is CPS and vice versa
            • F-ing modules (That’s a name of a paper, not an expression of my frustration with modules)
            • Focusing/Polarization
            • Mechanized definition of SML
            • Refinement types and various realizations there of
            • Quotient types

            Realistically I’ll only write about some subset of these topics, so if there’s something you care deeply about you should tell me :)

            1. 2

              I’d love a writeup of F-ing modules, and not just because of the name, honest.

              1. 1

                Let me know when you get to focusing! I’ve been trying to get a bead on it for so so long.

                1. 1

                  i’m interested in quotient types. (because i have no idea what they are.)

                  1. 3

                    Okeydokey! I should get to it around Friday. Until then: Quotient types are related to to equivalence classes with sets. Basically it’s about taking an equivalence relation and forgetting about the structure of the type beyond what’s considered equal by the relation. It’s useful for something like representing rationals as pairs. We have a bunch of values that are “equal modulo some normalization”. So we can define reals as

                    type rationals = (integer * integer) quotiented by (a, b) = (c, d) if a * d = b * c
                    1. 1

                      by “reals” you mean “rationals”, right?

                      1. 1

                        Whoops I did, I even got it right in the text above :)

                2. 6

                  I’ve been working on adding support for dylan on heroku and docker.

                  The heroku part is more or less sorted out; I made a buildpack and a couple of demo applications (here and here).

                  Regarding the docker repo, I need to improve documentation on setting up images, etc. Need to study how other popular repos are doing it.

                  Any feedback (bugs, lack of documentation, suggestions, etc) would be welcome.

                  1. 5

                    This is really awesome to see this happening. Thanks!

                  2. 6

                    as a vim user, i’ve been wasiting time figuring out the best way to do overtone things without emacs.

                    i want to be able to send snippets of code to a lein repl, and i think i’ve settled on vimux (and tmux)

                    it works pretty well actually. i tried using it for haskell to interact with ghci (actually, ghci-color) but it doesn’t work so well, because you need to wrap multiline things in “:{ … :}”, and just copying a definition like

                    foo :: String
                    foo = "Whatevs"

                    doesn’t work, as it needs to be

                    let foo :: String
                        foo = "Whatevs"

                    what i should really be doing is study.

                    1. 3

                      Perhaps you might get farther using vim-ipython combined with IHaskell? I haven’t done it myself (I should try!) but I’ve heard that vim-ipython might work with IHaskell.

                      (Disclaimer: IHaskell is my project, so of course take anything I say about it with a grain of salt :) The vim-ipython author filed some issues at some point that made it seem like it should work with IHaskell just fine.)

                      1. 1

                        i wouldn’t even mind using IHaskell by itself; i’ll give it a try again. i’ve tried it before, but i don’t really like the docker way of running it; and the standard installation hasn’t worked out for me; but i can try again when i have more time.

                      2. 3

                        I wish the vim REPL integration plugins were easier to use. I’ve had heaps of trouble getting IDE-like features to work. I’m currently using haskellmode-vim, which seems to work OK, but as soon as I import a cabal dependency, I can’t load a module directly in ghci and therefore haskellmode-vim’s type inference stuff fails.

                        1. 2

                          yeah; i think if i had a bit of free time i’d probably just sit down and learn emacs (or lighttable)

                          1. 2

                            tpope’s dispatch and fireplace work pretty well if you’re already a tmux user. I’m not gonna pretend that it’s like having an actual emacs repl but it’s not too bad and might actually work really well with overtone!

                        2. 5

                          This week I am expanding my use of time clocks and version vectors in Fire★. I will use time clocks to order messages in the chat app.

                          I am also doing some cleanup work by adding message handlers instead of the unmaintainable and unreadable if/else linear search of message types.

                          If I get a chance, I will also add a GUI for picking text versions when automatic text merging fails in the code editor.

                          I am also learning TLA+ so that I can model the different services running within Fire★ and find any concurrency bugs. If the modelling turns interesting, I might blog about how I went about it. But that would be in a couple weeks/months.

                          1. 2

                            lol “time clocks” , was I drunk? I meant vector clocks.

                          2. 4

                            I’m doing research into minimum acceptable “look” targets for head-mounted-displays such as the Oculus Rift. This paper lays out a methodology for determining the minimum possible button size for phones, and I’ll be adapting the research strategy to work in an Oculus and determine people’s success rates.

                            This involves learning Unity, and the geometry necessary for 3D programming. You can view my work in progress on Github, though I started with a different interaction model before reading the paper, and will have to redo a lot of it.

                            I’m also writing more for Twenty Milliseconds, the site that documents what works and what doesn’t in virtual reality interface design. Today I wrote about Lucky’s Tale and some of the tricks it uses to help you not feel sick, and that post is getting a lot of traffic, which is pretty neat.

                            1. 2

                              Interesting stuff, I’ve got a DK2 on its way and i’m looking forward to messing with it.

                            2. 4

                              Last week, for $work, we did a hackathon to create a tool to help a local charity. Lots of fun, especially since we got Thursday and Friday dedicated to it.

                              Outside of $work, I’ve been getting better at getting to the gym, and would like to continue that. Not much to report right now; in the midst of implementing exception handling in Hython. I’m following Matt Might’s excellent guide and near the end, but as you get closer it gets more and more complex. Some nights (like this one) I just do some cleanup and golfing to push more Haskell into my brain.

                              1. 2

                                Haskell and the gym are an excellent self-improvement concoction. I have three more chapters to go before finishing Learn You A Haskell. Finally got to the monad chapters! As for the gym – I am absolutely positively iamnotlying going tomorrow evening for a couple of hours.

                                1. 2

                                  Tell me you went to the gym, not that you’re going ;)

                              2. 3

                                Back from vacation, on to work…

                                $work: Somehow managed to become the de-facto designer on an internal project. This is terrifying for many reasons, not the least of which that I am like that one dog on the internet – no idea what I’m doing. Evidently saying words like ‘compass’ and ‘bootstrap’ make you a UI/UX specialist at my company.

                                Never work for a company without a proper designer.

                                I also caught shellshock a day early last week (while on vacation, popped up on my email alerts). Seriously, go follow the CVE mailinglist, set up a couple google alerts, and be the guy who always knows about the latest vulnerabilities a day early. Twice now I’ve been 12h or more ahead of the curve, and it’s been pretty good for my credibility.

                                !$work: still faffing about w/ cmake, pondering whether or not it’d just be easier to write shell scripts to generate ninja or something, because this is just so annoying to use. Trying to set up a pipeline to process some files into generated sourcefiles is a big pain. I’m still constantly amazed that this is the state of the art when it comes to build systems for C/C++. Has no one ever had multi-stage pipelines? Processing one type of file into another, potentially more than once, seems to be the obvious purpose of a build system, and yet here I am, scratching my head trying to learn the invocation.

                                1. 3

                                  Fairly unproductive week for me.

                                  Still playing with and loving Common Lisp. Made a script to generate png images of simple cellular automata, and some more utilities to graph some of our data from mongodb.

                                  At work I presented some of the logging/recording work my group had been working on.

                                  1. 2

                                    What are you using to generate the images? I was reading a book called Cities and Complexity (it’s been set aside because of work stuff) that’s heavily CA focused, but I’ve been using Processing and Racket to play with the code.

                                    1. 1

                                      Book looks interesting, I might have to get a copy.

                                      For CL, I’ve been using SBCL, because it works equally well on OSX and Linux and is reasonably fast on both of them.

                                      For the graphics I’ve been using cl-png where it’s convenient to access pixels directly, and cl-cairo2 where it’s easier to work at a higher level.

                                      I’ve been meaning to use lispbuilder-sdl, cl-opengl,and cl-glu to create more interactive graphics and animations, but so far I’ve only got around to an animated Conway’s Game of Life.

                                      For the MongoDB data I’ve been looking at cl-plplot, a front end for plplot, and adw-charting. adw-charting is easier to use and gives decent results, but isn’t as powerful as cl-plplot. cl-plplot isn’t as user friendly, but is definitely more powerful.

                                      I’ve been using QuickProject to create projects/libraries, and QuickLisp to install everything, and I’ve been really impressed. When libraries are in QL, they generally “just work” on both Linux and OSX, assuming the required dev libraries are installed.

                                  2. 3

                                    Grinding out that last 10% of a project that is also 90% of the effort. Chibrary is an archive for mailing list messages that presents a discussion thread on a single page. I’ve finally finished rebuilding the system according to an OO design experiment (Evan’s Domain Driven Design + Bernhardt’s Functional Core, Imperative Shell).

                                    This week I’m reconnecting the Sinatra web frontend to this new backend.

                                    EDIT: Oh, and organizing a Chicago study group for Erik Meijer’s Haskell course. Contact me if you’d like to join.

                                    1. 1

                                      I’d like to see a write up on your OO design experiment!

                                    2. 3

                                      I just finished a blog post on my latest project, provably constant-time functions. Right now I’m going back over the rudimentary proof I have and trying to make it a bit cleaner, and also trying to figure out if anyone’s done what I’m currently doing/if what I’m doing even makes sense. If someone a bit more familiar with crypto and dependently typed programming would look at it and at least tell me I’m not doing something completely stupid, I would appreciate it a lot.

                                      1. 2

                                        So what’s your thoughts on dependent types, are you a proponent for “type driven development”?

                                        Also, have you heard of agda?

                                        1. 2

                                          I have heard of agda! I’ve actually spend a bunch of time playing with it, I just don’t find it as easy to really get things done with (for lack of a better term) as idris. As for “type driven development,” I’m not 100% sure what you mean by that, but typically when I’m trying to figure out how to do something, I start with the type signature and work from there, and I’ve had a lot of success with that.

                                          1. 1

                                            https://www.youtube.com/watch?v=rhWMhTjQzsU At the end of the video Stephanie Weirich explains what type driven development is using red black trees as an example. Also, it’s kind of a joke on test driven development and behavior driven development – two popular approaches to software development and debugging.

                                      2. 3

                                        Writing a Markdown pre-processor for use in a personal project so I don’t have to write repetitive HTML inside my otherwise nice-looking Markdown docs. It’s also my first time using Ruby seriously, and that’s kind of fun.

                                        Sent out the first letter for US+TECH, a newsletter I’ve started looking at how we interact with technology. It’s my first real project related to my interest in the Slow Web movement (besides designing theslowweb.com).

                                        Just started my final year of Undergrad. I’m taking Formal Languages and Automata, and while the first lecture was just review I’m excited for the meat of the class.

                                        I’m also really starting work on the 2nd edition of the Front End Development Field Guide (which I’m renaming to the Front End Field Guide for a slightly greater degree of brevity), and I’ll be giving weekly presentations about it to the web development class I TA for (and whose curriculum I helped write last summer).

                                        1. 2

                                          For $work, tidying up some existing code and then starting a new user-facing feature. Also visiting the office for the rest of the week, which I’m looking forward to. Always nice to see my colleagues in the flesh :-)

                                          For !$work, I picked up a HP Microserver last week and have installed SmartOS on it as a home server. Got a few things I want it to do, the main thing being a NAS. It’s a bit of an upgrade from a macbook running a FreeBSD VM with two USB drives hooked up to it, which has been my “server” for the last year or so. SmartOS is equally amazing and frustrating so far, not entirely convinced I can stick with it as it doesn’t appear to do USB passthrough, so I might end up playing with OmniOS or Open Indiana instead if they can do that.

                                          1. 2

                                            Found some awesome resources on language design. Working on my thesis “Efficacy of logic programming as a first language”.

                                            1. 2

                                              Pitching in for the first time. So here goes it:

                                              @work: Creating a front-end module for our flagship product; offering public facing websites created from within the application. Lot’s of performance issues to solve; and some Ruby ideosyncrasies to work out when defining classes dynamically (within dynamic namespaces/modules).

                                              @home: My first serious Clojure project; a learning portal… for @work ;-)

                                              1. 2

                                                I thought I was doing ok this week, but then I realised I’ve got nothing done since I saw last week’s post.

                                                Still setting up my Idris Concurrency (via Erlang) project. I got lots of interest last week which was awesome (mostly from twitter), but progress has stalled slightly.

                                                Uni set some work to select and read some papers about computer architecture in preparation for leading a class discussion (though the discussion got pushed back). I chose two about caches, one about miss-caches, victim-caches and prefetch buffers (the 1990 Jouppi paper) and one about improving on LRU for an eviction strategy. The first one is actually quite approachable, the second one I’m finding hard to read because of the immense number of acronyms.

                                                Things I should have made progress on this week: Grad School applications, literature review for the idris concurrency project. Sigh. I probably spent too many evenings drinking with friends rather than working.

                                                1. 2

                                                  At $WORK, I’m still trying to push shellshock patches throughout the enterprise. We have too many contracts that say “we control your life” and not a lot of flexibility for the sysadmins. This is going to be a meeting heavy week I feel…

                                                  To save me from this corporate hell, in my spare time I’m helping the huginn team with chef deployment. I had started a couple weeks ago but then shellshock and NSS vulns dropped on everyone and so I got distracted. It feels good to code every day.

                                                  1. 2

                                                    One of the guys at work joked about doing this on the corp intranet: https://twitter.com/abt_programming/status/515525729996795904

                                                  2. 2

                                                    I’m spending most of the week pushing forward a react app which as of today is rendering successfully on the server and the client.

                                                    I have to look over some jwt code in haskell and hopefully make a snaplet out of it as well as some docker-haskell code. Then I’m going to write a blog post on deploying Snap with docker on digital ocean.

                                                    I’m also writing the next version of Snap for Beginners. So another chapter should be done this week sometime (I finished one yesterday)

                                                    1. 2

                                                      The usual day jobs, plus preparing for OSDC 2014 … and trying to recover from the rush of ShellShocked clients (none of whom were actually vulnerable so far as I can tell, but you’ve got to be sure to be sure) … and about to head off for 4 days of camping with my family to get away from the internet for a while …

                                                      1. 1

                                                        I’m generally off at the moment but I scratched off one of my 90% complete projects and released a simple Python API wrapper for Scrapyd’s API. Getting all the little bits and pieces required to properly package a Python project is still not easy, there are so many things to miss.

                                                        On the plus side, I got to work with pytest for the first time - and I don’t think I’ll ever be going back to unittest. It allows you to create beautifully clean functional tests (example) with none of the Java-like idioms and cruft that unittest brings across.

                                                        1. 1

                                                          Working through my year long backlog of email got me yak shaving on updating testinvaders for Heroku Cedar. Braindead but satisfying. Now, back to working through all those emails!

                                                          At work: C# web app. Terrible architecture dictated by the client. Life isn’t long enough for this shit. Had to do more stuff around getting the team focused and less actually coding. sigh.

                                                          1. 1

                                                            A little bit of polish/debugging for a friend’s game/art project and yesterday I dove into om to start messing around with canvas graphics a bit. Currently just a little implementation of conway’s game of life to get up and running but seriously interested in seeing how far I can take core.async for graphical stuff, also want to mess around with some ways to structure state data so I only need to draw diffs on the canvas.

                                                            1. 1

                                                              the team I’m working on will be releasing a new version of our homepage, and I’ve been working on a new member only dashboard UI built in angularJS for sending and receiving messages throughout our site for the past 3 weeks – and this week we are pushing it up to staging so QA can take a look. It still has bugs, and that’s probably what I’ll be working on throughout the rest of this week. I work on a semi-large social networking site.

                                                              At home, I’ve been working on building a portfolio website for myself in middleman – a static site server in rails that runs on puma – and as soon as that is finished I’m going to build a blog in meteorjs.

                                                              I’m so surprised to see how everybody here works on such low level stuff. I really need to work on getting deeper into the stack….

                                                              1. 1

                                                                Felt like trying out a new shell this week, after the constant irritation of the delay in opening a new terminal on my system (due to shell startup). Likely due mostly to bash-completion and not bash itself, but figured I would try something else for the hell of it…

                                                                So I am giving mksh a spin (brew install mksh). Liking it quite a bit so far. Small, very fast, and decent usability. Not many bells and whistles but it is getting the job done. I like how long lines are handled via a scrolling like thing. Neat. Seems to handle junk output (like from curl with no newline) better than bash did. The only thing I miss is ssh completion. Thinking of either writing a shell script to give me a list of hosts and a hotkey based on a prefix, or something that just sets up lots of shell aliases.

                                                                1. 2

                                                                  Since you mention brew, I guess you’re using Terminal.app? In that case it might not be the shell’s fault. (Although I’d still say give zsh a try as long as you’re looking around, it’s great)

                                                                  Maybe this tip would be of use - sometimes /usr/bin/login takes a long time searching system logs for the date and time of your last login, and apparently if you change the Terminal.app prefs to start a specific shell, it calls login with -q, which stops this.

                                                                  I got this from this HN thread, which has some investigation: https://news.ycombinator.com/item?id=3884360

                                                                  I just tried to verify that it’s still an issue on 10.9, and I couldn’t really tell - my first new terminal was slow, but subsequent ones are fast, regardless of the Terminal pref setting or .hushlogin. Maybe getlastlogxbyname grew some caching in the last 889 days. Still, it’s worth a try. Good luck!

                                                                  1. 1

                                                                    Thanks for the tips! I am indeed using terminal.app. Since I just changed my login shell, the slow startup has gone away. My hunch is that bash-completion was the culprit.

                                                                    Good to know that the preference setting option calls login with -q though. If I decide to give other shells a try, I will make sure to set that as well.

                                                                  2. 2

                                                                    zsh is pretty nice, combined with oh-my-zsh

                                                                    1. 2

                                                                      I hear you on delays. At the risk of sounding entitled, anything but the slightest perceptible delay is incredibly annoying in my shell. I have a hand-tuned dotfiles repo that I’ve gotten zsh’s new tab time down to 0.1s on average. I do that by only including completions I actually use, which is about 1 or 2 total. I find I lean on command completion so rarely I don’t need it at all.

                                                                      Ideally, it’d be loaded asynchronously so we wouldn’t have to have this debate to begin with, but, hey…

                                                                      1. 1

                                                                        I agree with using completion in only a few instances. Command, directory, git branch name, and ssh hostname completion, are about the only completions I ever use. Command and directory completions are usually built in.

                                                                        So that leaves 2 that I ever use. The git branch completion is just downright laziness, and I do without just fine. I am missing ssh hostname completion a bit more right now, but I can compensate by shorter aliases in my .ssh/config, shell command aliases, or external scripting. I suppose one bonus of not relying on bash-completion, is greater portability to other shells.

                                                                        My own dotfiles repo is experiencing a bit of a renaissance lately!

                                                                        1. 1

                                                                          I admit I rely on all of those for completions. The funny thing about doing so is that you tend to miss opportunities for further streamlining your setup or developing better tools because completion is good enough.