Thursday, December 31, 2015

A Model for Corporate Power Distribution

In 1997 Geoffrey B. West, James H. Brown and Brian J. Enquist published "A General Model for the Origin of Allometric Scaling Laws in Biology".  I don't have access to the paper, but it is summarized in a youtube video here:


How Fractal Patterns Perpetuate Through a Tree, and then a Forest - Bonzai Permaculture -

In 2009 they also published A general quantitative theory of forest structure and dynamics.

The gist of the studies is that an individual tree's branch distribution (size, distance between branches, and most importantly oxygen production) provides an accurate prediction of the whole forests tree distribution.


I tend to believe these studies provide a basis for company skill level distribution.  Call it "brain power" if you want.  In a power-optimized company, there will be a fractal distribution of people with various capacities and skills.  They won't all be power-players because there is mundane work that also needs to be done - there's a wide distribution of needs addressed by a wide distribution of workers.

The alternative is a farm-model, where the whole undergrowth of a wild forest is stripped away.  This then becomes a question of whether the farm is more efficient than the forest.

Tuesday, December 22, 2015

The Harass-Justify Pattern

I did not even want to write about this.  Then I load youtube to watch a tutorial on Scala, and up pops this ad!

I had already written this article in my head, decided I didn't want to write about it, and then I see exactly the ad I was thinking about, all in a matter of about 1 minute.

Okay!  I'll write about it!  Here's a screenshot of the ad:


Harass

The ad starts out by saying "these are real people".  I.e. they are not actors, other than the guy throwing eggs at them.

As the people go to sit down at the table, the man in the middle throws eggs and the real people jump in surprise.


Justify

If you didn't skip the ad, the middle man explains something about "life is hard to respond to when there are surprises" or something along those lines.  The justification for the harassment of throwing eggs at complete strangers is "I have some insight to share."


The Pattern

Whether or not the insight is valuable is not really interesting to me.  What is interesting is that the 2 behaviors "harass" and "justify" are presented in combination.  Throwing an egg by itself isn't enough.  And justification by itself apparently isn't enough either.  It is a theatrics pattern.

That's all... I'm going to watch about Scala now.


POSTSCRIPT

This is really obsession-compulsion, where "harass" is the compulsive behavior ("I must"), and "justify" is the obsessive thinking.  The justify is like a broken record that keeps playing over and over again.  There's some projection of "if everyone only could see what I'm obsessing about, they would understand my harassing behavior".  Such thinking is fantasy.

I guess the pattern could be generalized into Powerplay-Justify.  It's a "when words are many, sin is not far..." sort of thing.  Something about it doesn't smell right, as opposed to people operating in a natural outflow.

We could ask "what is source of obsessive thinking?"  There is a source.

Wednesday, December 16, 2015

Getting Started with HP's Fabric-Attached Memory Emulator


HP's The Machine

HPE has new hardware coming out soon called "The Machine".

If you want to write software for The Machine, you can start learning about it here:

https://github.com/FabricAttachedMemory/Emulation


I won't claim to be any sort of expert, but I was curious to try.  The point of this post is, don't let anything get in your way.  If you are not a "guru" - just do whatever you need to do and there will be something learned in the process.


Run Debian 8.x

I'm on a Windows Vista PC, and I already have Oracle VirtualBox installed, so it wasn't very difficult to start a virtual machine that runs Debian 8.2.0.  I got my Debian distro here for an i386, but you might need a different target processor if you're running an AMD machine.  It's an iso file, and has to be burned to a boot disk (supported in newer versions of Windows, on my old Vista box it brings up Roxio Easy Media Creator 9 for burning an iso to a disk).  Alternatively you could use real hardware to install Debian, or a VM in AWS et. al. - you might even be able to do this on a raspberry pi (though I doubt it due to version requirements of the package).

NOTE: When setting up the virtual machine, the HD must have at least 19GB free, so I recommend something larger.  After more than 1 attempt, I was able to succeed with a 27GB HD fixed size HD for the VM.  It looks like 22GB would have been enough.

If you are new to Debian, try finding Search and type "terminal" to open a terminal.  My Debian install did not run sudo from the terminal.  That's okay.


Install Git

For now I'll ignore no sudo.  After installing Debian, and logging in as a user, I could log in as root via "su", and then:

$ apt-get update
$ apt-get install git-core


then log out of root and go to the user's ~ home directory and run:

$ git clone https://github.com/FabricAttachedMemory/Emulation.git

This resulted in an Emulation directory and I could run:

$ ./emulation_configure.bash 1

which failed with:

Error: The Following command(s) are needed:
vmdebootstrap virsh sudo qemu-img brctl




Install QEMU, vmdebootstrap and libvirt-bin

From root:

$ apt-get install qemu-kvm

$ apt-get install vmdebootstrap

if you need sudo:

$ apt-get install sudo

and finally:

$ apt-get install libvirt-bin



Run it (still from root):

$ ./emulation_configure.bash 1

It asks:

Change /usr/lib/qemu-bridge-helper to setuid root (yes/no) ?

yes

Error: /tmp has less than 19 G free

At this point I couldn't find any way to extend the HD on the VM.  If needed you might try creating another volume and mounting it - but I started over.

With adequate HD on the VM, it now complains "No proxy setting can be ascertained", then eventually:

Failure trying to run: chroot /tmp/tmpDx8e9z mount -t proc proc /proc

and

Build of /tmp/fabric_template.img failed

Looking into the documentation at https://github.com/FabricAttachedMemory/Emulation.git might give some clues where to go next, but that's as far as I will go today.  Thanks.





Wednesday, December 9, 2015

Augmented Reality Target Recognition

Last night I was up until 3am making this video.


Actually the video was done at about 9pm, or even earlier, but for some reason I couldn't get the video from my camcorder.  I started to wonder "did something break?"

There was this sort of ... prompting ... a real message I had seen earlier that evening which said:

 "Stop giving up."

Now what can you do with that?  Well... keep trying.  Finally at 2:30am I see the manual for my camcorder talking about "Use only a Sony cable" and after so many other wrong attempts found out I had a different cable, plugged it in.. and everything worked again!  Ugh!


Augmented Reality Target Recognition

The video was implemented running Unity app on an iPad.  There are 5 target images in the Vuforia plugin of common items.  The 3D doll that gets projected onto the items is one feature that has some application, but the bigger application is bringing in context according to which target the camera recognizes.

I had a specific application in mind, but it opens a whole world of interesting UX user experiences.  Going through the process is mind-expanding, and really fun.


Everybody Already Knows How To Do This

As soon as I posted this video, I suddenly realized "this is nothing new!" and I had some real doubts about why I should pester anyone with this technology.  Well... if that's the only way I can learn something new, then it's just part of the process.


Importing Packages Into Unity At Runtime

Because the application only knows those 5 target images I had processed on the Vuforia website, the next step seems to be experimenting with loading packages in the Unity app at run-time.  According to Unity documentation, that is supported!  So this would open up some very wide applications to at least allow some application administrator to set up their own library of recognized images.

Thursday, December 3, 2015

Augmented Reality Experiment

I used Vuforia, and it was relatively easy.  Low light conditions don't seem to work very well, but it's a start!



Wednesday, October 14, 2015

The Antidote Pattern

There's a quintessential Christian marketing story that goes something like this:

- Person was desperate

- Person experienced miracle

- Person became a Christian

When I called myself a Christian for many years, and before that growing up in a Christian home, I heard this story with variations over and over.  The frequency was maybe never lower than every 3 years, sometimes more often, at least that's how I remember it.  My mother LOVED repeating every new variation of this story when it came out.

Every time I heard this story, I had 2 responses internally: the story was always unverifiable, and the story was always believable.  At least it was believable when I heard it for the first time.  It lost some of that luster after hearing it countless times though.

Then many years ago I left Christianity, and I never heard that story again in other religious practices.  There are other parallels to Christianity in other religions (like love your neighbor as yourself, or practice kindness, etc) but from what I've picked up in Buddhism or Hinduism or maybe even Mormonism - at least so far I've never heard this type of story.  And possibly that's why at a very deep level Christianity just wasn't for me - at a certain level the story produced more doubt than it produced devotion.

The closest story which also shows up in other religions is something like this:

- Person has good practice

- Person lives good life even with hardships

That story shows up in Christianity and Judaism (i.e. Job, Habakkuk), but also in Buddhist Koans and maybe even something like it is in the Baghavad Gita.

Back to the marketing story.  My only explanation is that this story exists on 2 levels.  It may actually reflect real events.  But it also serves a purpose for countering lost practice.  So I think of it as an antidote.  If you have really bad theology (namely the whole universe is really tainted with sin and all people are fundamentally bad) and everyone in your religious practice actually believes this bad theology (rather than seeing it for what it is, a metaphor of the not-yet-born-again-enlightened mind), then nobody new would ever come in.  So that horror theology needs an antidote story.  And you have to keep applying this antidote over and over again.

It is similar to the "end of the world" story that comes out at about the same frequency - every 3 years or so - where the world will end on such and such a date.

Now maybe that's not true.  Maybe I'm seeing something that's not really there.  Maybe your mileage varies.  But the idea of an antidote pattern seems a compelling storytelling mechanism, so I present it here, because storytelling and game design are closely related.  There is something very human going on here, and it seems worth mentioning.

Thursday, May 14, 2015

Interview question from hell: "Which text editor do you use?"

About 200,000 years ago - it's not really important when it was - I was in an interview somewhere... also not important where.

And at one point they asked me "which text editor do you use?"


This was apparently a part of the company conversation: "Which text editor?"


----------------


Some other place which I remember quite well, I was asked to "fix my tab settings in my editor" because my code didn't look like everyone else's.

I think I looked at it for about an hour... got a confused feeling "what's there to fix?" and gave up.  And then for the rest of my career at that company I felt deeply guilty that my code's tabs were wrong, and I didn't know how to fix my editor to comply with everyone else's code.


-----------------


"What drives this conversation?"

Well I'm glad you asked.  It just so happens it seems to be driven by merge conflicts which aren't ignoring white space.

And my own personal sloppiness.  You see, I can read a file and mostly ignore the white-space, and somehow my brain parses all that and says "yep that will compile fine" and go my merry way without even a thought given to correcting all the spacing.  But not everyone can do that - or even _should_ do that.


------------------


So I'm trying to come up with a solution.

One solution is to mandate company-wide "everyone shall use whatever editor the star performer coder is using" and then every year after the star performer quits to go work for Google - you can pick a new editor that everyone has to switch to.

This just might be the way to go.


-------------------


But the alternative I'm really wondering about is to let everyone use whatever editor they like - and have an automated process upon check-in which does something like this:

1) Remove all the whitespace in the code
2) Run a "prettify" algorithm that adds spaces or tabs
3) If it added spaces, convert them to tabs


4) Never code in Python...  :)  (sorry...  for Python I think you are stuck mandating a specific editor).


--------------------


Git has check-in hooks that can run automated processes like this, to guarantee whatever sins the editor committed, they will all be erased and the code in the repository will be consistent.  That way any merges between branches won't have any changes that are purely white-space.

git merge -Xignore-space-change would also fix this.

Thursday, January 22, 2015

Why Board Game Manuals are Evil

You bought a new game.


And it's gorgeous!  Oh it's going to be so much fun!


So you read the manual and start to figure out how it works.  The manual is a work of art - the whole game experience unfolds before you as you read it.


Finally you feel ready to host a game, and invite friends over to play.


And what happens next?


Do you give everyone a copy of the manual and order them to read?


Or did the manual explain to you how to be a good "game master" - organizing all the details of the game in such a way that everyone feels compelled to keep going forward with the process of learning the game?


The Indescribable Importance Of The Wiener Pattern

At this point, a game will either "magically" be great and everyone loves it, or half the audience at your house will want to play and half will have no clue what is going on and wander off with confused looks on their faces, or nobody even shows up in the first place.  Oh sad.


This is why the wiener pattern is so important.  And why game manuals usually fail.  It's not that the game manual is at fault - it's that someone else usually explains the rules to the players.  And that person probably likes the game, but doesn't know how to propagate that "like" to other players.


The answer is the wiener.  How can a game be designed that the whole learning process is a continuous stream of wieners for all skill levels and not rely on a "game master" to do the work of producing wieners himself?


A Gigantic Pile of Details

My experience has been that some board games are so detailed the first few minutes involve hearing a gigantic pile of rules and explanations of "this is what this card is" etc.  It can be overwhelming.

And overwhelming makes me feel dumb.

Now sometimes it's my job to feel dumb - but not everyone is so forgiving.  They might not want to come back next time to visit such unfamiliar territory.


Organize The Piles Into Easily Digestible Categories

One way to incorporate wieners into a board game, is to make the game unboxing itself part of the learning process.  There can be a specific order that items have to be taken out of the box - so that everyone watching isn't overwhelmed with "everything all at once".  Instead, there may need to be boxes within boxes, to allow categorization of game concepts.


Put The Game Master Into The Game Itself

This offloads the burden from the game master and shifts it back to the game explaining itself, in it's own way.  It can be as dramatic as it needs to be - but it no longer relies on the game master's dramatic skills.  This way the game is it's own game master, inviting everyone to learn in a consistent way regardless of how much exposure they've had.