Apr 27 2008

How To Kill A Community

If you don’t understand Open Source licensing, don’t start an Open Source project. Keep your code! ExtJS, a JavaScript framework for building business forms, recently made big news, the bad kind, when it changed it’s license from LGPL to GPL. ExtJS started as an extension to the Yahoo! UI library.

ExtJS had been in my radar for a long time, but I never downloaded it, used it, wrote about it, or contributed to the community in any way because since its foundation the licensing of the library seemed awkward to me. If my memory serves me right, earlier releases of ExtJS had interesting clauses that prohibited you bundling ExtJS in frameworks. For me, I keep on using jQuery and YUI.

Open Source is not so much about the code, it is about the community and how that community interacts with other communities. Open Source is community building. In this Age of Meetoo, companies are sprung with VC money simply by cloning services and products of other companies. Look at all the ‘social viral video sharing’ sites are just imitations of YouTube. In this age, the real value of code does not lie in the source code, the value lies in the knowledge and expertize of the community. The same can be said of a service, the value lies in the user base.

The folks behind ExtJS feel that this license change to GPL adheres to the quid pro quo principle. This is true if all you want is code, but community evangelism is worth is worth more than its weight in code. Look at the spectacular growth and good will around jQuery. For every one line of code in jQuery, there is at least one plugin written by a third party. For every one line of code in Ruby on Rails, there is at least one coder-blogger-evangelist promoting the framework.

It is true that you can shoot yourself in the foot with just about any programming language, but with changing the license of an Open Source project you can shoot your whole community, execution style.

Graeme Roche, project leader of Grails, said, “What they have effectively done is built up a community, taking full advantage of the open source model by accepting user contributions and patches and then turned around and kicked their own community up the backside.”

Jack Slocum, the lead developer and founder of ExtJS, responded to all the criticism on his blog. Jack complains, “Shortly before 1.0 is released, there numerous Ext “clones” started popping up that were hacking Ext themes.” Other developer hacking, learning, promoting, evangelizing, and cloning is the great benefit of releasing an Open Source application, ExtJS itself was a ‘clone’ and a hack of Yahoo! UI.

What I find interesting of the whole event is that this is history repeating itself. This is not the first time nor will it be the last time that some organization has leverage a license for some perceived monetary benefit.

What follows is a pretty comprehensive list of articles that talk about the recent ExtJS license change.

Technorati Tags: , , , , , , , ,


Apr 22 2008

Startup School 2008

The Startup School 2008 is a one day conference geared towards entrepreneurs put together by the folks behind YCombinator. This year the speakers included David Heinemeier Hansson creator of Ruby on Rails, Mike Arrington founder of TechCrunch, Paul Graham founder of YCombinator, Peter Norvig Director of Research of Google, Paul Buchheit of GMail/FriendFeed, Greg McAdoo of Sequoia Capital, Marc Andreessen of Netscape/Ning, Jeff Bezos founder Amazon, Sam Altman founder of Loopt, and Jack Sheridan from Wilson Sonsini.

Here are some of the advice given to the entrepreneurs and starter-uppers present.

When going in the wrong direction, it doesn’t matter how fast you are going.
Peter Norvig

Data is more agile than code.
Peter Norvig

Semantic Web; the future of the web, and it will always will be.
Peter Norvig

The odds are not created equal.
David Heinemeier Hansson

Often the simplest idea in the world, like treating your customers nicely, while still asking for money for what you do, can work. And you can build great businesses like that.
David Heinemeier Hansson

Make something people want.
Paul Graham

If you are really committed, and your startup is cheap to run, you become very hard to kill.
Paul Graham

Be soo good that they can’t ignore you.
Marc Andreessen

Always have a blog, always have twitter, always be part of the discussion.
Mike Arrington

Embrace criticism. … Don’t embrace the trolls.
Mike Arrington

We are more innovative, and do more interesting things if we stay customer focused instead of competitor focus.
Jeff Bezos

Invites are good to keep users away.
Paul Buchheit

I think, unfortunately, in startup and probably in all other worlds there is like this cargo cult tendency where they see something successful and they immediate the superficial attributes of it, like they say ‘oh that site has like a rounded logo, that must be the key to success.’
Paul Buchheit

More people, if they are really good people, I found I never really had problem figuring out what to do with. More really great people, if they are great they can take care of themselves.
Paul Buchheit

Funding does not make you successful.
Sam Altman

Create some Sand Hill Buzz around your deal. Make investors feel like if they don’t act fast, they’re going to miss the next Google.
Sam Altman

If you can get your company and your space talked about at drinks on Friday afternoon at Four Seasons in Palo Alto, that is a net win.
Sam Altman

1 – Market. 2 – Team. 3 – Product. 3.5 – Revolutionary, not incremental.
Sam Altman

Surf someones else’s wave.
Sam Altman

Raise 2x what you think you need.
Sam Altman

A great surfer can’t exist without a great wave.
Greg McAdoo

If you want to build a truly great company, you have to ride a really big wave and you got to look at market waves and technology waves in different ways than other folks and see it happing sooner and know how to position yourself out there.
Greg McAdoo

Don’t get it perfect, get it good enough, get it out there, listen very carefully, and make changes very quickly.
Greg McAdoo

Video of the Startup School 2008 is available on Omnisio, a YCombinator company.

Technorati Tags: , , , , , , , ,


Apr 16 2008

Running with Shoes – Form and Function

The Shoes microframework has a small number of succinct data entry controls. Essentially you can create User Interface forms and screens with buttons, text fields, text areas, and select options.

All of the Shoes UI controls can have associated code blocks that execute when the control changes. For example, lets create a text field in Shoes, default it with a string value, and print the current text in the console when someone edits the text field. Here is the code that does what we want!

[source:ruby]
Shoes.app do
stack do
@text = edit_line :text => “Default Value” do
puts “Text Changed To: #{@text.text}”
end
end
end
[/source]

Notice that the method edit_line creates a text field. The method edit_box create a text area, and edit_list creates a select box. To create a button, simply use the aptly named button method.

Lets create a little more elaborate Shoes UI example. Lets add a text field, selection list, and button in a Shoes canvas. When the button is pressed, we will set the text field with the value of the currently selected value in the list.

[source:ruby]
Shoes.app do
stack do
@text = edit_line
@list = list_box :items => [‘Apple’, ‘Orange’, ‘Guava’]
button ‘Update’ do
@text.text = “You Selected: #{@list.text}”
end
end
end
[/source]

Lets create another Shoes example. This time lets dynamically update the available items in a list when a button is pushed. Here is the code for this scenario.

[source:ruby]
Shoes.app do
@counter = 0
stack do
@list = list_box :items => [@counter.to_s] do
puts “list changed”
end
button ‘Add To List’ do
@counter += 1
# Pushing new item to array does not update list
# To update list values call items=
@list.items = (@list.items < < @counter.to_s) end end end [/source] Notice that for to update the available values in the list, you need to call the items= method. To create a text area use the edit_box method. Like the edit_line, edit_box accepts a code block that is executed every time the text is modified. As expected, you can set the edit box height and width. The height needs to be an integer number of pixels. The width can be an integer number of pixels or a decimal (0.0 - 1.0) for the percent of the available space. For example, to create a text box that is 200 pixels high and takes up 50 percent of the available canvas width we can use code like the following. [source:ruby] Shoes.app do stack do @box = edit_box 'Default', :width => 0.5, :height => 200 do
puts @box.text
end
end
end
[/source]

All Shoes UI control widgets, and shapes for that matter, can be made to hide, and appear by invoking the hide and show methods respectively.

As of this writing, Shoes does not support checkboxes, radio buttons, tabs, or tables.

There are more Shoes GUI tutorials and code samples here.

Technorati Tags: , , , ,


Apr 14 2008

Ruby Web Frameworks

Ruby on Rails is perhaps the most popular Ruby-based web framework, but it is not the only web framework that is available to fellow rubyist. In fact there is a growing number of alternative Ruby Web Frameworks. In not particular order, here is a short list of my top favorite Ruby web frameworks.

Ruby on Rails – Rails is a full-stack framework for developing database-backed web applications according to the Model-View-Control pattern.
Nitro – Nitro provides everything you need to create state-of-the-art Web 2.0 applications with ease and joy. Nitro applications are written using Ruby (server side) and Javascript (client side).
Camping – Camping is a web microframework which consistently stays at less than 4kb of code.
Merb – Like Ruby on Rails, Merb is an MVC framework. Unlike Rails, Merb is ORM-agnostic, JavaScript library agnostic, and template language agnostic, preferring plugins that add in support for a particular feature rather than trying to produce a monolithic library with everything in the core.
Waves – Waves is feature-rich, compact, and extensible. Waves is thread-safe, hot-patchable, and supports easy clustering. Waves relies on best-of-breed Ruby libraries, including Rack, Sequel, and Markaby among others.
Ramaze – Ramaze is a simple, light and modular open-source web application framework.
Sinatra – Sinatra is the easiest way to create a Fast, RESTful, web-application in Ruby with few dependencies, setup, and LOC.

Technorati Tags: , , , , , , , ,


Apr 13 2008

The Ruby and Rails Library

I own my personal and private Ruby and Rails library. If I haven’t misplaced any of my books, I currently have ten of the top Ruby and Rails books. From each book I have learned something new about Ruby and Rails. If you are a new programmer learning Ruby or Rails, you don’t need all of these books. For a new Rubyist, I simply recommend any one Ruby and one Rails book from the list below.

Ruby and Rails Books

Ruby
Ruby In A Nutshell, Yukihiro Matsumoto, David L. Reynolds
Programming Ruby
The Ruby Way, Hal Fulton
Practical Ruby Gems, David Berube
Making Use of Ruby, Suresh Mahadevan, etc.
Ruby For Rails, David A. Black

Ruby on Rails
The Rails Way, Obie Fernandez
Agile Web Development with Rails, Dave Thomas, David Hansson, etc.
Ruby on Rails: Up and Running, Bruce Tate, Curt Hibbs
Rails Recipes, Chad Fowler

I plan to add the following books to my growing Ruby and Rails library.

The Ruby Programming Language, David Flanagan, Yukihiro Matsumoto
Beginning Ruby: From Novice to Professional, Peter Cooper
Learning Ruby, Michael Fitzgerald
Flexible Rails, Peter Armstrong
Advanced Rails Recipes: 84 New Ways to Build Stunning Rails Apps
Design Patterns in Ruby, Russ Olsen


Apr 8 2008

Google App Engine Analysis

Technology pundits and developers alike are busy writing and speculating about Google’s latest SDK, Google App Engine, before they actually write code. People are speculating that this will position Python as the dominant dynamic scripting language for the next hype cycle. Other have mentioned that this is Google’s entry into cloud computing, web services, and application hosting. I think that App Engine is a large overarching endeavor that will eventually compete with many different and distinct entities.

In one hand, as a SDK, App Engine will compete against the myriad of Java, PHP, and Ruby frameworks. If Google delivers on its promises, App Engine will have the performance and scalability of Java and the development ease and joy of Ruby on Rails. As choosing, Python for the default language, App Engine places Python against Ruby for the dynamic scripting language of choice amongst developers.

From another perspective, App Engine will eventually complete with any application hosting environments like Amazon Web Services, Salesforce AppExchange, and hosting vendor like TextDrive Accelerator.

In my mind, there are still many unanswered concerns, for example, to use a App Engine application end users log in with Google credentials. Are those your users or Google’s? App Engine also opens a lot of privacy concerns for all parties involved. I would also be concerned with intellectual property and data rights and ownership.

Google App Engine is a multi-headed, multi-dimensional paradigm shift. Within a day of its release, there are already 10,000 developers hacking away at a web application that will eventually run App Engine, for me, that is instant success!

For additional analysis and insight into Google App Engine, take a look at the following articles.

Developers, start your engines
App Engine: Host Your Apps with Google
Google App Engine: An Early Look
Google Jumps Head First Into Web Services With Google App Engine
Experimenting with Google App Engine
Google App Engine – Changes Everything
Google AppEngine – A First Look
Google AppEngine – A Second Look
Has Google’s AppEngine Annointed Python as the New Web Standard?
Google’s plans for App Engine
Google gives Web developers a leg up with App Engine
Is Google App Engine HuddleChat a Campfire Rip-Off?
Our Experience Building And Launching An App On Google App Engine
Why not PHP for Google’s App Engine?
Batteries sold separately
Using Appengine with Django, why it is pretty much unusable
Google App Engine alluring, will be hard to escape
Google App Engine – One Trick Pony
AppEngine – Web Hypercard, finally
Clouds Rolling In: The Google App Engine Q&A
Ning (1.0) Was Too Early
AWS vs Google App Engine
Google App Engine for developers
Google App Engine: Free and still barely worth it
Getting Started on Google App Engine with Flex and PyAMF
Google App Engine – When will programmers learn that a language is just a tool?
Building Flash applications with Google App Engine
App Engine and Pylons

Technorati Tags: , , , , , , ,