Overview

Software & SaaS - The software & services we use for business and manufacturing


Adafruit is a high-tech company, run by fairly young people. All of us working here have spend our lives with computers, technology and the Internet. So its not surprising that software and software-as-services (SaaS) are an essential part of running Adafruit. We're constantly on the lookout for useful new tools that can help Adafruit run effeciently, and cleanly.

We'll be showcasing some of our favorite softwares in this section. Of course you should contact us if you have any suggestions for great new products we havent seen.

Faxing Services

All the frustration, but without the toner smell


I wanted to start with the most onerous of all business tasks….sending and receiving faxes.

Whether you like it or not, you will be forced to send and receive faxes all the time. You will probably want to respond thusly:
(comic from Achewood which is damn funny so go read it a'ight? )

But sadly you are fighting a force of millions of middle-managers. Should you buy a fax machine and a land line? Probably not. Instead, we suggest using a faxing service!

e-Faxing


Faxing services are some of the oldest companies on the Internet (we remember seeing ads for them on usenet before the www existed). The idea is a company somewhere with a huge PBX handles all the receving and sending. All you have to do is give your newly assigned fax number to customers and whatever they send will be automatically scanned, turned into a PDF/image and emailed to you. Likewise, to send a fax just email a PDF or set of images to a special email address (it has to come from you) and it will be faxed.

Not all services are the same. Some things we suggest watching for:
  • You shouldn't be spending more than $25/mo unless you send tons of faxes.
  • Avoid ones that require special viewers.
  • Some are web based. Some email based. Up to you!
  • Some use images, some PDFs. The nice thing about images is that it's trivial to 'copy and paste' a signature when a document needs signing.
So what did we end up with?
We tried eFax and didn't like it because of the cranky viewer.
Next we tried myFax which has an email interface and so far we like it.
If we were going to start from 'scratch' we'd probably also check out hellofax which allows you to edit faxes within a web-browser.

Payroll Software

Bringin' home the cyber-bacon

If you've got employees, you've gotta pay them! And if you've ever researched how one pays employees in the USA you'll know its an insane paperwork nightmare. Usually companies hire a person (HR) or company (ADP/Paychex) just to do payroll! We wanted to hire people but keep the system simple and managable. After much research we decided to go with Paycycle (it was a close race between Paycycle and Sure Payroll, they're both very good!)
Usually, companies go with a payroll provider such as ADP. They're massive companies that handle everything for you, but it comes at a price. You'll often end up paying for "extras" such as direct deposit, or printing and mailing a W2. For example, say you have 10 employees, you'll pay about $100/mo for the service and then $50 at the end of the year for sending W2s. They're also set up best for companies that are not tech savvy. For example, they actually call you on the phone (!) to get the payroll information every other week. For large companies it may make sense to go with a service, but for a small business its a bit of overhead.

It used to be that when you did payroll, you would have to pay the withheld taxes of your employees on a schedule and that schedule was very very strict. So you'd end up with people driving to the bank to file the tax payments every friday. Luckily, in the last decade or so, governments have modernized so that state and federal taxes can be paid electronically (EFT) and its very simple to do so.
Since we signed up for Paycycle, it was acquired by Intuit which kinda sucks because now its just another way for Intuit to try to sell you extra services. Surepayroll was also recently acquired by Paychex so yeah, probably the same there. Still, the online services are better and cheaper than ADP.

One of the things that make it cheaper for you to use an online service is
  • No human involved other than you.
  • You are responsible for electronic tax payments on the deadlines. Not a big deal if you can click a button when the email reminds you to but if this is not something you're good at, the fines can add up on late tax payments!
  • You have to remember to send/give out W2s. It's again not hard, but you'll need to remember to do it.

Things to look for!


There may be a few things to keep in mind when getting an (online) payroll service:
  • Does it take care of federal tax calculations for you? It's very likely.
  • Does it take care of state tax calculations for you? Check! for NYS there are approxmately 230,948,723 local taxes you have to pay!
  • Does it do direct deposit for free? Writing checks sucks and is error prone. Everyone likes DD because you get the money much faster.
  • Does it export nicely into your accounting software? Paycycle does the liability splits on each paycheck, a godsend at the end of the year when its time to zero our liabilities.
  • Can you enter payroll data online? Stuff like reimbursements, overtime, bonuses are also good.
  • Does it send you nice email reminders? We use inboxes as todo lists so this is nice.
Crunch numbers to make sure that you're not spending too much. With paycycle we're paying about $50/mo for 10 people, and thats it. Everything else is free and payroll takes only 15 minutes every other week with no issues. Since we signed up over 3 years ago, offerings have probably changed so do research to determine what is available!

Paypal Payments

A light introduction to using Paypal as a payment processor

If you want to sell stuff, you'll want to get paid! If you have a retail shop you can always accept good old cash but online, you'll need to figure out a way to accept funds. You'd think this would be really simple but there's a few of things to watch out for.

Simplest: "Buy Now" Buttons


For ultra-beginners (selling your first item) we suggest going with paypal as a payment service. Its very simple and you can use Paypal Buttons (now called Website Payments Standard). For every item you have, assign a name and price. That is encoded into a clickable button (they have a tool to do it for you) that you place next to the item for sale. When the user clicks the button it adds it to their 'cart.'
Then the paypal site takes care of the cart and such but there's no inventory handling so you need to watch out how many items you have and deal with backorders manually. It's very basic but is instant to set up, you just need to have a paypal account, no application and people can use any kind of credit card.

Advanced: API Integration


Once you have your paypal buttons working out, you may decide you want to upgrade to a shopping e-cart. Carts can handle inventory, variable pricing and shipping, etc. Then you can integrate the paypal API with the cart. We wont discuss this in detail because every cart worth using has paypal already integrated. When the user is ready to check out, they are sent to paypal to finish the log in. This way they have the security of not typing in their credit card information into an unknown store.

Fees


Paypal makes money by taking a piece of the total cost of the transaction (items plus shipping) as a fee. These fees vary from how much you process per month.
WARNING the $3,000+ fee rates need to be applied for, it's NOT automatic!

(I totally got fooled by this. I was selling over $3,000 a month of goods but didn't realize I had to ask for a better rate to get it!)
You'll also have to pay an extra 1% for international payments.
Overall, expect to pay about 4% overhead just to use paypal. This is pretty much competitive with most starter merchant accounts so its not like its a total ripoff.

Auto-sweep


A handy trick that we discovered is that you have have paypal "auto-sweep" all your funds in the paypal account into you bank account daily. This is great because you will always have cash at your disposal instead of having to remember to transfer when you need $. You can sweep into a high interest savings account or money market account and, get a little interest on the money since its sitting around anyways!

Click here after logging in to get to the auto-sweep page. We had to call up paypal to have them activate it (and you need a business account with them) but that was many years ago, and it may not require hand-activation. If you do have to call up to activate it be persistant, the first few people we spoke to had no idea what we were talking about!

QuickBooks

In general, we try to use open source tools as much as possible but one software that we think is worth the investment is a copy of Quickbooks Pro. QB is kind of this terrible, awful, essential software that everyone uses. There's things it's really good at and things that are horrible. Just be aware of the horrible and you should be OK. At first we used Quicken and that was really terrible so we wouldn't suggest going with that (it's not really meant for businesses anyways).

Pricing and versions


One annoyance about QB is that there's a new version every year and they try to get you to upgrade. Unless you're a massive company, stay away from anything but the lowest cost Pro version. Also, as long as you don't use them for your payroll (we suggest using a separate product such as Paycycle or similar), you should be OK using the same version for a few years.
Eventually they do 'sunset' out old versions but you can run it for at least 5 years (we had a 2005 copy until 2010). You can buy an old version for half the price and it'll be just fine.

There is an online version, I can't imagine it's any good and most people who've tried it said it wasn't great. Stick to the desktop version. You can use any old computer, although having some speed and RAM can be helpful when its crunching numbers or doing backups.

What it's good for


QB is great with Purchase Orders, bills, payments, reconcilliations, invoices, credit card/merchant/bank data import, and reports. This is the bread-and-butter stuff.

Make sure you get a bank that does non-crappy QB importing. Unfortunately this is where small banks can let you down. The large banks tend to work nicely with imports, so that you can reconcile with ease. Merchant accounts that are backed by authorize.net have a good import system as well. Paypal really sucks no matter what.

Things you should watch for


QB spends a lot of time trying to get you to upgrade, update or use some addon such as their credit card processing or payroll software. In general we strongly suggest not signing up for any of the extras they barrage you with. You're better off with a separate CC processor (more on that in another tutorial), paypal or payroll software.

They may also try to get you to pay for an online backup service. I used it and it totally sucks. You're better off with a free/paid dropbox or similar account. Save your files to the dropbox and they'll be auto-backed-up for you. Also use a removable USB key.

There is no manual included. The online help is not very helpful. Buy a book. The Missing Manual is one we used, it was pretty good. The biggest secret to using QB is to get it set up properly. A well set-up QB is easy to use. A badly set up one can take years to repair. Hiring someone to set up the company file is a good idea if you're not sure what you're doing.

The inventory system is lacking, if you have more than a few items you stock and they are less than $100 each, I'd just use a different inventory system.

Avoiding the list limit


One trick that Intuit uses to force upgrades is limiting the number of names. These are names of companies, customers, inventory items vendors, clients etc. The hard limit is 14,500 and you cant delete old ones if you reach it. And once you do you have to upgrade to Enterprise (costing thousands of $). If you are a consulting company, you'll likely not have more than a couple hundred clients, vendors etc but if you have an online store and you're selling to 25 people a day (which is a good goal for a small company) you'll reach the max in a little over a year. There is no real reason for this limit other than to force you to upgrade, even they admit they want companies of over $2mm revenue and 20 employees to upgrade, but this is really stupid. If you watch out for this now you can last for quite a while by employing a few tricks.

You can see how many names you're using by pressing F2.
  • If you have a lot of items, don't have each item as a different inventory item. Use a different inventory system.
  • When you import data from a credit card, you may end up creating multiple names for one vendor, merge them! (This is also good in general and avoids confusion about multiple vendors.)
  • The biggie is do not import individual online customer purchases as invoices. Each invoice must be tied to a customer and each customer is a unique name! Instead, use a generic name such as Webcart Customer and then have each purchase entered as a Sales Receipt.

Sync Files

Drop it, share it, sync it, save it

We have a lot of computers in our shop, and we often have to share files like printing labels, or forms, or firmware to burn into chips. We used to use USB keys or email but would often have mixups and old revisions kicking around. Now we use dropbox, which is a very easy to use folder-syncing service. Install it on two (or more) computers and they can 'share' a folder. All the important files that are shared between computers stay in there.
There's a free version that's space limited and the option to upgrade. We use two free ones for the office - one for online quickbooks backup and one for sharing files between computers. Then we have a paid one for personal computer backups. The only thing we wish was improved is the ability to have multiple dropboxes on one computer. There's ways to do it but it's not built in.

Combining dropbox with github, you can have a very nice development system!

Website Hosting

Our on-ramp to the information super-highway!

After hearing about Dangerous Prototype's search&move to a new hosting provider, we thought we'd post up about our hosting experiences!
We currently use ServInt for our hosting provider. They're what we would classify as a 'full service' provider. Basically they own the computer, the pipe and do all the management including backups. We get root shell access and install whatever we'd like. When we have any problems (including stuff like upgrading software or installing something) we open up a ticket.

We push over a terabyte a month, running our shop, hosting files, videos and tutorials and it's been pretty much flawless. We started with the low cost VPS service and did that for a few years, now we have a dedicated server and it's managed to live through many 'slashdottings' with no problems. We're still wary of 'cloud' services - our needs are pretty consistant so we'd rather have a single server that can provide for our needs. If our traffic increases dramatically we may move to a cloud service for image or video caching, we've done that before when were were on a constrained provider and that helped us keep transfer costs down.

Why not self-host or self-manage?

When we were younger, we enjoyed running linux boxes and installing server software on every kind of hardware under the sun. However, nowadays, we like to do hardware design and let someone else manage our servers. If you're a gung-ho sysadmin type you may want a simpler setup where you are fully responsible for any software installation, administration, etc.

We also didn't want to have to deal with getting a T1 installed or administrating a router. When you have off-site hosting you don't have to worry about upgrade-paths because it's all ready set up for you.

True backups

We've had friends burned by hosting providers claiming they do backups (but then when you need them, they're not available). We've requested backup pulls a few times and have been really happy with how fast it is. Of course you should have a copy of your site locally but we think backup management is worth paying for so be sure to ask.

Full shell access

Some cheaper site hosts don't let you have full shell access - instead you're stuck with FTP access only. We like to do strange stuff sometimes, and install extra software so having full root shell is awesome. However, its easy to completely screw everything up if you don't know what you're doing so if you're a beginner, FTP might be safer.

IP addresses

Our hosting came with 4 IP addresses, which we like. Sometimes cheap hosters don't guarantee a static IP (very rare) or you have to share the IP with a bunch of others (very common). It's up to you if you need IP addresses or not. We like having adafruit.com on one IP, and using the others for various smaller projects and sites.

Full control panel access

Can you reboot your Apache or SQL instances? Check that your hosting panel gives you any controls you need to keep the site running when something goes wrong.

Part Search Engines

Find that part you need!

The first part of designing electronics is specifying the components, but your job is not done there. Now you have to find someone to sell it to you! We have a few favorite distributors but as it is, sometimes they're out of stock, or its much less expensive elsewhere. For this reason we use part search engines constantly sometimes 10 times a day!

In general, we use findchips.com and then back that up with octopart but whichever you use they're pretty similar in functionality. We think that if you're good with component naming conventions, findchips is a little more powerful - you can search and compare multiple packages/tempgrades. If you're just starting and images help you out, octopart has that going for it.

If you're looking for just some common parts, check out our partfinder as well, which has more of an 'expert system' approach.

Findchips


Findchips is sort of the old standby, it's been around as long as I can remember and works fantastically. It used to be an independantly owned website but the fellow who runs it sold it recently to supplyframe (which was a competitor). Basically, supplyframe sells the information to distributors - maybe about which parts are common, or how their pricing compares.

If you're someone who doesn't like having their every click tracked, we suggest using an anonymizer and blocking cookies.

Lets say you want to find Atmega328P-PU - the DIP version of the Atmega328p - more commonly known as the chip inside an Arduino. Type as much of the name as you know into the box and click Find.
It will return the distributors that have that part in stock, and sometimes even their pricing.
In this case, you can see that if you want to buy one, it might be cheaper to go to Arrow or Avnet or Newark. If you want to buy a bunch, Mouser has tons in stock. So you can see how this is helpful depending on whether you want 1 or 1000 of an item!

Octopart


Octopart is a more recent addition to the mix. It also makes money by selling information on usage. There are tradeoffs to using Octopart. On one hand, they have a nifty 'instant' search feature which can be handy (although we found it confusing at times).
When you type in the name, it gives you all the equivalent components that match that name with a small picture and short description.
You then click on the header to get detailed information.

As you can see, the information is very similar, but in this case the information is a little compressed.

URL Shorteners

A grt wy 2 mk tiny linx

If you hang out on Twitter, you'll quickly get used to seeing tweets that use a URL shortening service like t.co or bit.ly or tinyurl.com. These are basically redirector sites. Say if you have a really long URL, it may take up more space than you have available with a 140-character SMS service.

Of course, if you're a big company like Google or facebook, you may get your own shortener that hints at the original url, like goo.gl or fb.me. We post a bunch of links to twitter all the time, and we sometimes put URL's on stuff so we thought it would be pretty cool to have our own shortener. That's when we realized, hey we could get a .it (Italian) domain and have our shortener be adafru.it! We quickly registered it, and set out to install our own shortener.

Why URL shorten?


We use our URL shortener for a few things. One is of course for twittered URLs. For example, if we twitter about a blog post, the format is adafru.it/bnnnn where nnnn is a blog post number, for example http://adafru.it/b16184 is a link to blog posting #16201.
We also use it on our packaging. To improve shipping and inventory accuracy, we now barcode many of our items. And since we have a little space on there, why not also stick a tiny url to the product page? That way customers can immediately remember what it is they ordered, and look up tutorials and specifications. Handy! This format is adafru.it/nn where nn is the product #. For example this FTDI cable is adafru.it/70
Finally, another really great thing about URL shorteners is they automatically include statistics management. So if you're wondering how many people really did follow that link, or click on that tweet, it's really easy to get hard metrics, and it's not as ugly as an 'affiliate' URL!

We decided instead of rolling our own we would use a great open source package called YOURLS. Tough to pronounce, but easy to use!

YOURLS


We use Yourls for url shortening, it's awesome. It has hooks, API calls, and everything else you need and nothing you don't.

The download/install instructions here work great out of the box - just follow the directions and it works like advertised.

Yourls + Wordpress + Twitter


We recommend you use the Wordpress Plugin if you use Wordpress and Twitter. This Wordpress plugin will automatically shorten every blog post you make and tweet them. You will have to register your blog as a Twitter application, which isn't hard.

This plugin will NOT create short URLs for blog posts that you've made in the past - if you want to do that automatically you'll have to write your own plugin.

Yourls + Twitterfeed


Alternately you can use a service like Twitterfeed which can do the exact same thing! To configure Twitterfeed to use your own URL shortener when tweeting things, you need to set a custom endpoint.

Go to Edit Feed > Advanced Settings and set the field "Custom endpoint" to:
Download: file
http://example.com/yourls-api.php?signature=123456789&action=shorturl&format=simple&url=%@

Yourls + ZenCart


It's pretty nice to make shortened URLs for product pages (adafru.it/51 goes to adafruit.com/products/51). This is trivial and you could enter them in by hand, or you could write a plugin that does it for you automatically.

Making a Yourls plugin


Yourls has really nice plugin system with lots of hooks and filters everywhere to make it easy. If you've ever written a Wordpress plugin then you'll feel right at home here.

First, create a folder under /user/plugins/ and call it my_plugin.

Create a file in /user/plugins/my_plugin/ called plugin.php

The file should look like this:
Download: file
<?php
// Create a new entry if this is a blog post or a product                                                                                                                                                                                                                     
yourls_add_filter('get_keyword_infos', 'create_if_empty');
 
function create_if_empty($infos, $keyword)
{
  global $ydb;
 
  $redirect_new = false;
  if($infos === FALSE && (int)$keyword > 0 && (int)$keyword == $keyword && $keyword < 1000) // Change 1000 to a rational upper limit of your product numbers.
    {
      $url = 'http://www.my_zencart.com/index.php?main_page=product_info&products_id=' . $keyword;
      // create new link                                                                                                                                                                                                                                              
      yourls_add_new_link( $url , $keyword, "pid: " . $keyword);
 
      // switch $infos to the newly generated link
      $table = YOURLS_DB_TABLE_URL;
      $infos = $ydb->get_row("SELECT * FROM `$table` WHERE `keyword` = '$keyword'");
 
      if( $infos ) {
        $infos = (array )$infos;
	$ydb->infos[$keyword] = $infos;
      } else {
        $ydb->infos[$keyword] = false;
      }
    }
 
  return $infos;
}
 
?>
Save the file, and you should be able to activate it in your Yourls admin page under Plugins.

Once activated this will automatically add an entry for and redirect from short.url/### to the zencart product page (even if the product doesnt exist).

The only problem with this is that if Yourls creates a random short url that you later make into a product, it will conflict. (Like if short.url/1001 points to something specific, but a year later you create a product that has ID:1001).

So add into the same plugin.php file another filter to keep it from creating "random" tags that could later become a product.
Download: file
yourls_add_filter('random_keyword', 'no_numbers');
 
function no_numbers($keyword)
{
 
  while(preg_match ('/[a-fA-F]/', $keyword) == 0 )
    {
      $id = yourls_get_next_decimal();
      $keyword = yourls_int2string( $id );
      @yourls_update_next_decimal($id);
    }
  return $keyword;
}

GitHub

The latest evolution in social revision control

If you do any complicated development, especially with a couple people, a revision control system (RCS) is essential. Basically, RCS allows you to have a central location that stores all the changes ever made to a project (the repository) and users can send updates that are tacked onto the list of changes to a file (usually called committing changes). If you realize that you made a mistake in your current project, you can always 'rewind' the file to a previous date. You can also have multiple people updating changes and the RCS will be smart about not letting one update bash another.

For a long time, everyone used CVS (Concurrent Versioning System). It was OK but had a lot of problems that would crop up when doing a lot of development. We got bit by the 'assume everthing is ascii' and 'all changes must be committed.' Also, there can only be one repository and if you lose the repository you lose all the historical data so the repository has to be taken care of and you have to be able to reach it if doing any commits (annoying if the CVS repo is on another site and say you dont have network connectivity or the site is down.)

We also used SVN for a brief time (but not enough to really have a strong opinion of it).

But then came along git and we really liked it. Three great things about it is that, first, you can commit and push to the repository as two seperate procedures. Second, git repositories are distributed, which means that every client has all the same data as the repository. So lets say your repository goes down or is deleted or lost, you can just make one of the clients into a repository. Third, you can rename and move files.

Anyways, so now we have a non-crappy RCS, hooray! But then to make it one better, github comes along!

Github

There's a joke where every time someone says "wow github is awesome" all the other engineers roll their eyes and say "jeez where have you been for the last n years?" Having come from sourceforge, github does everything and does it great. We have a paid account so we can keep repositories private while they're being worked on. But many people can probably get away with a free account! The thing that really made it an easy decision is knowing that if we want, we can take the local copy of the repository and move it elsewhere so it's a riskless situtation.
I can't really get into all the excellent features of github because this article would be really too long but basically here are some of our super favorites!

Easy forking/edits & pulls


People can fork, edit and send pull requests (updates) very easily. We get one pull request a week of people with fixes and mods. It's a hell of a lot easier than dealing with emailed diffs. For example, here yvest fixed a missing function in our Nokia 5110 library. They forked the repository, made changes, tested and then sent us a pull request. After looking at the code we can press a button to merge it directly (or we can test it before pulling).
If I click on the commit it shows me the code diff very nicely!

Private repositories

Private repositories - for paid accounts. For example, while we're still working on a chunk of code, we usally keep it private until we know it's finished and working.

Social integration

Social integration with twitter/facebook/etc - You can have your repository tweet commits! How cool is that?

On-the-fly commits

You can edit/commit a file on the fly. So if there's a typo, you can do it right on the site instead of having to do a edit, save, commit, push. Very convenient! In this example, there was a typo where we meant to have a uint16_t and instead we had a uint8_t - easy to fix!

Gerber Viewers

Part of your pre-manufacturing checklist

Nothing makes an engineer more nervous than a "tape-out" - that moment you send files off to a manufacturing house for PCBs (or chips). Will the returned product be correct, letting you continue on to manufacture? Or will there be a (dumb) mistake, setting you back 3 weeks and hundreds to thousands of dollars? Even the best engineers I know still get antsy and nervous in the lead up to a release!

That's why it's so important to do everything you can to avoid problems. Now, there's not one engineer out there who has done nothing but fab perfect designs each time. Heck, even Microsoft had XBox manufacturing problems, they happen! But every step you take to avoid an easily-fixable problem is worth your attention.

Before we send of PCBs, of course we do a ERC/DFM check inside the software but even then, we always take a look at the final GERBER files before they are zipped up and sent off to the fab house.

GERBER viewers

GERBER is the file format for PCB contents, it's pretty much the universal format, it's based on old photoplotters and is a readable text file which is kinda awesome because there's few parsing problems. It's not terribly 'human' readable so we suggest using a gerber viewer. Look at each layer, especially in combination to make sure everything lines up and looks right!

For example, here is a panel of ADXL345 accelerometers we had sent out. We used pink for the top copper, green for the top mask and white for the top overlay. Sometimes seeing the layers in different colors or combinations lets us see something that is amiss!

Since we do most of our development in Windows, we use GCpreview - an excellent freeware/trial viewer.

In the years since we wrote this, GC preview is no longer free. Instead, we recommend ZofzPCB which is 3D and amazing!  You can also try online Gerber viewers like https://gerber.ucamco.com/

If you're using open source systems, gerbv is excellent as well.

If you're in a rush and just want to look at one layer, you can use the online CircuitPeople SaaS- we found that it didn't work that great with more than one file or large files but it does work.

Serial Port Monitor

This doesn't work anymore - cry the beloved PortMon!

Peek at your COM ports

A while ago we did a tutorial on how to reverse engineer USB protocols using a USB logic analyzer, for when you have to develop your own USB drivers (say for a product that only comes with Microsoft support!) We also wanted to point out that if all you're doing is debugging or reverse-engineering a basic product that uses serial (a COM port) you don't need to shell out for a analyzer box! Instead you can use a serial port monitor, a piece of software that can spy on the COM port. These can also be handy when you have to debug software you wrote - to see what's really going out on the hardware.

We tend to need to reverse-engineer stuff in Windows so we use a nicely written piece of software called PortMon. It's a little old but it works great!

For example, while reverse engineering how to use our serial JPEG camera, we had a Windows software that could control the camera but we wanted to port it to Arduino (or any microcontroller really). Since the software used a serial COM port, we started up PortMon, then started up the driver software.

Then whenever data was sent back and forth, we'd get the data in HEX. For example here you can see the first READ (data sent out to the camera) as "76 00 31 00 00" and the WRITE (reply from the camera to the computer "56 00 31 0C 01…"
We do suggest using the filtering capability to avoid having a lot of extraneous reports like when the port is opened for reading, baud rate set, timeouts, etc. unless that's particularly what you're looking to debug.

USPS Website

Cyber-stamps!

This software tutorial is actually a quick introduction to the fabulous USPS website. Now a lot of people love to hate on the post office - slow! expensive! incompetant! But really the USPS website is fantastic and has a lot of goodies in store for anyone who runs a small business. We used the USPS site exclusively when we first started - to look up package rates, order stamps and supplies, even print postage.

While this tutorial is USA-centric, your government's post office probably has a pretty good system themselves so check it out to see what free things they offer.

Printing postage

First thing you'll want to check out is the ability to print shipping labels with postage! This is great for when you dont want to haul yourself to the post office and wait in line.
You'll need a laser/inkjet that can print on the sticker paper, you can buy that from the USPS shop or from ebay in packs of 50-500.
We used to use this service a lot, when we were first starting out. You just link your credit card to the account and buy any amount of international/domestic of postage and it's charged to your card (and if you have a rewards card, that's a nice way to save up miles for a vacation flight!) Last we checked, you can even get free delivery confirmation when you use this system. Then you can have a pickup or just drop small packages into the bin at the post office - no waiting in line.

Only problem is it's really tedious and slow and doesn't link into any sort of database service.

Free shipping supplies!

If you want to save a little money, and you use USPS a lot, you can pick up **free shipping supplies **for Priority/Express mail service. Priority mail is a really superior way to ship around the US, especially with the flat rate boxes for heavy stuff. You'll have to do the math on whether your goods are dense enough to make flat rate boxes a better choice than using the postage system mentioned above.

Free pickups

At some point, you may have sooo many packages, hauling them to the post office is a total pain. Another thing is that you can't drop international packages into the bin at the post office - they must be handed to a USPS employee. That's why we looooove USPS pickups. A friendly carrier comes by and takes all the packages away for you. The only thing we'd suggest is dividing up the packages so that the First Class, Priority, Express are seperated, that makes it easier for them. You can schedule on the website - we have one every day.

Tariff Code

People ask me:

"Lady ada, how the hell am I supposed to know what the HST code is for my products!?!?!?"

And I'm all...

"I'm not an import/export attorney, but there's a lot of places you can research to get the best match!"

This mini tutorial will cover how to find the best tariff code to match your product. Finding the right code is annoying but you only have to do it once, and getting it right will help you get your product through customs faster!

Using the Googles & FAQs.org


FAQs.org has a full indexed list of a massive number of rulings on tariff codes, you can search it from google by querying site:faqs.org tariff for example to search for the ruling on PCB tariff codes, search for "printed circuit board tariff site:faqs.org."
The nice thing about this is not only can you often get the ruling tariff code BUT you can also get a feel for how the codes are often decided (say how to categorize a toolkit set that contains a few different items but must have a single code).

Using the USA HST / Tariff classification system


Next up, the official place to go is the US HST website.

For most electronic goods, you'll want to head to chapter 85.
For example, if you're selling a resistor pack, or something that contains only resistors, youll want to check out subsection 8533 which is all about resistors!
It's rare that you find the absolutely best choice for the tariff code right there, which is why we use both search techniques!

Uptime

Website Watchers - Get an alert when your site goes down

Back when I just had a personal site with some code on it, I wasn't too picky about hosting. I went with cheap and simple - maybe $10 a month at the most - and usually you get what you pay for. So the site would go down for a few days a year. No big deal for me, since that's the trade offs of having low cost hosting.

Now that I have a business site, part of my job is to make sure that site is up all the time. A commerce site that is down means lost sales and upset customers. We have a really excellent full service hosting provider, but they dont monitor our website's uptime (only the network itself, and the computer is their responsibility).

The good news is that we have customers who will alert us if the site is really sluggish or down or if the MySQL database is hiccupping, but it would be better if we knew before customers started noticing en-masse. Thats when we read a geeky list of software services that looked interesting and noticed that they were using a thing called "web site monitoring" and we were all like "hmm! that sounds interesting."

Web site monitoring


Website monitors are tools that give you uptime and website-loading response times with optional notifications. Most just do uptime - so they tell you when the site is down via email, twitter, sms, etc. There are also some that load the website you run from various computers around the world to let you know if its sluggish.

At this time we're trying out Pingdom which does both response times and uptime monitoring.
It's a little pricey and we're not sure if we'll continue using it. However, it gives us an idea of whether this kind of service is useful for us. It does work, our site was down for about 20 minutes and we got an SMS message to alert us. I would suggest anyone who runs a website, too.

Wiki

DokuWiki - Wiki backends for documentation


If you have a few webpages you maintain, something like Dreamweaver is good enough. But once you get to a couple -hundred- tutorials/projects/documents with multiple collaborators you have to take a good hard look at how you manage content. Around this time, most people end up using something like Drupal or another Content Management System (CMS). I'm sort of an old skooler - I like the idea of CMS but I hate the look of 'em. They all have this kinda gross 'man page' look. Very utilitarian but not particularly easy to navigate.

Since I already had a lot of content in raw HTML, I wanted to move it all over without a lot of nonsense. I like the idea of a wiki but dont want it to be too obviously a wiki. Blogs are good but too temporal, and it isn't easy to collaborate on a single post. I don't want comments on tutorials, but I'm OK with people making minor text corrections. There's probably some awesome solution to all this but well I couldnt figure out so I decided to go with a wiki backend to a Dreamweaver template. It's not going to be what we use forever but it's a pretty good start.

Which Wiki?

I ended up with DokuWiki - it's designed for documentation, has a fairly good ACL (access control system), and uses a file system database (not a mysql database). Other wiki systems might be great. My view is that they are all terrible to edit, really.

If someone knows of a good WYSIWYG editor for wikis, that would rock because right now nothin' out there is looking very good.

Pulling Wiki HTML

Having an editable page but without having all the 'edit decoration' means that while there is a wiki behind this page, you don't see it. Instead, I pull the pre-rendered (cached) HTML using a very minimal PHP script in the wiki directory:
Download: file
if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__)).'/');
require_once(DOKU_INC.'inc/init.php');
require_once(DOKU_INC.'inc/common.php');
require_once(DOKU_INC.'inc/events.php');
require_once(DOKU_INC.'inc/pageutils.php');
require_once(DOKU_INC.'inc/html.php');
require_once(DOKU_INC.'inc/auth.php');
require_once(DOKU_INC.'inc/actions.php');

//import variables
$QUERY = trim($_REQUEST['id']);
$ID = getID();

$REV = $_REQUEST['rev'];
$HIGH = $_REQUEST['s'];
if(empty($HIGH)) $HIGH = getGoogleQuery();

//sanitize revision
$REV = preg_replace('/[^0-9]/','',$REV);

$html = p_wiki_xhtml($ID,$REV,true);
$html = addslashes($html);
$html = ereg_replace("\n", '\n'."\\\n", $html);
$html = str_replace("</a>", "</a> ", $html);

echo ('var zoomy = "'.$html.'";');
echo ("document.write(zoomy);");

$url = "http://www.ladyada.net/wiki/" . str_replace(':', '/', $_REQUEST['id']);
$footer = '<hr /><br /><em>This page was autogenerated from <a href=\"'.$url.'\" target=\"_blank\">' . $url . '</a> <br 
/>Please edit the wiki to contribute any updates or corrections.</em>';

$footer = '"' . $footer . '"';
echo ('document.write('. $footer . ')');
?> 
It's then trivial to 'include' a wiki page by adding into an HTML file. It will even make a cute little footer (as you can see below). You might need to fix up your CSS to manage how it looks but that's pretty much it.

The other nice thing about having content in a wiki is it's so easy to 'readapt' it - the markup is nearly universal and it's easy to parse even if you have to say convert it to XML. There's also a nice revision control system that's 'built into' the wiki - easy to undo spammer effects and also look at old versions if necessary.
This guide was first published on Feb 27, 2013. It was last updated on Feb 27, 2013.