A Walk Down Compiler Lane
May is compiler month for our technical lecture series. Kalani Thielen kicked off the topic with a presentation on his lambda calculus compiler written in Haskell. From the language definition all the way down to machine code generation and register allocation in only an hour.
Some of us got a little lost in the language definitions, but I was drawn back in when we got to assembler – so there was something for everyone.
Dow Drops 1000 points – No Fair — Do over.
The Dow dropped 1000 points out of nowhere then snapped back. Later the trades were canceled. It was a very strange afternoon. One Lab49er saw his portfolio fall 30%, then snap back. He was going to make some orders, but the whole episode was over in a flash and financial websites were overwhelmed and sluggish at best. Yahoo and Google finance slowed to a crawl, but MoneyCentral seemed to keep going.
The End (of the Netbook Era) is Nigh
Capital Markets Course In Session
It slipped my mind until one of the Lab49 new hires mentioned it, but the Capital Markets course is run about twice a year and people are taking it right now. Good luck guys, its worth it. Hopefully you got the same inspiring speech my class did.
Google Code University – Hacking 101
Google will teach you how to hack with this cheesy app.
Four Stages of Good Grief
Do I know that?
Was I supposed to know that?
Don’t I know that?
What the heck is that?
Wait a minute – what language are they testing?
Lately the answer is Flex. The questions sound like stuff I know but I can never pick an answer.
Twins? Separated At Birth?
Just Test – Nuff Said? Nah.
Big discussion about unit testing. Views ranged from 100% coverage is necessary, to some code is not worth the trouble. The 100% camp was hit with this rebuttal:
How is the coverage measured?
Is it just checking which code blocks ran during the test?
What about covering different code paths?
Everyone was in favor and there were some interesting insights including an example of “correctness by construction” in Haskell:
…”correctness by construction” (aka “making illegal states unrepresentable”). This approach relies on a rich type-system (and, at a deeper level, an interesting fact technically known as the “Curry-Howard isomorphism”). Ideally, when this can be achieved you can completely discharge the need for a lot of unit tests (replacing sort of probabilistic certainty with actual certainty).
Plenty of good links were sent and summarized:
This study found bug reductions of 40-90% with 15-25% coding time added.
Some recommend testability above clarity.
I heard some talk about an A team being formed to take on a project. I’d like to see the problem these guys can’t solve.
Check out this interesting tool for translating a data model into a class model with proper naming and casing using either Entity Framework or Linq2SQL.
All in all, a quiet week as expected.
Folks are happy that MS has open sourced the “.NET Micro Framework”. I met the announcement with “What the *!?*&^%# is the .Net Micro Framework”. Read the link and you’ll find out.
.Net Meetup – I went and really enjoyed it.
There was a bit of interest in this story of Madoff’s programmers being arrested. The consensus is that programming for financial companies is rarely illegal, so don’t worry friends.
As always, the biggest buzz in my section of the office is hiring. As usual, we’re looking for UX, C#/.Net, WPF, Silverlight & Flex, and Java. I heard talk of OLAP too. Some standard position info is here. You can email email@example.com if you’re interested and you qualify. The bar is pretty high, but they let me in so you might get lucky too.
Friday came pretty quickly and just when I was thinking it seemed a little subdued this week and was wondering when the next Friday Seminar will be, surprise pizza showed up and made my day (thanks James). The whole office (not too many in attendance this Friday) ate happily, though perceptions of quality did vary.
Probably will be pretty slow again next week with the holiday.
The World Bank also released an API earlier this year.
Humor from ZeroHedge is still popular. Unfortunately, the Goldman they’re praising is not me.
CHESS repeatedly runs a concurrent test ensuring that every run takes a different interleaving. If an interleaving results in an error, CHESS can reproduce the interleaving for improved debugging. CHESS is available for both managed and native programs.
Kalani presented Lambda Calculus. It dates from the 1930’s, but my only experience is .Net lambda expressions. I had the strange sense that I knew what he was talking about, but I still didn’t understand half. I think it’s going to start making sense when I get serious about studying .Net lambda’s which I’m still half hacking.
In the Web World…
route.js is simple JS framework for creating statefull navigation in the browser based on location.hash changes.
Marak gave me a demo and it seems like an awesome and incredibly lightweight script. Its less than 100 lines right now. You can make a single page that has lightning fast links, making it look like a whole bunch of pages. Basically, its easy DHTML. There’s a bunch more uses too, like infinite tree navigation.
Some folks went to a full day Kaazing class. Here’s the techno speak on Kaazing: “it’s a WebSocket server implementation that offers full downgraded emulation (on both client and server) for browsers that don’t support WebSockets.” I think its a really awesomely cool real-time web product.
GO – Google’s new programming language
Quite a bit of interest in GO… Google believes will combine performance with speed. GO is based on the C programming language but also incorporates elements of all dynamically linked languages like python, and even pascal/modula/oberon family of languages.
There is an hour long tech talk available.
“If you really want a solid brain f*ck, I recommend Haskell.”
“I’d go outside, but they don’t have slashdot outside”
I was never a big slashdot fan, but I got sucked in and its now on my home page news feeds.
But Wait, There’s More…
Visual Studio, Now in Linux?!
Online IDE – wow
An IDE in your browser designed for the cloud.
We have a PowerShell evangelist, who also happens to be a MS MVP in PowerShell. I personally have seen him evangelizing PowerShell all over the office. (Maybe I’ll use it for my video project) He makes a good point on his blog about thanking the people of Lab49. I personally am inspired to do more just being @Lab.
Dryad and DryadLINQ
A distributed computing engine from Microsoft.
There are a lot of people @Lab who know things like Erlang, Haskell, Python, R, etc., etc., etc. I’m actually considering learning Lisp, but I need a project. I “learned” php for a project over the summer, but I didn’t really like it since its so much like classic ASP (really messy). Maybe I’ll learn F# instead… That shouldn’t be such a strech since I built an ML compiler in grad school (F# is based on ML). I wonder what kind of project I’d be interested in would benefit from a functional language… I suppose I’ll have to read up on the language and maybe that will give me some ideas.
Its funny, doing WPF, my umpteenth technology, is just not enough.
A weekly roundup of interesting things I hear about at the Lab, since this is the first one, it covers a bit more than a week.
And the movie Primer, with the scribbly chart, is about time travel. One commenter suggests the creator of the chart didn’t understand the movie, but it looks like a movie I’ve got to see.
Who builds domain specific languages? I just met a couple of guys @Lab and it makes more sense than I thought. One application is to build a really small and focused keyword set so users can write programs they can validate and maintain.
MongoDB (from “humongous”) “is a high-performance, open source, schema-free document-oriented database.” That’s heavy verbiage to say you can store and retrieve and you don’t have to design your database, whatever you send it, it will just save for you, no tables, no troubles. Looks great for a lot of web storage needs. We had a seminar @Lab and document oriented dbs seem to have a definite niche. CouchDB is another product in the space.
Its hard to see a parade when you’re 20 stories over it, but throwing stuff was loads of fun:
I’m drinking a lot of cool aid at Lab49 (tastes great, less kludgy). Its a place where phrases like tail recursion, statistical programming languages, and Dependency Injection/IoC, are regular topics of conversation. In other words, geek heaven. So, of course I’m going to use all the tools and tricks I’ve got (otherwise known as best practices) and Unit Testing is fundamental.
Why should you unit test? Even Microsoft knows the answer, but here’s a more complete answer — I doubt I need their product though. Short answer is it greatly helps you deliver and maintain, upgrade and reliably (regression) test software.
The benefits are huge, but the costs are actually minimal. When a unit test is created in tandem (or before, you TDD purists) with creating code it can be used to test each small piece of the program more quickly and more often without running and clicking through the UI. I feel that writing unit tests is actually less work than doing the testing interactively as I write code. And writing code that that can be easily unit tested means the code will be more modular and less coupled. A lower spaghetti factor ;).
It’s been a while since I was using unit testing regularly. I strayed too far into the realm of custom per project testing frameworks and now I’m happy to start over with with the basic testing frameworks. Back in 2005, the last time I recall heavily unit testing, there was really only NUnit and TestDriven.net (yes, I’m still just a .Net guy. Move along Java folks, nothing to see here). Now there’s MBUnit, XUnit, PUnit, and probably XYZ Unit. Not to mention Microsoft Unit Testing built into higher versions of Visual Studio. And check out PEX for automated creation of tests. It looks cool but unfortunately is only in version .18, that’s a bit shy of the magic number for me to give it a test drive.
Of course, I started with MS Unit Testing, since its built into Visual Studio. Its there, why not use it. Well, its (very) slow to start up, its only there on the higher more incredibly expensive versions of Visual Studio, and its design of running code out of test results subdirectories makes accessing local file resources difficult. The file resource issue was the last straw. After reviewing the available testing frameworks I chose good old reliable NUnit. Fifteen minutes later, the tests that I couldn’t make work with MS Test were passing in NUnit — a happy ending.
As a post script, a friend mentioned how ridiculous it is that MS would invest in creating their own testing framework when so many really good open source ones are available. Many companies contribute to the open source projects rather than building a new less functional wheel. I couldn’t agree more. I’m not of the opinion that Microsoft is Evil, well, no more evil than Exxon, but they’ve got it wrong this time. I don’t see how their crappy unit testing makes the high end Visual Studio any better or encourages anyone to part with an extra buck for it. Though it might help their FUD campaign, which is evil.