In Valid Logic

Endlessly expanding technology

Branding Gone Wild

with 2 comments

Typically, branding is a good thing. It brings you recognition, people remember your product/company, and you hope all that translates into sales. But branding can also be over done. Take for example, Smart Assembly (or rather "{smartassembly}") which was acquired by Red Gate back in September. Don’t get me wrong, Smart Assembly makes and awesome product, but the whole "{…}" thing has been over done.

For example:

  1. All emails from them use "{smartassembly}". Even one hand typed support response did.
  2. The press release when Red Gate acquired them uses "{smartassembly}".
  3. The MSI you download is "{smartassembly}.Setup.msi"
  4. The default install location is "C:\Program Files\{smartassembly}"
  5. The executables are "{smartassembly}.exe" and "{smartassembly}.com" (.com is the command line runtime)
  6. And yes, the project files you save are ".{sa}proj".

The branding can also get in the way of using the product. Smart Assembly is an obfuscation tool, so it would seem reasonable to integrate into your build process. NAnt is of course a popular tool for automated builds. NAnt scripts use $"{…}" to denote variables. While this doesn’t create a conflict, in my opinion, it clouds your scripts with excess brackets and takes away from the experience. (Note: I originally said it conflicts with using NAnt, I was wrong, since I jumped ahead of myself forgetting that it needs a ‘$’ too)

Branding is cool and all, but when it gets in the way of your user experience by overuse, its gone a bit too far.

Written by krobertson

January 11th, 2010 at 1:10 pm

Posted in Software

New Papercut release!

with 3 comments

This afternoon, finally zipped up and released a new version of Papercut. This release features:

  • Our first release to CodePlex! Yes, Papercut is now a CodePlex project, and also hosts the source. Feel free to grab the source, contribute patches, and enjoy.
  • Fixes a long standing bug with the handling of quoted printable messages where stray equal signs (=) would show up within messages. I had fixed this bug a while ago, but was slow to actually package up a release.
  • The forward message dialog box now remembers the settings you enter. I had to use Papercut this afternoon, found myself wishing it remembered the settings, so I quickly opened the project and added it in.

So please head on over and download it now!

Written by krobertson

December 18th, 2009 at 4:32 pm

Posted in Software

Trunks: Its alive!

without comments

Pleased to announce that Trunks is live! Head over to the new Trunks blog for the announcement.

We are now open to beta requests and will be sending them out here and there. I’m really wanting to progressively increase the number of users, rather than unleashing hell on it.

I’ve had everything pretty much ready to deploy since Friday, but then decided to wait until Monday, but then after doing the whole family pictures with Santa on Sunday night, was too pooped to write up the blog post and the final tweaks on the website. Plus I was going to a concert last night. Last night, finally got the last two things all done and everything was set for this morning.

So please head to the site, sign up to receive a beta invite, and enjoy!

Written by krobertson

November 17th, 2009 at 7:39 am

Posted in Code

Trunks: Pricing plans and features

with 5 comments

With every new online service, the question on everyone’s mind is always "what is it going to cost?" Or perhaps these days, "how much will I get for free?" The "freemium" model has become very prevalent in online services, where you get a basic set of services for free and then pay for the really good stuff.

Trunks is a bootstrapped service on a small budget. Trunks will run off hardware I already own, in datacenter space I already have space in. No cloud wizardry here. It is cheaper for me to shift around stuff I was already running to free up a few servers than to do anything else.

My goal with Trunks is to grow it organically (sweet, got in a buzz word). As it grows, I want to ensure it is covering the costs it generates. If it grows slowly, that is fine. That would actually be better. I’d love to see the hardware gradually grow in utilization than to have explosive growth and be beyond capacity.

In my view, there are two problems with the freemium model to where it won’t fit with my goals.

First, conversion ratios are unknown. At the time you launch your service, you have no idea what your conversation ratio will be, and thus your profitability and financial stability. Good ratios are often considered to be 4% or greater. Some companies get awesome conversion ratios. But it can go very bad too. You may end up with only 2%, 1%… or 0. With my budget, I don’t have the capital to risk on a bad conversion ratio.

Second, your paid users are carrying your free users. A conversion ratio of around 5% is often considered good, but with that you have one paid user covering 19 free users. The argument for freemium is that with most online services, the cost per user is so minimal that it doesn’t matter. But with hosted source control, I’m essentially selling storage which has a much more noticeable cost. Storage is made up of capacity and throughput, and you can only have one of the other. Throughput is definitely better since otherwise you’ll get poor performance before you use all your capacity.

So where is all this leading?

Trunks will be a "premium" service. When you sign up, you will get a 30 day trial. At the end of the trial, you either upgrade to a paid plan or your repositories get locked. If your account gets locked, the repositories won’t be accessible, but will be kept around for a while in case you decide to come back.

The cost of a paid plan? The entry level plan will be $20-30/year for 250mb storage. Yes, you read that right if it sounds too low. Since my target audience is individual developers, I wanted to keep it to a reasonable price. Developers often love getting toys, but need to get spouse approval too. Since everyone using the service beyond 30 days is paying, users are paying for themselves and not themselves and 19 others. I can have a lower price while still maintaining a decent profit margin. Additionally, I sell based on space. You get 250mb, which will likely be acceptable for most. If you need more space, then that is when you upgrade.

Other features will include:

  • Unlimited repositories
  • Unlimited collaborators
  • SSL Encryption
  • Dual Remote Backups

With collaborators, one thing that will be possible is for you to collaborate with others, where you can give them commit access to one of your repositories. They don’t need a paid account either. After your trial period, if you don’t pay for an account, you will be classified as a collaborator. You can’t have your own repositories, but you can still commit to other user’s repositories that have been shared with you.

SSL Encryption is obvious: keep your communications secure. The website is entirely over HTTPS. SVN access is entirely over HTTPS. And all mercurial and git access is over SSH.

The dual backups is where data is backed up to two offsite locations. One site is backed up to with every commit, the other one is backed up to nightly, and maintains a history of repositories.

Written by krobertson

November 14th, 2009 at 8:19 pm

Posted in Code

Trunks, a quick preview

without comments

Wanted to just given a quick glance at what Trunks is looking like. I’ve been making a number of changes in the UI, making it easy to navigate and display the most pertinent information.

First up, the repository listing. I wanted this to really focus on a high number of repositories without making the screen overly cluttered. It simply lists a small box with the repository name, and its source control URL, so if you needed to quickly grab one, can easily come here and copy the URL you need to get at the code. Or click on the title and browse the latest code.

And second, we have a directory listing. Here, you see the current directory, an excerpt of the most recent checkin message for that file or directory, and the commit number (or part of the SHA hash for git) of the most recent commit. At the top, is the most recent commit for the directory. Also in the directory listing, it will highlight the commit number of files or directories that were modified in the most recent commit. If you navigate deeper, it will continue to show the most recent commit for that part of the code, letting you get down to recent changes quickly.

And finally, the commit history. This is a day-separate list of all the commits for the repository with quick links to view the commit to see individual changes, and you can also link over to view the code tree as of that commit.

All and all, it is coming along very nicely. This past weekend, I already soft launched the site to work out all the deployment kinks. Seeing as how I wrote the majority of it a year ago, functionality wise it is pretty complete and I’ve been using it for a while, but working on the lose ends to be able to launch it to a wider audience. You know, things like forgotten passwords.

Check back soon for more!

Written by krobertson

November 13th, 2009 at 6:23 pm

Posted in Code

SMTP to XMPP gateway in Ruby

without comments

Sometimes its just fun to write an app for the sole purpose of playing around with something new.

I’d heard of Mail Hooks before, which is a service that turns an email into an HTTP POST. I’d been wanting a reason to play with XMPP, and found a way to. I’d been wanting to find a better way to test email functionality in Telligent Community/Enterprise but with live messages. Typically, this is annoying to set up since you need live email accounts, and need to set up the Windows service for them, and so on. On a dev machine, often want to do it quick and easy, and will have to regularly re-do the configuration as you switch or rebuild databases. Using HTTP POSTs for messages also wouldn’t work, because most of the developers are behind firewalls or NAT routers (like myself). I needed something else to send the message.

So what better than an SMTP to XMPP gateway, and then have a simple desktop app I fire up when I want to test messages that acts as an XMPP client. ~120 lines of ruby and more lines than that in a WPF app, and I got an easy to use solution.

The SMTP server is a very simplistic implementation, but it maintains a list of contacts that are online and allows anything@username.domain.com to be routed to them. I set it up with ejabberd and have it allow new user registration, and it auto-notifies the SMTP service user. When the SMTP service gets a notification of a new user, it automatically subscribes to their presence updates, and the client is set up to auto-accept the request.

When whenever the desktop app receives a new message, it sends it over to Telligent Community just as if our normal Windows service did.

Feel free to use the Ruby code as you wish.

Written by krobertson

November 12th, 2009 at 5:00 pm

Posted in Code

Coming Soon: Trunks

with one comment

Wanted to take a moment to announce a project that I’ve been progressively working on over the past year, and hope to finally open up soon.

Hosted source control is a market that has really exploded in the past 18 months, with a number of providers and options out there. I’m a huge fan of source control for all code, whether big or small, but with most of the offerings, I found something lacking. There wasn’t really a service that could meet all of my needs. After dwelling on it for a while, started to figure out what I was really looking for and decided to turn the idea into a reality.

Trunks started out as a realization of a few core difference between what was out there and what I was looking for.

  • Many other services are opinionated about their source control tool, but the feature set people are looking for in a service are the same regardless of the tool. Additionally, people often use multiple tools. I use git for my ruby development, but subversion for most of my .NET development. I don’t want to have to pay for two separate services.
  • Most developers are tinkerers. They work on stuff here and there and have an ever growing collection of code and projects. I believe all code should be under source control and never thrown out, but over time I’d be paying more and more with other services due to the number of repositories.
  • Some of the services sell to companies more than individuals and are loaded up with other features. A lot of hosted source control services are bundled with extensive project management, focused around teams and collaboration on the team. I just wanted plain and simple source control.

This has lead to three of the driving ideals in Trunks:

  • SCM agnostic. Trunks currently supports Subversion, Git, and Mercurial, with support for Bazaar also in the works.
  • Unlimited private repositories. And based on focusing on individuals and their growing projects, I am still on the fence about even having public repositories (open to feedback).
  • Just source control. I do plan on some very basic issue tracking (a numbered todo list?), but nothing fancy. It should just be plain simple to use, pretty to look at, stable, and reliable.

More details will be coming. I’ve had the service up and running for almost a year, but have been sitting on it to figure out what I really wanted to do with it. I recently started dusting it off and diving back into it, polishing the points I liked and removing the annoyances I found while just using it for a few months. Hopefully over the next couple of weeks, I’ll feel confident in it enough to go to a private beta and really start kicking its tires.

Keep tuned for more!

Written by krobertson

November 8th, 2009 at 11:55 pm

Posted in Code

Honesty isn’t overrated

with one comment

Last Friday, I had to go to pick up a piece of furniture with my dad that we’d been waiting for. We’d told them we’d be in at 5pm to pack it up, and they’d said they’d have it there from their warehouse before then. Sure enough, we get there at 5pm on the dot, and it is still at their warehouse. Luckily it is only 3 block away, so we follow the owner over there to pick it up.

When we get there, he says that he could make up a million excuses about why he didn’t have it there by 5, but the truth was he just forgot. His wife told him that morning it needed to be there by 5, but he forgot.

It may seem minor, but I was impressed he was so frank. Most places would act like they had no idea, it was someone else’s fault, or somehow your fault. When we got there and he said it was still at their warehouse, I was rolling my eyes, but when we left, was saying no problem and didn’t mind at all.

Written by krobertson

October 7th, 2009 at 6:23 pm

Posted in Life

I don’t get medical billing

with one comment

I don’t get how the medical industry can function.

So I’ve already posted how the hospital was gunning for their money 30 mins after my son was born back in July. So they got paid.

Then when he was coming up on two months, we started getting a trickling of other bills. The OB had some weird billing practices and we still owed on her delivery. Then we got the copay bill for the circumcision. Then we got the copay bill for the anesthesiologist. $300 here, $200 there, $400 for that one. What next, is the cook going to send me a bill for the room service?

Why can’t they just do all inclusive billing? I would much rather know all my expenses up front than to get bills trickling in one after another 2 months after the fact.

But then the thing that made me nearly crap my pants. Got the mail yesterday to find something from the hospital. Open it up, and the first thing I see before opening it up all the way is “Amount Due: $14,472″. I accidentally let an expletive slip with a toddler in the room. Though one you open it up and look over the fine details, you see it has three boxes: Amount due, amount due from insurance, and amount due from patient. The $14k was amount due from insurance, amount due from patient was $0. But why are they sending me a notice that insurance still hasn’t paid them? I don’t care. The insurance industry is just as messed up as their own billing practices. At the very minimum, they could make the statement a little bit clearer. It isn’t pleasant to take it out and see the top 1/3rd first with some big dollar amount.

That’s my rant for the day.

Written by krobertson

September 22nd, 2009 at 8:42 am

Posted in Life

The joys of bnx2 on Debian Lenny with Dell servers

without comments

Last weekend, I was working on reinstalling Debian Lenny on one of my servers when I want into the same issue I’ve encountered time and time again. I have a couple of Dell PowerEdge 1950s which use Broadcom network cards, and the Broadcom firmware is classified as non-free by Debian and not included on the network install CD (maybe others, thats the only one I use). For some reason, Ubuntu includes the drivers, but Debian doesn’t. My eye-rolling aside, in this case I preferred Debian over Ubuntu.

Now the problem… I’m about 45 minutes away from my servers. On all my own servers, one thing I had decided is an absolute must to have the remote management cards (DRAC5 in my 1950s) which supports remote console and virtual media. This is awesome for remotely reinstalling an operating system, but not so good when it asks you for an additional driver by removable media… and of course, when it is your network card driver.

I don’t quite recall how I got through it last time, though it involved a fair amount of coursing, particularly because the installer asks for the .fw file when it really just wants the .deb.

This time around, I found a nicely prepared ISO with the deb on it, however the DRAC only support one virtual CDROM, and it didn’t seem to find it if I unmounted the installation media and mounted the ISO with the deb on it.

There was also some information about PXE booting with the driver, but that sounded like an overly complicated solution.

My route? If it can’t find it on the virtual cdrom, try the virtual floppy! The deb is only 102kb, so just fire up Magic ISO, create a new floppy image, copy it in, and save it. Mount it to the virtual floppy and problem solved.

Encounter the same issue? Download my floppy image!

Written by krobertson

September 15th, 2009 at 5:44 pm

Posted in Technology