1. 20

It’s that time of the week again.

What are the great projects that Lobster’s are working on?

For me it’s working on finding a new job that is part-time and remote - so all the current articles on the failure in the hiring process are of immediate interest :~)


  2. 10

    For my day job, I’ve been working on what’s causing larger code to be generated by emscripten so that we can reduce the size of our generated code further. This has been pretty fun and involves working at multiple levels:

    • What IR (LLVM bitcode) is clang producing?
    • How is that getting converted to JavaScript (really asm.js) by the LLVM JS backend? This also includes looking at how the IR gets changed by the “relooper” part of the JS backend, not just how JS is generated for the IR generated by clang.
    • How is that JS getting transformed by the emscripten JS optimizer?
    • How was the original C++ written? Why exactly did things happen as they did? (STL and the template expansion from that is pretty interesting in this area. You probably don’t know want to how big the code from a single instantiation of std::merge_sort is!) What can I change in the C++ to generate smaller code? (I’ve been able to get 30-50k improvements from relatively small changes and that really adds up.)

    At any rate, that’s pretty fun stuff to sort through.

    For Dylan stuff … Peter Housel has landed enough of the LLVM back-end work that it now works to some extent on the master branch of Open Dylan on Mac OS X, Linux and FreeBSD. There are still various known bugs, unknown bugs, missing features and caveats, but it is looking pretty good so far. (If you want debug info to work, you have to go from LLVM bitcode to machine code with LLVM+Clang 3.5 and not yet 3.6…) This LLVM backend takes a very different approach from others in how it integrates with LLVM (no runtime linkage), so there will probably be some blog posts about that stuff soon.

    I’ve also been digging through a lot of TypeScript and React stuff and am about to start figuring out how to get them to work together for my own purposes.

    One of my projects is now becoming a commercial enterprise with a friend and I starting a business to work on it together. This is pretty exciting (to me) and I’m looking forward to getting a lot of things in place so that we can demonstrate what we’re working on (Atom Shell, TypeScript, React, SWIG-generated bindings for some C++ code, etc.) This will hopefully make it clear why I’m pretty interested in how the Symbolics Open Genera environment worked.

    1. 2

      I’ve also been digging through a lot of TypeScript and React stuff and am about to start figuring out how to get them to work together for my own purposes.

      Just curious: Why TypeScript instead of Flow? The latter appears to support React’s JSX.

      1. 3

        Actually, there’s a few reasons for that … One and the easiest is that TypeScript is just more mature for now and has a broader base of support and documentation.

        Related to that, the product that I’m working on is a tool for programmers and is meant to be extensible and programmable. It’d be nice if that could be done in TypeScript (in addition to JS) so that our typed interfaces could be used to provide better compile-time feedback. Shipping the TypeScript compiler on all of our target deployment platforms is easier than Flow, especially for Windows.

    2. 7

      Tomorrow is my last day at work! I’m quite excited about my impending stay-at-home dad adventure. Next week I’m moving from London to the north of the country where my wife is from. Really looking forward to exploring the area with my 3-year-old son.

      1. 7

        Putting the final touches on Storm Applied before it goes off to be printed.

        1. 5

          I’ve been working on a prototype capability-based content-addressable store to better understand both types of systems; it’s been fun to think through it. I started actually writing code for it this weekend.

          Still reading Mathematical Logic; also started reading “Programming Distributed Computing Systems” and trying to keep up on The Morning Paper.

          1. 4

            Last week I started learning Rust. I mostly use interpreted, dynamic languages so it’s been fun learning something in a different vein, although working with a strict compiler has been frustrated at times!

            This week, to apply what I’ve learnt I’m building a simple service to handle allocating finite quantities of items (think reserving/purchasing stock in an e-commerce environment). I’m looking forward to nailing the core functionality so I can move on to performance optimisations!

            1. 4

              On the day job, I’m starting my second week on a new team. My new team mate has been a one-man show for a few months now and it was starting to eat away at his sanity (plus you know, on-call 24/7 sucks the longer you do it in a row…). Nothing but awesomeness to be said of that guy, I think we’ll make a great team. Zero stressed out about learning the new code base, smooth transition, so far I like it.

              I also started using HabitRPG to force myself into putting a small but predictable amount of time on my personal project (automagic generation of a restful interface to a DB in Go), and so far it has worked awesomely.

              I’ll be working on the immutability of my generated data objects this week, and I’ve also been looking at JSON-LD as a way to sanely and predictably output my data to HTTP clients of all kinds. So far I can’t say that I’m convinced, I can’t (yet) see how this will all wire together. I wonder if I’ll have to generate my own vocabulary based on a column’s type and nullableness (totally not a word).

              I’ve also been tinkering with the idea that I should have a complete meaningful working example, like a blog engine automatically generated from my system. At the very least it would be cool, and it would be a darn awesome way to sell it to business people. “See, no code. See, I execute command. See, I have full working blog.”

              1. 2

                HabitRPG looks really good, I think I’ll give it a go. Nice find!

              2. 3

                Last week I implemented several optimizations to the network stack of Fire★. I used adaptive sleeps in some areas and removed many heap allocations. Eventually I will remove all explicit sleeps.

                However, this week is interesting. Once in blue moon I have an idea that can fundamentally change the way the business I work for operates. I started implementing a prototype and along with a paper I am going to write, I hope I can inspire and influence the right people to get a good project going. Obviously I cannot say what this idea is and how it works, and maybe it turns out to be a terrible thing, but I am excited!

                So my personal projects are going to be set aside until I get something cool going here. However, if anyone has any contributions to Fire★, I will always make the time to review and merge them. If anyone wants to help out, maybe making more example Apps could be a fun way to get involved.

                1. 2

                  How do you start finding people to chat with on Fire(star)? I’ve installed the program, but I have no friends!

                  1. 1

                    Gabe, I will be your friend as there are far too few in this world. I sent you my identity.

                    In regards to finding a friend, there is no technical system to do that. You simply have to exchange identities with people you know. Fire(star) at this point is not designed for random anonymous chat, but real time collaboration with people you trust.

                    If you don’t have friends, you have to find some to chat with. Or as can happen in the world of love, you can chat with yourself.

                    If you want to test the p2p stuff, you can run a second instance like so

                    ./firestr --home <my other home directory> --port <second port>

                    and then use identities to connect the two.

                2. 3

                  Compiling OPENBSD_5_7_BASE!

                  1. 3

                    $dayjob: Actually in the office (I usually work remotely from the other side of the country) working with various business units on a neverending Puppet 3 upgrade. Anti-Tip: use strict_variables but good luck teaching your org about initializing all values to undef

                    $extra: So, a few weeks ago I got really frustrated with all configuration management products. Simply, I was really annoyed by the language dependencies, pain of deployments, lack of speed, etc. (Before you mention it, yes I have used $cfgmgmtappX. That one is frustrating too.)

                    To scratch that itch, I created a very simply library (in C) which does the ‘how’ of configuration management. I created some unix-y binaries:

                    [root@b6fdd7c544c6 ~]# cm-group -h
                    usage: cm-group [options] GROUP
                            -a, --absent         ensure group is absent
                            -g, --gid GID        group gid
                            -h, --help           display this message and exit
                            -n, --noop           print but do not commit changes
                            -p, --pass           encrypted group pass
                            -v, --verbose        enable verbose output
                    [root@b6fdd7c544c6 ~]# cm-group -v foo
                    [group] foo: is absent and should be present
                    [root@b6fdd7c544c6 ~]# cm-user -v -g foo -d /home/foo -s /bin/bash foo
                    [user] foo: is absent and should be present
                    [root@b6fdd7c544c6 ~]# cm-dir -v -o foo -g foo -m 0700 /home/foo
                    [dir] /home/foo: is absent and should be present
                    [root@b6fdd7c544c6 ~]# cm-file -v -o foo -g foo /home/foo/one
                    [file] /home/foo/one: is absent and should be present
                    [root@b6fdd7c544c6 ~]# cm-pkg -v ed
                    [pkg] ed: is absent and should be present

                    and some python FFI bindings as well.

                    This week I’m working on recursive changes to state for dirs, ruby FFI bindings, thinking through the ‘when’ of configuration management, and how to handle duplicate declarations.

                    1. 1

                      This seems appropriate: http://xkcd.com/927/

                      1. 1

                        I wasn’t really aiming to implement standards, just to make the usage of configuration management in large and small scale environments align more with the internal language and architecture choices of the organization. I thank you for your generous and extremely well-worded input, however.

                        1. 1

                          Yeah, after sleep I realise my reply was unnecessary. You took it extremely well, and I apologise to you and congratulate you on that.

                          1. 1

                            No worries, at all. Enjoy being a stay-at-home dad, it’s the best gig (or so I hear)!

                    2. 2

                      Interview loops - hiring Scala developer in Dublin - it’s hard in fact.

                      1. 2

                        Last week:

                        This week:

                        • Start drafting chapter 2 of Prose for Programmers
                        • Follow up on potential sponsorships for A Drip of JavaScript
                        • Write the next issue of A Drip of JavaScript
                        • Lots of HTML template refactoring at work
                        1. 2

                          Hello! Late the the party as usual.

                          I hope this is a good sign, but the things I’m working on in Card Minion are getting more and more detailed. Looks like the “big picture” stuff is starting to settle in. The biggest challenge I’m currently facing is tracking the state of address objects. Addresses can be partial, valid, complete, paid, or some weird combination of that. I’ve started building a more robust system that can determine when an address should be validated (the original system validated every address, every time, and you can guess how well that worked out). I’m also playing around with different ways to represent the various states/combinations to the user. UX isn’t my strong suite and has really required a lot from me on this project.

                          The good news is I didn’t need to create any new db migrations this week! Those always make me nervous.

                          1. 2

                            Dayjob - proprietary. But just found out github supports checklists in pull requests! Now if only I got to use gerrit for work I could

                            Personal -

                            I’ve started hacking on a backup utility. I know there are 4 million others, but this one would be mine. The only part that seems to be a real struggle for me is implementing the backup tool I want would include having a guile runtime and a golang runtime. This, this leads to some ridiculous binary sizes, and it’s something I’m not exactly thrilled about. I want to code in golang, not C.

                            1. 2

                              I’m trying to find a Javascript library to generate an Eliptic Curve keypair deterministically from seed input. This is for the user interface of Peergos. Keybase’s kbpgp is fantastic once you have a keypair, but can’t currently let you set the source of randomness or seed to allow deterministic generation. Any suggestions very much appreciated.

                              1. 1

                                You might be interested in SQRL and the work by djb it references.

                                1. 1

                                  Thanks, SQRL looks interesting. I think I’ve answered my own question though with TweetNaCl.js which combined with scrypt should do the trick. DJB is a legend.

                              2. 1

                                Decided to launch my little app. Fun little side project for looking at funny stuff.

                                Sorrce - 3 clicks. Crazy content.