Thursday, December 06, 2007

Photography

I have been steadily taking photos at a slow trickle. A few gigs every month really adds up over time. Right now I easily have 90+ GB of RAW files. However, using Aperture to manage this on my first-generation intel iMac has been... painful. Exporting photos takes forever is one major problem. I can't really afford a 45 minute photo export just for 200 photos. It becomes difficult to imagine exporting 4000 photos at that point.

So I (legally) obtained a copy of Lightroom just recently. I've heard it has better RAW algorithms, both in the quality and speed department. Combined with Adobe's more-open approach towards managing metadata, this might be the choice for me. Not to mention, Lightroom is significantly faster so far.

Aperture kind of plays along - it will allow you to export Master files with XMP sidecar files that contain metadata. That way I shouldn't lose the ratings and keywords. Only problem with that approach is I have to export masters that I've already relocated out of the Aperture library. The Lightbox XMP export plug-in has this annoying crashing ability.

One last thing about Lightroom - it has a distressingly simple view of copyright - you are either copyrighted or in the public domain. Alas I really want to tag some of my photos with CC licenses, and have that exported in to JPEG and picked up by Flickr. Does anyone know how to do this?

EDIT: I already figured out my own problem. The problem is the mini-metadata dropdown is not the only copyright related metadata. By selecting a large number of photos and clicking on 'Sync Metadata' a dialog with additional copyright fields appears. I was using the Attribution-Noncommercial-ShareAlike 3.0 license, so I entered:

IPTC Copyright checked off
Copyright: Creative Commons Attribution-Noncommercial-ShareAlike 3.0 Unported
Copyright Status: Copyrighted (thats the 3 optioned selection list)
Rights Usage Terms: http://creativecommons.org/licenses/by-nc-sa/3.0/
Copyright Info URL: http://creativecommons.org/licenses/by-nc-sa/3.0/

And when I hit synchronize Lightroom helpfully asked if I wanted to save these as a new preset. That way when I import new photos I can apply all these 4 metadata fields trivially.

PS: Thanks (to whomever you were) for the Bic retractable fountain pen. Alas it is available in Europe only, but, if someone wanted to make me a happy holiday person... I think you know what to do.

Saturday, October 27, 2007

Leopard

Yep, I upgraded. It's a nice visual upgrade, and has a bunch of new features to boot.

I was unable to at first get to my Linux-based afpd server. It turns out that by default Ubuntu doesn't ship netatalk with OpenSSL linked in. Tiger would warn you, but Leopard just chokes. So to enable it, follow these instructions.

Monday, October 22, 2007

Unlocking the iPhone

Due to a ... ahem... billing disagreement with AT&T, I have need to unlock my iPhone.

Simply put, I was charged for data roaming to the tune of $800. AT&T was unwilling to help me out here, I was unwilling to stay as a customer. Strangely enough they were uninterested in keeping me as a customer when I informed them I wanted to leave.

So I signed up with T-Mobile. Number portability is really really great. Here are my plan details:

  • $40 for 300 minutes, unlimited to top 5 callers (statically chosen by me), unlimited nights/weekends after 9pm.
  • $5 for 400 text messages. International texts (sending and receiving) are on-plan (included in the 400). It's $10 for 1000, and $15 for unlimited.
  • $6 for T-Zones, which gives me unlimited "web data".


Bottom line is my bill pre-taxes will be $51.

The iPhone plan:
  • $60 for 900 minutes, unlimited mobile 2 mobile (on AT&T), unlimited evenings/weekends, and rollover.
  • $20 for unlimited data
  • International texts are .20-.25 each. Texts sent while in Canada - .10.
  • $10 for 1000 texts.


Bottom line is $90 pre-taxes.

Another major difference is the roaming charges. T-Mobile charges me .49/minute in Canada, and another .20 if I'm calling "Long Distance" - eg: calling the US from Canada. Calling locally and incoming is .49. AT&T was charging me (on paper) .79 then an additional .12 cents of "tax" for a grand total of .91/minute.

I estimate it will take me about 3.5 months to earn back my $175 early termination fee (sadly T-Mobile's is $200).

Basically the bottom line is that T-Mobile is much much cheaper than AT&T. T-Mobile's customer service is better, and here in Seattle they have better coverage.

Ok, so how did I do it? Basically these steps:



Now after all of that, you are free and nearly everything works. Things still broken for me: Visual Voicemail (of course) - the voicemail tab in the Phone app calls the T-Mobile Voicemail line. Youtube - I hear there are hack to make this work, but I don't really use Youtube. I'll fix it one day.

Interestingly enough, EDGE data on T-Mobile seems a bit faster - I think because of the proxy.

However, sending EDGE data is slower right now for me. On AT&T it normally takes about 10 seconds to send a plain email, and about 1 minute to send a picture email. But on T-Mobile (at home and at work) it takes 30 seconds and 3-5 minutes for the same activities respectively. An email to T-Mobile indicated that they had nothing on their side.

One experiment is to try the total internet package (for $19.99/month) to see if that's a difference, but I'd rather not. Maybe I'll borrow someone's SIM that has total internet.

And that's a wrap. 4 months after waiting in line for the iPhone, paying the higher $600 price, getting my $100 rebate, dealing with AT&T's excessive roaming charges, I am back to T-Mobile like I was before.

I still like the iPhone, and now that Gmail does IMAP it's even better (previously Gmail POP was a very weak experience). I'm just glad I can pay much much much less.

Not to mention sticking it to AT&T for refusing to forgive my stupid high data roaming rates. They really suck, not to mention double suck for being unwilling to retain my business.

Sunday, September 16, 2007

Cocoa, Custom View scrolling

I spent a few hours banging against custom views and scrolling thereof, and learned a number of useful things.

The scenario is a custom view wrapped in a scroll view. Instead of doing the drawing in drawRect: what I'll do instead is manage the layout of my sub-views, specifically a number of NSImageViews. That way I get the drawing for free, all drawRect: needs to do is draw the background (trivial). When my view changes size I can automatically re-layout the images, arranging them into columns and rows.

Handling the resize is a bit tricky. The problem is the frame size of this custom view is semi-independent of the enclosing clip view. When the custom view frame size is larger than the clip view port, you get scrollbars (desired behaviour). When the scroll view grows, you want your custom view to fill up the entire area so you don't end up with weird background drawing.

I played with a bunch of the auto-resizing toggles, but I wasn't able to get things working - for some reason my frame always ended up too tall. So instead, the solution is to ask the enclosing scroll view what the size of their content area is, and size yourself to that. The logic is "make myself the same width, but if I need to be higher to accommodate my images, then be higher, otherwise be the same height as well".

So the first thing is you need to post frame change notifications and register to get view frame notifications... do something like this in initWithFrame: (or maybe awakeFromNib? Apple's docs indicate that initFromFrame: doesn't get called for objects from nibs, but mine got initWithFrame:)

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];
[nc addObserver:self
selector: @selector( frameSizeChanged: )
name: NSViewFrameDidChangeNotification
object: nil];


The problem is you get notifications for nearly every change in the system, but you really only care about if your enclosing scroll view and it's clip view changed, so what you do is:

- (void)frameSizeChanged:(NSNotification*) note
{
id obj = [note object];
if (obj == [self enclosingScrollView] ||
obj == [[self enclosingScrollView] contentView]) {
// change the layout of my subviews
// (accessible via [self subviews])
}
}


The key here is comparing the object the notification is for against your enclosing scroll view, AND it's clip view. If you don't have the second comparison your frame won't handle the start-up quite right.

Now, in your resize handler, you need to figure out the height and width you should set yourself too. Since my goal is to layout images, the minimum you can be is a single column. That way you get horizontal scrollbars when you get too small. Also since I want to display all the images, the view frame height has to be at least as tall as all the images and padding. But, if that isn't quite tall enough, I need to be the same height as my enclosing scrollview or else you get the scrollview background instead of your own (my background is 0.5 white, so problem).

So you need to call:

NSSize newSize = [[self enclosingScrollView] contentSize];

and the later on call [self setFrameSize: newSize]; to set your new height in response to the resizing.

Since I re-layout each re-size the behaviour is I end up with flowing columns of pictures responding to a window resize.

One of the problems I had was the internal bounds origin was at the bottom left corner. The upper right corner would have been more handy, but I adjusted my math accordingly.

Then I had a problem with scroll behaviour - for some reason when the app started it would start scrolled to the bottom. When I stretched the window big then small again, the scroll bar was always at the bottom.

Google solved my problem for me - it turns out that the scrollbar always starts out displaying the origin. To solve both problems just do:

- (BOOL) isFlipped
{
return YES;
}


and both problems are solved. Now image 0 at row,col 0,0 has a origin of (padding,padding).

The basic problem with this approach is the custom view must be the full size of the content area of your scroll-view. If you needed to coexist with other elements inside your scroll view, you would have to adjust accordingly. For example, you might have to not be as wide for a vertical strip, or you might have to adjust your origin of your frame point. Some of the auto-resizing might help here, but I haven't experimented with it.

The view documentation is not the most complete, and there are lots of tips and tricks. There are several approaches too, currently I am using sub-NSImageView instances, but other code I've seen does the drawing straight from NSImage instances instead. That code is more complex, but it may be more efficient since you don't need to instantiate view objects (which can kill performance if there are too many). However it is harder, since NSImageView can draw cool frames for you.

Tuesday, September 11, 2007

Lunch 2.0 At Adobe

Later this month on Friday September the 21st, Adobe is hosting Seattle Lunch 2.0. You may RSVP online.

I'll see you there!

Monday, September 03, 2007

A year later Lego still sucks

What a difference a year doesn't make. I complained last year that Lego Mindstorms software didn't work properly on Intel Macs. Specifically bluetooth doesn't work, due to the non-universal binary. This was pretty sad and pathetic of Lego, seeing how the Mindstorms was released in early 2006, and we knew since early 2005 that Intel Macs were the new hotness. Alas, they weren't paying attention, and anyone on an Intel Mac has a fairly crippled NXT platform. I can tell you, that bluetooth program upload is the super-hotness.

So, a year later, and Lego finally decided to release a point release which also includes Universal binary support. But, wait for it, you have to pay for the privileged of using all the features of your very expensive robotics platform. Furthermore it's very difficult to find even this fact out. It took me about 10 minutes to think to look in the "Need some help" link and be rewarded with the unsavory news.

Lego gets some pretty seriously disses from me for this continuing situation. To be so oblivious to the new millennium and willfully ignorant of a large and growing segment of would be users is not impressive.

Tuesday, August 28, 2007

SFO Follow up

So Alaska was 2 hours late all told. Apparently we were lucky since the president was in Seattle from 1-5pm, screwing up rush hour. Am I the only one who think it's unacceptable to screw up major freeways just for a single person?

I complained on SFO's website, and I in fact got an answer today - totally unexpected! They noted that SFO has a different arrangement, making it difficult to pay for improvements, thus they contracted t-mobile to install and run the wifi network. Interestingly enough, t-mobile paid for all the capital costs. Apparently SFO is working so that airlines can provide wireless to customers if they so want.

And lastly, the vendors are only allowed to charge 10% more than local street cost. The customer service folks at SFO are sending my complaint to their concessions office, since I'm pretty sure that $2.69 for a 500 ml bottle of soda is more than 10% above street price.

So, SFO get a bump up for responding to complaints.

Monday, August 27, 2007

You know, SFO is not really as cool of an airport as one might think, being all close to a tech capitol and all that. Here are the sins:

- entirely too big- airtrain kinda sucks.
- entirely too small- once you are behind security jail there isn't much at all. How about choices?
- pay wifi is so last century. While waiting for our inevitablely late flight, why not comp us Internet?
- also I just hate airlines. Crappy seats, late flights, customer service that isn't subservient enough.

I'm only cranky because I left my book in my checked bag. Also normally good Alaska is late today.

Tuesday, July 24, 2007

Livejournal is a second class citizen

By now you've heard of the SF power-outage that killed 365 main's data-center - despite endless press from them about how they've never lost power.

I'm sure there will be endless recriminations of how 365 main failed to test the power backup.

But the more interesting thing to me is how Sixapart is handling the crisis. First off, sixapart owns Livejournal and Typepad. Both services are completely down because they are single homed in the same datacenter.

Sixapart's recovery strategy seems to be: Recover Typepad, then (eventually) recover Livejournal. This is evidenced by their status page:

sixapart status

Given that Livejournal is a second class citizen to Sixapart compared to Typepad, how can people justify giving Sixapart money? Furthermore, clearly Sixapart doesn't have the tech staff to bring both services up at once.

Of course, maybe they just didn't update their status page, in which case, this outlines the danger of not updating your status page - someone you don't know on the internet will assume the worst.

Thursday, July 12, 2007

Canadian Copyright

Some of you may be aware of the suggestions that my home land of Canada is a haven for copyright criminals. None of the headlines recently are true, they are merely rhetoric designed to turn Canada in to the copyright disaster that the US is. Has the DMCA improved American lives? The goal of governmental policy is to improve citizen's lives via both public methods and encouragement of private approaches (ie: industry).

In the mean time, my favourite Canadian hero Michael Geist has posted a new video:

Tuesday, July 10, 2007

Target changing rooms.


Target changing rooms., originally uploaded by ryanobjc.

Target does not allow men into the women's changing rooms. While sitting here waiting a guy was called by his girlfriend for a consult. The clerk said guys are not allowed in. Nevermind that its just a hall and you can't see anything.

This happened to me once at Lucy's. I now refuse to go anymore. Stores need to respect the companions of women shoppers, some of which are men.

I really don't like "men are creepy" driven policies. Its insulting.

Wednesday, July 04, 2007

Seattle times front page Saturday june 30

Monday, July 02, 2007

Photo Blog Approach

Now that I have the iPhone it's time to work on photo blogging on the road. The problems with this are:

- The iPhone can't do file form upload
- The iPhone can't copy and paste

The only thing I can do is email photos and enter text in text-areas. Well it's enough - what I can do is email my photo to Flickr. Now the photo is online. Then, using the Flickr post-to-blog feature I can type text in, and Flickr will auto-copy the text and picture link to my blog. Presto, blog post, without copy and pasting the large snippets of text.

I have a Zooomr account, but I can't do this with it. I'd need to form upload and copy and paste the snippet - things I can't do.

UPDATE: Turns out I can get Flickr to post a photo and blog entry. So bonus, even faster photo posting on the go. I tested the EDGE photo upload speed (they are big - 500k) and it takes about 25 seconds to upload. Not too bad! Especially if it's at 75 mph!

Work bathroom - just like home


Work bathroom - just like home, originally uploaded by ryanobjc.

A test shot with my iPhone. This is the bathroom at work - looks like home.

Saturday, June 30, 2007

How to make Weather art


Weather interface: It's a small feature, but the UI looks stunning. It has a similar look to the dashboard widget.
_MG_0451


To see other cities you drag left and right. Looks so cool:

_MG_0457
_MG_0456
_MG_0454
_MG_0455

I love how Apple turns little miniatures apps that most people would ignore in to works of art. Just this subtle interaction is enough to inspire an entire blog post and photo set for it!

Seattle Times


I am quoted in the Seattle Times newspaper! The store which ran front page about the iPhone flows to page A10 where I am quoted. The entire article is online and here is my section:


Ryan Rawson, 30, of Seattle, said he wanted the iPhone because "most phones suck. Hopefully this will be a do-over for the cellphone industry."

He liked that the iPhone's software is upgradeable. "You are buying the phone you will have forever," he said.

Photo in the PI Microsoft blog

Short and sweet: here is a photo of me in the Seattle PI's Microsoft Blog.

Tips, tricks, photos and bugs


Now that more than 24 hours has passed, a sense of overwhelming awesomeness has settled on me and my iPhone. This is one cool device. I can't really say enough good things about it. I completed the AT&T online account registration on EDGE while riding in a car at 65 mph on I90. It didn't take too long either, the speed was reasonable. While you can always have more speed, it certainly is faster than the no-web surfing my Moto PEBL had.



Some tips - the keyboard doesn't register a press until you lift your finger. If you hit the wrong key and notice quickly, instead of lifting and hitting backspace, just slide your finger around until you are on the right key, then lift. Mistake corrected!

I also had a problem where it became difficult to unlock my phone. I'd slide my finger and nothing would happen and it would take me a few attempts. Well the solution is to turn off the phone to restart. To do this, hold the top button for about 5 seconds until a new screen pops up. Now, the hard part, you have to slide the red thingy across - given the difficulty of sliding things already established this might take a bit! Once you get it, turn it on and problem solved.

Safari doesn't seem to allow you to use textbox input yet. This is unfortunate because it means you can't blog directly from within Safari. Obviously you can use mail-to-blog interfaces, but I'm not sure if blogger has one. This is a clear bug that I hope will be fixed soon. I might submit a bug report to Apple to encourage them.

The last problem is you can't attach photos to a mail already in progress. There is no good reason for this, just a UI omission. You can email photos to a new mail, but not really the same thing. The file form upload element is also disabled, but they should enable it and allow you to upload photos on the iPhone. Another bug report!


Enough complaints, they really are minor compared to the awesomeness that is the iPhone. Here are some of my joys:

Mapping directions on I90 going 75 mph. The speed at which the data was spooled amazed me! The directions are great and the UI of Google Maps rule.

Getting a text message while doing something else: A pop up with the message summary asks if you want to read it or ignore. If you ignore the SMS app on the home screen will still have a little red number on the upper right corner letting you know how many unread messages you have. If the phone is locked it will display the message summary.

If the phone is charging and it's locked, when you hit a button you see:
_MG_0459

The "slide to unlock" text has this rolling highlight in the direction of the drag to unlock. Combined with the little arrow there are three indications of what to do. Little details like that I just love!



There is much much more of course. Rounding off this post is a picture from the iPhone:

IMG_0012

Friday, June 29, 2007

iPhone owner

I am now a proud iPhone owner. Once we got in the store, it was pretty slick and I walked out by 6:15 with an iPhone in tow. The sign up process in iTunes was quick, slick and problem-free. Now the syncing... I forget how long this can take. While it syncs, the screen looks a little like:
_MG_0264

Looking good! The iPhone comes with accessories you normally don't get with the iPod anymore - specifically the dock and wall power brick. All the basics you need to rock and roll. There were plenty of iPhone-compatible bluetooth headsets there, but I didn't feel the need.

A second in King 5


I am also in a KING 5 local news segment. See if you can spot me!

Another quote


I got quoted again on the Seattle Times techtracks blog.


Ryan Rawson, 30, of Seattle, said he got there today at 6 a.m. to get a iPhone because "most phones suck." He currently owns a Motorola Pebl, but complains that it's not great at viewing Web sites.

"You can visit the Web, but you don't really get to see the pages very well," he said.

He said another cool feature is that Apple will be able to upgrade the phone's software when it connects to iTunes.

"You are buying the phone you will have forever," he said.

More photos


What to do about power?
_MG_0044

This is the delicious library folks, ALL of them:
_MG_0048

News:
_MG_0045

More News:
_MG_0034 (1)



Waiting in line


My co-waiters and I have been playing WOW on the flaky wireless network here. Just now V was starting to play WOW and I was telling him for the 5000th time about a song called WOW by a local band called the FSR. And sure enough, someone in the band happened to walk by just at that moment and said "hey, I'm in that band!". Although I think he was dismayed by our in-line-WOW playing and the excessive geekyness.



EDIT: The guy was "PC Speaker". I take back my previous dismayed, he is pretty cool and has said hi a few more times. Also he previously invited us to tomorrow's show at the chop suey.

I made the PI


To quote the PI:


Ryan Rawson, 30, a Google software engineer was there on the first day of sales for a simple reason: "Because it's awesome and I can."

Cool!

iPhone lineup photos

It is nearly 11am and there is about 100 people in the iPhone line up at the Apple Store in UVillage Seattle.



As promised, photos ...




Early morning line up:
_MG_0008 (1)

Reshuffling in the morning:
_MG_0012 (1)

Early morning display:
_MG_0014

The news was out:
_MG_0040

Being interviewed...:
_MG_0037

Longggg line:
_MG_0017

In line at the Apple Store

My partners in iPhone crime texted me at about 5:45am informing me there was 38 people in line. I got up and got ready to leave, by 6:05 am there was over 50 people in line. When I arrived not much had changed yet luckily and I secured my spot at the 38 position.



The local news did a live segment out here, and asked us to keep our mac books open for the pan shot. A PI reporter asked us a bunch of questions, so check the paper tomorrow. Then an hour later a AP reporter did the same, so check the AP news later.



A few pictures forthcoming....

Tuesday, June 26, 2007

Busy


I've been busy - busy with work. Busy with weekend life jazz. Also I haven't had any inspiration of what to write. Except I would note that Steve Yegge's recent blog entry about marshmallows is probably not what you think it's about. Actually I'm not sure it's about anything or even the thing I thought it might be, or anything else. He sure is one opaque writer sometimes. My guess is the lack of sleep.



But never mind that, it is time to publicly declare my candidacy for the office of iPhone owner. My colleague and I shall travel to a store on Friday and attempt to obtain the device. I'm really hoping for a positive outcome because that thing looks so damn cool.



I realized last week that in fact, Star Trek is here. The multi-touch display with the self-reconfiguring layout is reminiscent of Star Trek:TNG. Every tech company is gearing up to provide the hardware and software for multi-touch systems and devices. Of course, knowing most techies they'll blow it on the UI, but for now the singular device that will show off all other devices will be the iPhone. They say imitation is the most sincere form of flattery, and we'll see what Apple's legal department has to say about that.



I sent a text message to Greg Packer who is first in line at the NYC Apple Fifth Store for the iPhone at about 1am tonight. Nevermind that it's 4am, how can you sleep on the street there? He replied a little while later to my inquiry why does he need donations if he can afford an iPhone with the succinct "for food". He didn't really answer my reply which involved Maslow references.

Monday, May 28, 2007

Concurrent Programming

This is my reply to a question posted to slashdot: "Is Parallel Programming Just Too Hard?"



The problem with parallel programming is we don't have the right set of primitives. Right now the primitives are threads, mutexes, semaphores, shared memory and queues. This is the machine language of concurrency - it's too primitive to effective write lots of code by anyone who isn't a genius.



What we need is more advanced primitives. Here are my 2 or 3 top likely suspects:


  • Concurrent Sequential Programs - CSP. This is the programming model behind Erlang - one of the most successful concurrent programming languages available. Writing large, concurrent, robust apps is as simple as 'hello world' in Erlang. There is a whole new way of thinking that is pretty much mind bending. However, it is that new methodology that is key to the concurrency and robustness of the end applications. Be warned, it's functional!

  • Highly optimizing functional languages (HOFL) - These are in the proto-phase, and there isn't much available, but I think this will be the key to extremely high performance parallel apps. Erlang is nice, but not high performance computing, but HOFLs won't be as safe as Erlang. You get one or the other. The basic concept is most computation in high performance systems is bound up in various loops. A loop is a 'noop' from a semantic point of view. To get efficient highly parallel systems Cray uses loop annotations and special compilers to get more information about loops. In a functional language (such as Haskell) you would use map/fold functions or list comprehensions. Both of which convey more semantic meaning to the compiler. The compiler can auto-parallelize a functional-map where each individual map-computation is not dependent on any other.

  • Map-reduce - the paper is elegant and really cool. It seems like this is a half way model between C++ and HOFLs that might tide people over.


In the end, the problem is the abstractions. People will consider threads and mutexes as dangerous and unnecessary as we consider manual memory allocation today.

Friday, May 18, 2007

So you are a screen user


So you are a screen user on linux but your workstation is a Mac. You probably run into the backspace problem constantly. Specifically you ssh to your Linux box, the backspace works, but once you attach to screen now you get all sorts of problems. One solution is to

stty erase ^?
but backspace doesn't work for screen commands.



The real problem is there is a mismatch between OS X terminal and the TERM string it sets for itself. There are two solutions. Solution #1 is to do this when you login:
export TERM=xterm
The other solution is to do these commands on your Linux box:


cd ~
mkdir -p .terminfo/x
cd .terminfo/x
wget http://invasioncity.com/~ryan/xterm-color


The problem is the xterm-color by default on Linux mismatches backspace codes with what Terminal does on OS X. You might think that using the "delete key sends backspace" option in Terminal window settings might do the trick, but sadly no.

Thursday, May 10, 2007

Guitar Hero


I've owned Guitar Hero and Guitar Hero 2 since last November. At first when I got the game, I was at a "medium" level. I've been practicing at the "hard" level recently. I realized that I have broken through to a new plateau. I realized this when I noticed that I had played nearly every song in hard mode in both games.



I have figured out the elements of this skill. There seems to be two extra abilities. The first is being able to move my fingers really fast. When those notes are zipping down so quickly you really need to be able to reposition fast. Secondly the ability to handle all 5 fret buttons with 4 fingers without looking.



For example if you're doing a reverse crescendo, you hit the orange fret with the pinky, then blue fret with the ring, yellow fret with the middle, and the red fret with the last index finger. Now you're out of fingers, so slide the index finger to the green fret and you're done. This siding action is the essential ingredient to handling 5 fret buttons with 4 fingers.



I'm not exactly sure how I developed these skills, other than only playing hard songs. I guess practice really does make perfect (almost, soon).



I wouldn't say that playing Guitar Hero is similar to playing the actual guitar - I don't play the actual guitar, but I had some experiences recently that leads me to believe there is some transferable skills. Here in Seattle we have the Experience Music Project, which has a cool permanent exhibit called the Sound Lab. The lab has a bunch of instruments in a computer guided tutorial setup. A few years ago I did the guitar tutorial, I remember it being cool but I didn't get much out of it then. I recently went back and tried it again, and the intro tutorial seemed distinctly easier than last time.



I figure this is because I had practice at maintaining a rhythm with my right hand and moving my left hand quickly. While I don't actually know chords or any guitar specific real skills, I definitely think the base skill helps somewhat. Of course without actually learning the guitar, I guess I'll never know.

Wednesday, May 02, 2007

Fountain pen aesthetic


I enjoy the idea of a fountain pen aesthetic. To go along with the mechanical watch obsession, is a minor fountain pen obsession. To date I own two fountain pens, my original, which is a Waterman steel nib. But my crown jewel is my Namiki retractable fountain pen - as far as I know the only retractable fountain pen model in existence. I love my Namiki because it has an extra-extra fine nib which is generally hard to find in fountain pens. Additionally it was relatively inexpensive yet still has a gold nib. The difference between the gold and steel is difficult to understate. Combined with my indelible ink, I have a pen that is acceptable for all writing, including checks and mail.



I think pens, especially fountain pens, represent the ultimate single-object characterization of what it means to be human. Humans excel at abstract thought, fine motor control, aesthetics and communication. All of these manifest themselves in the fountain pen. I threw aesthetics in there to justify a fountain pen over a regular pen, mostly because I really dislike the idea of a disposable culture. There is a certain craftsmanship and history to fountain pens, ideas that generally don't have an equal elsewhere in the animal world.



So often newer computer users forget about the power of the pen and paper. The free-form unconstrained and rapid creation really rivals all other mediums for idea creation. If I wanted to insert a diagram of a pen, it would be fairly difficult in this blog. However if I was writing it on paper, I could do nearly anything I wanted, drawing skills aside. The closest computer equivalent would be the tablet PC, but I can't really deal with a PC right now.



Besides which, paper makes an excellent archival medium. In 100 years will people be pouring over the electronic correspondence of the greats of our time? Given how much data people carry on their personal computers, it might be, but it doesn't have quite the same ring to it as reading the personal correspondence of Albert Einstein. Or reading the notebooks of Da Vinci. So my personal stand is to attempt to create paper-based notebooks of ideas and thoughts. So far I'm not really successful, mostly because my notebook hides in my bag, but perhaps I just need another one for my desk as well?

Tuesday, May 01, 2007


Quoting The Seattle Stranger:



"The atelier system - of extended apprenticeships in the studios of master artists - is an old European tradition, spanning back to the Renaissance and up[.]"




This is in reference to an art school in Seattle.



The MIT AI Lab was a computer science form of this structure. With the demise of such places, including the NCSA Supercomputing Center, how do we train master programmers? It seems that we are currently relying on luck.

Friday, April 27, 2007

Joost... A review?


I've had Joost for over a month now. I wrote a highly critical review I never published. It was just not polished enough. Now that more time has gone by, I can't really bring myself to polish it. Joost just doesn't really inspire me to even criticize it. At first the content was bad, then the content got mildly better. Now it's the weirdly confusing UI which annoys me. Besides those flaws, I think the bigger problem is the whole experience didn't leave me so excited I was willing to look beyond them.



As Kathy says on Creating Passionate Users, if your product doesn't either make users love it or hate it, you are in the zone of mediocrity. And I think Joost right now is in that zone. Even the content expansion was not very satisfying - good shows, but half of the ones I tried to click on were "unavailable". Despite all these problems, I still don't hate Joost enough to do more than a 2 paragraph blog entry. I just don't care.

Friday, April 20, 2007

Watch


I have a thing for devices, and it is devices of all kinds. I just heard from the watch store that my watch has arrived - after 5 weeks of waiting. The wait is because the watch has a few minor custom features. The first is an artificial sapphire crystal front - sapphire is 9 on the hardness scale, thus few things scratch it. The second is a clear case back (just regular hardened glass) allowing the viewing of the watch's movement. Normally this is just a collection of solid state devices, but this is a mechanical watch, so you get to see all the pieces moving.



Redux: Apparently it was a false alarm. The guy there didn't realize that I had a special order, and the watch waiting for me was the regular watch, not the one with my changes. Alas, I must wait some more.

Saturday, April 14, 2007

List Processing


Recently I was assigned/volunteered for this task at work. Fairly inglorious, basically it ends up being writing a whole bunch of XML configuration. Nothing more exciting than pounding out endless tags. My editor of choice is emacs, mostly because it runs really fast, and I don't like the 'escape' command/insert metaphor of VI and clones. I should repeat that last bit: I like emacs because it is FAST. That's right, the editor who's acronym expansion used to be "Eight Megabytes And Constantly Swapping" is now one of the fastest editors. If you don't think so, try loading up a 80k line XML file in your favorite IDE.



So emacs XML mode does allow for some validation and other things, but normally it does not insert closing tags and other 'niceties' that editors such as TextMate does. So I found myself repeatedly hammering out the same XML blocks, and I thought, "I know emacs has a template system, I should use that." And indeed it does, in fact emacs as 2 separate but complementary systems. The first is 'skeletons' which provide a method of defining a mini-template. It has a pile of features including the ability to automatically put your point in an 'interesting' spot of the inserted text. So it can position your cursor at the middle of 2 tags or in an attribute or wherever. You can then bind these skeletons to key commands.



Binding to key commands is handy, but combined with the abbrevation mode you end up with a powerhouse editing shortcut. Simply put, abbreviations are small letter sequences that get expanded. Simple text substitution is trivial, turn teh to the. Or, you can call an emacs-lisp function, such as a skeleton function you just previously defined. Meaning with a few keystrokes and no special control-bindings you can pound out code when the base format (XML is so verbose!) does not allow shortcut definitions.



Of course each little skeleton (or what one might call "macros" but we don't in lisp because there are already lisp macros which are way different) is pretty custom. But they are so trivial and easy to write, even for small hour or two projects it makes sense to define them. Same with abbreviations. This has easily saved me two hours already, combined with the 45 minutes it took to learn, is about 1 hour and 15 minutes saved.



I should also mention, I am in no ways a lisp expert. Copy and pasting emacs lisp functions into ~/.emacs and doing a little bit of modifying is the extent of my expertise. It took me 10 minutes to figure out how to use the interactive special form properly. I usually use Google to find solutions to my emacs-lisp problems. But defining these skeleton/abbrevs was so stupidly trivial practically everyone should learn it.



Here is a brief example, lets say you are typing the same piece of HTML over and over, it looks like this:


<div class="boxy">
<div class="custom">
text
</div>
</div>


Lets say the div classes are always the same, but the text inside is what is unique. So you define a skeleton:


(define-skeleton
boxy-custom-div
"My Custom/Boxy div nested skeleton"
> "<div class=\"boxy\">" \n
> "<div class=\"custom\">" \n
> _ \n
-2 "</div>" \n
-2 "</div>" \n )


Basically anything in a quoted string is echoed verbatim. Escape double quotes with a \ as usual. The proceeding > means 'intend according to the mode'. The \n inserts a newline as expected. The -2 is to properly un-indent those lines by 2 spaces. The bare _ means that is an area of interest. What it means is when the skeleton is applied, the first 'area of interest' is where the cursor will be left afterwards. You can define multiple interesting areas and do more advanced things by having skeletons wrap around existing text. However that does not play well with the abbrev trick I will say next.
Small note: I used emacs to type all those damn > and < entities.



The magic comes in with abbrev mode. First off enable abbrev mode with M-x abbrev-mode in your buffer. Then you need to define an abbreviation, but you can't do it with the command sequence C-x a l which the manual tells you. Instead you have to execute the following lisp code:


(define-abbrev
html-mode-abbrev-table
"cdiv" "" 'boxy-custom-div)


The first string "cdiv" is the trigger text. The second string is what to substitute it with (nothing) and the last argument is what function to call after the text was inserted. The net result is with 5 keys "cdiv" then space/enter you get to expand out all that HTML. Clearly the more repetitive text you have the bigger of a win this is. Unfortunately skeletons that are triggered via abbrev-mode do not properly work to wrap existing text. That mode of skeleton is very powerful, it lets you wrap multiple (up to 16) chunks of text in a row at arbitrary boundaries in to different points of a skeleton in order. The slight annoyance is you have to mark with C-space each point of interest. I personally find that awkward.



Of course a neater approach would be to ASK in the mini buffer what you'd like to insert in. And you can do this in skeletons. But there is only so far you can go with that, since you have to ask the fields in order and you can't post-insert text. Lets say you are defining database schemas, you might as well only enter the table name and have your skeleton guess the primary key name. This is starting to get a little complex, and this is where my story changes slightly.



I ran in to this particular problem, wanting to do non-trivial calculation and manipulation in a skeleton. The docs say "maybe you should write an emacs-lisp function instead", which is a fabulous idea. I don't really know enough about lisp or emacs lisp so it seems like a good time to learn. Luckily I work with the semi-famous Steve Yegge. As you may know or have guess, Steve is a lisp... well fan. And I raised this to him, that skeletons and abbrev-mode ruled and I needed to learn more emacs-lisp. To which he said "read the book on my desk". Technically it's a print-out in a binder of a book, and the book is "On Lisp" which I am now reading.



The interesting thing about Lisp is it was invented in the early days of computer science (ie: 70s and early 80s) when people didn't "know" how to program. Thus I believe people asked questions like "what does it mean to program" and other seemingly useless philosophical type questions. The result of which is Lisp, a meta-programming language that facilitates writing and rewriting itself. Of course now, being smart programmers we invent useful languages like C++ and Java and C# which are safe and don't let you change too much about the language itself. And we are better off for it, right?

Friday, March 30, 2007

Kathy Sierra


Once upon a time I met Kathy Sierra at a weird mini-conference at my former employer. I really enjoyed her talk, and I have followed her blog since then. I am amazed at 2 traits of her blog (ones I wish I had), first is great graphic design. Stock photos and tablet drawings of pie charts never looked so good! Secondly, every post is part of a excellent narrative and is argued well. Representing no doubt years of research.



Of course by now you have probably heard of the whole death threat bit. I really didn't know what to think when I saw it, but I certainly did not want to write a blog post using the world 'but'.



I don't think anyone can really know what Kathy is feeling. Having met her, and knowing she is on the straight and level, I am inclined to believe her. I do think that contributions indicating that people should "toughen up" really don't help much. Especially when coming from a position of privileged and protection.



Those are easy to dismiss - however what is harder to dismiss is the use of the word 'but'. I really don't like this word, and to illustrate why, I will do an example:

"I support your cause, but I am concerned that ..."

Now lets replace the but with it's true meaning:
"I support your cause, but ignore everything before but, since what follows are my true feelings, I am concerned that...



This is my own cognitive search-and-replace, your mileage may vary, results aren't guaranteed, etc, etc.

Greenspan


For no specific reason I was reminded to dig up the h4x0r economist "comics". Any comic where Greenspan speaks leet is pretty much gold in my books.

Wednesday, March 28, 2007

Two Cool videos


I want the following UI interaction devices on my desk and in my bag. The first is a new desktop UI metaphor, based on physics. The second is a multi-touch display, sort of like Minority Report and Star Trek.





YouTube Link





Google Video Link

Tuesday, March 27, 2007

Lunch Hosting In Kirkland


Once nice thing about working here, is it is very easy to convince people to come visit you for lunch. The famous Google lunch, free, and filled with smart people who love to chat. Who could want more? Today I had my ex-coworker Alexy come by. He had some photography tidbits, a cool Leica point and shoot, and plenty of "financial engineering" to talk about. Cool guy, he is currently ramping up to a PhD - good luck there.



Also he owns women.ru of all sites. Crazy guy.

Friday, March 09, 2007

Joost


Thanks to the sweet hook up, I have a Joost account now.



Review forthcoming.

Thursday, March 01, 2007

Design


On the subject of design, many people have many things to say about it. Of course, with such a highly debated topic, how can one think they are possibly smart or qualified enough to say more on this subject?



The hubris of developers pretty much demand that we should talk about crap we don't know enough about. Of course there has been much writing about how a "child like approach" can bring a fresh look and new innovative ideas. To that end, I think I have noticed some things about great design that I think is truly new (to me). I'm not sure I can condense my list in to an actual list, so you get prose instead.



Great design generally comes out of inspired creativity. You rarely can force such creativity, which is why those ad companies are paid the big bucks. You rarely get this kind of creativity out of groups, and never out of committees. If you have a small design team that operates in a high bandwidth communication situation (ie: in person) and they "think like one" you may end up with amazing things. Design to completion though is fraught with compromises. Some compromises are ok, others are critical junctures where your design just got shot to hell. I don't know how to differentiate between these two types of compromises.



Every design has essential elements - any changes that detract from these elements end up taking away from the overall picture. Since the essential elements, or first principles, can be unknown to everyone, great designers also end up being great dictators. Since you can't effectively argue about first principles you don't know or can't communicate, you are left with force of personality (see: Steve Jobs).



There are however first principles of great design. Things all great designs have. All designs come from simple ideas that can end up having complex interactions. A great example would be Hypercard. Years later people still rely on hypercard stacks for various things. The iPod is a classic design study, so all I'll say about that is the central idea is "I should be able to hold all my music in one hand". The simple idea must not be a mission statement, it must reflect a functional piece of the design. A counter example would be "the user should be able to manipulate all manners of information" - this is more of a use case or end goal, rather than a design principle.



Since design principles reflect the working or physical aesthetic of the product (see: chair design), they should ideally reflect a subtle or even sublime balance between functionality and simplicity. Simple first principles that allow rich functionality is hard to achieve however. However, simplicity sometimes just ends up in overly simple system, where the basic rules fail to interact in interesting or meaningful ways. One possible test is the orthogonal test - each first principle should be completely free from the others. By combining multiple simple rules you end up with a rich multidimensional space in which aspects can be combined.



The basic bench-test for designs is often the gut or intuition test. This may return conflicting or shallow results depending on the strength of the intuition involved however. This article has suggestively been about general design, but my overall concern is primarily with software design. The goodness of a software design seems to be escaping many people, unlike, say, Architectural design. There is an increasing focus on this subject over the last 10 years, with many new players such as 43 folders. However, this is leading edge stuff, not being taught in school or being spread widely enough in the engineering space.



Perhaps one of the biggest obstacles is the intuitive portion of design. Although intuition is just short for combining many disrelated factors in a semi-unconscious manner, the left-brained focus of many software engineers can leaves them opposed to this approach. Perhaps some software engineers can benefit from right-brained activities? Drawing, musical instruments and other artistic endeavors can trigger right brained thinking. I am blessed (cursed) with an extremely right brained thinking style, which oddly enough gives me good grades in math, but bad grades in organization (you should see my apartment!).

Sunday, February 25, 2007

A Perspective on Computer Science


I have a saying that I used around the office: "Lets put the Science back in to Computer Science". I think it really annoyed everyone else after the 20th time. But it's true - many people cling to ideas and methods long after any objective observer would have called them a failure. A one size fits all modernist approach is common. See Sun's pimping of Java as THE programming language for all circumstances. It should be clear to anyone that Java does not have a place in high performance numerical computing. Clearly there is much wishful thinking going on here, rather than objective measure and redefinition of science.



Hence, the following snippet courtesy of "Futurist Programming Notes". It looks like a pretty old reflection, but it's useful as a backwards looking futuristic meditation.




Notes on computer science tradition


  • Unscientific - The acceptance of ideas depends more on personalities than on technical merits.
  • Anti-Intellectual - Alternative ideas are discouraged.
  • Stodgy - The primary concepts haven't changed in 20 years.
  • Dogmatic - Irrelevant criteria are used to evaluate peoples' work.
  • Arrogant - most NEW ideas are feared and rejected.
  • Insular - isolated from other disciplines.



Not all of these criticisms are fair and some of them are being worked on (especially the Insular bit), but some of the first ones definitely apply. Think about this list next time you are arguing the merits of highly dynamic languages (Python, Ruby, etc) versus "standard" languages such as Java. Are their arguments based on sound evidence, or is it merely dogma at work?



For continued reading, try Steve Yegge. He has quite a bit to say on the subject of dynamic vs static languages and developing systems for the future.

Thursday, February 22, 2007

Stackless Python vs Erlang


To follow up on my Erlang post, while I won't be attempting to use Erlang at work, I may well be interested in it outside employment venues. Right now I'm thinking about the difference between Stackless Python and Erlang. Looks like the primary advantage of Stackless is that well.. it's Python! The language is less "weird" to most people, it's fully OO (for those who forget how to design non-OO systems) and has a concurrency model. On the downside, it looks like the IPC semantics are "simpler" yet more complex than Erlang's. In Erlang the only thing you can really do is send a message, and receive a message, Stackless has a whole queue model that involves threads blocking and the like. I don't know enough yet, but I suspect the basis of Stackless's concurrency model is in those blocking queues - each block is a hint that it's time to switch tasks.



Anyone have any advice or thoughts re: Stackless? I know Erlang well (it's pretty simple, so not hard), but I'd like more information on the pros and cons of Stackless.

Friday, February 16, 2007

Erlang


I am fairly well known at Amazon for being a proponent of Erlang. However recently I have decided that Erlang and I need to take a break. People keep on asking me if I am planning on using Erlang in the future, or if I'm going to introduce it to my new team.



The answer is going to have to be a no unfortunately. While I like Erlang, the problem is one of string performance. The bottom line is in web applications and systems that deal with the web, strings are a first class concept and object. Not being able to efficiently deal with them is pretty much a dealbreaker. Most people seem to get around this limitation by translating most important strings into atoms, and then treating the rest of strings as binaries and doing pass-through. This approach is not suitable for all applications sadly.



I am interested in the following technologies and systems right now:


The interesting aspect of Stackless is they use blocking-queues as the IPC method of choice. I really like the async message passing style of Erlang, but I suspect most people have a problem thinking in and rationalizing about asynchronous messages.



I like D because it seeks to provide high level OO facilities with good performance. Performance really is everything - we should not be thinking otherwise. We need flexible highly performant systems, and it's possible that D can provide some of this. I need to investigate more however.

Thursday, February 15, 2007

The Globe and Mail is slipping


I used to hold the Globe and Mail as an example of excellent journalism. However, their recent front page article entitled "U.S. group wants Canada blacklisted over piracy" by a certain Barrie McKenna really leaves me wanting more. Like journalism for example. You know, not repeating statements as fact and leaving stones unturned. Michael Geist wrote an excellent rebuttal to this article - in good time as well. I also felt the need to write editorial feedback to The Globe and Mail. I've posted it here, and sent them a link to this in addition to the text below.




Hi all,


I have normally considered the Globe and Mail to be an excellent newspaper, however I'm starting to think that perhaps journalism does not rule the day. Case in point, Barrie McKenna's article entitled "U.S. coalition wants Canada blacklisted as bootlegging hub". This article is merely free advertising for the IIPA. The article is pretty much entirely quotes from their press release, documents and legal council. Their claims and statements are repeated as fact, despite that an knowledgeable journalist would know many of them are lies, and also know who to contact to obtain refutation. This is not journalism - this is business news wire and not worthy of the front page. Please reassign Barrie ASAP to a different coverage topic - it is clearly beyond his ability or desire.

I would like a response indicating either:
a) That you have done so
or
b) Why this article is an example of fine journalism and should be upheld as a stellar example of research, perhaps even one that could be used in journalism schools. To put anything but quality on your front page would be a travesty to the good name the Globe and Mail has (had?).

Thank you,
-ryan

PS: I have posted this online as well at: <this url>

Tuesday, February 13, 2007

Java vs C++


Despite what some people say about C++, I still like it better than Java.



Using Java is like being at day care. You are well taken care of, everything is soft and nicely rounded. Things seem a bit bigger and blockier than they need to be - but hey, it's for those kids who have poor manual dexterity. We want them to feel good too.



Using C++ however, feels like being in a pro-machine shop. Things are big and bulky when they need to be (or due to lazyness), or they can be as lean and mean as you'd like. It's slightly dangerous there, so it's definitely for those who know what they are doing, but small price for getting exactly what you want.



One that that kind of irks me is most of the Java code I see never seems to be DOING anything. All it does is calculate a field and call some other class. Nothing ever seems to get DONE. It's all so abstract - you literally have to chase dozens of stack frames to get to anything so primitive as printing or the like.



While Java sucks the memory like no one else's business, so can Python. Yet I feel more efficient in that language - maybe it's the lexical efficiency I'm mistaking for run-time efficiency. Or perhaps I'm tired of watching 1 GB RSS java binaries suck up 100% cpu while doing apparently nothing.

Tibet is now China


The interesting thing about China doing all our manufacturing for us, is in some way, China gets to control and censor manufactured goods. Luckily we don't publish books there, but they do print... shower curtains. And sometimes those shower curtains have maps of the world:

TibetIsChina 1TibetIsChina 1 Hosted on Zooomr



Notice anything interesting there? Like, perhaps, that Tibet is now a region/province of China?


TibetIsChina 2TibetIsChina 2 Hosted on Zooomr



I purchased this shower curtain from Target. I assumed until now that it was made in China, and inspection of the tag indicates this is true. All you Free Tibet-ers, you now have another corporation to rage against (not to mention "The Machine").

Monday, February 12, 2007

Vancouver and the NDS


If you haven't read jPod, you must read it immediately. It's by Douglas Coupland and it takes place in Vancouver, BC. While in theory the book is fiction, it could have been a non-fiction documentary. The book, while probably fiction, it nevertheless could and probably does happen daily in Vancouver.



Case in point, on Saturday I was chilling with my friends who live near Metrotown. From the air/orbit it doesn't look like much, but I assure you, it is a huge mall. Combined with its ultra-convenient location on the Skytrain, makes for a huge destination. My friend, who recently quit game design school (boring!) for 300' high rise window work (cool!) mentioned I should get a Nintendo DS - henceforth just 'DS' or 'NDS'. He also said we can walk over to the Crystal mall and grab a pass-me like device. The newest generation is a 1-cart solution based on slot-1. It allows you to boot homebrew NDS games/apps from a Ultra-SD card - TINY! It patches the rom image on the fly so you merely have to drag and drop your image, and bam, the thing is ready to go.



Now it is time to investigate NDS homebrew. I've already installed the cross compiler toolset with libraries, now all I need is time, inspiration and coding. Some of the demo apps are pretty neato - wardriving on your DS! Or a FTP server via Wifi for upload of new files. With a different solution, a DS Linux is possible, with a browser and the like. But without a slot-2 card to provide extra ram, it wont really be super workable. I doubt I'll play with this - without a MMU it's pretty limited.



Finally, tomorrow is Ignite Seattle. Still deciding if I should go or not. Last time it was a mite crowded but this time I have my NDS.

Sunday, February 04, 2007

Blog Bad Mouthing Zooomr for Tech Support


So I've been trying to get this new photo site Zooomr to work. Note the 3 Os - zoomr.com doesn't get you where you want to go - domain squatters be damnned! It's one of the flickr alternatives. I especially like the geotagging feature - nifty, plus it uses Google maps which rules.



However, like Flickr, it displays photo in UPLOAD order. Of course, upload order is not what I want, and I cannot (unlike flickr) edit the upload date. Additionally, my exif data is not being pulled down and displayed. That sucks!



Now, comes the bad mouthing part. Finding support - impossible! There is no support/contact us option, there is no forums, nothing! They have an official zooomr blog. Additionally I emailed the "else" contact on the parent company's website. Emails to support@zooomr.com result in bounces with a server-side python script error. Ooopsy.



So, I figure the best way to get attention is to do a blog posting, which will end up in Technorati and ideally should feed back to the devs.



In the mean time, my project 365 photos are not fully uploaded or organized. Unfortunately you can't really see them in the right order. Hopefully I'll come up with a solution soon.

Wednesday, January 31, 2007

Boston


I'm sure practically everyone has heard about the "bomb scare" in Boston that was really just some LED sign boards.



Boston needs to wake up and realize the over-reaction and subsequent press conferences using the term "hoax" and "post-911 world" really don't make them look any less foolish.



First off, it's not a hoax - it's a guerilla marketing plan gone awry. A hoax implies that these devices were intended to be mistaken for bombs - which is clearly not the case.



Secondly, can we retire the term 'post-911 world', PLEASE? I'm just tired of this poor excuse covering people with an overactive imagination, and a lack of common sense and knowledge.



I've seen the devices - it should have been apparent that there was no structural threat from these, even if it was 100% explosive. As you may not know, explosive placed on a steel or concrete will just 'blow off' - leaving only surface damage or less.



There is a flickr photostream of one of the ads. The device is a black board, covered with LEDs, exposed electronic components - ie: resistors, capacitors, etc, and a line of C/D batteries along the bottom. No way there could have ever been enough explosive to threaten entire buildings and bridges and the like.



Finally, the "we arrested someone, hooray!" just seems like a face-saving strategy. I hope they realize the rest of the world sees this for what it is and just stop it. I assume the guy's legal defense will be covered by the agency who hired him, if not, the ACLU should step in.

Friday, January 26, 2007

Bulk Embedding Flickr in Blogspot


Does anyone have a methodology to bulk embedding Flickr images in a blogspot posting? I tried copying the snippet they give, but it ends up weird. Also it's time intensive, since I have to visit the 'all sizes' page of EACH photo to copy the HTML snippet.



All I really want is a system that grabs N photos in a row out of flickr, and gives me N nice little framed HTML snippets. Then I paste into my entry, and we're done.

Thursday, January 25, 2007

Testing on the toilet


Thanks to slashdot, I noticed that our internal newsletter "Testing on the Toilet" is now public. I personally think the sheet is great - generally always something to read in the toilet.



But what is even funnier, is the comments in the slashdot article. The wild speculation, the huge leaps of faith, the analogies are just bizzare, and hilarious!



My view on TotT: A fun way to twinge people's thoughts about testing. Clearly a single 8.5x11 sheet is not going to deliver the final word on anything, but it will remind you of various techniques and why certain stylistic constructs are bad, and not just for style reasons.



Also, that my workplace is subject to millions upon millions of nerds fantasies, fears, dreams and hopes is always kind of neato.

The Challenges of P365

I must say, Project 365 has turned out to be a bit challenging this last week. The problem is remembering to snap a picture during the daylight hours. Driving to work does not help this much at all. While driving to work you generally have 0 downtime - if you're not driving, you're probably either still at home or just arrived at work. At least if you are taking the bus, you probably have to wait a few minutes for a transfer. This slight downtime is where I've gotten a few of my pictures from - specifically the bag lady.

Luckily my camera is very capable, the ISO 1600 mode offers a low amount of noise. Combined with the image stabilization of my new lens, the next batch of photos contains some fascinating low-light and night time pictures. Of course I've been lazy posting them, so I'm behind some. With an up and coming trip to Las Vegas starting tomorrow, you might just have to wait until next week to get it all.

Some tips for would-be Project 365-ers:
  • Your Camera goes everywhere. No exceptions. If you have a 8oz Point and Shoot - consider yourself lucky. My camera bag weighs at least 10 pounds.
  • Thematic - I have been trying to take things that support the theme of the day/week/month. One of my shots is a wilting poinsettia left over from the holidays.
  • Experiments - use this as your chance to mess with light and your camera's abilities. Switch to manual mode, turn off the flash, etc. Absolutely none of my Project 365 photos are done with a flash - I don't even own one!
  • Photos don't just mean camera - One of my up-coming pictures is a screenshot from WOW. Since I played all day long, I figured the theme of the day was WOW, and hence a screenshot would be appropriate. Hey, it's my project!
  • Peer pressure - make sure you're not off the hook. Get your friends, SOs, family to pressure you. There ideally should be an expectation that the next week will bring something awesome. You must post your photos on a blog.
  • "Just do it" - this is my anti-tip. This slogan rings hollow to me (for a variety of reasons), since motivation is more than 3 words. It doesn't offer any actual mechanical advice on HOW to get it done. I only include it here to rail against it.
I am still taking pictures every day - I have not missed a single day so far. Good luck to those also in process.

Monday, January 15, 2007

Jan 15th


Project365 016, originally uploaded by ryanobjc.

Waiting for a light at 5th and Denny in Seattle. A busy intersection, I'm sure there were many people looking at him. Now's the time to get your 15 minutes of fame.

Jan 14th


Project365 014, originally uploaded by ryanobjc.

Indie enjoys the snow, running around like a crazy dog (which he is). This is Carnation, WA which exhibits much more snow (more than half has melted at this photo) than Seattle.

Jan 13th


Project365 013, originally uploaded by ryanobjc.

The result of 4 days of below freezing weather, precipitation and some sunny days. Normally snow lasts a maximum of 2 days. It's been unusually cold (global warming makes for unpredictable weather changes).

Jan 12th


Project365 012, originally uploaded by ryanobjc.

At a party, Facinating!

Jan 11th


Project365 011, originally uploaded by ryanobjc.

On this icy and snowy day I braved the streets and bussed to work. This was to receive the UPS package that contained my new lens! This is the manual of the lens, using the 'macro' mode - the front element of the lens was ~ 45cm from the manual. I hope this new lens will give me much more versatility (great zoom range, awesome image stabilizer), as well as reducing the amount of dust in my camera. This was my Christmas and Birthday present to myself.

Jan 10th


Project365 010, originally uploaded by ryanobjc.

A bag lady - literally! These are plastic bags covering a motionless human shaped figure. Luckily the next day, I saw the same, but with a sleeping bag, and I finally saw her awake. So just an unusual way to sleep.

Jan 9th


Project365 009, originally uploaded by ryanobjc.

On the great snow storm day, between storms was a band of clear sky, with sun, and here it is. At this point it was still only windy and rainy, the temp was set to fall later that evening (and that it did!).

Thursday, January 11, 2007

Level 60


I finally reached level 60 in WOW on my primary character. It's been a long time coming - mostly because I haven't been able to play much in December.



Here is a screenshot of the moment I leveled up:

ScreenShot_011107_020449

Tuesday, January 09, 2007

Project 365


I saw Project 365 recently - great idea - take a photo a day and post them. So I have been snapping at least one photo a day since Jan 1st. Some of the photos passed the midnight boundary, but since my day is realistically 9am - 2am, it still counts.



So without adieu, here is my first week:






Project365  001




Project365  002




Project365  003




Project365  004




Project365  005



Project365  006



Project365  007



And a special 8th one:




Project365  008