Still working on Haskell Programming with my coauthor Julie. Recently finished an initial scaffold of the functor/applicative/monad material, moving on to foldable and traversable now. We’re releasing algebraic datatypes through testing (right before monoids) this 15th. Next month on September 15th the monoid/functor/applicative/monad sequence will be released.
Kicking around ideas for a final project, pretty hard to find something that fits all of our specifications. Not easy to find something that’s:
Tractable for a beginner without much exposure to Haskell libraries. We’re not assuming they know databases and the like, for example. The book is written with the limitations of inexperienced programmers in mind.
Sufficiently interesting to someone that hasn’t been neck deep in code or distributed systems for awhile. I’d love nothing more than to have them make a Kafka or SaltStack clone in Haskell but it’s going to bore them to tears.
Trying to avoid heavy duty web apps that would require a lot of frontend work or learning a whole framework as well. If anyone has any suggestions, please reply here or please tweet or email them to me.
We’re also looking for reviewers (of any experience level) so if you have the time and it interests you, please reach out!
For a final project, perhaps a (text based) command-driven discussion / social network? Maybe start out with an in-memory implementation then swap it out for a file-based implementation (reinforcing the abstraction tools you’ve taught)? It could be a lead-in to databases: “manipulating all that text data was kind of a pain and won’t be very fast with hundreds of users. go check out databases!”. You could also generate/serve some simple HTML and say “that’s the basic idea behind webapps”
I really like this idea! I’d have to think about how to avoid the problems with NAT and networking for home-users, but I’m going to kick it around with Julie and see if there’s something workable here.
That’d be a good descriptor: you could include your <social-network-du-jour> handle in your profile for longer-term connections, maybe. For a talk, maybe a way to submit questions during the talk and have them queued up at the end.
Maybe https://ngrok.com/ will help? (also has a handy request inspector!). I’m not sure if it will be appropriate in complexity/difficulty for your audience, though.
Cool, i’m curious what you think of the maybe haskell book that thoughtworks put out recently? I rather liked its approach of introducing functor/applicative/monad as concepts. I wish it had been out a year ago when I was starting to relearn haskell in earnest.
I’ll have a look at the new updates after you update the epub, been following along with interest on this book.
And for a final project, can always punt and do a todo application. >.<
It’s hard for me to think about a 94 page book when we’re working on something much longer with very different objectives. You could probably stack it up against how I review books with more similar objectives in this post and see whether it hits the high notes I care about.
It’s very hard to think about a book with wildly different scope like that. We release >100 pages every month and we’re trying to make a book that gets people from zero to, “I can begin to solve my problems with Haskell”.
More fundamentally, I’m skeptical people can just be taken on an isolated tour of functor/applicative/monad, there are foundations that have to be in place for it to be anything but cargo culting.
More specifically about Maybe Haskell: I think it’s worth giving people a teaser of what’s possible. I do this sort of thing too, but usually for in-person demos/tutorials. However, I don’t regard them as being a component of any kind of pedagogical scheme.
For sure, i’ll admit maybe haskell is at best a great way to whet someones appetite for haskell. So in that regard I’d place it alongside LYAH. Although even less comprehensive in that it doesn’t cover a whole lot of haskell at all. Then again it doesn’t really bill itself as such either.
I just really liked the approach to the functor/applicative/monad explanation used is all. It helped convince a friend to learn haskell. But they’re hitting the same wall everyone seems to with haskell learning materials. I’m helping but i’m not the best teacher so I’m not sure if I’m hindering more than helping. Haskell isn’t hard either its just difficult to elaborate why doing things a different way is beneficial. In hindsight its 20/20 but from the other direction it just looks like a mirror.
Either way keep it up the lambda calculus links on the first chapter were fun to review and read. I was pleasantly amused that you started out with that.
Looking over the ToC, I’d noticed that the four final chapters are TBA. I’d love to see at least one on something along the lines of “using Haskell in anger”: some tips for real-world Haskell use. Things like common packages to be aware of, debugging, problem solving with Haskell, and deploying my programs. Are there plans to include something like that?
We’re always open to ideas/suggestions, but those chapters are literally TBA. We have topics planned for them.
The “almost guaranteed to happen” chapters are IO, “when things go wrong”, and the final project. The more open slot is DSLs & APIs. Data structures covers a lot of the common packages to be aware of, monad transformers covers some of those as well. Debugging is sort-of part of “when things go wrong” but it’s probably not quite what you’d think.
The way we name our chapters hides practical examples. The upcoming release (15th) has more practical projects and examples than have been seen so far.
Your suggestions are very much appreciated as I wasn’t happy with the “DSLs & APIs” chapter and I’m seeing a common theme (which you’ve improved the confidence in) in what practical bits people want.
I’d be happy to review; I’m going to university in a couple of months and will be doing a very theoretical CS course, which begins with haskell - I’ve been told to buy the Bird book on Haskell, but a lot of people have told me it’s terrible. I already know the basics of haskell though as I’ve used it for a couple of years.
Ah, I sent you a pm, not entirely sure how the privacy settings work on this website but I was under the impression my email was viewable in my profile.
I just thought there ought to be a “make my email public” checkbox or something like that, and reading https://lobste.rs/privacy implied that that might already be the case, duly noted though.
Putting code samples into my book on mutability and side effects in Ruby (based on my talk, tenative title “The Ruby Fulcrum”. I can extract most of them from the talk, and I want them in place before I start writing prose for the body chapters.
On the side: started reading The Little Prover this week, also learning logic with Kleene’s Mathematical Logic. As a fun little diversion, I wrote a toy interactive solver for simple propositional logic problems. I’ve been doing less tech stuff on the side lately, mostly out of a distaste for the industry. This was a welcome break doing the part of computers I enjoy.
At work, we did a release of cfssl last week. Still a mountain of docs to write, and I don’t have much time at work to work on CFSSL related stuff.
Two months off for me helped a lot. Today was my first day at IBM on the compiler team after said two months. Organizational oddities and onboarding chaos is far superior to what led to the burn out. I’m much happier now.
Thank you for the kind words! Having a clear and visible structure was actually one of the design constraints I set myself for the book, so that it can (hopefully) serve as an example of the style it is teaching.
Just looked at PfP. Very cool. Do you have an email list or something I can subscribe to for updates? I find watching git repos of docs is too noisy to be of use, as you get notified for every spelling correction.
Edit: Just found the LeanPub link, never mind me :)
There isn’t a mailing list. However, I try to keep the noisiness of the repo to a minimum. Basically the only updates are when I issue a PR for a new section that I’d like people to “prose review”. :-)
This week I’m working on the sharing side of our end-to-end encrypted file storage and sharing network, Peergos.
I ported our erasure codes from Java to Javascript, but for a 5 MiB file the encode took 60s and the decode 360s. Whereas the Java version took 3s in either direction. After removing some unnecessary copying and object creation I got the encode down to 3s and the decode down to 240s. But I’m struggling to find the missing 10X in the decode. It seems like both Chrome and Firefox are constantly trying to JIT the hot function, which is finding the syndromes of the Galois Polynomial, and never settling down to a jitted version. No idea why. If anyone wants to try their hand, I’ve set up a minimal JSfiddle (WARNING: the fiddle takes about 4 minutes on a good machine and it uses the event thread, so the browser might think it’s frozen - it displays the time the two phases took, upon completion).
Also last week, I got public links to files working (essentially, the key is encoded in the URL). There’s a demo which shows the current state.
Your jsfiddle seems a bit buggy. The GF.exp function tries to index into nonexistent this.exp[y] (I believe this should be this.expa[y], but after fixing that there’s an exception in GaloisPolynomial.findErrors
Thank you, sirpengi. I fixed that and the following errors, but then the syndromes are totally wrong. Looks like some of my “optimisations” have introduced errors. Back to the original JS for me. I’m too used to type safety.
Sadly I don’t think this version is correct either. I noticed again that all calls to GaloisPolynomial.eval got an undefined x value (turns out, Galois.exp was defined as a Uint8Array but a few lines later overwritten with a function). In any case, I started to poke around again (https://jsfiddle.net/41tuqcsL/1/) by adding a “use strict” directive and there are other issues with the code.
You should probably continue working with the “use strict” directive, as not having that on has been silencing some errors, and having it on enables some optimizations that aren’t otherwise possible.
Thank you very much, Sirpengi! I’ve fixed the correctness bugs, and the resulting decode ran in 3s, although the encode is now 40s. Once that’s optimised, we’ll probably spin this out into a separate library in case anyone else needs javascript erasure codes optimised for large byte arrays.
Writing the transactions chapter in the Node on Postgres book I’m writing. I’m always interested in hearing what people would like/expect to see in the book
Working with beta-testers for my code-quality app, SidekickJS (ask if you’d like to try it out! Supports JS + Ruby)
Last Week we took a C-64 demo to Assembly and brought home 1st place in our compo.
This week we’re still suffering from jet lag, shock, and the general malaise that follows working so hard on something for so long, then finally realizing you have no idea what you’ll do next. I’m working on a write-up of the experience, and my code partner is working on some improvements to the lib we’ve written for Kickassembler to make our lives easier. And documentation, of course.
I think we’re both secretly dreaming up our next demo, but haven’t been inclined to mention it to each other yet, because goddamn we’re tired.
I almost shipped my side project this weekend: http://www.artisanassistant.com/ <- the front page is super janky right now, that’s one of the things that didn’t get finished. Stack is
Server
Node
Express
Endpoints
Client
Ember 1.13, should be drop-in 2.0 when it comes out
This replaces my old mega-jank Sinatra codebase. I think tonight after work I’ll get the MVP shipped. The MVP is just for my flagship customer, then comes the fun ‘add in billing code etc’ and letting others sign up.
I’m going again through The Elements of Computing Systems. But this time I’m creating a lexer/parser in Racket (learning this language on the side) for the HDL files in the first chapters. I didn’t really like working with the GUI they provide.
I got Qt playing video successfully with gstreamer on my Jetson, so now I’m going to integrate caffe and then we’re off to the races. The Linux video processing pipeline is … exciting? when compared to QuickTime or AVFoundation or DirectShow. Thankfully, my current application is not overly concerned with image quality, but yeesh.
Pretty big riff at work, couched as cost saving. Seems like the layoff axe fell heaviest on the remote folks (which included me), those in satellite offices, and the more senior folks (which included me).
At least I got some severance. Might take a couple of weeks off (forced vacation!) before starting to run the job search gamut.
This Week:
Digging into my reading list more, updating my resume, enjoying the sunshine.
I’m thinking more and more about a different kind of social networking service. An open-source, contribution-driven service that’s direction is not defined by the maintainer, but the contributors. More info here.
ruby gem for integrating with several organizations that you can call/text/webform to pick up unwanted food and deliver it to homeless shelters
Various work things, mostly refactoring and splunk logging queries/tuning, ramping up on new codebases, adding test coverage, waiting for various startup-related announcements
Trying to install python on a snowflake server for someone in finance to use with weird centos-related gcc and ssl difficulties
Writing a blog post about enterprise hackathons and my opinions on what they are good for / how to do them wrong
A lot of bug-fixing and work on our Enterprise Social Network product, Quoddy. The roadmap1 calls for a release soon, and I’ve got a lot of stuff to get done between now and then. One of the big features we’re working on, that isn’t even really started, is Apache Zeppelin2 integration.
Outside of that, rewriting some marketing collateral. That stuff will probably dominate my week. Some other small stuff might slip in, but that’s the gist of it.
Did some performance improvements in the udp messaging stack for Fire★. The performance was about 3x faster messaging performance. Makes me wonder what I was thinking before! There is probably still a lot of room for improvement too. Advanced data structures are NOT your friend when it comes to performance. This is counter intuitive, but true.
This Week
Working on UI for rejoining conversations when you get a network partition or disconnection.
Cache misses. We no longer have random access. Most advanced data structures are node based, which results in large amounts of cache misses. This has also been true for a long time but most people don’t internalize this, myself included.
Landing my spinning plates at $work for a couple of days, then off to visit family for a nice holiday. Going to explore That London for a couple of days which will be fun (kids have never been before, and it’s a good 15 years since I’ve done tourist things there).
I’m continuing on my quest for surfing waves, and still working slowly on my implementation of CFDG in racket.
My failed dawn patrol, earlier in the week caused me to learn about tides, as the break I went to is horrible at low-tide. As a result, I’ve been thinking about building out a simple web app. Given a set of times I can probably paddle out (morning before 9:30am, afternoon after 5), tell me when the conditions are likely to produce surfable waves for my skill level. Of course, this prediction will be extremely naive, but it should allow me to make plans further ahead of time–which I can always cancel due to a bad surf report.
Once you know your breaks - you’ll know how they work in different tide and surf conditions - but the biggest issue I had with surfing before work was ensuring I got out of the surf in time to get to work :~)
Yup! Fortunately, I live in Southern California, and have a bit of data about “this break is best during high tide” or “best during low tide,” which will help here. Far from my own observations, of course – I’ve only been surfing at one break so far! But, based on my failed early morning trip, I know that low tide produces waves in very shallow water at this break, so to avoid it.
As for the other problem, well, I need to get a watch, and my arms aren’t quite strong enough to paddle more than an hour anyway, e.g. I’ll deal with that in a few months.
Work (GSoC):
Code emission and generation for almost all the rules of the JIT'ed firewall has been completed! The two commands left are the ones that modify the control flow of the firewall. These two are going to be harder. I might as well go and try to test the firewall at a different environment than my laptop, where FreeBSD-CURRENT(ish) just panics.
Non-work:
I’ve been mostly reading when possible “Quantum computing since Democritus” which is a really reallyreally interesting read.
I’ve also been trying to choose a functional language to stick to (I’ve chosen Haskell). I’d like to work on a unikernel implementing something interesting as OSS (I’ve been thinking in Dark Internet Mail Environment), but all this sounds a little bit optimistic: there seems to be an eternal lack of time, I should organize my time better… (Maybe is time to finally move on and learn GTD, or something like that).
At $HOME, learning about doing Unix IPC with mmapped files and, at the same time, trying to grok mio in particular and edge-triggered readiness notifications and non-blocking I/O in general. I’ve also assigned myself a Servo issue for the week.
@Work: Open sourcing a modular Javascript standard library replacement that I’d been using in a few different pieces at work. Building it out as a library has been helpful to get the structure down and accelerate testing. Super early work warning, but here it is: https://www.npmjs.com/package/algebraic
Finishing up a Phoenix/Elixir application called Wisewolf at work. It aims to provide a site agnostic notification system (add a script tag and you are good to go). We’ll be open sourcing it after I make sure it can handle serving notifications to all of our internal sites (50+).
We are on 2 of the sites so far and it’s already at 70 requests per second. The average request gets served in <2ms (with a db hit), so it’ll be fun to see how it scales up. I haven’t really touched anything perf wise so I hope it stays strong.
It’s based off of Netflix’s blesk project, but will package the server as well. I’ll be going through final code quality checks this week and polishing up the UI for it’s open source release.
Continuing to work on Helix Pi, my tool for creating games with no coding involved.
Notably, in the last week I shipped a landing page, so visitors aren’t dumped straight into the editor.
I also created a website to benchmark both the quality of the programs Helix Pi creates and various aspects of performance. You can check that out here. It automatically runs the benchmarks and updates the graph when I push code, which is nifty.
In the process of the above I realized the benchmarks need to be a separate module so I can run them while developing (previously I was contorting unit tests for my purposes). I’ll probably tackle that at some point soon. It feels weird choosing to work over tools instead of Helix Pi itself, but I think it will ultimately be a net increase in development speed.
I’ve now crept up to 3 repos for helix-pi, so I’ve created a Github organization to put them all in one place.
Working on adding Memory-Mapped IO support to rocket-chip https://github.com/ucb-bar/rocket-chip, our (UC Berkeley ASPIRE Lab’s) line of RISC-V processors. I’ve already written a generator that can produce an AXI4 interconnect from an address map. The one remaining issue is aligning read data correctly to go back up through the memory hierarchy. With this, I’ll be able to keep working on implementing networking support and RDMA support.
Besides this, I’m intesifying my studying for the Ph.D. preliminary exams, which are coming up at the end of the month.
Managing complete rewiring and equipment replacement for our conference room. That means 16x16 HDBase-T matrix switcher for video, distributed audio switch with AVB, boring stuff such as 3 projectors, speaker system cameras with h264 encoders and some lighting.
We are also writing an open source control system for the whole thing in Racket (low level stuff) and Node.js (user interface and some logic). I am in charge of the low-level stuff that is translating serial-port and obscure telnet protocols to decent ZeroMQ interfaces talking in JSON.
https://lispcookbook.github.io/cl-cookbook/ is what I’ve been helping resurrect in the past week. It’s the canonical Common Lisp cookbook, but has gotten sadly out of date living on Sourceforge. Myself and a couple other people have been working on it in Github.
But in the $day_job, I’m poking Docker fleet management systems for the cloud. Also fun.
I’m working on a re-write of an incomplete game based on trade wars, while time is available.
https://github.com/mlitchard/emporos
I ran into some surprising bugs the first time around, so this time I will use Travis and quickcheck this time. Also, ghc has some cool newish features that I believe will help me encode game rules at the type level. This goes against the sober judgment of others, but I’m doing it anyway.
Doing a section of a re-write of an incomplete game. Specifically I’m attempting to encode some game rules at the type level. I’ve been advised by people with more sober judgment to not do that. Meh, doing it anyway. Maybe I’ll have a nice war story about why it was a bad idea.
Working on solving one small puzzle from the defcon crypto & privacy village contest in the rest of my time. I’ve come to realize it should be solvable via a Meet in the Middle attack. In the meantime I’ve used blowfish cbc w/ openssl command line, python and C++ (via Crypto++). The C++ one is by far the fastest and is probably going to get me there… that is if they used the same initialization vector for both encryption passes.
I realised that in the last few months I’ve managed to avoid learning … anything, really. I can say that I don’t really like this feeling. As such, nowadays I’m trying to catch up on JavaScript. I’ve not written any in about 3 years, and when I did it was mostly jQuery.
I have to say, with everything that changed or came in the mean time: Backbone, node, Express, Flux, React, it’s…pretty overwhelming. So these weeks I’m trying to hit two birds with one stone: I’ve been meaning to write a small app that can help me keep track of my finances and get reacquainted with JS in the mean time.
Not very impressive, I know, but I find it pretty fun nonetheless.
I’ve also been rewriting my own website to use Hugo for ease of updating it and seldom blogging.
Finally, I’ve been finishing up a large overhaul and relaunch of a social analytics service for Vine. Written in Go and hosted on Google App Engine. I’m not even going to bother linking the github repository as it’s very out of date with my local branches.
Still working on Haskell Programming with my coauthor Julie. Recently finished an initial scaffold of the functor/applicative/monad material, moving on to foldable and traversable now. We’re releasing algebraic datatypes through testing (right before monoids) this 15th. Next month on September 15th the monoid/functor/applicative/monad sequence will be released.
Kicking around ideas for a final project, pretty hard to find something that fits all of our specifications. Not easy to find something that’s:
Tractable for a beginner without much exposure to Haskell libraries. We’re not assuming they know databases and the like, for example. The book is written with the limitations of inexperienced programmers in mind.
Sufficiently interesting to someone that hasn’t been neck deep in code or distributed systems for awhile. I’d love nothing more than to have them make a Kafka or SaltStack clone in Haskell but it’s going to bore them to tears.
Trying to avoid heavy duty web apps that would require a lot of frontend work or learning a whole framework as well. If anyone has any suggestions, please reply here or please tweet or email them to me.
We’re also looking for reviewers (of any experience level) so if you have the time and it interests you, please reach out!
For a final project, perhaps a (text based) command-driven discussion / social network? Maybe start out with an in-memory implementation then swap it out for a file-based implementation (reinforcing the abstraction tools you’ve taught)? It could be a lead-in to databases: “manipulating all that text data was kind of a pain and won’t be very fast with hundreds of users. go check out databases!”. You could also generate/serve some simple HTML and say “that’s the basic idea behind webapps”
I really like this idea! I’d have to think about how to avoid the problems with NAT and networking for home-users, but I’m going to kick it around with Julie and see if there’s something workable here.
Thank you :)
Maybe could be a LAN-only thing for e.g. conferences or something along the lines of that.
Pop-up social network?
That’d be a good descriptor: you could include your <social-network-du-jour> handle in your profile for longer-term connections, maybe. For a talk, maybe a way to submit questions during the talk and have them queued up at the end.
Sure thing!
Maybe https://ngrok.com/ will help? (also has a handy request inspector!). I’m not sure if it will be appropriate in complexity/difficulty for your audience, though.
I’d like to review. What do you need?
Is the email address in your lobsters profile a good way to reach you?
Yeah, sure, contact me at jordigh@octave.org
For review, do you need anything more formal than what I’ve been sending you and Julie on Twitter?
It’s more work and structure than that, but what you’ve been doing isn’t wildly different.
I wouldn’t mind helping out, since I want good learning materials out there.
Use the email address I used when I mailed you last week if you want to send me more info.
Cool, i’m curious what you think of the maybe haskell book that thoughtworks put out recently? I rather liked its approach of introducing functor/applicative/monad as concepts. I wish it had been out a year ago when I was starting to relearn haskell in earnest.
I’ll have a look at the new updates after you update the epub, been following along with interest on this book.
And for a final project, can always punt and do a todo application. >.<
It’s hard for me to think about a 94 page book when we’re working on something much longer with very different objectives. You could probably stack it up against how I review books with more similar objectives in this post and see whether it hits the high notes I care about.
It’s very hard to think about a book with wildly different scope like that. We release >100 pages every month and we’re trying to make a book that gets people from zero to, “I can begin to solve my problems with Haskell”.
More fundamentally, I’m skeptical people can just be taken on an isolated tour of functor/applicative/monad, there are foundations that have to be in place for it to be anything but cargo culting.
Fair enough, just thought i’d ask is all. Looking forward to the updates regardless! I’ll dig into the link.
More specifically about Maybe Haskell: I think it’s worth giving people a teaser of what’s possible. I do this sort of thing too, but usually for in-person demos/tutorials. However, I don’t regard them as being a component of any kind of pedagogical scheme.
For sure, i’ll admit maybe haskell is at best a great way to whet someones appetite for haskell. So in that regard I’d place it alongside LYAH. Although even less comprehensive in that it doesn’t cover a whole lot of haskell at all. Then again it doesn’t really bill itself as such either.
I just really liked the approach to the functor/applicative/monad explanation used is all. It helped convince a friend to learn haskell. But they’re hitting the same wall everyone seems to with haskell learning materials. I’m helping but i’m not the best teacher so I’m not sure if I’m hindering more than helping. Haskell isn’t hard either its just difficult to elaborate why doing things a different way is beneficial. In hindsight its 20/20 but from the other direction it just looks like a mirror.
Either way keep it up the lambda calculus links on the first chapter were fun to review and read. I was pleasantly amused that you started out with that.
I grabbed a copy of the book last week, so far so good.
sure, i’d be glad to help review. email address in profile is valid.
Hrm?
oops, thought i had :) fixed now
Looking over the ToC, I’d noticed that the four final chapters are TBA. I’d love to see at least one on something along the lines of “using Haskell in anger”: some tips for real-world Haskell use. Things like common packages to be aware of, debugging, problem solving with Haskell, and deploying my programs. Are there plans to include something like that?
We’re always open to ideas/suggestions, but those chapters are literally TBA. We have topics planned for them.
The “almost guaranteed to happen” chapters are IO, “when things go wrong”, and the final project. The more open slot is DSLs & APIs. Data structures covers a lot of the common packages to be aware of, monad transformers covers some of those as well. Debugging is sort-of part of “when things go wrong” but it’s probably not quite what you’d think.
The way we name our chapters hides practical examples. The upcoming release (15th) has more practical projects and examples than have been seen so far.
Fair enough.
Your suggestions are very much appreciated as I wasn’t happy with the “DSLs & APIs” chapter and I’m seeing a common theme (which you’ve improved the confidence in) in what practical bits people want.
I’d be happy to review; I’m going to university in a couple of months and will be doing a very theoretical CS course, which begins with haskell - I’ve been told to buy the Bird book on Haskell, but a lot of people have told me it’s terrible. I already know the basics of haskell though as I’ve used it for a couple of years.
What email should I contact you at?
Ah, I sent you a pm, not entirely sure how the privacy settings work on this website but I was under the impression my email was viewable in my profile.
Only what you explicitly put in the “About” box is visible (plus your Gravatar). You can see here what’s visible: https://lobste.rs/u/NickHu
I just thought there ought to be a “make my email public” checkbox or something like that, and reading https://lobste.rs/privacy implied that that might already be the case, duly noted though.
I’d love to help review! I have experience in other languages, and have made a few false starts with Haskell (through LYAH and the cis194 class).
A cis194 dropout is a perfect candidate for us! What email should we contact you at?
There’s a link in my profile now. Thanks!
Putting code samples into my book on mutability and side effects in Ruby (based on my talk, tenative title “The Ruby Fulcrum”. I can extract most of them from the talk, and I want them in place before I start writing prose for the body chapters.
Also doing a bunch of Haskell exercises from exercism and dailyprogrammer.
On the side: started reading The Little Prover this week, also learning logic with Kleene’s Mathematical Logic. As a fun little diversion, I wrote a toy interactive solver for simple propositional logic problems. I’ve been doing less tech stuff on the side lately, mostly out of a distaste for the industry. This was a welcome break doing the part of computers I enjoy.
At work, we did a release of cfssl last week. Still a mountain of docs to write, and I don’t have much time at work to work on CFSSL related stuff.
Overcoming burn out.
Preach it. If you want somebody to vent to/chat with, hit me up.
Two months off for me helped a lot. Today was my first day at IBM on the compiler team after said two months. Organizational oddities and onboarding chaos is far superior to what led to the burn out. I’m much happier now.
Career
Learning
FOSS
evil-mode
keybindings.Teaching
Looking forward to more stuff on prose. I finished what’s currently there and I liked it so far, especially the structure of the material (so meta!).
Thank you for the kind words! Having a clear and visible structure was actually one of the design constraints I set myself for the book, so that it can (hopefully) serve as an example of the style it is teaching.
Just looked at PfP. Very cool. Do you have an email list or something I can subscribe to for updates? I find watching git repos of docs is too noisy to be of use, as you get notified for every spelling correction.
Edit: Just found the LeanPub link, never mind me :)
There isn’t a mailing list. However, I try to keep the noisiness of the repo to a minimum. Basically the only updates are when I issue a PR for a new section that I’d like people to “prose review”. :-)
This week I’m working on the sharing side of our end-to-end encrypted file storage and sharing network, Peergos.
I ported our erasure codes from Java to Javascript, but for a 5 MiB file the encode took 60s and the decode 360s. Whereas the Java version took 3s in either direction. After removing some unnecessary copying and object creation I got the encode down to 3s and the decode down to 240s. But I’m struggling to find the missing 10X in the decode. It seems like both Chrome and Firefox are constantly trying to JIT the hot function, which is finding the syndromes of the Galois Polynomial, and never settling down to a jitted version. No idea why. If anyone wants to try their hand, I’ve set up a minimal JSfiddle (WARNING: the fiddle takes about 4 minutes on a good machine and it uses the event thread, so the browser might think it’s frozen - it displays the time the two phases took, upon completion).
Also last week, I got public links to files working (essentially, the key is encoded in the URL). There’s a demo which shows the current state.
Your jsfiddle seems a bit buggy. The GF.exp function tries to index into nonexistent
this.exp[y]
(I believe this should bethis.expa[y]
, but after fixing that there’s an exception inGaloisPolynomial.findErrors
Thank you, sirpengi. I fixed that and the following errors, but then the syndromes are totally wrong. Looks like some of my “optimisations” have introduced errors. Back to the original JS for me. I’m too used to type safety.
For what it’s worth, here’s a correct, but not “optimised” version that takes ~400s, JsFiddle
Sadly I don’t think this version is correct either. I noticed again that all calls to GaloisPolynomial.eval got an undefined x value (turns out, Galois.exp was defined as a Uint8Array but a few lines later overwritten with a function). In any case, I started to poke around again (https://jsfiddle.net/41tuqcsL/1/) by adding a “use strict” directive and there are other issues with the code.
You should probably continue working with the “use strict” directive, as not having that on has been silencing some errors, and having it on enables some optimizations that aren’t otherwise possible.
I’d also recommend trying a type-checked flavor of javscript (say, http://www.typescriptlang.org/ or http://flowtype.org/)
Thank you very much, Sirpengi! I’ve fixed the correctness bugs, and the resulting decode ran in 3s, although the encode is now 40s. Once that’s optimised, we’ll probably spin this out into a separate library in case anyone else needs javascript erasure codes optimised for large byte arrays.
Writing my first post on lobste.rs- hello :)!Heh, I just wrote a transactions interface for postgres/node… some new things, some disappointing ones. Ping me - kev@inburke.com
Last Week we took a C-64 demo to Assembly and brought home 1st place in our compo.
This week we’re still suffering from jet lag, shock, and the general malaise that follows working so hard on something for so long, then finally realizing you have no idea what you’ll do next. I’m working on a write-up of the experience, and my code partner is working on some improvements to the lib we’ve written for Kickassembler to make our lives easier. And documentation, of course.
I think we’re both secretly dreaming up our next demo, but haven’t been inclined to mention it to each other yet, because goddamn we’re tired.
Cool!
I almost shipped my side project this weekend: http://www.artisanassistant.com/ <- the front page is super janky right now, that’s one of the things that didn’t get finished. Stack is
This replaces my old mega-jank Sinatra codebase. I think tonight after work I’ll get the MVP shipped. The MVP is just for my flagship customer, then comes the fun ‘add in billing code etc’ and letting others sign up.
At $WORK, more docs. I’ve gotten us down to really few: https://github.com/rust-lang/rust/issues?page=1&q=is%3Aopen+is%3Aissue+label%3AA-docs just 12! The old ones that are there are big ones, though. I want to try to get them all closed this week, we’ll see.
It’s been so long since I did any web dev with Sinatra, but I remember those days.
Yeah, give someone a Ruby and a weekend, and you can get a lot done, but then you want to throw it away…
I’m going again through The Elements of Computing Systems. But this time I’m creating a lexer/parser in Racket (learning this language on the side) for the HDL files in the first chapters. I didn’t really like working with the GUI they provide.
Wow, that’s a very interesting book. I wonder how long it’d actually take to go through all those projects to completion, though.
I got Qt playing video successfully with gstreamer on my Jetson, so now I’m going to integrate caffe and then we’re off to the races. The Linux video processing pipeline is … exciting? when compared to QuickTime or AVFoundation or DirectShow. Thankfully, my current application is not overly concerned with image quality, but yeesh.
Last Week:
Pretty big riff at work, couched as cost saving. Seems like the layoff axe fell heaviest on the remote folks (which included me), those in satellite offices, and the more senior folks (which included me). At least I got some severance. Might take a couple of weeks off (forced vacation!) before starting to run the job search gamut.
This Week:
Digging into my reading list more, updating my resume, enjoying the sunshine.
Sorry to hear about that - when you’re ready to start looking again give me a ping? burke@shyp.com
Thanks! Will do!
I’m thinking more and more about a different kind of social networking service. An open-source, contribution-driven service that’s direction is not defined by the maintainer, but the contributors. More info here.
made any progress? id be interested in working on something like this.
Beyond that document, I haven’t made any significant progress. If you want to help out, just be on the lookout for changes to the GitHub repo.
ruby gem for integrating with several organizations that you can call/text/webform to pick up unwanted food and deliver it to homeless shelters
Various work things, mostly refactoring and splunk logging queries/tuning, ramping up on new codebases, adding test coverage, waiting for various startup-related announcements
Trying to install python on a snowflake server for someone in finance to use with weird centos-related gcc and ssl difficulties
Writing a blog post about enterprise hackathons and my opinions on what they are good for / how to do them wrong
Interviews, finishing up my pure ruby HTTP routing library (fastest so far!), some more shogun stuff (HATEOS API). Just FOSS stuff.
A lot of bug-fixing and work on our Enterprise Social Network product, Quoddy. The roadmap1 calls for a release soon, and I’ve got a lot of stuff to get done between now and then. One of the big features we’re working on, that isn’t even really started, is Apache Zeppelin2 integration.
Outside of that, rewriting some marketing collateral. That stuff will probably dominate my week. Some other small stuff might slip in, but that’s the gist of it.
Last Week
Did some performance improvements in the udp messaging stack for Fire★. The performance was about 3x faster messaging performance. Makes me wonder what I was thinking before! There is probably still a lot of room for improvement too. Advanced data structures are NOT your friend when it comes to performance. This is counter intuitive, but true.
This Week
Working on UI for rejoining conversations when you get a network partition or disconnection.
Based on your experience, can you briefly elaborate on why the tension between advanced data structures vs performance?
Cache misses. We no longer have random access. Most advanced data structures are node based, which results in large amounts of cache misses. This has also been true for a long time but most people don’t internalize this, myself included.
Mapping out my new side project, a functional, composable, web framework.
Landing my spinning plates at
$work
for a couple of days, then off to visit family for a nice holiday. Going to explore That London for a couple of days which will be fun (kids have never been before, and it’s a good 15 years since I’ve done tourist things there).Work: yet more ontology matching. So far, it’s looking like Kinesis will serve our needs for the data pipeline part of it.
Home: yet more log parsing with Heka. Not very interesting, but almost done.
I’m continuing on my quest for surfing waves, and still working slowly on my implementation of CFDG in racket.
My failed dawn patrol, earlier in the week caused me to learn about tides, as the break I went to is horrible at low-tide. As a result, I’ve been thinking about building out a simple web app. Given a set of times I can probably paddle out (morning before 9:30am, afternoon after 5), tell me when the conditions are likely to produce surfable waves for my skill level. Of course, this prediction will be extremely naive, but it should allow me to make plans further ahead of time–which I can always cancel due to a bad surf report.
Once you know your breaks - you’ll know how they work in different tide and surf conditions - but the biggest issue I had with surfing before work was ensuring I got out of the surf in time to get to work :~)
Yup! Fortunately, I live in Southern California, and have a bit of data about “this break is best during high tide” or “best during low tide,” which will help here. Far from my own observations, of course – I’ve only been surfing at one break so far! But, based on my failed early morning trip, I know that low tide produces waves in very shallow water at this break, so to avoid it.
As for the other problem, well, I need to get a watch, and my arms aren’t quite strong enough to paddle more than an hour anyway, e.g. I’ll deal with that in a few months.
Hi everyone!
Work (GSoC): Code emission and generation for almost all the rules of the JIT'ed firewall has been completed! The two commands left are the ones that modify the control flow of the firewall. These two are going to be harder. I might as well go and try to test the firewall at a different environment than my laptop, where FreeBSD-CURRENT(ish) just panics.
Non-work:
I’ve been mostly reading when possible “Quantum computing since Democritus” which is a really really really interesting read.
I’ve also been trying to choose a functional language to stick to (I’ve chosen Haskell). I’d like to work on a unikernel implementing something interesting as OSS (I’ve been thinking in Dark Internet Mail Environment), but all this sounds a little bit optimistic: there seems to be an eternal lack of time, I should organize my time better… (Maybe is time to finally move on and learn GTD, or something like that).
I’m thinking about making a “constructed language”. Just a simple one, nothing too formal.
At $JOB, working on some automated test tooling.
At $HOME, learning about doing Unix IPC with mmapped files and, at the same time, trying to grok mio in particular and edge-triggered readiness notifications and non-blocking I/O in general. I’ve also assigned myself a Servo issue for the week.
@Work: Open sourcing a modular Javascript standard library replacement that I’d been using in a few different pieces at work. Building it out as a library has been helpful to get the structure down and accelerate testing. Super early work warning, but here it is: https://www.npmjs.com/package/algebraic
Finishing up a Phoenix/Elixir application called Wisewolf at work. It aims to provide a site agnostic notification system (add a script tag and you are good to go). We’ll be open sourcing it after I make sure it can handle serving notifications to all of our internal sites (50+).
We are on 2 of the sites so far and it’s already at 70 requests per second. The average request gets served in <2ms (with a db hit), so it’ll be fun to see how it scales up. I haven’t really touched anything perf wise so I hope it stays strong.
It’s based off of Netflix’s blesk project, but will package the server as well. I’ll be going through final code quality checks this week and polishing up the UI for it’s open source release.
Continuing to work on Helix Pi, my tool for creating games with no coding involved.
Notably, in the last week I shipped a landing page, so visitors aren’t dumped straight into the editor.
I also created a website to benchmark both the quality of the programs Helix Pi creates and various aspects of performance. You can check that out here. It automatically runs the benchmarks and updates the graph when I push code, which is nifty.
In the process of the above I realized the benchmarks need to be a separate module so I can run them while developing (previously I was contorting unit tests for my purposes). I’ll probably tackle that at some point soon. It feels weird choosing to work over tools instead of Helix Pi itself, but I think it will ultimately be a net increase in development speed.
I’ve now crept up to 3 repos for helix-pi, so I’ve created a Github organization to put them all in one place.
Working on adding Memory-Mapped IO support to rocket-chip https://github.com/ucb-bar/rocket-chip, our (UC Berkeley ASPIRE Lab’s) line of RISC-V processors. I’ve already written a generator that can produce an AXI4 interconnect from an address map. The one remaining issue is aligning read data correctly to go back up through the memory hierarchy. With this, I’ll be able to keep working on implementing networking support and RDMA support.
Besides this, I’m intesifying my studying for the Ph.D. preliminary exams, which are coming up at the end of the month.
Managing complete rewiring and equipment replacement for our conference room. That means 16x16 HDBase-T matrix switcher for video, distributed audio switch with AVB, boring stuff such as 3 projectors, speaker system cameras with h264 encoders and some lighting.
We are also writing an open source control system for the whole thing in Racket (low level stuff) and Node.js (user interface and some logic). I am in charge of the low-level stuff that is translating serial-port and obscure telnet protocols to decent ZeroMQ interfaces talking in JSON.
Hi,
https://lispcookbook.github.io/cl-cookbook/ is what I’ve been helping resurrect in the past week. It’s the canonical Common Lisp cookbook, but has gotten sadly out of date living on Sourceforge. Myself and a couple other people have been working on it in Github.
But in the $day_job, I’m poking Docker fleet management systems for the cloud. Also fun.
Nice, the cookbook has been immensely useful to me in the past. Thanks for working on this.
I’m working on a re-write of an incomplete game based on trade wars, while time is available. https://github.com/mlitchard/emporos I ran into some surprising bugs the first time around, so this time I will use Travis and quickcheck this time. Also, ghc has some cool newish features that I believe will help me encode game rules at the type level. This goes against the sober judgment of others, but I’m doing it anyway.
Doing a section of a re-write of an incomplete game. Specifically I’m attempting to encode some game rules at the type level. I’ve been advised by people with more sober judgment to not do that. Meh, doing it anyway. Maybe I’ll have a nice war story about why it was a bad idea.
Working on work at work.
Working on solving one small puzzle from the defcon crypto & privacy village contest in the rest of my time. I’ve come to realize it should be solvable via a Meet in the Middle attack. In the meantime I’ve used blowfish cbc w/ openssl command line, python and C++ (via Crypto++). The C++ one is by far the fastest and is probably going to get me there… that is if they used the same initialization vector for both encryption passes.
Juggling technical, leadership, and management responsibilities after returning from a week-long Alaskan vacation.
I realised that in the last few months I’ve managed to avoid learning … anything, really. I can say that I don’t really like this feeling. As such, nowadays I’m trying to catch up on JavaScript. I’ve not written any in about 3 years, and when I did it was mostly jQuery.
I have to say, with everything that changed or came in the mean time: Backbone, node, Express, Flux, React, it’s…pretty overwhelming. So these weeks I’m trying to hit two birds with one stone: I’ve been meaning to write a small app that can help me keep track of my finances and get reacquainted with JS in the mean time.
Not very impressive, I know, but I find it pretty fun nonetheless.
I’m rewriting an app/service I wrote for my university. It monitors the uptime of our transportation system and notifies users when it’s experiencing problems so they can make alternate transportation plans for class. Written in Go with a native Android client.
I’ve also been rewriting my own website to use Hugo for ease of updating it and seldom blogging.
Finally, I’ve been finishing up a large overhaul and relaunch of a social analytics service for Vine. Written in Go and hosted on Google App Engine. I’m not even going to bother linking the github repository as it’s very out of date with my local branches.