October 2011
2 posts
Snooty Monkey: Andrew's Perspective
Guest post by Andrew, one of the Snooty Monkeys.
I met Sean the same year that Snooty Monkey was started. At the time, I was working on a digital textbook application called ezLearnz, while working at a day job that had nothing to do with software. Sean was also working on an education app called Live Syllabus, while working a day job at IBM. We saw the possibility of a 1 + 1 = 3 situation…...
A New Direction for Monkey Opus
The Snooty Monkey tagline is a common household phrase of course. But just in case anyone reading this is a recent immigrant from Papa New Guinea, or just concluded a multi-year NASA space travel deprivation experiment, the tagline is, “Simple Software for a Complex World”.
As of this moment, Snooty Monkey has a new tagline, “Simple Self-Improvement for a Complex...
September 2011
1 post
Snooty Monkey: Lessons Learned
Snooty Monkey was started in 2008 as an experiment. The focus of the experiment? Can a CTO / Lead Developer / Product Manager type (that’s me by the way) create a hybrid micro-ISV / consultancy company? One that purposely stays small (just me? me and 2?), while serving a niche client base (bootstrapped entrepreneurs) with a niche service (temporary technical co-founder). Can doing this...
July 2011
1 post
3 tags
Build Erlang R14Bx on Mac OS X Lion
Usually to build software from source on Linux or Mac OS X, you follow the pattern:
./configure
make
sudo make install
When trying this on Mac OS X Lion you’ll find that make is no longer part of the OS like it was with Snow Leopard and before. Instead, it is part of Xcode 4.1 or greater. So you need to head to the Mac App Store app and get your free copy of Xcode 4.1 (or greater) so that...
April 2011
1 post
1 tag
Erlang's Treatment of Memory and Threads →
This is a good, short post on Erlang’s unusual treatment of memory and threads. Substitute “Ruby” or “Python” for “Java” if it makes it easier for you to understand and none of the comparisons will be much different. It serves to explain why you overlook Erlang’s quirky syntax (which I happen to mostly like) when you need extreme concurrency.
March 2011
2 posts
Bringing Serendipity Back
If Timberlake can bring sexy back, then I guess dictionaries can bring serendipity back too. I’m a regular user of online dictionaries and they all seem about the same to me (which is to say, somewhere between pretty bad and awful) so I use them through Google rather than having a go to favorite. I search for the word and then pick one or more of the top 10 hits to look at.
Today a search...
January 2011
2 posts
Settling for (the Right) Mediocrity →
Smart stuff from the folks at Working Software:
What is it that you can compromise on that people may expect, in order to deliver what you consider to be exceptional in a period of time that fits your budget and release schedule? … they may be willing to forgo such pleasantries if you deliver them some quality in your application which they consider to be exceptional. The key to living...
1 tag
Apple is Not a Software Company
Marco Arment, the founder of Instapaper and former tech lead at Tumblr recently wrote that there really isn’t much of a market for tablets, just for iPads. I have no bone to pick with his main point, he’s right about that. But part of his analysis is way off base (the bold emphasis is mine):
And, like they’ve done so far with Android, the hardware manufacturers will continue to...
December 2010
4 posts
1 tag
The Golden Football
The Golden Football is a new description by Evan Miller of the economics of GroupOn. The idea is that GroupOn moves the economic activity to the right of the normal micro-economics price/demand curve by offering up a lower price than the market has settled into charging for that particular good or service in exchange for a higher volume than the market would normally demand for that good or...
The $20 Starbucks Test
A couple of weeks ago I had the good fortune to meet Hugh Crean, the ex-CEO of Farecast, ex-Microsoft executive (they acquired Farecast) and current Entrepreneur in Residence at General Catalyst. A group of us talked to Hugh for close to an hour, and I learned more about the travel industry in that short span than I’ve learned in a lifetime of flying, hoteling and using Kayak, Priceline and...
Fools ignore complexity; pragmatists suffer it; experts avoid it; geniuses...
– Alan Perlis
Always Be Building Your Own Products
Like many small technology companies, Snooty Monkey makes the mortgage and the payroll through work for clients while carving off time to build products. It’s not ideal, but it beats the alternatives: working a corporate job for years to save up a financial runway, or ceding autonomy to outside investors, who of course get a say in how their money is spent.
Once you have built a...
September 2010
4 posts
1 tag
Erlang native compilation, why not?
belucid: what are the downsides of compiling Erlang native? (HiPE) Any reason not to use it all the time?
MononcQc: the native modules aren't garbage collected when loading a new version
MononcQc: also they are not portable like .beam files
MononcQc: they're slower to compile and are not necessarily faster
MononcQc: but they are entirely worth it for numerical stuff
belucid: ok
belucid: so I should run some perf tests with both
belucid: and see if it makes a diff for my application
MononcQc: ideally, yeah
MononcQc: always measure
belucid: yep
belucid: and then... if they do make a meaningful diff, the impact is that I really shouldn't plan to load new versions
belucid: and of course, need to compile for the target machine
MononcQc: oh, load new versions all you like
MononcQc: it's not a big overhead
MononcQc: just something to consider
belucid: ok
belucid: just shouldn't plan on loading new versions forever and ever then
belucid: at some point it would add up
MononcQc: yeah, but then you'll need to tear the node down to upgrade the VM
MononcQc: so I'm not sure it's actually that problematic in practice
belucid: gotcha
belucid: on days like today, Erlang R14B release day
belucid: you'll bring the app down anyway
belucid: thanks as always MononcQc!
MononcQc: no problem
1 tag
The Erlang Shell
One option to running the Erlang shell when your code is in ./src, including files in ./include, and building to ./ebin is to run erl from ./src as such.
erl -pa ../ebin
All your modules are then local and can be accessed. You can include records with rr(module).
Thanks MononcQc on #erlang.
From a single bit to a few hundred megabytes, from a single microsecond to a...
– Edsger Dijkstra via Manuel Simoni
3 tags
rm all the results of a find →
I’d never had the need to remove everything found by the find command before. Since rm expects arguments, rather than piped input… it breaks the normal Unix pipe it all together paradigm.
Some quick googling brought xargs into the picture though. xargs constructs an argument list from its piped input and executes its argument with them. Perfect for what I was trying to do:
find ....
August 2010
13 posts
Stop Reading Business Books →
There are 2 types of business books, the pop culture, high-level, feel good business book, and books with real data and case studies by scholars. Both are equally bad for most readers. Let’s start with what Rob Walling has to say about the former:
“…these books are a series of anecdotes disguised as science.”
Amen brother! As someone who is in business, but is also...
1 tag
The Bowling Pin Strategy →
“…find a niche where the chicken-and-egg problem is more easily overcome and then find ways to hop from that niche to other niches and eventually to the broader market…history suggests that big companies who rely on a ‘carpet bombing strategy’ are often upended by focused startups who take over one niche at a time.”
1 tag
5 Reasons Not to Share Your Roadmap →
There is always a strong temptation to share the product roadmap. It is rarely a good idea because of the flexibility you give up.
2 tags
Product Overload
Forget information overload, we are now living in the age of product overload.
Working without a plan may seem scary. But blindly following a plan that has no...
– Jason Fried
2 tags
In Praise of Quitting Your Job →
Great stuff:
“As a creative person, you’ve been given the ability to build things from nothing by way of hard work over long periods of time. Creation is a deeply personal and rewarding activity, which means that your Work should also be deeply personal and rewarding. If it’s not, then something is amiss.”
“Ownership not as a percentage of equity, but as a measure of your ...
2 tags
Enlarge an ext3 Amazon EBS volume
Have an EBS volume that’s filling up? Follow these steps to enlarge it:
At the EC2 Web Console
Unmount the volume.
Take a snapshot of the volume.
Create a new volume from the snapshot (at the new, bigger size)
Detach the old volume
Attach the new, bigger volume.
In a shell of the instance
fdisk /dev/sdx (then type: d, n, p, 1, <enter>, <enter>, w)
ec2fsck -f /dev/sdx
...
1 tag
Paul Graham's 6 Principles →
Find (1) simple solutions to (2) overlooked problems that (3) actually need to be solved and (4) deliver them as informally as possible, (5) starting with a crude version 1, then (6) iterating rapidly.
Simple solution (spot on Paul!)
Overlooked problem (I would say, “not adequately solved for some group”)
Needs to be solved (I would say, “an important problem”)
Deliver...
2 tags
Why Free Plans Don't Work →
“The only thing that seemed to be consistent about my growth was that my revenue was relatively flat while my user base kept growing.
If I stayed on this path, I’d soon have thousands of free users to support.”
1 tag
Defending yourself in advance against the possible ramifications of success has...
– Clay Shirky in Cognitive Surplus
3 tags
Zipper
A zipper is a data structure that provides constant time access for some important class of operations, namely access to the current, next, and previous elements, and insert and delete at the current element.
For those not familiar, the difference between a data structure that provides O(log n) or O(n) for an operation, and one that provides constant time, is that the former take longer and...
1 tag
Build What Had Not Been Possible →
“Over the course of history new building blocks become available, which allow us to build companies that weren’t possible before. The crucial part to changing the world as an entrepreneur is to use these new building blocks to build what had previously not been possible.”
2 tags
What's the Diff?
Normally, to see the differences in a file managed by git, I do this:
git diff <file>
And the output at the commandline looks about like this:
diff --git a/README b/README
index 37ec8ea..1cdd33d 100644
--- a/README
+++ b/README
@@ -24,6 +24,7 @@ more separate. Each of these packages can be used independently outside of
Rails. You can read more about Action Pack in
...
June 2010
1 post
2 tags
Drag n' Drop Annotations in MapKit →
This is a nice descriptive blog writeup and sample source code (Xcode project in github) for how to let the user drag annotations around in MapKit, thereby changing the annotation’s location. Most iPhone apps don’t need this, but for those that do, it’s great to have this writeup since Apple’s info on this topic is sparse.
May 2010
2 posts
Good Developer Hygeine #2
Professional software developers won’t do any serious development without source control. Yet I’ve met numerous developers that give me a blank look when I ask them which clipboard manager they use.
Less important than source control, but still an important #2, is a clipboard manager. With a clipboard manager you have version control in the immediate term, before you commit your...
1 tag
Abracadabra
Google is officially indistinguishable from magic. Try this search for JavaScript strip.
String strip() in some languages is often implemented as trim() in JavaScript. Takes “did you mean?” to a whole different level, huh?
April 2010
1 post
2 tags
List the files from a Yum package →
repoquery is the tool you want. Who knew?
March 2010
2 posts
1 tag
Your Product Needs a Soul →
“Having a soul doesn’t mean that there is only one right answer, but for a soul, one needs to be true to self, and not get distracted by competitors. It means you have something to be proud of.”
1 tag
Stop Hitting Your Invisible Wall →
“Why, when you know you should be motivated to write the code, go to the networking event, make those calls, write the blog, do you sit there instead, with the motivation sucked out of you, reading Twitter?”
January 2010
6 posts
2 tags
Desktop Browsers Can Learn from the iPhone
If there is one feature that Mobile Safari has that the desktop browsers should copy, it’s clicking in the header area of the browser to instantly scroll the page back to the top.
Mobile Safari has this feature because the URL bar scrolls off the view as you scroll down the page. This doesn’t happen in a desktop browser, but it’s still common to finish a long article at the...
1 tag
The Programmer's Font of Choice
Anonymous Pro, can’t beat it with a giant stick.
I’ve been using it in TextMate for a long time but just realized I wasn’t using it in Terminal too. I switched over to it this weekend. What a huge difference.
Go get it. Use it. Love it. Live it. You won’t be sorry.
If a man is called to be a street sweeper, he should sweep streets even as...
– Dr. Martin Luther King, Jr.
2 tags
A tough couple of weeks for the IE6 camp...
“Your IT staff has had more than three years to come up with alternatives to IE6. If they can’t handle it, maybe it’s time to replace them, too.”
http://blogs.zdnet.com/Bott/?p=1645
http://arstechnica.com/microsoft/news/2010/01/microsoft-wants-you-to-ditch-windows-xp-and-ie6-for-security.ars
http://mashable.com/2010/01/15/german-government-stop-using-internet-explorer/
4 tags
6 Technologies I'll be Exploring in 2010
Webrat/Selenium, Cucumber - These should help me take testing up a notch in abstraction. I’m much more interested in black box, end user, acceptance testing. White box testing can be too brittle and breakable for many parts of applications.
NoSQL - As an OODBMS guy from way back in the day (mid to late nineties), I’ve always had a bit of skepticism about the “universal...
Interesting (Developer) Stuff in 2010 →
December 2009
1 post
3 tags
"already initialized constant" Warnings
I hate it when a plugin or gem decides to override some constants that conflict with Rails or another plugin or gem. Even when this is done in a way that doesn’t cause any problems, you are forever saddled with warnings whenever Rails starts up. For example, here was the startup message for a project of mine:
/vendor/gems/tlsmail-0.0.1/lib/net/smtp.rb:806: warning: already initialized...