By Sarah | November 15, 2010
It was refreshing to hear a white man talk about diversity last week in a keynote address given by Dave Thomas at RubyConf 2010. Just one part of his keynote focused on diversity, specifically on gender diversity. This is was in stark contrast to the second day’s keynote by David Hansson (aka dhh), the engineer who created the initial Rails implementation and still leads the core team. David Hansson’s keynote was quite different. While both talks dove into technical details at times, Dave Hansson’s talk aimed to shock or titillate the audience, whereas Dave Thomas aimed to inspire. David Hansson seemed lazy by resorting to analogies of recreational drug use and airport body searches. It is much harder to inspire people. David Hansson has done lot of great work with Rails, but I think he could be more ambitious. I think he could do something awesome if he got outside of his comfort zone. There are more subtle and powerful forms of liberty than those he referred to in his talk.
Dave Thomas cited US labor statistics of women making up 47% of the workforce. Of people working in computing or mathematics, there are only 25% women. (For those who don’t know, it is a strange fact that today about half of math majors in the US are women, but only 14% of the CS majors are women. Over the past 20 years the percentage of women studying math has steadily increased, while the percentage of women studying CS has fallen, after peaking at around 45% in the mid-80s.)

Dave also pointed out that the conference had 5.6% women, which is actually a positive stat given that the number women in open source is typically lower. (EU report found 1.5% Women in FLOSS.) I’d like to think Ruby is changing the open source stats, but maybe it is a reflection of Ruby’s adoption in larger companies. I don’t know.

On my request, Dave posted complete slides which cover these and other topics.
I was honored that Dave reached out to talk to me while preparing for his keynote. We had a good conversation then and subsequently at the conference. I find it heartening that gender diversity in computer science is no longer just a women’s issue. Before Dave even talked to me, he had decided to call this section of his talk “inspire someone.” He ended it by quoting me, challenging the audience to “inspire someone who is not like you.” Imagine If each of us found one women who wanted to be a software developer and taught her how. The problem would just evaporate.
In summary, here’s a few steps you can do:
- teach a woman (or girl) to code
- teach someone who has a different skin color, educational background or speaks a different native language than you
- write about what you know
- speak about what you know
- get outside of your comfort zone
- hire an intern
- if you teach or organize for-pay events, advertise at least one scholarship spot to increase diversity in your community
- volunteer at a school
- seek to inspire someone not like you
“Pioneering happens when you don’t have to do it perfect, you just need to survive…and remember it is supposed to be fun” — Dave Thomas
By Sarah | November 13, 2010
At RubyConf this year, we hosted a Kids Track. One of the activities was to make web adventure games.
If you want to make a Pie game, go to the pie-bakery. If you have questions about creating games with pie or suggestions for improvements, you can sign up to this google group and post questions or ideas via the web or email.
Check out the games that the kids made this week:
I also gave a talk at the conference about the making of Pie. Here are the slides from the talk:
Here are github repos:
# this lets you do local pie development, generates a Sinatra-based webapp
http://github.com/blazingcloud/pie
gem install pie
https://github.com/blazingcloud/pie-bakery
http://pie-bakery.heroku.com # hosted IDE (build in Rails)
http://github.com/blazingcloud/mobile-pie # uses Rhomobile to create an app for any SmartPhone platform (tested on iPhone and Android)
rake run:iphone
rake run:android
We just created a pie-cooks google group for people who are working on creating/improving Pie.
Pivotal Tracker project:
https://www.pivotaltracker.com/projects/115060
By Sarah | November 6, 2010
Thanks to the support of the RubyConf organizers and a core group of dedicated engineers we are putting on a parallel track at RubyConf with activities for kids. The kids signup already went out on the conference list, but I’m posting more details for everyone here and in case some parents missed the initial call for participation!
Kids 10 and up whose parents are comfortable with them being responsible for themselves can attend on their own. Younger kids must be accompanied by a grown-up who is welcome to learn to code or just hang out and have fun.
Details of activities subject to change based on the inspiration of the volunteers and ideas from the kids. Kids should have had breakfast and bring lunch money — the group will go out to eat or head down to the hotel restaurant since catered lunches are crazy expensive at the hotel.
Schedule
- 10:30am start (after the keynotes / lightning talks and so kids don’t have to wake up early!)
- Activity 1
- noon – 1:30 lunch
- Activity 2
- 3pm snack
- 3-6pm open game play: board games, puzzles, xBox and Wii
- 6pm show & tell open house
Planned Activities
- Pixel Loops (aka Distributed Ruby Processing) – this is a group activity where kids can send commands for drawing lines and shapes and they will all show up on the big screen
- Interactive Graphics projects – we’ll split into small groups to create dynamic patterns with shapes and color (check out this example – hint roll over the pattern with your mouse to change it)
- Web adventure games with Pie, here is a simple example
- Building circuits with flashing lights and other physical effects that can be controlled by the computer. We’ll have some kits already put together, but older kids can learn to solder partnered with a grown-up.
The organizing team:
Thanks to our sponsors:




If you would like to join our list of fabulous sponsors please email me: sarah (at) ultrasaurus (dot) com or you can send a personal donation through RailsBridge.
By Sarah | October 31, 2010
Last week I participated in a Workshop on Mobile Software Engineering as part of the MobiCASE conference. I had agreed to be an organizer last summer upon the request Martin Griss. I was intrigued by the topic, but didn’t have a clear vision of what might come of the workshop. I applaud Martin’s facilitating an engaging discussion.
What is different about mobile? and what does it mean for software engineering in general and education specifically?
I appreciated Tony Wasserman proposing his list of what was unique to mobile. After a lively discussion, there seemed agreement that mobile had just a few unique aspects, but the rest were significant due to the degree of constraint or opportunity offered by mobile platforms. Aspects below are quoted from the Wasserman paper which summarizes results from his survey of mobile developers, with additional comments from me and the addition of privacy, personal and “always on” which were raised at the workshop.
Unique aspects:
- Real World Interaction. “Sensor handling – most modern mobile devices, e.g., “smartphones”, include an accelerometer that responds to device movement, a touch screen that responds to numerous gestures, along with real and/or virtual keyboards, a global positioning system, a microphone usable by applications other than voice calls, one or more cameras, and multiple networking protocols.”
- Always On. One participant remarked “I’m interacting with my phone right now” — with the device out of sight, tucked away in his pocket, he noted that the vibrate option and connectedness of the phone were a key part of the interface which provide phones with unique capabilities.
- Personal. Mobile devices are true personal computers. People rarely, if ever, share mobile phones. Unlike so-called personal computers which may sit in a living room, lab or café to be used by various individuals, the cell phone is typically tied to an individual who has a phone number, contacts and other very personal, private information stored on their device. The device can also act as an agent, taking messages or notifying the individual upon significant events, such as a phone call or that crops are ready to be harvested in an online game.
Significant Aspects:
- User interface. Tony contrasts “that with a custom-built embedded application, the developer can control all aspects of the user experience, but a mobile application must share common elements of the user interface with other applications and must adhere to externally developed user interface guidelines.” However, this is is a similar constraint to desktop applications. I believe that the small form factor combined with very high resolution screens that we see in today’s devices actually presents opportunity for innovation around visualization and task-oriented user experiences.
- Privacy. The constraints and abilities differ a little between mobile platforms in terms of access to information; however, the models are starkly different from the allow-everything model of the desktop and rigidly sandboxed web applications. Mobile applications, like web applications, have free access to the network but can contact any host and exchange any information with no requirement for user notification. Access to certain sensors like geolocation and private data like contacts do typically require approval, but once given we have no additional control and must simply trust the application to do the right thing. There are not yet clear guidelines around what is and is not appropriate in terms of data collection and tracking. There is also room for user interface innovation of how we might let people know what information is shared and what is private.
- Complexity of testing. “while native applications can be tested in a traditional manner or via a PC-based emulator, mobile web applications are particularly challenging to test. Not only do they have many of the same issues found in testing web applications, but they have the added issues associated with transmission through gateways and the telephone network.”
- Power consumption. “many aspects of an application affect its use of the device’s power and thus the battery life of the device. Dedicated devices can be optimized for maximum battery life, but mobile applications may inadvertently make extensive use of battery-draining resources.” A workshop participant noted that with the popularity of laptops, some desktop applications and certainly desktop operating systems have started to take into this into account in software design; however, this is clearly a more significant factor influencing mobile application design.
- Interaction with other applications “most embedded devices only have factory-installed software, but mobile devices may have numerous applications from varied sources, with the possibility of interactions among them;” however, desktop and web applications more routinely interact.
- Native and hybrid (mobile web) applications “most embedded devices use only software installed directly on the device, but mobile devices often include applications that invoke services over the telephone network or the Internet via a web browser and affect data and displays on the device.” We saw this in hybrid CD-ROMs and many desktop applications today; however, the prevalence of connectedness and web integration in mobile applications is unrivaled.
- Families of hardware and software platforms. “most embedded devices execute code that is custom-built for the properties of that device, but mobile devices may have to support applications that were written for all of the varied devices supporting the operating system, and also for different versions of the operating system. An Android developer, for example, must decide whether to build a single application or multiple versions to run on the broad range of Android devices and operating system releases.” While analogous to variety of desktop hardware and software platforms, the diversity of mobile devices and operating systems is much more significant.
- Security. “most embedded devices are ‘closed,’ in the sense that there is no straightforward way to attack the embedded software and affect its operation, but mobile platforms are open, allowing the installation of new ‘malware’ applications that can affect the overall operation of the device, including the surreptitious transmission of local data by such an application.”
So, mobile is different, but what does that mean for software engineering?
I enjoyed Martin’s analogy to the advent of object-oriented software development which was necessitated by the complexities of applications with a graphic user interface. The preceding work in command line programs just did not need that level of abstraction; however, once invented, object-oriented programming patterns are effectively used for every type of programming challenge. Perhaps the constraints of mobile development will offer similar innovation. I think we are seeing a glimpse of that with web development patterns being applied to mobile user interface development with native mobile apps using HTML, CSS and the web pattern of model-view-controllers with screens addressed by internal URLs. I wonder if there are other emerging patterns as well.
At the end of the workshop, I voiced the opinion that while the conversation was interesting, there was no urgent question raised. Upon reflection, I have changed my mind. There is an urgent need for research into how to take advantage of emergent capabilities which will not be mainstream for many years. While industry implements obvious ideas taking advantage of now prevalent infrastructure and popular devices, many challenges and opportunities are ignored. Just as Doug Engelbart’s Augment system and Ivan Sutherland’s Sketchpad leveraged what was then enormous compute power to lay the foundation for what became ubiquitous patterns in modern desktop GUI, there is an opportunity for universities and research labs to create applications and patterns of user experience and software component design that could revolutionize how people use mobile devices in ten or twenty years.
By Sarah | October 16, 2010

An observation on bug fixing by new programmer @silverspin7987
By Sarah | October 7, 2010
I used to go to SIGGRAPH back in the ’90s where some of the graphics geeks would put together interactive exhibits specifically targeted at kids and the older kids would play with and create magical things using the latest tech. I got to wondering whether we could do such a thing Ruby-style at RubyConfX and perhaps inspire a new generation of hackers. Here’s an outline of the idea:
3 days of structured play with a few group projects or interactive presentations by Rubyists. Every kid brings a laptop. Kids 10 and up whose parents are comfortable with them being responsible for themselves can attend on their own. Younger kids must be accompanied by a grown-up who is welcome to learn to code or just hang out and have fun.
Ideas for projects / interactive presentations:
The big question is…. are there folks going to Ruby Conf X who have kids of an age to code who would be interested in bringing them along and participating? I’ve got one interested and enough grown-ups willing to help. If we have at least 3 or 4 kinds with some cross-over in age, then we’ll give it a go. Send email to sarah _at_ ultrasaurus (dot) com or tweet @ultrasaurus with the age of your kid(s) and any relevant info, like what games or code-like stuff they are info.
By Sarah | September 22, 2010
I think Rails 3 is awesome and kudos to the core team and hoards to contributors that made it happen. However, I am sad that it has gotten more verbose to create a Rails app from scratch. I know not everyone likes scaffold and not everyone uses rspec, but this is a common use case, and it gets a little worse if you use cucumber, like we do in the workshops. In fact any test framework gem dependency is going to have this kind of a problem. I teach novices periodically and frequently use scaffold in my own work for prototyping and for experimenting with new gems. The fact that I have to open up an editor and modify my gem file creates a context switch, plus I’ve got a couple of extra commands to type. There used to be 6 commands, now there are 8 to get the most basic webapp running. I think we can do better…
———– old steps ————–
$ rails myapp
$ cd myapp
$ script/generate rspec
$ script/generate scaffold note title:string content:text
$ rake db:migrate
$ script/server
———– new steps ————–
$ rails new myapp
$ cd myapp
$ vi Gemfile
group :development, :test do
gem ’sqlite3-ruby’, :require => ’sqlite3′
gem “rspec-rails”, “>= 2.0.0.beta.22″
gem “webrat” # currently generated view specs require this
end
$ bundle install
$ rails generate rspec:install
$ rails generate scaffold note title:string content:text
$ rake db:migrate
$ rails server
I wonder if there should be something like the git config command. Such as:
rails gem rspec
Ideally it would run the generator if there is one and edit the Gemfile. Ideally it would allow the specification of multiple gems with an optional parameter to call bundle install at the end:
rails gem rspec webrat –install
This would allow all of the goodness of bundler without the cognitive overhead (till you need it).
By Sarah | September 12, 2010
Is there anything special about mobile software development or is it the equivalent to developing for a very small laptop? Do the devices and capabilities imply different patterns and processes? Are there any implications for research and education?
The Workshop on Mobile Software Engineering in conjunction with MobiCASE 2010 will be exploring these questions. Martin Griss and Ray Bareiss from Carnegie Mellon are chairing the workshop. I’m on the organizing committee and look forward to hearing from other people in the field. At time I think the answers are obvious, but then find that other people come to different conclusions. It is sure to be an interesting conversation.
The call for papers has been extended till Sept 28 to invite additional participation. Please join us.
By Sarah | August 31, 2010
I’m excited to speak tomorrow at the Bootstrapper’s Breakfast, a monthly event held in SF and other bay area cities. There’s a lot of talk about fund-raising and venture-backed business these days, but there are also a lot of people just making their businesses happen with a series of small steps. I’ll give a very short overview of my startup experience and what I’m up to now and then I understand we’ll spend most of the time in Q&A.
My first startup business was CoSA, the Company of Science & Art, begun with the goal of melding art and tech in the form of interactive multimedia delivered on CD-ROMs. It was 1990, we thought this cutting edge tech would change consumer habits of reading magazines or watching TV. We were naïve and dashed headlong into a unproven market with competition from the likes of Time Warner who could afford to lose a few million dollars on producing a CD-ROMs that might not sell. When our initial funds ran out, we consulted using the tools we had developed and self-funded ourselves to create shrink wrapped graphics software. We pivoted a few times and ended up creating After Effects, for which the company was acquired by Aldus, and subsequently Adobe.
My newest venture is Mightyverse (originally founded by my partners Paul Lundahl and Glen Janssens). As with CoSA, I joined pre-product launch and arguably we’re still at that point. Last year we made our database of native language videos and translations available on mightyverse.com — our belief is that the business needs to be on mobile platforms, but with a web service as a necessary component, the website made sense to release first. We’ve been doing what I call “use case testing” for about a year using a beta iPhone app. Just last week, we’ve kicked off a series of market tests starting with MightySushi a mobile app that works on iPhone, iPad and iPod Touch.
With Mightyverse some distance from profitability, I’m growing an engineering team inside Blazing Cloud, a software development consulting company where we build products for other people. We do training, as well as mobile and web development.
Tomorrow I’ll talk a bit about what I’ve learned over the last year, why I think it is a good idea to keep the consulting business separate from the product business, what worked, what didn’t and my daily struggle to make good decisions on how and when to spend time and money and still have fun.
By Sarah | August 24, 2010
Last night, Sarah Mei (@sarahmei) and I attended a Tokyo Ruby Meetup, asakusa.rb. It was the 63rd (ish) meeting of this group of Rubyists that meets every Tuesday. There are about 10 ruby core committers who attend this group, along with other developers who gather weekly to hack Ruby code. This special meeting had an agenda that went something like:
- 17:45 introductions
- 20:15 drinking
During introductions, Akira Matsuda (@a_matsuda) who founded the group, put pins on a google map for new people and scrolled and zoomed to find repeat visitors. Here’s a photo from @kakutani of me introducing myyelf:

There were many who will speak at Ruby Kaigi and several Ruby Kaigi organizers who attended. I wish I had the whole list!
After introductions, we enjoyed the warm hospitality of the Rubyists with much drinking and conversation. I had technical issues with my phone and couldn’t manage to take photos till the very end of the evening, but I will always remember this first evening with Japanese Rubyists where I felt we had more in common than we had differences.
