Greatest Hits

There are 10 entries in this Category.

The most valuable registration field: How did you hear about us?


How did you hear about us?

I first answered this question when joining Linode . I remember thinking “Wow, this is a great time to ask me!” because the real answer was still in my short term memory.

When I launched LinkPeek I decided to apply this technique. After an amazing launch (thank you colleagues from HackerNews) the true significance of this field was exposed. I would argue that the answer to this simple question holds more value than collecting a username.

Here is why:

It may seem obvious after reading this post, but this is what I learned and I am sharing to help other startups.

Asking “How did you hear about us?” will help you determine:
  • how your customers found you
  • which of your marketing efforts are working
  • where to spend money or time marketing (and where to stop)
  • your true target market
  • how your customers will use your product
Here are some other benefits to this technique. It opens a dialog or conversation with the customer, which in return should help lower friction during the sale. You already have the the customer engaged during the signup process. I am firmly against the traditional method of surveying customers. I believe the same data can be collected without being abrasive or wasting the customers time.
“How did you hear about us?” is the gift that keeps on giving.
It is commonly accepted that shorter registration forms lead to better conversions. I totally agree, but in this case the sacrifice is worth learning more about my target market and customer needs.

How to ask this question properly:
  1. Just ask! I second guessed my decision to add this field right before launch but that anxiety promptly faded after reading the first answer.
  2. Don’t use pre-filled answers! Having pre-filled answers is counter productive because you will not learn anything new. You are forcing the user into choosing one of your answers…
  3. Allow the user to type as much as they like! A few of my customers nearly wrote a book in the text field.
If you liked this post, you should follow me on twitter here.

How to save hundreds of dollars on groceries without clipping coupons

This is the first time I’ve had a guest blogger on my site. It may sound campy but my wife Jenn wrote this article after explaining how our grocery bill decreased so drastically.

How to save hundreds of dollars on groceries without clipping coupons

I was recently re-working the cabinets of the kitchen, anticipating a new and organized year. With a growing family and limited space, I decided to do some consolidating.

I contributed a whole section of cabinet space to arts and craft supplies for the kids (play-doh, paints, etc), and another to bottles and formula. I suddenly realized that my food products remained scattered across the counter and there was only one lonely cabinet left to fill.

I had been clipping coupons and striving to match the savings of super couponers. These couponers, recently featured on popular reality shows, often recommend stock-piling when food items go on sale and you have coupons to purchase them.

I found among of items on the counter that many were far expired and had been hiding in the dusty shadows in the back corners of cabinets. I thought to myself “Hey! I worked hard to find coupons and sales for all these things.” and I regretfully filled a garbage bag with old food. I opened the refrigerator to find a similar and familiar situation: a head of lettuce that had seen better days, a tomato that had lost it’s freshness, and other food items that were past the date of recommended consumption.

Looking into the garbage bag, I realized that… every week I was wastefully throwing food and money away. I decided to make a commitment that has cut my grocery bill in half! Do I still use coupons? YES, if they fit into my weekly plan. Do I still look at the sale flyers? ABSOLUTELY! But…

These two strategies have saved me much more money:

1. Cut down food storage spaces

If you currently use 4 food cabinets try designating only 2. In my case I consolidated my food items to 1 cabinet. This consolidation saved money in two distinct ways:

  • First, I am easily able to assess which food items I have and when they expire. This helps prevent re-buying a product we already have at home (Remember the time you were at the grocery store buying all the ingredients for those chocolate chip cookies and couldn’t remember if you had any brown sugar? Undoubtebly you re-bought, probably to discover you had a brand new, unopened package in the cabinet).

  • Secondly, it prevents stock piling. I can buy only what I need for the week ahead, after all, it is all I have room for. If you generate the sense that “my kitchen is full of food”, it eliminates the need to buy for the sake of filling the cabinets.

2. Let your menu dictate your shopping list

My son complains “There are no more crackers.” My husband sighs, “We’re all out of bananas.” My answer used to be probably a lot like yours “OK, I’ll put it on my list.” I had the perception that I constantly needed to replenish. It is unnecessary and wasteful to have three different brands of crackers, five types of cereal, and every kind of fruit known to the produce section. Without fail, I was throwing away money each week.

Instead, I sit down each week with two sheets of paper. One serves as dinner menu for the week and the other as my shopping list. When building my menu, I consider the sales and coupons I have on hand. If I notice a great deal on pasta sauce, we might have spaghetti one night and meatball subs another. I immediately begin a shopping list writing ONLY items used for the companion menu. Additionally, I add two breakfast choices and two lunch choices for the week if needed (some breakfast items such as pancake batter or a family size box of cereal often last longer). I also include 2 choices of fresh fruit or vegetable. To reduce waste and cost I ONLY add the staples (eggs, milk, and bread) when it is on the menu. If none of my breakfast, lunch, or dinner choices call for bread, I skip that aisle for this trip.

It took me only a few short weeks to notice that by cutting my food storage space in half, and adopting a disciplined approach to menu and list making, I had saved hundreds of dollars. I challenge you to cut down your food storage spaces and let your menu dictate your shopping list!

Career development is a game of chutes and ladders

If career development was a game of chutes and ladders, job networking would be the ladder. They provide a shortcut to the top, a direct route to win your dream job.

At work today, a colleague was reviewing resumes for an open requisition within the unix group. I decided later that night to clean up my resume to make it more relevant. I felt like I did something positive for my career. After coming down from the high of resume writing I began to question rational. I then came to the contradictory conclusion that a great resume holds less importance than a mediocre recommendation.

It is better for an employer to learn about you from a recommendation then your resume. Why? Hiring new people holds risk. A hiring manager will reduce risk by promoting from within or using personal recommendations. In both cases the resume becomes a document of formality instead of a document of credentials. “Its not what you know, its who you know.”

What can we assume about the position they are extending to the public? We can safely assume that the manager has already hired somebody for the high risk, enjoyable position and is now looking for a bottom feeder with a resume to fill the newly vacant position. Keep this in mind the next time a head hunter sends you a job proposition email.

Normally taking shortcuts goes against conventional wisdom for success. Job networking however, allows candidates to skip ahead and arrive at their dream occupation more directly. Meeting new people seems like the single best way to land a job doing what you love.

Get out there and meet people with similar interests!

Occupy Wall Street Stack vs Queue

Occupy Wall Street contributors claim to use a “stack” to determine speaking arrangements.

I plan to explain how the term “stack” used in this scenario does not align itself with the mathematical or computer science definition.

The term stack means First In Last Out or “FILO”. For example: a person placed on the stack in the morning would be the last to speak at the end of the day. This isn’t happening like that…

Occupy Wall Street compatriots really use a technique called “queue”. Mathematicians and Computer Scientists define a queue as First In First Out or “FIFO”. A real world example of a queue would be a line at the grocery store. The first person in line is the first person to leave the line.

  • An object enters a stack from the rear and exits the rear.
  • An object enters a queue from the rear and exits from the front.

Security Professionals: Yes we appear vulnerable but that attack vector will never happen

Security Professionals: Yes, we appear vulnerable but that attack vector will never happen.

In loom of recent internet attacks many institutions have started scrambling in attempt to “strengthen” their security stance. I agree that auditing our systems and networks for potential flaws seems appropriate at this time to prevent getting “caught with our pants down”. Incidentally, I have recently witnessed the introduction of silly and at times ineffective security adjustments. Many of these new procedures, rules, and requirements do not make us more secure and worse instill a false sense of security.

I have previously addressed the fallacy of absolute security. No system is perfect. A successful security model accomplishes fortitude by implementing layers like an onion . Through the use of security layers we can significantly hamper attack vectors and create a safer complex.

When analyzing a potential attack vector we must first determine our current location in the security layers. This step serves two purposes:

  • to prevent wasting time and energy on vulnerabilities that don’t matter at that point in our matrix.
  • to prevent causing outages and unneeded administrator and customer heartache.

If a vulnerability requires root or elevated privileges to occur, don’t waste your time resolving it. If the attacker already has root, you have bigger problems on your hands.

Some real life examples:

  1. Firewall denying a large range of IP addresses (like entire countries). This truly does not increase security, it just creates headaches for users. An attacker could just proxy to an open range (like a VPS based in a more trusted zone) and gain access from there. Also if you decide to ignore this advice and create blanket IP range deny rules, DON’T also block services intended to be internet-facing. For example, don’t block your Internet-facing DNS server if it is authoritative for public domains. This will cause countless intermittent issues and will be a nightmare to diagnose.

  2. Weekly Scanning for Windows viruses on network shares or data at rest. This hammers the servers for no reason. If all the desktops run antivirus then the file was already scanned when it was downloaded. That same file will be scanned again when retrieved on the share. If you want the warm and fuzzys of virus scanning network file shares, do it once a year. These scans waste time and resources. I feel even more outraged when asked to virus scan network shares hosted on UNIX servers or NAS.

I speculate that most of these arbitrary ideas come about because the people in charge make uninformed decisions out of fear without first consulting the appropriate subject matter experts.

Unfortunately, once a security mandate occurs it seems difficult to expunge. People are just not willing to put their neck on the chopping block to banish a legacy or silly mandates; So we end up living with nonsensical rules and procedures.

Programming is like Alchemy

This image comes from Michael Maier's 1618 treatise on alchemy. It combines music, image and text to communicate alchemical knowledge to adepts. Note the combination of Pythagorean imagery with alchemical practice. - princeton.edu

This image comes from Michael Maier's 1618 treatise on alchemy. It combines music, image and text to communicate alchemical knowledge to adepts. Note the combination of Pythagorean imagery with alchemical practice.

Programming is like Alchemy except instead of exchanging matter, we programmers exchange time. Also depending on the program the exchange of time worked (coding) increases the productivity (time) of its users.

On second thought, maybe programmers correlate less with Alchemists and more with Time Travelers; Or at the very least time manipulators. On a good day we can perform tasks that would take thousands of men. See, time created! On a bad week we can procrastinate and do nothing at all. Time lost!

Golem-soul-caliber

Golem from the Soul Caliber universe

Programming also embodies other magic like wizardry.
Our programs typically live as golems, doing one task, repeatedly, over and over. Golem programs, without a soul, stuck in a loop of servitude. However recently we have started coding creations with artificial intelligence which exist similar to familiar spirits (Wikipedia), assisting their creator in conjuring more magic. So we settled it, programmers are like bad ass, time travelling, wizard alchemists!

Or maybe programs just behave in parallel with all technology, a leveraged tool used to perform repeatable tasks which save people time. Either way, you should follow me on twitter here.

time-travelling-wizard-alchemists

Time Travelling Wizard Alchemists - http://imgur.com/r/pics/qW6Fv

Google Bot Attempts to Crawl Shortest Urls First

Recently I built http://school.yohdah.com a Python, Pyramid, and mongoDB project during the last couple weekends.

The site features a directory style navigation of nearly every public school in the US. We have 61 state pages, approximately 19,000 city pages, and over 103,000 school pages.

It seems the Google Bots have noticed school.yohdah.com and started crawling the site. Since the initial crawl I started reviewing a sample of the sites apache logs in an attempt to track the bot’s activity. After a few minutes of viewing the logs, I locked onto a pattern; Google Bot’s algorithm appears to crawl the short URLs first!

PersonalCompute (a user) attached a graph of the fetched URL lengths here:

school.yohdah.com.graph

I have attached a zip containing the apache google bot crawl logs here: access-school.yohdah.log.zip

I found the pattern by opening the file in vim and scrolling very quickly down. You will notice the log lines will grow slowly to the right, as the urls being fetched increase by one character.

Why does Google do this? Does anyone have speculation as to what this means?

Dropbox Encryption with TrueCrypt

Derek Newton recently invoked discussion about insecurities in Dropbox authentication. In his article he describes how an attacker could exploit Dropbox and gain access to unshared files. The concerns he raised do appear accurate however we must remember that security is an onion.

An onion, like security, has layers to protect its vital parts. The vital parts are more vulnerable when its security model only possess one layer. As we add layers to our security model, our system’s protection grows exponentially.

In the case of Dropbox, the username and password act as the first layer. Experts agree that a simple authentication layer will provide enough protection for nonsensitive data. However when attempting to protect sensitive data we must pair authorization with encryption.

Generally speaking file systems have maintained a sense of insecurity, which makes them useful. Not encrypting files on Dropbox is akin to not encrypting files on a shared PC. Sensitive data should always be encrypted regardless of its location or media. We should treat sensitive data-at-rest on Dropbox the same way we treat sensitive data on local, optical or flash disk. We should encrypt it!

So how does a user encrypt their Dropbox?

My strongly opinionated solution uses TrueCrypt to create an encrypted volume in the Dropbox directory. Simply treat the Dropbox like a normal directory, follow the TrueCrypt documentation to build a volume, and give Dropbox a chance to sync the data. When the sync completes, the TrueCrypt volume will be mountable on each of your Dropbox enabled computers.

I have to admit at first I was skeptical, but the software cooperates surprisingly well and after the initial sync proceeding syncs occur quickly! I prefer TrueCrypt because it is open source, cross platform, and free (both in freedom and cost). TrueCrypt also functions and performs better then any other solution including commercial products like GuardianEdge or PGP both recently acquired by Symantec.

All security and encryption software should remain open sourced and peer reviewed to prevent harmful tampering. Commercial software, written in a black-box vacuum, prevents customers from viewing its code and procedures. We cannot trust software for security when we cannot view its source code.

You should follow me on twitter here.

virt-back: a python libvirt backup utility for kvm xen virtualbox

This entry is part 1 of 4 in the series Virt-back

Over the weekend I wrote virt-back, a backup utility for QEMU, KVM, XEN, or Virtualbox guests.

virt-back is a python application that uses the libvirt api to safely shutdown, gzip, and restart guests.

The backup process logs to syslog for auditing and virt-back works great with cron for scheduling outages. Virt-back is in active development so feel free to give suggestions or branch the source.

virt-back has been placed in the public domain and the latest version may be downloaded here: https://bitbucket.org/russellballestrini/virt-back

Installation:
sudo wget https://bitbucket.org/russellballestrini/virt-back/raw/tip/virt-back -O  /usr/local/bin/virt-back
sudo chmod 755 /usr/local/bin/virt-back
virt-back --help
Example cronjob:
15  2  *  *  1  /usr/local/bin/virt-back --quiet --backup sagat
15  23 *  *  5  /usr/local/bin/virt-back --quiet --backup mbison
Manual:
russell@host:~$ virt-back --help
Usage: virt-back [options]
Options:
  -h, --help            show this help message and exit
  -q, --quiet           prevent output to stdout
  -d, --date            append date to tar filename [default: no date]
  -g, --no-gzip         do not gzip or tar the resulting files
  -a amount, --retention=amount
                        backups to retain [default: 3]
  -p 'PATH', --path='PATH'
                        backup path [default: '/KVMBACK']
  -u 'URI', --uri='URI'
                        optional hypervisor uri

  Actions for info testing:
    These options display info or test a list of guests.

    -i, --info          info/test a list of guests (space delimited dom names)
    --info-all          attempt to show info on ALL guests

  Actions for a list of dom names:
    WARNING:  These options WILL bring down guests!

    -b, --backup        backup a list of guests (space delimited dom names)
    -r, --reboot        reboot a list of guests (space delimited dom names)
    -s, --shutdown      shutdown a list of guests (space delimited dom names)
    -c, --create        start a list of guests (space delimited dom names)

  Actions for all doms:
    WARNING:  These options WILL bring down ALL guests!

    --backup-all        attempt to shutdown, backup, and start ALL guests
    --reboot-all        attempt to shutdown and then start ALL guests
    --shutdown-all      attempt to shutdown ALL guests
    --create-all        attempt to start ALL guests

Response to L-Theanine: a 4000 Year Old Mind-Hack

RE: http://worldoftea.org/caffeine-and-l-theanine

As the original article speculates, the combination and amount of L-Theanine and caffeine present in tea, appears to have notable affects on my programming and problem solving abilities. It’s difficult to show conclusive evidence to this claim, but I generally feel most alert and organized when coding under the influence of 2 – 3 cups. In a typical day I drink about 4 cups, dosed an hour apart. I feel compelled to introduce another “mind hack” for problem solving or programming, which I call “Dream coding”

“Dream coding” is just that, coding at night during sleep. One can successfully invoke this “mind hack” by provoking thought about the problem while drifting to sleep. Once sleeping I’m able to see my code and my brain seems to iteratively problem solve. Most often I’m lucid during these events; aware of the problem I’m trying to solve and of the possible solutions. Other times I don’t recall performing the solutions, but when I wake and after my first cup of tea, I’m able to solve my problem with a optimal and beautiful solution.

PBS NOVA published an episode about this phenomenon: What are dreams?

Does this happen to you? Have you experienced this?

You should follow me on twitter here.