Some time ago, I wrote a post hypothesizing that “the cure for procrastination” is to become a busy person. With a constant stream of deadlines, the theory goes, one will not have the time to procrastinate.
I was wrong. It works, sure, but it’s the wrong thing to do. It forces you to schedule frivolous activities between the important ones. As Steve Jobs would say, if you want to do anything great, “cut the crap”. Focus on the one or two things that matter, and stop doing all the other crap that doesn’t matter. Jobs gave this advice to Larry Page, CEO of Google telling him to stop simultaneously working on hundreds of mediocre projects and instead focus on the ones that matter most. I’ve realized that this advice applies just as well to personal development. Doing hundreds of things at once will make it harder to become good at any one of them. Stop working on a hundred different projects and just work on them one at a time; Stop trying to please everyone and focus on the ones that matter most; Stop reading 6 different books at once and finish the one you’re reading before starting another one; Stop trying to learn eight different habits at once. Just focus.
This is a cross post from 22Michaels, a blog about the adventures of Michael Fox, Jodie Fox and Mike Knapp from Shoes of Prey.
As an early employee of the unique design your own shoe company Shoes of Prey, I’m intrigued by how quickly the company is growing. It seems like every time I walk into the office there is a new employee in Sydney or one of it’s partner offices around the world. As the business spreads into new markets across the globe, we start to ask questions like “how quickly are we growing in Japan?”, “how successful was our valentine’s day campaign?“, “how can we replicate our Australian success in Russia?”. We can take information like where and when we’re making a sale and apply basic statistics and number crunching-fu to try and answer some of those questions, but that’s no fun. What if we could see our growth with our eyes?
Google earth is an excellent tool for visualizing geo-location data, and that’s exactly what we chose to use. In a few hours, I was able to create a visualisation of shoe sales around the world over time. Here is a video of Australian sales:
Seeing the growth of Shoes of Prey over time is exciting, and it only takes the right tools and bit of programming background to put something like this together. This post gets technical from here, so skip to the end of that’s not your cup of tea.
Displaying time sequence animations in Google Earth is easy, it’s a matter of getting your data in the right format. It uses a format called KML, for which you can find documentation here. I’ll summarize what it took to put the animation together.
You can place a “placemark” on the map with the following tag:
Furthermore, you can add a custom icon as well as a “TimeSpan” to specify when to display that “placemark”. This is what we use to display those red shoe icons on the map.
The “kml” above will display a single shoe icon at GPS coordinates (-122.0822035425683, 37.42228990140251), you can add more points by adding more <Placemark> sections.
Creating and animating heat maps is more difficult and will require some programming. Python is a major programming language we use at Shoes of Prey and luckily I found a Python library that not only generates heat maps, but also generates kml code to overlay the heat map on Google Earth. The heat map library by itself had a few limitations for what we wanted to do; mainly, it was too slow and it was limited to only generating a single static heat map and kml file. However, the great thing about open source software with modification friendly licenses is that you can modify it if it doesn’t do exactly what you want it to do. I had to modify the library to make it faster and generate a time sequence of heat maps like the one you see in the video. You can find the source code of the modified version here. All you have to do is give it the data in the right format, the library does the hard work for you.
import heatmap
# Code to format your data goes here #
hm = heatmap.Heatmap()
hm.animated_heatmapKML(pointsets, outfile_name)
The first argument to the animated_heatmapKML functino takes an array of 3-tupples in the format like below:
The second argument is the name of the output file, e.g. “heatmap.kml”. There are other optional parameters, see the documentation for more details. That should generate a “heatmap.kml” file as well as associated heatmap images heatmap.kml1.png, heatmap.kml2.png, … to go with it. Open the file in google earth and slide the timeline to see the heatmap change over time.
What do you do with your business’ data and how do you use it to improve your business?
As my friends and I walked out of a $15 dollar parking lot in an unfamiliar ally, a ruggedly dressed yet friendly looking man walked towards us and said, “y’know street parking here is free after 6pm, you can save yourselves some money by parking over there”, as he points to an empty parking spot.
We verbally thanked him for his advice and my driving friend proceeded to move the car while the man stood there and started a conversation with us. He then asked, “why don’t you give a poor man who helped you out some money for food?”
That’s when we realized that he wasn’t just any nice random stranger with no expectations of a return for his deed, nor was he just any random beggar. He was an opportunist, an entrepreneur in his own way. He saw the opportunity to save us money, presented the opportunity to us and negotiated a reward for his efforts.
We gave him a well deserved six dollars for his effort, more than the usual one or two dollars most beggars will manage to get from us.
Yesterday, I had my first haircut since coming to the US. Those who know me will know that my sense of fashion is about as good as a squirrel sense of nuclear physics. Needless to say, I went to the closest cheap barber in town. As I walked inside, the lady at the counter greeted me and asked for my number, name and address. Although we had just met, and she wasn’t particularly attractive, I reluctantly gave her my personal information. Why would a hair dresser need to know all that? I wondered, am I going to get telemarketing calls for the rest of my life? Is that how they keep the price so low? They’re not that sophisticated, the clerk couldn’t even spell my name (“Charles”). The clerk couldn’t hear any of my thoughts, so she typed up my details and told me to wait for the next available hair dresser.
By the time I got to a hair dresser, I was dying to know (pun intended), and almost as if she had read my thoughts, she explained “we record your number and address so we can write some notes about you, so the next time you visit we would know what your normal cut is, how often you come in and who your regular hair dresser is.” That was a big surprise. A little barber shop that serve hair cuts for $15 put that much effort into knowing their clients? They obviously try hard to have repeating customers, and that makes sense for a barber in a small town like Redmond. I don’t think any barber on the low price/style end in Sydney would do that, it makes me want to visit one in Seattle just to compare. The customer service here in places like restaurants and stores are much better than what I’ve experienced in Sydney, and this is just one of the examples.
This post has been sitting in my draft folder for a while, and it doesn’t look like it’s going to be finished any time soon, so here it is while it might still be useful:
I’ve been playing around with mongodb for a few days and as a hello world project, I decided to use it for the backend of an android app for Dinosaur comics. This was all fine on my dev machine, but when I tried to deploy it on my webhost, dreamhost, I got suggesting that the version of mongodb installed on dreamhost was too old. (The other piece of my backend was nodejs 2.5 and the mongodb driver for node, which seems to require the newer version of mongo). I went to the mongodb website and downloaded the pre-compiled binaries for mongodb, unfortunately they didn’t seem to work (it failed with core dump, incompatible architecture errors, and I haven’t investigated further than that). So I decided to try and compile from source.
To install the latest version of Mongodb (1.6.5 at the time of writing) on dreamhost VPS, first you need to install the dependencies:
These instructions apply to Debian 4.0 (etch), which is the current version of my VPS, yours may be higher. You can check which version of debian you’re using by typing
lsb_release -a
into the terminal.
The first thing I had to do was change the the package list to use a newer list of packages from what seems to be a defunct list. You might not have to do this if you’re using a more up to date version of debian.
Edit the package list in /etc/apt/sources.list to this:
deb http://archive.debian.org/debian etch main contrib non-free
deb http://debian.di.newdream.net/ etch ndn
deb http://archive.debian.org/debian-security etch/updates main contrib non-free
deb http://archive.debian.org/debian-volatile etch/volatile main contrib non-free
deb http://archive.debian.org/debian-backports etch-backports main contrib non-free
deb http://debian.dc-uoit.net/debian-multimedia/ etch main
Mongodb runs queries in javascript internally, so you’ll need a Javascript engine. Spider monkey will do. The version of spidermonkey in the debian packages were too old, so I had to compile my own version. You can build it by following these instructions:
g++ -o tools/sniffer.o -c -Wnon-virtual-dtor -fPIC -fno-strict-aliasing -ggdb -pthread -Wall -Wsign-compare -Wno-unknown-pragmas -Winvalid-pch -Werror -O3 -D_SCONS -DMONGO_EXPOSE_MACROS -DXP_UNIX -I. -I/home/chucknthem_admin/mongo tools/sniffer.cpp
tools/sniffer.cpp: In function ‘int main(int, char**)’:
tools/sniffer.cpp:503: error: invalid conversion from ‘const char*’ to ‘char*’
Fix it by doing this:
Go to tools/sniffer.cpp line 503 and change
pcap_bla(dev, blah)
to
pcap_bla(const_cast<char*>(dev), blah)
NOTES:
During compilation of either mongodb or spider monkey, you might run into some errors caused by missing libraries, I don’t remember exactly which ones I had to install, but feel free to ask me in the comments with the exact error you’re getting and I’ll try to help.
It seems to take a lot of RAM to compile Mongodb, so you might get an error like this:
g++: Internal error: Killed (program cc1plus)
Please submit a full bug report.
See for instructions.
For Debian GNU/Linux specific bug reporting instructions, see
.
That means that g++ was using too much memory and it was killed by the operating system. If you’re on a dreamhost VPS, then you can easily give yourself more RAM in the control panel (panel.dreamhost.com > VPS > Manage resources). I increased my RAM usage to 966mb up from 300mb and it compiled fine. So I would suggest the same.
As little as a month ago, if anyone asked me what phone to get, I would have told them to get an Android phone. Today, I’m not so sure. While I’m still a big Android fan, there are a few things missing or broken in Android that should have been there a long time ago.
1. Support for proxy settings for wireless networks. This wasn’t an issue until recently I started working for a company with a proxy authenticated wireless network. While there are ways to enable proxy settings on some rooted devices, they only work for simple proxy firewalls and doesn’t support authentication. While I work at a large software company with a mailing list of hundreds of self described Android enthusiasts, no one seems to have found a way to get on to the corporate wireless network consistently across devices. This has to be the most complained about missing feature on the Android since release. My friends with iPhones and Win7 Phones do not share my pain as they both have proxy settings built in. If Android is going to take any market share away from Blackberry users, this has to be a high priority feature since many corporate wireless networks, and even many university wireless networks use proxy authentication. It’s such a basic feature for a wireless device that most people I’ve met, and myself included are surprised that it doesn’t exist when we have to use it.
2. Fragmentation of devices. This isn’t an issue with the majority of developers with CRUD apps that don’t have fancy graphics or hardware requirements, but many developers of games and widgets complain about the lack of standardization. While most Android devices are powerful enough for most developers needs, they still have to support the lowest end devices because they’re the ones whose users are going to leave one star ratings when they discover that the app doesn’t work. iPhone is the most consistent device to develop for and despite Android numbers overtaking iPhone numbers in the US, it’s still by far the most profitable. The recently launched Win7 Mobile has put some very high requirements for handset manufacturers intending to run Win7 Mobile. This will ensure that developers will be able to spend more time creating powerful high quality apps and less time worrying about device compatibility. There’s no doubt in my mind that this decision was made after seeing the problems with Android, and after seeing the device for myself and what others have thought of it, this is Microsoft’s shot at coming back into the smart phone market after the massive failure with the Kin phone.
3. Fragmentation of markets. This is not yet a huge problem, but every few weeks, I hear an announcement of some new Android market that is going to be launched promising to be better than what Google offers. In the US, phone carriers have began launching their own markets and some even won’t ship devices with the Android market built in. Amazon recently announced their developer preview of their Android market that will be much more like Apples Appstore with an approval process and quality standards for apps. Handster recently contacted many Android developers about their Market which from the looks of it might eventually support some new business models for apps. This is not strictly a bad thing, Google has said that “Android is an open platform” and people can do what ever they want with it, and no doubt there will be a lot of innovation from third parties trying different business models, and app distribution models to see what sticks, but this will hurt the users who will be overrun with choice about where to get apps. Apples innovation with the AppStore simplified how people bought software for their phone, they put everything in one place to reduce the amount of time looking for software, and put a quality standard in place to ensure that users where at least getting quality apps with a consistent design. Android seems to be doing the opposite.
4. The sorry excuse for a web interface for the android market. During Google IO 2010 in May this year, it was announced that there will be a Android Webstore like the iTunes store for the iPhone where users could browse and purchase apps and have those apps installed automatically on your phone. 7 months later, there is no word of this webstore. The closes thing we have is AppBrain, a third party app aggregator and app with a subset of the features of what the android web store should have been, including click to install on your phone.
5. Spam apps and the lack of quality requirements for Android apps. The android market is flooded with spam, junk and porn apps. Just take a look at the “Just in” section and you’ll see what I mean. The barrier to entry for publishing an app is almost non-existent. It’s completely inline with Google’s culture of giving users the power to decide what’s best, but it also detrimental to user experience.
I expect many of these features will be added or fixed over time, but it’s frustrating to see how slow things are moving. While a few months isn’t a long time, and Android certainly has improved a lot over the last few months, it’s still slower than the pace I would expect Google with the best Software Engineers in the world to go. Google’s fast moving startup days are disappearing and with so many products on the market, they’re just beginning to turn into a slow moving but very profitable tech company joining the ranks of Microsoft and IBM. I miss the days when the “don’t be evil” Google was young and quirky where everything they did was golden. And while they’re still the best company in the world, they’re losing their midas touch and as a Google fan, I’m starting to lose hope.
This is a list of websites that I know of to help you get things done for a bit of money. I haven’t used any of them, but I’m sure it will be useful in the future.
Just learned about fractals in a lecture today, so I made a simple julia set fractal in javascript. It’s quite slow and it uses HTML5′s canvas, so you’ll need a decent browser.
I’m Charles, a thinker, programmer, and student. I like ideas and I like technology.
As a part of a goal to find my passion and purpose in life, this is my experimenting with writing ideas, rants, humour, and hopefully articles that are actually worth reading. Most of my writing documents things I’ve thought about or have found interesting, so I can find it later when I remember it again. It’s a diary, not about personal details because my life will bore you to death, rather about ideas, advice, technology and anything else I find useful or interesting.