Minecraft #1/2: What I love about Minecraft

imageThe last two weeks I’ve been spending every free waking hour (and some I should not have spent) playing Minecraft.  A lot of people don’t get it.. and that’s okay.  I have a lot of thoughts floating in my head, so here’s my geeky post.  #TrueToSelf  (image: view of HobbitHole v2.0 – showing tree farm, animal farm, sugar cane and wheat)

What I love about Minecraft – Background

Back in the 90’s, I coded the equivalent of BCL’s on an LPMUD (related: LPC programming language) named Vincent’s Hollow.  (Its dead now – the software doesn’t run on any modern O/S).  Some of these included: the standard monster model, weapons, armor, statistics/enchantments, talk and chat system, email client, etc.   It was the most fun I ever had coding in my life.   (In addition to learning OOP and how to build amazing reusable systems, I also learned what it takes to lead (herd) a group of volunteer programmers, teach people to code, and in retrospect, the most important, to love people for who they are.)

I also loved the games NetHack (well, Moria to be exact) and Ultima 5.  They had a top-down game play that worked well for me – using my imagination to see what that world looked like. It was seamless, I did not see blocks, I saw beaches and woods and paths and stuff. 

As I proceeded in my paid career.. every new technology I learned – and I’m dating myself here — Clipper, SQL, Perl, C#/.Net, Signal/R, Mongo – I dream[ed] of writing a Mud with it.  It has never truly left me.  (related: when I saw WoW, it raised the bar so high that I could never touch it.  The dreams subsided for a while) (related link: my 2004 attempt at a mudding livejournal.  Precious.) 

While being a Mud “director”, I also spent a lot of time thinking about where gameplay could go.  I saw people get up to the level max of 20, and then.. then what?  Not everybody wanted to code.   So I started designing what I called “Frontier Land”, where you could either gather resources yourself to build castles and civilizations, or rope the locals into labor (if you paid them well enough) to do a lot of that for you, so that the competition could be taken to “who has the coolest most successful city”.    It was going to be a randomly generated world, with forests, villagers, mountains, monsters, etc.  There was going to be a monster mode where you could “become” a monster (not leaving a certain area) to go and kill players.  There was going to be a Karma mode where your actions to help or hurt other people (never liked griefers) changed your “luck” which stayed with your soul.. and to create a character, you had to be born into the world (to parents), when that character died, it was gone, but your soul went back to the lobby.

Enter Minecraft

I look in the game, and what do I see..

  • A blocky, unlimited, randomly generated world
  • Where you can build systems and processes and stuff
  • With a client and server model, multi-player

It definitely taps into several of my core patterns.  It is feeding a part of me that’s been hungry for a while.   Right now I’m still exploring it as a game, but there’s a part of me that is looking at a bigger picture.

Aside: Minecraft also feeds my love of LEGO which is the predecessor to blocky worlds for me.  When I was 12, I used to try to recreate the dioramas of canyons where Wile E. Coyote would chase the Roadrunner using LEGO.

So What Now?

  1. I have a whole other post brewing about  a “build” order of adventures in Minecraft.   (It was going to be part of this post, but single-responsibility, KISS, so I’m refactoring it out to its own class… err, post.)
  2. My dreams of writing an awesome mud(lib) (again).. now are transformed.  I want it to look like Minecraft.   I could do it in C#, and Signal/R, and .. and.. and.. oh yeah, only at the opportunity cost of everything else in my life.    Darn it.   #LotteryNowDangit
  3. I have several adventures left to experience in Minecraft – carts, rails, mapping, lava, villages, and cats is the short list.

So What Now — Second thought – transformed

Why build new when there’s already something that works?  What if Minecraft started allowing for Lua scripting .. so people could write behaviors into the world in creative mode… building some amazing worlds, games, adventures.. for adventure mode?

It could inspire a gazillion kids into their first programs.. like Muds did for my generation of tweens.

Not to mention recreate C-Robots – program your monsters to a fight to the death.. arena.. with Lava flows to avoid.

In Conclusion

I’ll put in a link to the adventure build order post when I get that done.   I’m pretty sure my wife is going to wake up any moment now, and I have promised this day to making our house better.   And… POST!

Working from Home

I started an experiment this week –  I set up a home office, and I attempted to work from home as the rule rather than the exception.

Pro’s and Con’s

The “Previous” column applies to previous work situations, when I was not in a consultant role.  It helps highlight how awesome my current setup is.

Green = Better, Red = Lesser, Purple = Can Be Improved

Topic Work from Home Work at Office Previous
Commute Time 5-6 hours/week time gained back not commuting 120 miles Time to listen to cool podcasts like Hanselminutes; (annoying traffic) Best commute time ever = 7 minutes walking.  (UGS)
Boot/Flow “Roll out of bed, make coffee, log in, and absorb / plan the day; then take a shower, and start getting things done” => My energy flows into work more gracefully, not rushing things so I can “get to work” (I have a hard time getting started in the mornings)  
Owning My Home I get to experience the house all to myself.. it feels good. ++Introvert (Never at home by myself – left in chaos and came home to chaos.  Didn’t know anything  was missing)  
Music Listen to music out loud, sometimes sing along and dance while coding I close my door so people don’t get disturbed “Nice work Geddy Lee” – Sean H – in response to my singing out loud with headphones on – I didn’t know I was singing
Ergonomics Standing desk, wall mounted 25” monitors (eyes don’t work so good) can be upgraded  
Light (Basement) but I put a lot of lights in Nice big window, office, door I can close (cubicles are so cramped)
Equipment Purchase own equipment; choice
(but costs money)
Good stuff provided (crap for hardware)
Snack-ology Lots of healthy snacks (and some unhealthy ones too)
(Too easy to get to snacking)
(Must avoid Free Oreos and Pop) Not free = good?
Lunch Food Easy transport of leftovers – keeping the fridge clean! (I keep forgetting to bring in my lunch)  
Pets Dogs curled up at feet = warm footrests and easy to love on; take a break to snuggle with cat    
5 minute / long compile breaks Dishes / cleaning gets done, house cleaner, don’t have to do in evening, I like cleaning as a mind-wiper. I do the Kitchen Inventory and Burndown graph of coffee supplies I used to do Sam’s Club runs for Cheesy-Poofs at a startup
Post work flow Walk around the block = exercise = clearer head    
Errands Easier transition to errands — all my errands are near my house, not near work; Life works better.
(Loose the 6 hours that were gained here)
(Have to plan for errands meticulously)  
Geeky Friends   Love the lunch time conversations about everything geeky  
Working as a Team   Much easier to whiteboard / see where folks are at / interact (“We’re all in this awful thing together” team mentality)
Time worked / Time Taken (Too easy to ADHD/interrupt – must use the force to stay on target) Default focus = work, nothing else to do  
2nd Half of Day (3pm: Take a break, suddenly its tomorrow) 3pm: Take a break; still at work; get back to work  
Underlying Motive “Working to be of Service” is what sustains me, “working for the man” mentality slips away (Used to confuse the two – now getting clearer) (“Working for the man” mindset – see below)
Interrupts (Wife/Family interrupts – when they are at home.  Working on it) Very few, to the point where they are welcomed (constant interru- now what? –pts)

Conclusions thus far

At first I thought it was an either/or situation – I had a primo office at work, if I started working from home, of course I should give up my work office for somebody who wanted it.   However – we’re now expanding our work areas.  My work place is cool enough that .. I may not need to give up my awesome work office if I start working from home more – I can have both.

It also depends what project I’m on.  My projects right now are solo efforts – the only people I interact with are on the Client side – so not being in the office is no big deal.  However, if I’m working with buddies at work – I would really rather be at work than working from home.    Especially if there’s a whiteboard involved.   Note, there are lots of tools now to get that accomplished – but nothing beats face to face time when working on a problem with somebody else.

The Motive Angle

Working from home is cleaning up my motives. 

I didn’t realize it, but the last 5 years of working at a certain company, I totally bought in to the (subtle) mentality of “the world is against us, woe woe woe, how can we survive today”.  The focus was to show up, figure out expectations, get exactly that done to not get in trouble, sprinkle in some fun if anything left over, and call it good.    It wasn’t really about being of service – the people we were servicing felt like they owned us (since they brought in the money, and we were an expense), and all blame flowed down to development.  I could still be of service, but I had to dig deep.

When I switched over to my current job, I brought some of that “yes master” stuff over with me.  Constant questions on “am I doing this right, is this as expected”, etc … I had an underlying lack of confidence that what I had was enough, I kept trying to act in a play that didn’t exist.

At the old place, working from home was “tolerated” – they would say “we need you here to be present to help out”; I think the truth was more like “You might not be working” and “We own you”.    

The new place – we were having some office space difficulty – need new offices built out.  I had an Idea, and asked if me working from home temporarily would help smooth some of that over.  To my surprise, they said “no need to give up your office – try it out and see if it works for you; we have faith in you”.  I was floored.

So I did it.  And in getting all that set up, I realized.. that “I must work to meet expectations” model just doesn’t work at home.  The people to please just aren’t there.    So what am I left with? 

For me, the underlying answer has always been:  To be of service.  To solve the problem at hand.  To do the next right thing.    To make people’s lives better. 

So that’s what I’m doing.   

Mvc concepts

I’m reaching the end of my first professional (== I got paid) MVC application.

I learned a lot. This is an attempted visualization of most of the topics that I learned.   You may need to click in to see the details.

In addition, as I found good sources of information on the ‘nets, I included links in my source code in comments.  Here is a compilation of those nuggets of goodness. If your post is mentioned on this list — thank you.

Link Goodness
 http://stackoverflow.com/questions/4367723/get-enum-from-description-attribute Embedding meta-data about things in enumerations
 http://ayende.com/blog/1595/nhibernate-mapping-creating-sanity-checks (NHibernate) Integration test to validate mapping completeness
http://www.codingoptimist.com/2010/11/nhibernate-hidden-gems-speed-up.html (NHibernate) Caching configurations (gain: 1 second, not worth it, dropped)
http://stackoverflow.com/questions/325156/calling-generic-method-with-a-type-argument-known-only-at-execution-time Having multiple types with shared logic was a wonderful spot for co-variance, but after about an hour, it was time to move on
http://www.nickriggs.com/posts/getting-the-id-and-name-attribute-generated-by-typed-html-helpers/ I had to drop down to a TextBox with an @class setting, and thus I couldn’t use TextBoxFor, so this came in very useful
http://www.codeproject.com/KB/cs/stringenum.aspx Used by a coworker somewhere in the guts of an automatic model-to-.Where()-clause LINQ query extension
http://www.mikesdotnetting.com/Article/125/ASP.NET-MVC-Uploading-and-Downloading-Files Made it oh-so-easy for me to save and upload intermediate files from this file processing system
http://stackoverflow.com/questions/1151987/can-i-set-an-unlimited-length-for-maxjsonlength-in-web-config/7207539#7207539 Before we got the Grid getting only 1 page at a time, we were getting everything – thus needing this
http://code.google.com/p/autofac/wiki/Mvc3Integration Autofac was just amazing. It made sense to me! Its what I would have done if i was writing an IoC container…
http://slynetblog.blogspot.com/2012/03/using-aspnet-mvc-4-webapi-with.html Using ASp.Net MVC4 with NHiberate and AutoFac .. pointing me in the right direction
http://forum.jquery.com/topic/span-text-new-text-not-working-in-ie  <span/> to <span></span> did the trick, then I could .text() it
http://stackoverflow.com/questions/10588587/jqgrid-does-not-render-correctly-in-chrome-chrome-frame An annoying bug that sent me searching for at least 15 minutes
http://stackoverflow.com/questions/5248183/html-partial-vs-html-renderpartial-html-action-vs-html-renderaction When the views became too large, I could refactor|extract view
http://stackoverflow.com/questions/2498187/system-web-extensions-trouble-deploying-net-framework-4-website-on-iis7 The target server to install on did not have MVC3; so I had to include it in the XCOPY deploy

Where did my time go?

This week i’ve felt hurried.. it felt like life kept getting in the way, preventing me from working the work hours I should to be working.

I can’t argue with a feeling, so I took an inventory, and mapped it out. With some help from my wife, and a history of text messages, I could mostly put together what was going on. (Harvest, the time keeping app for work, helps)

Inventory Result

The Blue is work.  Most of it was Working-At-the-Office (WAO), though some was Working-At-Home.. (WAH).. either in the Basement, or Outside. (Outside = it was a beautiful day)

The Yellow (yellow) is hanging with my spouselet .. which also happens to be very good for me, I enjoy that time immensely.   We’ve been watching Season 6 of Doctor Who.

The Orange is hanging out with people – my spouse’s family on Monday, and with a buddy for breakfast on Wednesday.  Note: Monday and Tuesday lunches should have been in Orange as well, I’m trying to make it a point to hang with the guys at work.

The Other Warm Color is “stuff I had to do”.  Some of it is house hold related stuff – some of it is being of service to other people.

And lastly – there’s Purple, the stuff I do for me.  Which includes writing this blog post, and my little jog around the block, and puttering around on whatever I want to do.

Analysis

Monday was bleah.  I had a family thing to go to, didn’t get my hours in.

Tuesday, I tried to catch up.  It was fairly training.  Wife and I recovered it well though.

Wednesday was shot – My son needed some assistance with homework, so there was some time lost to transit.  The good news there is, I could work from home – I multitasked – I had the dogs out, and the cat out, as I worked from my laptop.  It feels good to crittersit the critters and spend a little time with them.

What’s the problem? What’s missing? What needs to change?

I find myself lagging behind in my work hours and spending Friday, the day when I get 4 hours to work on anything I want (including this blog) — I spend it on catching up the hours I didn’t get done earlier in the week.

What causes this lag?    Its usually “household” things.  Sometimes its “people” things. Both of those are important, and they’re not going to budge.

The good news is, the days that I don’t have “life” going on, I can easily stay at work to get caught up.    Or even work from home to get caught up.  (I find that I can only work from home when I’m alone there – otherwise, my family drags me into their lives).    If I stay extra at work, I can usually put a workout in there as well.

Other Optimizations

I might try sleeping in till 7am, and not tossing and turning for an hour.

As mentioned earlier, I would like to add more exercise.   I’m not sure where – the current idea is, on days that “life” isn’t going on, work late, and add in a jog there.

Random thoughts: The YMCA is on my way to/from work, but the time needed after a workout to take a shower is a detriment; yet my chances this week of doing something on the way home .. there was only Tuesday.  I did jog on Tuesday.   So.. mission successful? Operating as designed?   Maybe the Late Night Jog is the best way to go, i used to jog at about 10pm or so, when I first started jogging.   After dinner, even, help with absorbing all those calories (diabetes related).

The Big Picture

I’m not seeing a lot of wasted time in there.. hours spent in front of a TV, flipping channels.

I am operating at 90% capacity, easily – with the remaining 10% necessary for buffer, sanity.   The occasional breaks – in white, with question marks – are signs of sanity, not places to cram more stuff in.

As a very wise person once told me – as my life progresses, I am going to find more and more good stuff that doesn’t fit.

What If I Were Retired

If I were retired, how would the ingredients change?

I suspect there would be a lot more puttering, and helping, and hanging with people going on.  And probably a lot less “creating” things (my current work).

Snot Funny

Insert standard: “Oh I don’t post enough” post here.  Seriously, i believe I have 2 readers other than myself.  (Hi Doug!  Hi Molly!)  (i just set myself up for disappointment, maybe its less than two)

I thought I would fall back to my dastardly plan of re-posting old stuff from the “geeky” tag from my livejournal, but what I found there was:  a whole bunch of started projects with nothing finished.  Not worthy of posting. A few cool pictures..

In other news, my wife thinks I might be somewhat ADD-ish.  Her diagnosis was on the basis of opened cabinets I left behind after working in the kitchen for even a small amount of time. I disagreed with her at the time. However, given the previous paragraph, that might be true.

Given all three previous paragraphs, I should refrain from starting yet another thread that I might or might not finish, so I won’t talk about what my plans for this blog are.

So all I can leave behind, then, is something like this:

a. Save Points

When I play a computer game that has Load and Save points.. the first 10-15 minutes back in reality.. I feel strangely out of touch.. imagining that life had load and save points and being utterly surprised that it does not.

b. Snot Funny

Sinus Infections have re-upped my anti-snottery artillery.

  • Throat Coat to remove itchy ickyness so i can swallow again. Add Honey as needed.
  • Because water doesn’t go down well, heat it up, add honey, then it goes down fine.
  • Neti-pot. for washing the gunk out of sinus cavities. Makes your cat look at me funny, as I kneel over the bath tub. There are other tricks to this trade, but they’re kinda gross.
  • Salt water gargle. Mouthwash gargle. I have not tried Vodka gargle.
  • Stuff gunked up? Cayenne pepper + lemon tea! Heavy on cayenne.
  • Vicks Vapor Rub! I’m never too sure if its a de-gunker or a runny-snot-dryer. I think i use it as both? And a throat-soother.
  • DayQuil and/or NyQuil. Take with food to avoid upset stomach.

Duct Tape and Lego’s

While discussing the finer points of avoiding RMI stress injuries (aka carpel tunnel, but there are several others) at work, JS mentioned “if he could only tilt his trackball up by a few degrees”…

Welp, I’ve been struggling the last 2-3 weeks with all kinds of arm pain.. leading me to try all kinds of things. I liked the “tilt” idea. So I made one from Legos:

Its not the only thing I’ve made. I tried making a Droid Charging Station, but that didn’t work so well; however my Lego Monitor Tilt works pretty good:

And then.. Duct Tape. This is the original version of the “I need a handle to pull the air filter out of the furnace” thingy:

Life is good.

Old Fogey

In the department of how-old-a-fogey-am-I, An email I wrote at work might be a good blog post here. It shows my early geekness.  It has been altered to be more of a blog post.

A Coworker wrote:

Looks like he’s got some dev cred. Plus I think that’ll make Sunny and me the old guys no longer…

My Response:

OMG I used to lust after the contents of that book!

I wax nostalgic:

I grew up in Liberia, West Africa; my parents taught at Cuttington University College.

we had power 2-3 hours in the evening (not enough gasoline for the campus generator). Just enough to get the refridgerators cool .. you took what you needed out at 4pm when power came on, and then shut it (with paper tape, no duct tape available there) so nobody would accidentally open it, and then it would get cool enough to stay cold till the next day.

I first met a computer, it was a TRS-80 model I (i think, might have been a II – image on left), a fullbrite professor’s kid (Lars F) showed me a little game called “Adventure”. Then he showed me BASIC. And I was hooked. (PEEK 14400!)  (Side note: Lars also introduced me to Dungeons and Dragons, and the Rubik’s Cube)

Later on, the campus got a “computer lab” – of TI-99/4A‘s. My parents, being math professors, taught the courses, so they brought one home with them. With that book. Of course, we didn’t have any of those cartridges.. all I could do was look through that book. (and this one also: image on right)

But yeah, i’d start planning my programs during school, on paper.. power would come on, and I’d type them in furiously, getting them to work.. play .. and then power would go out, and it was gone. Repeat daily.

(after power went out, light 4-5 candles and read novels for the rest of the night till mom pestered me to go to bed)

When I came to the US for the first time.. 1983 … i was amazed at, in order:
a) 24 hour power
b) hot water
c) vending machines
d) hamburgers
e) 300 baud models hooking up to Iowa State University’s CS computer .. which introduced me to..
f) UNIX!

*gratitude for the little things*

Diabetes Type II

I am a diabetic, type II.   I talk more about that on my livejournal.

I was reading a book, Wheat Belly by William Davis, MD.  It made a lot of sense, and fit directly into the knowledge that I already had — just gave me a new term, “AGE”‘s.   This confluence inspired me to put together a visio^H^H^H^H^H creately diagram of the concepts that I knew of so far, about my diabetes.

Here it is (click for full size):

This will probably get updated and reposted over time.  If you have any questions, ask, and I’ll tell you what I understand (but remember: I am NOT a doctor.  Just a geek.  With Diabetes Mellitus Type II.)

Backing up and Restoring

I recently helped my wife set up her new work computer. I could not do everything; the IT guy had to come in and add it to the domain, and she installed various essentials like Minesweeper (j/k, i think it was Photoshop).
Being a good geek, I intend to have a good image of that computer now that its set up.

So, I practiced on my laptop tonight.

Step 1: Back up the machine.
Hook up external Hard Drive
Boot off Hiren’s Boot Disk
Basically following http://sir-sherwin.blogspot.com/2011/04/disk-imaging-using-acronis-true-image.html
(except that I used Seagate Disk Wizard Something Something with Acronis support)
2.5 hours later, I have several .tib files (partitioned into 4.7g chunks)
For reference, the laptop had 55G of used HD space.

Step 2: Play with Backup
Attached external Hard Drive to my big computer
Downloaded http://www.vmware.com/products/converter/
Started to convert the .tib file into a vmware image
There were a lot of options.. i ended up hydrating to a 80G virtual drive, and got to choose the partitioning scheme.

1.5 hours later, I have a vmware image i can run.

Step 3: See Laptop living in VM on big computer
Left = Original; Right = VM

There’s a few problems with drivers.. to do it perfectly, I would sysprep the machine…
It definitely validates the backup, though.

Just ’cause I could.
Yep, life is good.

What do I bill?

My first client in the consulting world at my current gig was a big company.   They welcomed me spending all kinds of time, including overtime, to get their product built faster.  They were also using somewhat older technologies – VS2008, VB.Net, WCF/SoA, a hand written DAL, no BOL – to get the work done, and as a result, I knew pretty much what I was going to do.  There was no “play” time needed.

My second client, is a small company.  Every hour counts.  The less hours, the better.  Its also entirely up to me how to build it – so, how new do I go?

  • I could use all the cutting edge stuff that I don’t know fluently, charge the client for me learning the hard way.
    • This seems unethical.
  • I could stick to older stuff that I do know.   Only sell the client the skills I’m awesome at, and spend time to bring some skills up to awesome.
    • It takes a lot of extra time to become awesome at things.
    • As I have a family i like.. this is impractical.
  • A mix of the above.
    • How?
My Employer’s Solution
They have set it up so that I am “salaried” at 36 hours.. and I have an extra 4 hours to do a self-directed project.   During this time, i can become awesome at stuff I don’t yet know!  And it doesn’t have to be related to any current or future project, just stuff I want to figure out.
(I have a huge list of things I want to play with and get working…)

My solution

I have partitioned my list into three sections:

  • BUCKET A: The stuff I know how to do fairly well
    • Architecture decisions
    • Project management
    • Console app, Parsing command line options
    • Setting up diagnostics in various places to make the utilities easier to use
    • Database design
    • Setting up local test data environment
    • Research into options available
  • BUCKET B: The stuff I don’t know how to do yet, that I will definitelyhave to learn.  I do charge for this, and try to get it working as fast as I can.
    • Fluent NHibernate + NHibernate
    • MVC3.  I am NOT going webforms, sorry.
    • Dealing with ENUM’s in PostgreSQL  and mapping those to enum’s in C#.
  • BUCKET C: The stuff I need to play with to figure out &  use, but if I don’t figure it out immediately, I can get by without it.
    • SpecFlow / BDD
    • fastest way to setup- and teardown  data in the database for functional/integration testing
    • Selenium

Then, its not that I stay away from Bucket C, its more that I focus most of my time on Bucket A… till I feel i’ve been productive..  then B, and then maybe C.

I also timebox bucket C.  For example, i researched Specflow today, figured out that yes, i want to use that.. and then I cut that off at 0.5 hours.  The rest of my specflow “play” time will be “on my own” – until I get it working enough that I can move it down into Bucket A.

This gives me a clear conscience – I’m not charging the customer for playing/learning  stuff that was not required – instead, i realize that with any new technology, there’s going to be some “settling” of it into my toolbelt, and that does take time.  I cannot “rush” that time – so I’ll do myself a favor, and not pressure myself into learning it quickly.

For that matter, I timebox bucket B as well.   For example, I could not get C# enums to save as PostgreSQL ENUM’s in about an hour of trying.  I had a workaround – save as TEXT.  I went for it – can revisit this at another time.

How this works at home

Hanging out with my wife is one of the joys of my life, and I do not shelve that easily.  Luckily, synergistically, My wife had dinner with friends today, so I was able to make tonight into “tech playtime”.   I combined playtime with  bringing my VMWare work image home on an external hard drive – and that worked beautifully as well.

My next chance for evening tech playtime, unfortunately, may not be till next week. But, if I can get ahead of my required hours at work, i might convert some work time into play time.    Getting in to work early means I can do playtime starting at 3 or 4 pm!