Reflections on MVC

images.duckduckgo.comMVC is a design pattern that allows coders to keep unrelated portions of their code separated into logical chunks so that the implementation remains as loosely coupled as possible. We use MVC to make our designs scalable, reusable, and clean.

This week was really rough.

There were so many things to incorporate into my understanding of the Play Framework. The CRUD update WOD was by far the most difficult. Toward the end of the week I was kind of wondering what I was doing as I was doing it.

I understand, on a very basic level, how MVC works, but getting good with doing it by default and in some kind of flow state seems impossible at this point.

I understand the concepts we covered this week but the break-neck speed of the material is daunting. I need to plan for more time to focus on redoing the final two WODs. Adding a model that allows for persistent data across the application is encouraging. I’m proud of myself for sticking with a persistent bug I encountered. I checked my code line by line 3 times and still my application would not retain form data. Only after restarting my computer, taking a walk around campus, and running ‘activator clean’ did my form data finally start working.

The concepts at this point are falling into place extremely slowly.

I’m anticipating more time with the material will make the concepts much clearer. Surprisingly, I am not daunted by Scala expressions intermixed with HTML and Java code. Maybe it’s because I’ve been using Objective-C for 5 years and I’m used to the overabundance of brackets.

This slideshow requires JavaScript.

Digits Mockup

I am consistently amazed by how beautiful my web applications are now that I am using Twitter Bootstrap.

The integration of fonts, and solidly positioned (don’t forget responsive) divs makes me happy. During this WOD I quickly set up a bootstrap application and added a ‘zebra type’ form. Just last year, I remember coding my web forms in PHP and having to check the modulus of the returned content from the database to determine which row to shade off-color. I love Twitter Bootstrap.

I did not finish this WOD the first time through because I spent a lot of time with Bootswatch picking out my favorite theme. I did learn how to include my theme dynamically with a relative stylesheet. I have that code saved for later when I want to swap out the standard twitter bootstrap CSS with a customized theme from Bootswatch.

  • First try: DNF at 39 min 35 sec
  • Second try: AV at 21 min 16 sec

Digits Form

For the process of updating forms to use the Play Framework I created a list for myself in TextEdit on my desktop. The four steps to update web forms from HTML to the Play Framework are as follows:

  1. Create a backing class for form.
  2. Make view dynamic.
  3. Handle form in controller.
  4. Add POST request to routes.

I’m not quite at the point of translating this list to code but it helps to know the list or have a crib sheet to make the updates faster and faster. I will continue working to commit these words to memory. Even more to work through this process and immediately be able to code it up fast.

I did not finish this WOD within the time allotted. Before I attempted the WOD again, I reviewed the Play Form Screencast and took notes on exactly what was updated and in what order. I am learning that the order of the updates matters. Not only do I get code completion in IntelliJ if I do the updates in a particular order, but wear grooves where my feet have gone before. I can code faster if I code in the same manner over and over.

  • First try: DNF at 43 min 55 sec
  • Second try: AV at 23 min 14 sec

Digits Form Validation

The form validation WOD was my favorite this week. Everything with form validation is straightforward. I understand it and I was able to complete this WOD on the first try. As with the first WOD this week, I am just amazed by Twitter Bootstrap. The ability to style up the forms themselves to show the status of the input is beautiful in its simplicity and calm presentation.

  • First try: Rx in 17 min 33 sec

Digits Model

I did not feel as prepared for this module as I did for the previous WODs this week. I did not feel that the screencasts that led up to this WOD made the application possible. Perhaps I missed some of the supplemental information in the readings.

I had a very hard time conceptualizing the updates I was making in this WOD. I will have to redo this WOD many more times to first get the understanding of the material, then many more times to get the fluidity needed to complete it in under 18 minutes.

  • First try: DNF in 28 min 50 sec
  • Second try: DNF in 32 min 14 sec (Could not complete this WOD on my own. Had to rely on the screencast.)

Digits CRUD

I tried my best to do this WOD on my own the first time but I did not feel prepared for the material. I believe that I need to devote more time to reading the supplemental material. Rather than rely on the screencasts leading up to the WODs I should have devoted more time to finding supplemental material.

This practice WOD had me going all over the application to update the Contact.java file with a ContactDB.java file. I understood the updates we were making but the dependencies within the code to sustain the updates was jarring. I feel very off balance with the material in this practice WOD. I am planning to get up early tomorrow and get in as many redos with this practice WOD as possible before class.

  • First try: DNF in 1 hour 15 min 7 seconds

Lingering Questions

What’s the best way to handle authentication inside of a Play Framework application? Patrick found a third-party framework called SecureSocial that handles authentication. I haven’t had a chance to look into it deeply. But from my research online, there are a number of simple tweaks we can do the application to require simple page-based authentication.

I want to find something that has as few dependencies as possible. I also want to find something that is easy to upgrade. I feel that the PlayWithMagic code we are working on will be used in the future by Mark and I want to be sure that it ages well.

Advertisements

Reflections on Web Application Frameworks

playEl Dorado, the “mystical city of gold,” never existed. The Fountain of Youth was a joke. But people talked like it was true.

Things that sound too good to be true usually are. That’s why I was skeptical when I heard about Play.

First, if you’re not acquainted with the latest Web Application Framework, Play is a “lightweight, stateless, web-friendly architecture.”

The Play Framework combines HTML, Javascript, CSS, and databases into a single stack. I love it. But I’m hesitant to sing its praises too soon. I haven’t even interacted with its database. I’m hoping it’s a flat file database. If it performs like the rest of the Play Framework I may become a true believer. More interaction with the framework is necessary.

Progressively moving toward web authoring singularity

This week I completed four WODs. I wasn’t able to finish all of them in before my timer went off. There were a few things that did not work the first time through that I will list out as I go through all of them. You need to write out references to static elements like images and css files with routes. I was not used to this.

Integration and Application tests validate the code. Play enables me to check the validity of the code by running tests to ensure that everything’s working as it should.

The WODs I worked on this week used the following technologies:

WODs I worked on this week

Clean Play Java

For this WOD I downloaded the Play Framework and compiled a new project on my computer. I ran the code, ran the unit tests, and started up a local instance of a Play-Java application on my computer. Once I set up a new repo on GitHub I accidentally created a .gitignore file and the Play Framework did not like that I had created my own .gitignore file and the IntelliJ would not allow me to push my changes to my repo. It was confused by the two .gitignore files in my directory. I ended up created the repo from scratch and I did not set a .gitignore file in Github.

  • DNF on the first try in 1 hour and 12 minutes.
  • Finished on the second try in 14 minutes and 36 seconds.

Play Bootstrap Browser History

For this WOD, I created a website that simple fetched a repository that had been created earlier. This repository creates a Play application and integrates Bootstrap. I added this repo as an upstream master and merged the repo with mine. I compiled and ran the code with Activator and the application loaded on at localhost:9000 on my machine. Then I ran the code through CheckStyle to make sure it passed all of the tests.

  • Finished on the first try in 26 minutes and 23 seconds.
  • Finished on the second try in 21 minutes and 4 seconds.

Multi-Page Play Bootstrap Browser history

For this WOD I updated my Play Bootstrap Browser History project. Instead of serving all of the content on a single page, I updated the code and split the content from the index page onto multiple separate pages. I updated the navigation to point to the new pages and wrote some unit tests to ensure that the new pages were being rendered by the Play Framework properly. Once I finished updating the Application.java file, updated the routes, and wrote the unit tests I tested out the application and it worked wonderfully.

  • Finished on the first try in 14 minutes 23 seconds.
  • Finished on the second try in 7 minutes and 37 seconds.

Play Responsive Kamanu

This WOD was very much like the previous WOD. The only difference in this WOD was that I had to update the navigation in the header. This one took much longer than I expected because I did not heed the advice to update the image files in the Play Application Framework to look for images along the route. Once I learned that I needed to update the file paths in the play application with relative computed locations I was able to update my code and complete the WOD successfully on the second time through. This one was basically updating the Twitter Bootstrap navigation bar with custom images and formatting.

  • DNF on the first try in 30 minutes and 11 seconds.
  • Finished on the second try in 12 minutes and 10 seconds.

Things I learned this week:

  • Command + Alt + L is to refactor the code. (Make sure optimize imports is checked so it can be taken care of too.)
  • Command + Alt + Shift + I, type CheckStyle. Click Enter.
  • Click on File Inspector to select the file to move. Press F6 to move the file into a package.

Lingering questions

  • How does not having compiled pages affect SEO?
  • How does security work in this framework?
  • How do we sanitize our input?
  • How do we add e-commerce to a Play application?
  • Are there special requirements to look for when finding a hosting service for a play application?

Reflections on Twitter Bootstrap 3.0

twitterBootstrapAsk anyone who’s been working with HTML and CSS since the late nineties about vertically aligning content with CSS. And they’ll tell you it has always been quite a challenge on one browser. Getting consistent results on many different browsers was nearly impossible. That’s why I was so excited to try out Twitter Bootstrap.

This framework is a god send.

Having to have the ability to center-align things is fantastic. The ability to programmatically create buttons is also fantastic. I used to spend hours and hours tracking down an implementation that I liked. Then I would have to research it and find out how it was made by either looking at the code or by finding a tutorial online. Now I can just import the framework and use the CSS classes right out of the box to create a three columned layout that automatically scales to different screen resolutions.

I’m also happy to start adopting this framework because it is open source. There is no possibility of it going out of date as browsers change over time. There is a huge community of developers working on updating Twitter Bootstrap.

I like that I don’t have to worry about browser specific implementations. Twitter Bootstrap is really easy to use. And I’m going to start using it professionally with my installation of WordPress. I used it to easily mock up a quick survey intro page for work. I am looking forward to using this technology to create a carousel that shows not only pictures but videos too.

Summary of WOD experiences

Bootstrap browser history – This exercise was my first experience using Bootstrap. We created a simple website on the history of surfing. A simple website with four floating divs that held the images and names of four famous surfers. Then we applied Bootstrap and suddenly all the old CSS was not necessary. It still pays to know CSS, but with Bootstrap setting up responsive columns is ridiculously easy.

  • I completed this WOD in 25 minutes and 56 seconds.

Responsive Kamanu – During this exercise I recreated the Kamanu Composites website with Bootstrap. The navigation was easy to update with Bootstrap. And I was also able to style the site with an easy starter design from Bootswatch. I laid out the basic elements of the site I and it looked like something from 1999. Then I added Bootstrap and Bootswatch and the navigation came to life.

  • I completed this WOD in 40 minutes and 22 seconds.

Responsive Castle High School – I updated the Castle High School website to take advantage of the responsive design that comes with Bootstrap. This was the first time I’ve seen a class applied to a div to make it hide itself when the page is resized. Now that I have finished these three experiences with Bootstrap that is simply no going back. Bootstrap gives me confidence to build a site and not worry about how it looks on specific browsers at specific sizes. I can code up a site and be content that it will look beautiful and consistent on any device running any browser.

  • I completed this WOD in 33 minutes and 55 seconds.

Most helpful tool for debugging CSS

The most helpful tool in finding out why certain CSS rules were not being applied was Firebug for Firefox. I got stuck for a good 10 minutes trying to update the color of the navigation bar in CSS. Once I inspected the navigation element with Firebug I was able to determine that the color was being set but the gradiated image was being applied over the background color. Once I removed the gradient the background color shone through.

Reflections on UI Design Basics

Impossible-TeapotEveryone is a designer these days. I remember back in the 90’s when animated gifs of flames and fireworks were the real way to show that you were “in the know” when it came to webdesign.

I was a self taught/professed web designer back in the 90’s. I had grand ideas of double majoring in graphic design and computer science. My friends in the computer science department warned me against taking too many graphic design courses. And my friends in graphic design cheered me on. Either way I knew I would be indispensable if I could speak both languages: Computers and Design.

Computers require deep specialization. There’s a saying that blares in the back of my head. It yells in an irritatingly sing-song loop, “Jack of all trades. Master of none.”

10 years later and I’m happy that I chose to specialize in computers. But I don’t regret my time learning graphic design. I feel so much richer for knowing 2 disciplines versus a single one. Now a new song loops in my head, “Don’t put all your eggs in one basket.” Sure I could be further along with computers if I focused on one discipline but I wouldn’t have the liberal arts education that allows me to see things both from the visual point of view and the purely mechanical point of view. I wear 2 hats. I have 2 perspectives.

Check out my post on Programming for Visual Designers.

Computers require us to specialize. Technology keeps changing and requiring more and more of us. Not only do we have to be able to code, we need to be aware of how to present our ideas in pleasing designs. As technology advances our aesthetics are almost always called into question. As the medium changes, the visual layout requires that we change with it.

What I don’t understand is how all of these changes in design affect usability. I’ll be honest, I am tired of learning new things all of the time. I wish some things would just stay the same. Stasis in Technology? Never! I learned that at an early age. If you want to be in this racket, you need to be willing to constantly change.

Empty your mind, be formless, shapeless — like water. Now you put water in a cup, it becomes the cup; You put water into a bottle it becomes the bottle; You put it in a teapot it becomes the teapot. Now water can flow or it can crash. Be water, my friend. – Bruce Lee

I get it Bruce. But I’m tired. I miss the days of links underlined in blue. My images don’t need to parallax scroll when I read a blog post. I don’t care about the extra niceties. Give me plain HTML with no fancy in-line images and I’m very happy. Do aesthetics have to change with the times? I know technology makes old tech obsolete. But it’s sad to think that new tech also makes old aesthetics obsolete.

End of rant.

This week I worked on 3 WODs

The first WOD required me to create a simple History of Modern Browsers HTML page. I got the content from Wikipedia and laid out the page easy enough. I added some images and created some links to present options to learn more about the creators of each browser. When I had to create a table of contents for the page I got caught up on named anchors and had to look them up online.

  • Time taken on first try: 14 min 50 sec
  • Time taken on second try: 7 min 30 sec

The second WOD required me to update my History of Modern Browsers HTML page to link to a CSS page to make my boring HTML page look better with some Web 2.0 style. I do love the ability to request fonts from Google. No need to purchase fonts. No need to download a local copy to my server. I also updated the body margins and colors to personalize the page.

  • Time taken on first try: 13 min 51 sec
  • Time taken on second try: 10 min 33 sec

The third and final WOD I completed this week was the easiest. I updated my History of Modern Browsers CSS styles to format the contents into a centered page with a three column layout. This was accomplished easy enough with the same float: left tags I used to display the images inline with the paragraph text.

  • Time taken on first try: 5 min 6 sec

Reflections on Completed WODs

The first WOD was the most difficult to complete in time. What I’m learning through the process of coding in a “dumb” IDE is that I rely on code completion a lot. When I don’t have code completion to link to a relative style sheet all progress stops. I have to google “<link rel=” and it takes up serious seconds. Also, linking to fonts hosted on the Google servers is not second nature.

The second WOD presented some problems for me. Without the assistance of Dreamweaver, my web-coding IDE of choice, I had to waste precious time googling how to link to fonts on Google’s servers.

The third WOD was the easiest for me. I completed it in a little over 5 minutes. Once I had warmed up with the previous 2 WODs doing the few updates required to center the content in a div and create a three column layout was easy. I’ve been working with CSS for a little over 10 years and I feel very confident in floating a few. I should study more about relative positioning in CSS.

Reflections on Repeated WODs

Most of the problems I encountered in finishing these WODs this week was that I don’t have a good handle on git branching without using IntelliJ or the GitHub application. It frustrates me to no end when I am trying to push a branch to my repo only to see the option to push it to master. I did learn that I could type in the name of the branch that I wanted to push the updates to.

After I finished my first attempt on the second WOD I reverted my changes to the master. I expected it to reload in IntelliJ but I still had my style.css file. In order to finish the WOD in a reasonable amount of time, I went in and copied the index.html file and ended up deleting the old repo and creating a new one. I pasted the index.html file in again pulled a local copy from the repo.

This method of copying files from the local repo and recreating the repo on GitHub works for these small projects. But I can see that as the projects get larger and larger I am hurting myself by not fully exploring the reasons why IntelliJ and GitHub seem hellbent on frustrating me with errors.

I made the following notes during my repeated attempts at the first WOD:

  • Had to search for named anchors.
  • Setting up a project in IntelliJ was different because it’s not a java file!
  • It’s like the tools IntelliJ and Github but they are not fucking working well together.

I made notes during my repeated attempts at the second WOD:

  • Gotta remember this bit of code: <LINK REL=StyleSheet HREF=”style.css” TYPE=”text/css” MEDIA=screen>
  • How do I do all headers instead of just h1 or h2?
  • How do I set images to be inline with text?
  • Switching back to the master branch gives me to the same style.css file. This should be gone when I switch back to the master branch.
  • Committing my push always goes to my master. I want to find out how to do it to the branch. That is where it needs to go.

And I made the following notes when I repeated the third WOD:

  • The instructions for this WOD do not specify all the necessary padding that is involved in getting these things to show up correctly. There are considerations for padding that are not addressed in the write up.
  • How do you center a div in the middle of the screen?
  • How about centering the thing vertically?
  • Also the links in the example are stylized with the rest of the text on the screen.

Suggested Reading

Programming for Visual Designers

Today I spoke to a group of advanced graphic design students in ART 467 at the University of Hawaii at Manoa. If you’re interested in having me speak at your conference/convention please contact me.

The Goal of my Talk

I am not going to explain how computers work in this talk.

You can watch a documentary on Youtube that explains how computers work. And these websites will show you how to code:

Today I want to get you excited about using computers to produce rather than consume. I want you to see that it’s not as difficult as other people would have you believe. But the most important thing is that you start today.

Are you qualified to give this talk?

I feel qualified to give this talk on Programming for visual designers because I nearly double-majored in Graphic Design and Computer Science. I took a lot of courses. I love the visual representation of ideas. Ocular input trumps all the other senses.

DOOM

Video games got me into computers. Specifically the video game Doom. This was the first game with blood, insane guns, demons vs space marines, and a killer frame-rate. Some of my friends got head-aches while I got more pizza and pepsi. I recently read the book Masters of Doom: How Two Guys Created an Empire and Transformed Pop Culture. It’s a fantastic read if you grew up playing Doom.

You don’t have to be good at math to program computers. It definitely helps but it’s not necessary. The primary requirement of a programmer is the ability to sustain focus for a very long time. That and the ability to hold many details in your head all at once. This is why an interest in meditation is common among programmers.

Meditation

Meditation strengthens your focus. I enjoy Zazen Meditation with emphasis on the book Zen Mind Beginner’s Mind by Suzuki Roshi.

Everything is a system. A model. A simulation. A learning experience.

Life and everything that makes it up are systems. Programming is about Systems and how they are designed. What can we learn from a simulation? How will a 3D model bridge behave in extreme weather conditions? How will our house look?

Enjoy breaking things down to their most essential parts, prioritizing that list, and getting the computer to perform that meaningful task.

If you want to talk to a computer programmer and keep their attention, focus on the following:

  • Precision
  • Efficiency
  • Forethought

This is why some of us are really into chess, or cooking, or astronomy. This is why Steve Jobs wore a black turtleneck and jeans every single day — he valued simplicity by removing the non-essential. Why waste 3 minutes picking out what you’re going to wear every single day? Systematize the regular, the mundane, and the trivial. And leave more room for Black Swans in your RAM.

MusicMaker v0.01

I’ve been coding a procedurally generated MusicMaker. Last night I booted up the program and recorded 10 tracks on my iPhone. The software works by creating a list of random notes in a musical key. Then it builds the sequence on 8 bar arrangements. The computer actually picks the notes it’s going to play.

If you would like to contribute to this project, please check out MusicMaker on GitHub.

Computers are like the microwave in Back to the Future 2. And they’re 1,000,000 times faster.

Life ticks by Microseconds

Our concept of time has been evolving since the invention of mechanized time in 1657.

If life feels like it’s speeding up it’s because it really is. Life doesn’t just tick by seconds anymore. There are new hands on the clock. Now, life ticks by microseconds.

A microsecond is an SI unit of time equal to one millionth (0.000001 or 10−6 or 1/1,000,000) of a second.Wikipedia

yt8NbAz

Computers are getting faster and faster.

Back in 1979, the first Apple computer used an Intel 8088 chip that maxed out at 0.75 Million Instructions Per Second at 10 MHz.

Now, the Intel Core i7 5960x processor in this futuristic-looking metal block is capable of doing 298,190 Million Instructions Per Second at 3.0 GHz.

Pro-tip for getting your ideas out of your head

4973990528_61258f6d34_z

Notepad + Tab = Invincible

Tabbed Systems modeling is a deceptively simple process that allows us to decouple, delineate, and decompose complex ideas into actionable items.

  1. Start with your problem.
  2. Write it out.
  3. Press return and insert a tab.
  4. List out the things you need to do to get this accomplished.
  5. For each of those items, break them down into simpler steps.
  6. Re-prioritize the list.
  7. Repeat ad nauseum.
  8. Get started on the top task.

Keep doing this and your problem will bend to your will. You’ll know what you need to do first. And that’s always the most important part.

Processing.org for Visual Designers

The Processing programming language is a subset of Java. You can download the entire programming tool from processing.org. Batteries are included. There is no need to install anything else. You now have everything you need to create and run an interactive project.

Here’s the code to create a spaceship like the one in Asteroids. Just copy and paste it into your Processing project and run it.

float shipX;//initial location
float shipY;//initial location
float shipAngle;
float direction;//ships's direction
PVector location;//ships's location
PVector velocity;//ship's speeds
PVector accel;//ship acceleration
 
 
 
void setup() {
  size(500, 500);
 
 
  location = new PVector(width/2, height/2, 0);
  velocity = new PVector();
  accel = new PVector();
 
  shipX = width/2;
  shipY = height/2;
 
  shipAngle = 0.0;
 
}
 
 
 
void draw() {
 
  checkKeys();
 
  background(0);
  stroke(0);
 
  velocity.add(accel);
  location.add(velocity);
  drawShip();
 
  accel.set(0, 0, 0);
  if (velocity.mag() != 0) velocity.mult(0.99);
 
  //wrap function
  if (location.x&amp;amp;amp;lt;0) {
    location.x = location.x+width;
  }
   if (location.x&amp;amp;amp;gt;width) {
      location.x = 0;
    }
    if (location.y&amp;amp;amp;lt;0) {
      location.y = location.y+height;
    }
    if (location.y&amp;amp;amp;gt;height) {
      location.y = 0;
    }
}
 
  void drawShip() {
 
 
  pushMatrix();
    // Translate ship origin
    translate(location.x, location.y);
 
    // Rotate ship
    rotate(direction);
 
    // Display the ship
    fill(105,95,95);
    stroke(255,0,0);
    triangle(-10, 20, 10, 20, 0, -20);
 
    // if the ship is accelerating draw a thruster
    if (accel.mag() != 0) {
 
    float thrusterCol = random(0,255);//thuster feature that appears behind the ship when accelerating
    fill(thrusterCol, thrusterCol/2, 0);
    triangle(-5, 22, 5, 22, 0, 40);
  }
  popMatrix();
 
  }
 
//moving the ship
void checkKeys() {
   if (keyPressed &amp;amp;amp;amp;&amp;amp;amp;amp; key == CODED) {
    if (keyCode == LEFT) {
      direction-=0.1;
    }
    else if (keyCode == RIGHT) {
      direction+=0.1;
    }
    else if (keyCode == UP) {
      float totalAccel = 0.2;                 // how much ship accelerates
      accel.x = totalAccel * sin(direction);  // total accel
      accel.y = -totalAccel * cos(direction); // total accel
    }
   }
}
cited code source

Global Game Jam

You could learn to code by watching other people code. Of you could attend the Global Game Jam and meet other people who are interested in making things. Share your favorites. And meet new programmer friends. Check out my blog post on the Global Game Jam to learn more.

Ready for Coffee and Code?

I’d like to help you get started. If you want to learn more about programming for visual designers contact me and let’s set up a coffee meeting. Aloha! Happy Processing!

Reflections on Testing with JUnit

junitLogoI’ve been coding a screensaver for the past 4 months. I honestly thought the project would be finished and out on the market two weeks after the main implementation of the code was finished.

Development was finished a month ago. But I can’t release it. I’m still reluctantly discovering new ways the screensaver could potentially crash on users’ computers.

I noticed that my screensaver would crash for any number of reasons:

  • The input images had been relocated.
  • The incorrect file format was used as input.
  • The user updated user preferences that broke the program’s execution.

I fixed those three bugs but there could be many many more.

Prior to writing this post I had only heard of Unit Testing. I had never applied unit testing to my projects. This week I had the opportunity to implement JUnit testing on a few programs.

“The ideal testing tool should give us confidence in our program exactly proportional to the confidence it deserves, so that we neither pass on a program containing errors nor continue probing a program which is error-free.

The Psychology of Computer Programming

Black box testing

JUnit allows programmers to specify tests on individual methods in their code. This week I applied JUnit tests to two Project Euler programming problems:

  • Summing multiples of 3 and 5.
  • Summing a sequence of Fibonacci numbers.

Completed WODs

Applying the JUnit code via IntelliJ’s built-in unit testing was very easy. The first time I attempted to clone a repo, create a testing branch, apply tests with JUnit, and push the changes I did it in 14 minutes and 28 seconds. Then I repeated the first WOD 2 times and managed to get my time down to 10 minutes.

I completed the second WOD in 10 minutes and 41 seconds. I did this WOD twice to exercise my ability to run the test configuration. The first time I ran this WOD I had trouble getting the test code to run. Every time I ran the code I would run the code execution. After doing some research online I found the keyboard shortcut to select which configuration to run. My second run of the second WOD was completed in 10 minutes.

This slideshow requires JavaScript.

Insights gained from WODs

After completing the WODs a few times I had the following insights:

  • Always run the edit configuration in Intellij with the keyboard shortcut: Ctrl+Option+R
  • All methods to be tested must be public or protected.
  • Always add package-info.java to the tests folder.
  • Always run Inspect code on the test code.

Reflections on Hawaii’s 2015 Global Game Jam

GGJ_round_logoI turned my phone off as soon as I finished work on Friday at 4:30pm. My entire weekend was booked solid. I would be helping to facilitate  the Global Game Jam in Hawaii at The Sullivan Center at I’olani School from January 23-25, 2015.

I was inaccessible. I was busy. I was at the Global Game Jam.

The Global Game Jam is the largest game jam in the world.

The Global Game Jam (GGJ) is the world’s largest game jam event (game creation) taking place around the world at physical locations. Think of it as a hackathon focused on game development.

It is the growth of an idea that in today’s heavily connected world, we could come together, be creative, share experiences and express ourselves in a multitude of ways using video games – it is very universal. The weekend stirs a global creative buzz in games, while at the same time exploring the process of development, be it programming, iterative design, narrative exploration or artistic expression.

It is all condensed into a 48 hour development cycle. The GGJ encourages people with all kinds of backgrounds to participate and contribute to this global spread of game development and creativity.

– globalgamejam.org

All photos were taken by Gabriel Yanagihara

Lessons Learned

Video games are the quickest, most satisfying, hands-on way to learn how to code.

Video games give you instant feedback. There is no need to parse the output. It either does what you want it to do or it does not. You can see it if you programmed visuals. You can hear it if you’ve added sound. It’s an animal that comes to life like Frankenstein. The game’s not sure of its conception. But it’ll be damned if it will not tell you it’s arrived.

Friday

After work, I biked down to the Sullivan Center at Iolani School and was surprised by how many people were there. Last year we had about 12 participants. It was an older crowd. This year we had around 30. The group was a mixture of middle school, high school, college students, and adults there to complete.

Great ideas floated around the room. There was a buzz that wasn’t there last year. Most of the participants knew how to use Git!

The theme of this year’s jam was “Now what?”

At the beginning, the most important thing in game development is just showing up. Here are a few lessons I learned on my journey as an independent game developer:

  • Start from where you are.
  • Always do the shitty first drafts fast.
  • Compile, play, test, iterate.
  • Everything is built little by little.

Saturday

No one needed help with their code. So I watched How to Draw a Bunny a film about Andy Warhol’s lesser known contemporary, Ray Johnson. I loved his obsession. Everything is a performance. Ray Johnson’s life became his collage. He remixed everything. There was no line between art and life.

I looked around and realized I was in the middle of a million Ray Johnsons. Everyone at the GGJ was remixing. Remixing code. Remixing visuals. Remixing ideas. It was beautiful. There is power in making video games.

Sunday

We announced, “One more hour!” Then, “10 minutes!” And soon it was over.

Everyone uploaded their games to the Global Game Jam server and we gathered in the presentation room. Each team had 5 minutes to present their games. Some teams has finished and some learned that they had been too ambitious. A lot of people said it was their first game jam. Everyone was smiling.

I got to announce the winners.

I had the participants drum on the tables to build up the excitement. I shook hands and congratulated the teams on successfully creating their playable games in 3 short days. I teared up a bit as I handed out the mini 3D printed joystick trophies.

2015 Global Game Jam – Hawaii Winners

  1. Best Overall#Awkward
  2. Best TechnicalDoc2Game
  3. Best VisualsLil’ Gitz’ Lootin
  4. Most CompleteJigDraw

Are you interested in participating next year?

Contact me and I’ll email you a reminder to register next year.