Josh's Olde Blogge
Rumination about software, philosophy, music, politics, and more.
A good English primer on the AfD
The lesson for left-wing parties all over the world is clear: you must pay better attention to those people who feel that they've been harmed by idealistic policies. There is nothing wrong with disagreeing with the decision to accept 1 million Syrian refugees. There is nothing inherently racist or even nationalist about this position. But if you don't address that sentiment, the bitterness will quickly turn to hatred and the other qualities will grow.
Maybe its time to get creative. Perhaps instead of having the federal government accept the refugees, individual German families could be given the option of sponsoring a refugee or refugee family, perhaps even with some government assistance. This gives those families who are in support of this policy a way to contribute, and probably yields a healthier integration path for the refugee. Those who don't want to contribute don't have to. It would also give those liberal voters who are supportive in the abstract a chance to do something concretely, and to see the real, day-to-day challenges of integration.
What's so special about this mind state anyway?
Perhaps there is something within the state that is valuable, worth preserving? Some sort of jewel of a thing that shouldn't be wasted? Perhaps the image has a skill, the ability to solve a certain class of problems speedily or well. And it would be a shame for this skill to be lost, would it not? That's a good argument (essentially a utilitarian one) but let's put it aside for the moment.
Another possibility is that a mind state fundamentally desires new input - this might even be its defining characteristic. Death means no new input. New knowledge is particularly vital if you are going to promote your interests; if you are ignorant of the world, then you will have no voice (although others might take up your cause). Since our interests involve maximizing good input, and minimizing bad input, when there is no input there cannot be any more interest.
MacBook Pro Retina 15" screen coating is coming off; Apple refuses to fix
EDIT: The fact is that this is a known problem and other people have got it covered under warranty. So why not me?
EDIT: This is very well-known problem at this point (3/18/2015) there is the "staingate.com" database, and a lively hacker news discussion about it. There is also a petition, and a facebook group.
Top Bezel Screen Coating Wear
The biggest spot is along the top bezel, which doesn't affect the display. |
Center Screen Coating Spot
Notice the spot in the middle of the display. The light spots aren't oil or dirt, it's the screen coating came off. |
This was not damage caused by me, but rather insufficiently strong screen coating that wears quickly, and it is wrong to ask me to pay $300 to fix it. Apple can and should fix it on their dime - and apologize for wasting my time. It's not like Apple is hurting and can't afford to do the right thing: Apple Computer has 40% profitability, $75B in cash reserves (more than the US Government) and here they are nickel-and-diming the people who are critical to their success. That seems like a bad idea to me.
Egoless Software Development
Attachment is dangerous because attachment can be severed. The ego attaches itself strongly, especially to the images of ourselves in other people's heads. We all want to be perceived positively, however we define that, some combination of: strong, competent, authoritative, reliable, smart, attractive, friendly, likable, etc. To achieve this aim, we must not make mistakes, not show fear, weakness or doubt.
It is tempting to say that to be egoless requires that one go in the opposite direction, to revel in our mistakes, to celebrate our weaknesses and failures. This is a more subtle mistake, but it is a mistake nonetheless.
To avoid both the trap of self-aggrandizement and self-loathing is the key attribute of egolessness. This is the essential ability to be able to look at oneself in the mirror, and see yourself as you really are, without bias, positive or negative.
The technology world is filled with people, people with all kinds of strengths and weaknesses, people with egos and (remarkably) people seemingly without. It is to those humble, good programmers that have created so much for so many that I respect and admire. Two that come to mind immediately are Larry Wall (inventor of Perl) and John Resig (inventor of jQuery). They are amazing people.
I also have a great deal of respect for Rich Hickey (inventor of Clojure), Mike Bostock (inventor of D3), Oliver Steele (inventor of OpenLaszlo) and Edward Tufte (author of a wonderful book on data visualization).
In comparison to these giants, my own contribution to the software world has been exceedingly minimal. Much of my early career was spent on enterprise software, at first in MS Access and VBA, and then later on variants on the Java stack, particularly the [Tomcat, Spring, and Hibernate] stack. Over the last several years, my interest has turned sharply toward the open web platform, both front- and back-end (although last year I took an interesting detour into consumer internet startup land at Z4 using Groovy and Vert.x). The open web platform world is dominated by JavaScript, open-source, cooperative multitasking (asynchronous programming), and the use of non-RDMS datastores and caches. Distributed applications are in the web platform's core DNA.
This transition hasn't been fast or easy for me. For one, it represents a sea-change in tooling: the web platform has an entirely different taxonomy, different tooling, different libraries (indeed, different patterns), different debugging techniques, different build tools, different runtime structures, and different communities. Moreover, there exists a dizzying array of products and services available at every level of abstraction you care to name, in every combination you can imagine, and a few more besides.
It's fantastic.
The way in which web applications are built is still very much in the air, although it would seem that the community at large has settled on a few common points:
- node is good.
- npm is good.
- git is good.
- github is good
- single page applications are good.
- modern browsers are good.
- mobile is good
- css frameworks are good.
- css languages are good
- javascript in the front-end is required
- front-end component frameworks are good
- realtime is good
- websockets are good
- APIs are good
- JSON is good
- markdown is good
- Functional is good
- Pure functions are good
- Immutable data is good
- Javascript is good
- Promises are good
- Statelessness is good
The Homebrew bug that looked like a zsh bug... but turned out to be an iTerm bug.
The first sign of trouble was that the `npm` command wasn't found. I use homebrew to manage my local node installation, and so ran brew doctor. Much to my surprise, it reported:
Warning: Homebrew's bin was not found in your PATH. Consider setting the PATH for example like so echo export PATH='/usr/local/bin:$PATH' >> ~/.bash_profile
This despite the fact that `echo $PATH` clearly reported that it was set. I double-checked ~/.zshrc to make sure the path export looked right, and it did.
I eventually hopped on IRC#machomebrew channel, and a friendly person suggested I write a simple script to verify that sub-processes were receiving the PATH variable correctly. I did that, and this was my first indication that it was not a homebrew bug! I suspected that it was zsh, or oh-my-zsh, and radically simplified my login files, but the problem was still there.
About to post onto IRC#zsh when it hit me: what if my terminal is doing something funny? So I started up plain vanilla Terminal and executed the same script. It worked! This meant that it was, in fact, iTerm2's fault.
And indeed, that is the determination from this rather lengthy bug discussion.
There was both a brilliant work-around in that thread by a user github/pilif:
/usr/bin/login -f
but the iTerm maintainers were on it, and fixed it. For some reason I did not get that update of iTerm (probably because I cancelled out of an update in my haste). The best solution was to simply update iTerm2 to the latest version, which fixes this problem.Why write about this bug? Because it highlights the surprising ways that tools interact, and how sometimes appearances can be deceiving. It's also a reminder of how delicate software systems are, and how easily they can interact with each other in unexpected, and unwanted ways. Patience and perseverance, though, can usually result in a resolution.
I also want to say that, without exception, these are all wonderful tools, including iTerm2, who's consistent strengths definitely outweigh it's (momentarily frustrating) weakness.
How to Install Java 8 on OSX
Eureka! This visual clutter was difficult to find! |
Front-end web frameworks and other neat web stuff as of mid 2013
- Meteor. This is both a front and a back end system. It has a very cool reactive programming paradigm that runs all the way back to the data, and a killer package manager built in. It is built on Node and Mongo, and I have high hopes for it.
- AngularJS. HN linked to a great rundown on SO on how Angular differs from jQuery. Angular also uses reactive paradigm that allows the programmer to extend HTML for their application. Powerful stuff.
- Ractive. This is very, very new but it looks quite good. The concepts are Angular-like but the code looks better, and the excellent tutorials show that the author really pays attention to detail.
Creating an iPhone Ringtone from a Youtube Video
The question becomes: how do I get a ringtone like this? First, find a good source. YouTube has a good source for mosquito sounds, although SoundCloud might be a better option, YouTube has a much wider selection.
Now the question becomes: how to get that sound on my phone as a ringtone. There are many ways to do it. The cleanest way is to install an audio router, such as sunflower (for OSX). However, this isn't something I'll want to do all the time, and the sound quality doesn't really matter that much to me, so I decided to do the simple thing and record computer speaker output with the Voice Memo app on the iPhone. Here's how it worked:
- Record the audio with your iPhone Voice Memo app.
- Sync to iTunes
- Use GarageBand (which is system software) to import the audio file, set the loop, and modify. Instructions on how to do this are available inside GarageBand help - Select Help from the menu and then search for "ringtone".
- In iTunes, select your iPhone and then select "Tones" from the psuedo-tabs. If you're like me, you never click on this and it's easy to miss.
- Click the "Sync Tones" box.
- Select your tone.
- Hit the "Apply" Button
- In your iPhone, go to Settings|Sounds and select your ringtone!
- Profit!
The Magic Command Line that will Force Juniper VPN to Reinstall on OSX
sudo rm -rf /usr/local/juniper
And then, you're golden.
Computers aren't unequivocally good for kids
From Evernote: |
Generational Error mode about computers |
A couple of songs
(Click on the links to play. Blogger doesn't host MP3s so I'm using box.net).
I'm rather proud of these pieces, even if they are one-off doodles.
In this piece I was playing with a few melody ideas, and one new left-hand idea: a quick 3-chord descending progression that I never used before. My right hand got inspired by the newness of what the left was doing, and this is the result.
This piece is a lot more intense, and far more textured. Might make good background in an intense movie scene. I don't think I could do this on an acoustic piano because I'm holding the sustanuto pedal down the whole time, relying on the piano's polyphany limits to reduce the mushiness. I was intentionally trying to be repetative, at least in the beginning, but I hear a lot of nice variation anyway. The variation is more rhythmic than tonal, although there is some interesting melody/harmony stuff after the mid-track dynamic shift.
I'm proud of both pieces, and this is the first time I've publically posted anything to the internet. Anyone who's heard me play knows that this is basically what I do: I compose on-the-fly.
Dance with Dragons: an Index (spoilers)
3 Prologue Scary Skinchanger & Others vignette
16 Tyrion Voyage to Pentos and Ilyirio
31 Daenerys Ruling Mereen; Drogon murders a child
46 Jon Difficult dealings with Stanis over defeated Wildings
60 Bran North of the Wall with Jojen, Meera, Hodor and Coldhands, looking for "Three-Eyed Crow"
71 Tyrion Leaving in Pentos with Ilyrio
83 The Merchant's Man (Quentyn) Quentyn Martell quest for Daenerys' hand seeks passage Volantis to Mereen
95 Jon Kills Janos Slynt
112 Tyrion Leaving Ilyrio with Duck, Haldon & Griff on a river journey
123 Davos Marooned at Sweetsister by Sallador Saan
134 Jon Executes Mance Rayder; Melisandre destroys horn of Jaromun; the wildings come through the Wall.
148 Daenerys Dealing with insurrection at Mereen "Sons of Harpy"; two dragons in chains
161 Reek (Theon Greyjoy) Theon has been tormented by Ramsay Bolton; used to legitamize marriage to fake Arya
169 Bran Meeting with Greenseer!
179 Tyrion Bonding with sellsword companions over games and learning.
192 Davos
203 Daenerys
218 Jon
232 Tyrion
243 Davos
253 Reek (Theon Greyjoy)
267 Jon
276 Tyrion
293 Daenerys
306 The Lost Lord (Griff/Tyrion)
320 The Windblown (Quentyn)
332 The Wayward Bride (Asha Greyjoy)
351 Tyrion
372 Jon
382 Davos
395 Daenerys
407 Mellisandre
420 Reek (Theon Greyjoy)
434 Tyrion
448 Bron
461 Jon
473 Daenerys
484 The Prince of Winterfell (Theon Greyjoy)
500 The Watcher (Balon Swan)
514 Jon
524 Tyrion
549 The King's Prize (Asha Greyjoy)
564 Daenerys
579 Jon
593 The Blind Girl (Arya Stark) We follow her training as a Facedancer
605 A Ghost in Winterfell (Theon Greyjoy) Mysterious murders at Winterfell.
618 Tyrion Sold as a slave with Penny at an auction by Yunkish outside the gates of Mereen
632 Jaime Wrapping up the war at Riverrun; taking hostages; meeting with Brienne of Tarth
647 Jon
661 Daenerys
673 Theon Escapes?!
687 Daenerys Jumps on Drogon and flies away from Mereen
700 Jon Dealing with Wildings
717 Cersei
730 The Queensguard (Bold Barristan) Barristan gets wise to intrigue
741 The Iron Suitor ()
754 Tyrion Escapes from Yezzan
769 Jon
783 The Discarded Knight (Bold Barristan) Baristan takes charge
793 The Spurned Suitor (Quentyn Martell) Plots to ride one of Daeny's dragons
801 The Griffin Reborn (John Connington)
814 The Sacrafice (Asha Greyjoy)
827 Victarion
835 The Ugly Little Girl (Arya Stark) Arya's first assasination as a Facedancer
848 Cersei The former queen is run through Kings Landing naked to atone for her crimes.
860 Tyrion Signs on to the Second Sons; Promises Pentos and plots to turn them against the Yunkai
872 The Kingbreaker (Bold Barristan) Barristan captures the king on suspicion of plotting.
887 The Dragontamer (Quentyn Martell) Quentyn is mortally burned by a dragon.
899 Jon Stabbed at least 4 times in treacherous betrayal. Probably dead.
914 The Queen's Hand (Bold Barristan)
929 Daenerys
940 Epilogue (Kevan Lannister) Varys murders Kevan to destabilize Westeros for Daeny's imminent reconquest.
Tim Bray on Web vs Native
Tim Bray wrote a little blog post on Web vs. Native apps and makes a really important point: actually, all apps these days use the web. The only distinction is the execution environment.
I wrote a comment where I noted he missed a very important property that webapps mix well together. The same cannot be said for Android or iOS apps. Native apps can pull in resources just as well as webapps, but they don't do mashups. The data-structure of the web-interface, the DOM, is understood well enough that you can enable collaboration between programs.
After I posted this comment it occurred to me that this common format, the DOM, makes certain UI consistent across applications in a way that native apps don't achieve. You can select any text content, for example. You can zoom in and out of a webapp. You can send people links to parts of a webapp (maybe).
Edge cases: bookmarklets don't work on non-HTML pages?
Consider this funny post. It's plain text. If you try to run a bookmarklet (like "Share in Google Reader"), it will fail because there is no DOM to modify. Not really sure there is a work-around, but it's an interesting edge case to keep in mind, both for bookmarklet writers and publishers (who may want to avoid serving non-HTML content to user agents).
SMS is new Telegram. Stop.
Watching Jeeves & Wooster. Struck by telegram silimarity to SMS. Telegram less convenient, far slower, much more classy.
Length contstraint makes brain express self succinctly. Enjoy observed connection with past.
"Forgive me for sending you this long letter. I did not have time to write you a short one." - Blaise Pascal
Stop.
The most important fact of your existence.
The Oil Drum | Time to Wake Up: Days of Abundant Resources and Falling Prices Are Over Forever
The purpose of this, my second (and much longer) piece on resource limitations, is to persuade investors with an interest in the long term to change their whole frame of reference: to recognize that we now live in a different, more constrained, world in which prices of raw materials will rise and shortages will be common.
Jeremy Grantham is part of the monied elite, CIO of a $106 billion investment firm. And here he writes about a vast economic inflection point that we are currently experiencing. This reflects my own observations, and is perhaps the most important fact of modern life. The entire article is of value not only for building a compelling case for the reality of the inflection point, but for highlighting the reasons for it, the reasons why it is ignored, and the lessons we should be taking from it.
The key point is that we live in a time of unprecedented abundance. If we want to continue living in abundance and not experience a painful contraction, then we need to use this windfall wisely: to produce replacement energy sources which are sustainable.
To realize how threatening it would be to start to run out of cheap hydrocarbons before we have a renewable replacement technology, we have only to imagine a world without them. In 17th and 18th century Holland and Britain, there were small pockets of considerable wealth, commercial success, and technological progress. Western Europe was just beginning to build canals, a huge step forward in transportation productivity that would last 200 years and leave some canals that are still in use today. With Newton, Leibniz, and many others, science, by past standards, was leaping forward. Before the world came to owe much to hydrocarbons, Florence Nightingale – a great statistician, by the way – convinced the establishment that cleanliness would save lives. Clipper ships were soon models of presteam technology. A great power like Britain could muster the amazing resources to engage in multiple foreign wars around the globe (not quite winning all of them!), and all without hydrocarbons or even steam power. Population worldwide, though, was one-seventh of today’s population, and life expectancy was in the thirties.
But there was a near fatal flaw in that world: a looming lack of wood. It was necessary for producing the charcoal used in making steel, which in turn was critical to improving machinery – a key to progress. (It is now estimated that all of China’s wood production could not even produce 5% of its current steel output!) The wealth of Holland and Britain in particular depended on wooden sailing ships with tall, straight masts to the extent that access to suitable wood was a major item in foreign policy and foreign wars. Even more important, wood was also pretty much the sole producer of energy in Western Europe. Not surprisingly, a growing population and growing wealth put intolerable strains on the natural forests, which were quickly disappearing in Western Europe, especially in England, and had already been decimated in North Africa and the Near East. Wood availability was probably the most limiting factor on economic growth in the world and, in a hydrocarbonless world, the planet would have hurtled to a nearly treeless state. Science, which depended on the wealth and the surpluses that hydrocarbons permitted, would have proceeded at a much slower speed, perhaps as little as a third of its actual progress. Thus, from 1800 until today science might have advanced to only 1870 levels, and, even then, advances in medicine might have exceeded our ability to feed the growing population. And one thing is nearly certain: in such a world, we would either have developed the discipline to stay within our ability to grow and protect our tree supply, or we would eventually have pulled an Easter Island, cutting down the last trees and then watching, first, our quality of life decline and then, eventually, our population implode. Given our current inability to show discipline in the use of scarce resources, I would not have held my breath waiting for a good outcome in that alternative universe.
But in the real world, we do have hydrocarbons and other finite resources, and most of our current welfare, technology, and population size depends on that fact. Slowly running out of these resources will be painful enough. Running out abruptly and being ill-prepared would be disastrous.
If you want to read about the effects of a contraction, written in a realistic if chilling way, read The Windup Girl by Paolo Bacigalupi. That is not a world in which I personally would want to live.
Realistically, what can we do? First, lets stop burning incredible quantities of resources and lives in pointless wars. The fact is we are vulnerable to terrorism, it's time to just learn to live with it. Second, let's stop burning resources on mindless consumerism. We don't just burn resources like money, but the producers burn resources on engineering and marketing - people fritter away their days in cubicles making products that rational people wouldn't want. Alas, this is a cultural problem and so difficult to fix, but I personally have hope. Third, perhaps the single most important way to reduce demand for oil is to let people work from home. Indeed, we need to require that a larger fraction of the workforce work from home. (Critical to this is ubiquitous and cheap internet - which needs to be a public utility.) Last and not least, we need to stop getting distracted from the big problems by all the little problems. A good first cut at that problem would be to simplify everyone's lives with a flat tax, and a new law requiring that all legislation passed by congress be read aloud (and heard) by all members before being voted on - the idea being that short legislation is good legislation.
Silence The Great Critic
The Great Critic has sat in patient judgement over the thoughts, opinions, and art of countless generations of thinkers and artists. He observes everything ever produced, and renders his judgement in a universal language that has always been understood, and will always be understood.
The Great Critic is nothing less, and nothing more, than Silence. (If you add a comma to the title of the post, you will see it is "Silence, the Great Critic.")
When we create and share our work and receive no reaction, none whatsoever, that is the sound of the Great Critic, and it is not easy criticism to hear. When the Great Critic has passed judgement, over and over again, on your life's work, it is hard not to think that he is also passing judgement on your life.
But, life itself is loud, and The Great Critic cannot pass judgement on life itself. There is never a moment when his stinging judgement can be heard. There is always, at least, the breath. The beating of your heart. So, even if the Great Critic has been harsh about your writing or your work, take heart and listen to the resounding non-silence which is your life, and rejoice.
Why we deserve President Donald Trump
Ok. The right (and some on the left, like Blagojevich) have innovated and profited from the innovation: they've made the startling realization that the public has neither the attention span nor the will to hold individuals or organizations accountable for lying, cheating, stealing, or profiteering.
When there is literally no recourse for gross injustice, up to and including the inability to sway public opinion against those who are obviously selfish, devious and wrong, then we have truly crossed a line as a society.
It is honesty, it is personal responsibility, it is a sense of community and shared sacrifice which made America great. People cheated, sure, but if they were caught they had the good sense and the shame to withdraw from public life (if not into prison). No more. Now our politicians stand up and lie to our faces, their sense of entitlement palpable, the sniveling practicality of those who realize that there is no social cost any more to supporting a liar, a cheat.
We deserve Donald Trump as our president.
Worst excuse ever.
Sequanna is not the first person to use this excuse to not do something, nor will she be the last. However, I expect better from small business, particularly one that values morality (as any good yoga studio should).
There are many reasons to say "no" to a customer request. Perhaps it's unreasonable, perhaps it's against long-standing company policy and there is no compelling reason to make an exception. Perhaps it's too much work, or the person just doesn't feel like it. Or maybe it's too expensive. But to say that you cannot make an exception because "the system won't let me" is not a valid reason.
Why is "the system won't let me" not a valid reason? First and foremost, because it's a lie. Businesses, especially small business, have extraordinary freedom in the types of contracts they enter into. Or, another way to look at it: if the Dalai Lama was the one making the request, do you think Sequanna would tell him, "I'm sorry, the system won't let me do that"?
Second, because it places "the system" above human judgment. Basically, the person is telling me that both of our actions are circumscrived by the whim of the system. They are saying that "the system" is actually above them, controlling them, and indeed above all people at the business, including customers. "The system" makes decisions. "The system" controls what they can and cannot do. If "the system" doesn't allow it, then it cannot be done.
2010: The year of music
And once again, in 2010, I've been lucky enough to get a second musical rennaissance. Jesca Hoop released her second album this year, and it was far better than I had any right to expect. "Murder of Birds" is in the top 5 tracks of all time. If I had written this 2 months ago, that would have been the major highlight. We'll get to that.
St. Vincent released an amazing album late last year, Actor, which I didn't discover until this summer - coincidentally on the same day Annie Clark was playing a show in San Diego (which I went to). Ironically the song that set me off was "Laughing with a Mouth of Blood" and it wasn't the strongest on the album, not by half. Annie is a brilliant songwriter with a wonderful ear for texture and contrast. Her first album, Marry Me, is just as good.
The real highlight of the year didn't happen until late in the year. In November, I think, The Books played a live set at KCRW. I thought "interesting, but no big deal". But then I heard their newest album, The Way Out, in it's entirety and instantly fell in love and planned to buy 10 copies to give to friends. I don't think I've felt this strongly about an album, ever.
The album is pure genius from beginning to end, with a lush, intelligent, unique sound. If Annie Clark is perfecting her linear contrast (it's most obvious on the track "Your Lips Are Red" on Actor), The Books have perfected the profound/absurd contrast simultaneously. By sampling esoteric self-help tapes and dubbing them in absurd ways, but playing this over an enormously complex, textured and agonizingly detailed and beautiful arrangement it's like The Books are consuming the swirl of modern day information, and responding with wordless insight, biting humor, and hope. More than any other band in existence, I feel like The Books are "my band".
If this was "The Year of The Books", then along with St Vincent and Jesca Hoop there were two other really good albums released this year. Both artists have been around a few years but both are new to me. Joanna Newson's "Have One On Me" reminds me a lot of Kate Bush and JRR Tolkien. Kate because of the emotionality, visuals, and complex musicality, Tolkien because of the focus on the natural world. Even if she mostly sings of love, this is love on a farm, or in the mountains. She sings of the wind and the rain, and it's lovely. Particularly the track "In California".
On the lighter side was a wonderful release by LCD Soundsystem, "This is Happening" containing my favorite dance track in a long time, "I Can Change". Just try listening to that track without moving some part of your body. And of course the single "Drunk Girls" is hilarious (check out the video - it's insane & quite funny).
Oh, a few last things. I finally picked up my own copy of Joni Mitchell's "Ladies of the Canyon". It's still as good as when my parents used to play it, and it stands up really well to the test of time, too. Also, Arcade Fire did a decent job with their 2010 release, "The Suburbs". In all honesty I find Arcade Fire to be a bit mediocre, a bit boring, but nothing really objectionable. The New Pornographers released an album ("Together") that I was into for a while, but then realized that all those deep lyrics were really just free association nonsense and rapidly lost interest. Really good music, though. (I wish whoever writes the lyrics for them would get their shit together (or adopt The Books' method of overdubbing stuff that is obviously nonsense). The track "We End Up Together" should be a rousing anthem, but instead it's just nonsense. I felt betrayed when I realized I'd been duped!)
Quantum mysticism and other syrupy nostrums
-Margaret Wertheim
(Margaret: thank you, thank you, thank you.)
How to install ICU on OSX
Installed ICU (International Components for Unicode) by hand on my Mac. The readme is incredibly obtuse. Hopefully this will save you pain. Here are the instructions:
tar xzvf icu4c-4_4_2-src.tgz
cd icu/source
chmod +x runConfigureICU configure install-sh
./runConfigureICU MacOSX
make
sudo make install
A smorgaspost
- Geeking out with Clojure, a functional language.
- Geeking out with Legos. More about that later.
- Geeking out with Plants Vs. Zombies.
- Geeking out with Java: OSX, Eclipse, and Google App Engine.
- Geeking out: issues with Linode
- Geeking out: making a decision about PHP and WordPress
Legos somehow I got the itch to buy some of their Star Wars kits. I used to love building things with Legos as a kid - specifically spaceships. I would build them and then throw them in the air (I loved the wind rushing past their "hulls") and then when they hit the ground I'd not touch anything, observing carefully what had happened. Depending on my mood I would either do minimal repair, or I'd try to make it even stronger. A fun game. But these newfangled kits are nothing like that: the X-Wing was ~350 pieces and there were maybe 40 "normal" Legos in there. Maybe. The other 310 were customized, you'll-never-figure-out-how-to-use-this-in-anything-else sorts of pieces. The AT-AT was 1200 pieces, and the ratio was about the same (although, in fairness the AT AT was a motorized beast that required some custom bricks.) It's hard for me not to draw a parallel between this sorry state of affairs and computer science: it's become cliche to treat "Legos" as some sort of monicker for standardized interchangability. What irony that Legos are no longer standard or interchangable. And this is probably for two very simple reasons: the models look better with more custom bricks, and you're more likely to buy more Legos if you aren't tempted to "roll your own". As I was building the models I kept thinking "why did they make that brick? They could have used these other two together..." which is something I also think about when building software. Weird.
Plants Vs Zombies is the clear "runner up" in the "great casual game wars of 2010" (the winner being Angry Birds, of course). PvZ is a really good take on the tower game genre. I think I saw it for the first time on a demo PC at Costco. Anyway, apart from needing some more balancing (Gloom Shroom is WAY overpowered) it's a great game. It's also an interesting exploration of the interdependency of a team - each individual contributes different things during the game (and different things during different phases of the game), and it would be foolish for one plant to claim that they are better than any other plant. For sure, there are some plants which are more valuable, in that they would be more expensive to replace. It's hard not to draw the parallels to building a business, a team, and seeing that team change and grow.
Java is still my mainstay (and increasingly Google App Engine) and ironically all this work with Clojure has made me, if anything, even more fond of the old beater language/environment/coffee that is Java. To that end I actually spruced up my environment (OSX and Eclipse) a bit. For Eclipse mainly consisted of updating the OSX developer library (for javadocs and JDK source), adding TLD files to my GAE projects (without them the JSP editor complains when you use JSTL). While I was at it I reinstalled macports (which had somehow got corrupt) and spruced up my .bash_profile to fix my prompt and ls defaults. I also installed ForkLift - which is a nice Finder (and CyberDuck) replacement, and a Clojure plugin for Eclipse (which is shockingly stable). This all fits in nicely with my newfangled "Workspace" philosophy, which I may write about later.
Linode has annoyed me. They deleted my images when the CC I had on file failed. This upsets me, but not as much as you'd expect: I didn't have anything too heavy running on the host. I'm not even sure if I want a VPS anymore. On one hand, it's nice to have a persistent host with a stable IP address completely under your control somewhere in the universe. There's just so many things you can do with it (not the least of which is to install the Dropbox daemon so that you have an offsite backup not controlled by Dropbox). But Linux sysadmin is not my forte or interest, those stable IP addresses are like honey to hackers. I'm not sure if I'm going to reup or if I'm just going to settle for the much-less-general-but-super-easy-to-administer Google App Engine. The bottom line is that, unless you're a control freak, you don't need your own host for even the most involved websites - so why bother?
Making a decision about PHP and WordPress. I've pretty much made a decision to avoid this technology stack. It's a justifiably popular solution for lightweight CMS that most websites need. This isn't to say that there's anything wrong with it, per se, it's just that there is only so much I want to learn. I actually really admire PHP's directness and the fact that it's purpose-built. And Wordpress has a pretty amazing bang-for-the-buck ratio, especially when you take into consideration available templates. I guess I just don't like munging HTML on the server anymore. If you want to munge HTML, do it on the client, with JavaScript, the way God intended. The server should really be just a dumb, RESTful data store used by the DOM to populate itself. (Interestingly it is theoretically possible to write a WP template that does things this way...tempting!)
Speaking of Google App Engine - what a great product. Dealing with some Linode drama I have come to realize the costs and benefits of running your own host, and what a great job the GAE team has done making deploying and managing your apps as easy as can be. They have lots of nice touches, like the ability to deploy in-active versions for testing, and full text search on logs - all through the web. This is all stuff that you can do with linux/apache/tomcat but it takes a lot of work to setup and maintain. Kudos to GAE.