This is the weekly thread to discuss what you’ve done recently and are working on this week.
Please be descriptive and don’t hesitate to ask for help, advice or other guidance.
I haven’t been writing as much over the last while for a variety
of reasons. I’ve missed writing.
Today is the 730th day of my Github streak.
Hopefully, I can keep it going for another 730 days.
I’ve been having fun with Open Dylan as
usual. We released our 2014.1 release finally last week. It was long
delayed and it feels good to finally have it out and to start working
on the 2015.1 release, which should include our first version of our
LLVM backend. Already, some changes to the build system and language
runtime have landed to support this.
In the run up to the 2014.1 release, I finally fixed a very long-standing
bug in our C-FFI related to passing structs by value to C functions. This
had been implemented and was working in 1997, but broke sometime since
I spent some time updating and improving documentation. In the 1990s, our
documentation was (professionally) written in Adobe Framemaker and published
in book form (as well as HTML). This format wasn’t maintainable in the open
source world however, so a couple of years ago, I started converting it all
into ReStructuredText (RST) using Sphinx. We have
our extension to add a “domain” for Dylan so that we can document our
libraries well. One book that hadn’t been fully converted was the
DUIM Reference but I
spent a couple of days working on a couple of hundred pages of that to get
it roughly into shape. There’s still some work to do, but it is much better
than it was previously.
I also started looking at our “locators” library which is used, among other
things, for representing file locations. This is a very slimmed down version
of what Common Lisp has for pathnames. It was designed in the 1990s and part
of the design is based on URIs / URLs (hence the name “locators”). I think
that we can improve the design a bit today and update some of the terminology
to better reflect contemporary URI standards. This isn’t a promise of location
transparency, but just trying to provide a more familiar set of APIs. We also
have some duplication of code with having locator classes for URLs as well as
an entirely separate “uri” library that is used by the web server.
While working on the above, I noticed that our handling of start and end
keyword parameters to various functions wasn’t well defined in the language
specification or the various bits of library documentation. These are used
with functions like copy-sequence, fill!, string-equal? and many
others. I’ve started a discussion
about this and am looking forward to seeing what we decide.
I also got an updated pull request to fix a bug in our file system library
from a fellow Lobste.rs user, Dan Midwood. Thanks, Dan! While looking at that,
I was reminded of some flaws in our testing framework and how that is used
to test many of our core libraries. I’ve started work on prototyping a fix
for the test framework that I should be able to complete later this week.
I’ve also been continuing to work on putting a new (terminal-based) UI
on our Deuce editor.
Later this week, it is my 40th birthday. Next week is my daughter’s 4th
birthday. Hopefully, this results in some outdoor meals down by the seaside
with fresh seafood.
Apart from the Testworks changes that I’m working on, I have no idea
what I’ll do this week. I’ve been enjoying seeing which way the winds
blow and it seems like as good a way as any to make progress on things
that I’m interested in.
For the past couple of months I’ve been teaching myself Racket by writing a little identicon generating system. I’ve finally got it somewhere passable and wrote up a blog post on it last night.
I’m really starting to like Racket, and plan on fixing up more of the code over the week as time permits and I learn more about “the Racket way”. (I also need to finish The Realm of Racket.) I’m still wrapping my head around the way namespaces are handled, and probably need to re-think the way I dynamically pull in some modules. That’s half the fun of learning something new and why I like to build little learning projects.
Any tips appreciated!
I am planning to finish my Haskell implementation of the Hindle-Milner type inference algorithm this week. I am using Basic Polymorphic Typechecking by Luca Cardelli (1987) as a reference. The paper includes a full implementation of the algorithm written in Modula-2 (see Appendix A for details). The same algorithm has previously been translated to Scala and Python. Once the implementation is finished, I am going to use it as a basis for type inference in Taylor (a Swift compiler written in Haskell).
I’ve been in this place before. Notice how the Python code is translated from Scala, which is translated from Perl, which is translated from Modula-2? I feel like I found a a bug or two in the Python version, but can’t remember what they were…
This week, I’ve been working on implementing some basic data structures, just for fun. Currently working on linked lists, and I have a mostly working singly-linked-list, implementation. Once that’s done I’ll move on to doubly and circularly linked lists both of which I imagine I’ll be able to tackle this week, this is something I’d like to make a routine, small tasks that I can work on a little bit each day to practice my craft.
I’ve been lazy on the writing side of things, but will also get at least one new blog post up this week.
In non-programming related work I’ve started picking up the guitar again and am practicing a bit every night.
Talking to publishers, getting warmer to the idea of self-publishing as we go, but nothing is decided.
Some slow-downs in work on the book. We’re trying to sprint out some early material for testing with a friend.
Still working on the Haskell contract, enjoying it a lot.
I wrote an article about learning materials for Haskell and what has and hasn’t worked for my students.
I also cleaned up my typography and customized the code block color scheme CSS for my blog.
I am taking a break on Fire★ this week since I just released new binaries.
I am going to work on my old todo list application called “muda” because it is something that I use everyday that I want to make useful for others to use.
My plan is to add user login and registration so that I can host it. I think I will charge a small amount for hosting a todo list. I will also provide the complete source if you want to host it yourself for free.
Do you guys think this is a good model?
$work: Docker docker docker docker VPN PROBLEMS! It’s like every time I take a step forward with this stuff, getting complicated, old, crufty apps containerized, getting machines set up and working, whatever; I get pushed two steps back with some broken piece of infrastructure outside of my control. Right now we’re fighting an uphill battle, and man – it’s not much fun.
!$work: Two projects this week. First, I’m working on something fun with Sage, a opensource alternative to Mathematica/Maple/etc. It’s pretty nice, all the scripting is in Python which makes it much easier to build up complex models and also to interconnect with outside resources/APIs. My other project is more personal. I’ve played guitar for as long as I can remember. One of my personal heroes, Michael Hedges, passed away in 1997. His 61st birthday would’ve been this last New Years Eve. One of the things that made me want to play guitar was listening to how masterfully he played, and so as a New Year’s Resolution of sorts (I suspect it’ll take me many years to learn, given how long it’s taken me to even get where I am now), I decided to finally really dig in and learn a few of his more famous songs. I’m starting with probably his most famous two-handed tapping tune, “Aerial Boundaries”, though I’m using Andy McKee’s version as a guide more than that video, mostly due to better sound quality. McKee is another great guitarist (and if folks are interested, I have a bit of a laundry list of stellar guitarists I listen to semi-religiously). It may seem a little silly, but even trying to play these songs is a bit like walking on holy ground. A lot of my life is stressful or hard or disappointing. A lot of things I’ve wanted have had to be given up, Hedges' music is my respite, when I was struggling to find a job, he was always a flick of an iPod wheel or a youtube lookup away. When I was a young kid dealing with a family who’s beliefs he no longer shared, when my dog died, when things got rough, Hedges' music always seemed to be exactly the counterforce I needed. It’s odd to say I miss someone I never met, and can never meet, but I like to think that that means we would’ve been friends if we had met.
Or at least that he would’ve thought my playing wasn’t awful.
I got serious about finishing that Rackspace -> Linode migration over the weekend, and am almost done. I have two more VPSs at Rackspace that need their services migrated to Linode, then I can decommission the last of my Rackspace servers.
Once that’s done (probably tonight), I have plenty of feature work to do on our products, and I have a lot of work to do for a lead generation campaign we’re launching.
I want to rewrite some of the copy on our website as well. The goal is to make a lot of our content more customer / problem focused, and less technology / product focused.
This week I am planning to do two things that got delayed in previous weeks (Thanks, influenza!):
If I accomplish those, I will attempt to:
First time posting.
I wrote a Probability DSL, where I can just write PSpace.rv(:color).given(:size).prob to mean “P(color | size)”. I can also write PSpace.rv(:color).given(:size).entropy for “H(color | size)”. I used this to write a toy decision tree learning algorithm.
I’m also writing an eBook on Designing for OpenSCAD. I’ve written about 9 chapters so far, and will be writing more regularly every week. https://leanpub.com/designing_with_openscad/
You can read a sample here: https://leanpub.com/designing_with_openscad/read
If you know where I can find other people that are interested in OpenSCAD, please let me know, thanks.
It would be cool to see the code for your probability DSL if it’s open source or if you ever decide to open source it.
The code for it is here: https://github.com/iamwilhelm/decision_tree
The decision tree isn’t yet finished. There’s a mistake in the learning algorithm that I still have to fix. But you should be able to see how the DSL is put together in pspace.rb and rand_var.rb
I’m still on winter break so I’m chugging through more open source projects. Currently I’m working on a library to make compiling a lazy language to JS less suckish: f2js. I’m writing a blog post detailing how it works but in the mean time it’s compiling basic programs quite nicely.
Back to work and switching gears onto a new project internally. As much as I enjoyed having two weeks off, it feels good to be back at my desk writing code for customers. Hoo-ra.
Not at work, I’m starting my winter training earlier than last year as my first Triathlon will probably be in April this year (York UK, was a wonderful event last year) and I’ve had a couple of months off training entirely already. Finally picked up a new wetsuit, and been convinced to sign up for Jantastic which means I have motivation to get back out and do stuff. Even if the weather is pretty damn dreary all the time now. :-D
I’m revising for my end of semester exams at University, which is taking up 90% of my time.
The other 10% is used for procrastination, which mainly involves trying to find accomodation in Munich for the Summer, since that’s where I’ll be working. If anybody knows a place there, that’d be great!
Today was my last day of vacation.
I started writing a ray tracer in Lisp, but didn’t get very far. Not sure I’ll even finish it, but I really should get at least the basics working.
The plan for this week is to go back to work tomorrow and figure off where I left off. I had a couple of code reviews out on a few bug fixes, so hopefully I can incorporate the feedback from those.
Over the past few years I’ve started many things and finished very few. 2015 is my year of finishing things.
The first thing on the list for me to finish is Card Minion, a small SaaS product I’m building. I’ve learned a lot in the six months since I last touched it, so most of this week’s work will be digging out antipatterns and restructuring code. I’ve already fixed my misuse of the disposer pattern leading to code leaking db connections - that was nasty.
One trouble I’m having is iterating over things quickly with Postgres schemas. What tools (NodeJS) are there for versioning/migrating schemas?