Microsoft Architect Evangelist based in Michigan...
Josh Holmes is an Architect Evangelist with Microsoft. Prior to joining Microsoft last October, Josh was a consultant working with a variety of clients ranging from large Fortune 500 firms to smaller sized companies. Josh is a frequent speaker and lead panelist at national and international software development conferences focusing on emerging technologies, software design and development with an emphasis on mobility and RIA (Rich Internet Applications). Community focused, Josh has founded and/or run many technology organizations from the Great Lakes Area .NET Users Group to the Ann Arbor Computer Society and was on the forming committee for CodeMash. You can contact Josh through his blog at http://www.joshholmes.com.Presentations by Josh Holmes
Groking Silverlight
Silverlight is the latest in the continuum of technologies from Microsoft to help you create differentiated user experience in the supplemented web space. Based on XAML (eXtensible Application Markup Language) for its UI and backed by a number of different options for logic including JavaScript, C#, Visual Basic, IronPython or IronRuby- it's a exciting new tool in the back of tricks for any web developer.Josh Holmes
What box? Nobody told me about a box...
Sunday, August 17, 2008
Yesterday I wrote a write up of eRubyCon 2008 Day 1.
-
Charles Nutter started up with JRuby. I'm always impressed by people that are able
to make their weekend project their full time job. I was further impressed that Charles
was up with the rest of the speakers until closer to 4am than any of us should really
admit, drinking really good scotch and solving the world's problems.
Charles talked about the JVM and Java as both a problem and a great asset. There are a lot of people that look at the J in JRuby and automatically associate it with all of the things that they don't like about Java. Charles answer is to separate the JVM from the Java language. He did a really good job of talking about the things that the JVM brings over the standard Ruby runtimes such as world class garbage collection, memory compaction, thread handling and the like. He did a number of really compelling demos around threading in particular. One of the things that he said here is that JRuby and IronRuby are really the only Ruby implementations that are able to do native threads because they are the only ones that are built on production quality VMs that handle that native threading for them.
One
of the great quotes was "We write a lot of Java. So you don't have to..." - Charles
Nutter
After setting the stage, he pulled up a long list of features and said - "There's way too much for me to cover in the time left - what do you want to see?". that was fun. The first suggestion that he showed was 2D graphics that flashed a bunch of little balls around the screen. It was even responsive to voice commands. The second suggestion was to show Rails running on JRuby. He showed that they are running Rails on Ruby 1.8.6 (java). Next he brought up image_voodoo to do more 2D libraries. Lastly, he showed "java_inline" which allows you to inline Java code similar to the Ruby_inline which allows you to inline C right in your Ruby code.
- Evan Light came up next. Unfortunately I was putting out a few small fires. Fortunately Michael Lettere wrote up a small write up so that I could include it here.
Evan Light hates EJBs.
EJB encourages difficult to test idioms, private fields, private static final fields.
Nice demo code "public class DeepThought" <--- How do you test that?
You COULD shoot the guy who wrote it, but don't do that.
Very good use of humor, engaged the audience.
-
The lunch keynote was Neal Ford. Neil Ford is an amazing speaker. What’s cool about
him is that every time I see him speaker, I wonder how he could get any better. And
then he does. Today’s talk was about complexity. One of the core concepts that he
talked about is the idea of Language Lockdown. It’s when language writers put in features
to protect people from themselves and cut down on the stupid things that you can do.
The idea is that if you do that the lower end (read cheaper) developers will still
be productive. “What they are trying to do is strap a rocket to the ass of a turtle.
What they are actually doing is putting chains on the rabbits than can go fast.”
The problem with that take though is two fold. First, it is not a linear line between
the top developers and the lower end developers. What that means is that on the curve,
a highly productive programmer will get done in one day what it will take an average
developer more than a week to do and the weak developer a month or more. To point
out the second issue, Neal quoted one of my other favorite speaker - “Bad developers
will move heaven and earth to do the wrong thing” - Glenn Vanderburgh
One of the huge questions that he put out there is “How much of your enterprise software
simple services accidental complexity?”. It’s a great question.
As he was wrapping up, he left us with the thought that “Courage is contagious. Cowardice
is infectious”.
-
Following Neal was Stuart Halloway again. He was talking this time about how one can
fail with 100% test coverage. It’s an interesting topic because for so many people,
100% test coverage is the holy grail that they shoot for. The first thing that he
pointed out is that you might cover all the lines, but not all the branches so it
depends on how you measure things to get to 100% coverage. The second thing that he
points out is that you can cover all the code, but not all the corner cases. The example
that he used is testing if a value is above or below $25.00 but forgetting $25.00
even. Oops. Then you can start writing way too much code and too much complexity into
your tests. Now you need to test your tests and you’ve taken too much time writing
them. Then he talked about the “ugly mirror” where the test is really a mirror of
the code where you’re covering the line but using the code that you are trying to
test while testing – oh dear I have a headache. This is where he says that you are
allowed to write literals in your tests.
Neal Ford piped in - “It’s ok for your test to be moist, not drenched”.
The next topic was slow tests and how dangerous they are. The short version of the
issue is that if the unit tests don’t run in under 1 second, developers are not going
to run them. Functional tests should run in under 2 minutes. If they don’t, then factor
them so that they run on different schedules, parallelize them on different machines
to get the normal check-in process back under the 2 minute mark if possible.
The last type of fail that he talked about is shallow tests. The quote that he referenced
is “No automated test suite can ever replace exploratory testing.” - Jay Fields. The
goal is that once the unit and functional testing passes, that people will put themselves
in the clients seat and go spelunking and try out a bunch of stuff.
-
The next talk was a very unique idea called “Dialogue Concerning the Two Chief Modeling
Systems”. They wrote a play! The guys from EdgeCase, Joe O’Brien, Jim Weirich and
Chris Nelson, acted out a normal project for them. They started out on twitter talking
about the new project that they just landed. Then they actually started with the early
on meetings that they have. Joe played the cowboy dev lead who insists that it’s a
“simple rails app” and decides to do a data first model. Chris played clueless nub
and Jim played the seasoned architect that was concerned about requirements analysis,
separation of layers and behavior driven models. Joe, ready to start slamming code
out, starts pairing with Chris. The first thing that they tackle is a simple calendar
event. Then they have to schedule reoccuring events. Joe, the cowboy, just decides
to replicate the events in order to do the reoccurence. The next requirement is rescheduling
the reoccuring meetings.... Oops. They have neatly coded themselves into a corner
and start hacking out a solution. At that point, Chris decided to take a walk and
went to see what Jim thought of it all. Jim started writing out CRC cards and started
thinking about higher level ideas, bringing in light-weight design patterns around
temporal expressions from Martin Fowler and so on. Jim, the architect, is blithely
ignoring “implementation details” such as where to store the data and performance.
When performance sucked – they went back to the drawing board. Jim and Joe had to
eventually come together. Of course the answer was to write a DSL... :)
Great talk. The good news is that Neal Ford is following them so there won’t be a
let down as we end the day...
- The last talk of the day was Neal Ford talking about Design Patterns in Ruby. One of the things that he pointed out fairly early on is that the Design Patterns book, even according to one of the authors ( Vlissides), should have been called “Making C++ Suck Less”. Even the Smalltalk that’s in the book was really C++ written in Smalltalk syntax. He covered a number of different patterns including the Iterator and the Interpretor pattern. There were a number of circumstances where he pointed out that the issues addressed by the pattern were addressed by the Ruby language. For example, the interpretor pattern’s intent is really addressed by DLSs which are dead easy to implement in Ruby. The only problem with this session is that it’s at the end of the day and my brain is a little mush at this point.
Friday, August 15, 2008
I'm
sitting here at the second Enterprise Ruby Conference
(eRubyCon). There's a couple of fun and interesting things that have happened
this year.
One of them that's exciting for me is that the whole event is being hosted at the Microsoft facilities in Columbus, OH. Joe O'Brien was looking for a facility so I offered up the office since we can get that for free. There are some minor facility issues, such as the internet access is fairly limited due to the Microsoft security policies. We got that mostly sorted by renting a number of cell card based routers from iBox2Go. It's not a perfect solution because we're at about double the recommended number of users per router. That's caused network to be a touch spotty but it's better than non-existent.
Another thing that's a ton of fun is that we've doubled the number of attendees. The conference room here at the Microsoft office is FULL. Tomorrow I'll show some pictures from the conference room. It's really cool to see.
The
whole event is going very well. Joe has been plagued with speakers having travel issues
and the like. For example, Stu Halloway was supposed to do a lunch time keynote but
was thrown off as his plane had mechanical issues. The great news is that this is
an Agile conference and everyone is used to requirements changing mid-project and
Joe was able to shuffle the speakers.
-
First up was Randall Thomas from the Engine
Yard. He was talking about ETL (Extract, Transform, Load). He did a masterful
job of making that important topic interesting and fun. It's a fundamental topic but
even Randall equated it to Bob Ross painting
trees and it was tough to keep people awake talking about the best possible way to
make one string into two and two into one...
- Next was Tom Mornini. I wish I had been able to stick around for this talk. He talked heavily about Vertebra, Scalability and Accountability.
- Anthony Eden followed Tom with a session on Identity Management. It was interesting to hear his take on OpenID, InformationCard, SAML and how Ruby works with those. The good news for Ruby is that it does really well with and is leading the way with OpenID. The bad news is that the things that are done inside of an enterprise are a little less prevalent in the Ruby at the moment. It was a great tutorial on the state of
- Giles Bowkett talked about Meta-Programming vs. Code Generation. He had a fun and deep tirade on something called Monkeypatching.
"A monkey patch (also spelled monkey-patch, MonkeyPatch) is a way to extend or modify the runtime code of dynamic languages (e.g. Smalltalk, Javascript, Objective-C, Ruby, Perl, and Python) without altering the original source code." - http://en.wikipedia.org/wiki/Monkey_patch
This is meta-programming at it's finest. He then went on to talk about meta-monkey-patching or meta meta programming... Somewhere in there I got a headache. That's about the time that he brought it back to Code Generation. My favorite quote, other than "Here's a completely gratuitous picture of Jessica Albert" (which did come with a gratuitous picture of Jessica Albert...) " "Should I hire a programmer or should I just write one?". He gave an example of a past job at NY Times where he left after he wrote a "mini-giles". That's a code generator that did much of what he had been doing until he wrote the generator. The "mini-giles" meme has really taken off since then and has been worked into a ton of the talks and conversations...
- Stuart Halloway followed Giles with a keynote called "Ending Legacy Code in Our Lifetime". He had one of the better starts that I've ever heard - "Legacy Code is like Porn. I know it when I see it. It's ubiquitous on the internet. And like all porn, it's ultimately unsatisfying". (At least he has it on good authority that porn is ultimately unsatisfying). One of the things that Stuart points out is that code can be broken down to Ceremony and Essence. The Essence is what you actually want to get done. The Ceremony is the stuff that you have to do in order to have the Essence work. For example, if you have gone from "New" on an object to writing factories - the reality is the factory is Ceremony. End of the day, all you really wanted is an object.
Another great quote from Stuart was "Ceremony leads to fear. Fear leads to anger. Anger leads to pain. Pain leads to Ceremony." The goal, according to Stuart, is to have as little ceremony as possible and have every line of code contribute to the Essence. And right now, Ruby is the closest answer as it's got a fairly high Essence to Ceremony ratio.
His talk was chock full of great quotes - "What authority authorizes this in the Ruby world? - ME - and I'm Right". It was full enough of great quotes that there's a Stu Halloway Quote Tracker.
- Brian Sam-Bodden, always a great speaker, closed out the day with Refactoring with JRuby. He talked about the core of refactoring is having a great suite of tests. One of my favorite quotes from him was "Since I'm a Java consultant, I have a lot of work to do...".
Overall, it was a great day. I really enjoyed catching up with a lot of the guys that I don't get to see at the .NET community events. I'm hoping that most of these guys will be at CodeMash cause that will give me 2 times a year to hang out.
Monday, August 11, 2008
Moonlight is
still continuing to progress. Moonlight is
the open source implementation of Silverlight for
Linux. It's being run by Miguel de Icaza of Novell.
There are a couple of things that are interesting to me about this project.
First, as I talked about in Dancing in the Moonlight!, it's unprecedented interop and openness on the part of Microsoft. Microsoft gave the project the specs and a ton of support. The Moonlight devs even have access to the Silverlight engineers as they are developing the open source compatible solution to help clarifying specs and ensuring compatibility. One of the things that's tough from a legal perspective is all of the codecs and other video components. What's going to happen is that there's a "Media Pack" that users will download from Microsoft to play videos. This circumvents the legal issues and allows Moonlight users access to all the great VC1 video out there.
Second thing I find interesting is that they are finding interesting ways to innovate even in the constraints of being 100% compatible. For example, They built a Silverlight designer called Lunar Eclipse completely in Silverlight. That's a really cool idea. They are looking at offline ideas around Moonlight and making their implementation a WPF light enabling them to revamp the GNOME's desktop development paradigm. They've started with desklets, which are small Silverlight components that run in a desktop framwork. Again, really innovative idea.
Miguel did an interview with derStandard.at about the projects and how they are going at Miguel de Icaza on Mono.
Friday, July 25, 2008
There's
something surreal about blogging by the campfire watching the sun rise. I'm out with
my boys on a guys day out. Ok, I didn't post this from the campfire but I could have
since I had cell signal and can tether my phone... But I resisted the urge. What you've
got here is what I happened to jot down while my boys were sleeping.
It's been a while since I really went camping. I did it once last year but before that it had been at least 10 years. I grew up camping every summer. It's been a goal of mine to get back to camping more often. This week, I promised my boys that we'd get out and do a guys night out. We packed up the tent and hit the grocery store to pick up hot dogs, marshmallows and all the essential camping supplies.
We learned two lessons that I thought I'd share. I'm sure that at some point, these stories and lessons will make it into a talk but for now, they will have to stand on their own.
Smores
One of the fantastic lessons that we learned on this trip is that even a bad smore is really good. I mean it really doesn't matter if it's neat or messy, if it has too much chocolate (as if there is such a state), the marshmallow is burnt or just lukewarm or anything other variation. There are really only two ways to screw up a smore. You can burn yourself and you can obsess about creating the perfect smore but if you relax and just let things flow, you really can't screw it up.
This was especially evident as my 10 year old was war dancing around the fire singing - "I like mine crunchy crunchy... I like mine crunchy crunchy..." carrying his mighty marshmallow torch burning his black as the night while my 12 year old was searching for that perfect golden brown. The really good news was that when my 12 year old accidentally set his on fire - he wasn't upset because it meant that he got to eat his smore quicker...
The lesson here is to stop trying for perfection. There are many different things in life where the only real way to screw it up is to obsess over it.
Second Fire
The second thing that we learned is that the second fire is a lot easier to start than the first. I remember as a kid around the age of 12 that I would get up before my parents and get the morning fire started. I thought I was so brilliant because it wouldn't take long for me to get a nice little fire going. I would contrast that to the night before where my father had spent the better part of an hour getting the fire going, building up from newspaper to leaves to small twigs to medium sized sticks to real logs at some point, carefully coaxing the embers all along and creating a great bed for the fire.
I've created a number of fires since then and have come to understand the rituals that my father taught me when I was young. I was reminded, once again, last night that it's not as easy as I thought as a kid to get that first fire going. The tough part is building up the strong base of solid and consistent heat from the bed of embers. Once that's going, the fire will provide a wonderful glowing heat late into the night. As my father did, I buried the bed of embers in ashes.
When I got up this morning, well before the sunrise with a wonderful dew covering the ground, I went about the task of starting a fire to cook breakfast on. As when I was a kid, I scraped back the ashes and laid down a piece of the newspaper on the coals and before I could get the matches, it caught fire. I found myself scrambling to get twigs before it went out. Those caught fire instantly which set fire to the larger sticks and the logs. In a matter of 5 minutes or so, I was ready to cook breakfast. That was fantastic!
The lesson here is that if something is really easy, it's often because the path has already been paved. Don't compare your success with those that did it the first time.
Just Some Observations
Man I've gotten soft. Muscles that I had forgotten about are sore and I slept on an air mattress. How was my father not this sore? He took all of us camping and slept on the rocks in a sleeping bag. Honestly, as I get older and am trying to raise my children, I'm getting more and more impressed with my father.
Camping has gotten modern. There's electricity, modern plumbing and costs $24 a night. For those playing the home game, that's $168 a week or $672 a month. I could rent an apartment around here for that. I need to find some place more "rustic" and cheaper if we're going to do this a lot more often.
Wednesday, July 16, 2008
I
thought long and hard about how to write this post. There are a ton of people that
have inspired me throughout my life.
I was inspired by Jeff Blankenburg's Contribupendence Day. I was inspired by the original GiveCamp thrown by Toi Wright and Chris Koenig and the latest one hosted by John Hopkins and Jennifer Marsman. I was inspired by Joe O'Brien's passion for Ruby. I was inspired by more people than I can possibly name. I am the person that I am today because of the people that have inspired me through out my life.
At first, I couldn't decide that I should profile anyone person because there are so many and I'd be doing a disservice to all those that I wasn't profiling and I didn't want to leave anyone out. Then I realized how stupid that was because I was leaving everyone out by not starting somewhere.
So, I decided to start with Nathan because he's the most recent on my mind and has touched my life directly...
Who has inspired you and how?
When Nathan Blevins heard about the Ann Arbor GiveCamp he could have, like a lot of people, decide that it was too far away and not to come and left it alone. Instead, he decide to organize an offsite group and pulled in 4 more people to help. He hosted them at his house and they worked 9-5 each day. In the early going, he called and called, making sure that we hadn't forgotten about him until we threw them a lot of work.
By doing so, he affected 2 different projects.
One was the Ann Arbor Hands on Museum (done in PHP so that it could fit in with the rest of their already existing web site). One of the guys, Dylan, that he hosted was a PHP savant and did a lot of the heavy lifting on that project.
The second was a charity called Wonderpuzzle. It's a charity run by my wife for children who have medical problems with no diagnosis. The parents of these children feel like their on an island because if their child's condition had a name, they could join that community. As it is, they are bumping through the night with no one to turn to for help or even empathy as they fight against the insurance companies who won't pay because they don't have a name for some paper somewhere or the schools because the legislation only forces them to work with a small slice of named conditions like autism. Wonderpuzzle is an online community with discussion forums, articles and much more that address these issues.
I was very touched and privileged to get to demo the finished version of their site. Check it out:
What have they inspired you to do?
The next time that I look at something that's the right thing to do but there are constraints in the way of my participation - I'm going to ideate on different ways to engage. I'm going to stop letting my "lame excuses" (all props to Michael Eaton for calling a number of people out on that) get in the way of my participation in a number of things that I've wanted to do.
Who else have they inspired?
The other people that came in to help Nathan out with the Knoxville GiveCamp satellite need mention too:
-
Ben Farmer - Ben worked w/ Joe to make sure the site was completely ported over to
sitefinity, replicated its functionality, and made sure the data was moved over as
well.
-
Jenny Farmer - Jenny was the mastermind behind the new design. She spoke directly
with Phoebe to make sure she got exactly what she wanted and made it so in photoshop.
After that, she worked w/ me as Nathan made her 'idea' into HTML / .Net code. She,
unfortunately, was not able to come in the second day due to not feeling well.
-
Joe Simpson - Joe worked with Ben to make sure the site was completely ported over
to sitefinity, replicated its functionality, and made sure the data was moved over
as well. Joe was actually a real trooper as he was usually the first one at
Nathan's house and the last to leave.
- Dylan Wolf - Dylan worked mainly on a separate PHP project. However, any time he had down time he would jump on Wonderpuzzle and start taking small tasks on. He was a great asset to both projects and did an excellent job multitasking.
Call to Action
My challenge to you is to write an "Inspired By" post and profile another community hero.
In fact, I'm going to call out 5 people and because I want to know who inspires them. The fun part is that I could have started with any of these 5 people because they all inspire me.
Carry Payette (who did a very similar satellite group in Columbus)
Michael Eaton (who worked tirelessly at GiveCamp to make sure that everyone there had whatever they needed)
Martin Shoemaker (who brings design, best practices and humor everywhere he goes)
John Hopkins (who doesn't want people to say thank you but rather - what can I do?)
Sam Henry (doesn't blog much but when Sam sees a problem he goes after if head first. He, his wife and some of their friends, have started the Red Letters Campaign - Living Faith to End Poverty)
