I Bought an OUYA

In which I write about my OUYA.

My son wants to write a console video game. ID@Xbox turned down our application because, well, he’s never written a video game. He’s not a Playstation player, so not that either. I dislike Nintendo. What console can he write for? The OUYA, an Android OS based game console!

The OUYA

Image courtesy of engadget

gohaml v2 Coming Soon...

In which I reiterate what's in the title.

I have a relatively difficult-to-understand and, therefore, difficult-to-maintain implementation of HAML over at gohaml. I’ve kept it “up-to-date” as Go has matured to version 1.0. Now that it has, it’s time for me to make good on something better for the open-source community.

First off, the new gohaml will pass all tests in the excellent haml-spec fork that I’ve created to run gohaml against it. As soon as I get those passing, I’ll submit the pull request to the real haml-spec for inclusion in their repository.

Secondly, gohaml has a new structure. Hopefully it will make the whole of the library easier to understand and conform more to the structure of the Ruby implementation of HAML from which all good HAML-ness flows.

My Houston Tech Fest Materials Posted on GitHub

In which I send you over to GitHub to look at stuff I did.

If you’re looking to develop with .NET on your macOS system, you should probably use Visual Studio for Mac.

I created the houstontechfest2013 repository over on GitHub. It contains the presentation slides (with speaker notes) and some commented code that I went through during the presentations.

Setup ASP.NET MVC 4 on MonoDevelop 4.1

In which I provide steps to get ASP.NET MVC 4 running on MonoDevelop 4.1

Newer instructions for ASP.NET MVC 5

I have newer instructions for newer tech over at Setup ASP.NET MVC 5 on MonoDevelop 4.2.

The information in this article is seriously out of date. It will probably not work for you. Please, don’t try it unless you absolutely have to try it.

Instead, maybe you should try Visual Studio for Mac.

Rubinius 2, rbenv, and Rails 4 on OS X

In which I share what I did to get it working.

I like rbenv as my ruby version manager. I plan on deploying a Rails 4 app to my own server, that is, not Heroku or Engine Yard. I want to try puma as the Web server for that Rails installation. So, here’s what I did to get everything working correctly on my Mountain Lion MacBook Pro.

Install rbenv and ruby-build

  1. Install rbenv following the instructions of Basic GitHub Checkout
  2. Install ruby-build as an rbenv plugin
  3. Restart your shell

Get rid of the bin from your $PATH

  1. Start a shell (if you didn’t restart it from the last step in the previous section)
  2. Set the PATH variable to the PATH variable without any part of the PATH that points to the $HOME/.rbenv directory

Install Rubinius 2

  1. Install Rubinius 2 rbenv install rbx-2.0.0-rc1 rbenv rehash
  2. Add the following line to your .bash_profile to force Rubinius to use the version 1.9 interpreter. export RBXOPT=-X19

Create a Rails 4 app

RBENV_VERSION=rbx-2.0.0-rc1 rbenv exec gem install rails
RBENV_VERSION=rbx-2.0.0-rc1 rbenv exec rails new «your_project»
cd «your_project»
rbenv local rbx-2.0.0-rc1

Profit!

Python Visitor Now on GitHub

In which I provide a link to a code repo for pyvisitor.

I created the pyvisitor repository over on GitHub in case you want to use my implementation of the visitor pattern in Python.

I’ve released it under the MIT license, so you can do whatever you want with it.

It now occur to me that I should have released it under the WTFPL, but I don’t have the heart to change the LICENSE file.

Hope you enjoy it.

Reading Ain't Writing

In which I bemoan my lack of production and increased rate of consumption.

Over the weekend, I re-read three Neil Gaiman books: American Gods, Anansi Boys, and Good Omens (with Terry Pratchett). They made me smile and, at times, laugh out loud at others. But, when I finished them, a lugubrious mood settled over me. Not the one that I normally feel when completing a good book and regret that it has ended. No, I felt bad because I haven’t written anything over the past two weeks. Moreover, I haven’t written any fiction in over a year.

Follow-Up to Python Visitor

In which a reader points out I'm wrong, wrong, wrong.

I got an email from a reader in Spain that read, in part

I did a test and got an AttributeError. Maybe you are interested in debugging it.

The email referred to The Visitor Pattern in Python which I wrote in January of last year. I pulled down the code, gave it a whirl, and found that I had a bug in it.

Wrong code ⇒ bad code.

I wanted to debug it.

Inbetween MVVM and gohaml

In which I give you a preview of upcoming blog content.

I had planned on putting up another post when Monday rolled around, one that continued the MVWTF discussion I started last week. My friend, Ed, reported that the post seemed incomplete because I dropped the MVVM ball. I couldn’t help but agree.

On Sunday, I started the MVVM post. However, it has run away from me. Far, far and away. I have put about 12 hours of work into the post and I’ve only half completed it. This has not resulted from an immense amount of content; rather, it has resulted from trying to create precise content. To quote Dr. Andre de Korvin, “We must lose precision to make significant statements about complicated systems.” Well, I ain’t losing no precision, here, so my significant statements take longer.

MVWTF? Part II - MVVM in Detail

In which I study the MVVM so-called pattern and present a plan.

For a long time, Model-View-Controller, Model-View-Presenter, and (with far slimmer adoption) associated patterns represented the accepted patterns for the objects that participated in organizing the responsibilities found in a graphical user interface. But, back in November 2010, the Microsoft® patterns and practices team published the Model-View-ViewModel (MVVM) Pattern that takes advantage of their WPF and Silverlight user interface toolkits. Now, we have MVVM toolkits in lots of different languages and rendering targets. This post discusses the pattern, its requirements, and its awesomeness.

MVWTF? The Histories (and Differences) of MVX

In which I get all pedantic about MVC, MVP, and MVVM.

I just got done reading yet-another-article about knockout.js. Unless you’ve lived under a rock for a while, you already know about knockout.js. This is NOT another article on knockout.js. The author of the article decided to spend 600 words explaining the differences of MVC, MVP, and MVVM so the reader could understand the pattern adopted by knockout.js. I think he got a lot of it wrong. That’s why I really want to talk with you about MVC, MVP, and MVVM, their histories, and their differences.

Crap! I Broke My Blog. Again.

In which I warn you about renaming GitHub Pages repos that back custom domains.

I have this blog, right? I host it with GitHub Pages, right? To do that, I have a repo named «realistschuckle.github.com» which redirects to curtis.schlak.com when someone types it in. Turns out that migrating that to another repo didn’t work.

I created that repository back on 5 December 2011. The instructions, at that time, directed me to name it «[username].github.com» and that’s how I get my custom GitHub Pages site.

Awesome.

Because of the recent problems with GitHub Pages, I have spent a lot of time in their documentation. During that reading, I discovered that the new naming convention goes ends in «.io» instead of «.com». On the page Should I rename <username.github.com> repositories to <username.github.io>?, they instruct that

If both a username.github.io and a username.github.com repository exists, the username.github.io version is used.

To host my blog’s content, I figured I could just create a repository named «realistschuckle.github.io», host the locally-generated content from «realistschuckle.github.com», and all would work correctly.

Nope, it did not work correctly.

GitHub Pages, jekyll, and Me, continued

In which I find another bug in GitHub Pages.

Last night, I sat down to investiage my jekyll and Github Pages problem. I made a change that reverted most of my content for the blog, pushed it, and GitHub Pages built my content like a champ.

I made another change and pushed it.

Nothing. GitHub Pages failed to rebuild my content. I sent an email to the exceptional GitHubber with whom I’ve dealt and he replied with the following:

I’m sorry to tell you, but I think you’ve stumbled on another bug. It looks like Pages aren’t rebuilding when the pushes happen so close together. I’ve opened another Issue for our team to figure this out. Hopefully, we’ll get this fixed up soon, since I’m also unable to trigger a rebuild on our end.

Bummer. He said that if I want the content up, I should just build it locally and push the generated content, instead. So, I’ll do that, for now.

Hopefully, you’ll see this content. Sometime. Soon.

I still ♥ GitHub.

GitHub Pages, jekyll, and Me

In which I explain where everything went...

It turns out that I have somehow managed to introduce an edge case in my blog’s content that causes jekyll to fail on the GitHub Pages server. It all runs fine on my machine. It runs fine on a GitHubbers machine. Just not on the Pages build server.

It fails with this helpful message:

error: interning empty string.

So, now I’m trying to fix it the old fashioned way: incrementally.

Uglier Front page!

Look at this new ugly front page!

I don’t know why, but my previous front page started to offend me.

Now, I have a newer, uglier front page.

The continued uglification of my site will continue.

Vive le truand!

jekyll's New Draft Feature

In which I note the new feature of jekyll that I really like.

I just updated this site to use jekyll v.1. It builds my site faster which is good during the local development of a new posting. It also has better messages about the build, including a “done” indicator which the last version I ran did not have. Here’s some actual output from saving this file:

Regenerating: 1 files at 2013-05-17 11:35:36 …done.

That’s awesome.

The best feature, by far, is the support of the _drafts folder that contains works in progress. Previously, you had to specify the date of the post for a future date and use the --future option to get those included in the site build. Too much work!

Now, just put a new markdown document in the _drafts folder and they show up at the top of the list using the file’s last modified time. Awesome!

If you have a blog and want to use something other than Wordpress, try out jekyll and use GitHub Pages to host the content.

Easy peasy lemon squeezy!

jQuery UI, knockout.js, and Custom HTML Events

In which I reveal a solution to the fundamental problem of unifying the libraries.

Ok, so, I’m a purist. I like things to do their job, do it well, and not reach beyond their boundaries of functionality. In this case, I refer to jQuery UI and knockout.js as the things under conideration.

I think that each library has a strength that I want to use in my Web application:

jQuery UI
Used to create widgets and handle events like mouse clicks.
knockout.js
Used to bind values from JavaScript objects to HTML nodes (and back again).

The problem

With that in mind, I encountered a “problem” with getting the two to work seamlessly with one another specifically around using the jQuery UI Datepicker. When a user selects a date from the calendar control, the Datepicker sets the value of the associated INPUT node with the selected date.

How does it do that?

Shhh! I'm reading Inferno

In which I tell you to be quiet.

I’m reading Inferno by Dan Brown of The Da Vinci Code fame.

I don’t like it much. It does hold my attention more than The Lost Symbol. Barely.

Oddly enough, its main plot device is the same plot device I wanted to use in my own untitled novel planned a couple of years ago but never written.

If I write it now, everyone will just say, “That’s so derivative.” And, in anything other than calculus, derivative just ain’t no compliment.

Oh well. Opportunity lost.

See you tomorrow.

My Bookshelf of Broken Technologies

In which I list the contents of my professional bookshelf.

Sixty-six books.

Woe is me.

Woe is my bookshelf.

Woe is Seymour Lipschutz who wrote my set theory book.

Modeling in Color, Part V - Full Domain-Neutral Component for the Athletic Club Exercise

In which I present my full model for the athletic club exercise.

In this article, I show my total design for the athletic club exercise. You could have totally figured that out from the synopsis for this post; however, since you, dear reader, only remember 30% of the crap that you read, I’ve now upped my chances of sticking in your cerebrum just a little bit longer.

Modeling in Color, Part IV - DNCs for «moment-interval»s

In which I discuss identifying the «description»s, «thing»s, and «role»s in our example

This post concerns itself with identifying the participants in our domain model that we have not classified as «moment-interval»s. That means we’ll look at «thing»s and their associated «description»s and «role»s. But first, I want to recap what we’ve completed so far over the past couple of days in case you’ve jumped in mid-series. If you’ve followed along, however, you can jump to the new stuff.

Modeling in Color, Part III - The Mighty «moment-interval» Archetype

In which I discuss the "timeline" core to modeling in color.

In Java Modeling in Color with UML, the authors define the «moment-interval» archetype as

something that one needs to work with and track for business or legal reasons, something that occurs at a moment in time or over an interval of time.

Originally, Peter Coad called this archetype «transaction»; however, this caused a lot of confusion in the programming community due to the implication that “transaction” meant “business transaction”, like a sale or a purchase. Coad actually meant the purer definition of the word as an exchange or interaction between parties. Because of the confusion, he renamed the archetype from «transaction» to «moment-interval», a more cumbersome phrase with a neutral meaning.

This post discusses finding «moment-interval»s in our problem domain and using them in our object-oriented designs.

Modeling in Color, Part II - Categorizing Classes With Archetypes

Considering the first step of modeling in color.

I think the stuff from yesterday's post kind of sucked. Sorry about that. It seems that my perishable skill of writing nears six feet under. I’ll endeavor to make today’s post more lucid, cohesive, and informative. Perhaps that will revive my chosen word.

I told my nascent development team that we would use modeling with color as our object-oriented design philosophy. Then, I reserved a conference room for four mornings so we could learn this practice first hand. I started by showing them the following list of user stories.

  • People join the club to become members and get invoiced monthly a flat fee and participation fees for classes
  • Participation fees for classes consist of a prorated amount of the instructor’s hourly rate and a percentage of the cost of the equipment used by participants in the class
  • Record member purchases of food and beverages from the club for rewards
  • For every ten dollars spent on food and beverages from the club, the member receives a one dollar credit on their next invoice.
  • Members RSVP for classes and their arrival is recorded
  • Instructors schedule rooms and equipment for classes

Then, I asked them to break out in groups and create some static class diagrams that model the problem. From three groups, we had four designs emerge. They all looked like candidates for creating software to address the user stories. However, they all looked different. They all lacked some transactional information. Nothing wonky, mind you. Nobody forgot to include a Person class. But, this project that we’ve launched will grow in number tenfold over the next year; I want the code to look and feel the same regardless of who wrote it and when they wrote it. Modeling in color to the resuce!

Modeling in Color, Part I

The first in a series of entries talking about Modeling in Color

Over the past six years, I’ve tried to apply the lessons from Eric Evans’ book with regards to collecting requirements from customers and, then, building a robust object-oriented design that embodies those requirements. I have had quite a bit of success with domain-driven design and can attest to its strengths. However, when I started using Evans’ recommendations, I had already spent the previous eight years honing my OO acumen, decomposing real-world problems into software-based solutions.

As you may have noticed, I haven’t written in a while. Between bringing home the bacon, eating the bacon, and riding around on another porcine entity, I haven’t spent time tending this little word garden. Yeah, shame on me. But, I recently spent some time talking with my nascent development team about object-oriented design and how they should perform it as we move into a business-focused cycle of coding. I wanted some process that would provide a standard by which they could enter into the practice of OOD and come out the other side with philosophically similar designs.

What to do?

Sitting in my office, I looked over at my Bookshelf of Broken Technologies™ and spied a book that I hadn’t read since the early 2000s: Java Modeling In Color With UML: Enterprise Components and Process. I vaguely remembered something about Post-it® Notes. I read the book through and sat back amazed.

This was it! An easy-to-understand, attainable OOD philosophy. With examples.

Let me write that, again. WITH EXAMPLES!