Tech Opener

Let's share more

Now using Octopress

Nothing like migrating to a new blogging platform to get you in the mood to write some new posts. Just switched from Wordpress to Octopress.

You can find migration instructions a number of places, but the process was pretty straightforward for me.

  • Exported published posts from Wordpress
  • Updated xml export to include atom namespace that was missing
  • Used exitwp to convert the export into the markdown format. I did run into a wrapping issue.
  • Enabled comments on old posts with the following find and replace
 perl -pi -e 's/layout: post/layout: post\ncomments: true/g' *.markdown
  • Saved images to source/images and updated posts with proper links
  • Deploy to github!
  • Update feedburner RSS feed location

Now I just need to find a spell checker plugin!

Using the Dwolla API with node.js

Dwolla.com is a new payment network. It makes it easy to transfer money without the transaction fees charged by credit cards. Each transaction over $10 is 25 cents, and those under $10 are free. I think this has a lot of potential so I have been exploring ways to utilize their API.

To start I wrote a node.js module for their API that you can find at https://github.com/nanek/node-dwolla. In addition, I added Dwolla OAuth2 to the everyauth module to make it easy to authenticate.

They have some interesting API methods that are not common to payment APIs. You can view a user's account transactions and balances (with permission of course). They also integrate and expose a user's contacts from various social networks, such as Facebook and Twitter, to make it easy to send/request money from friends.

Let me know if you build something cool or if you have a great idea that could utilize their API.

Translation API for node.js

Microsoft provides a Translator API that allows you to translate text from one language into another. It provides up to 1000 transactions/month for free. Google also provides a translation API, however has recently removed their free tier. One the projects I am working on needed the ability to translate text, so I wrote a node.js module for the Microsoft Translator API, which you can find more about at github.com/nanek/mstranslator.

The API itself provides a good set of languages to choose from and it also can provide the audio of the word being spoken.

Credit Cards and Security

I recently returned from a wonderful trip to Norway.  One tech thing that stood out was that everywhere you go there they have portable card readers that read cards with a chip or magnetic stripe.  Looking into it, the "chip" is EMV technology adopted in Europe in 2005 due to security concerns.  Every single place I tried to use my non-chip credit or debit card came with a puzzled look and the statement, "no chip?!" Being a tech geek I definitely felt out of date.  You could tell by the way they acted that they didn't swipe cards very often, as everyone only uses the chip there.

I remember when I applied for my first credit card, the American Express Blue card, which I still have.  It came with a USB card reader and a chip in the card to help secure online transactions.  I never used the card reader, but it was the main reason I got the card, and that was back in 1999.  Unfortunately that is not an EMV chip, so it doesn't work in Europe.

Swipe cards, just like plain text account numbers lack any sort of security. This is widely known, however we currently have a chicken/egg problem of not many cards with chips and not many readers for these chips in the US. Square and other companies are making card readers more accessible, however is still based upon fundamentally insecure swipe card technology. Some say mobile payments, such as NFC will provide a more secure technology and are more practical to deploy in the US over EMV technology.

Frankly, I don't care too much what technology is used, however I would prefer the option to choose a more secure credit/debit card.  Seems like there shouldn't be an issue supporting both.  Recently I just go a new ING Direct MasterCard, that has no embossed numbers on the card.  In fact, all of the account information such as my name and account number and expiration are printed on the back.  It certainly looks cool, albeit almost fake, and it won't leave my CC number imprinted in my wallet, however im not sure it makes it my account any more secure.  I guess they decided that no one makes card imprints anymore.

Im looking forward to see some innovation in banking over the next year. Seems like the market is poised for a shake-up.

Book recommendation: Responsive Web Design

I just finished Responsive Web Design by Ethan Marcotte. It is a quick and entertaining read. It brings together some CSS techniques you may already know and some you probably don't to give clear solution to an ever increasing problem of dealing with varying screen sizes. I look forward to using these strategies in my next project and I highly recommend the book. Let me know if you want to borrow it.

How to become a Sole Proprietor in Arlington County

When starting out on your own, there a number of things you need to do based on where you live.  Even with all of the resources on the internet, it can still be a little confusing to determine what is needed as it varies based on a number of factors.  As such, if you are starting a business, then be sure to research what is required for your situation.

Here are the basic steps for becoming a sole proprietor in Arlington County, Virginia.

  1. County - Business License ($30/fee, plus tax at end of year) from the Commissioner of Revenue
  2. County - Home occupation permit (free) from the Commissioner of Revenue
  3. File State Taxes at end of year
  4. File Federal Taxes at end of year and complete tax estimates quarterly Other steps, highly recommended:

  5. New bank account to separate business income/expenses from personal accounts

  6. Business Cards - about.me provides free moo cards
  7. Health Insurance - eHealthInsurance.com
  8. Networking - meetup.com After this, you can look into creating a more complex business type, such as an LLC and/or trademarking a business name and getting an EIN if needed.  However if you are just looking to get started, it could be a simple as that.  Let me know if you think im missing something.

Full Text Search with Dropbox

Dropbox + Solr = full text indexing and search for files in your Dropbox. I wrote an app in Sinatra that authenticates to Dropbox, downloads your files, and indexes them in Solr. It also provides a simple interface for searching that includes hit highlighting and some basic facet support.

Search Dropbox

I've posted the project on github, so feel free to download and try it. For anyone interested in this as a hosted service instead of as a download and install, let me know.

Analyzing data from DonorsChoose.org

DonorsChoose.org is running a contest by opening up its data for analysis and use in innovative applications.  They have provided data dumps for project, search, donation and gift card data in large csv files.  There are a two free tools that I recommend to quickly review this data.

Google Refine allows you to filter the data and identify data quality issues.  It also makes it very easy to manipulate and transform the data any way you like.  Bulk replacements and column transforms are two of its strengths.  Another cool feature is the ability to template exports into different formats such as JSON.  Heres some tips I found with working with the Donors Choose data.  First increase the memory settings.  Second, update the facet limit setting to something higher.  The screencasts for Google Refine do a great job in demonstrating its use.

Google Fusion Tables is good for visualizing data in various ways like charts, maps, or timelines.  This tool works better with data sets that are already cleaned up.  It takes some time to load the data and process it, so it is best served for working with just a slice of data that you would like to present for a specific purpose.  It does have a 250mb limit per user and a 100mb limit per csv file.

So go ahead and start analyzing this data.  It is for a good cause and the lucky contest winner will get to meet Steven Colbert!

Team Drive on Google App Engine

Last year, I created Team Drive on Google App Engine.  I wanted to learn about Google App Engine (GAE) which is a hosting platform for python/java based applications.

Team Drive is based on a site that Fabien built years ago to record donations of items for a charity food drive.  Users from an organization are split into separate teams, and then compete to see who can collect the most food items. By adding this friendly team competition to a normal food drive, you can increase the participation and results of the drive.

Building on GAE is quite different than traditional single server application deployments.  Everything in App Engine forces you to think about how to scale your application.  By placing constraints, such as a thirty second processing limit per request, it forces you to think about approaching problems differently than if you were writing this to run on a single server.

App Engine supports two types of authentication methods, Google Accounts and OpenID.  If you want to leverage their session management you need to use one of these.  For an site aimed at organizations, I didn't want users to have to create a google account or OpenID.  To work around this I implemented an OpenID provider in the application.  Administrators could upload a list of email addresses and a Team Drive OpenID would be created for each of these users.  The users themselves don't need to know that they are using OpenID, as I only ask for their username and password.

Another example is for counting the number of items contributed by a person, team, organization or type.  In a relational database you might just sum these up on demand.  However using the Google datastore you generally store counts on the object itself and increment this count on each update.  App Engine has also provided an implementation of map/reduce that makes it easy to perform operations such as sums or counts over large collections.

No timezones / no daylight savings time

Timezones and daylight savings time never really made sense to me.  How could something as fundamental, precise and constant as time be dependent upon my location or a local government?

Turns out, Swatch tried to tackle this already.  eBeats is trying something similar.  Until then, there is always Every Time Zone.

&nbsp_place_holder;