Quite a week of martial arts.

I started the extended weekend timeframe with my normal martial arts club, the Columbus Ninjutsu Club.  Most regular readers probably know that I study there, and am a big fan of the art of Ninjutsu.  Thursday, we did Yoko Nage, one of my favorite throws.  It meant hitting the mat many, many times though – probably forty over the course of the class.  Then I did the first randori (full speed training) that I have done in months with friend and fellow ninja Adam-san.

I knew I would be sore the next day, so I drowned my sorrows in 800 milligrams of Advil and 32 ounces of Muscle Milk.

Friday, I was sore.

Saturday I was REALLY sore.

Sunday, I have a three hour seminar with Don Frye.  Don and Dan-sensei are working on a movie together, Apparitions: The Darkness, and had some filming to do in Michigan.  Also, the Arnold was this weekend, so Don was here for that.  In between the two, he held a seminar for us.  Nice guy!

Don Frye seminar

Learned a lot from Mr. Frye.  He is built more like me – heavier, bigger boned – rather than the light willowy guys that mostly make up our classes.  His methods for getting people on the ground, especially, are very much along my idea of best practice.  For instance, for the two leg takedown, he comes straight in, low, still in guard, and then basically head butts you in the gut while grabbing the top of the thighs.  With his larger mass, he doesn’t have to screw around with all of the footwork of the jujitsu method.  Just knocks you down.

Anyway, that was three hours of opening up the top of my head and pouring as much in as I could.  The man knows a lot about fighting.  It wasn’t a very strenuous seminar, actually, though we all did get banged up a lot.  I have two huge bruises on my pecs from Frye demonstrating the head butt on my chest.

Strangely, Monday I didn’t feel too bad.  I guess we didn’t really DO that much, except train on a few of the techniques.  No randori, no drills, really.

Tuesday I went back to Ninjutsu, and had a much liter class under Bryan-sensei.  Did some chokes, drills, pretty laid back.  Good thing, because I went from there to Systema with Steve-sensei, and that was an experience.

Systema is a Russian martial art based on the standup from Sambo.  It has four tenets: breathing, relaxation, movement and posture.  There are no techniques, no kata.  You just use the basic philosophy and do whatever doesn’t hurt. 

Fascinating where that takes you.  Because a lot of akidoka study Systema, a lot of the finishing moves from Systema look like Aikido.  I have 6 years of Aikido, and three more of Ninjutsu (which are all Budo) so I fit right in.  Certainly will be looking more into Systema.

Columbus Architecture Group


I had a good time with the Columbus Architecture Group (ColArc) Tuesday night at the ICC conference center.  I gave the Economics of Cloud Computing talk there and it was well received.

I got some great commentary from Mark Freeman about the impact that CompuServe had on early internetworking, which is a very good point.  CompuServe was born out of TSO, with a large organization reselling unused computer time.  This is very similar to the IBM TSO concept, and what Google, Microsoft, Amazon and the other large players are doing now.

Another point was the impact of grid computing, which I need to research a little more.

One of the big impacts was security, though.  How is cloud going to interact with HIPPA?  how do you convince a CIO?  What else has to happen to prepare your application for the insecurity of the cloud?

Location is a problem too. How about a state’s requirement to keep all data inside its borders?  There are tough questions there!

Anyway, thanks for having me folks, and I hope to see you next month.

Parameterizing web load tests

You’ve been asked to make sure that the Client Search screen will stand up under load, because it will be most used screen in the application.  You set up a test user, and then run the Web Performance Test wizard in visual Studio 2010 to record the test.  You make a new test project, save it in TFS and add a new Web Performance Test.  the browser launches, and you log in as your test user.  You do a few client searches representative of the use of the system and log off.

Next, you create a Load Test.  The wizard launches, and you prescribe a 50 user test over a half hour.  You save the test, launch it and go to lunch.

When you come back, there are 23,856 errors.

What happened?  Oh, that’s right, one user can’t log into this system more than once – it was an early requirement.  Oh!  How am I going to do this then?  Do I have to record 50 Web Performance Tests? No.  You can parameterize the login.

Making a data source

Start with a CSV file of usernames and passwords.  You can make it in NotePad or Excel.


Next, we will need a datasource that points here.  Open your webest and click on the Add Data Source icon up in the test’s button bar.


You can select CSV file as the source of the data.


Pick the excel file you created and you’ll see the sample data.


The new data source will show up as one of the data sources for this test.  Probably shoulda named it something better, huh?


Binding the fields

The next major step is to bind the data to the fiends in question.  This is insanely easy.  find the step where you enter the data.  In my case, it was the Login.aspx page.  Open the Form Post Parameters folder and find the parameters for the login and password.  In this app, they are pretty easy to find.


Then follow these steps to get to the next image:

Open the properties panel with F4

Click on the fiend in your application that has the user name.  Mine is txtUser_Name

Click on the Value parameter in the properties panel.

Click the dropdown arrow.

Open the data source in the treeview.

Open the testdata table (or whatever you named it)


Click on UserName and there you go.  Teat field is now bound to the value.


This will work for any form

Remember, this isn’t just for login.  Actually, I am making a mashup of performance testing and training, adding the training data to the system using the performance test for the New Item pages.  Load testing isn’t just for performance anymore!

Family Game Night should be back

I just spent the evening playing board games with my four year old son.  For a lot of people this would be an exercise in boredom, but it shouldn't be.  Teaching games is something that is very similar to teaching the kind of thinking that makes software design work.  It’s important, logical thinking.

Board games with young children doesn’t have to be limited to chutes and ladders and Candyland – random games with zero strategy.  Kids need to LEARN strategy.  The only way they will learn is to be led, hand in hand, though the process of making game decisions.  For instance, tonight Adam and I played Living Labyrinth . He can’t quite read the cards, and he has a hard time making decisions about how to use the cards.  But how else will he learn?


We played open hand, and I walked him through every move.  I reminded him to play his card first then move, and point blank told him what moves to make and why.  It wasn’t competitive, but it was a blast, and Adam learned a ton.  I’m betting that next time we play he’ll remember the cards and be able to make some decisions about his card use.

After that, we played a much less sophisticated game, Guess Who? This game is a deduction game similar to the old logic puzzles with the grid that we all did in the puzzle magazines.  The kicker here – Adam beat me five out of five games.  I can’t explain it, unless it is just that he is a good guesser.  We play fair and square, no help, no hints, and he has to sound out the name of the mystery person for his final guess.  Beat my pants off.

Next time I am introducing him to Kids of Catan .



This remarkable game will not only be a great rule learning adventure, but the pieces are cool and we can make up our own games – another important skill.

Plus, I can have him play against Jeff Blankenburg next year at CodeMash.

Speaking schedule looking good this year


I have been shooting for one talk a month, and things are looking great for that goal these days.

  • In January, I gave my Economics of Cloud Computing talk at CodeMash.
  • This month I gave Deviant Ollem’s Lockpicking talk,
  • In March I’ll be giving the Economics of Cloud Computing talk to ColArc,
  • In April I’ll be giving my new Software Modeling with ASCII talk to the IEEE and ACM.
  • I have a talk lined up for May, I think.
  • I have talks submitted for TechEd, DevLink and CodeStock so that should give me lots to do for the summer if anyone accepts me.

Then I just have the fall to worry about.  Pretty good year so far!

Modeling and Design

Being in the design phase of a large-scale project for the State of Ohio, I have been giving a lot of thought to the problems of Modeling and Design.

You see, I am in an interesting position on most projects – I am an actual Solutions Architect.  In today’s IT environment the term ‘architect’ has grown to mean “good coder with big mouth” and I don’t really fit that mode.  I am not the best coder in the room most of the time – although the size of my mouth could be debated.

What I excel at is the designing of solutions, which leads me to use the term ‘software designer’ to describe myself.  This isn’t terribly good either, as it leads people to believe that I produce pretty graphic design and UX, which isn’t my specialty either.

What I am, in truth, is a Software Modeler.  I am the person that figures out what the domain model looks like based on the requirements of the system and the realities of the project.  The one who stands at the end of the room and scribbles boxes on the whiteboard?  Yeah, that’s me.

Thinking about this has really helped me to hone down the definition of SQL Modeling in my head.  People ask me “Why is Oslo hooked to SQL Server?  Is it just another data language?  Don’t we have enough of these?  I thought M was a language not a database thingie!  Oh woe is me!”  Well, the key is in the difference between design and modeling, and how tightly coupled the model and the database really are.

Software modeling begins and ends with data.  The user interface is, I hate to point out, now the purview of the business analyst.  When I get a functional specification for a project, it has the UI in it right there.  I don’t have to ‘design’ that any more.  All I have to figure out is how to do it.  This effort is modeling, and it is about data.

Today I needed to estimate an inventory system with a few quirks.  Without thinking, I got out my notepad, sketched an ER diagram, and worked from that.  How many POCOs?  How many adapters?  How big is the entity model?  Yes, eventually I had to estimate how long it would take me to build the screens, but the bulk of the work was in the domain model, where the work is done, as it should be.

Livescribe Notebook Page 48

Imagine if I could have instead described my model in text, without all of the brittleness that the ER diagram entails, and have that text description emit both the databases and the POCOs for me?  And then, if something changes, I could change my scratch model and my other code changes?  What if it didn’t break my changes or additions?  What if it didn’t create scores of stored procedures that are impossible to manage? 

Wouldn’t that be nice.

This, though, is the goal of SQL Modeling.  It is clear as day exactly where it fits in the product lifecycle – right there overtop of my fancy notebook scrawls.  Those boxes and chicken feet have a place somewhere, but it’s time for a modeling solution that actually is a solution.

Generic properties

As part of a project I am working on, I need to create an appointment calendar with appointments that can be tagged with and one (or more) of four tag groups.  The appointment viewer can then be filtered to see only appointments tagged with selected properties.

The tags are stored in a generic pot with all of the tags, and then are themselves tagged by Type. 
(Can amyone say MetaInformation.  Yeah, there’s an app for that.)  The tags of each type should have their own checkboxlist. The UI looks like this:


There are a number of ways that I could implement the collection that I bind to the listbox, but I am using Telerik controls and they would really like a generic list.  OK, I can handle that, right?  I can make a generic List of the particular POCO, and just pass it through.  But … how do I filter?  In the old days I would write a sproc, but these days, we have LINQ, and this is a job for LINQ to Objects (really the only LINQ that matters …)

protected List<Tag> Clients
        var clients = from x in Tags
                      where x.Type == "Clients"

                      select x;         return clients.ToList();

protected List<Tag> Resources
        var resource = from x in Tags
                    where x.Type == "Resource"

                    select x;
        return resource.ToList();
protected List<Tag> Staff
        var staff = from x in Tags
                      where x.Type == "Staff"
                      select x;
        return staff.ToList();

protected List<Tag> TextTags {
    {         var tag = from x in Tags
                    where x.Type == "Tag"
                    select x;
        return tag.ToList();

Now I can work from the Tags collection in the entity model, and easily get just the values I need.  I can get rid of the magic values with an enumerator, but I thought it was a good use of Linq.

Brew Plan for Cinco party

I posted a pic of the latest delivery by my favorite UPS guy, along with a little beer haiku:

Even on cold days
The ups driver can
Bring warmth to my heart

A few people asked about the brew plan, but it doesn’t fit in Twitter.  I thought I would post it here for fun.

Good Night In Mexico

(From TCJOH, page 179)

7lbs Dark DME

1lb Rice

1lb Light Crystal Malt

¼ lb Barley

1 ¼ oz Spalt

1oz Saaz

1oz Hallertaur

German Lager Yeast



(from BCS, page 151)

7lbs Pale Ale DME

¾ lb Special Roast

½ lb Victory

½ lb Crystal

¼ lb Pale Chocolate

2oz Williamette



Leaden Lager

(Hellbranch Recipe)

7 lbs ultralight DME

3oz saaz

Saflager S-23

Android development … in Windows

So my plan was to start some Android development with Eclipse in Linux, just to sharpen the saw. But you know what?  With all of the improvements in Linux over the last ten years, it still sucks.  If ANYTHING goes wrong, you are screwed.  You have to change some bit flag in some cryptic file that there are four references to in Google, and then restart seventeen times.

Specifically, what I did was install Eclipse in Jaunty Jackalope using Add/Remove.  That was admittedly my mistake – Jaunty doesn’t support 3.4 or 3.5 of Eclipse, which are needed for a quality experience in Android development.  Second mistake – I tried to install Eclipse 3.5 manually over top of 3.2.  HORRIBLE idea.  When I figured out what I had done, it was a mess to fix it.  In short, total time to compile Hello World, 5 hours.

Windows 7 experience: 10 minutes.  We will be talking about Windows.

To get started, you want to install the JavaSDK.

Next you want to install the Android SDK.

Finnally, you want to install Eclipse.

After all of the installations are done, you will want to configure the Android tools for Eclipse.  Part of this is adding the SDK components.  This is all well document, and most importantly, it is hard to screw up.

The only weirdness is the necessity to manually create the package file.  IT’s easy but weird.  From a command prompt, go to the location that you put the Android SDK (Mine is just in the Documents folder) and run this:

android create avd --target 2 --name my_avd

The you just need to create a new Android project in Eclipse.  I’d write about it, but it was so well documented in the Hello World documents.


And there we go.  Got the whole things running, in just about ten minutes.

The actual programming thing, well that’s next.

Sempf's Laws

Sempf's First Law: In any system, no single effect has a single cause.
Sempf's Second Law: All systems can be decomposed into binary decisions.
Sempf's Third Law: Given the correct catalyst, all systems will accelerate descent into entropy.

Bill Sempf

Husband. Father. Pentester. Secure software composer. Brewer. Lockpicker. Ninja. Insurrectionist. Lumberjack. All words that have been used to describe me recently. I help people write more secure software.


profile for Bill Sempf on Stack Exchange, a network of free, community-driven Q&A sites