Today is a good day to code

Pre-Superbowl Geeking Out

Posted: February 4th, 2011 | Author: | Filed under: Lifestyle | 1 Comment »

Teaching my kid about designing football plays, in honor of the impending superbowl with ZigZag Board

Pre-Superbowl Play Designs for the Steelers

Coaching my Kid


Google’s Vision of the Future is Correct… But They May Not Be The Ones Who Implement It

Posted: January 8th, 2011 | Author: | Filed under: Companies, Google, Lifestyle | Tags: , , , , , , , , | No Comments »

On a drive from Colorado to Las Vegas this past week my daughter and my son were in the back seat of our car using my daughter’s netbook, she has recently turned 7 years old so I bought her a netbook and I am starting to teach her how to code.  My son wanted my daughter to change the video that they were watching and she began to explain how the internet works to him.

She told him that all of her stuff was on the internet ( emphasis mine ) and that the movie that they were watching was the only one that was on her netbook, she explained how her computer was barely useful without the internet, that the internet came from the sky and her computer needed to have a clear view of the sky to receive the internet.  In addition she said that since we were in the car and the roof was obscuring said view that they couldn’t get the internet, and couldn’t change the movie.

Listening to this conversation gave me a bit of pause as I realized that to my children, the internet is an etherial cloud that is always around them.  To me it is a mess of wires, switches and routers with an endpoint that has limited wireless capabilities.  When I thought through it, however, I realized that my kids had never seen a time when someone had to plug in their computer to get to the web.  Plugging in an ethernet cable is as old school as dial-up.

Once that sunk in, I understood that the Cr-48, Google’s Chrome OS netbook is a step in the right direction, and while I am very enthusiastic about several aspects of Google, and in all fairness others’ vision of a web based future, I do not feel that the current approach will work.

A centralized system where all of users’ data lives, and all communications go through is not an architecturally sound approach.  As the number of devices that each user has goes up, the amount, size and types of connections is going to stress the servers exponentially.

It is already incredibly difficult to keep servers running at internet scale, we need entire redundant data centers to keep even small and simple web scale endeavors running.  When you take a step back you realize that a system like Facebook is barely working, it takes constant vigilance and touching to keep it running.  It isn’t like a body where each additional bit adds structural soundness to the overall system, instead each additional bit makes the system more unwieldy and pushes it closer to breaking.

Google is another example of a system that is near the breaking point, obviously they are struggling to keep their physical plant serving their users, and like Facebook they are so clever that they have always been able to meet each challenge and keep it running to date, but looking at the economics of it, the only reason this approach has been endorsed is because of how wildly lucrative mining usage patterns and the data generated by users has been.

I don’t think this will continue to be the case as the web reaches ever larger and larger groups of people. I don’t think any particular centralized infrastructure can scale to every person on the globe, with each individual generating and sharing petabytes of data each year, which is where we are going.

From a security and annoyance perspective, spam, malware, and spyware is going to be an ever increasing, and more dangerous threat.  With so much data centralized in so few companies with such targeted reach, it is pretty easy to send viruses to specific people, or to gain access to specific individuals’ data.  If an advertising company can use a platform to show an ad to you, why can’t a hacker or virus writer?

The other problem that is currently affecting Google severely, with Facebook next is content spam.  It is those parking pages that you come across when you mistype something in Google.  Google should have removed these pages ages ago, but their policy allows for them to exist.  Look at all of the stack overflow clones out there, they add no real value for themselves except for delivering Google adsense off of creative commons content.  What is annoying is that because of the ads, they take forever to load.  Using a search engine like Duck Duck Go things are better, but this is likely only because it is still small.  DDG also says that it will not track its users, that is awesome, but how long will that last?

It is possible for a singly altruistic person to algorithmically remove the crap from the web in their search engine, but eventually it seems that everyone bows to commercial pressure and lets it in in one fashion or another.

Concentrating all of the advertising, content aggregation, and the content in a couple of places seems nearsighted as well.  The best way to make data robust is to distribute it, making Facebook the only place where you keep your pictures, or Google, or Apple for that matter is probably a bad idea, maybe it makes sense to use all three, but that is a nuisance, and these companies are not likely to ever really cooperate.

It seems to me that something more akin to diaspora, with a little bit of Google wave, XMPP, the iTunes App Store, and BitTorrent is a better approach.  Simply, content needs to be pushed out to the edges with small private clouds that are federated.

This destroys most of the value concentrated by the incumbents based on advertising, but creates the opportunity for the free market to bring its forces to bear on the web.  If a particular user has content that is valuable, they can make it available for a fee, as long as a directory service can be created that allows people to find that content, and the ACLs for that content exist on, and are under the control of the creator, that individual’s creation can not be stolen.

Once the web is truly pervasive then this sort of system can be built, it will, however, require new runtimes, new languages, protocols, and operating systems.  This approach is so disruptive that none of the existing large internet companies are likely to pursue it.  I intend to work on it, but I’m so busy that it is difficult.  Fortunately, however my current endeavor is has aspects that are helping me build skills that will be useful for this later, such as the Beam/Erlang/OTP VM.

The benefit is to individuals more than it is to companies, it is similar to the concept of a decentralized power grid.  Each node is a generator and self sufficient and the system is nearly impossible to destroy as long as there is more than one node.


When is Mides Going to get its Bugs Fixed

Posted: December 19th, 2010 | Author: | Filed under: iPhone, Lifestyle, mides, Objective-C | Tags: , , , , | No Comments »

A few people have been asking me when Mides is going to get its bugs fixed.  A few others are asking about Git & Subversion, yet a few others have been asking me about code completion, syntax highlighting and shortcuts.  I thought I would take a moment to post about what I have been doing, what the future of Mides looks like, and what I hope to be doing.

A few months ago, 5 to be exact, I thought I was in a stable place, where the coding challenges were hard, but not too hard, I worked with some great people, and we were having a great time.  Well, most of that was true, unfortunately the stability thing became an issue, and I started looking for a new job.  I was contacted by an awesome founder looking for a technical co-founder to help revolutionize the concept of whiteboarding with a strong focus on usability.  I accepted, and am now the CTO and Co-Founder of ZigZag.

Since we are a lean / agile outfit, we have an iteration loop that consists of building stuff and putting it in front of customers, and repeating.  I am having so much fun, and there is so much to do that there just isn’t time to do anything else.  When I was working at my old job, the breakdown looked like this:

My Brain Capacity Before ZigZag

My Brain Capacity Before ZigZag

I just had the ability to do a ton more stuff, and one of the things that I really wanted, and still want to do, is make it possible to do serious development while mobile.  The thing is that right now I just flat out don’t have time to work on it.  My available time and space for working on other projects looks more like this now:

After starting work for zigzag

Brain Capacity After ZigZag Board

So what do I see as the future of Mides.  Well, after ZigZag gets funded, which will take a ton of work, fortunately less from me since I have a non-technical co-founder who is awesome at sales, and we can hire a few quality engineers and usability people, I’d like to come back to it.  Its a tool that I currently use for working on our RoR web stuff, and since we use GitHub, pivotal, and AWS, I’d like to build in more integration with those tools.  I originally built Mides so that I could be more efficient, and I still see it as a tool for doing that.  Some things that likely will go away are plain old FTP access.  It is too complicated to support FTP, and I can’t find a library that isn’t encumbered by the GPL, so that probably will go away since I have to write it all from scratch for it to work.

What will stay, and get added?  Some other things that I would like to add include code coloring, git and subversion, more RoR support, a shell to work in AWS, a service to compile and run code in an on-demand instance, some other goodies like that.  I am currently thinking about that kind of stuff in the few seconds between when I am hacking Erlang, and Objective-C…  Granted those seconds are precious and hard to come by, so while I am not saying that I will be dropping work on Mides entirely I am not going to be doing any sort of hard core coding on it until ZigZag Board is completely off the ground and flying, which I hope is soon, I am putting everything I have into it.

Me as the CTO of ZigZag

How I Feel Every Day I Get to Work at ZigZag

The good side is that when I do start working on Mides again, the quality of the implementation will be much higher as my Obj-C skills are improving by leaps and bounds.  I am constantly amazed by the stuff that is possible on the iPad and iPhone, not that it isn’t challenging to work with, but it is an awesome platform.

Changing jobs was a great decision for me, I am challenged by something new and different every day that I log in.  I was atrophying before, and now I find myself asking myself what is important to do right now, and what can we ship right now so we can learn from our customers.  It is a much healthier place to be in, even though it is tinged by paranoia about money.  I am becoming a much more focused developer, and working with a co-founder who can clearly articulate his vision for the product, and who is also well versed in lean / agile, is hopefully going to make me an even better leader than I have been in the past.  Unfortunately my other projects will have to take a seat way, way back in the balcony.

Plans for Mides

Future Plans for Mides

I hope to get through even some of that for Mides eventually, if I can, then my vision for Mides will be complete.  It might take a couple of years, but I still want to do it.  Building tools is extremely difficult, not the least because developers are frequently not willing to pay for tools ( thanks Sun! ), they are incredibly critical of said tools, and getting the usability story right is nearly impossible.  That non-withstanding, I have learned a bunch from people using Mides, other developers are typically very clear about bugs, and the offers of support and help have been wonderful.  Well, that’s the news, I felt I should update everyone on the status of Mides.  It is definitely a side-project, and is likely to remain one, I can’t really see any reasonable business behind it, it is fun to work on, and will continue to be.


How Having a Family Changed My Technical Focus

Posted: August 3rd, 2010 | Author: | Filed under: Companies, Lifestyle, Programming | Tags: , , , | No Comments »

When I first started coding, I was interested in building the geekiest, most technical solutions to problems that I could find for fun;  Stuff like IDEs ( Before Mides ), JavaScript dynamic UI generators, stuff to make programming more efficient.  After having my kids, and advancing through the ranks, however I found out what was most important.  I stopped wanting so much to acquire power for power’s sake, I stopped wanting to accumulate stuff, I stopped wanting overwhelming amounts of money to do thing X.  What I wanted in greater quantities was time.

Time is the only truly non-renewable, non-discoverable resource.  For any other physical thing, one can imagine a future in which such a thing is renewed, discovered somewhere out there, or produced from something else, but time can only be conserved.  It is this focus that has driven me to keep getting better as both a businessperson, manager, and programmer.

A few years ago I realized that I had the technical ability to build whatever I wanted, perhaps not as efficiently or elegantly as more experienced developers, but I could get it done.  I got pretty complacent for a while, and I lost the understanding of why I am developing software.  It was then that I fell in with a bunch of user experience people after the bubble burst and I had to find a normal job.  I was building online classes for the Academy of Art University.  I met some of the most amazing graphic and user experience designers I have ever worked with during that time.  They exposed me to another function of code, one that has stuck with me and has become part of my technical focus, that code could provide a better interaction through transferring some value to an end user.  Namely, a well-designed efficient user interface could reverse the clock as it were for some users.  A good UX design could give time back to the user, time spent learning an arbitrary interface with no organic mapping, no feel, time spent being made to feel ignorant, all of that could be given back to the user of the software.  Bonus points could be awarded if it were to make something that the user wanted to do more efficient, such as finding a good restaurant, or figuring out who in the organization was the best person at solving their specific problem.

I became a user interface builder, hoping to figure out some of the magic of user experience design, as this is clearly the most important part of any application.  I got pretty good at it, and being able to make users smile was definitely what kept pushing me to get better, but once I got married, and had kids, I became one of those users, the ones with no time, the ones who wanted stuff to just work.  Some interesting changes began to occur.  The first was that I ditched more complicated tools that provided less value for the time invested and started using Apple computers and software, not because I couldn’t understand the PC stuff, but because I didn’t want to waste the time on making it work the way I wanted it to when I could be spending time with my wife and kids instead.

As I rose in various organizations, I found an entirely new level of wasted time, work consisted of aimless meetings that propagated like a bad virus, developers didn’t document or test their code, leaving me to have to read for hours just to figure out what the code path was in some cases.  In other words, while the goal of the company was to build products to provide value to their customers, that wasn’t what they were spending the bulk of their collective time on, it was just in organizing itself, or fighting divergent agendas.

It is this last set of issues that has once again given me purpose.  I want to give hours back to working people through the code that I write, the teams that I lead, and the businesses that I associate with.  I believe that it is through good internal processes, healthy channels of communication, and heavy use of technical efficiencies that I can give time back to the people that I work with.  I believe that it is through developing software for regular working people at all levels to remove obstacles and to enable them to accomplish more in less time that we can all spend more time with our families, playing video games, developing new businesses or technologies, or just plain loafing around, whatever makes you you.

Part of that is a focus on making every user interaction as excellent as possible given the technology available, and the rest is to choose to build software that has a direct and measurable impact on organizational efficiency.  Some people say that having a family and responsibility slows a developer down, in my case it has sped me up.  I have learned how to delegate, how to focus on what is important.  Most importantly, I have figured out how to execute.  I think that I have learned how to spot time wasters and find / build ( or ask someone with more experience ) solutions to get rid of them.  Only time will tell if I have actually got a handle on this, but I think with some good strategic alliances to shore up my blind spots, I have a good shot at building software that can help keep our time expenditures down.  Time saved is time saved, no matter how difficult it is, its worth making every effort on this front.


Why My Faith in HTML5 Has Been Reinstated ( Or How I Learned *again* to Love JavaScript )

Posted: July 13th, 2010 | Author: | Filed under: CSS, JavaScript, Programming | Tags: , , | 1 Comment »

Over the long weekend, I was lamenting over how many times I had to write the same routines in different languages… Objective-C, Java, PHP, etc… I realized that I have, and would have wasted tons of time writing native code, and how, really most of the functionality of the application can be handled with various features of HTML 5.  Originally I had been against this, but now that the iPhone has finally caught up and has a reasonable processor, I think that the HTML5 experience can be nearly as good as native.

The funny thing is that much of what is driving my decision is the desire to have my applications have data and interfaces that are available everywhere, mobile, web, desktop, etc… aka, the original promise of the web.  Using local caching, the JavaScript key/value store, and the database will help to allow me to provide a compelling disconnected use experience.  The code that I write will be useful across all of the platforms that I use.  The one caveat that I am making is that I need to focus on one browser, or approach, and for that WebKit based browsers seem to be the logical choice.

Now I realize that not all of my application concepts will be possible with HTML5 and JavaScript, however this recent thought experiment I realized that most of the features that I would have normally insisted needed to be done natively can be done with HTML5.  The biggest issue that I have run across is the 5 MB limit on database sizes in Mobile Safari.  I know it was there in iOS 3.x, I don’t think they have lifted this in the current OS.  The other issue is the forced UTF-16 encoding of characters.  While I understand this technically, it makes it difficult to store data larger than 2.5 MB on a device in the SQLite storage available to JavaScript.  The approach taken in desktop Safari, where you can ask the user to increase the available size if your database creation fails is a much better approach.

Another interesting pattern that I see emerging is that of utilizing HTML5 as the UI tier, and establishing the business logic and control structure behind a HTTP server that would expose additional native functionality to the HTML5 app.  The benefit here is that your local server implementation could match the remote server implementation, such that your client APIs could remain consistent.  This seems to me to be the best architecture for minimizing the work involved with porting solutions across platforms.  I absolutely love Cocoa and Objective-C, I enjoy the concepts behind the Android APIs, while despising Java’s syntax, and I think that .net is pretty cool as well, however when it comes to getting applications deployed to the maximum number of users in the leanest manner possible, I think it makes sense to leverage the web heavily up front, and then backfill the native implementations as necessary.


The Corporate Disconnect : Millenials Against the World

Posted: July 6th, 2010 | Author: | Filed under: Companies, Lifestyle, Programming, Uncategorized | Tags: , , , , , | No Comments »

Disclaimer, I am not a millennial, I am in that strange area between generation X and generation Y, being closer to the Y. What does that have to do with the topic, you ask? It puts me in a unique place to watch the struggle of ideas unfolding between the engineers coming into companies, and the engineers / businesspeople running corporations.  This is not to say that all current executives are outdated, but in many companies, they have failed to update their model of the world to match increasing numbers of their customers, and the incoming flock of engineers.

The fundamental issue is that people who have had success in the past have a hard time considering that what gave them the success in the first place is not likely to continue producing success.  As an example, existing business processes for tracking hours is typically to have each individual estimate ( after the fact ) how many hours they have worked on a specific project on a given day.  The current method, as best as I can tell, is for engineers to estimate via points how much time it takes to perform a given programming task and do a post-mortem if the task takes more points.  But this daily reporting is eliminated, which is a better, more efficient process.  It is also one that revolves around trusting the engineer.

Another example is that it is not uncommon for developers working on a project to push out information about that project to the public via Twitter.  Even down to the level of code commits.  For the users of that product, they can choose to follow the official company feed or they can decide to follow their favorite engineers.  The concept of privacy has been diminished to a large degree in modern companies.  The benefit of this is that users become partners, not only in the debugging and troubleshooting process, but also in the development and planning phases.  You can find, for just about any startup, engineers posting what features they are thinking about and feedback from engaged consumers, either providing amplifications, their own feature suggestions, or strong negations about where the company should be spending its precious resources.  In such an environment, extreme secrecy is a huge liability.  Likewise, within corporations, keeping the status of the company, and what the customers are saying about the products from the engineers is disastrous to engineers’ morale, as well as harmful to the level of understanding of the executives as to what is happening within the company.  In more modern companies, the developers are treated like the partners of the product managers and the executives.

I think most of the fallacy in this regard comes from the manufacturing metaphors that have dominated the majority of the corporate worlds’ view of software development.  When I look at the waterfall method, and some of the organizational structures around engineering departments, what I believe is being attempted is to reduce development to an assembly line with shift managers and the like.  This can’t really work for software engineering  for many obvious reasons, but probably the most obvious is that programmers, even self taught ones have more in common with lawyers than they do with assembly line workers.  Assembly line workers can highly optimize their tasks due to the extremely specific level of requirements, as well as the consistency in their tasks.  Developers, and the product people working with the developers, almost never have requirements detailed enough to complete the given task.  Similarly, developers have a wide latitude to perform tasks in different ways as tools, managerial practices and or technology change, which is nearly daily at this point.  While most manufacturing systems change once every 20 years or so, a particular manufacturing worker can master their skills and have that be applicable for their entire career.

Attorneys are typically highly specialized, and operate with a widely varying set of rules, like software engineers, they need to parse and execute on sets of specifications ( laws ) to the benefit of the person contracting or paying them.  Their interpretation of a given law may not always be standard, but if it achieves the intended goal, then they are considered successful.  This interpretation in law as in software engineering is more of an art than a science.  This variability in going about the job from day to day creates odd management challenges that are being exacerbated for software engineering management as the millennials come into the workforce.  To a large degree, having fewer, more productive, empowered engineers is obviating the need for traditional engineering management.  Of course someone needs to be accountable, but if you have small groups of developers, the group can be accountable for a specific feature.  Small groups of engineers make it easier for them to triage why something went wrong and prevent it from happening again.  Failure is part of the software development process, but it doesn’t have to be a destructive part.

Millennials, and their immediate predecessors appear to be very comfortable with dealing with this sort of environment, they do not seem to need clear guidelines or even a clear goal.  Many software projects that utilized the “agile” philosophy, which even itself is becoming dated, typically manage the process with smaller tasks that everyone in a company seem to be involved in creating.  The new crop of engineers seem to be more comfortable with the self-taught, with it being more about what you can show than what you have done.  Resume’s appear to be losing their value relative to a solid portfolio of open source work and products.  My advice to people in high-school and college about to enter the work force is to work on a portfolio of applications first, or contribute to some open source projects, even more than attempting to get an internship at some big company.  If they can make some money off their portfolio, all the better.  The teams appear to be more distributed, with wide acceptance that each individual is working on their own business ideas not related directly to the company’s goals, or product portfolio.

All of these things fly in the face of the traditional command an control structure, however I believe that it will speed the pace of innovation, and improve the overall level of developers.  Smart companies will harness this multitasking and openness and provide avenues for their developers to contribute new products under a “labs” or a “demo” banner, even if they have nothing to do with the products that the company makes.  These companies will not mind as one of their “labs” projects earns more than their flagship product, and will provide the creator of that product a team and budget to see how far they can go.  That will rapidly become the only way to retain talent as the cost of starting a business online continues to drop.  Executives at these companies will treat their developers as peers in strategy as well as in the software development lifecycle.  It will become clear that this method of structuring a business is correct when not the one, but the many startups offering services begin to completely demolish the incumbents.  It is going to be an interesting ride… are you ready?


The Battle Between Geeks and Non-Geeks

Posted: May 24th, 2010 | Author: | Filed under: android, Apple, Companies, Google, iPhone, Microsoft, Programming | Tags: , , , , , | No Comments »

This weekend, on a bike ride, I was thinking through the Apple vs Google situation, as well as the paid vs non-paid, and this whole concept of open systems vs closed and I came to the conclusion that it is really just about geeks vs non-geeks.

For about the past 20 years or so, computer stuff, anything digital really, has been produced primarily by the geeks at Microsoft, and later by various open source geeks around the world.  It was reflecting their world view, that everyone ought to be able to tinker, and that they might want to.  This caused the severe amounts of confusion that people have had for years.

It would appear that now that consumers have a clear and viable choice in Apple and the iPhone that they are choosing, in droves, really, the closed app store based system.  It would appear that consumers would prefer an app store to the open web, an individual coherent vision to multiple pieces of different developer’s visions of the optimal way to do x.  As Apple likes to put it, they want an appliance, in which applications are just another type of content, and all methods of doing anything are consistent.

I would say that consumers have chosen that, but not because Apple always provides a superior method, or that they like being closed an limited,  I would say that it is because Us, as geeks, have not done a good job of providing clear and usable alternatives.  For developers and geeks, configuration and making tons of choices are just table stakes for getting our devices and software working exactly the way we want them to work.  We have a difficult time creating things that violate the ability to choose a different way.  Part of that is that most of us never have the hubris to think that we can decide for others how to do a given thing, or which thing to choose.  But that is exactly what makes Apple more powerful than Google to the consumer.  Google is catching on, but in a way, at the same time they just don’t get it.

I, personally, understand and prefer many choices.  I like Mac OS X and Linux, particularly because there are so many different ways to set things up, the 3rd party developer community, around the Mac especially, have done an amazing job of filling in the usability gaps that Apple has left.  Should users choose these productivity enhancers, Apple has wisely seen fit to let the 3rd party devs keep doing their thing.  The problem with Android, and the internet in general is that most people are not like us.  They don’t want to seek out and try 5 different text editors and window managers, and text expanding solutions before finding the right one.  They want to just use it most of the time, and they would prefer if the base implementation didn’t suck.

Geeks, and Google, we would prefer to just let the base interfaces and systems suck, since our partners are either going to replace them, or augment them.  That is exactly what shouldn’t happen.  Technical solutions should be like European Socialism… The government provides a generally acceptable set of services that everyone pays for, but it is possible to get better solutions.  This provides something of a floor for service providers.  Likewise, if you are developing a music solution for example, provide a playback solution that works with it first, then give the ability to plug into other services if the user prefers.  That way, they aren’t left hanging initially.

Where I get frustrated with Apple, and where I continue to choose Google’s services, even they are less usable, are that they do not give me the latter solution.  They provide a kick-ass initial implementation, but when I want to go and replace or augment it, particularly around the iPhone ecosystem, there are no options, in fact, they go out of the way to defeat any other option.  If I wanted to use Apple’s music purchasing service, but I didn’t want to use the iTunes application, I am SOL.  Apple feels that they make the best music playback solution as well as the best service.  For some they may, but for me, I would much rather use AMAROK or something else to manage my music, inferior or no.  If I chose the other way, I might want to use Amazon’s MP3 service for buying, but iTunes for managing.  Apple should make that easy for me.

At some point, geeky companies like Google, and to their credit, they are starting to, need to create good baseline solutions that run up to, but stop short of competing with other products and services that are auxiliary to their primary product.  Apple needs to accept that people may occasionally choose to do their own thing and allow them to.

I do not buy the assertion that in order to provide a cohesive solution you have to block all others.  I feel that a system can be aesthetically pleasing and useful, as well as permissive.  Karmic Koala I think gets really close to being there, but there are still too many places that I can get into with the OS where regular users would go WTF?!!?

This is why I am continually working on a new OS that as an ambition would combine the completeness and ease of use of the Mac OS, but honor the internet, as well as user choice.  They are not mutually exclusive, and the only way to prove it is to build something that shows it.  It is a huge amount of work, which is why the only way to do it is open source, but since you have to make clear choices for the user, at least in the initial state, some stuff just couldn’t be committed.

Basically, end-users won’t realize the cost of the choices they are making until they are gone.  In a balkanized, app-store-ized internet, choices will be limited, prices will be high, and satisfaction will be generally low.  That is where we are going, that is the choice that users are making because they can’t wrap their heads around the internet.  It is our fault as geeks, and we are the only ones who can fix it.  The average user is going to pick the shiniest and easiest widget.  There is no reason we can’t make that.


The Future of The Internet May Not be HTML5

Posted: May 7th, 2010 | Author: | Filed under: CSS, JavaScript, Programming | Tags: , , , | 1 Comment »

A few days ago, Joe Hewitt wrote a Twitter tirade about how web development has been stifled by the glacial nature of innovation at the w3c which caused a lot of reactions across the web, even some from Google.  Joe Hewitt also quit developing for the iPhone because of the App Store’s policies.  I have been thinking for a while about this, and it is what makes me want to write a web browser.

I agree with Joe Hewitt about Cocoa, the framework is awesome, for someone who has been fighting browsers for control of the UI for years, it is like a breath of fresh air.  However, this is true for any native rendering solution.  It is part of what makes it hard for me to go back to developing web applications.  I like JavaScript, but HTML and CSS not so much.  Talking it over with friends, and thinking about it further, I think that HTML5 may be exactly the wrong direction for us to be taking the web in.  Before you click away, this is not some “Apple should allow flash” argument.  I am thinking about this on a deeper level, about the types of applications that we are making today on the web, and some of the issues we are bumping our heads against.

The web has been good at delivering applications with zero-install, as well as presenting formatted documents.  The latter is what HTML was designed for.  XHTML was created because HTML was overstepping its bounds.  Currently I believe, even though native developers tend to look down on web developers, that developing a web application is one of the single most difficult challenges for modern development.  There are multiple languages that one needs to master, each with a different metaphor, syntax, and implementation.  There is overlap between the languages.  There are latency issues, networking issues, lack of resources on the client, these are all incredibly difficult things to deal with in general even with native implementations, the problems with the web exacerbate these issues.

At the heart of the problem is that with native frameworks and systems, you expect for everything to be different as you move across platforms, business stakeholders have an appreciation that moving from a Windows app to a Mac app will be hard, and they will staff up and provide the appropriate resources to do that.  In truth, coding a cross-browser application is no easier, however the issue with web development is that it appears to be easier.  HTML looks like a ubiquitous rendering language, it appears as though it would work exactly the same across the board, but it doesn’t and it likely never will.  JavaScript appears to be the same language across the browsers, but nothing could be further from the truth, it performs, and behaves differently in each.  CSS seems like it would be identical since all browsers comprehend the same syntax, but the same style can appear vastly different across the browsers, and in some not appear at all.

That is the current situation, and we are pressing further into the problem instead of dealing with it.  My opinion is that HTML should be present in browsers as a legacy rendering system.  What I would like to see is a raw vector based rendering engine, similar to the canvas tag, as the browser view that will give me, as the remote agent, the size of the window and the capabilities of the browser, such as audio, OpenGL, Sound, DirectX, etc…  It should also tell me what the origin of the screen is, UL, UR, LL, LR so that I can give the correct rendering directives.  It should send me a list of the languages that are supported, or are enabled by the user, binary, javascript, ruby, python, etc…  Then the browser should progressively download the code and execute it as it receives complete instructions.  The binary stuff could be jitted using LLVM + an appropriate front end, and cached.  The memory addresses could be sandboxed and virtualized.  The user could set heap sizes for the amount of memory that the applications were allowed to use.  Google’s native client is a step in this direction, but it doesn’t go far enough.  Scripting language code could be executed pretty much as it is.  This would allow the frameworks to control everything about the experience, as opposed to the browsers.  Innovation could happen overnight, and browsers would be more responsible for enforcing security policies than rendering.

The benefits of this approach, full on applications could be developed as one stack and would appear on the client as the developer wished.  The performance would be insane, the execution environment would be simplified such that we could develop an adequate sandbox.  Authentication would be up to the developer and would be native, many of the security issues would go away.  One could code their application as code + data to render as pages easily.

What are the issues with this approach, no one has managed to build an adequate sandbox, however as we have seen JavaScript + HTML isn’t really a great sandbox either, there are tons of exploits out there.  The delay in downloading the initial code, although with progressive execution, this should be mitigated.  The biggest issue is lack of crawlability.  This is where XHTML 2.0 comes in.  If your content is available as resources through a service, instead of crawling your app, your content could be crawled.  This would dramatically improve the value of search engines.  If you give an appropriate resource id, the engine could point the user to a URI that would render the content in your application instead of raw, or the crawler could be an application that shows your data in a slightly different format.

I think that native jitted code + data mixed together are likely our future, especially watching how the App Store is taking off with consumers.  Even they seem to be choosing native applications delivered over the internet over web apps.  I think that this is a primitive method of what I am describing, but the benefits to the end user and for the user experience are clear.


Conflicted About App Store Policies

Posted: April 26th, 2010 | Author: | Filed under: Apple, Companies, iPhone, mides, Programming, Uncategorized | Tags: , , , | 2 Comments »

Last night I started down a train of thought that I wish I hadn’t. I started thinking about what the world would be like if Apple had been the dominant player, and Microsoft had faded away into semi-obscurity, if Linus hadn’t created Linux. What if the app store had come about years ago, and had become the primary method of reaching any significant number of users, with what other blogs are saying existing in their developer agreement.

What that future looked like was something that frightened and disgusted me in many ways. First and foremost, scripting languages, like Ruby, Python, Perl, and PHP would have been mostly prohibited on significant platforms, and thereby would have been relegated to mostly research oriented platforms. IE, no serious development of those languages would have taken place. Java would have been killed almost before it began, resulting in a much weaker web environment, as well as eliminating much of the boom that accompanied the web development land rush. Some very innovative companies would have had a much harder time achieving scale without the efforts of OSI around them, many of them would likely have never come to full bloom. Companies like Google and Amazon would have had to first develop their own operating systems free of Apple patent infringement, and free of the app store.

Much of the above is an argument for no software patents, which I generally agree with, but I think that isn’t where we should focus our attention. The main issue is that basically the fundamental structure that we all take for granted came about because there was always a viable alternative, that was open, and that the distribution of software was never limited or conflicted. Microsoft may have been many things, most of them negative, but one thing it got right was realizing that an open and free developer community is critical to the growth and improvement of the art. It will sometimes cause issues, and produce hideous products, but it is not the responsibility of platform companies to protect users from developers. Rather it is to assist in the developer-consumer conversation, especially as regards features and capabilities of the solutions being developed for them.

I actually hate Flash, I think it is outmoded and needs to go away, that being said, I can, and should be able to choose to develop solutions for my customers in whatever language or framework meets their needs. That choice needs to be made by the developer and the consumer of what that developer produces.

Apple has every right in the world to prevent developers and consumers from doing whatever Apple decides is wrong on their platform. That is their choice. Apple’s scale and access to customers, however is forcing am uncomfortable choice on their developer base. It is a choice that will itself go away if developers don’t do something about it now. It is the choice to either develop the way Apple wants, the solutions that Apple wants for it’s customers to have, or get off the platform and develop somewhere else. If developers don’t nurture alternative platforms, that ultimatum will become, either develop the apple way or don’t develop.

For those who think this is far fetched, Apple is poised to pass Microsoft in market cap, and probably has one of the strongest brands in history right now. They are almost the only game in mobile, with Android and Blackberry chasing, Palm, obliterated, and Microsoft marginalized. Mobile is every bit as important as desktop, in some ways more so.

My application, Mides, is actually being caught as collateral damage in this apparent developer agreement mess. It was my hope to create an environment in which developers could create and and test their web products using the scripting environment of their choice, be it ruby, php, or python. Apple had prohibited this sort of thing, by my interpretation, basically from jump, deciding that it was a feature that users of it’s products would never be able to have. That may have been an inadvertent choice, but it speaks to the types of use cases they have in mind for their devices, any uses that someone can come up with, even if there is a market for it, are prohibited. The end user volume that Apple has seems to say hay the end user likes this model, however I would argue that they don’t know what they are missing yet.

What does this amount to for me? Well, I am not going to make any overarching claims about developing for the Mac/iPhone platform, and I am not going to claim that I am going to stop using Apple products, they really are amazing products, but what I am going to do is vote with the only two voices I have, my money and my development efforts. I don’t like the way this app store pattern is going. I want a future where kids have access to modify and do crazy things with the devices and software that they use. I want for them, and for myself, to think differently, and try things that don’t work, or cause problems, because in the end, that is how humans learn. To have someone else decide for me what is safe, or what is cool, or how I should do what I do is the very anthesis of what I believe in. Designing amazing user experiences is one thing, dictating how I interact with the world through my computer and its peripherals, is completely different. I feel that Apple has pushed across the line of consumer advocacy, and has moved into something more sinister.

What I am going to do is to actively develop for other platforms, such as the web, Ubuntu, and Android, even though I am still angry with Google for banning me from their user group for no reason. The rationale behind my decision is that Google doesn’t control Android, anyone can fork it and do what they want. If I want to push out a beta, I can, if I find a bug I can push out a release in the morning and my users can have it in the afternoon. I am back in the loop with the conversation that my customers and I are having without having a disinterested intermediary in between. I will from now on, very carefully think about my consumption of Apple hardware, and their software and services, before buying them.

This line of thought completely knocked my Apple fanboy hat off, if Apple cares, and I hope they do, they will work to re-establish that childlike sense of wonder in me that I am developing for the best platform in the world, if not, it’s not a big deal, if I am alone in the way I feel, Apple has millions of developers and consumers, they don’t have to care about one, but I’m betting that I am not alone, and throwing all of our weight around is going to be a big deal to them. Apps make and break a platform, and by capriciously throwing away the developers of those apps, Apple is making a huge mistake.


Computer Science is Hard no Matter What Type of Human You Are

Posted: April 19th, 2010 | Author: | Filed under: Programming | Tags: , , | No Comments »

I read the NY Times’ article on women in computer science, as well as an excellent rebuttal by another blogger named Hillary Mason. I wanted to put my $0.02 cents in on the subject.

Basically computer science is hard. Are there issues for women? Sure there are. Are there issues for men? Sure there are. There are issues for everyone in choosing to become a software engineer, especially one who has a goal of building their own startup. There is going to be personal sacrifice, hard choices, and fighting to get through the glass ceiling. It is an incredibly competitive environment, and being a minority is an additional strike against you. I have found through experience that you just need to be better and work harder than everyone else. Does it suck, yes, is it fair no, nor should it be. It is just the way it is.

Creating some sort of affirmative action in the long run is a bad idea, so is segregating your potential startup from the system that is causing you problems. The goal is to integrate into the environment, not to stand apart from it. I have continuous issues balancing my family life with my professional life. Not to mention my mental health as well as needing to be continuously coding and reading to stay competitive. To claim that women can’t do this is counterproductive to the argument, plus just patently untrue.

In many companies for which I have worked, I have been the only African-American software engineer, but not because someone made a program for me to get me in, it was because at that time I was the best human being for the job. One day I hope to build a business of my own and run it, not as an African-American entrepreneur, although that happens to be what I am, but as an entrepreneur. I will sweat, sacrifice, and claw to do it. If I can’t get funding, then I will try something novel like charging from the start, and slowly building a business that is always profitable and always in the black.

My reaction would be to agree with Holly Madison, suck it up and get busy building a quality business based on your ideas. Know that it is going to be hard and that it is not going to be fair and that there will be times where you will be utterly alone and be the only one who believes in what you are doing. Know that you and your family will have to make terrible zero-sum-game type of decisions. This all comes with the territory for anyone. To complain that you didn’t come from Stanford, that you don’t have a computer science degree, that you can’t work 60-80 hours a week, that you are a minority, that you are a woman, are all just excuses. Get past them and get busy making something that no one can deny. The playing field is level enough that if you are careful and do things just right, something wonderful will happen.