Thursday, February 8, 2018

Five Years in Review

The winds are changing; that much is clear.

Five years ago when I jumped with both feet into entrepreneurship, I couldn’t have imagined what I was getting myself into. With a two year lifeline of saved earnings, I founded my first of three technology businesses with the simple intent of creating a home for my nerdy kinfolk. I never dreamed of changing this community, yet change is here. We still haven’t caught up to Fresno, but we’re hot on their heels.  

Bakersfield meeting spaces are now available to host technical and entrepreneurship meetups, educational programs for tech are open up for enrollment, venture capital lending for Bakersfield startups is here, downtown’s “Eastchester” district is developing, and we are now at a point where Bakersfield is overproducing technical talent relative to the demand from local businesses. If it weren’t for the accelerating downturn in the petroleum and agriculture industries, I think this city would be downright booming.

2017 was a challenging year for me. Turnover has been a steady problem for me in running a software consultancy, for a multitude of reasons. Firstly, I have a strong preference for hiring green local talent fresh out of CSUB and BC and giving them those first critical years of work experience, but once they have that experience, they have found much more stability in companies like Amazon and Microsoft. Secondly, Bakersfield is "a great place to be from,” but not too many rank Bakersfield as their top choice in place to live. Efforts are already at play by the KEDC and some of the Chamber/BYP constituency to bring young professionals “Back to Bakersfield,” but ultimately career stability is a large determinant in such a decision, and our economy is facing uncertainty in the coming decades.

Most significant last year was my unfortunate encounter in getting screwed by a fraudulent prospective client early in the year. In a service business with no recurring income stream, time is money. This challenge cost me time, it cost me cashflow, it cost my team morale, and ultimately it cost me the team itself. It was a painful lesson, but clearly one I needed to learn: do not allow those whom you trust to attempt to convey their credibility onto others. The people you choose to do business with must earn their credibility on their own merits. Only then can you know with certainty they are worthy of trust.

I spent many months reflecting on how the situation played out, and ultimately decided that I was taken advantage of in business because I smelled of desperation. This prospect had approached me offering cashflow for the entire year in exchange for exclusivity. Had my company been in a stronger position, I wouldn’t have dared consider the deal (at the expense of my other customers). But they were sharks, and I smelt of tuna. By fall 2017 I decided that if I wanted to continue swimming in shark-infested waters, I’d better damn well look and smell like a shark. And thus, Kevin Mershon the Bakersfield Venture Capitalist was born.

Thus far, my capitalistic adventures have only been conceptual in nature. I’ve met with a handful of teams seeking seed capital or angel investment, neither of which I’m interested in nor positioned for. But over time, the hope is that the local image of me as “the software guy” will fade as “the tech business money guy” blossoms. I have my investors already on the line, and now it’s just a waiting game until the right talent emerges. Until then I am gradually reducing my consulting offerings in anticipation of VC activities keeping me busy.


Over the past few weeks, I have felt complacent about the recent changes in my life. Bored, even. But, I am hoping this feeling will be replaced with excitement as this year unfolds. Find me at MESH if you dare to dream with me. 

Saturday, October 11, 2014

Don't forget your C-Max Energi


I'm not a car buff. I haven't learned how they work, how to repair them, or why car enthusiasts prefer one over another. I haven't owned many cars, but the ones at have owned have each been a different brand, and all have required more maintenance and repair than I felt was reasonable. I was one of the earliest adopters of Ford's recent addition to their line-up, the C-Max Energi. And I have to say, I couldn't be prouder.

Living in an oil town, my car gets some strange looks. Many people have seen the commercials, but hybrids aren't very popular in Bakersfield, and plug-ins or pure electrics doubly so. I get a lot of questions about the viability of my C-Max in day to day living. If it's electric, how do I get out of town? Don't the batteries fail and burn the car to a crisp? Is it completely gutless? Can it climb the Grapevine? Is it comfortable?

Of course, when my responses to these questions all paint my car and it's cousins in a positive light, I'm still met with skepticism. Despite the rave reviews and decent market penetration of hybrids into the automotive industry, there are a lot of doubters who simply cannot be convinced that these cars are worth the investment.

Well, this weekend, I made some believers.

I'm currently writing this blog while camping outside of Pismo with a group of friends. This campground in particular happens to lack service hook-ups, and quiet hours are in effect at 8 pm. That means no gas generators, and for some people that can be a real problem.

One of my friends on this campout has a bad case of sleep apnea like you've never seen. He has a cpap machine to keep him alive at night, but it plugs into a conventional 110v outlet, and needs continuous power to run. After being informed last night about the above mentioned information, he wouldn't have joined us on this camping trip. But, he was already here, and options were slim. So last night, I took a gamble.

In addition to its USB ports, the Ford C-Max Energi has three 12v sockets which provide continuous power when the vehicle is off, and an inverter powering a 110v conventional outlet on the back of the center console facing the back seats which is powered only when the vehicle is on. These sockets are quite useful on road trips and such, but camping is where these things really matter. My only option to help my friend last night was to run an extension cord to the 110v plug. In a traditional vehicle this would be concerning, because it meant the vehicle needed to run overnight. Noxious emissions aside, the real concerns one has in doing this is the immense waste of fuel, the noise, and the need to leave the keys in an unoccupied car. But the C-Max Energi eliminates all of these concerns.

The solution last night was actually quite simple. I turned off the air and the headlights, dimmed the dome lights, and push button started my C-Max. I walked away, key in hand, and locked the doors. With only the warning double honk to notify me that my car was still actually "on", we settled in for the night. With my friend's cpap machine plugged in and running, my car happily kept him breathing all night, silently running almost the entire time off the 8.5kwh lithium ion battery. With the energy draw so minimal, about every 20-30 minutes my car purred to life using a sip of my remaining 375 miles range of gasoline to charge the hybrid battery to a satisfactory level, and back to sleep it went. When I woke with the sun this morning, I found overnight my car had only used approximately 13 miles of gasoline range, to keep my friend breathing through the night.

There are a lot of excellent reasons to buy a hybrid, plug-in electric hybrid, or all electric vehicle today. My personal preference was the compromise of having access to multiple sources of fuel and a high range. And today, that decision was validated. Over breakfast, this story has been shared with everyone in our camp, and met with surprise and disbelief. But the fact is, my C-Max did something important that not a single other vehicle in this campground could do. Today, Ford has a lot of new believers in their ability to deliver excellence in their vehicles, and potentially save lives. And that is a story worth sharing.

Wednesday, June 25, 2014

Bridging the Gap

According to researchgate.com 57% of software engineers programmers are introverts as opposed to only 50.9% of the general population. 67% of programmers would rather appraise the facts of a situation than try to intuit their way through it. 81% prefer to think on a topic instead of introspect on their feelings about the matter. So what does this all mean?
If communication is difficult, communicating with programmers is at least doubly so. Traditional businesses who try to formulate a software division in order to meet their own needs tend to focus on the team initially, but soon treat them as mushrooms in a dark closet. This is typically A-OK individual developer, as programmers don't like noise. I don't mean noise like Nicky Minaj or Skrillex. I'm talking about mandatory meetings, team building exercises, group projects, and continuous interruption of their Flow. But managing programmers is an affront to this, because detailed information feedback is required all the time. The secret is that good programmers incorporate code versioning systems into their everyday workflow, and these systems provide everything one needs to effectively manage a team: the name of the developer working on a task, the changes which were made, the date of the changes, the motivation or reason behind the changes, and (if the project structure and social order are maintained well) the ID of the task itself. All this information is a figurative gold mine for project managers to utilize, but this information is largely discarded by non-programmer managers of programming teams because it's simply too much and in the wrong format for non-programmers to understand.
A good software team manager has to speak both "languages". He needs to know the requirements of the product owner to communicate to the programmers, and (arguably more importantly) he know the tools of a programmer well enough to interpret the information about a project and communicate it back to the product owner. That is the primary expertise we bring to the table with our clients: we can turn business needs into business solutions.

So, here's Mershon Enterprises, a Bakersfield software company built on modern principles of design. We all work remotely and we have practically zero overhead, but what our potential and existing clients need is a traditional business face that they know how to approach. Mershon Enterprises chiefly uses Slack for topic-oriented discussion, and we occasionally text message each other. But our clients understand email and phone calls. So, we host our own email system and phone system, and we're subscribed to Twilio for about a dollar a month to get a local phone number. We have a swath of programmers, yet clients deal with the same representative for the entire life of their project. We put forth the effort to bridge the gap between traditional business and the modern age so that you don't have to. This gives both parties the ability to focus on what we do best.

Friday, June 20, 2014

What is Mershon Enterprises?

I feel like I should start this blog out with some insightful quote or anecdote about how today I woke up to take on the world. The fact is, that sort of marketing buzz-wordy nonsense isn't me. I'm real me all the time. For instance, right now I'm holed up in Starbucks clutching my still almost-warm tall drip, I'm a little bit chilly, and I think my pants might be a bit too tight these days. So, try and take me at my word as I change subjects.
Mershon Enterprises is a Bakersfield, California software startup. It was founded as a reaction to the business culture in the San Joaquin Valley. When I say that, I'm not just talking about my previous employer; it's hearsay, but I have friends who worked at many other firms and they all share the same stories. Businesses here tend to survive with a persistent mindset of anti-competitive lock-in, fire-fighting as a way of life, and (what I'll kindly coin) "legacy business methodologies" which drive the creative minds to the nearest competitor in a hurry. The engineering firms in particular are have a lot of employee swapping back-and-forth, the technical servicing firms are all struggling to keep up with the ever-changing demands of the larger corporations (Aera, Chevron, Grimmway, and Paramount Farms).
Technology (particularly software) is built on rules of efficiency, order, and transparency. Agile and Scrum are all-the-rage in the tech world, and create great conflict when placed in direct conflict with these "legacy business methodologies". Core concepts like "sprint" become a verb, as in "just sprint through this task so we can handle this other thing that just came up this morning." The role of the Scrum Master gets contested, then slowly eroded away until the Product Owner subsumes the role, and turns the holy trifecta of the daily standup ("What did you do yesterday / What are you doing today / Are you blocked by anything") into a twice-daily hour long pep-talk on the merits of just make it through today and we'll start planning tomorrow how things will be better. The people behind Mershon Enterprises are ready to move on forward from legacy business, and I'm willing to show you how we plan to do that, through this blog (and probably the next).
Mershon Enterprises is not a service company (at least, not in a traditional sense). Service companies traditionally aim to integrate and entangle themselves into your business, and get you comfortable with the idea that you need them but they will always be there to support you. It's a successful business strategy short-term for certain, but the caveat to this approach is it makes their business fully susceptible to the rules of your business. Given time, they are made to follow an amalgamation of all the policies of the larger companies which feed them (yours and your competitor's), until their business model closely resembles a Frankenstein's Monster of all their clients combined. This isn't sustainable beyond a few years, which may explain why some of the business owners of companies like this tend to sell or re-incorporate every 5-10 years.
So how are we different? Mershon Enterprises doesn't want to be entangled with your business; we want to write great, maintainable software, and then get out of your way. True, we chiefly do custom software development in Bakersfield (and surrounding areas) right now. We're doing this to learn the needs of our market first, so we can eventually pivot into building software products. We employ skilled software professionals who understand that the future of business is automation, consolidation, downsizing, and solving the technological problems while leaving the social ones firmly in the hands of capable individuals.

Tuesday, June 17, 2014

What I'm up to

So it's been another 3 years since I blogged anything worth sharing. Since then, my son was born and has grown into a brilliant little toddler, we built and moved into another home (and I became a landlord to the old one), I took some calculated risks that should've paid off sooner based upon excellent market data but for our corrupt politicians and lobbyists interfering, and some less calculated but logically sound investment strategies, I left my previous employer of 6.5 years, I revived my personal life, and most recently I have co-founded a Bakersfield Software Company, Mershon Enterprises.

Being a parent is difficult just about any day of the week. For instance, right now my son has a cold and he's feverish. Any parent will tell you that by itself, that's nerve-racking beyond compare. BUT, pair it up with the added responsibility of keeping a minimum number of billable hours per week (and oh-by-the-way I don't have a boss to remind me how hard I need to be working), and life can get pretty stressful. Luckily, I'd planned for this. Before quitting my old job I saved about 6 months worth of living costs on top of my brokerage account, so money hasn't exactly been tight but it's still of daily consideration. So I cheerfully advise that if you want to start a business, set money aside and diversify the hell out of it.


A solace I've found with my new routine of 7-noonish weekdays at the Starbucks down the street is I have a lot more time to get a little lost in my head and think about what it is that I've done and am doing with my life. My old job was ostensibly safe and stable, but I wouldn't have quit unless there were more things I disliked than I liked. Paychecks are great, but if you have to face having your ideas continuously rejected by your managers, being forced to keep all time third-party billable but not having a marketing team to back you up, being locked into a vertical market where you can't compete and not being allowed to spread horizontally, and being forced to adopt anti-competitive business strategies in the attempt to lock-in repeat business, and you can maybe see what I left. Things with my company currently are (and I hope will remain) substantially different and better for me. I work when and where I want, I can freely approach potential clients and employees I want to work with, and if I want to enjoy the better part of my day sporting a mohawk and pink spandex, nobody's going to send me home.


Fact is, I'm already a lot happier and things are only just beginning to go my way.

Tuesday, June 7, 2011

A Bedtime Story for Lucas: The Story of Minnie

Part II - Humans Must Find Homes, Too


Minnie came to live with the boy and girl, in what they considered to be a very small apartment. But Minnie was a little cat, and to her every place in the world was exciting and huge! There was only one teensy-weensy little problem with this new home, and his name was "Big Meats". Big Meats was a huge brown cat who was not at all happy to see Minnie come into HIS home.



"Go home!" he'd hiss, and whump his tail back-and-forth ferociously. "B-b-but this IS my home now...I thought?" Minnie would stammer. Like before, Minnie didn't really like this other cat. But, the humans had brought her home to be with him, so she thought "I will do what I can to be friends with Big Meats. After all, I don't want to bother the humans or they'll send me away."

Very shortly after Minnie came to live with the humans, the girl fell ill. "Oh no!" Minnie cried, "Was it something I did?" Big Meats didn't seem to care about the girl's illness, so Minnie felt it was her duty to make sure the girl was okay. She'd rest by her all day and all night, with a watchful eye.



Big Meats saw Minnie's dedication to the girl, and even though he couldn't be bothered to watch over the girl himself, he thought better of Minnie and began to like her more each day. Before long, things started to change. Soon, Big Meats and Minnie became the best of friends. The girl got better, and grew into a woman, and the boy grew into a man.

One day, the humans decided it was time for a great big change. They packed away all of their things, and more people showed up to help them. Minnie and Big Meats were both very scared, so they huddled together and watched the frenzy. "What's going on?" Minnie asked.
"I've seen this before, but only once," Big Meats replied, "It's called moving. We're going somewhere new. I wonder if the next place will be bigger like last time!"
Minnie thought to herself, "I sure hope they don't forget about us!" But of course they wouldn't forget. The man and the woman loved Minnie and Big Meats, and together they were a family.



Big Meats was right, and in a big way. This new home was HUGE and BEAUTIFUL. It had all the space they could ever want to run and play, and lovely things to admire outside. Minnie recalled the long trip to the new home. "Do you think we'll ever move again, Big Meats?"
"No" he said, "This time was different. I think this is our forever home."

A Bedtime Story for Lucas: The Story of Minnie

Let me tell you a little story. This story is about a little cat. This cat was named Minnie, and unlike most cats that you hear about, Minnie didn't have nine lives. In fact, she only had one life. But what an amazing life she had.

Part I - Finding Home

Minnie was born a stray on the streets of San Jose, in the year 2004. She lived her life studying birds and people, and loved shiny things. She especially loved lights. Every night, she would look up at the stars and wonder how they twinkled so very brightly. Every day, she would bask in the sunlight next to a bus stop bench when people weren't around. Minnie liked people, but had never met one before, up close. So she was afraid, and she stayed away.

Minnie occasionally saw other cats, but didn't like them very much. The other cats were mean and dirty, but not Minnie. Minnie was a dainty lady cat. Instead of eating the food she found right off the ground, Minnie would copy the people she watched, and eat with her hands. One day, Minnie was eating with her hands, when another cat saw her and got mad at her. "Hey you! Stop that! Cats don't eat with their hands!" "I do", she said defiantly. The other cat got mad and pounced on her. But Minnie had never been in a fight, so she didn't know what to do. Instead, she just cried out for help, and the bigger mean cat got scared and ran away.

After the other cat attacked her, she never quite felt the same. She was moodier and hungrier, and needed more rest. One cold February night, it started raining. Minnie had never seen rain before, and didn't know what to do. So, she found a cardboard box to take cover in. Minnie hid and cried, but she was so very tired. But, just as she started to nod off, she heard human voices! "Oh no!" she thought, and tried to scramble out of the box. But, she was so very tired, and couldn't get away. The humans put her back in the box, and carried the box to their car.

Minnie wasn't sure how much time had passed, but it sure must have been a long time. As it turned out, she had been so tired and hungry because she was pregnant with kittens! She gave birth to those kittens, and nursed them for many weeks. Eventually, the kittens were ready to go off on their own, as kitty cats do, and the humans helped the kittens find homes with other humans. Minnie liked the humans who took care of her, but they acted very hurried and worried, and this made Minnie nervous. Minnie got sick for awhile, and then got better. Many humans came by to see her, and that made her happy. But, none of the humans ever wanted to take her to see their home. "That's okay," Minnie thought to herself, "I'd just get in the way, and I don't want to bother them."

One day, a young pair of humans, one boy and one girl, came to visit her together. Minnie saw them, and thought "They sure look nice!" The boy and girl both took notice of Minnie, and the girl even said, "Aww, she's perfect!" But, like everyone else, they soon walked away to look at the other cats. Minnie laid back down, asking herself why she thought this time would be any different. But it was! It was different this time, because no sooner had Minnie laid down did the boy and girl came back, and this time they said, "She's the one. We want her!" One of the humans that took care of Minnie opened the door and picked her up, but Minnie was so excited to jump into the arms of the girl that she accidentally scratched the human holding her. "Oh no!" she thought, "They'll change their mind for sure!" But they didn't, because Minnie WAS the one for them, and they the ones for her.

Saturday, March 5, 2011

The Perfect Dilbert Movie Live Action Cast

Like most people in IT or software development, two things are very close to my heart: Office Space, and Dilbert. While I think a sequel to Office Space is pretty improbable for the mid-term future, it looks like a live action Dilbert movie is in the works. I would like to submit my ideal cast for the pickings:











Dilbert: Drew Carey

If you read the strip and are familiar with the actor, this should be obvious. I'm not even going to address it.










Wally: Jason Alexander

I've seen Jason Alexander on broadway, and he is an amazing actor. Obviously most people know him from Seinfeld, or more recently from Jenny Craig commercials. Anyway, he's a spot-on match for the character's appearance, and I see no reason why he couldn't play the role of the lazy-but-brilliant engineer.










Pointy-Haired Boss: Zach Galifiankis

Probably the selection I'll get the most flak for, should anyone actually read this. Zach Galifiankis is absolutely perfect as the oblivious more-trouble-than-he's-worth boss. His acting skills are superb, and hey, he's even got the natural hair for the role.









Alice Isla Fisher

Another likely-controversial pick. Isla Fisher played "that crazy chick" in Wedding Crashers. For those not as familiar with the strip, Alice is a brilliant engineer who never gets credit she deserves, and can rage like nobody's business. I think Fisher is plenty capable of the role. And please, don't imitate the hairstyle.










Asok Dileep Rao

Dileep Rao was in two fantastic movies of 2010 recently, but due to his weight loss you might not recognize him. He played one of the main scientists in Avatar, and a central role in Inception as the "chemist". He may not perfectly fit the role of the "young intern" but I think he can nail the role of being the one guy at the office actually trying to get his work done.










Dogbert & Catbert Ken Jennings and Brad Rutter

I honestly think that instead of making the same horrible mistake as Garfield, Dogbert and Catbert need to be a near complete departure from their comic strip form. Contrary to the strip, these characters should have zero real interaction with the live actors in the movie, and be figments of Dilbert's imagination that plague him like the cliche good/bad consciences. That being said, since Dilbert is an engineer, his consciences are obviously going to be very, very intelligent. I can think of nobody more perfect to fill such a role than the two world champions of Jeopardy.

Wednesday, January 12, 2011

And another year goes by...

Holy crap, it's 2011. 2010 brought some strange new milestones to my life. In December of 2009 I sprung a surprise anniversary trip to France on my wife. She finally returned to work in March, which allowed me to start investing in stocks for the first time. I still work in the heavy oil/steam flood industry, and am still on the same project developing cheap SCADA solutions, as before. During the summer, I trained my first intern, which was considerably more difficult than I ever would have imagined. I now wear prescription glasses. Toward the end of summer, my team was given our own office building nextdoor to the main office, partially to reward us for our dedication and self-sufficiency, and partially to have us guard the new warehouse out back. In October, Lily ran her first marathon in San Francisco. As a finishing gift, I bought her a new awesome car. It's been pretty nuts.

I'm hoping that I can find the time and dedication to post more frequently this year, as my child is being developed. Maybe this blog will turn into some kind of "tech dad" site. Who knows?

Monday, May 31, 2010

Two Years Later...

As is typical of my behavior online, I haven't touched this blog in nearly two years. Shenanigans like these are probably why my personal website died off, if I had to speculate. I'll refrain from lying to you and making false promises about how I will write more frequently, etc. You don't need that.

This blog did something silly whilst I've been living my life and ignoring it. Evidently, my rant against NetSuite was used as source material against them for fraud and shitty business practices. I was actually contacted at one point to be alerted it might be used in a class-action lawsuit, although I never responded nor took the time to validate this.

The last two years of my life have been pretty good. In September of 2008, Lily and I moved into the track home we built with McMillin. I did a bunch of customizations like adding a patio, kitchen island, upgrading my counters to granite, pre-wiring surround sound and CAT-6 gigabit, and a built-in entertainment cabinet. I have some minor issues with the build quality (there's some A/C vents skewed, and I had to get some tiles re-glued in my kitchen) but overall I'm quite happy with the house. Ultimately, the maintenance is irrelevant when I remind myself that I bought a home at 23, and have never missed a payment. Ex-girlfriends and enemies of my high school days: suck it.

2009 kinda whizzed past for me, as I was pretty heavily involved in my work and wakeboarding. Through a coworker, I met this guy Alex who is an amazing wakeboarder, and also happens to be the business development manager for Topless Blonde Ale. In late 2009, Lily went to Mercy Ministries for 6 months. Without getting into the theological/ideological issues, I'd like to simply state that she seems to have grown up quite a bit in the program, and that has been a good thing for us.

While working at Ramsgate/ProGauge, I've been given tremendous room to innovate. Rather than just sticking to what I know (Java, PHP + MySQL, C#), I've been able to expand to working with ActionScript, PostgreSQL, jQuery + jQueryUI, and recently took up an interest in playing with Node.js. Since I started in 2008, I've been building an analytical tool called ProGauge Prime, which is my primary work. Sometime in 2009, Dustin and Brent joined on. As a team, we created a new piece of technology called an ICP (which we apparently do a terrible job of marketing, because I cannot find anything about it on our own site). Actually, this article on ProSoft's website does a pretty good job of depicting our integration with PXP, although it grossly overstates ProSoft's involvement (they sold 3 radios, we engineered and actively monitor the entire SCADA system).

I'm going to close this elongated status update with a piece of advice, since information about programming was pretty scarce when I was a kid. For those aspiring coders/hackers/"software engineers": do not overlook the energy or automation industries. They are in immense need of philosophical and technological modernization. Some examples: closed, proprietary protocol, closed, proprietary protocol, grossly-overpriced archaic technology, bloatware, grossly-overpriced archaic technology, grossly-overpriced behemoth software.

Saturday, August 2, 2008

Back to Linux, again.

My first adventure with Linux was installing Ubuntu 5.04 (Hoary Hedgehog) on my server in mid-2005. At the time, I was still essentially a rabid gamer, and couldn't possibly conceive of installing a non-Windows operating system on my primary computer. None of my Computer Science classes at SJSU required a Unix-based operating system, OS virtualization was in its infancy (I'd say it still is), and the WINE project hadn't gotten very far with 3D acceleration.

When I took up an interest in Linux, it wasn't to change the operating system of my desktop, but of my home server. I've long had a home server, back before they were trendy. Since about 7th grade, I've run a private website of one kind or another, and I quickly left the realm of Tripod, Angelfire, and Geocities for build my own server. The server gave me full control over my content, and comparatively limitless space to store the pictures and sound clips I wanted to include in my "web posts" (the term "blog" didn't even exist back then).

So, I downloaded a copy of this new OS "Ubuntu" and burned it to a CD. So far, so good. What happened next is something that the informed reader knows all too well. A recent XKCD comic encapsulates it nicely:

Some time later, I found myself fairly competent poking around Ubuntu, and I tended to come home from a class only to hop onto the server via VNC and start breaking things. I got bored, and started inquiring into what else I could make the system do, now that I had unprecedented control over the machine.

Digging around in my big box of computer parts, cables, USB trinkets, and dust, I discovered an old Hauppauge WinTV tuner card I had somehow obtained from one of my sister's friends when I was in high school. I threw it into the server, and started Googling (genericide for the win) Linux applications which could make use of this hardware. I quickly came across MythTV, and the next day I was the proud owner of a "FreeVo". Inevitably this led me to constructing a serial port infrared receiver, installing LIRC, and using a standard universal remote to control MythTV.

For a long time following, the server worked as a media center pc (again, before that was the name for it) and my roommates and I enjoyed free low-quality recordings of our favorite tv shows. MythTV had a lot of bugs at the time, and would frequently crash, which forced me to repair something every couple of days. Ubuntu was only in its second incarnation then, and things didn't "just work" consistently, yet.

At some point later on, I quit World of Warcraft (for the first time, hehe) and installed Ubuntu on my desktop as my primary operating system. I was fairly confident at this point that I could make the transition, but I wanted to keep Windows XP as a secondary operating system just in case. To do so, I used Partition Magic to split up my partition into two, and left Windows XP on the smaller one.

Almost immediately I started having troubles because of the transition. See, migrating a server platform to another is pretty straightforward, because you don't use the machine to open spreadsheets, play games, or visit websites. I had to install WINE and Internet Explorer, because my school's web application for viewing student records was a rotten piece of crap and truly didn't work on FireFox. I had to use my Windows partition for Excel, because OpenOffice didn't handle cell merging quite the same as PHP PEAR, which I had used for my job to build an Excel writer for cost sheets. I also had constant problems with my wireless card, because the wireless stack support in Ubuntu was practically nonexistent at the time. I had to use ndiswrapper and reference the Windows drivers for my wireless card, to keep it running.

Things eventually ironed themselves out, but within the year I took a job writing a Windows standalone application and was forced to switch back to Windows. I've been using Windows since then (late 2006) and complained occasionally. Mostly, I've been waiting for Linux to improve. And boy, has it.

With my newest job came the requirement of eventually purchasing a server to power the application. Naturally, my first choice was Ubuntu Linux, and I was more than impressed with how far the OS has come since I left it. Setting up the professional-grade server went so well, it made me reanalyze my current setup at home. See, now I work in an office, so I can do whatever the hell I want to my desktop.

Before venturing back into Linux, I checked nonstandard issues I knew I'd have to solve. I researched the new Atheros wireless stack, VMWare Server and VirtualBox, how to setup Ubuntu to network with my Apple Time Capsule, and checked to see if the various applications I occasionally use have Ubuntu equivalents. In every category I was satisfied, so I transferred all my Windows data to the Time Capsule and nuked my partition tables.

So far, Ubuntu has been running very nicely. I had no problems setting up my dual screens, ATI graphics, Compiz Fusion, and Samba networking for my Time Capsule. I did have troubles with VMWare Server (mostly due to the fact I'm running 64-bit), so I decided on VirtualBox for any Windows-related testing. Neither supports 3D acceleration, so I'm probably stuck with using WINE-compatible only games/programs, or finding a Linux alternative. OS virtualization still has a long way to go. Also, VirtualBox doesn't support OSX, which bothers me as a developer, since I'm primarily a Java programmer and want to be able to test on XP, Vista, OSX, and Linux GTK.

Every now and then I'll get a random kernel panic that drops me out of X11, but I haven't diagnosed the problem yet, because it's only happened a couple of times. Now, I do get occasional bugs like this on my MacBook Pro as well, so it's not like this is the end of the world. I understand no operating system is perfect, and there's likely a couple hundred thousand reported cases of exactly the same bug I'm having, so I figure I'll wait for one of the automatic updates to eliminate it.

The developers of Ubuntu have done a great job of keeping pace with OSX, and surpassing XP and Vista in terms of stability and gloss. Everything that is said to work simply works. I don't have to fight with a task manager to kill applications when they stall for no reason. I don't have to question why half my paging file is full, when I just booted up. I don't have to use a firewall, antivirus, or adware protection. But most importantly, I don't have to wait 196 minutes (not joking) for 30MB of files to copy to my Time Capsule.

Wednesday, October 17, 2007

Shipping Software, and The Official NetSuite Rant

Warning: this post contains some information regarding my job which may be considered "sensitive", though is not contract-violating in any nature. Recently a handful of bloggers have had their jobs taken from them simply by venting about work on their blog. In truth, the reasons they were fired typically involved citing names or exacting descriptions of their coworkers, followed by stating inappropriate things about them. Be it known that my aim in this blog is not to critique any individual, but rather the industry I work in, and a specific product with which I am dissatisfied.

Shipping Software


The shipping industry, from a software perspective, is similar to many others. Like the health and oil industries, most companies are forced to work with the corporate titans to complete their jobs. In the software case, the last step of the shipment process is to transfer some definition of an order to UPS, USPS, FedEx, DHL, or any other large-name package carrier in order to get the "widgets" (as we so lovingly call them) delivered to their destinations. The definition of an order for any particular shipping carrier may vary, but much of the data is standardized at this point in time. However, like the oil and health industries, the method of storing and manipulating this data varies wildly from company to company.

Your basic definition of an order is one which contains a unique order number, a billing address, a shipping address, and a list of items to be shipped with their respective part numbers and other relevant information. Typically there are other pieces of data made available as well, such as the billed ship cost (useful with offers of flat-rate shipping), discount rate/percentage, shipping conditions (CoD, residential indicator, additional handling, etc.) and frequently more detailed data such as the customer number and possibly payment information. This data, while superfluous to the actual process of shipping the order, is occasionally useful to companies who want to do basic accounting or use the order data for statistical purposes.

Because there is frequently more data to an order than just that which pertains to shipping, more than just a handful of companies have sprung from the internet which provide full-scale "order management" solutions. Off the top of my head, names like MonsterCommerce, OrderMotion, NetSuite, and Yahoo! Small Business come to mind. These eCommerce solutions provide varying ways of importing, storing, displaying, and retrieving the data, and some are clearly better than others, and which ones are better depends on whether your perspective is that of a purchasing consumer or a developer. But I digress, for the moment.

The difficulty of creating shipping software comes in two forms: firstly, you must be able to successfully import and export data when interacting with a particular order management
system, and secondly you must interact with the carrier with which you are trying to ship the orders. Because the shipping carriers are used by so many thousands of companies, the methods for interacting with them are very standard and well-documented. As a result, the truly difficult aspect of the job is working with the order management systems.

Most order management systems provide the ability for clients to export and import data via a standard flat-file format, such as CSV, or XML. Frequently, order management systems provide direct methods of interaction which allow the developer to force fewer steps upon the user to ship their data. Such methods tend to allow the shipping software to directly communicate with the order management system, using a protocol like WebServices or ODBC. While ODBC tends to involve direct database queries, WebServices tend to operate using SOAP, which encodes and decodes objects into well-defined XML for language independence.

The Official NetSuite Rant

While I told myself at the advent of writing this post that I would not rag on NetSuite, I've decided to change my mind. Forgive me for lashing out as such.

Some companies, such as NetSuite, take management systems to the "next level" and attempt to produce company-wide management software which allows users to manage their accounting, orders, shipping, personnel, and funds from a single location. As one might expect, these products try so hard to accomplish everything at once, that they can fail at accomplishing any one thing well. The sad truth with products like this is that multiple development teams are required to maintain and build on the project, and metaphorically speaking the left hand has no communication with the right.

NetSuite, for customers, is likely not a bad product to work with. It has many customer-friendly features such as auto-emailing, partial order fulfillment, and online tracking. But for developers, it is a horrific black hole which will consume your man-hours and finances just to keep the product functioning. NetSuite is particularly bad at breaking version compatibility and tries to provide too many features. Many of the account-wide features/preferences within NetSuite inexplicably require or are mutually-exclusive with others, and create strange permissions or rule-breaking problems when attempting to manipulate records programmatically via server-side scripts or WebServices.

NetSuite's idealistic "golden ticket" for its customers is its ability to customize any form, field, or record in just about any way the user can imagine. Custom records and fields in NetSuite are treated as first-class citizens by the browser GUI, and can be intermingled and interchanged at will with very simple-to-use AJAX controls. The NetSuite product itself is truly a marvel, both impressive both in form and style; as stated by someone who despises the product. The truth is, if NetSuite did not attempt to integrate or "play with others" in any way, I doubt there would be many complaints to hold against them.

In the past two years working my current developer contract, I have had the pleasure of working with NetSuite almost constantly. Their development team manages to break version compatibility no less than four times a year (on average) for integration partners. I've had required fields become read-only because they were "loop holes", and I've had previously-working code completely break due to the beta of the next version having an additional required field. Of the numerous NetSuite clients we have had, most have differing "versions" of the NetSuite web application, which has convinced me that each NetSuite customer has an account on either a separate machine, or with a separate database structure. As a result, code which works flawlessly for our developer account or a particular customer may fail for everyone else using NetSuite. This version instability applies to the server-side scripts as well as the WebServies API, and almost always requries several hours of updating to bring the product solution back to a working state.

I suppose my last rant against NetSuite is its speed. The NetSuite GUI itself is a hulking AJAX beast with scripts which must load each and every time a new page, form, or record is loaded. If you wish to export data to XML or CSV, the data request goes into a queue which may take up to a half hour during peak times, regardless of the size of the result set. Also, via WebServices, any simple single request may take up to 5 minutes, and the data returned usually contains references ID's to related records, instead of including the full transaction information that you may need. Searching for records can take hours, and appears to be linear in time as compared with the size of your database.

NetSuite is likely a fine solution for small- and mid-sized companies. For large-scale shippers (more than 100 transactions a day) I highly recommend against NetSuite, as I know of a handful of NetSuite clients who process several thousand orders per day, taking hours upon hours to import their data into 3rd party applications. People at these companies have been fired for choosing NetSuite as their management system after the difficulties it has inflicted upon them, and that is a fact which should be taken lightly.

Tuesday, September 25, 2007

Starting over: How and Why

I keep trying to ask myself what I could possibly be trying to accomplish by creating a blog. I've done this-- I've done blogging. Hell, I blogged before there existed a term for it. In 1997 I had a website, and I had friends who read it, and I relished in my false sense of popularity amongst those friends. I was an idiot then, just as I am now. At least now I have the wisdom to know I'll still be an idiot tomorrow, and the common sense to try not to be an idiot right now, even if it's inevitable.

So, for the first question: why Blogger? If I wished, I could create a new website for blogging, powered by my own coding, and designed to my exact specifications; however, I could not keep it secure. One day, my server's drive would fail at the same time as the backup systems, and my human fallibility would cause a loss of this data, completely negating my entire purpose for creating it. So here I am, on Blogger.

When I was a kid, scribing my banal kid-thoughts onto the blossoming internet, I didn't realize the utility of what I was doing, nor did I realize my true motivations. I blogged back then because I insisted in my own existence; I wanted to be the focal point of not only my life, but the lives of others. I envisioned a ridiculous shrine, as my best friend had joked, dedicated to me and my awesome technological prowess, and was likely no different from any other kid then or since who has kept an online journal. Now I'm blogging for a very different reason. I don't care if this is ever popular or if anybody reads its contents. I'm just here to say what I have to say, and be done with it.

I realized recently while watching a YouTube video called The Machine Is Us/ing Us that most of us who "use the internet" really don't understand what that means, or what it could mean if we were to actually put some effort into it. The internet, to most people, is just this big headless monster of endless information that's continually growing and providing them constant amusement for the small price of a couple thousand pop-ups a day and some ad banners. Smarter folk, or at least the tech savvy tend to use empowered web browsers which are capable of blocking all but the desired content (read: no advertisements) and so they see the web in a more "pure" form, but still are only witnessing it as bystanders. Some people interact with this internet. They post on forums or play online games; they might even create a blog or share photo albums online. But that's where the interactivity stops.

In short, for most people, the internet provides two functions: sharing information, and retrieving information. But it can do more: it can also store and enhance information. For instance, my motivations for creating this Blogger blog instead of a custom one lie in the fact that Google's systematic backups will secure this data indefinitely. But, in addition, it gives me a lot of functionality for enhancing my writing. Let's say I went on a waterskiing trip (on occasion I do) and I wrote about it (I probably will); at some point it would be very possible for me to not just describe some feat I performed, but literally embed the action within the content and show you just what I can do. That's enhancement of the very content itself, and it will remain forever pristine in its quality so long as the people I chose to host this content do not fail me.