A Day in the Life

A day in my life. Thoughts on leadership, management, startups, technology, software, concurrent development, etc... Basically the stuff I think about from 10am to 6pm.


Events: MeshForum May 7-9 San Francisco

I blogged awhile back about Shannon Clark’s MeshForum event. Well, the time is upon us and it’s time to get registered. I think it’s going to be a very interesting gathering; unfortunately I’m going to miss it. Shannon has some really great ideas about networking. All kinds of networking and you’ll have an opportunity to explore some interesting topics.

Excerpted from an invitation:

MeshForum 2006 - May 7-9, San Francisco CA

A reminder - register today to join me and an amazing line up of speakers and participants at MeshForum 2006 in San Francisco CA.

Your registration includes breakfasts, lunches, dinner on Sunday night, and ongoing participation in the MeshForum community and:
- a lunch workshop on Monday with XPlane on Visual Thinking
- a lunch workshop on Sunday with Heather Gold on storytelling
- Tuesday open space opened by Michael Herman with sessions already planned by many of your fellow attendees
- Robert Scoble and Shel Israel, speaking Sunday morning

- Anil Dash, Six Apart, speaking on especially LiveJournal
- Marc Senasac, Broadband Mechanics, Mark Canter's company talking about their Open social networks including for AOL
- Mike Jones, Userplane, providing social media tools in partnership with many large sites, already used by over 1M people for single sign on and communications
- Kris Jacob, Podshow
- Manuel Lima, VisualComplexity.com - Manuel will be the opening keynote at MeshForum
- Dr. David Levinson, University of Minnesota on the Economics of Transportation Networks, Dr. Levinson's PhD work was on the setting of tolls.

- Verna Allee on Value Networks
- Dr. Karen Stephenson on Social Network analysis
- Christopher Allen, Jamais Cascio and Howard Greenstein on how technology is breaking networks
- Jon Lebkowsky and Zack Rosen on large scale political networks
- Scott Draves presenting his project Electric Sheep
- Rachel Beth Egenhoefer presenting her art and works

And much more.

Included in your registration is the Open Space workshops on Tuesday, a full day opportunity for anyone interested in deeper exploration of Networks and how they specifically related to your projects. Many of your fellow attendees have already proposed sessions for Tuesday - register today and join them at the MeshForum Wiki provided by Socialtext to propose your session today!

MeshForum will be recorded with many sessions to be distributed in partnership with IT Conversations. MeshForum is an open, on the record conference, media interested in covering MeshForum please contact me directly for a press pass and credentials.

If your company is interested in joining MeshForum as a sponsor please contact me soon, a limited number of sponsorship opportunities remain available.

See you in San Francisco in May!

Shannon Clark
Founder, MeshForum
"Connecting Networks"


Stolen Dreams

This young man is dead.

On Monday, April 24th he was shot during a robbery at the restaurant he was managing. His name is Sonethavy Phomsouvanhdara. He was 29 years old. He was an immigrant.

I didn’t know him and I didn’t know he had been shot until Wednesday when I was talking to a merchant whose store is across the street from the restaurant. The merchant is also an immigrant. It was from her that I learned the significance of the fact that he was an immigrant.

She explained to me how citizens in other countries view America as a place of hope and how families work together to get one person over here. Sonethavy was the “number one son”, the one his family pinned their hopes for the future on. He was working hard, sending money home, and had already brought his father over. He was working at that restaurant to learn the skills he needed to open his own restaurant. He was close to realizing his dreams.

Sonethavy represents everything America stands for. The hard working immigrant who over came amazing obstacles to fulfill a dream. But in Sonethavy’s case, and for many immigrants like him, it was not only his dream he was fulfilling but also the dreams of his entire family. And in one brief instant his family’s dreams where shattered. So the robber turned murderer has not only stolen $300, the life of one young man, a father, a husband, a son, but also the hopes and dreams of his extended family.

Whenever someone dies in a violent unexpected manner it’s a tragedy. For Sonethavy, everything he could have been and all the people he could have helped, was wiped out in less than a second. In less than a second, the effects of his death started to ripple out across the future. But instead of good things growing, there is left only an empty echo of what could have been.

That is an incalculable tragedy.

Update: I've been getting a lot of hits on this post and a few emails. Please feel free to comment on this post, to talk to each other. To share. I only ask that you please be respectful to each other and to Sone.

Business: The Engineering Value of Blogging

Over on JobSyntax blog, Gretchen talks about the role of blogging in recruiting. She has linked in several articles and recruiting blogs where the subject has been discussed.

I’ve come to the conclusion that software engineers must blog just to be competitive. And that we need to share not only knowledge and code samples, but also our thoughts on technology and our experiences. This makes it easier for prospective employers to say, "Yes! I want you." And for our peers to say, "Your post on X saved my project." Our peers are really our audience; future employers just get the benefit of our conversation.

Every time we walk into a job interview both the candidate and employer are selling to each other. And selling is about telling stories and reducing risk. Each side tells their story and asks questions that make them feel safer in saying, "Yes." An honest and open approach to blogging can eliminate the marketing feel of a blog and can clearly communicate your "story". A story that shows you for who you really are and that allows the other person the opportunity to feel safer (reducing their perceived risk.)

An engineering blog should demonstrate knowledge, coding style, and relevant technical experiences. But it will also demonstrate writing ability, communication style, humor, clarity of thought, and in some cases, the other faces we wear. All of these qualities are very hard to determine from traditional resumes and cover letters. And even during the interview process it can be difficult to get a clear picture of a candidate’s "style". A well tended professional blog helps with all of that. It makes us 3-dimensional and real. All of that makes us more marketable and easier to sell.


Programming: Excel VBA Debugging for Beginners

Learning to debug your code is an important skill that will help you write better code and get your code into production faster. But for those Excel folks who have no other programming experience...where do you start? This post will walk you through getting your debugger started, setting breakpoints, and looking at variables. When you finish you’ll be able to walk through your code one line at a time and see what’s going on. [The code sample was taken from this post.]


Open Microsoft Excel and from the Tools menu select Tools->Macro->Visual Basic Editor. This will open the Microsoft Visual Basic IDE (integrated development environment).

Figure 1

Figure1 shows you what you will see when you start the Visual Basic Editor with a brand new project. You can see in the Project pane a folder called Microsoft Excel Objects. By default there are three sheets and ThisWorkbook. In the pane double click on the sheet you want to associate the macro with. I have double-clicked on Sheet1 and the VB IDE opens a new window that has two combo boxes at the top. Add the code below to the new window.

Sub MyMacro()

Dim dcell As Range

Set dcell = ActiveSheet.Range("Bi")
directory = "c:\test\" & dcell.Offset(-3, 0).Value & "\"
filetext = Selection.Value & ".xls"
Workbooks.Open directory & filetext

End Sub

Figure 2

You should now have something that looks like Figure 2.

Eyeball Your Code

The beginning of the debugging process requires that you look at your code and step through it in your head. As I look through the code I see ActiveSheet.Range(“Bi”). Now “BI” is a column in the workbook but it’s not a cell. So I change that code to read ActiveSheet.Range(“B1”). To correctly address the cell I’m interested in.

I also notice that I’m really interested in the Value at “B1” not the cell itself. So I adjust the code to read:

Dim strDir As String

strDir = ActiveSheet.Range("B1").Value

Okay now I am getting the text out of the correct cell in the form I need it in.

Don’t Nest Statements

Looking at the next line I see dcell.Offset(-3,0).Value. What was I thinking? I have a negative number for the row...which just isn’t going to work. I realize now that I’m using the Offset property wrong and I can replace that text with strDir.

But what if I didn’t know that I was using the Offset property incorrectly? I should write my code like this:

Dim strValue As String

strValue = dcell.Offset(-3, 0).Value;
directory = "c:\test\" & strValue & "\"

With dcell.Offset() nested within the code building the directory string I have no way to directly verify what the resulting value is.

Set a Breakpoint

A breakpoint causes the debugger to stop program execution at the location where the breakpoint is defined. When I start debugging a subroutine I usually start at the beginning. I then verify that each line is working as I expect and I move my breakpoints down.

Setting breakpoints in the Visual Basic Editor is easy. Simply move your cursor to the gray area to the left of the line you want to break on and click the left mouse button. Click the left mouse button again and you have just removed the breakpoint.

Figure 3

Setting a breakpoint at the beginning of the subroutine looks like Figure 3.

Step Through the Code

Now that you have a breakpoint set perform the action that causes the subroutine to be called. Using the Shift-F8 key combination steps you through your code. You can then check the values at each point. There are two ways to do this. The easiest way is to move your mouse cursor over the variable that you are interested in and hover. A small window will open telling you what is in the variable. The second way is to watch a variable. To watch a variable click on the main menu bar View->Watch Window. Move your mouse cursor over the new Watch Window and right-click. The brings up a context menu from which you can select “Add Watch...”, type in the name of the variable and select “OK”

Figure 4

That’s It

That’s the basics. As you become more comfortable with the debugger you can look at other Views that will tell you more advanced information.

Basic Rules:

  • When you write code always verify that you are getting the values you expect.

  • Think about what your code will do if the data you expect is malformed. Expect malformed data and write your code accordingly.

  • Keep things simple. Don’t embed statements into statements, at least not when you’re just getting started.

  • Grid Computing: More on DNS Security

    I blogged last week about why I think that building business applications on the Internet is dangerous. Those thoughts were directly related to the call for more SOA solutions as well as the global grid computing push. Today there was a conversation on Slashdot that supports my concerns. Two Cornell documents were highlighted:

  • "A Survey of DNS Security: Most Vulnerable and Valuable Assets"

  • "Perils of Transitive Trust in the Domain Name System" by Venugopalan Ramasubramanian and Emin Gun Sirer

  • As I’ve been studying grid computing the idea of security kept coming up and until recently I didn’t "get it." I had assume that the security lay directly with the transport protocols but the security problems are much deeper and will likely be much harder to fix.

    If you want to see how many servers are involved with resolving a site name you can use the link below. Copy the link into your web browser and replace my web address with yours.


    My results:

    CoDoNS DNS Survey
    DEP krgreenlee.blogspot.com <- A.GTLD-SERVERS.NET because of com
    DEP krgreenlee.blogspot.com <- G.GTLD-SERVERS.NET because of com
    DEP krgreenlee.blogspot.com <- H.GTLD-SERVERS.NET because of com
    DEP krgreenlee.blogspot.com <- C.GTLD-SERVERS.NET because of com
    DEP krgreenlee.blogspot.com <- I.GTLD-SERVERS.NET because of com
    DEP krgreenlee.blogspot.com <- B.GTLD-SERVERS.NET because of com
    DEP krgreenlee.blogspot.com <- D.GTLD-SERVERS.NET because of com
    DEP krgreenlee.blogspot.com <- L.GTLD-SERVERS.NET because of com
    DEP krgreenlee.blogspot.com <- F.GTLD-SERVERS.NET because of com
    DEP krgreenlee.blogspot.com <- J.GTLD-SERVERS.NET because of com
    DEP krgreenlee.blogspot.com <- K.GTLD-SERVERS.NET because of com
    DEP krgreenlee.blogspot.com <- E.GTLD-SERVERS.NET because of com
    DEP krgreenlee.blogspot.com <- M.GTLD-SERVERS.NET because of com
    DEP A.GTLD-SERVERS.NET <- a2.nstld.com because of GTLD-SERVERS.NET
    DEP A.GTLD-SERVERS.NET <- c2.nstld.com because of GTLD-SERVERS.NET
    DEP A.GTLD-SERVERS.NET <- d2.nstld.com because of GTLD-SERVERS.NET
    DEP A.GTLD-SERVERS.NET <- e2.nstld.com because of GTLD-SERVERS.NET
    DEP A.GTLD-SERVERS.NET <- f2.nstld.com because of GTLD-SERVERS.NET
    DEP A.GTLD-SERVERS.NET <- g2.nstld.com because of GTLD-SERVERS.NET
    DEP A.GTLD-SERVERS.NET <- h2.nstld.com because of GTLD-SERVERS.NET
    DEP A.GTLD-SERVERS.NET <- l2.nstld.com because of GTLD-SERVERS.NET
    DEP a2.nstld.com <- b2.nstld.com because of nstld.com
    DEP krgreenlee.blogspot.com <- ns1.google.com because of blogspot.com
    DEP krgreenlee.blogspot.com <- ns2.google.com because of blogspot.com
    DEP krgreenlee.blogspot.com <- ns3.google.com because of blogspot.com
    DEP krgreenlee.blogspot.com <- ns4.google.com because of blogspot.com

    It took 26 nameservers for you to find me....

    Technorati tags: , , ,



    Leadership: Today's Practice; Tomorrow's Win

    I got to coach a hockey practice today. I don't have a team this season because I'm putting my time into other activities, but Marci asked me to run her practice and I couldn't say no. There were a few things that came up that I think are important to point out.


    For the record, I might skate at the highest available NCWHL level, but I'm not that great a skater. In fact I don't really think I'm that great a player. So when it comes to teaching fundamental skating and shooting skills, I can't do it. I don't understand skating or shooting well enough to even attempt to teach it to someone else. I usually like to get assistants for my practices that can cover my weak spots. Unfortunately for me, I didn't have time to line folks up for this practice.

    Fortunately, there was a Blue game right before the practice. (Maroon would have worked also.) That meant that there were people available who do know how to teach the skills I can't. I just had to ask. I got two volunteers who were kind enough to help. Thanks Lisa and Shannon.

    The point here is that when you need something; ask for it. The worst that can happen is that the other person says "no". You're no worse off. The other thing to remember about asking is that you don't know what is going on in someone else's head. I think we, as people, often make the mistake of thinking for other people and coming to our own conclusions about what they might say. So, we assume we're going to hear "no" and never even bother to ask.

    If you want or need something; ask for it. You might be pleasantly surprised. Successful sales folk know exactly what I'm talking about.


    I had set Lisa and Shannon the task of providing individual coaching, while I ran the group part of the practice. I had a list of drills that Marci wanted me to run and one of them was a backwards skating drill that requires backward crossovers. Which I can't do, let alone teach.

    Figuring out how to do a backward crossover became a group effort. While the majority of women who play in NCWHL are adults I had one teenager in this practice. After I informed the team that I couldn't teach this skill, they decided to do the drill anyway, and see if they could figure it out. It became clear pretty quickly that Annie could actually do backward crossovers and the team just copied her. What I found fascinating is that Stephanie (the teen) couldn't believe that I couldn't teach her backward crossovers. She actually looked at me in shock. This made me realize how we change as we grow older. I take the act of collaboration for granted. Stephanie's reaction reminded me that collaboration is a learned skill.

    Teenagers and some adults look to people acting as authority figures and assume that they have all the answers. They blindly follow without questioning what it is they are asked to do. Experienced people learn to question and collaborate. To the adults in my practice, I was the authority figure only in that I was running the practice. I made it clear where my skills were and they worked as a group to overcome my limitations.

    Personal Responsibility

    I have often seen coaches schedule breaks in their practices. I don't do that. I don't like to waste time and I also think that people's bodies are different and they will need water or rest at different times. That is why I always tell people to take a break when they need it. This is part of my belief that people need to take personal responsibility for their own health and well-being. I also expect people to monitor their own injuries. I've had basic first-aid but I'm not a doctor. I don't know how you feel. Only the player knows that. This is the basic part of any practice or game I coach.

    Today, the player's had an opportunity to take personal responsibility for their growth as hockey players. Before we hit the ice I told everyone that they were going to get about 15 minutes of individual coaching and that they should think about what they want to work on. (My apologies to Annie and Teresa I'll see what I can do for the next practice.)

    Understanding your own weaknesses is a skill that must be learned as well as an ego hurdle that must be confronted. Hockey is such a funny sport. You get out there and you feel like you're tearing up the ice or that you look like Wayne Gretzky; but you don't. Your coach can tell you a million times that you aren't moving your feet and you won't believe her. I always recommend to people who are serious about improving, to have someone video tape them in a game. Watching that video will be one of the most humbling and sometimes embarrassing things a player will do. But it's an important part of taking personal responsibility for your on ice skills.

    Taking personal responsibility requires taking action and confronting who you really are. It's not easy but it's the only way to improve.

    Practice harder than you play

    I'm still trying to get people to practice harder than they expect to play. I want to see players fall because they pushed themselves. I would love to see that in a practice. Practice is what I call "safe time." It's an opportunity to push your mind, body, and skills without worrying that you will hurt the team.

    If you are looking to learn leadership skills, "safe time" is the time you spend with a volunteer organization. If you screw up while volunteering it is extremely unlikely that the mistake will effect your employment status or career options in a negative fashion. In fact, screwing up and learning from it as a volunteer is a great way to positively affect your career. I'm a big advocate of people using volunteering to learn leadership skills. Don't just read books about leading; go out and do it. Take some chances. I've been coaching for over 20 years and I've made some HUGE mistakes. And I've learned from every one of them. The funny thing about coaching is that even after I make stupid mistakes those people forgive me and want me back. Wow.

    Practice your strengths

    I think American society has conditioned many of us to think that we should only work on our weaknesses. And that is just silly. At the end of practice we worked on deeking the goalie. I told the women to line up so that when they finished the deek they would get the shot off on their forehand. I wanted them to practice the deek and shot that they were most likely to use in a game. Some of the skaters had a problem with this.

    Let's just put this in perspective. The women that I coached today are intermediate level skaters. The probability that they are ever going to use a weak side deek in a game is very low. (Not including the fact that it's really hard because the shot has to come off the backhand.) I pretty much look at everything as a probability problem. What is the probability that working on a strength is going to gain you more than working on a weakness? In life the probability is pretty high.

    If a weakness doesn't get in the way of your life objectives then the only work you should do on it is whatever is needed to not let it get weaker. (Or to get it to a point where it doesn't negatively affect you.) In life, where you're going to get the most bang for your buck is by strengthening your strengths. The "natural" aptitudes that you have that make you special and unique.

    I'm a generalist. That is one of my strengths. I go deep enough into different subjects so that I have a "big picture" understanding of them. I am not the type of person who can get passionate about a subject and learn everything there is to know about it. I'm just not like that. Being a generalist is part of why I like small companies. For those of you who have been reading my blog you know I've been trying to figure out from a programming perspective how to distribute Excel computations on a compute grid, I then wrote a white paper on it (which you can download now), and last week I was wearing a marketing hat.

    Find your strengths and make them stronger.

    Becoming an expert

    You might think it's funny that after I get done telling you I'm a generalist that I'm going to tell you how to be an expert. As a coach I've studied people because one of my jobs is to help each player achieve the season they want. For some this means they just want to have fun and for others it means that they want to have fun and improve. I can't help people if I don't know what they need or how to help them get there.

    To become an expert:

    1. You need to know what your objective is. How do you know when you're an expert? By what are you measuring yourself? If you don't have an answer to this then you will never know when you've become an expert. Waiting for other people to bless you as an expert takes the situation out of your hands. So figure out what it means to be an expert in your chosen field or subject and achieve those goals.

    2. Practice is important because it allows you to find the boundaries. Huh? Since this post has had a sports theme I'm going to continue with a volleyball example. I was a pretty good volleyball player in high school. I'm only 5'2" but I could jump high enough to get my whole hand over the net. But only one hand. Now we had to play Fredonia and they had a much scouted hitter. She was really good. I don't remember her name but when she hit the ball you hoped it didn't hit you in the face. I shut her down by blocking almost every single hit. How? Because she had mastered the hit. By mastering the hit she knew exactly how to move her arm and body for maximum power. I am very competitive and I have mastered the art of figuring out how to win. Because she was always going for maximum power she only used a limited range of motion. Which I quickly figured out and took advantage of. An expert is aware of their boundaries and can adjust when necessary. She was good but she was not an expert. She was not aware of her boundaries and was unable to adjust to me. This is one of the reasons experts don't like amateurs. Amateurs are unpredictable, but real experts will also be unpredictable, they just do it on purpose. Find the boundaries.

    3. Find a way to make practice fun. One of the obstacles for many people trying to master something is that the repetition of practice becomes boring. Very few people who don't figure out how to overcome the boredom of practice will become experts. I consider myself a joking hazard. If I don't have people laughing during games or practices then I don't think I've created a learning environment. We learn best when we are having fun. That is the bottom line.

    Updated: To fix quote problems.


    Grid Computing: Global SOA and Global Grid

    I’ve been doing a lot of thinking lately about SOA. Primarily because I think that some SOA services should be built on a grid infrastructure. I’ve read articles and posts that indicate that I’m not the only person who thinks this. But the architect in me has to answer the questions, “Why?”, “What is the compelling business reason for SOA on grid?”, “Where in the architecture stack does grid belong?” And those thoughts have led me to question the reliability of global SOA and global grid solutions. At least for the short-term.

    As I’ve thought about this area I can’t get away from the impression that the idea of global grid and publicly available services is dangerous. One thing I’ve learned over the last 19 years building software applications is that the software I build is directly affected by the platform I build it on. I’m not just talking about operating systems; I’m also talking about the firmware underneath.

    In 1994, Intel shipped a Pentium chip that had a floating point error in it. If you had been a software developer building an application on one of those boxes you might have wasted some time looking through your code trying to figure out what you did wrong. Or worse you may have been trying to figure out how your customer got some unexpected result. The hardware is the bottom of the pile and has APIs that the OS calls into. Your application is probably using 3rd party libraries and makes calls to the OS. As a developer you inherently trust that all the stuff below you on the stack has been tested and works correctly. It usually does.

    The idea of global grid and global SOA requires that the application stack be solid. And I don’t think it is. I watched Dr. Tom Leighton’s presentation
    "The Challenges of Delivering Content and Applications on the Internet"
    last night and quite frankly it scared the crap out of me. I’m very concerned that the Internet is not ready to be a reliable application infrastructure. One comment that Dr. Leighton made really hit home for me (this is how I remember it), “The Internet was built on a platform of trust.” Security was not the first thing on people’s minds. But security is vital for any Internet based application. It’s one thing to read a webpage for information; it’s another to interact with a web application that passes around privileged and proprietary information. Dr. Leighton’s description of how the backbone companies work and how easy it is for phishers to grab a DNS address is frightening.

    One of the problems with the Internet that Dr. Leighton described is how network companies’ play with the BGP Best Path algorithm’s input so that they can save money. So you might want to send an email from Oakland, CA to Boston, MA and instead of it going straight across the country, it might pass though some routers in Israel. Huh? This is going to slow down your applications which isn’t as much a problem for SOA as it is for grid. One of the major reasons to use grid computing methodologies is to improve performance.

    But what is even a larger concern I think is that phishers can redirect a DNS address to themselves. Basically giving them a technique for capturing all the data one business may be sending to another. The businesses may never even know that a leak occurred and there is no way for them to do anything to prevent it. The attack point is outside of their firewalls.

    Now there is A LOT of data that flows over the Internet everyday that gets there safely. I know that. But it only takes one bad apple to spoil the barrel, so to speak. And the doors are wide open. What’s going to happen if the next war we fight isn’t a ground-based shoot people type of war, but a cyber war? The more applications that are added to the Internet infrastructure, the more reliant our economy is on that infrastructure, and the more susceptible to outside attack we are.

    I don’t think the sky is falling. But I think that if we want to build Internet applications for businesses we need to take a closer look at how solid the Internet platform is. For the time being, I am a proponent of building SOA on grid inside your firewalls. Figure out the details and requirements there...within your protected sandbox. Meanwhile, look for products and services that can help you build safe, reliable, and secure Internet applications.

    Reading list for grid and SOA:
    "IBM’s Take on Grid, Virtualization and SOA"
    "Distributed Parallel Computing with Web Services”
    "The 451 Group: Financial Sector Grid Adoption Growing Beyond Mere Compute"

    Or just do a search on: “grid computing” SOA - Google produces over 5 million pages hits.

    Internet Infrastructure Links:

    "The Challenges of Delivering Content and Applications on the Internet"

    "Experimental Study of Internet Stability and Wide-Area Backbone Failures"
    "What’s the next security threat?"
    "Effects of Worms on Internet Routing Stability"
    "Phishers Hack Bank Sites, Redirect Customers"

    Technorati tags: , , , ,



    April 18th

    I’ve been feeling a little guilty about not blogging regularly the last few weeks. But I’ve discovered that when I’m writing code blogging is easier. But when I’m writing documents, such as the Excel whitepaper, well then, I just don’t having any writing juice left. Instead my mind does a running blog commentary during my commute home. I’ve mentally written many a post that never made it to the end of my fingers. I’ve got a ton of links saved up on subjects I wanted to blog about. I hope to get to those soon, if for no other reason than to stop the constant mental story telling.

    Swarm 7

    This termite thing has gotten really annoying. I’m hoping that now that the weather has cleared up Rich can get over here and KILL THEM. KILL THEM ALL! umm, yea. On the plus side I’ve had an opportunity to observe them first hand. Normally I think duct tape is the answer to all problems, but with the termites I’m finding that clear mailing tape works as both a container AND a viewport. Letting me see how many there are without letting them escape to fly all over the place and bug me. (pun intended).

    Digipede Update: April, 2006

    We’ve been busy here trying to get the message out. Here’s what what’s been going on:

  • We got another glowing review. This time from Mario Morejon of CRN magazine in the article "Grid Computing Turns .NET Into Enterprise Powerhouse"

  • Dan gave an MSDN webcast on grid computing using OOP which you can view here. Good Job Dan!

  • Look for Digipede on the new Visual Studio 2005 Professional Partner Resource DVD. Look for this updated DVD at the upcoming Microsoft TechEd events. We had a good team effort here at Digipede to pull all the pieces together, which is one of the reasons I love working at startups.

  • Those of you who have been watching my blog know that I’ve been trying to figure out how to distribute Excel on our grid. Well, I came up with four different design patterns and the white paper is now available here. I hope that some of you find this of value.

  • Digipede accepted an invitation to join Microsoft’s BioIT Alliance. Which you can read about here.
  • We’re not sitting still.  We have the following upcoming events scheduled:

  • Dan and John will be at Microsoft’s 4th Annual Financial Services Developer Conference in Manhattan early next week. So look them up. Dan will be giving demonstrations so it’s a great opportunity to talk to someone who has written grid-enabled apps and has helped our customers write those apps.

  • Dan has an Advanced Grid Programming MSDN webinar scheduled for Tuesday, April 25, 2006 at 11:00am PST. You can signup for the live demo here. If you miss the event it is being recorded and will be posted to the same address above for you to view later.

  • Dan also does a regular webcast which you can signup for here. The next one is scheduled for May 3rd at 10am PST.
  • We've got some new customers so watch our site for new case studies.  All in all, very exciting with more things in the works.


    RFI: Will SaaS products be used by Enterprise IT departments?

    I’m curious about SaaS adoption by large (I’m talking big) companies. I don’t know if any of my following assumptions are correct. I’m hoping that people can add comments based on real-world experience and numbers.

    Assumption 1: Large IT departments require a strenuous testing period for any new software or upgrades before the new products are rolled out through the organization. True or False?

    Assumption 2: Products provided by SaaS companies are updated when the SaaS company identifies a need. True or False?

    Question 1: What do enterprise IT departments think about SaaS?

    Question 2: What about the upgrade process?

    Question 3: What about data security issues?

    Question 4: What about being able to get data out if the SaaS company fails or the Enterprise company decides to change vendors?

    I think SaaS has a lot of potential, I’m wondering if these types of services are better suited for small to mid-size companies or if the large companies also see them as valuable.

    My thoughts were prompted by this article by Don Dodge: "SaaS – new software model, new challenges".

    Technorati tags: , , ,


    Excel: Running Excel on Windows Task Scheduler

    One thing that comes up from time to time on the Excel message boards is “How do I run Excel without opening it?” Basically the developer wants to run Excel programmatically as a COM server without any human intervention. I’ve seen folks recommend “Excel.exe workbook.xls” and making sure that the macro you want to execute is called from the Workbook_Open() event. The problem with this technique is control. The Excel developer would have to use the state machine methodology I mentioned previously, which is just a pain in the %$$.

    I think the best way to run Excel without user interaction is using an Excel Controller. An Excel Controller is a script, DLL, or executable that uses Excel’s COM interface. This technique also answers the question of “How do I run Excel from a scheduler?”

    So I’m going to answer the more complicated question of how to run Excel from Microsoft Task Scheduler.

    1) You need an Excel Controller. If you’re comfortable with VBA then you’ll probably be comfortable with VBS. (Visual Basic Script).

    Here is some sample code I use to control and automate an Excel workbook:

    ' Create a WshShell to get the current directory
    Dim WshShell
    Set WshShell = CreateObject("WScript.Shell")

    ' Create an Excel instance
    Dim myExcelWorker
    Set myExcelWorker = CreateObject("Excel.Application")

    ' Disable Excel UI elements
    myExcelWorker.DisplayAlerts = False
    myExcelWorker.AskToUpdateLinks = False
    myExcelWorker.AlertBeforeOverwriting = False
    myExcelWorker.FeatureInstall = msoFeatureInstallNone

    ' Tell Excel what the current working directory is
    ' (otherwise it can't find the files)
    Dim strSaveDefaultPath
    Dim strPath
    strSaveDefaultPath = myExcelWorker.DefaultFilePath
    strPath = WshShell.CurrentDirectory
    myExcelWorker.DefaultFilePath = strPath

    ' Open the Workbook specified on the command-line
    Dim oWorkBook
    Dim strWorkerWB
    strWorkerWB = strPath & "\YourWorkbook.xls"

    Set oWorkBook = myExcelWorker.Workbooks.Open(strWorkerWB)

    ' Build the macro name with the full path to the workbook
    Dim strMacroName
    strMacroName = "'" & strPath & "\YourWorkbook" &
    on error resume next
    ' Run the calculation macro
    myExcelWorker.Run strMacroName
    if err.number <> 0 Then
    ' Error occurred - just close it down.
    End If
    on error goto 0


    myExcelWorker.DefaultFilePath = strSaveDefaultPath

    ' Clean up and shut down
    Set oWorkBook = Nothing

    ' Don’t Quit() Excel if there are other Excel instances
    ' running, Quit() will
    shut those down also
    if myExcelWorker.Workbooks.Count = 0 Then
    End If

    Set myExcelWorker = Nothing
    Set WshShell = Nothing

    2) In the Excel Controller code replace 'YourWorkbook' with the name of the workbook you want to open and replace 'YourMacro' with the name of the macro you want to run.

    3) Launch the VBS Excel Controller using cscript.exe NOT wscript.exe. So let’s say you named the script RunExcel.vbs, then you would execute it using ‘cscript.exe RunExcel.vbs’. (If you make 'YourWorkbook' and 'YourMacro' input
    parameters then the RunExcel.vbs script can run any macro in any workbook because you can just pass that information in on the command-line.)

    4) Once you have the Excel Controller and workbook tested so that it does what you want, you can then use Microsoft Task Scheduler to execute ‘cscript.exe RunExcel.vbs’ automatically for you. I found a tutorial here:

    If the Excel Controller is a script or executable, the developer has the option of passing parameters in to the Controller which can be used to initialize cells in the workbook before the macro is executed. Obviously, using the Excel COM APIs the developer can really do some neat things by expanding on the basic structure I have provided. I hope this helps someone and if you have neat additions to this, please feel free to add them in the comment section.


    Swarm 3

    I’m getting into the habit of multitasking whenever possible, so I went down to my office to grab something and turned the heat on. Since it’s in a separate building I see no point in leaving the heat on when I’m not there. I went back up to the house, got the kids to bed, ate some dinner, discussed our Kindergarten options, and then went back down....wow...the termite cloud was thick. I’m glad I’m past the part of being disgusted by them. They were everywhere and it took me about 45 minutes to cool the office down (heat attracts them and the heater is right next to their beach head) and remove the bodies.

    Rich had come out Tuesday and foamed the wall. My house and garage are built into a hill and the office is on top of the garage. The back-end of the office is on a concrete slab over dirt. And Rich thinks that under that slap those termites have built a happy little home. If the wall foaming doesn’t get them then the only option is to drill a hole through the concrete and spray. The problem is that there is a high probability that if the integrity of the slap is compromised that I may have water (flooding) problems and the building will be less safe. Rich told me it would take a few days for the poison to work and if there was a swarm within two days not to worry. Which this was but I’m still going to call him so he can make me feel better.


    Happenings: Stirr 1.0

    I went to the first Stirr gathering last night and I was quite surprised that I had such a good time. I’m not fond of mingling. It’s the small talk that usually kills me. But I got lucky last night. Sharra Chan of Orange Door, Inc. introduced herself to me early in the evening and we had a very nice conversation. Little of it chit-chat which really works for me. If I understood Sharra right, Orange Door, Inc is a SOA accounting system targeting accountants who specialize in professionals and consultants. Essentially a web-based, secure, accounting system that satisfies the needs of small businesses. From what Sharra described to me, Orange Door is a player and a value-add company that I expect we’ll see around for many years to come.

    I also saw Nick again and met his wife Carolyn. Nick has been working with Scott Johnson on Ookles. I had realized a week or so ago that I really could use an Ookles product to share personal photos and video with my family, I just don’t want ANY of my media available to the public. I’m concerned about the safety and privacy of my family and security is very important to me. Nick was kind enough to clear-up my security concerns. Will my data be secure? Yep, very. I’ll be able to give access to those people I want to, such as my family. So now I’m looking forward to Ookles going live. My in-laws want to see more photos. I also had some great conversations with Carolyn about kids. My kids rock in case you didn’t know and I could talk about them all day...all night...all day...yea it’s that bad.

    Of the five companies that presented last night the company product that impressed me the most was from Inkling. I don’t know if the product is based on the theories in "The Wisdom of Crowds" by James Surowiecki, but that is what immediately came to my mind. The basic premise is that crowds are better at predicting things than experts. While the trends that are modeled on the main site seemed rather trivial to me they currently have about 2000 users. I think the real value of their product comes from what the product can do for businesses. Large businesses have an innovation problem. We’ve all read about it and most of us have seen it. But if a large business was to run an internal copy of Inklings product using innovative ideas presented to the company by employees and customers...I see a REALLY good way for those large companies to improve innovation while reducing risk. Risk avoidance is key for many large companies and any product that can help them get a handle on their risk while improving the bottom-line is going to be a hit. Which this most certainly will be. There is also the option of using Inkling as a new type of opt-in marketing and requirements gathering. By opening some ideas to the public or only customers, companies can get a better feel for how to make improvements and ideally sell more products that actually solve peoples’ problems. Wouldn’t that be nice?

    Nick introduced me to Niall who was kind enough to invite me to dinner. I met some interesting people, ate Chinese food, and had a very nice time. After dinner I drove Shannon Clark home. He has some really great ideas about networking in all its many flavors and you’ll be well served to check out the MeshForum 2006 conference he is organizing. I was quite impressed by his ideas and his passion for networks.