Monday, June 2, 2008

RFPs are Evil

Right now, I don't respond to RFPs (Request for Proposals).  My future plans are to only respond to government or NGO RFPs, if they come close to matching my future product offerings.

A RFP (Request For Proposal) is a an invitation to potential suppliers to submit a proposal for a specific commodity or service.  RFPs can be simple or incredibly complex.  Here is a well written example of  RFP from the University of Hawaii to purchase computers.

Generating a proposal in response to an RFP is sometimes a very time consuming and laborious process, and it is often a smaller part of a more time consuming sales process.  It is common for RFPs to ask for corporate information, financial information, qualifications, description of your products or services, project stages, milestones, cost and pricing.  For web design jobs they may or may not include detailed specifications.

The most common complaint I hear about RFPs (from freelancers) goes something like, "... after putting together a brilliant proposal complete with screen shots and mock ups, we didn't get the job because we were too expensive.  But six months they rolled out their new web site -- just as we proposed right down the fonts and colors!  The stole our specification and outsourced it to India!"

I am acutely aware that many times RFPs (Request For Proposal) can be used as tools to get inexperienced web designers to write detailed specifications for free.  However, Alexander Muse (Texas Startup Blog) highlighted a recent experience with RFPs (Avoid Undue Diligence like the Plague) which not only wasted his time but may have damaged his business:

Due diligence is the verification of information given to an investor by a startup in contemplation of a potential investment. Undue diligence, the solicitation of information for competitive reasons, is perhaps the most unsavory you can commit against a startup. Not only are you wasting the company’s time, you are getting their hopes up and potentially altering their behavior toward REAL investors.

Real investors, i.e. ones that you have heard of, rarely conduct undue diligence or if they do they have someone else do it for them.  You are more likely to fall victim to the services of a competitive intelligence expert like Dan Sklaire from Systems Research Corporation in New York City.  Experts like Dan are hired guns engaged by your competitors to learn about your a) business model, b) pricing model, c) service offerings, d) your competitive advantages and e) anything else he can uncover.

Basically, Dan Sklaire will send you a big RFP and/or pretend to be a large customer.  You think you are about to score a big sale and work to In reality, he is simply trying to get as much information as possible from you to give to your competitor:

The most common way a competitive intelligence professional like Dan Sklaire begins to understand your business is through the creation of an RFP (request for proposal).  Of course if you respond to RFPs and you are not in a commodity business you deserve a little undue diligence.  One of our companies recently responded to one of Dan’s RFPs with detailed responses and specific pricing.  I saw the deal in a weekly funnel report and asked about it.  The salesperson indicated that he had NEVER met Dan, but that he ran a marketing company that was relocating to Dallas and would need a new IT solution.  I couldn’t believe we responded to his RFP, but the salesperson insisted that we were looking good.  He had a meeting with Dan in a couple of weeks and hoped to close the deal at that time.  Needless to say we didn’t get the deal.  In fact, our salesperson allowed Dan to record their conversation where we went into great detail answering questions Dan and his client had about our proposal.  When the salesperson got back to the office I asked for the name of the client and his contact and I did a little research.  It took me five minutes to figure out that we were being played.

Labels: , ,

Sunday, June 1, 2008

Choosing a Server for Colocation

IMG00045

I'm in the process of setting up and testing a 1U server that will become my corporate application/web server.  This 1U server will soon be shipped to a colocation facility next week, after I finish stress testing.

After I made the decision that colocation would be best for my business, I sat down and started to research the requirements for a web server.  I quickly found that there is a vast range of choices for 1U servers, with extreme differences in pricing.  1U servers (with desktop motherboards) can be purchased for as little as $395 new.  Used 1U servers can be had for a song on eBay, where you can simply swap the drives and away you go.  Additionally, on the more expensive side, Dell, HP, Sun, and IBM each have a mix of 1U servers at various price points and configurations. 

Only Sun has a program (that I could find) which targeted startups (See Adam Kalsey's Sun Startup Essentials Pricing).  The program is called Sun Startup Essentials, which offers startup companies discounts, training, and support.  Those I found who joined had nothing but glowing things to say about Sun, especially in the storage area.

I wanted maximum uptime, and stability, and was willing to pay a reasonable premium for it.  Because the server will be located in another city, it would take me a full day to get to the server if there was a problem.  More than likely, because of the airline schedules, it would be minimum of 2 days (but given the recent changes in the airline industry there is no guarantee that I would get there in a timely manner).     

Hardware Requirements

Below are the "must haves" that I chose when picking out which server to purchase.  

  • Intel dual core or quad core CPU.  The easiest way to be able to compare servers between vendors is to lock in on a single CPU -- dual or quad.  Ultimately, I chose the quad Xeon.  That made comparing price/features a little easier, otherwise I got into paralysis through analysis mode.  Note: While I have been more than happy with AMD products in the past, I've simply lost touch of the power/performance of their products (and I've heard some very disparaging things about their newest multi-core product), so I decided to go Intel only this time around.      
  • Hot plug disk drives.  Should a drive go bad, I want to simply be able to mail the colocation facility a new disk drive and have them swap the drives without powering the system down (or cracking open the case).
  • Hardware RAID-1.  I decided I wanted two drives, in a RAID-1 set.  More importantly, I wanted the ability to pull a drive, replace it, and see the hardware rebuild the array without powering down the server -- without any effect on the system.  That is, to state it another way: I can pull out one of the drives and the system will keep functioning without any issues.  When I place a new drive in the system, it should automatically rebuild the raid array. 
  • Automatic power on.  The server must boot automatically when power is on.  Should the power go of at a colocation facility, the server must automatically boot when power is restored, without having requiring someone to press the "power" button.
  • Remote control/virtual presence.   I want to have complete control as if I was in front of servers in the colocation facility or remote site.  IBM, DELL, and HP sell hardware that redirect the mouse, keyboard, and video over the network so you can control the box from power up, change BIOS settings, etc.,.  This is a worse case scenario to rebuild a system. 

Ship it!

After looking at the various vendors and applying back-of-the-napkin calculations to the various servers, Apple and Sun were the most expensive.  I also looked for a 1u server on eBay, but in most cases, the servers are way overpriced or simply to old (and too expensive).

In the end, I chose the HP DL 320 G5/Quad Core Xeon with a Smart Array E200, 2GB RAM, 2 x 160 hot plug drives.  After shipping the system clocked in at $1700.  This was way more than I wanted to spend, yet much less that I could have spent.  Spending the cash now will keep me from having to spend time and money later.

Quite frankly, this is more machine than I could probably use in the near future.  I rationalized the system would be "good enough" for 10 years, and would easily handle 1,000 concurrent users.  I figure if I max out this system, then it would be a good problem to have. 

Labels: , , ,

Wednesday, May 21, 2008

Travel Costs in 2008

As I write this, American Airlines has just announced that they will be reducing their 2008 flight schedule, and implementing drastic capacity reductions. Further, they have introduced a $15 fee for the first checked bag (in addition to the $25 for the second bag), given the increased cost of transporting checked baggage. 

So far this year, the other airlines have levied charges on checked luggage, increased phone and in person booking fees, increased change fees, added fuel charges, and increased ticket fares.

While most of our clients do not require travel to a client's facilities, we will continue to monitor the situation and will be modifying our travel and billing policies to clearly communicate our airline choices, preferences, and strategies to save our clients money. 

Labels: , ,

Monday, May 5, 2008

Questions about contract billing...

Howdy,

Some questions about billing in a scenario where the customer has hired the contractor for full-time work (37.5 / 40 hours per week).

If the customer requires you to use their systems (e.g. laptop, software) and you have to setup appropriate development environment, do you bill for that time?

There are some initial hiccups in the first days of contracting on the customer's premises such as getting authorization for physical / network access, licenses for software (again, the customer wants the contractor to use their systems), etc. Do you bill the customer for the idle hours (e.g. waiting for authorizations to be approved)?

Do you bill the customer if nothing can be done due to their fault (e.g. network downtime) while you're at their premises or if you leave their premises (i.e. go home)?

Say, you work the 37.7 or 40 or similar amount of hours per week on the customer's premises. How much are you billing on average?

Any other things I should be aware of?

If the client requires you to be there for 37+ hours a week, you are a contractor, not a consultant.  In essence, you are supplemental staff and will usually be required to fill out a time sheet.  

For a customer that requires me to be onsite full time, I bill for time I am at the office (available to do work).  The clock starts ticking when I arrive in the morning, and doesn't stop until I leave for the evening.  I subtract time taken for lunch and/or breaks.  On Monday, I submit a timecard for the previous week for customer signature.

This is pretty much standard across the industry.   Some recruiters have asked me to bill for lunch as well, but I don't.  I feel that is just crossing the line.  I usually put down a minimum of 30 minutes for lunch even when I scarf down a sandwich at my desk.

Meetings, reading specifications, writing documentation, coding, talking to people -- all of this is billable.  If the network is down, or you are setting up your own development environment -- it is billable. 

When I telecommute (or work small side projects), I only bill for actual time worked on post it notes.  Prep time, research, coding,  and phone time are billed in 15 minute increments.

When it is time to generate the invoices, I sweep the post it notes together and generate the invoices.  So far this system works pretty well.

Labels: , ,

Saturday, March 22, 2008

Google Analytics 101

Today, I'm concentrating on fixing some deficiencies on my web sites.  I've decided to add the new tracking script to all of my web pages (rather than just my blog).

Google Analytics is a free measurement tool that has over 80 report.  I found two solid presentation slide decks that are a fantastic introduction:

... and another one:

Labels: , , ,

Safari Books Online

Safari Books OnlineAs a consultant, I am constantly called on to reach out and expand my technical horizons and I try to keep up on the technology treadmill.  As a result, I am a voracious reader, picking up books on whatever I am interested in learning at moment.  I have boxes of books on everything from assembly language to Perl to advanced C++ stored in two states.  

Well, not any more.

Earlier this month, I purchased a corporate (tax deductible) all-you-can-eat library subscription of Safari O'Reilly Online.  For one modest per-seat subscription fee, I get searchable access to electronic copies of technical books published by O'Reilly, Addison-Wesley, Sams, Prentice Hall, Que, Cisco, Microsoft, Peachpit, John Wiley & Sons, and more. 

Although I generally shy away from leases or subscriptions, a quick check at my amazon purchases showed me that I would be better off purchasing a subscription (Amazon Prime is $79 per year alone).  And I'm glad I did.  It has turned out to be one of the most useful purchases I have made this year.  

As an added benefit, I will no longer have to deal with the added headache of generating expense reports because I used a personal credit card to purchase a technical book, or the reconciling the transactions on a credit statement, or figuring out where to put the book when I am done with it.

For example, this month a client handed down an edict that all script development (build scripts, testing scripts, etc.,) must be in Python because of cross platform compatibility issues.  No problem, except I needed to write a test application that would query a remote web service, parse XML, and test for expected and exceptional data.  Normally, I would have coded up a quick and dirty application that leveraged C/C++ and libcurl, or Perl. 

However, the client wanted to be able to run the test code under windows and Linux without compiling various libraries -- only Python.  As a result, I need to quickly learn just enough Python to be dangerous.  Within minutes I was reading through various Python books and was able to quickly cobble together a simple application to do what I needed.  

Further, I was able to search into Python Cookbook by Alex Martelli, and cut and paste a simple yet elegant script that would search and replace text in a file making a simple application that would generate classes, XML files from template files.

Within the scope of a few hours I had wrapped up the task.   

Free would have been better

Some libraries (such as San Francisco Library) offer Safari Online access for free.  Most of these offer a web interface (library card required) that you can connect to via the Internet.  Unfortunately, I don't reside in an area that has a library with a subscription. 

Labels:

Sunday, March 16, 2008

Changing Registered Agents

When you form a corporation (or qualify a corporation to do business within a state), you are often required to have a registered agent in that state. 

While the laws vary from state to state, a registered agent is basically someone who provides a legal address within the state during normal business hours to facilitate legal service of process in the event of legal action or lawsuit.  In reality, they will charge you an excessive amount of money to simply forward a tax notice once or twice a year. 

Quite frankly, these incorporation/registered agent services really don't add much value.  Mostly, they charge for services you would otherwise get for free.  Furthermore, contrary to what they would have you believe, you can act as your own registered agent (provided you reside in the jurisdiction). 

When I originally incorporated my corporation, in Delaware, I used the services of the Company Corporation.  In hindsight, I could have registered online directly with the state of Delaware and saved a pile of money.  At the time I submitted my order to incorporate with them, I was to receive one year of registered free agent service.   

However, six months after incorporation, I received a bill from the Company Corporation for a whopping $215 to act as my statutory representation in Delaware.  After double checking my incorporation date, I fired off an email to the Company Corporation and received the following e-mail in response: 

Mr. Turner,
That is correct.  We do bill four months in advance to give you ample time to make changes if need be.   We actually send out a series of ten invoices, it is not technically due until May.  Sorry for the confusion.
Have a great day.

This week, I received another invoice prefaced with an important day-glow yellow "Payment Reminder," attached to an invoice which stated I was now 1-30 DAYS past due in forking over $215 (even though my service is free until May).  

Had their rates been competitive, I would have simply paid the invoice.  However, as you will see below, they are significantly more expensive than anyone else in the industry (that I could find), and as a matter of principle I won't allow myself to get ambushed that badly.

Shopping for a Registered Agent

The process of changing your registered agent is extremely simple: you pay a fee to the government and submit a simple form.  Not surprisingly, most of the registered agents online will do everything for you and some will even pay for the fee themselves.

Below is a quick list of statutory representation that I was able to find online, with their rates.  If a firm had a "fill in this form and we will call you back" quote sheet, I moved on.  Those types of businesses tend to be brokers who are reselling the services of other statutory agents.  It is best to simply ignore them.

 

Registered Agent Fee
Harvard Business Services $50/year ($125 first year, which covers transfer fee).
BizFilings $129/year (including first year fees).
Company Corporation $215/year
InCorp $99/year
incnow.com $90/year ($194.00 first year)
MyCorporation $159/year

 

The question I have to ask myself is-- given that all registered agents provide exactly the same service, why is there such a wide discrepancy in the pricing ($50-$320)?  Some of the registered agents try to distinguish themselves by providing "compliance" solutions, which are basically a passive web site with a calendar.  They are essentially totally worthless -- you are better off researching the dates and adding them to your outlook/Google calendar.  

Labels: ,

Monday, February 11, 2008

Temporary

Very often I can read here the opinion about assigning boring/low-level tasks to contractors (most recent example here: http://discuss.joelonsoftware.com/default.asp?joel.3.592674.8 ). To me - in Germany - the opposite is true in all the years I'm doing this kind of job. I'm most of the time hired for my particular/general experience. Up to the point, that Employees are a bit envious at times. Seems to be reasonable too, considering the amount of money put into me / the consulting companies. And a waste of money otherwise.

So, is this a general characteristic of US contracting?

It depends, and varies from company to company, contract to contract. Most contracts tend to be of the staff augmentation type -- temporary help to get a product out the door, unless you have a specialized skill set.

Personally, I really don't care-- It's a job.

When one manager asked me what I wanted to do, I simply told her that I would do anything she wanted so long as she signed my time sheets and paid me. Of course, I had to add, "...except anything that is illegal or Java... but I'm flexible on the illegal part provided we renegotiate my rates."

To me, a contract is just a temporary job, and I'm basically a technical prostitute. I'll do whatever you want with a smile; there will be plenty of time later to cry myself to sleep, and repress those memories (I can't believe I fixed that JSP code, I feel so dirty...).

Whenever I run into a difficult personality or situation, I just try to think about what I could be doing in a few months-- sitting on a beach. After all, it is just a temporary job. Get back to work, and finish one more document, debug the horrible XML code, because tomorrow will be a better day.

And it will. One thing I have learned is that managers, no matter how preferential they want to be to their own employees will ultimately start doling out the hardest work to the developers who are the most productive, and they will generally fight to keep them.

My original six month contract has been extended again, and the client wants to keep me until the end of the year, that will be a total sum of two years... as I look at the snow falling outside in arctic Minnesota winter... I think about someplace tropical.

Labels:

Sunday, January 27, 2008

Coworkers Behaving Badly

Each morning, when I get ready for work, I try to put on my "game face."  When I step in to a client's office, I am as professional as I can be.  When I'm there, everyone is delightfully witty, interesting, and their children's pictures are attractive, and I'm super productive.  After all, I'm a consultant, and it's just a temporary job -- I can handle anything with a smile.

Well, today, I was having a bad day.  A coworker's behavior is irritating me, and hurting my productivity in a major way.  I was time to go get a new pair of headphones.

I'd thought I would recap some of things that I have seen my coworkers do during my career, which made me laugh, cringe, or just plain annoyed me:

  • A coworker who wrote on a whiteboard in permanent marker. 
  • Cubicle-mate that was a heavy mouth breather, where each breath would be punctuated by a slight snore.  Frequently, he would emit gurgling burps.  He also brought in his telephone headset, and he would call his wife at least twice times a day and have rambling conversations about what he was doing. 
  • An older gentleman that would take his shirt off when he was hot and "getting sweaty."  (They turned the air conditioning off after hours).  He was an and not particularly fit.  [...It really bothered the impish 20-something female software engineer who had to sit next to him, especially when he started to tell her about his sexual conquests].
  • Anyone who lies.
  • Coworkers who had a very strong body odor. 
  • A technical lead that would be nice to people to their face, but when they were walking away they would start saying bad things about them. 
  • A cubicle-mate that would blow his nose constantly, even when he was eating.  He would also pick his nose.  Out of the corner of my eye, I swear I saw him eat one.
  • A cubicle-mate who clipped his fingernails at his desk.
  • A cubicle-mate who's dog died.  He actually cried and had tearful phone conversations about his dog to friends and family.  The mourning and depression lasted almost a month.  He still has a picture of his dog as his windows background and a framed picture as a reminder to this day.
  • A consultant who came into work on a Saturday, dialed the phone, and started crying and sniveling about his soon to be ex-wife.  As the sorted details of his personal life spilled over the cubicle wall, I felt like I was watching a human train wreck unfold in slow motion before me.  After an hour on the phone, he left (I don't think he knew I was working several cubicles away).  Its awkward for me to look at him in the face after that. 
  • A consultant that outsourced his own job to China.  He had difficulty in finishing the assignments, and even more difficulty in explaining why he coded the way he did.  It was discovered that he was sending and receiving source code and company specifications over unencrypted e-mail to his cohorts in China. 
  • A consultant who had a federal firearms dealer permit.  One day he ordered a book and 10,000 rounds of ammunition, which was delivered to work.  He swore it was just a mistake, the ammunition was supposed to be delivered to his home... he was fired on the spot (and walked out accompanied by no less than three security guards).
  • At one company, it was detected that someone was surfing the net work porn at night.  They placed a security camera to catch the culprit-- they caught a lot more than they wanted.  The employee not only viewed the pornography on his office computer, but started to pleasure himself.  When they fired him, he started to angrily protest until they slapped the VHS movie on the table.  He left without saying a word.
  • A coworker in the next cubicle that loudly spent over five hours on the phone talking in a breezy foreign language.  The rest of the time he surfed the Internet, except at 4:30 p.m. he would ask some permanent employees questions, but they were only interested in going home at 5:00.   When asked why his productivity was so low, he'd shrug and say that the American programmers weren't cooperating or sharing information.
  • A consultant that spent most of his time on the phone speaking rapid-fire Vietnamese.  Half the time he didn't show up.  One day the manager came looking for him, and grew agitated when he was informed he hadn't been there for several days.  Worse yet, one of the other Vietnamese coders told everyone why he was one the phone -- he was selling Amway.  

Leave a comment with your stories.  I'm sure you have some ;)

Labels: ,

Sunday, January 13, 2008

Looking Back and Looking Forward

In 2007, I decided to start a uISV/Consultancy.  My goal was (and still is) very simple: generate income from contracting/consulting which will be used to sustain my uISV development efforts.

I would work on the day for clients, and at night I would frantically pound out code.  Six months have gone by.  How well have I done?

Looking Back

Last year (2007):

  • I formed a corporation (Agave Mountain, Inc) in the State of Delaware.  While I believe that most uISVs and consultancies are formed as sole-proprietorships and LLC's, I wanted a corporation and was prepared for the additional headaches (annual franchise tax return in DE, plus a corporate tax return). 
  • I also registered my corporation as a foreign corporation in the state of Minnesota (where I am now).  Your corporation can only be incorporated in one state, and it must qualify to do business (register) in each state it has operations. 
  • I did the above primarily for the following reasons:
    • Most accountants will recommend that you incorporate in the state where you reside.  This is essentially the best advice.  However, I have moved frequently in the past several years for contracting, and within the past several years I have up and moved to/from Texas, Connecticut, Georgia, and most recently Minnesota. 
    • I decided it was easier for me to keep a corporation in Delaware, and just register to do business in a state and withdraw it if I no longer do business there.
    • If I don't do any business I can "put the corporation on the shelf."  I pay the annual franchise tax ($56) per year in DE and the corporation gets older.  A corporation's age is factored into credit decisions.  Additionally, I will be able to jump on business opportunities in the future much quicker and with less  hassle.
  • $24,500+ in trade lines.  Most surprisingly, I now have an Office Max net-30 credit account, and 3 major credit cards, entirely in my corporation's name.  Go figure.
  • My corporation has signed up its first major client.
  • Established a website and blog (this one).
  • I have very little workable code written, only prototypes and unit test code.  I have some simple specs.
  • I've investigated several web frameworks, toolkits, etc., and here is a summary:
    • I eliminated the following platforms/toolkits:
      • Ruby on Rails might have a following, but it has some serious design/installation issues (no shared hosting) and other issues pointed out by Zed's public meltdown.
      • Java is out because I simply don't like it, and never took the time to learn anything more than a cursory look.  If I decide to part out some of the work, Java guys are among the most expensive.
      • Python has some installation issues for a saleable product.  
    • That leaves:
      • ASP.NET/C#/.NET
      • PHP
      • C/C++/FastCGI/WT/Qt
      • a mishmash of Perl, C, PHP, etc.

Goals for 2008

This year:

  • By the end of the year I want to have my product concept designed, constructed, tested, and deployed.  January 1, 2009, I want to be actively selling the product and generating revenue. 
  • My main client will take preference, but every other waking hour is going to be focused on getting a product up and out the door.  Ambitious, but possible.

Labels: , , ,

Tuesday, December 18, 2007

Gentoo/Git

I'm investigating moving my source repository to git. In doing so, I quickly ran into a stumbling block. After emerging git, I started receiving a cryptic error message involving "Core.pm." Same happened when I installed git on an older red hat install.

To fix: re-emerge subversion, after setting your USE flag to include Perl. The Core.pm files are apart of the subversion package. Next everything should be ok.

For other platforms, you will have to recompile/reinstall subversion configured with Perl support.

Next, to import a subversion repository remotely:

$ mkdir myproj
$ cd myproj
$ git svn init http://mysvn/repos/directory
$ git svn fetch

But be advised crunching down and absorbing a subversion repository remotely takes a very long time.

Mangled by ScribeFire.

Labels: ,

Sunday, November 25, 2007

Calculating Equivalent Corp-2-Corp / 1099 / W2 Rate

"I make $x per hour.  How much should I charge for freelancing on a 1099 or corp-to-corp basis?"

This is a common question that I see repeated over and over on various message boards.  Answers will often range from a pithy 2 or 3 times your current rate, to "figure it out yourself."  Additionally, you will get rambling replies about penalties, taxes, health care costs, and much more.  

Assuming that you are currently in (or considering) a consulting/hourly relationship with NO BENIFITS, lets run some rudimentary calculations so you know the MINIMUM hourly rate that is equivalent in corp-to-corp terms.  

Note: this assumes no vacation, EIC, no medical insurance, no retirement (and we don't factor in general liability insurance, per diem, or the credit risk of getting paid); we just calculate what rate will be necessary to cover the bare metal additional employer taxes. 

So lets get out a pencil and start scratching numbers, so we can figure out how much it costs to hire an employee at $x per hour.

Federal Unemployment Tax (FUTA)

Even though you are no longer qualified to take unemployment as a small business owner, you will be required to pay Federal and state Unemployment Taxes.  Generally, the FUTA tax ends up being 0.8% of the first $7,000 per year of each employee’s wages or salary. That means the employer’s maximum cost for FUTA per year per employee is $56 ($7,000 x 0.008).

State Unemployment Tax (SUI)

Next lookup your state's unemployment tax rate.  Since you are starting out, you will need to find the "new employer rate."  In Minnesota it is 2.13%.

Social Security

As of 2007, the employer must withhold 6.2% of an employee's wages and pay a matching amount in social security taxes until the employee reaches the wage base for the year. The total is 12.4% for the employee and the employer. The wage base for social security tax in 2007 is $97,500 (only the first $97,500 is taxed at 12.4%).

Medicare

As of 2007, the employer must withhold 1.45% of an employee's wages and pay a matching amount for Medicare tax. The total is 2.9% for the employee and the employer. Unlike the Social security tax, there is no maximum wage base for the Medicare portion of the FICA tax. Both the employer and the employee continue to incur and pay Medicare tax on each additional amount of gross compensation, with no limit on the amount of gross compensation on which the tax is imposed.

State/Local Income Taxes

Next, you will need to know what the income tax rate is.  In Minnesota, there are three state income tax brackets (Married filing jointly):

  More than But not more than
5.35% $0 $31,860
7.05% $31,860 $126,580
7.85% $126,580  

Putting it All Together

Now, for convenience we just add the numbers together and ignore the base limits:

FUTA 0.8%
SUI 2.13%
Social Security 6.2%
Medicare 1.45%
State Income Tax 7.05%
Total: 11.64%

Next, take your rate and multiply it by 11.64%:

absolute minimum break even = x + (x * .1164)

This rate is the absolute minimum equivalent rate (your costs will likely be hirer than this because you will most likely be required to have general liability and workers comp insurance).  The real cost will be more than this. 

This is just a quick calculation that can serve as a "line in the sand."  

Labels: , ,

Thursday, October 25, 2007

GNU Internationalization Presentation

Earlier this year I did a brief presentation to a group of C++ developers about internationalization, localization, and the GNU gettext utilities.

Tonight, I uploaded the slide deck to slideshare.  Enjoy.

Labels: , ,

Monday, September 17, 2007

C++: Pragmatically Generating a Back Trace/Stack Dump

When you work on a very large embedded project with multiple developers on different continents, all dumping code into a project, it becomes very difficult to figure out what is broken and more importantly, who is the best person to go fix it. One way is to generate core dumps and then use gdb and the bt command to print the back trace, but core files can become large and not everyone knows how to analyze a back trace. So invariably, one or two developers end up being called in on every problem where they guestimate where it may be, and assign the bug. Arguments ensue and time is wasted. It can turn into a tremendous waste of time. If things get bad enough, I will add C++ code that will generate a back trace (sometimes referred to as a stack trace) in a human readable format. With that I can quickly say which part of the application broke, and go find the owner to assign the bug to. If you are using Linux/gcc/glibc you can generate a back trace with the backtrace() and backtrace_symbols() function calls. Below is an example:


#include <stdio.h>
#include <execinfo.h>

void backtrace(void)
{
void *addresses[10];
char **strings;

int size = backtrace(addresses, 10);
strings = backtrace_symbols(addresses, size);
printf("Stack frames: %d\n", size);
for(int i = 0; i < size; i++)
{
printf("%d: %X\n", i, (int)addresses[i]);
printf("%s\n", strings[i]);
}
free(strings);
}

Labels: ,

Sunday, September 16, 2007

Paperless Office - Scan Forward

The easiest way to begin a paperless office is to implement a "scan forward" approach.  The idea is simple: purchase a scanner, and then pick a cut-off date, after which all new documents will be electronic.

The benefit to this approach is that you only scan existing paper records if they're used.  If documents don't get scanned after a year they can be archived or destroyed.

Choosing a Scanner

For obvious reasons, the scanner is the most important component to a paperless office setup.  Look for a scanner with the following options:

  • ADF - Automatic Document Feeder/Automatic Sheet Feeding.  Using a flat bed scanner is tedious since you will have to manually swap out the paper. 
  • Duplex - In addition, you want a scanner with duplex -- the ability to read both sides of documents.  Some software packages are smart enough to merge two one sided scans into a single pdf file, but it is way more convenient if your scanner does this automatically.

I can't tell you how nice it is to load up the scanner with a 25 page, double-sided document and walk away.

I could only find two scanners with these features in my budget: the HP N6010 ScanJet (poorly rated on Amazon) and the Fujitsu S500M.

I ended up purchasing the Fujitsu S500M ScanSnap.  It is a duplex, color scanner capable of 18 pages per minute.  So far it works wonderfully, even with credit card receipts. 

Choosing Shredder

I wouldn't waste too much time dickering about which kind of shredder is best.  The following features are pretty much a necessity for me:

  • "Confetti" cut.  Smaller pieces are better.  
  • The ability to shred credit cards and CDs, and eat staples.  If you can shred a credit card, a few sheets of paper won't bother it.

Also, unless you want to shred as you go, I suggest staged shredding.  I have a plastic file box that I dump papers to be shredded.  When it gets full or enough time goes by, I shred them at one sitting.

How to Begin

Next, start to define and create your own process for dealing with paper.  I would suggest something similar to what I do.

I now open my mail next to a 50 gallon trash can.  I try to throw away as much as possible.  Envelopes, catalogs, flyers, brochures and advertisements are immediately and automatically thrown away.  The application part of the credit card solicitations are separated to be shredded.  Roughly 90% of my mail now ends up immediately in the trash or shredded.

Next take the remaining paper and decide what to do, and then take action.  I view each piece of paper on my desk is something I haven't done yet.  When it is done, it is in the trash or shredded.

  1. Scan an pay bills and invoices (I usually scribble the date and check # before scanning);   
  2. Bank statements and credit card statements should be scanned and reconciled immediately.
  3. For magazines, I will take some time to read them, or set them aside.  I started putting a purge date on the front with permanent marker.  If I don't read them within two weeks they are gone. 

Also, for reciepts:

  • The IRS says you don't need receipts for purchases under $75.  B.S.  Scan them in and save them.  One day you may (possibly) thank me. 
  • Every business purchase receipt is scanned in and organized after I purchase.
  • Other receipts, grocery, gas, restaurant, credit card receipts are thrown away unless it is a major purchase or a reimbursable expense.

Labels: , , , ,

Friday, September 14, 2007

Installation of Xilinx ISE/EDK for Redhat 4.0

Prerequisites

 

You will need to build the USB drivers for the Xilinx Platform Cable USB device, hence, you must have the kernel headers/sources for your system available.

 

Note: Red Hat 4 does not come with a kernel sources rpm.  You can install the kernel headers with the kernel-devel-2.6.9-34.EL rpm.

 

Install ISE

 

Mount up the CD and run the installer to install ISE.

 

# mount /dev/cdrom /mnt/cdrom

# cd /mntrom

# ./setup

 

Select /opt/xilinx for the destination directory.

 

If you don't work with Red Hat Enterprise 3.0, Kernel 2.4, you better deselect Platform Cable USB Driver and Parallel Cable Drivers.

 

Install EDK

 

# mount /dev/cdrom /mnt/cddrom

# cd /mnt/cdrom

# ./setup

 

Select /opt/edk for the destination directory.

 

Apply ISE patch

 

# unzip 8_1_03i_lin.zip

# ./setup

 

Apply EDK patch

 

# unzip EDK_8_1_02i_lin.zip

# ./setup

 

Apply Final ISE patch

 

# cp ise_81i_ip_update1.zip /opt/Xilinx

# cd /opt/Xilinx

# unzip ise_81i_ip_update.zip

 

Create Script/Setup Files

 

Next, we need to create a script or two.  Don’t forget to chmod +x these scripts.

 

start_ise.sh

 

Creat a start_ise.sh script.    This script will initialize the variables and create a personal .xilinx directory for you.

 

#!/bin/bash
XILINX_DIR=/opt/xilinx
XILINX_USER_DIR=~/.xilinx

if [ ! -d ${XILINX_USER_DIR} ]; then
mkdir ${XILINX_USER_DIR}
fi
cd ${XILINX_USER_DIR}

. ${XILINX_DIR}/settings.sh

${XILINX_DIR}/bin/lin/ise

 

start_edk.sh

 

Create a start_edk.sh script.  This script will initialize the variables and create a personal .xilinx directory for you.

 

#!/bin/bash

# start_edk.sh

#


XILINX_DIR=/opt/xilinx
EDK_DIR=/opt/edk
XILINX_USER_DIR=~/.xilinx

if [ ! -d ${XILINX_USER_DIR} ]; then
mkdir ${XILINX_USER_DIR}
fi
cd ${XILINX_USER_DIR}

. ${XILINX_DIR}/settings.sh
. ${EDK_DIR}/setup.sh

${EDK_DIR}/bin/lin/xps

 

setup.sh

 

Create a file in /opt/edk named setup.sh and place the following text in it:

 

          # /opt/edk/setup.sh

export XILINX_EDK=/opt/edk
export LD_LIBRARY_PATH=${XILINX_EDK}/bin/lin:${LD_LIBRARY_PATH}
export PATH=${XILINX_EDK}/bin/lin:${XILINX_EDK}/gnu/microblaze/lin/bin:\
${XILINX_EDK}/gnu/powerpc-eabi/lin/bin:${PATH}

 

 

Install WinDriver and Xilinx driver

 

Download the WinDriver package from Xilinx:

 

ftp://ftp.xilinx.com/pub/utilities/M1_workstation/linuxdrivers.2.6.tar.gz

 

Fedora 6 Note:  You will have to create a /usr/src/linux link to your kernel source.  In my case it was:

 

# ln –s /usr/src/linux /usr/src/kernels/2.6.18-1.2798.fc6-i586


# tar zxvf linuxdrivers.2.6.tar.gz
# cd linuxdrivers.2.6
# cd windrvr
# ./configure
# make
# make install
# dmesg

If you see the following line, then you have installed the driver correctly:

 

[...]
WinDriver v7.00 Jungo (c) 1997 - 2005 Build Date: Apr 26 2005 X86 loaded

 

To load the driver:

 

# modprobe windrvr6

 

Next, build the xpc4drvr driver:

 

# cd ..

# cd xpc4drvr

# ./configure

# make

# make install

 

You will receive the following error:

 

Loading /lib/modules/2.6.16/kernel/drivers/misc/xpc4drvr.ko
ERROR: Module xpc4drvr does not exist in /proc/modules

 

# depmod


Register the drivers with USB hotplug system

 

# cd path_to_ise_installation/bin/lin/
# touch /etc/hotplug/usb.usermap
# sh setup_pcusb

 

Troubleshooting

 

If you are having problems connecting and downloading, follow the next steps:


1. Login with root permission and open a terminal.
2. Verify that the "windrvr6" module is loaded and running.

cat /proc/modules

If it is installed, the "windrvr6" module will appear in the generated list. If the module is not loaded, refer to (Xilinx Answer 22648) for instructions on how to install and load the module.

3. Change the current directory to "<InstallDir>/bin/lin", where "<InstallDir>" is the location of the previously installed Xilinx design tools:

cd <InstallDir>/bin/lin

4. Download the "xusbdfwu.hex" firmware file from the following link to this directory:
ftp://ftp.xilinx.com/pub/utilities/fpga/xusbdfwu-1025.zip
5. Disconnect the USB cable from the PC.
6. Enter the following command to run the installation script:

source ./setup_pcusb

7. Reconnect the USB cable.

 

Finished

 

Reboot.  All of the software is installed and configured.  

 

# ~/start_driver.sh

# ~/start_edk

 

The Xilinx JTAG box should now have an amber light on (or green if the board is attached and powered).

Labels: , ,

Thursday, September 13, 2007

MontaVista Vision 2007 DevCon

MontaVista is the first and largest vendors of embedded linux development tools.  They have created a devcon, named "Vision 2007."  I decided to go and check it out. 
 
Touted speakers and events include:
  • Andrew Morton, lead maintainer of the Linux kernel, on "The relationship between kernel.org development and the use of Linux for embedded applications"
  • Christopher Hallinan, author of Embedded Linux Primer, the number one-selling book on embedded Linux, on "Debugging embedded Linux: tools and strategies"
  • Jonathan Corbet, editor of LWN.net, on "The state of the kernel"
  • Dirk Hondel, CTO of Intel's Open Source Technology Center, on "Developing in open source for embedded devices"
  • Joe Rigazio, Texas Instruments general manager of DSP catalog and EEE digital signal processors, on "Driving the future of digital video"
  • Open source licensing authority Jason Wacha on "Open Source licensing review"
  • Mobilinux expert Kevin Hillman on "Dynamic power management for mobile devices"
  • A dinner performance by technical comedian Don McMillan
  • A multiplayer interactive gaming tournament powered by six Sun Ultra 20 workstations
  • A display of the 250-horsepower Intel Chopper, built by Intel and Orange County Choppers to showcase Intel embedded technology. Features "a digital dashboard, GPS navigation, wireless connectivity, fingerprint recognition for security, and digital cameras that replace rear-view mirrors," MontaVista says
Details and registration forms can be found here.
 

Labels: , ,

Thursday, August 23, 2007

Ah the enchanting life of a consultant.

Today, I find myself at a client site. I am sandwiched in between a contractor from one of the "big five" Indian outsourcing firms, and relatively quiet, yet efficient Chinese-born electrical engineer from Canada. The EE on my right is quiet, professional, and works relentlessly. The contractor in the cubicle to my left spends an excessively severe amount of his day on the phone talking in a breezy Indian dialect to his coworkers. When he has no one to talk to, he hums. But most of the time, he has no problem finding anyone to talk to. He will talk just about anything. Recent topics include: Progressive car insurance, transferring his H1B visa to another company, car maintenance, buying and selling cars, and interviewing for .NET positions, DVD players, laptop components, and shopping. My brain focuses on the foreign language trying to make sense out of the garbled chatter. Even when I try to actively tune it out, my brain will process the sounds until an English word pops up in the conversation, like “.NET” and my brain will fire an event telling my consciousness to pay attention. It is extremely annoying and at the same time fascinating. I personally find his behavior fascinating. I abhor long meetings or phone calls. I sometimes turn off my phone just so I can concentrate without distractions. Yet, Mr. X. has no problem talking on a phone for well over an hour. I’m not kidding. Well over an hour. Additionally, there is a set of steel double doors are behind me, which lead out to a smoking area and the other building. As a result, I continuously hear scuffing feet hurrying for a meeting or nicotine fix. The steel doors close with loud kerthunk. Kerthunk. All of this takes place within a universe of about five feet. The enchanting life of a consultant.

Powered by ScribeFire.

Labels: