Howdy!

Welcome to my blog where I write about software development, cycling, and other random nonsense. This is not the only place I write, you can find more words I typed on the Buoyant Data blog, Scribd tech blog, and GitHub.

Conference Season: iPhoneDevCamp

I showed up late to iPhoneDevCamp, so late it was Saturday evening and I had just enough time to meet up with whurley, blake, and some of the guys that whurley brought from BMC Software before whurley and I went back to Slide's offices to get some devcamp work done for the night. Overall, I had an absolute blast at the event, despite posting the following to twitter before I arrived: "Walking towards iPhoneDevCamp. I feel so 2.0". The premise behind the devcamp was an interesting one, despite royally screwing us developers by trying to spin web technologies as an SDK, a lot of people still banded together to develop web applications that target the iPhone. Not that the iPhone isn't a cool device, but the browser is an absolute crap platform. As so many people have already pointed out, Cocoa rocks, Javascript, not so much.

The Hacks
The innate suckage of Javascript makes the hacks created by people at the devcamp so much cooler! One of my favorites (that I didn't write of course) was an application that would allow you to remote control your Mac called Telekinesis, followed closely by cooler (and more social) hacks like a flash mob app or the best word processor around for the iPhone, gOffice. In tune with the odd, and usually useless, nature of devcamp hacks, came iSleuth which is both a Mac application and a web application allowing the user to keep an eye on what's happening at the regular Mac while using their mobile one, these guys got extra points for using a real live baby crib during their demo to show how a user could protect their baby, ostensibly with a $2,000 security system.

All in all the (web) applications that were developed were some great hacks, and great examples of developers making due with minimal resources and no API or great developer tools, both of which Apple is usually known for providing.

My Hack
Despite wearing a staff badge the last one and a half days while I attended the devcamp, I primarily hacked on an idea originally pitched to me by some of the BMC developers that showed up as "the hard part." I became so entrenched in the hack that I didn't sleep on saturday night trying to finish it in time for the demo session on Sunday afternoon at 2pm, before realizing around 11am on Sunday that I would probably have to clear this with my employer before open sourcing the project. I won't go into too much detail about it, since I can't post source code just yet (i'll post separately when I get the okay), but there are a few things worth noting:
  • It uses an arbitrary data set, in this case Flickr photos
  • The math is still off a little bit, so the sizing is also off, and thus, it's not done :)
  • I have yet to add reflection support
  • There are still a few rendering issues with the stacks
That said: Cover Flow

I'm still working on it, and am preparing to be sued as soon as I polish it up to look closer to Apple's version :)

All in all, despite what some people might say about the commercial aspects of the devcamp (being hosted at Adobe's Townhall here in San Francisco, among other things) I think it was a great success, bringing people together to make do with the "iPhone SDK". I enjoyed myself and can't wait to help organize the next one when Apple finally releases Cocoa ME (Mobile Edition).



Note: Somehow my (more common than not) late night hackery got me in an L.A. Times article, I didn't have the heart to tell the reporter that I do this at least once or twice a week.
Read more →

Mono, meet Facebook

Recently I've been developing Facebook applications on behalf of Slide (my employer) using our killer internal frameworks. While this has resulted in an extremely fast turn around from the whiteboard to release and 8 of the most used applications on Facebook with well over 15 million users, it's all in Python, about 100 miles and a "tabs vs. spaces" flamewar away from what I "used" to do, Mono.

Believe it or not, Mono has full ASP.NET 1.1, and a near-complete ASP.NET 2.0 class compatibility (check it out!). Not only that, there's two different ways of hosting a Mono/ASP.NET application, via xsp2 (for development) or with Apache 2 and mod_mono (for production). The only logical progression for a hacker such as myself, was to write a Mono-based Facebook application, and thus Weather# was born.

Development
Fortunately the pervasiveness of Facebook client libraries is approaching the commonality of Twitter client libraries, mostly because it's a simple REST API, and it's cool. Since somebody already wrote the code, and weaseled it into the Mono Subversion repository (facebook-sharp) I decided to use it instead of rolling my mini API. The code was a bit old, and obtuse to deal with, so I simply incorporated all of the classes into my project, building everything into my web application. Using one of the many SOAP webservices available on xmethods.net, I used the wsdl.exe app to generate my SOAP client stubs (which are always subclasses of System.Web.Services.Protocols.SoapHttpClientProtocol), which left me with only about 150 lines of interface and basic glue code to bring these components together such that on page load:
  • The user location information is fetched from Facebook
  • A SOAP request to the weather web service is made per zip code or city
  • The return data is parsed and fed into the page for display

The entire project was built in MonoDevelop which has pre-built ASP.NET templates which include customizable build, run and deploy settings for the MonoDevelop build system. When you click "Run" from inside MonoDevelop IDE, it will rebuld the solution, launch your project inside of xsp2 and then open up a new tab in Firefox to the web application. Building/Testing/Deploying is definitely the easiest part of the road to ASP.NET on Mono.

While the ASP.NET Visual Designer is not yet ready for prime time, it's only a minor set back in that you can't drag and drop your web interface together a la Visual Studio .NET, but you have to revert to how most of the web builds their interfaces, with templates and by hand. Given the sheer simplicity of the Weather# interface, this wasn't a major hurdle to overcome.

Deployment
The only true problem with this near-perfect development setup is the actual public deployment, there are only a few hosts that provide mod_mono hosting as of yet. One of the most beneficial features of Mono however, is the full binary compatiblility with .NET, meaning you can develop your entire web application using the free and open source Mono tools, and then deploy your web application to an IIS ASP.NET server (which are very common in the hosting biz). If you have a colocated server, or a virtual private server, it's trivial to setup mod_mono on your Apache 2 web server with most of the mainstream Linux OSes and *bSD's. With ubuntu, in my case, there's only a few packages to install via Synaptic and then move the configuration over in the /etc/apache2/mods-enabled directory and make sure your configuration is correct. That said, if you're the proud owner of a colocated server it should be trivial to configure everything properly.

Facebook Integration
Facebook includes a couple key parameters in their calls into your page to present the user your application, such as the fb_sig_user and fb_sig_session_key, both of which you can pass into any Facebook client library to start to have your application querying the Facebook Platform. Weather# only makes this call once to users.getInfo to fetch the location information it needs. You can query for a lot more information if necessary, but for the purposes of this example, fetching the location was as basic as was necessary. The most complex part is setting up your Facebook applications settings in "My Applications", the Weather# information can be found here (opens in a new window). The most important information is in the screenshot, but if you'll note the callback URL settings. They are set to "iframe" for development purposes (and my desire not to open another port in the firewall to my workstation) and are hitting localhost port 8081, which is the local port I configured my MonoDevelop-deployment xsp2 settings to use. If you switch it over to FBML, you will either have to serve up FBML to the canvas page, or an <fb:iframe/>, but both require Facebook being able to contact your callback URL for proxying purposes.

<fb:conclusion/>
Developing with ASP.NET on Mono is essentially no different than developing with ASP.NET on the stock Microsoft .NET assemblies with the key difference being...no Microsoft .NET assemblies, and no IIS. Meaning, that if you're comfortable with C# or Visual Basic, you can very quickly, and very cheaply develop ASP.NET-based web applications (or web services) and serve them from within your existing LAMP infrastructure. In my opinion, this is one of the best options out right now for current web development, right behind Python; the absolute power of the .NET class libraries is unparalleled, from web controls, to web services, to ADO.NET for data storage, the tools available to the overworked and underpaid developer are worth looking into if you're not already "in the know." mod_mono and xsp2 both run on Mac OS X, Linux, and FreeBSD, and are in the package systems across those platforms (MacPorts, APT, or Ports). MonoDevelop works on Linux and FreeBSD, you can get it working on Mac OS X but it's about as painful as a brazilian bikini wax (erm..so I'm told).



Resources

Read more →

Thriving in a Development Vacuum

Last week there was a post on Coding Horror about the "Dangers of programming alone". Jeff quotes this article which does a fairly good job of expressing the plight. Programming is not a full-time aspect of my work (at least not now) but when we need an application to do some piece of analysis or run some piece of equipment I am the sole developer. While I can relate to watching myself make those mistakes I don't share the same bleak opinion of being a lone programmer. Over the years I've been slowly figuring out how to make the sole-developer arrangement work.


  • Discipline is key: As mentioned in the original post, and quoted on Coding Horror, there is a lack of oversight in a situation like this. You are your own overseer. You have to have a great deal of resolve to keep your code clean, to keep your work prioritized, to keep on deadline, to keep up with documentation.

  • It isn't really a vacuum: I've got some friends online that I frequently bounce ideas off of and vent to. They often don't know specifics of what I'm working on, and they don't work on anything similar to what I'm doing, but it has still been vital to keeping me sane.

  • Keep learning new things: My early work was all in VB6, since then I've done projects in C, C#, Java, and Ruby, as well as a bit of dabbling in Python. If I had been stuck doing VB6 all this time I probably wouldn't be coming back tomorrow.

  • Be in control: Keep in contact with the relevant parties involved in the project. Don't be afraid to say things like "this can't be properly implemented in that amount of time" or any other variation of "no". It's hard to say "no" because, at the end of the day I really want to do almost every project that gets proposed.

  • There's more to life: At the end of the day, every day, I go home and I play with my kids. There is no project, no deadline, and no responsibility in my professional life that is more important to me than my family. Of course that doesn't mean that I don't work late, or work at home on weekends, but it provides a necessary balance when work starts to stress me out. Of course this really has nothing to do with working in a vacuum, it is a basic necessity for any position.



I think suggesting that programmer should demand to work with other programmers, as suggested in the Coding Horror post, is a bit extreme. The real requirement is to be able to work in a way that won't drive us insane, whether alone or in a team.

Of course this is all based on my personal position, which doesn't involve programming for all 52 weeks in a year, being constrained to one project for extended periods of time, or distributing my applications to any wide audience. Maybe what I should be writing about is all the reasons I love my job ...
Read more →

Insanity.

It's been exactly one month since the F8 event (Facebook Platform Launch) changed everything, and it's still going.

Rumor has it that users at some point translate into money, and at some point that money might see my bank account. I'm not holding out hope for this, but it's a novel idea.

Who would of thought that some of the goofiest ideas I've ever implemented would take off?

Here's the differences that I've found:
  • Indie Developer: "Man it'd be cool to have a couple of thousand users"
  • Enterprisey Contract Developer: "Man it'd be cool to have a couple hundred thousand users"
  • Startup Developer: "Man, I hacked up something over the weekend that has a couple of million users. Ho hum, to the pub?"[1]

The sheer scale of the market on the web is mind-boggling, despite working for a web company, I still stand by Todd Manning's comments of "I hate the web, the web is stupid." It's a fact I accept however, I hate Windows as a development platform, but I'm willing to accept that it's too large of a market to ignore (something the guys at plasq get with both skitch and ComicLife).

Not three months ago my days were filled with C# and now it's all python all the time.


I'll sleep when the bubble pops.


[1] Just kidding, I cherish every single one of my users like they were my own children, staying up late worrying, wishing it were legal to hit them with a plank of wood
Read more →

Long Live the License Flamewar

It's been far too long since I've lobbed a shell in the direction of a good "discussion" on open source licensing, so thanks whurley. I haven't stood on my soapbox/posted here in a while either, what better opportunity to go off on why I don't think the GPLv3 does anything worthwhile and what I think is wrong with nearly every GPLv3 vs. GPLv2 discussion.

The non-problem that v3 tackles is "tivoization". The concept here is that Tivo takes linux, customizes it, puts it on their set top boxes, makes their customizations available, and locks down the set top boxes you can't change the software running on them. To the first reason at the link I gave, I say "so what". Tivo makes a device that phones home and you can't turn it off. There is no issue modifying the software, as they correctly point out, but you can't make the hardware operate with that modification. I don't think preventing people from repurposing hardware is something that should be pursued in a software license.

They go on to further justify this with a doomsday scenario. The reason it seems far fetched is because it is. The programmable computer is simply not going to disappear. Special purpose computers are being locked down, but that is nothing new. I have a pile of electronics in my home that I can't program and I don't think one of them running Linux should make that any different.

I'll also note that they don't seem to look at a doomsday scenario for the so-called ASP loophole.

The other feature GPLv3 offers that I don't see much value in is the patent provisions. One more weapon in a patent arms race. While I appreciate that things like patent pledges have worked largely as a deterrent to widespread software patent lawsuits, so far, the GPLv3 is applying a small bit of salve to a sore while doing nothing for the disease.

Now I'm going to talk about the argument itself. If we look through the comments
to the post that I originally linked we can sum them up pretty easily.

  • The respectful disagreement - These are good, I'm a bit hard on GPLv3 proponents when my real problem is with Free Software Zealots.

  • You don't understand the problem - they don't understand that it's even possible to have a different opinion, or they just feel as though your opinion doesn't matter

  • Trust me, there is a problem or that loss of freedom is for your own good - Gee, thanks. I just needed to be reminded that RMS is "Far-sighted" and that my opinion still doesn't matter

  • Just go with it, the goals are the same, this is just an update - Obviously some people chose the GPLv2 thinking Tivo was fine. A purported Bruce Perens gave this one along with some more constructive comment

  • Yeah, you tell'em whurley - agreement with very little substance, my comment included



Thinking that people who disagree with the GPLv3 just need to be educated is wrong. I'm sick of seeing "You don't understand," "Trust in RMS," and "This is just an update" responses. Not every issue is a war to be argued, and not everyone will agree with you. I think you become a zealot when you decide that you are obviously right and there is no room for disagreement.
Read more →

Almost There

For the past two weeks I've been in super-mega-extreme stress mode, helping release an insane amount of features, applications, and fuzzy bunnies, which means my miscellaneous hacking time has been consumed by the man. I've got two week old code sitting in my /Software folder waiting to be tested, committed to Subversion and released for my "Windows Eye for the Cocoa Guy" series.

I've casually mentioned to a few friends that we'll catch up when the insanity dies down, to which I get chuckles and "nice knowing you" comments.

You Silicon Valley veterans suck.
Read more →

Conference Season: OSBC

I was fortunate enough to be able to go to "OSBC" (Open Source Business Conference) during this past week, I didn't exactly have a badge and I didn't register, I walked right in and snooped around since OSBC was hosted at the Palace Hotel on New Montgomery and Market St (a mere two blocks from Slide offices). It was right there, how could I resist? While at OSBC I met up with my good friend whurley to have lunch, meet some folks, and the usual pointing and laughing at the suits scurrying about. After the meeting a few folks and taking in a lot of what was going on, I couldn't help but thinking:

Shit.




They know, they know, they know. Not only do they know, they now use it casually the same way they started to talk about "emerging web technologies", the "services oriented architecture", the "power of viral marketing through the blogosphere", etc.

They are now talking about "leveraging open platforms" and "the convergance of open source and their systems". This has become nothing more than a bullet point on a poorly made PowerPoint presentation, nothing more than another tagline in a corporate press release.

Shit.




It's over now, it was such a fun ride, but it is so over it hurts. Looking at the big companies re-orienting themselves around a more "open source" attitude is almost as painful to watch as last year's State of the Union address. Apple adopted open source out of necessity, Novell adopted open source out of necessity (besides, remember how much Groupware SUCKED?), why are these other companies adopting open source? It's the hip new thing of course!

Overhearing suits talking to one another, blindly curious as to what the others' companies' "open source strategy is" is like nails on the chalkboard of my little open source soul. It is a completely empty thought for them, just as once upon a time they were buzzing about their new "web presence strategy" regardless of whether or not it made sense for "Johnson Toxic Chemicals USA, Inc." to have a web presence, they wanted one so they could checkoff a tally-mark on the "Uninformed Suits Monthly" magazine survey.

If we're lucky they won't corrupt it too much like they did to the internet in the late 90's. whurley's comment "they're here" with regards to the number of lawyers that he came across at OSBC is extra-special scary. It's funny though, just the other week as I was partaking in yet another "GPL vs. MPL vs. BSD" license flamewar, I couldn't help but think: "you know what would make open source better, some more fucking lawyers." The only way I would want lawyers muddling with open source would be if their name was "Johnny Cochran," purely for the entertainment value alone.

Just like everything good that's ever happened, rock music, the Olympics, rap music, hockey, and of course, beer. Open source is about to be commercialized and turned into a commodity by soulless corporations and lawyers.

It was fun while it lasted, I guess.

Shit.


Read more →

Sp4mz0r

After receiving an email a few weeks back about blog spam on my former blog, I decided that I'd go ahead and remove it. About 500 random spam comments later, it's been mostly removed. I'm still wondering if the captcha is that much better for Drupal, or if I've simply not posted anything popular enough to register on the Digg, or O'Reilly blog radars to attract the spam bots? I feel so unloved :)

As a side note, I finally got around to fixing the Drupal mail issue for this site, so if you attempted to register, but never got the confirmation you can request a new password to reset your account. I'm also testing the Twitter Drupal module with this post. Oy.
Read more →

Our employees are our most valuable asset

Having an epiphany over a two-beer lunch on a Wednesday isn't hard, and if you can't, make it a three-beer lunch. I had one such epiphany today where, as if stars in the mental mockup of the corporate world inside my head, started to come into alignment. It is one thing to release a corporate memo that states 'employees are our biggest asset'"or similarly market-drone-tainted nonsense, it is another thing to try to maintain a state of human resources nirvana where your employees genuinely like each other. In my less than expansive track record as a professional software developer, I've always chose the cut in pay, over dealing with colleagues that I don't like. That is to say, I've always opted for the companies to work for where I really enjoyed working with who I'm working with, regardless of what I've been working on. In the end, it's just code. They're just projects. And none of it really matters if you absolutely abhor your coworkers.

I don't. I enjoy working with who I work with, and if you've followed the constant stream of absolute nonsense from twitter stream it might start to become apparent why I spend so much time at the office (cue suspenseful music). I realized that I'm in the right place over the aforementioned two-beer lunch when I made a reference to a paragraph-long snippet from an ancient page of Jamie Zawinski's and everybody at the table knew exactly what I was talking about (Wednesday, 21 September 1994). The references to Arrested Development, or just the common understanding that we will all make jokes, and often the funnier ones are at each others' expense, all make the office a very enjoyable place, to where you can find yourself getting carried away until the wee hours of the morning. (Did I mention we're hiring?)

The startup atmosphere is certainly refreshing after dealing with smaller companies for so long that just "don't get it" when it comes to balancing between trying to bring products to the market yesterday, slowly grinding employees into either burnout or other companies, and the companies that don't understand you're allowed to think big, even if the payroll is small. It is also harder for companies to grow, while maintaining their "startup" tendencies. Apple seems to be proverbially stuck in the "90 hours and loving it!" mode, while Yahoo! has gone from a Web 1.0 blitzkrieg of products to a slow, lumbering giant that operates in every sense that you'd think a large software company, with the right hand not knowing exactly what that pesky left hand is doing over there. Google just has too much damn money. Microsoft is disintegrating into the IBM of old, and all of them fail to capture the fun and excitement of the startup, even though some have tried so valiantly to replicate it[1].

At the end of the day, the majority of us (Americans) need to find some sense of satisfaction and identity in what we do for a living, the importance of who you work with for the majority of your day is the difference between waking up in the morning and dreading what is to come, and waking up in the morning looking forward to lunch just so you can cut out of the office and hang out with your coworkers (I was going to fabricate some statistics about heart disease and stress levels, but the well ran dry shortly after that two-beer lunch when I exceeded my quota of bullshit for the day). In any given job interview that I've been on, I've always been measuring them up while they measure me up, asking myself important questions like if I work here:
  • will this person annoy me?
  • will I be thoroughly caffeinated?
  • will I need to work 12 hour days, or might I just choose to sometimes?
  • if we accidentally got into a bar fight with a competitor, would we win?
  • will the world come to an end if we miss a deadline?
There is little worse (professionally) than ending up on a team, or in a company with people you would try to avoid in public, but on the flip so there is little better (professionally) than ending up on a team, or in a company with people you would come to the office to hang out with even if you didn't have to.


[1]: The startup atmosphere seems to thrive around the idea of "make it big or go home." They tend to know that their time is limited so they try to shoot for the stars while they have a chance, some make it there, some burn up on the descent back down.
Read more →

My Guilty Pleasure

Reminiscent of Michael Bolton, Peter's side-kick, from Office Space I find myself indulging more and more in one of my numerous, geeky, guilty pleasures. Hip-hop. Not just any hip-hop, dirty south hip-hop. Sideways-sittin', wood-grain grippin', screwed and chopped, smoked-out dirty south hip-hop. One of the few exports that I'm proud Texas has produced (ahem) in the last ten or fifteen years. Texas hip-hop in general is a weird mix between the "roots" of rap in that a lot of it focuses on the ghettoes and hardships the artist has experienced growing up in places like Houston's 5th ward, to the "more modern" hip-hop which has become more and more about women, cash, and cars; mainstays of any good hyper-masculine artform.

There. Now you all know. I'm a sandals-wearing, Volkswagen driving, computer programming, book reading, hip-hop fan. Chances are, if I'm driving somewhere, in between points A and B, I'm bumping in my blue Jetta to some David Banner, Paul Wall, Mike Jones, Slim Thug and even some good old Geto Boys. Forget the east coast-west coast nonsense, with the exception of artists like Mos Def, the new home for hip-hop is in the south.

While working, I listen to a few internet radio stations whose collections of hip-hop far exceed my own. In the past I have listened to a great bit of Smoothbeats.com which is a more traditional hip-hop and rap station, but since leaving Texas I find myself listening to Thugzone.com far more. I recommend them both if you're in the same ackward cultural boat that I am, or if you just loves you some hip-hop.

The hip-hop scene has definitely embraced the internet with independent artists like Slim Thug and Mike Jones using it to get their music out to their audiences without relying on rich, prodominently white, record executives to decide which music was more fit for black America. Fortunately for the suburban white kids among us, who have been able to side-step the mainstream media and enjoy the works of artists who may be only from a few miles away but are on the other side of a deep crevasse of social precendence and economic class-structure.
Read more →

Windows Eye for the Cocoa Guy, The Series

After giving the idea a bit of thought and the desire to further alienate myself from my fellow Mac developers (i've noticed the drop in hits when I started mentioning Windows development versus Mac development), I've decided to turn "Windows Eye for the Cocoa Guy" into a series of posts detailing some of the architectural and semantical differences between developing applications in Cocoa on Mac OS X, and .NET on Windows. I've found myself lamenting my performance at the CocoaHeads Silicon Valley meeting because I felt like I either didn't have the time, or carelessly glossed over a lot of details that should have been mentioned. I was cramped for time before the presentation as well so I couldn't prepare enough (see: any) code samples or demos beforehand to pimp out some features of .NET or Visual Studio that are still lacking in Objective-C 2.0 and Xcode.

I'm still crafting some of my points to make in upcoming posts, by user request (here) I intend to cover XAML in general (as well as Silverlight) contrasted against the "freeze-dried objects" model that Interface Builder, with a dash of Windows Forms Designer too.

Also on the yellow notepad of bloggery, I would like to touch on the differences between C# Events in how they're handled and created versus the less than popular NSNotification way of doing events in Cocoa. Major differences also exist between the ways of doing .NET asynchronous I/O compared to Cocoa "asynchronous I/O," in quotes because, as much as I love the runloop, scheduling tasks to the runloop doesn't count in my opinion as asynchronous I/O [1].

While I enjoy being slightly provacative, I'm really aiming to be pelted with rocks at WWDC. You'll be able to find me sitting at a table all by myself outside Moscone. Regardless of the certain doom I will face posting about Windows development from a Mac developer perspective, I hope the series will at the very least be interesting and educational.

1. The lack of "real" asynchronous calls in Cocoa bugs the hell out of me. Darwin is one of the few operating systems I've developed on with functions like aio_read(2) and friends. Besides scheduling a call on the runloop, you can spawn a worker thread yourself, both options don't take advantage of the aio_* functions which just...sucks.
Read more →

Twitterbot Recap

While trudging through some comment spam, I came across some older comments that I felt needed recapping in this post about my Twitterbot. An anonymous poster had asked about some issues with Mono on Mac OS X returning 401 Unauthorized errors when using HTTP authentication within the Twitterbot. The issue was fixed relatively quickly after I brought it to the attention of some of the Mono developers, and the fix will be included in Mono 1.2.4 (preview available).

There shouldn't be any more issues with regards to running the Twitterbot on any platform supported by Mono now. In the future I would also like to add better history and duplicate checking by using either a flat-file datasource or one that feeds on a database, but the latter would probably make the program far more complex and difficult to use. Ideas, as usual, are always welcome.
Read more →

Windows Eye for the Cocoa Guy

I finally got around to posting the slides for my presentation at the april CocoaHeads Silicon Valley meeting. The motivation for the talk was to introduce my fellow Mac developer colleagues to some of the goods and bads of modern Windows develolpment. One of the primary points I tried to bring across was that Apple doesn't yet have an IDE that I would put on the same level as Visual Studio 2005, which is arguably one of the most complex and complete IDEs out there (with Eclipse in a close second, in my opinion). Xcode (and friends) in Leopard are very close to taking the throne away from Microsoft in that respect, but there are still a few things that are holding them back, such as gdb, which is still a relatively primitive debugger.

With .NET 3.0 however, Microsoft is fighting back hard for the make-believe "most cool framework" award, with additions like Windows Presentation Foundation (formerly called Avalon). The downside of a lot of .NET 3.0 however is Microsoft's incessant love of all things XML, as WPF is based primarily on XAML which is grotesque on a good day.

Unfortunately I can't repeat my entire presentation, and I didn't want to post my presenter notes, but hopefully you can ascertain enough information from my presentation.

Windows Eye for the Cocoa Guy
Read more →

Im in ur phonez

In a weird sort of cosmic coincidence, I happened to be researching some of the mobile developer tools available after a weekend of toying with the Windows Mobile 5.0 framework (which is pretty cool by itself) within Visual Studio 2005, and while I was doinking around on the internet, I came across Nokia's Open C platform. By itself Open C is pretty impressive, but after digging around some more the entire Nokia development platform is certainly not what I expected. Quicker than you can say OMIGOSHSYMBIANSUCKS I found myself immersed in whitepapers and code all targetted at developing for the gigantic mobile market.

Before I dive into Windows Mobile, I must first disclaim that I'm a relatively big fan of the .NET platform, usually by means of the Mono Project. The .NET Compact Framework (referred to as .NET CF) is merely an extension of the .NET framework meaning you can use a lot of the same code and know-how for developing Windows Forms interfaces for Windows Mobile enabled smart phones as well as already existing code for the backend of your embedded application (there is also an interesting extension on .NET CF available at OpenNETCF). The power of this sort of portability should go without saying, but why not say it anyways? Because of .NET CF I can write the same services and network interoperability code that can be used in my desktop application and take it straight over to my embedded application with zero or minimal hassle (optimizing your bloated desktop code for an embedded application is always a good idea). In addition the normal trimmings of .NET, the Microsoft.WindowsMobile namespace offers a myriad of device-specific APIs for sending messages, interacting with a smart phone's contacts, calendaring, camera, media player and all the rest that comes stock on modern Windows smart phones. With a saturday afternoon spent in an empty office pouring over API documentation and hacking furioiusly on some test applications, I could send messages, take pictures, play with contact information and do some G-rated damage to a Windows smart phone (Rory Blythe's screencasts on the subject are a fantastic resource as well). The obvious downside is that it is Windows (Mobile) and that the consumers that tend to own Windows smart phones tend to be business types who walk around with suits and have the word "synergy" tattooed on their buttocks. Not my cup of tea, nor my target market. Next!

On the other side of the world to Nokia. Nokia's S90 platform is expansive to say the least, and runs on quite a few devices as well. While I'm certainly not "in the biz" with regards to mobile device development, the sheer size of the entire S90 platform and the varying means of using it surprised me. Nokia's S90 platform builds on top of Symbian (ick!) which, fortunately, powers more than half the mobile market but, unfortunately, sucks. You know it, I know it, even Symbian Ltd. knows it, so let's stop pretending. With regards to Nokia's developer tools though, they offer a relatively stock Java API for developers to use (eSWT? gross!), their Carbide C++ framework which builds on top of Symbian's own C++ libraries, and even a Python API for their SDKs (the Maemo work is worth a look too). Most interesting to me was their Open C project which borrows some of the best bits and pieces from a few open source projects and brings them to the mobile platform. While Nokia obvious doesn't have a clue with device design they do seem to be with it in terms of the open source world. Open C is built primarily on top of OpenBSD and OpenSSL libraries with a bit of libz and GNOME thrown in there as well.









libcOpenBSD
libcryptOpenSSL
libcryptoOpenSSL
libglibGNOME
libmOpenBSD
libpthreadOpenBSD
libsslOpenSSL
libzlibz

Either somebody at Nokia really wants to piss Theo de Raadt off, or they have a high opinion of his work! Personally I wouldn't have chose OpenBSD, but their unwaivering committment to the "absolutely open source" ideology seems to make their projects an ideal fishing ground for commercial ventures who are really looking to stand atop the shoulders of giants.

Even Blackberry has tools readily available for developers, but I can't say I've researched them too much. I'm pretty sure that people who develop applications for Blackberries go sterile or get cast outside the universe at armageddon or something.

The device development world is riper than ever for some killer application development, the Opera guys seem to get it (they use Qtopia from what I can tell), the Google guys seem to get it, where are the smaller shops? If the iPhone turns out to have some sort of "Cocoa Mobile Edition" (a poor ripoff on my part from JavaME) then I think we will see an influx of Mac independent developers to the iPhone as a platform all battling for a tiny niche of a niche just as they are on the Mac platform. What about the entire rest of the mobile market?

With the growing ubiquity of the mobile devices market the opportunity for independent developers to write killer applications for Windows Mobile, Symbian, embedded Linuxes, and possibily the iPhone, is more attainable than ever. The tools to develop are either free or cheap, and you don't necessarily need to be a hero-programmer to develop applications for these embedded systems anymore either.

That said, Brent, I'll buy you a beer when I see NetNewsWire iPhone Edition.
Read more →

Site Upgrade

Just a side note, I upgraded this site to Drupal 5.1 this weekend. I'm not sure if there will be any visible changes besides the obvious theme change, but overall things should work smoother.
Read more →

Choosing a platform, Windows and Linux

Came across an article through slashdot (I should almost template that intro) that presents the opinion that Microsoft wins over developers by not offering the wide variety of development tools for Windows that are available on Linux. I've got quite a bit of insight on this topic, and I'll get to that in the context of some quotes from the article, but let me start with one thing I think the author has absolutely right.

Every time I thought I was going to be stuck, there were a dozen articles explaining how to do exactly what I needed to do, with sample code that was up to date with the versions of the software I was using, and that actually related to the problem I was trying to solve.

There are always cases where you end up thinking "this example isn't what I want" on any platform, but by and large the material you can find on MSDN is second to only the OpenBSD man pages in documentation that I've found useful and usable. There is also a huge amount of additional information online for .NET programming (Code Project comes to mind). This is the only part of the article I can say I strongly agree with.



I thought I’d share a few thoughts on why people seem to be drawn to the Microsoft Way.

The reason I do Windows development is because it has been the platform available for every job I've had since 2001. When I was a co-op student working with industrial control systems I did PLC programming and the manufacturers provided Windows tools to work with. When I started my current day job they were looking for a nice Windows replacement for an old DOS program. I do a lot of quick data acquisition setup for experiments and I typically grab a Windows laptop and one of a pile of cheap PCMCIA data acquisition cards that we have lying around that don't have Linux drivers. I'm doing some freelance application development for a medium sized company which is an all-Windows shop. None of these reasons have anything to do with lack of choice, and I suspect my experience is fairly similar to a lot of Windows developers.

Microsoft offers the certainty of no choices. Choice isn’t always good

There is no lack of choice on Windows. Most of the options available for Linux also apply to Windows. I can do a project in Visual Basic, C, C#, C++, Java, Ruby, Python or Perl, or choose Win32, .NET, Mono, GTK+, Qt, WxWidgets, or nearly anything else under the sun. I will admit this may or may not apply as much to web development, since that is an area I generally stay away from, but saying there is no choice for development on Windows is simply not true. Just because there is an obvious preference doesn't mean the choice doesn't exist. I should state explicitly that I won't consider only products offered by Microsoft to be the same as choices for programming on Windows. Just because the OS provider is also a tool provider does not preclude the existence or use of other tools.

The astute among you may have noticed I've sidestepped the choice of Linux distributions, and I did so intentionally. I consider it prerequisite for becoming a developer on either platform to be a user of that platform. If you are talking about converting Windows developers to Linux developers they first have to be Linux users, at least to some level of proficiency, and vice versa. The distribution choice is much relevant to users than to developers.

The takeaway I get from this entire line of reasoning is this: that somehow, someway, we need to start doing some winnowing

What I really think about why developers program on and for Windows instead of Linux is that Windows is still the dominant environment for most of these developers, exactly the reasons I gave for my own programming on Windows. I've done some Linux programming at my day job in addition to my Windows programming. The longer I'm here the more I'll do and the less dominant Windows will become in this one organizational group. The issue as I see it isn't the quality of the OS or the available development tools, nor is it the number of tools available, it is simply a matter of inertia.

Unfortunately I'm in no position to bring Mac into this discussion, but it'd be great to see some discussion of that as well.
Read more →

City of Lost Boys

I have struggled to characterize the city of San Francisco ever since first coming out here for a job interview almost a year ago. The city escapes generalization because of the sheer magnitude of intermixing of races, cultures and economic classes, regardless I still am constantly fascinated by San Francisco (that and
Despite the obvious age differential between some of my coworkers, and the different types of people that I meet either walking down the street or into a bar, I feel amongst my peers. It is uncanny to come from a place like Texas where the lines between young and old are drawn firmly in the dry, cracking soil, to a place like this where the more traditional boundaries between people have deteriorated. As a weird karmic side-effect, almost everybody seems to be perpetually stuck in their mid-to-late twenties.

The youthful exuberance that floods over most of the bay area, and Silicon Valley, seem to be one of the many reasons why the topsoil is so welcoming to startups. Like most starry-eyed young people, not yet jaded by the harsh realities of an unforgiving world, so many people here have a dream to strike it rich. Unfortunately, like those that came to this part of California so long ago for the gold contained in the hills, almost nobody will strike gold. But just like birthday presents to your grandmother, it's the thought that counts.

The perpetual optimism of San Francisco has made it the butt of numerous jokes but also the target of many envious eyes and in general a fun place to be. While it is very possible that
Buzz might be (temporarily) leaving the insanity, I'm thrilled to join in just the same.
Read more →

CocoaHeads Silicon Valley

Scott Stevenson beat me to the punch in announcing it, but I might as well reflect the sentiment and invite you all (even those of you who actually don't live in Silicon Valley) to come out to Cupertino tomorrow (thursday) night to see if I can actually pull off a Windows-esque presentation in front of a room full of Mac developers.

I will be discussing a lot of the latest developments in .NET 3.0 and Visual Studio 2005 and contrasting them where appropriate to the state of Mac development with Xcode, Cocoa, Objective-C and all the other niceties that Leopard's developer tools offer. If possible I will also try to work in a bit about Mono as another alternative in the sea of options for developers these days.

I'll make sure that I either post my slides to my flickr stream or the PDF of the slides to this blog after the fact. If I don't however post before Saturday that means I've probably been beaten up and left for dead by a room full of angry Mac developers.
Read more →

In the fifth dimension

I figured I might as well come out and say it, things have been changing quite rapidly lately, thus the latency on blog postings. In the past two weeks, I have accepted a job offer, moved to San Francisco, and started working at Slide, Inc. with a friend of mine David Young (and quite a few other folks who are prime friend-candidates).

I'm not sure yet how this is going to affect my Mac (development) musings, but what I do know is that in the coming weeks Python and I are going to become best of friends...or I'm going to kill it.

There's still quite a few things in the pipeline, such as an update to the Twitterbot, and Twitterer, a customized version of Sparkle, and of course, Emission. I hope that the dust settles soon so I can return to wasting endless amounts of time blogging and hacking on open source projects, but that remains to be seen.
Read more →

I'm Seriously Famous

Okay, maybe not. But as it turns out, the Twitterbot however, is! A short 5-minute guide to setting up the Twitterbot has been created over here on the engtech blog, and does a far better job of documenting how to get started with the Twitterbot than I ever wanted to. With the help of a Twitterbot, twitter can be a great news-to-SMS gateway, or damn near anything else you can think of doing with about 140 characters worth of content either IMed or SMSed to you.
Read more →