In Valid Logic

Endlessly expanding technology

Archive for June, 2006

Telligent Twos

without comments

As Rob blogged about and Scott, Telligent turned two years old this month, and also, next month is my two year anniversary since starting with Telligent as a contractor.

Earlier, I was looking back through some old emails, and I still have the original email from when Jason forwarded my contract, stuff on my early projects, and I even have the original spec Scott sent out for Community Server v1.0.

Yes, it has been an amazing two years. For me, joining Telligent was quite risky. I’d just left college, just gotten engaged, and her I was working for a startup… even more, with people who at that point, I’d never met face to face. In the time since, Telligent has truly matured and proven itself. Rob, Jason, and the Scotts (Telligent has like 4 Scotts) have done a terrific job.

One question I asked Rob last week was whether he felt Telligent was still a start up or not. It is kind of a difficult question, since what defines startup vs. non-startup (corporate?)? Is it number of employees, revenue, age, products/releases, management style?

In my opinion, Telligent isn’t really a startup anymore. Personally, I associate risk with a startup… new, still developing, possibly unstable. Telligent has done very well and is quite stable now. It has a strong foundation of people, good range of clients, and careful growth (it’s grown fast, but not as fast as it could have). But in terms of mentality, Telligent is still working to be innovative. We have a lot of goals for Community Server, as Rob mentioned, there are some new products in the works to broaden and branch out, so we aren’t playing it safe or allowing ourselves to get real comfortable with where we are. So Telligent is basically in that grey area. And perhaps the grey area is a nice place to be. Stable (so I’ll have my job for a while) and yet still working to push the boundaries and try new things.

Written by krobertson

June 29th, 2006 at 9:35 pm

Posted in Archive

Shirts and More Shirts

with 3 comments

Tonight, I went to the Sacramento .NET User Group and saw Ken Getz talk on WinForms Tips & Tricks (who coincidentally uses CS, though I didn’t get to talk to him afterwards since he had to leave right after it). Anyway, right after the meeting, they had this raffle for a couple prices and I won myself this nice little shirt:

Programming is like sex
“Programming is like sex: one mistake and you have to support it for the rest of your life.”

I thought my wife would laugh at it, but she wasn’t extremely amused. She was like “our kids aren’t going to be mistakes!” No, of course not, babe. But it is a funny shirt. :)

And for those of you who are in the Sacramento/Bay Area, you should keep your keep your schedules free for either August 29th or September 26th (likely the August date) as I will be presenting at the Sacramento .NET User Group on Implementing Windows CardSpace, covering what CardSpace is, types of applications, a demonstration of a live site utilizing it, and a walk through of how to implement it in your own applications and sites. A part of the demonstration will cover CardSpace integration Community Server! More to come on that in time. :)

Community Server Shirt (Back)Community Server Shirt (Front)Also, we will be giving out a couple of Community Server t-shirts to a few lucky attendees. These are a hot commodity and I only have a very limited supply. So if you want one, be sure to come out!

Written by krobertson

June 27th, 2006 at 8:59 pm

Posted in Archive

.NET quirk of the day

without comments

Here is something that might save you some hair. The identity element in the system.web section of the web.config takes an optional username and password parameter. It is good to note that the username parameter is actually “userName” and it is case sensitive. So, if you try using “username”, it will fail.

Also, it is interesting that when you do this by accident and are accessing the site remotely, you will get an ASP.NET “yellow screen of death” about customErrors needing to be set to Off. The odd thing is that it will show you this screen even when customErrors already is set to Off.

Written by krobertson

June 27th, 2006 at 11:04 am

Posted in Archive

Workflow without Windows Workflow

with one comment

Recently, I decided to dive into working with Windows Workflow some more. It had been while since I had done anything with it and I’d noticed that a new version came out with the May Beta2 of .NET Framework 3.0.

Overall, I must say that I am disappointed. Windows Workflow will be great, but it isn’t there yet, and quite frankly, is rather painful to use at this point. After feeling some pains, came up with a nice, but not as glamorous compromise.

Previously, I’d just been messing around with creating some basic activities and looking at some of the sample ones. This time, I decided to create some actual useful ones. Since I’m looking at using Windows Workflow in a future version of Mail Gateway, I figured I’d create a basic workflow to poll for messages, and then it would invoke another workflow to being some basic processing. Easy enough, right?

For starters, there is a bug with the InvokeWorkflow activity has a bug where you cannot invoke a workflow in the same assembly, it has to be in a separate assembly. I was hoping that one had been fixed already, but to my disappointment, it wasn’t. Secondly, once I did break my workflow into two assemblies, I still couldn’t get my program to compile. There weren’t any apparent errors, but when compiling it would have error having to do with not being able to find the definition for the library. Everything compiled fine individually, but even though the dialog to find that target workflow saw my second workflow, it would compile against it.

I decided to take the InvokeWorkflow out, change my second workflow to a sequential activity, and just not have any parallel processing for now. Then, my next issue noticed is that every time I changed the namespace or name of an object (which I did a few times, as I like logical names), I had to close and re-open the project. Often, the designer mode for the workflows and the sequential activity would get locked on an object’s full type once it is created. So I’d have to close Visual Studio and reopen it.

Then, when I finally thought all my woes were over, and I was able to finally fire up my little application, I realized I was wrong once again. I could only fire up the application in the debugger once per session. Yup. Fire it up, try it out, notice something wrong or slightly off, close it change the code, close Visual Studio, re-open Visual Studio, build, and then run. If I tried to build again without closing and re-open, Visual Studio would get pissed at me and not behave.

I think there is a ton of potential to coding with workflows. But I think Windows Workflow adds a rather large layer of complexity to it. The thought process of a workflow is what I am drawn to… dividing code into separate small “activities” rather than functions, and having this one place where they are all cleanly wired together. Doing this does not require Windows Workflow. The biggest two benefits of Windows Workflow is the built-in ability of being dynamic (ie, can pretty easily change and swap around pieces of the workflow, or the whole thing), and secondly, its visual designer, which is a visual way of viewing it, rather than code based.

The less glamorous, but simply effective way of utilizing workflow is simply model your classes through the mindset of the workflow process. Just as you may create a folder or portion of your namespace for components, objects, controls, or enumerations, you should create one for activities and one for workflows. In activities, you create a class for each activity that you would have with your workflow, with just an Execute() method. Pass in any parameters you need, and return whatever it outputs. Your activity could be poll POP3, validate user, convert message, etc. Keep them simple and logical. Then once you have your activities, you create the workflow class. The workflow class should be very simply and just focus on connecting the activities together. You loop and call poll POP3, when it returns something valid (like not null), you validate user. If the user is valid, then you call to process message. When that is done, you return back to poll POP3 until a new message is ready.

So while I spent easily about 3 hours utilizing Windows Workflow to try and get what I wanted, with a bunch of obstacles and frustrations, I spent a mere 20 minutes coding in the simple workflow mindset and got the same (or even better) result. My code ran without any conflicts, compiler complaints, or needs to close Visual Studio.

I really do want to use Windows Workflow, and I think it has a ton of potential My main hope is that the team will rise to the occasion and show consistent progress so that the final release is something everyone could use without gritting their teeth.

Written by krobertson

June 26th, 2006 at 9:54 pm

Posted in Archive

The Bookmark Bandit

with one comment

So as I had mentioned before, I was in Dallas for a couple of days. On my flight to Dallas, I think I had a fairly unique thing happen to me.

I had a layover, so I flew from Sacramento onto Salt Lake City, and then down to Dallas. On my second flight, I was on a plane where they two seats together on the left side, and then three on the right side. I was on the left side by the window, with this quiet, kind of short, mid-40s guy next to me. Didn’t speak to him the whole time, as I was just reading a book the whole time (no DC outlet on the plane), and he was reading some management looking book.

Towards the tail end of the flight, I’d decided to get up and use the restroom before they started the descent. So I put my bookmark in my book, slipped it into the pocket, and got up to use the restroom. When I came back, I went to grab my book again, and noticed that the bookmark was nowhere to be found. I know I put it in, since I know I never remember the page number, but it wasn’t anywhere to be found.

I took everything out of the pocket, and searched through it piece by piece, but it wasn’t wedged into anything. I stuffed my hand into the pouch, and felt around everywhere, but came up empty. So I figured I must have dropped it, so I felt around a little on the floor, but didn’t find it.

I sat back down and just went back to reading, thinking a little bit about where it might be. Then it dawned on me. Maybe the guy next to me might have stolen it. It would seem quite outlandish to steal a bookmark. I mean, I had my laptop, cell phone, and other things far more expensive than a bookmark in my bag. But then again, a bookmark seems so trivial that one would never assume someone to steal it, or mourn its loss.

And the bookmark was a very nice one. It was metal, quite sturdy, and fairly attractive. I mean, I bought it because I liked it… and I’d probably steal it if I was the stealing type. Plus, it would have been easy for him. It was right there in front of him. One hand movement and it was his. No rummaging or even chance of being caught.

But still, the thought of someone stealing a bookmark… come on, it’s worth maybe $3-4.

Once we landed and everyone was standing up, I was able to stick my head down a little bit to look around under the seats, and didn’t find anything. I wasn’t going to bother acquiring the guy of stealing my bookmark, since I mean, it is just a bookmark, but I was still annoyed that he might have actually stolen it.

It had occurred to me that by a slight chance, it might have fallen straight into my backpack (which was under the seat) and it was hiding in there. But then at the hotel, I emptied out my backpack and went through it and found nothing.

Now, I firmly believe that it was stolen. I was struck by the bookmark bandit.

Written by krobertson

June 25th, 2006 at 1:59 pm

Posted in Archive

Podcast suggestions

with 2 comments

Anyone have any good podcast suggestions to keep me entertained tomorrow? Got the new Hanselminutes, but looking for some more.

Written by krobertson

June 21st, 2006 at 8:31 pm

Posted in Archive

Airlines with laptop power available

without comments

I thought this was pretty cool, so I just had to mention it.

On Thursday, I am going to be flying out to Dallas and I’m coming back Saturday afternoon. Any geek’s concern when travelling is powering their laptop (or whatever they take with them), but you don’t always know if it will be available.

Luckily, I found this Ultimate Guide to In-Seat Laptop Power. It talks about the different kinds of ports, some devices you can get, and also, under their Comparison Charts menu, you can see if it is available and the type of port based on your seating, airline, and the type of plane.

So on my trip, I have a lay-over on the way there, so my first flight has laptop power, but my second one doesn’t (and my second one is the longer flight, dangit). On my way back, it is non-stop and I’ll have power available.

For anyone who travels frequently, this site should be priceless.

Written by krobertson

June 20th, 2006 at 9:35 pm

Posted in Archive

Companies seeking Community Server developers now

without comments

One way to know that you are doing something right and people are using your software is when companies start specifically seeking people with experience in your software. Over the past two days, Dave has mentioned places seeking CS developers in the Community Server Daily News.

Personally, I’m ecstatic to see a job posting or a project on RentACoder referring to Community Server. It is a sign that some serious people are using it and willing to pay money for customizations. I know some of the people in the Community Server community make their living as CS contractors. Now, even people outside of Telligent can make their living off CS, and help to add more fuel to the fire by spreading its usage. Its just cool to see something you helped creating forming its own little industry or carving out its niche.

Perhaps soon, people will start to realize that Community Server is not just an application, but could serve as an excellent platform for I site… even one that didn’t even really deal with communities. There is a lot of backend to CS that would serve as a great foundation for a lot of different uses. Things like user handling/management, configuration files, caching, URL rewriting, the list goes on and on. Hoping to sometime write up more on this topic, or find some simple way of demonstrating how CS could serve as a platform for rapid deployment of something non-community based.

Written by krobertson

June 20th, 2006 at 2:05 pm

Posted in Archive

Analogies in customer service

without comments

Ok… going to go on a little rant… see if you can find one of my annoyances from today.

Being a developer, one thing I constantly do is analyzing things. Analyze anything from code to things in life. Also like deriving analogies from them.

My latest interest? Restaurants… your lunch and fast food type places.

In terms of how places operate, I see that there are usually two types… those with the assembly line process and those with single person service.

Places like McDonalds, Taco Bell, and Quizno’s are all assembly line places. One person takes your order, another puts it together, another finishes it up, a final wraps it, and then someone hands it to you. This system is efficient, but it is impersonal and not dynamic. Try going through a drive through in one of these places and ask for your soda with no ice (I hate ice, dead space). The vast majority of the time, they never remember. I’ve come the conclusion that when I ask for it, it is more of a hopeful wish than an order, so I never really raise a fuss over it.

And while on this topic, I’ll grip about why I despise Quizno’s. They can never get my sandwich right. My order is “regular smoked turkey, no lettuce, tomato, or onions”. Very simple and easy to remember. The problem? One guy puts the sandwich together, then puts it on the conveyor belt as it goes through the oven, then another guy puts on the veggies, like lettuce. The first guy never talks to the second guy. I always have to be sure to watch for my sandwich to come out and catch the guy before he puts lettuce on. Often times, I’ll be in the middle of paying and not catch them in time, and then I don’t get what I asked for and have to pick it off.

One time, they had to make my sandwich three times to get it right. Ordered the sandwich to go, came home, took it out, and found they made the wrong sandwich. Some Sierra Turkey sandwich. So I went back up, told them they made the wrong one, retell the guy my order, and he goes and makes another. He brings it back and says “you wanted lettuce, right?” I roll my eyes and say no. He automatically apologizes and goes back to make it a third time… and finally right. Same thing happened at In & Out today… I was craving In & Out… went, ordered, came home, and they gave me the wrong order. Get in my car, drive back, talk to them, wait 10 more minutes, got it right.

The other kind of lunch restaurant is the one with single person service. This is your Togos or your usual deli sandwich place. These places have one person who takes your order, makes it, and often handles paying for it. Deli shops are often even better about being able to handle more complex orders or multiple sandwiches at the same time. They give personal service. If you go there regularly, they often recognize you and will remember what sandwiches you like and how to make them. You don’t have to watch them like a hawk, and often they are polite and chat with you. It is an interesting contrast to the assembly line places, where you perhaps don’t even see the person who’s making your order.

So if you made it this far in my rant, you may be thinking “what the hell does this have to do with the tech industry?” This is where the analogy comes in. Support is a very important part of any business. How do you handle your support? Do you treat it like an assembly line, or do you give personal service? Do you just take in a request and pass it along to the next person, or do you see the problem through to the end? Do your customers get someone else every time, or do they get the same person (or small group of people)? Do you care about your customers issues, or you just want to get it closed an on to the next one?

But what does this have to do with software development? Because all developers are in support. All developers, at one point or another, will have to deal with a customer. A customer is anyone who is paying your company money. And when you deal with them, you are a representative of your company.

Written by krobertson

June 19th, 2006 at 11:16 pm

Posted in Archive

Switching to Flickr

with 4 comments

Yesterday, I decided to start moving my photos to Flickr. Why? One of the main reasons is a combination of two things. With a Pro account (for only $2/mo), I can upload 2gb per month. There is no fixed storage amount, so it constantly grows. With this, it would be a great way to store all the photos that I don’t post online as well. Since I can mark them as private, I can easily upload all my other photos I don’t want to make public so that they are safely off my system.

I’ve had it happen before where I accidentially lost photos from deleting them by accident, reformatting, hard drive failure, etc. I don’t have full redundant storage at home, and just want simple storage of my photos in a way that is easy to browse them when I want to. Flickr makes that pretty easy. All photos in one place, some public, some private.

One surprising thing, my photos on Flickr look better than they did on my own site. Then again, my site wasn’t really designed with a gallery in mind… it is definitely more of a blog site.

Written by krobertson

June 17th, 2006 at 4:27 pm

Posted in Archive