It’s Monday, which means it’s time for our (semi-) weekly “What are you working on” thread! Please share links and tell us about your current project. Do you need feedback, proofreading, collaborators?
The last week has been pretty fun.
I also spent some time with GCLI and will soon work on getting it running with Atom Shell. This looks pretty promising for what I’m interested in using it for and it has definitely improved significantly in the last 2 years or so. I’d originally been looking at the wrong version which caused me a lot of confusion as I’d done a git fetch but forgot to pull it into my master branch. Woops!
As part of writing the blog post about network analysis, I submitted some pull requests to binary-parser and as of earlier today, they’ve all been merged and a new version is out with my changes. I’m also going to publish a network packet analysis library. Right now, I’ve just published stubs, but will push some real code for it this week. If others are interested in collaborating on this, I’d love to hear.
I also spent some time on my memory / heap profiler and tracing framework for emscripten. I added the ability to track “tasks” or jobs that are being executed. They support tracking when they are suspended and blocked, which is pretty important with the callback-oriented model that codebases using emscripten often use. These tasks can track the amount of time spent in them (in each portion) as well as the memory allocated and freed while the task is active. I’ve done some other minor things with it, but less interesting than that. :) I should make this work more publicly visible at some point with screenshots of the UI and what it can do. It has been a really useful tool so far.
I also submitted a couple of pull requests to emscripten including fixing a bug that another company was running into while porting their application as well as some fixes to the documentation. There’s always so much to do for emscripten.
I’m hoping to start talking more publicly about what my new project actually is soon … I have a lot of things to work out, especially the funding model still.
In a couple of days, installing OpenBSD 5.6!
This week for my timing attack resistant type systems project I have arguably gotten a bit sidetracked. I realized bifunctors would be really nice to have for some of the refactoring I was doing, and then realized idris at the moment has no bifunctor library. Since I’m (hopefully) starting an independent study next semester for which idris bifunctors will also be extremely useful (more details on that once I solve a few problems pertaining to my lack of really going to that university or ever taking a CS class or not being 17) I decided to go ahead and start writing one. That’s actually been pretty smooth sailing (Unit testing in particular), but idris 9.14 has no type constructor for tuples, and upgrading threw me deep into the depths of cabal hell, and fairly off track from my initial project. I also submitted to thotcon, and hopefully that works out, but we’ll see.
The merit badge day I had been organizing for a few months now happened Saturday, and that was a ton of fun, if a bit chaotic, but I managed to bring in, feed, and do paperwork for 70 people, and everyone I talked to seemed to like it, which is nice. At some point this week I’m going to probably do a write-up of the whole thing, make a website for next year (Stripe looks a lot nicer than a pile of personal checks), and generally clear up loose ends.
College is also on the menu, but to be honest it’s mostly just grinding through the common app/getting recommendations/generally doing unenjoyable but necessary things.
I’m curious why unit testing is a thing in a dependently typed language :) I use quickcheck-esque tools when writing Coq or Agda a lot, but that’s intended to stop me from trying to prove things which simply aren’t true. It seems like you’d be better off simply proving your unit tests holds!
“Unit testing” is an approximate term here. If you read the tests they actually are all functions with types which state an equality and then are defined as refl, so in some sense they do prove the test holds true. Really, I should prove more general cases about them (and I fully intend to do so), but that can be a bit of a pain, so for now I just use them as sanity checks.
More dependent types over here. I’m playing with my implementation of hlf. Currently the typechecker as it stands is actually working. I can typecheck and reject a goodly subset of the programs Twelf can handle. The only thing left to do is deal with twelf metatheoretic features which roughly fall into 3 bits
I’m hoping to implement mode checking this week which roughly corresponds to checking that a declaration “makes sense” as a clause of a proof. In other news, all my junk is on github! I spent a bit of time setting up hg-git and now my github account actually has some projects in it.
On the side I’m going through “Category Theory” which is a really lovely book. It’s one of the few CT books I’ve found that has exercises and even some that pertain to pure logic and type theory!
So, I finally got on with stuff associated with my dissertation. This weekend I finished an Idris -> Erlang compiler/code generator. You can watch my progress here: https://github.com/lenary/Idris-dev/pull/1 (taking comments, but no code contributions). Here: https://gist.github.com/lenary/7abb7ad5d533bf376804 is an example of it actually working. Cool, eh?
Having a bit of a debate now about idris' “primitives”, and what should be done about them to make code generation sensible. Too much (in my opinion) relies on FFI instead of actual primitives. I wrote up a proposal: https://gist.github.com/lenary/e32e242a91c56382bc5c but it seems not to be going down too well. Going to work out what to do with Edwin tomorrow.
As for any more progress, there won’t be any this week. I’ve got to work on college applications. Various UK Funding deadlines crept up on me over the past few weeks, so I’m madly writing essays to tell people how wonderful I am, and that they should give me lots of money to do a PhD in computer science in the US. Of course, I should actually be alright without the funding, as most places will fund me, but a) not everywhere will, and b) the awards are quite prestigious, so Unis will like me more if I get them.
The Deadlines aren’t helped by the fact that I have normal Uni work this week, with a deadline on Friday, and a radio show to produce and present on Wednesday afternoon. I’m going to either die of exhaustion or caffeine overdose by Saturday. I hope neither.
My radio show is called “Quark and Byte”, and is produced on St Andrews STAR Radio. We talk about recent science news, and hopefully interview a scientist each time (though this is proving hard to organise). You can listen in live, at 5pm GMT, or you can catch recordings later from https://soundcloud.com/quarkandbyte (though we may soon have to take recording #1 down because soundcloud limits the space we can use). I’m working on making us a real podcast RSS feed, but not this week. *falls over*
This week, I’m on vacation. I ‘plan’ on starting to read East of Eden, listen to some music, and maybe hack on Hython. Maybe. Resting and relaxing is much higher on the priority list, however.
I’m old enough that I’ve realized vacation is not optional, especially if you can swing it on rough years (like this one).
$work: Recipe for frustration.
Take 1 ancient Java app that only runs on windows.
Mix in 1 Oracle database with awful setup.
Wrap in Ansible scripting to attempts to port it all to linux.
Let mixture *almost* finish. Like, 95% completion, but not quite done.
Immediately remove from active development due to other dev's distaste for
tools that provide robust devops scripting (like ansible)
Cook in a pressure cooker set to "fucking suits".
Add Buzzwords to taste, re-wrap in scripting that appears to have taken inspiration
from COBOL and my nightmares.
Plate in Linux Containers sitting on top of Virtualbox.
Serves 1 Angry Devops guy, Achieves nothing of value.
!$work: Playing with webmachine-ruby and rethinkdb, a salve for my aching brain after docker all work-week, and GRE Subject test last saturday. I think I probably didn’t do awful on the subject test (I’ll know in 6 weeks), but I definitely didn’t knock it out of the park. It’s shocking how much math has leaked out of my brain in the intervening 5 years or so since I graduated (well, thought I graduated, that’s a long story ripped straight from a late-80s sitcom).
My brother and I are also starting working on a neat game idea I hope to show off some day, but more likely it’ll end up as vaporware. Think Colonization meets Capitalism meets Anno 1602.
Taking a holiday for most of this week, as it’s half term here in the UK for most (all?) schools.
Started playing Dishonored over the weekend after being gifted it for free by MSFT and am rather enjoying it. As someone that falls in and out of gaming over time, I’ve definitely fallen back into gaming right now and am looking forward to spending some time completing the game. (Just seen there’s a Dishonoured 2 as well, might just have to pick that up afterwards!)
Have a couple of blog posts in mind to actually write. Keep learning things and not blogging them, which is annoying when I try to remember it in future and can’t find the answer in google easily. Writing it down myself increases the chance of google giving me back the answer in the form of my own post. (And should probably finish the redesign of my blog too.)
I sank into the muck of deep isolation. I knew my path was straight but I could not see the light. As the darkness overwhelmed my senses I started hearing voices ‘Carry on, keep walking’. After taking on the brunt of the litter, I started seeing static white noise. At the end, there were thousands of scraps of paper with code. And in the background Apps in Fire★ ran.
Well, to be less dramatic, Apps in Fire★ now run in the background and don’t block the UI. Shifted over 3k lines of code over two weeks to make it happen.
Also last week I got contributions to documentation from japesinator (thanks!).
I will work on more documentation and try to get the Mac build published. For the Mac I am using clang instead of GCC and the executable it is producing is crashing in a certain spot. So either clang is generating a bad code or more likely I have a bug that isn’t showing up in the GCC and MSVC builds…
If anyone is experienced in packaging QT apps on the Mac, I would appreciate a lend-ed hand.
I sank into the muck of deep isolation. I knew my path was straight but I could not see the light.
Heh. I can relate.
This is how I’m coping with that…
Make a TODO list (if you use emacs, org-mode is handy)
Make the highest levels the big picture of where you trying to go.
Break it into finer and finer and finer pieces. Making your TODO list a user level “I want to be able to do …” tests is effective.
Chew into them one by one, coverting the TODO’s to DONEs.
If you stuck, ratchet down one finer notch in the Test Driven Development cycle. You can think of finer and finer grain TDD as engaging ultra low ratio on a land rover to grind you out of the muck.
If you have lost sight of where you are… Splat the code with asserts turning comments and hypotheses into executable statements of fact.
Noise cancelling headphones and ear plugs. You can’t gain traction if your can’t concentrate.
High speed walk around the block in the sun.
Kick the noddle with a cup of coffee.
If you can’t concentrate…. maybe you just need to get up and piss! :-D
I think the best advice on that list is the walk. I do walks as both stress relief and to help with letting my brain do it’s thing. People don’t take enough walks…
This just goes to show how terrible my writing is. I knew my writing was bad, but now I learned I am terribly opaque.
Don’t worry about me brother, I have my shid together.
I have just purchased the components for, and built, a new computer. It’s pretty stinkin' powerful: 12TB of storage, 32GB of RAM, a 4Ghz Intel i7 quad-core with HT, and an nVidia 970 (their new Maxwell chips). I’m looking to consolidate all of my other hardware in a virutalized environment, and that includes gaming and a HTPC. We’ll see how well this works.
This week, specifically, I’m investigating KVM’s impact on a GPU’s performance when it is set to pass-through to a Windows guest. But first, I need to make sure the CPU supports VT-d. Then see if the remaining horsepower after that is enough for XBMC’s 1080p playback on the TV.
i’m trying out literate haskell for the halloween-themed haskell meetup this week - and preparing for exams in a few weeks.
i’m finding vim support for literate haskell not great; at least with the syntax/plugins i have. so it’s making the process a bit annoying, at the moment. if i stick with it, i’ll probably have to spend some time customising vim.
Finished reading Learn You a Haskell (http://learnyouahaskell.com/) this past weekend, and the next Haskell book/class I plan to read/take will be CIS194 (http://www.seas.upenn.edu/~cis194/spring13/index.html) upon the recommendation of many kind people.
I’m working through CIS194 too and wondering if I should have read a book beforehand :)
Well, I’ve only been through the first chapter of CIS194, and so far my impressions are that CIS194 is a lot clearer in its definition of things than LYAH. I’d say LYAH is a really good intro to haskell, a fun read, one of the funner CS technical books I’ve read (Why’s Poignant Guide to Ruby is something to compare it to), though it’s a big commitment at 14 chapters. If you’re looking for a funner introduction to haskell, you might want to start with LYAH – CIS194 seems more rigorous and exact.
All the Haskell posts on Lobste.rs have convinced me to learn Haskell, so that’s what I’m doing while I’m between projects. I’ve been working on some code exercises and reading up on the language as I go, although this is proving to be harder than with the languages I learned before. Haskell has quite a few concepts which are very different from non-FP languages.
Can’t go wrong with https://github.com/bitemyapp/learnhaskell as far as Haskell guides go.
Yep, it looks good. I’m near the start of the list for now.
I personally didn’t get much out of the NICTA exercises, but I’ve always had a hard time with drills. Powering through an actual project was a lot more instructive, even though it probably was much harder than it had to be. bitemyapp swears by NICTA though, so at least see if it works well for your learning style.
I now support both transducers-js and transducers.js in underscore-transducer. I also improved documentation and reorganized a little to allow optional loading of transduce library extensions. Also posted Transducers Explained: Pipelines.
This week I’d like to finish “Transducers Explained” with a final post, and also walk through some examples of using transducers with Node.js streams.
One of the things I was working on several weeks ago was fixing Mono’s System.IO.FileSystemWatcher on OSX, and I’m excited to report that this has landed on git master (although some of my changes lost attribution in some git squashing). But FileSystemWatcher should finally not suck on OSX. And theoretically also on FreeBSD or anything else using kqueue.
Right now I’m trying to debug some issues with text/fonts in gtk+ on Yosemite.
At work we are finally getting to start performance testing on a project we’ve moved to AWS. It’s taken longer than we hoped to get to this point, but early results are very promising. Currently toying around with instance types to see which ones will be more cost effective.
At home I am slowly working my way through Web Development with Clojure. TL;DR: love it to bits.
I’m working on invitable an invitation queue to help clean up the hackathon hackers facebook group (S/O to my fellow hackathoners). We experienced some trivial problems (someone pushed four different versions of jQuery) but that’s okay because I want it to be a learning experience for those less knowledgeable than me because I don’t know everything either!
At work I’m working on implementing some trivial API calls, and hopefully that will be it.
Trying to polish off and extend the UI for part of my research: Automatic Event Detection and Summarization using on Twitter