Extreme startup is a practical workshop which simulates the excitement and insanity of working for a high pressure startup company, where every decision (or lack of) can make or loose you money - or in this case points!
Lets delve deeper into the misteries of this kind of coding workshop.
Think of it as an extreme version of a coding dojo, where you are constantly challenged with new requirements and have to make quick decisions on what you should develop. An extreme startup server is used to steadily grown requirements by asking you what seems to be simple questions at an increasing rate and complexity. As these questions grow and change, just as a normal project would, you are continually driven to develop your code to meet these changes and keep earning points for correct answers.
Scores are displayed for each time in real time, so you can see your progression in terms of your competition. Teams can choose any language they wish to implement their product and there are a number of basic project templates to help you get started.
Teams will need to write an application that responds to HTTP GET requests and they should be prepared to parse some strings. So the technical coding side is not the greatest challenge.
The challenge is knowing where to spend the time on your software solution. Questions that are easy to answer initially will grow in complexity so the design decisions you make may become invalid quite quickly.
Like other dojos its best to run the extreme startup workshop with a number of pairs or very small teams, this makes sure that people are talking and involved in the decision making.
The facilitator of the workshop will setup an extreme startup hub server that will pump out questions and keep scores of all the answers.
Ruby 1.9.2 is available as an Ubuntu package
When testing the setup of the extreme startup hub, run the project using:
WARMUP=1 ruby web_server.rb
When starting the extreme startup session, start up the server using:
Each team should create a project that will connect to the extreme startub hub and answer questions. A team can used any language they like and there are a range of templates to get you started.
If you decide to use Clojure for your product development you will need:
- Java runtime environment or SDK - openjdk 6 and 7 have been tested successfully
- Leinigen2 - to manage the build of your project
- Emacs + Clojure-mode, Clojure-test, paredit
- A REPL - using
M-x clojure-jack-infrom Emacs
1) Download the example company web application templates from Github to give you a head start - you will need it, trust me!
git clone https://github.com/bodil/extreme_startup_servers.git extreme-startup
2) Navigate to the Clojure project
Navigate to one of the Noir Clojure project folders (or try Composure) and update any project dependencies:
cd extreme-startup/clojure/noir lein deps**
Have a look at the code, the
extreme-startup/clojure/noir/rules.clj is the most important file at this point. Hint: look at the
dispatcher function and consider using the tests, you may need them for your sanity :-)
3) Load your code into the repl and fire up your browser
Running lein repl in the top level of the project directory should load the project code into the repl. If not, then run
(load-file 'src/extremestartup/server.clj) (server/start 3000)
3000 is the port number to run your server on, you can use anything that is available on your machine. Open your browser at localhost:3000 to see if it works.
4) Register your team as a player
The facilitator should provide you a URL to connect to. Select the “I want to play!” link and register your team.
Check your current IP address on your laptop and use that address for the URL. To find your IP address, open a command line terminal and run
ifconfig (Mac / Linux) or
ipconfig (windows). Make sure you use the port number you specified, if different from above.
5) Get coding
rules.clj file and extend the dispatcher function to your heart’s content. Use the testrule macro to quickly unit test your dispatcher.
Hint: you may want to have a look at the questions you are getting asked, so you can answer them!!
You can use
lein run to fire up Jetty with your code - the only downside is you have to kill and run Jetty each time you make a change. Jetty will run on port 8080 by default, so you would use that port value as the end part of the URL when adding a player - i.e. http://192.168.1.2:8080
This work is licensed under a Creative Commons Attribution 4.0 ShareAlike License, including custom images & stylesheets. Permissions beyond the scope of this license may be available at @jr0cket