Thursday, March 22, 2012

Tuesday, March 20, 2012

Icon Fonts are Awesome

Some nice effects using icon fonts:

Posted via email from miner49r

Functional Programming For The Rest of Us

This is an old article from 2006 that was on the Hacker News list today.  It doesn't cover Clojure, but the ideas are applicable.

Posted via email from fnclojure

Sunday, March 18, 2012

Sunday, March 11, 2012

new Cisco Linksys Router E1200

My home network was having problems with dropping wireless connections and slow internet performance. I've been living for many years with an old Linksys BEFSR41 router and an old Airport Extreme base station ("Snow" flying saucer). I couldn't figure out what was wrong so I decided that my hardware was probably just getting too old and it was time to upgrade. After looking at the options, I decided to go with a basic Cisco Linksys E1200 wireless router for $50 from Best Buy. It's the low-end box with four 10/100 ethernet ports and wi-fi b/g/n support, but only in the 2.4 GHz band. Originally I had wanted gigabit ethernet and simultaneous dual-band wi-fi, but I couldn't justify paying more than double the price given that my Comcast internet is just 6 mbps. I figure it doesn't make sense to buy more than you need today because the hardware tends to get cheaper and better over time so I can just get a new one next year if I need something better.

My wife is the power shopper in the family so she handled the actual purchase. We bought the router on the Best Buy's website and used the in-store pickup option. The idea is that they'll have your order ready for you so you can get in and out quickly. Nice theory, but the line for customer service takes longer that the normal checkout queue. And when we got to the front of line, the trainee customer service rep couldn't find our order. She had to talk to the boss and eventually wondered off to find the router on the store shelves. So it took a lot of extra time trying to be fast. Lesson learned.

Setup didn't go exactly smoothly. It turns out the Cisco software won't run on the old iMac G5 (PPC) that I keep in the comm closet. That's OK, I'll copy the software to a newer Mac and try that. Now it runs, but at the end of the process it says that it couldn't set up the router. Like a good software developer, I run the process again and naturally get the same result. Why don't they just have a web interface? Well, they do of course, they just don't think that normal people want to see that. Nobody ever accused me of being normal so I manage to get into the web interface on (just like my old Linksys router), and get everything set up. Looks good to my old iMac G5. According to, I'm getting better performance than Comcast promised. Actually, Comcast promised "up to N" so strictly speaking they are in violation of their agreement by giving me more than the "up to" number, but I'm not complaining. (I hate those meaningless "up to" guarantees, but that's a rant for another day.)

For a few minutes, everything looked good, but then I had to test the wi-fi range. I used to keep the Airport station in a centrally located room assuming that would give me the best coverage. Now, the new router is also my wi-fi access point, so it's living in my comm closet, which is near the garage. The old MacBook did OK in the living room and dining room. But after more testing, internet performance gets horribly slow on the wi-fi connections. Same problem with my iPad. I updated the router firmware, reset the Mac's networking, etc. (I even tried the voodoo PRAM reset, CMD-OPT-P-R, to no avail.) I probably spent hours googling and experimenting before I finally decided to set the new router to G-only mode. That worked perfectly, everyone is happy on the hardwire and the wi-fi. My theory is that there's some incompatibilities among the N implementations (my MacBook might have only been "N-draft" when it came out). Maybe Cisco is perfect and Apple was wrong, but as a customer, I just want everything to work together. And to be fair, I was too cheap to buy the latest Airport from Apple.

I wanted that super-fast wi-fi N just because it's cool, but realistically I'm only getting 6 mbps from Comcast, so wi-fi G is plenty fast for me. And that MacBook is getting pretty old, I probably should be upgrading that soon...

Posted via email from miner49r

Saturday, March 10, 2012

Top 10 DTrace scripts for Mac OS X

Since version 10.5 “Leopard”, Mac OS X has had DTrace, a tool used for performance analysis and troubleshooting. It provides data for Apple’s Instruments tool, as well as a collection of command line tools that are implemented as DTrace scripts.

Posted via email from miner49r

Thursday, March 8, 2012

Clojure-Py announcement

> The Clojure-Py team is happy to announce the release of Clojure-Py 0.1.0.
>> Clojure-Py is an implementation of Clojure running atop the Python VM.
> As it currently stands, we have translated over 235 functions from
> clojure.core. This is not a clojure interpreter in python; the
> Clojure-Py compiler compiles clojure code directly to python code.
> Clojure-py functions are python functions. Clojure-py types are python
> types, Clojure-py name spaces are python modules.

Posted via email from fnclojure

How to beat the CAP theorem

Excellent article by Nathan Marz about rethinking data systems:

You can't avoid the CAP theorem, but you can isolate its complexity and prevent it from sabotaging your ability to reason about your systems. The complexity caused by the CAP theorem is a symptom of fundamental problems in how we approach building data systems. Two problems stand out in particular: the use of mutable state in databases and the use of incremental algorithms to update that state. It is the interaction between these problems and the CAP theorem that causes complexity.

In this post I'll show the design of a system that beats the CAP theorem by preventing the complexity it normally causes. But I won't stop there. The CAP theorem is a result about the degree to which data systems can be fault-tolerant to machine failure. Yet there's a form of fault-tolerance that's much more important than machine fault-tolerance: human fault-tolerance. If there's any certainty in software development, it's that developers aren't perfect and bugs will inevitably reach production. Our data systems must be resilient to buggy programs that write bad data, and the system I'm going to show is as human fault-tolerant as you can get.

This post is going to challenge your basic assumptions on how data systems should be built. But by breaking down our current ways of thinking and re-imagining how data systems should be built, what emerges is an architecture more elegant, scalable, and robust than you ever thought possible.

Posted via email from miner49r

Tuesday, March 6, 2012

fogus posts on Datomic

Rich Hickey, Stuart Halloway, and others at Relevance, Inc. have announced Datomic — a new kind of database.

See the videos at the above link.

The product website is:

Behind the scenes, Datomic uses DynamoDB (a NoSQL service from Amazon announced in January).  Here are some links:

Posted via email from fnclojure

Sunday, March 4, 2012

Hacker News mobile web app

Interesting article about building a web app for iOS.  Lots of helpful hints about how to get it to feel right:

Posted via email from miner49r