This is the weekly thread to discuss what you’re working on. Please be descriptive! Don’t be afraid to ask for help, advice, or guidance.
Wow. Last week, I realized I’d started to feel semi-proficient at writing Haskell. Unlike most weeks, most of the time was spent simply developing, rather than being stymied by type errors. This has been a long time coming!
In Hython, I made huge progress on the import keyword. I’ve implemented the basic import and the import...as forms, and am poised to implement from...import statement soon. I finally realized that I need some notion of an environment (aka a binding) that lives on functions, which acts as a list of scopes to do name lookup with. The cool part: this paves the way for closures! While I can’t say import is done, I think I’ll be finishing it pretty soon. I also did a lot of refactoring to change the domain model to use Python’s nomenclature throughout.
With the import functionality finished, I can move some of the built-in definitions (such as the rather enormous exception hierarchy) to external modules that get loaded automatically. Additionally, I need to split the interpreter data structures out from the parser, because I’ll be forced to have the parser know about environments otherwise.
But, it’s Christmas/my birthday this week, so I doubt I’ll get much done. Glad to have the today off. Hope everyone has a good holiday.
Edit: also, I’d like to look into using lenses for doing mutable state since it’s a bit unavoidable, but it’s hard to switch without breaking everything. :(
This week, I’ll try to integrate elm with highcharts to make reactive dashboard interface without reinventing the wheel. I already have a demo with one chart that subscribe to mouse events and display them in real time in a chart. The working demo is here: https://github.com/yogsototh/elm-highchart
Until here, it is a great experience, the latest changes in the elm core libs are really welcome and the ports part is butter smooth.
I’ve started to write a blog post about the vim plugins I use. In particular, I find my actual Haskell vim environment just great. It detects errors at save time and I am generally told some good advices to make my program work.
I also use quite a nice Clojure programming environment and I wanted to share it.
I don’t know if I could achieve much during Christmas time.
I’m delighted to say that Grimoire 0.4 (GitHub) has finally launched! This release brings some much-needed internal cleanups to Grimoire, and most critically modularizes the datastore over groups, artifacts and versions meaning that thanks to tooling it’s trivial to generate documentation for any artifact I want to add to Grimoire (yes I take requests :D).
Today I’m hammering out an “official” REST API driver for Grimoire. This week I’ll be starting on the long overdue UI cleanups starting with refactoring the Clojure Cheatsheet to be more flexible and use Bootstrap, then redoing Grimoire itself with Bootstrap.
I’ve been getting ready to release two more blog post. One on parametricity and one on impredicative types since apparently people care about them.
What’s kinda nifty about this two is that they’re Code & Co’s 49th and 50th blog posts :) I’m excited.
I’ve been enjoying a diversion.
I was working on a terminal-based front-end to the Deuce editor as described last week. I was using libtickit for that and found that I needed some code in C that hadn’t yet been moved from the Tickit perl library into the C libtickit. So, I started in on that and am working with the libtickit author / maintainer to have this fully implemented. (This may also be useful to neovim which is also using libtickit.)
On top of libtickit, I’m building a widget framework in Dylan that renders via the terminal. I’m basing the design on a simplification of our existing DUIM (Dylan User Interface Manager) design, which is a simplification of CLIM from Common Lisp, which in turn is a simplification of how things worked in Symbolics Open Genera on the Lisp Machines.
The next pieces on this are writing docs and tests for the new C code, writing more C code for focus and input management, and on the Dylan side, writing some layout code and more widget types.
I don’t really know why I’m doing this … but it has been fun.
How were Lisp Machines back in the day if you don’t mind me asking? Do you think it would be worth while to build a purely functional operating system again today – with modern techniques – or would it be a waste of time, do you think. I guess I’m only asking because I’ve though about OSs written in more functional base languages – and I always wonder if anyone ever has built one. After I heard of the Lisp machine – I guess someone has – but turns out they were huge failures and lost out to the mac in the early nineties or something.
Symbolics Open Genera was a great / wonderful operating system and there’s a lot that can be learned from it. Even today, some things that it did well are not done well by the current batch of OSes. If you look around hard enough, you can find a way to run it in an emulator.
But Lisp Machines weren’t “purely functional” or anything of that sort. Common Lisp can be used in a functional way, but it can just as readily be used in an imperative way. It is multi-paradigm much like C++ is.
The Lisp Machines didn’t lose out to the Mac in the early nineties. The actual history is far more complex … they were big, expensive, built for a different era. The AI Winter didn’t help either.
I started a contract to port somebody from Clojure to Haskell last week, been enjoying that so far.
Still working on the book.
Really liking Yesod so far.
This should be tagged “ask”, like all previous threads were – not “meta”.
I’ll be working on adding some new features to our Enterprise Social Network project, Quoddy1. One thing I plan to work on is the ability to insert a document, and the associated tools for operating on that document, into the stream of events. We already do a basic version of this for BPM events, where you can approve/reject/delay/transfer events from the stream, but we want to generalize that facility a bit and add something for working on files.
For now, that will probably mean Google Drive integration, but we’ll probably also eventually do something for working with files in a repository using something like JCR2 and/or CMIS3.
Longer term, I think we’ll do something with Apache Wave4 and the Operational Transformation5 stuff as part of this whole idea of putting interactive entities in the stream. It’s not all fleshed out yet, but some of the ideas I’m toying with harken back to the old idea of “compound documents”6 and “intelligent documents”7, or something like Bret Victor’s “reactive documents” stuff8.
Outside of all that, I plan to finish reading Philip C. Jackson’s Introduction to Artificial Intelligence, and maybe read some or all of Predictable Revenue.
I’ve been working on relearning Go again for a low-footprint language to write CLIs in as well as building services to run on my VPS, which obviously doesn’t have much CPU and memory. Thanks to @benbjohnson, I can profile Go code on my OSX laptop! I love how simple Go is and the tooling is pretty fantastic. I don’t like the lack of generics, it’s made things a little more difficult. I’m reading binary encoded structs (with variable types of payloads) off Kafka/out of sequence files, and making the actual deserializers has been difficult without generics, but I’m making do so far.
On the topic of Go, I’m a huge fan of Kafka, but I’m not a huge fan of running it on my VPS. To the end of learning Go better, I’m writing Gregor, a minimal Kafka clone in Go. I’ll link code next week if it goes anywhere. Ambitiously, I’d like to steal the protocol code from Sarama and use that to implement the server too.
At work, I’m getting started on some streaming statistics over data coming off Kafka to power a realtime dashboard. It’s a very open-ended project, so I’m excited to get my hands dirty, possibly using Summingbird, but definitely using Algebird to maintain HLLs per type of ingested event (only ~10 types, easier to maintain a Map[String, HLL] than it is to keep a set of items + CMS). Right now I’m figuring out if I actually want to persist my HLLs, where I would persist them, or if I want to just flush them every hour and write the results into Graphite.
Performance testing! Time to spin up an 8-core box on DigitalOcean to see how far I can push it.
Turns out one 8-core box wasn’t enough to find the limits; I had to bring up another 4-core machine to run Flume, and two client driver machines. :)
Made a Christmas ornament with my Arduino: http://blog.toppagedesign.com/arduino/hardware/2014/12/23/arduino-christmas-ornament.html
Last week I updated Fire★ with a new dropdown widget and also the ability to style widgets with Qt Style Sheets. I released both linux and mac binaries with these updates, though a windows one is still pending.
This week I am away on holiday and may or may not have time to code. I figure this is a good time not to plan what I will do since everything else is planned around me. Happy Holidays!
I’m visiting family for the better part of two weeks, which will limit some of what I can get done. I’ll be doing some remote work to tie up loose ends at work, and continuing work on my embedded projects. The first step is to build a two-node “mesh” network with a master unit and a positioning unit, built over XBee modules. This week, I’m working on the positioning sensor and sending the data over the radio.
Started the week with an unplanned fever and 24 hours in bed, which was a bit annoying. In my last day of work today I’m trying to tidy up a couple of loose ends and get a gem extracted from some work I’ve done recently (to allow rotation of the secret token in rails apps without invaliding existing cookies instantly.)
Over the weekend I spent some time benchmarking a FreeBSD vs Debian KVM guest on my microserver (running SmartOS as the hypervisor) and concluded there isn’t really much between them performance wise. So I’m going to run plex under FreeBSD on it, which I’m most of the way there with an anisible playbook to get it installed, but that needs finishing off. Also need to finish setting up sickbeard & nzbget in an OS zone, and chuck couchpotato in there too, then I’m pretty happy with my home media setup I think.
Off to the out-laws for christmas, so I’ll spend some time blogging I think (their internet connection is fairly limited, and I have no mobile coverage there. It’s quite nice.) I want to write up some of the stuff I’ve learned from playing with SmartOS & how I have my Microserver setup with it. (Mostly so when I come to inevitably rebuild it in future, I have my notes available.)