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

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: , , , , , , ,

Google App Engine

Google has just made available a preview release of Google App Engine. Google App Engine is an application programing environment built with the same scalable technology and infrastructure that runs some of Google’s applications. App Engine is available as a Software Development Kit (SDK). Once an application is developed for App Engine, it can them be uploaded and hosted by Google. A application written for App Engine will run for free on Google’s bandwidth and computing power.

The initial preview release of Google App Engine is only available for 10,000 developer, and as of this writing their are no more available slots. At this time, App Engine applications are limited to 500MB of storage, 200M megacycles of CPU per day, and 10GB bandwidth per day. This configuration is expected to serve up to 5 million page views per month.

App Engine hides a lot of the mundane technical challenges a web developer worries about, such as coding, debugging, configure Apache web servers, setting up a SQL database, creating database tables, sharding the database, running scripts, pushing out new versions, monitoring performance, scaling, and version control you system. App Engine is a simple alternative to the LAMP stack. Google App Engine will facilitate and simplify web application development to the masses.

For the initial release, the App Engine Stack includes a scalable serving infrastructure, Python runtime, SDK, web-based admin console, and datastore. The Google App Engine environment is based on many of the same technologies that make Google work, such as Python, Google File System, Bigtable, Google Accounts, and Google Apps. It is also worth noting that Python is only the first language with App Engine support, expect Google to make an SDK available for other languages such as Java.

Google engineers have stated that App Engine will not make any restrictions on code, modules, and frameworks. You should be able to run any JavaScript, HTML, CSS, and Python framework. In fact, there are tutorials for running Django on App Engine.

Features that might be available in future releases of App Engine is support for large upload/downloads, support for other languages, offline processing and the availability of additional capacity for a fee.

Here are additional links, resources, and tutorials to help you get started with Google App Engine.

Google App Engine
Google Code: App Engine
Google Groups: App Engine
Google App Engine Blog
What Is Google App Engine?
Google App Engine: Getting Started
Running Django on Google App Engine
Bigtable: A Distributed Storage System for Structured Data
The Google File System
App Engine App Gallery

Here is a video presentation of Google AppEngine from Google Campfire One. The video has a live development demo and a lot of technical information.

Technorati Tags: , , , , , , ,

YouTube and Picasa Web API Hackathon

Last week I had the pleasure of attending the YouTube / Picasa Web API Hackathon at Googleplex. Google is always a great host and they provided food, t-shirts, and even raffled a pass to Google I/O.

The hackathon started out with presentations by folks on the Google Data (GData) team. All of Google application make their data available through the GData API. GData is available in different formats including RSS or Atom. Every data point of Google’s applications are made available through GData, for example YouTube user profiles, video data, play lists, subscriptions, and video views can be accessed via GData feeds. The GData API does allow application developers to read and write data to Google Applications, but write operations require authentication. For example, uploading a new video, modifying video metadata, or writing comments requires authentication. For web applications or services that need to be authenticated by GData API they need to use AuthSub. AuthSub redirects the end user to a Google site for the end user to log into Google and then Google forwards back to the requesting site with a valid authenticated token. The GData team strongly discourages (or disallows depending on who you ask) for third party application, services, or developer from collecting Google user credentials. Since AuthSub requires the user to login at a Google site, third-party applications don’t need to collect Google credentials.

As I mentioned earlier, GData can be delivered via RSS or Atom. Because YouTube and Picasa describe media files such as videos and images, those APIs also use Media RSS.

Geoff Stearns, Flash hacker on the YouTube team, talked about the YouTube Player API. The embeddable YouTube player can be customized and configured with parameters in the video url. Parameters include rel, autoplay, loop, border, and others. Rel is a boolean value that indicates if you want related videos to be displayed in the ‘genie menu’. Autoplay indicates is a boolean value that indicates if the video should play once loaded. In addition to player parameters, the YouTube player can be manipulated via JavaScript. The YouTube player can be made to play, pause, stop, mute/unmute, get/get volume, and seek ahead in the player. It is incredible easy to manipulate a video through the YouTube Player API, you can build your own video controls with JavaScript. Since the YouTube player can be manipulated entirely via JavaScipt, developer have an option to building their own video player with their own custom controls with the YouTube Chromeless Player.

Geoff has a kewl mashup example between YouTube JavaScript API and Google Maps. The mashup is a on board video of a race in San Francisco. As the video proceeds it updates the Google map as of the location of the camera, in essence you get a street view of the race and a aerial view of the race track.

Technorati Tags: , , , , , , , , , , , ,

Running with Shoes - Tasty Text

The Shoes toolkit has a nice rich text format support. At first sight it might seem that Shoes text support borrows a lot from HTML, for example the most commonly used text block is para. In addition to the paragraph text block, you can use banner, title, subtitle, tagline, caption, and inscription.

shoes toolkit text block

As you can see banner is the largest text block, followed by tittle, etc. The default size for banner, title, subtitle, tagline, caption, para, and inscription is 48, 34, 26, 18, 14, 12, 10 pixels respectively. You can also change the default size of a text block by using the optional size parameter.

Most often you will use the paragraph text block. If you have to display a great amount of text on a paragraph you pass in variable number of strings parameters.

In addition to text blocks, Shoes supports text formats such as strong, em, code, ins, span, sub, and sup. Here is an example of using a paragraph block with all of the text formats.

shoes toolkit text format

In addition to simple text blocks and text formatting methods, you can create hyper links. Just like the hyper web, links can execute some event or code.

The above code creates a link and assigns it to the hyper_link variable. The link is later passed on to the paragraph block for display. If you click on the link ‘link pressed’ will be printed on the terminal console.

In addition to executing custom code when a link is pressed, you can also launch the default browser if you use the click parameter. The code below displays a link and when pressed it will launch the Firefox or your default browser to the given URL.

All the text formatting methods also accept an option stroke parameter to sent the color. Here is a simple example of using color with your text.

Here is a recap of the available methods for working with text with the Shoes toolkit.

Text Blocks:
para, banner, title, subtitle, tagline, caption, inscription

text formats:
strong, em, del, ins, link, span, sub, sup

There are more Shoes GUI tutorials and code samples here.

Technorati Tags: , , , , , ,

Peopleware

I am going to cunningly place a copy of Peopleware: Productive Projects and Teams by Tom DeMarco and Timothy Lister on my boss’ desk. Peopleware is an insightful book on software project management and many of the advice on Peopleware resonated well with me. The undertone of the book is aligned with eXtreme Programming (XP), even though the book was written well before XP became a popular methodology. The books explores many elements that are required to manage a successful software development team. For one, the team needs to feel as part of a community, as part of an elite group doing something truly special. For me, the big watershed moment reading this book was when I realized that software development is a social endeavor. We might all romanticize with the idea of the lone hacker working late in to the night, but in practice every software product needs a large community to truly flourish. Even those Open Source developers working on the source code on their own need a community of users.

Peopleware also talks about organization learning. Within an organization, it might seem obvious to have people learn new technologies and skills. But it is equally important, and perhaps not so obvious, it is important to retain those people with new skills. The greatest investment a company has is its human capital, the greatest challenge a company has is to know how to invest it.

Here are some of my favorite quotes from the book.

People and Performance

The business we’re in is more sociological then technological, more dependent on workers’ abilities to communicate with each other than their abilities to communicate with machines.

Someone who can help a project to jell is worth two people who just do work.

Two people from the same organization tend to perform alike.

The people who write the Methodology are smart. The people who carry it out can be dumb.

People under time pressure don’t work better, they just work faster.

Count on the best people outperforming the worst by about 10:1. Count on the best performer being about 2.5 times better than the median performer.

People who had ten years of experience did not outperform those with two years of experience.

There was a very weak relationship between salary and performance.

The total cost of replacing each person is the equivalent of four-and-a-half to five months of employee cost or about twenty percent of the cost of keeping that employee for the full two years on the job.

Productivity and Quality

Productivity within the software industry has improved by three to five percent a year, only marginally better than the steel or automobile industry.

Productivity ought to mean achieving more in an hour of work, but all too often it has come to mean extracting more for an hour of pay.

Throughout the effort there will be more or less an hour of undertime for every hour of overtime.

The trade-off between price and quality does not exist in Japan. Rather, the idea that high quality brings on cost reduction is widely accepted.

Quality is free, but only to those who are willing to pay heavily for it.

We all tend to tie our self-esteem strongly to the quality of the product we produce - not the quantity o product, but the quality.

While machines have changed enormously, the business of software development has been rather static. We still spend most of our time working n requirements and specification, the low-tech part of our work.

If you are charged with getting a task done, what proportion of your time ought to be dedicated to actually doing the task? Not one hundred percent. There ought to be some provision for brainstorming, investigating new methods, figuring out how to avoid doing some of the subtasks, reading, training, and just goofing off.

Managment

Most managers give themselves excellent grades on knowing when to trust their people and when not to. But in our experience too many managers err on the side of mistrust.

The manager’s function is not to make people work, but to make it possible for people to work.

Second Thermodynamic Law of Management: Entropy is always increasing in the organization.

Technorati Tags: , , , , , ,

previous posts »
« newer posts