nreduce: self help for startups?

I’ve decided to join the first nReduce session which starts this coming Tues, June 5, for my startup Mightyverse.

When I first heard of it via twitter, I was intrigued, but I was also put off by a venturebeat article which identified one if its founders, Jacques Crocker, as a Rails demigod. Since I am pretty active in the Rails community and had never heard of the guy, I was pretty skeptical.

I caught up with Jacques and co-founder Joe Mellin at a pre-launch gathering in San Francisco on Thursday. Jacques claimed the “demigod” title was made up by the press, and seems a genuine down-to-earth guy. When I arrived there were just 4-5 people sitting around a table, and it was clear that the nReduce guys didn’t expect more than 8 or 10. Pretty soon, it was a standing-room-only crowd with a lively group of entrepreneurs.

I got the chance to talk to both Jacque and Joe and hear their stories. I wondered how and why they were doing this thing. nReduce accepts all startups, they give you no money and take no equity. On Thursday they had over 300 startups signed up, with 83 in SF, today I see 500+ on their website.

Jacque decided to create nReduce after his startup was rejected from YCombinator and he wanted to create that kind of environment for himself. The YCombinator program is attractive for more than the insider-track to investor intros — people liken it to going to college, where you learn as much from your peer group as from your professors. And after graduation, your peers become an important network through your career. Jacque will be participating in the program himself.

I completely agree that for an early-stage startup, execution is tough enough. I love the idea that getting into the program should have no barriers, but staying in it should be tough — mirroring what is the real-world startup experience. Jacque told me he wanted to create a YCombinator-like experience, but for everyone. The deal is that anyone can join, but you need to ship every week. If you don’t ship two weeks in a row, you are dropped from the program.

Joe Mellin, who is building the nReduce web app himself, gave me some insights about how it works. Tuesday nights there will be both virtual and in-person meetings, for the cities where there are enough teams. Tuesday will have presentations to inspire the startups and the chance to demo to each other. On Wednesday, Teams will submit a description of what they shipped the previous week, along with a video, screencast or some evidence of their progress. There’s no incentive to submit something lame, since the goal is to be able to show prospective investors your ability to execute. At the end of 12 weeks, participating startups will have a 3rd party record of their progress. Since one of the key questions investors have is whether a new team can execute, the nReduce theory is that this will save time for investors as well as providing support and structure for startups. It feels like a 12 step program meets survivor. They are seeking sponsors and it seems like a great way for startups and big companies alike to get in front of a vibrant tech crowd — whether these particular startups succeed or fail, these entrepreneurs will be making great things happen in the tech world for years to come.

At the event on Thursday, I met a wide range of startup founders — two companies had just started 2 or 3 weeks ago, some still had their day jobs, one had recently graduated from another accelerator and had just signed their first customer. I love the diversity of experience represented in the group and look forward to seeing what Jacque, Joe and their team cook up for the Tuesday night kick-off.

Posted in general | 4 Comments

stir fry: great example of game dynamics

The hip trend these days in game dynamics is “compulsion loops,” where in one of the game activities lets us win gold or coins or some kind of virtual currency, which lets us buy stuff, which helps us play the game better, which earns more gold, and so on. (Stephanie Morgan gave a great Creative Mornings Talk on this.)

As we win more, our skills improve and we get more attached to the game. These days, if we want to short-cut the process and level-up more quickly, we simply spend real money to buy virtual currency via in-app purchase.

The Stir Fry iPhone game includes a great example of a compelling compulsion loop, along with an entertaining premise and fun interactions.

The core idea is that you can’t let your veggies burn up in their frying pans. You can flip them and hit other similar veggies to score points, and if you are lucky, you could get a fortune cookie, which earns you coins at the end of the game. You can buy potholders, fire extinguishers and other tools to improve your ability to keep your veggies from burning up. The addition of other elements to the game play also keeps you from getting bored once you get good.

There are two aspects to this compulsion loop that deepen engagement and increase effectiveness. First, the creative variety and story telling aspect of the props deepens engagement in the game. Secondly, including an aspect of chance and randomness in the reward system makes it more addictive.

It may seem counter-intuitive, but the element of chance is a key difference between something being work and something being play. (Of course, in work we don’t always get more when we work harder, but that’s the prevailing mythology. In a game we know the rules and we buy into the randomness because it is fun.)

In recent New York Times article, Paul Howard-Jones shed some light on this phenomenon:

computer games stimulate the brain’s reward system to produce dopamine, a chemical “which helps orient our attention and enhances the making of connections between neurons, which is the physical basis for learning.”

Mr. Howard-Jones said that research has shown that the introduction of a chance or game element into any reward system increases dopamine production. “For generations, we educators have done everything we can to maintain a consistent relationship between reward and achievement, but the neuroscience is telling us something different,” he said in an interview.

According to Mr. Howard-Jones, students learn more, and are happier to continue learning, when they are offered the chance of a reward rather than a guaranteed reward.

While it seems illogical, I think we’ve all experienced playful activities from games to sports where the element of chance adds to that edgy, uncertain anticipation that makes the reward that much more sweet. If only we could apply the same philosophy to all aspects of our lives, since there is an element of chance in everything we do. Of course, I think one of the reasons games are fun is simply because they are a diversion meant only for entertainment and the game play is a gift to ourselves.

Check out Stir Fry iPhone game for a neat new example of well-thought out game dynamics or just for a fun diversion.

Posted in general | 3 Comments

become a working developer in 5 months?

Jeff Casimir believes he can train anyone with the passion and will to learn to be a professional software developer. He goes so far as to say if you don’t make it (and you are really working at it), he’ll consider it a personal failure if you don’t. Also, he’s partnered with LivingSocial who is eager to hire graduates of the program, paying you to learn whether or not you qualify for a job at the end.

I interviewed Jeff yesterday and posted an article about the Washington DC Hungry Academy program on the RailsBridge Open Workshops blog. I’m skeptical that you can got from “I’ve never coded” to writing production code on a web app like Living Social in 5 months, but if you have a passion to learn, go for it. At worst case, you’ll get some great training and experience and be on your way to becoming a software developer.

Jeff is a dedicated and imaginative teacher who has taught middle and high school before starting his business training software developers. I don’t doubt his skill and am eager to see what happens with the program. I believe that people need a lot of experience writing a lot of code before they would be ready for a typical job. Of course, I also believe that there are a wide variety of code writing projects in any software company. I’m sure that Living Social has quite a bit of code that needs to be written. My guess is that they plan to find starter projects for less experienced developers, if the folks who finish the program show that they are good learners. In any great software development class, you write quite a bit of code, so Jeff and other program mentors from LivingSocial will get a chance to see how people approach new challenges, ask good questions, work through problems and write code. As software developers, we are always learning new tools, frameworks and languages, and whole new patterns of development as the hardware underneath us radically changes in capability and the people who use our software change how they use it and what they want to do.

If you are in the DC area, or willing to move there for 5 months, and think you want to become a software developer or simply switch from building desktop apps or servlets to writing web apps in Ruby on Rails, I strongly suggest you check this out.

Posted in general | 1 Comment

sillicon valley love notes

We need more pop culture that show how strong men can be attracted to powerful, smart, technical women. A couple of years ago, I wrote about the rise in hacker love songs being a positive trend for women in computing. Today I saw Silicon Valley Ryan Gosling.

I can’t count the number of times my sweetheart stayed up late with me and edited yet one more draft of an important proposal or word-smithed my bio to make me sound more impressive than I thought I was. We need new media portrayals of what it means to be loved in an honest and meaningful way.

While I wish it had been a guy, writing love notes for a girl, Silicon Valley Ryan Gosling was created by writer, artist and designer, Lian Amaris (@lianamaris).

I think Angie Chang said it well in her post on Ryan Gosling Silicon Valley:

Remember, if something you think should exist but doesn’t, make it happen.

Some more of my favorites:

Posted in general | Leave a comment

women 2.0 startup weekend documentary

I’m thrilled to be part of the Women 2.0 Startup Weekend Documentary: Start Something.  Filmed as a student project with San Francisco State University’s Digital Video Intensive program, Start Something follows three groups of entrepreneurs as they navigate Startup Weekend, a three day event where entrepreneurs come together to share ideas, form teams and launch startups.

Produced by Dave Kochbeck, directed by Doug Latimer, and edited by Joseph McDonald, this film captures the excitement, frustration and serendipity of the startup experience which is the essence of Startup Weekend. In these 54-hour events, developers, coders, designers, marketers, product managers and startup enthusiasts come together to share ideas, form teams, build products, and create startups! While most startups created at these weekend events don’t continue, the people at the events often go on to create or join other startup companies — or take their startup skills to fuel innovation in their day jobs.

Many thanks to the Kaufman Foundation, the Startup Weekend crew, and all the prospective entrepreneurs who show up.

Posted in general | 1 Comment

a founder’s manifesto

I believe…

  • I do my best work when I also have time away to clear my head and reinvigorate my spirit.
  • People are more important than software. Software is made for people by people.  Also, the people that I love who are outside of my little startup world are way more important than my startup, but I also am driven to create something awesome in the time I spend making a living which takes me away from them — often that doesn’t fit into a little 9-5 box, but 24×7 is also the wrong answer.
  • People are more important than profit. But if you don’t make payroll, it’s hard to keep working with the people you want to work with, so we need to balance that.
  • We need to trust each other. In addition to choosing to work with people who you can trust to work hard, communicate well and treat each other kindly, we also need to trust that people will make mistakes and everyone will mostly do what is their own best interests.  When everyone’s interests are aligned, everyone wins.  If everyone isn’t winning, we need to change the rules or move on.

I know I am a hypocrite. Every day I fail to live my life according to my beliefs in small and large ways.  Sometimes I get angry when people fail, instead of creating a wonderful, supportive environment where failure is a part of the learning process.  I often forget that being home for dinner is more important to me than getting one more thing done. Sometimes I watch stupid TV shows on Netflix instead of having a conversation with my husband, or playing a game with my son, or calling my best friend because I’m worn out and frustrated and I forget that sitting in front of a screen for one more hour may feel easier but doesn’t really make me happy.

I also agree with poet Ralph Hodgson who said that “some things have to be believed to be seen.”   One of the unique aspects of a founder is the creation of a “reality distortion field” that causes other people to participate in a shared belief thereby causing it to become reality.  So, even though I fail every day to turn my beliefs into reality, I nonetheless hold them to be true. And everyday I work to create a wonderful, supportive learning environment where I can use that failure to change the reality of my life to reflect my beliefs along with a small part of the rest of reality through the software created by my team.

Posted in general | 2 Comments

setting up ec2 minecraft server

Goal: set up a minecraft server using free EC2 account from OSX
[update: FAIL -- game play doesn't work on a micro instance, if we want to use EC2 it looks like we need to use at least a small one. so be careful to adjust the steps below to pick a small instance if you want to play.]

I learned that there are a lot of minecraft server implementations. I decided to use Craftbukkit server largely because I saw it referenced from a RubyConf talk by Tom Enebo — might be fun to mod it someday :)

I pieced together information from some helpful tutorials from Ubuntu and Robert Sosinski.

  1. Sign-up for an AWS account (1 year free for new AWS accounts, but you need a credit card)
  2. Go to AWS Management Console
  3. Create a Private Key
    • Select EC2 tab, click on “0 Key Pairs” on the right side
    • name it ec2.pem (or anything you want, but I’ll use ec2 in the rest of this tutorial)
    • save it to ~/.ec2/ec2.pem
  4. Create a Certificate
    • Under your name in the top right corner, select “Security Credentials”
    • Download the private key and certificate and save them in ~/.ec2
  5. Make your credential files private.  In your local terminal, type:
    • cd ~/.ec2
    • chmod go-rwx ~/.ec2/*.pem
  6. Download EC2 API Tools
    • Unzip the Amazon EC2 Command-Line Tools
    • Move both the bin and lib directory into your ~/.ec2 directory
  7. Your ~/.ec2 directory should have:
    • The cert-xxxxxxx.pem file
    • The pk-xxxxxxx.pem file
    • The bin directory
    • The lib directory
    • ec2.pem
  8. Set up EC2 Command-line Tools
    • Put the following into your ~/.bash_profile:
      # Setup Amazon EC2 Command-Line Tools
      export EC2_HOME=~/.ec2
      export PATH=$PATH:$EC2_HOME/bin
      export EC2_PRIVATE_KEY=`ls $EC2_HOME/pk-*.pem`
      export EC2_CERT=`ls $EC2_HOME/cert-*.pem`
      export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home/
    • On the command-line, type:
      source ~/.bash_profile
  9. Startup a server
    • [Update] We want to be careful to choose an AMI that works with the micro instance, which is what we get for free.  Ubuntu takes up too much disk space by default to fit into a micro instance, so you need to use one of the micro Ubuntu AMIs they created for this purpose.  I’m going to use Maverick 10-10 — it’s the most recent version that has a micro version.
    • [Update] I picked one in us-east, since that’s where Amazon started my account by default and it seems that it needs to be in the same region matching the one set for my key:
      ec2-run-instances ami-cf33fea6 –instance-type t1.micro –region us-east-1 –key ec2
    • check to see if it is running, by typing:
      ec2-describe-instances
    • make a note of your hostname!  It should look something like:
    ec2-###-##-##-##.compute-1.amazonaws.com
  10. Open relevant ports (22 for ssh, 80 for http, 25565 for minecraft):
    ec2-authorize default -p 22
    ec2-authorize default -p 80
    ec2-authorize default -p 25565
  11. ssh into your new instance
    ssh -i ec2.pem ubuntu@ec2-###-##-##-##.compute-1.amazonaws.com
  12. Install Java (nice Ubuntu instructions)
    Note: to accept the license, use tab to get to the OK “button” then hit return, then arrow to get to “Yes” and hit return again.
    To verify installation:
    $ java -version
    java version “1.6.0_26″
    Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
    Java HotSpot(TM) Client VM (build 20.1-b02, mixed mode, sharing)
  13. See this tutorial for setting up minecraft, but if you are playing with the Minecraft 1.0 client (at least of today) you’ll need to install a dev build which you can find on the ci server. I found that I needed to run the server, stop it and run it again to get it to start without errors.
    • get the latest dev build (I’m running 1502):
      wget http://ci.bukkit.org/job/dev-CraftBukkit/lastSuccessfulBuild/artifact/target/craftbukkit-1.0.0-SNAPSHOT.jar
      
    • create a file called “start.sh” with the following contents:
      #!/bin/sh
      java -Xmx613M -Xincgc -jar craftbukkit-1.0.0-SNAPSHOT.jar
      
    • run the server in screen:
      screen
      ./start.sh
      

[Update] By tweaking the memory allocation, we can get it to work (most of the time) with a single player. I found that I can raise the memory allocation for java and use virtual memory, but that it sometimes maxes out the CPU.

Here’s the setting where the game couldn’t be failed (couldn’t fight monsters or build things):

#!/bin/sh
java -Xmx613M -Xincgc -jar craftbukkit-1.0.0-SNAPSHOT.jar

$top
  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 1642 ubuntu    20   0  978m 300m  10m S 12.3 50.7 100:44.96 java

Note:
VIRT – 978M of virtual memory
RES – 300m resident (physical) memory


With this it sometimes works:

#!/bin/sh
java -Xmx1024M -Xincgc -jar craftbukkit-1.0.0-SNAPSHOT.jar

 2829 ubuntu    20   0 1336m 271m  10m S 14.0 45.8   0:18.76 java

With this works almost all the time (but we’ve only tested one player):

#!/bin/sh
java -Xmx2048M -Xincgc -jar craftbukkit-1.0.0-SNAPSHOT.jar

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2893 ubuntu    20   0 2499m 341m  10m S 99.8 57.6   0:27.68 java                                                                     

 2893 ubuntu    20   0 2499m 341m  10m S 18.2 57.7   1:27.30 java                     

when the CPU maxes out, I see this in the game console:
22:39:19 [WARNING] Can't keep up! Did the system time change, or is the server overloaded?

Posted in general | 3 Comments

Why Flash Lost but HTML Still Sucks

I’ve been creating and using cross-platform tools for application development since the late 80s, from VideoWorks, HyperCard, and Authorware to Director, SuperCard, ScriptX and mTropolis to Shockwave, Flash, and HTML/Javascript. We’ve moved past the experimental days when it was called multimedia and techniques for interactivity, graphics, animation and information design are routinely applied for mainstream consumer and business applications. The dominant paradigm is now HTML.

When people say HTML, they really mean HTML, CSS, Javascript and a collection of proprietary browser APIs which are similar enough across desktop and mobile browsers that we can build applications that look and feel the same even if the code under-the-hood needs to be a little different.

Flash successfully enabled one set of code for one application, independent of browser and OS. Macormedia documented the file format back in the 90s. The Flash Player itself remained proprietary, but the open file format enabled competitive authoring tools like OpenLaszlo in addition to the original Flash authoring tool and later Flex. Of course, OpenLaszlo moved to support HTML many years ago, as browsers grew faster and more capable making HTML a practical choice for apps with desktop-like interactivity.

It’s Not Just About Technical Merits

I believe that the technical reason that Flash lost was that Flash never completely made the leap to app development from its origins in games and entertainment (some of the following may be out of date, since I stopped using Flash for anything but video 2 years ago). However, the big reason that Flash lost was an emotional one that Steve Jobs did a good job of propagating. Macromedia and Adobe never successfully embraced and fostered an open source approach to the platform, and sadly I think the marketing of this is more important today than the reality. The reality is that any effective, so-called HTML5 implementation that rivals Flash uses proprietary browser APIs that differ across browsers. Today a lot of that is hidden by popular frameworks, but any Javascript developer that has produced something meaningful that is widely used knows what I’m talking about.

The HTML, CSS, and JavaScript you need to write for the iOS implementation of the webkit browser has a lot in common with what you would need to write for the Windows Phone 7 Internet Explorer which both share a lot with the documented standards and their desktop counterparts, but share a lot less with BlackBerry 4 browsers or IE6, let alone earlier browser versions. Standards are only as good as their widespread and shared implementations. In the real-world, we do what works, which means we write to proprietary APIs.

For a while it looked like Flash might just offer a proprietary API that worked effectively across desktop, web and mobile, but they didn’t effectively make the leap to mobile, nor did they keep up with some of the capabilities of the desktop browsers; however, neither have web browsers yet to fully catch up to Flash. The standards committee approach doesn’t seem to be effectively driving new capabilities and the platforms are splintering even more than they were in the late 90s.

So why did Flash lose (technically)?

  • Text was never a first class citizen (undo, spellcheck, etc.) — the truth is that text is hard and really important. HTML forced web browsers to do this very well. With the addition of JavaScript, with its dynamic manipulation of the DOM, web applications started to be able to have the kinds of interactions people were familiar with from the desktop, but Flash never matched with regard to text.
  • Settings… (This should have been called Flash Player Settings: with the addition of context menu items, the “Settings…” menu may appear to control application setting; however, if someone picks that menu item when an iframe is partially obscuring the app, it will not appear to the end-user and the app will seem to hang. I have to admit personally responsibility for screwing this up circa 2000 when I was at Macromedia leading the Flash video team. In my own defense, it is very hard to balance usability and security. I wish we had done more of a trusted app model with authorization of features (like Android and iOS do fairly well for mobile apps) and used OS dialogs to prevent spoofing.
  • Drag & drop not integrated with the desktop (Browsers are doing better on this, but there is still a ways to go)
  • Cut/Copy/Paste really needs to work well for text and all media types, which is still not fully there on browsers.
  • http auth: seriously silly that this was not easily supported
  • Sometime network operations fail — real apps need reliability

Why HTML still sucks, just like Flash

  1. “This script has caused the Flash Player to run slowly” — web browsers haven’t figured this out either, I like how Apple handles this with desktop apps better
  2. From a performance perspective, HTML/Javascript has the same challenges as Flash — has anyone else noticed the return of “skip intro” and progress bar loading screens, but they are so-called HTML5 sites instead of Flash?

How HTML sucks more than Flash

Desktop HTML video suffers from same of the same issues as mobile web video:

  1. The only use case that is well-vetted and works effectively cross-platform is playing a movie with VCR controls. There are a lot of other video interaction use cases that Flash did a very good job of supporting and HTML isn’t there yet on even modern browsers, let alone on the range of browsers and platforms supported by Flash.
  2. There is no accepted standard here — we’re back to the codec/format wars of the late ’90s with Apple sticking to QuickTime and Google arguing that zero cost = open. This is a hard problem, and pretending it is solved isn’t helping anyone.

and of course, same goes for audio.

Posted in general | Leave a comment

debugging objective-c in xcode for iOS

I’m coding again in native Objective-C coding for iOS with the lovely XCode.  It has been a while so I’ve been reading up on debugging tricks.  Sadly, it still feels a bit like debugging in Macsbug in 1990…

The graphical display of object values is fairly useless, but in gdb, we can use the po command to get a pretty printing of the object if it comes with a built in description (for details see nice writeup from cocoa with love).

For our own objects, we can define a debugDescription method. For example, if I have a Thing class which is a subclass of NSObject and just has a title and subtitle:

@implementation Thing

@synthesize title;
@synthesize subtitle;

- (NSString *)debugDescription { return [NSString stringWithFormat:@"title: %@\n subtitle: %@", title, subtitle]; }

@end

Then if I find myself at a breakpoint with an instance of Thing in scope, called “thing”:

(gdb) po thing
title: Another
subtitle: Another example

Or if I have an array of Thing instances, called “things”:

(gdb) po things
<__NSArrayM 0x6a157a0>(
title: Basic
subtitle: My Thing,
title: Something
subtitle: Example of something,
title: Another
subtitle: Another example
)

iphonedevelopertips illustrates this nicely in more detail with the description method which will do the same thing for any subclass of NSObject.

Note: print-object actually calls the debugDescription method of the specified object. NSObject implements this method by calling through to the description method. Thus, by default, an object’s debug description is the same as its description. However, you can override debugDescription if you want to decouple these; many Cocoa objects do this. (via Apple Tech Note 2124)

Update: LLVM Debugger sucks less

If you choose the LLVM Debugger, instead of gdb, you can see properties on an object without defining a description or debugDescription method:

(lldb) po thing
(Thing *) $8 = 0x06a487d0 
(lldb) po thing.title
(NSString *) $9 = 0x00005984 Another
(lldb) po thing.subtitle
(NSString *) $10 = 0x00005994 Another example

…but still no love for Arrays:

(lldb) po things
(NSMutableArray *) $11 = 0x06a0b6a0 <__NSArrayM 0x6a0b6a0>(
,
,

)

…just for fun, let’s see how to look at a property of the first object in an array:

(lldb) po [things objectAtIndex:0]
(id) $12 = 0x06a44d20 
(lldb) po [things objectAtIndex:0].title
error: warning: instance method '-objectAtIndex:' not found (return type defaults to 'id')
error: property 'title' not found on object of type 'id'
error: 1 errors parsing expression
(lldb) po (Thing*)[things objectAtIndex:0].title
error: warning: instance method '-objectAtIndex:' not found (return type defaults to 'id')
error: property 'title' not found on object of type 'id'
error: 1 errors parsing expression
(lldb) po ((Thing*)[things objectAtIndex:0]).title
(NSString *) $14 = 0x00005944 Basic
(lldb) po [[things objectAtIndex:0] valueForKey:@"title"]
(id) $15 = 0x00005944 Basic

Whew!

Posted in general | Leave a comment

upgrading pie from rails 3.0 to 3.1

Whenever I upgrade Rails, I always start with “rails new” so that I get all the new config file goodness — I want to start fresh with whatever the new defaults are and then only make the modifications that I really want in my app. Here’s the process I went through upgrading the pie “bakery” (a relative simple Rails 3.0 app) to Rails 3.1.

First I moved my old app to a new name (since I want my new Rails app to have the same name internally as the old Rails app):

mv bakery bakery30

Now I set up a new gemset, so I’m starting fresh. (My first attempt was to use my old gemset, but that showed me an old warning that I’d like to not bring forward, or at least isolate in the process of upgrading):

rvm use 1.9.2-p290
rvm gemset create rails31
rvm use 1.9.2-p290@rails31

Create the new app (specifying -T to create the app without test-unit, since I’m an RSpec fan)

rails new bakery -T
mv bakery bakery 31

Now I edit my Gemfile to include the gems I want to bring over from my old app…

cd bakery
vi Gemfile
bundle install

Then I want to re-generate rspec and cucumber config files and boilerplate

rails g rspec:install
rails g cucumber:install

ok, now I have vanilla Rails 3.1 app
I fetch my old app from github:

git clone git@github.com:blazingcloud/pie-bakery.git bakery
cd bakery

and using the power of git, I’m going to remove all the old 3.0 code, add in my 3.1 app

git rm -r *
cp -r ../bakery31/* .
git add .

Then I use gitx (a modern version like brotherbard) to look at the changes and revert any deletes that are actually app code that I want to keep, review every diff, and hope that I’m paying close enough attention to everything (really wish I could be pairing on this).

Now I set up my database and run my tests… I don’t know why “rake test” doesn’t automatically run cucumber and rspec tests like it used to. hmmm

rake db:schema:load
rake cucumber
rake spec

I realize that I missed a couple of diffs, rinse, repeat… when all is green I’m done. Whew.

I copy in my old .git/config so I pull in my remote heroku repo config (which I’ve updated to cedar stack)

cp ../bakery30/.git/config .git/config

and run rails

Posted in general | 1 Comment