Then, as we were nearing the summer, I was faced with a dilemma: either get an internship or work on my own projects. I had collected so many ideas during my school term (that I send to my evernote db with an #idea tag when inspiration strikes), that I really didn’t know which way to go. After some deliberation, I thought I’ll go down the projects path, and in order to prevent any regret from arising in the future, I was to take 2 intensive summer courses to move ahead in my cs minor. The day I was done with my last exam in May 2011, I started full steam on my personal projects. I had many things to ramp up on to bring my ideas to fruition.
My first idea was a framework aggregating all the book quotes I’ve been collecting from my readings since 2009. I wanted to create a way to allow me to remind myself of these memorable passages, and to share them with the world. But I had problem. I had never done serious web development before. I thus spent about two weeks ramping up on ROR by, among other things, completing the hands on tutorial in Agile Web Development with Rails (which walks you through the implementation of an online store) and tinkering with Ruby. Two weeks later, I was wiring my framework, and not too long after, the Wisbit app was born.
I look back fondly on this project even though it didn’t get the traction I was hoping it’d get. In fact, it is this very fact that makes me realize how great of a learning experience it was. Besides the technical knowledge gained, I learned that it is of utmost import to ascertain a market before building anything. Ironically, I had previously written a piece about the importance for an independent software developer to set their priorities right: Market->Marketing->Aesthetics->Functionality. If my goal was to indeed get traction, then I had committed the capital mistake of focusing on functionality before gauging the market. Nonetheless, I still use the Wisbit app today to refresh my memory as to the great content of certain books I’ve read.
I had forgotten to mention something. Even after the end of my “Intro to CS” course, I carried over my habit of making videos to my summer readings. I would read a chapter in a book about something neat in CS (mainly challenges), and I would make a video about it. Then at some point in the summer, in the midst of my courses and learning endeavours, I decided to “capitalize” on the work I had already done (by that time I had a number of videos covering many topics in CS). I was going to build an app that would allow people to follow their progress in completing the CS videos. But I wasn’t going to make my earlier mistake. My plans were to ensure that there were at least two or three dozen people interested in the idea before I move on to implementation. So I setup a landing page explaining my idea (helping myself to a themeforest template), and put it up on Hacker News to get their feedback (which I find to be the most supportive, yet bluntly sincere feedback one could get).
The response was phenomenal. Little did I know that I had tapped into a market that has been hungering for a long time. Despite having nothing to show for my videos on the page (except for the keeners who took the time to dig further to uncover my work), people readily subscribed, tweeted and liked. It seemed clear to me then that the online field of education (especially in relation to topics that touch on programming) is one with great potential today. In fact, just recently, we heard of Codecademy’s recent foray into that market, and how viral they went, racking up 200k users in 72 hours (really looking forward to more of their lessons, especially advanced ones). The niche I was targeting was slightly different (computer science as opposed to sheer programming), but it still got me more interest than I had ever anticipated.
Now that I had confirmed that there was indeed a demand for the idea, I got to work and built hackercs.com as my first Django app. I already knew Python, so I quickly got to reading Django documentation (which, incidently, seems scarcer than ROR’s but I’ll leave that to another post) and worked on my app in parallel. I adopted a simple strategy to face that project which appeared to be more daunting than it really was: write down all the specs I’d like to eventually have, order them by priority, start with the basics, get something out, and then add features/fix bugs at my own pace.
I spent about 3 weeks designing and writing it up, and it’s been live for about a month already. I realize I have much to learn before my videos can reach the quality of the Khan Academy, and I’m always looking for suggestions for improvement (app-wise and video-wise). But my passion to make those videos has never abated along the way, and I really encourage anyone who feels they have something to offer in that field to get involved. There are countless opportunities arising, and if you feel that none of them suits your inclinations, it appears to be quite easy to establish yourself in that market (if an EE student can do it, I think many others can).
Right now, I’m winding down and getting ready for my upcoming and final school term at McGill (and applying to jobs along the way). I’m hoping to take two more CS courses to wrap up my minor, and that’ll be more fodder for videos on Hacker CS (expect more advanced videos on data structures, algorithms and more).
Your input (of all kind) has been extremely valuable to me, and I feel that I owe much of my inspiration to the great community at Hacker News (had it not been for their encouragements with my first post, this wouldn’t have panned out). I realize I’m still a novice in this field, but I hope that my passion will carry me to greater heights with Hacker CS. If there’s anything to take away from this, then it is that the time well spent searching for your calling and its intersection with the needs of people is really worth the investment.
The story of Hacker CS, like the story of many projects, starts with a passion. In this case, it was the passion that I had for computer science. I hope it’ll serve to show you that when you find what you truly love to do, excellence and achievement will naturally flow from there. There’s a lot to my background that leads to the facts outlined in the following paragraphs, but I’m starting from my work experience at Research in Motion (RIM) as a software developer because I feel that this is where the seed was originally sowed.
If you’re using GET to send a very long request to your apache server (a request with a URL exceeding 8190 bytes in length), then you probably got an error along those lines: Request-URI too large
The requested URL's length exceeds the capacity limit for the server
You may get around this error by increasing the LimitRequestLine parameter in the configurations of your server. The steps to do this are:
Modify /etc/apache2/httpd.conf or /etc/apache/httpd.conf to include the following line LimitRequestLine 1000000 where 1000000 becomes your new URL length limit.
I had a web app hosted on a local server in my Ubuntu Virtual Box VM and I needed to access it from my Windows Host machine. There are two ways I found to go about it:
1. Place both guest and host on the same private network by using a bridged network adapter instead of NAT (VM Settings->Network->Adapter Attached to Bridged Adapter). Then use your VM’s ip to gain access to it.
2. Use NAT, and enable port forwarding so that Virtual Box starts routing all traffic directed to your Host machine’s localhost to the guest machine (i.e. when I visit my /localhost on Windows (host), I will instead be directed to a port on Ubuntu (guest) which will handle the request).
cd to to your Virtual Box directory, and run this command:
I’m currently working on a web app project to create a Natural-Language-based File Manager that is dubbed the Blackhole. It would consist of a UI allowing a user to create text files and drag and drop them onto a “blackhole” which would store them along with associated identifying information. The user would then be able to recall those files using Natural Language and with no concern whatsoever for file locations, directories, or even filenames. All they have to do is type out in natural language what they recall of the file, or even cues such as the time of creation/modification, and the web app would pull out the appropriate file (or offer suggestions), allowing the user to quickly continue editing the file from where they left off. Read more…
It is not uncommon today to meet competent and enthusiastic software developers who, despite seemingly possessing every single quality required to create good software, miserably fail at generating money with their products. The untrained eye may be tempted to quickly jump to the conclusion that the skills of the said developers must be lacking, but one who’s read the book “Start Small, Stay Small: A Developer’s Guide to Launching a Startup” by Rob Walling will hold a totally different opinion about the matter.
Most software start-ups fail (in the financial realm), not because of poor or inefficient code, or even because of the absence of key features in their product, but rather mainly because a market does not exist for their software. It is one thing to have the most beautiful, well-written program, but if it does not solve anyone’s problem to the point where they’d be willing to pay for it (and to pay handsomely enough to justify the efforts invested), then this program is a failure by most standards (and especially from a business standpoint). Now before you jump to my neck, such programs can still have some value (educational value maybe, think assignments), but we’re discussing the real world here.
As an entrepreneur wishing to market your applications, it is important that you perform a study of the market before embarking on any software venture. There are tons of strategies and techniques to ascertain that there exists a true unmet need for your idea. So although it may be tempting to quickly delve into the code (the most enjoyable part, no doubt), it is wiser to first carefully study the market and make sure that the need justifies the effort/money you will be investing in the work.
Moreover, once you’ve verified that the need is present, your next move should be to plan a marketing strategy. Yes, even before you have one line of code written, your focus should be about the market and how you’ll manage to reach it. Think back to Bill Gates and how he struck a deal with IBM despite not yet owning the OS that he promised to deliver. I’m not really advocating this type of behaviour, but it just goes to show you how critical it is that you’ve not only found your user-base, but that you’ve planned out and maybe even established the communication channels with it. Here again, a number of strategies exist to create contact with your prospective customers, and you will find some of them in Walling’s book.
Now comes the beauty part. But not the beauty of the code; this should be the least of your concerns at this point. The beauty I refer to here is that of your product. Once you know that someone is ready to buy your software, and that you’ve established contact with them; now you must think about making your product appealing to their eyes. Most hackers will probably vehemently disagree with me on this. And to be honest, I quite sympathize with them. If you are writing your software for hackers, then maybe aesthetics shouldn’t be something you care about. In fact, the entire article may not apply to them. I’m speaking of ordinary users who, if we go by the success of Apple’s eye-candy products, seem to accord a great deal of importance to the feel/look of anything they buy. So it’s likely that your GUI will need a good amount of work, and the time to plan it out is now.
Finally, once you have your market guaranteed, your marketing strategy planned out, and the look of your product envisioned, it is time to delve into the code. The final step is to implement all the necessary features to make your software a success in addressing the needs you’ve identified in your users. This is also the part where, as an engineer, you get to have the most fun, so enjoy!
By way of summary, here are the ordered steps to follow if you want to successfully sell your software: market, marketing, aesthetics and finally functionality. Don’t commit the oft-repeated mistake of reversing the order of operations, i.e. developing your product, then attempting to find a market for it. And by far, the most important of the four steps is the first one: to identify the right market. In fact, as history has often shown us, you may get away with a mediocre product and make tons of money if you find the right niche whose burning needs have been hitherto unmet. If there’s no competition, and the need abounds, then your success is almost guaranteed (albeit for a very little while).