Go Daddy is one of the largest, if not the largest, domain registrar. So it is that much unfortunate that they also support SOPA. The “carpet bombing” attack on piracy dubbed SOPA will most certainly wipe-out many legitimate businesses and gratis sites, not least freedom of speech and news organizations, including human, animal and consumer rights organizations that are sure to step on the toes of some giant corporations in due process. This is sure to put open-source software at risk as well. The broad brush that SOPA is will not hinder any party from unfairly claiming copyright infringement, promptly shutting down a competitor or whistle blower at an opportune time to protect their interests, leaving the receiving party scrambling in the legal-equivalent to quick sand.

I’m joining tens of thousands in boycotting Go Daddy and moving this domain to another, more freedom-loving, technology and internet friendly and, ultimately, sane registrar, at least as far as the future of the internet is concerned. I’ve already started transferring my domain to Namecheap.com (affiliate link).

If they don’t see that SOPA will slowly, but surely, stagnate the internet, then may be the boycott will make them. If the numbers are to be believed upwards of 35,000 domains have already transferred. At a nominal $7 annual fee, that’s already a significant chunk of cash lost annually. I expect many have dozens of domains and use some of the more advanced features such as SSL certificates, which is more revenue lost by the transfers. This move could easily cost companies supporting SOPA millions of dollars in potentially long-term, recurring money.

This isn’t an emotional reaction in the name of freedom and human rights, not just. Go Daddy is known to engage in dubious activities and it might be said that they had it coming. One of the more annoying of said activities is giving customers the impression that their domain is about to expire if not immediately renewed. The spam mails start hitting the mailbox 90 days before the expiry. While the warning is fair and welcome, 90 days isn’t exactly imminent in any sense. Of course once renewed, the remaining weeks or months to the actual deadline are lost, thereby shortening the effective period for which one pays. This kind of tactics don’t make the already high prices any more appealing. To add insult to injury, they have an almost weekly promotional spam that dilutes the expiry warning’s effectiveness. I for one learnt to ignore their mail, while having a mental note of when to renew my domain.

According to ZDNet, Go Daddy has reversed its support of SOPA. But as the ZDNet reporter put it “we now know that what really mattered in Go Daddy’s shift in policy wasn’t the legal or ethical issues; it was the old bottom line.”

Well, Go Daddy no more; welcome Namecheap!

(This site might go dark for a few hours during the transfer process which I hope to complete sometime before the 10th of January. I’m working hard to minimize the outage. Apologies for any unavailability or inconvenience.)

Update: Just found out that Bob Parsons, the CEO of Go Daddy group, happens to enjoy elephant hunting! He released a video showing and justifying the barbaric act of shooting and killing a defenseless animal.

Share
 

Haven’t we all written Fibonacci sequence generators, sorting and searching algorithms and a handful of data-structures while learning to program? What’s common in these problems is their simplicity. I almost said triviality, but there are nuances that the beginner will stumble in and, hopefully, learn from. (And isn’t that the whole point of the exercise anyway?)

Fibonacci is a great introduction to recursion. Sorting teaches us the fundamentals of algorithms, complexity and of course data-structures and searching. We learn that not all ways of organizing data are born equal. Linked lists have a leg over arrays some of the time, but their ranks are reversed at other times.

This is how we learn about our tools and how to use them and when. It’s the equivalent of painting fences. Without these mental gymnastics we’d have to open up textbooks and look up for “how to find duplicates in two sets” or wonder why the data is sometimes shuffled around, but not always (hint: dictionaries typically don’t preserve order, unless you use one that explicitly guarantees order).

The answer to “why is our product all of a sudden too slow and customers are complaining now when it was lightning fast for years?” isn’t in any textbook. However, if one assumes the customer data might have doubled, a seasoned programmer would first check for a quadratic algorithm (or worse) somewhere in the code-path.

While there is no doubt, at least in my mind, that it’s absolutely necessary to work out all these contrived problems, from writing a 4-operation calculator with an expression parser to solving wick wack woe, I think we should include a whole other genre of problems in our training kits.

The Unsolvables

There is a group of problems that, as far as we know, have no solutions. That is, the solution is known to be found only by brute force or an approximation exists using heuristics (basically trial-and-error or some form of genetic algorithm.) There is the obvious usual-suspects, the NP-Complete folk. But not only. There are algorithms that run in quadratic and polynomial time that aren’t practical beyond some size.

There is no better way to get a very real feel of what it means for an algorithm to run in quadratic time than to actually write the code and see how you age as your machine churns away hopelessly, all the while another algorithm with a lower complexity has just finished.

Take Quick sort for example. Implementing the textbook algorithm will work swiftly, that is, until you feed it sorted data. Multiplication using the school-method is simple and elegant, until you apply it to large numbers. Trying to optimize such a primitive algorithm is very instructive. It teaches you that it’s not about optimization; the complexity is inherent. Yet, we don’t use Merge sort with its O(n log n) worst case performance and default to Quick sort with its O(n2) worst case characteristic. This is not at all obvious to a beginner, and even for many experienced programmers. Theory and practice sometimes do part ways. And that’s yet another important lesson.

Without attempting to solve a travelling salesman problem or a knapsack problem we are in danger of never really understanding why complexity is important. Why some algorithms are hopeless and will get back to haunt you one day, while others seem to be stuck in their misery and can hardly be improved.

And what better way to understand how and, more importantly, why modern cryptography works than to try to factorize numbers? Searching for prime numbers is yet another long-time problem that only recently it was proved that primality testing is polynomial, and how is all that related to one-way functions.

There is also another purpose to this exercise. It’s not obvious where the difficulty of solving these unsolved problems is. At first sight almost anyone presented by such a problem will come up with some solution of sorts. It’s not until much later, and with much mental effort, that one does notice the errors of their ways. It might be a hidden complexity that they introduced in their algorithm while being oblivious to it that negated the gains they scored elsewhere. It might be that the obvious or straight-forward solution misses a very simple, but equally crucial, case. Or, it may be that their solution is broken in one way or another. Either way, it’s not enough to know about the problems, their status and move on. There is much to be learned from solving unsolved problems.

The Impossibles

But why stop there? Why stop at the travelling salesman or a variation of the knapsack problem? While we’re at it, let’s introduce non-computability and noncomputable functions.

I’m sure these topics are very well studied in some grad schools. But the average CS school undergrad would probably firmly believe the fastest growing functions are the exponential. (I still have to get a different answer during an interview.) Whatever happened to Busy Beavers? Apparently, a noncomputable can actually grow faster than any computable function! Now try to beat that in the department of slow algorithms.

Conclusion

I think it would be a great service to our industry if every once in a while the school assigns an unsolvable problem. Send the students home with a travelling salesman problem or two and ask them to bring in the numbers the next week. It’d prove much more instructive to see the 5-city problem solved in seconds while the 25-city…

And who knows, we might as well get a Dantzig moment! (Incidentally, he‘s the inventor of Simplex, the single most useful algorithm in optimization.)

Share
 

Few directors dare to leave the audience in complete darkness with a most eerie music and to do than not only once, but twice. György Ligeti‘s Atmospheres makes for an exclusive performance for the first full three minutes of one of the most audacious productions of the 20th century.

An Orion III, Pan Am's first Space Clipper, fe...

Image via Wikipedia

The movie isn’t a typical sci-fi. The slow pace, meticulously-setup scenes and larger-than-life photography takes the viewer’s breath away. Kubrick, a perfectionist in his own right, makes no compromises. The pace of the movie does perfect justice to the surreal, extravagant and colorful shots coupled with the moving music of Aram Khachaturian, Ligeti and Strauss. One can’t appreciate this work of art without first appreciating that the movie is the journey and not the finale.

Considering the stunning special effects in the movie and the human-like voice of HAL 9000, it’s quite surprising that virtually every single sci-fi before and since do not replicate this rather reasonable feat of inevitable progress. And this was done in 1968 no less. Instead, we’re left with robotic-sounding computers and other “smart” gadgets, even though some of them depict events centuries in the future. To add insult to injury, most of them simply do away with the difficulties and logistics of gravitation-free environments. Perhaps the latter is explained in pragmatic terms, but to their credit Kubrick and Clark don’t compromise on this point, instead they actually make for a great experience. The photography of the workout scene and all those involving walking about, be it to serve food on the moon-bus or to get into a shuttle, are simply worth every second on screen as did the multitudes of hours spent creating them. Of the scenes that truly standout in this regard are those where two people are standing perpendicular to each other going about their business undistributed.

No one better than Stanley Kubrick could take the masterpiece of Arthur C. Clark, yet another perfectionist, and do this good a job. Indeed, Kubrick personally must have had an appreciable influence on the development of the plot and story. Even then his work wouldn’t be complete without sharing credit for the screenplay with Clark.

Throughout the movie I suspected the music of the opening, moon-bus scene, intermission and of course the final scene were most probably that of Krzysztof Penderecki. Kubrick had made perfect use of Penderecki’s music his 1980′s The Shinning in addition to Ligeti’s Lontano, which, unbeknownst to me, was also used in the first radio series of The Hitchhiker’s Guide to the Galaxy, along with Melodien and Volumina, which I’ve listen to extensively. Penderecki’s music is no less unique and indeed eerie then that of Ligeti’s, which more than explains why some portions of the his cello concerto was used in The Excorcist, which unlike The Shinning I found lacking and somewhat ludicrous.

After finally watching the movie, I’d like to find time to read the book. The plot and themes touched in the book are simply much more profound than a movie could do justice too. Even at almost 150 minutes, the movie leaves the ending open to wild speculation and personal interpretation. Still, this is certainly one of those classics that not only sci-fi fans, but also those appreciative of grandiose and thoroughly beautiful cinematography would most certainly enjoy. Especially when watched on a large screen with a decent sound system.

Share
 

Some of us have to work a good 16 hours a day, or more. Some split this time between school and job, multiple jobs, job and hobby project or spend it on their one-and-only job or startup. After a while, waking up becomes a struggle. Disoriented, exhausted and sleep deprived. We work hard because we care. Because we want to make the best of our projects, be it personal, academic or professional. Here are some of things that I found improve this situation significantly when working on major projects for long periods. This isn’t be-all, end-all advice – there is no such thing. They are just good guidelines. I know, they are so simple and sound so obvious.

Disclaimer: I didn’t include exercise and other healthy activities. This isn’t medical or lifestyle advice. It’s just good notes to make the best of a major and important project. If this doesn’t work for you, don’t blame me.

Sleep

This is the single most important factor that can make or break. Get a good night sleep. It’s false economy to pull all-nighter and wake up late. Reverse it; sleep when you feel sleepy and wake up early. If you find it very hard to wake up and/or work, get as much done before sleep, but don’t overdo it. Try to improve your morning performance and shift your work hours towards the morning. Sure, sometimes we need to send some mail or prepare for a demo. Working for extended hours in those cases is probably fine, but make sure you make up for them soon. If possible, finish the absolute minimum before sleep and get the rest done in the morning. When we disrupt our sleep patterns by pulling all-nighters, it’s harder to make up for them.

The trick to good sleep is first and foremost to get in bed in time. Your body will give you the right cues, just pay attention. If you feel sleepy, go to bed, don’t wait 15 minutes to finish something. Be ready for it. Anticipate when your body will be ready to sleep, make sure you’ll be ready by then. Don’t do last-minute things like washing teeth, sending mails, setting up wake up alarms etc. right before stepping in bed. Get these done beforehand. If you miss that perfect time, your body will find it harder to get into deep sleep, which is the most regenerative type.

A sleepy mind with all the right answers will probably perform worse than an alert and fresh one with half the answers. Work hard only when you can afford being sleepy and slow. Never overwork before a big days like exams, interview, client meeting, project planning etc. Finish all the work at least 2 nights before the big day and make sure you get baby-sleep during the last couple of nights. Remember that our long-term memory needs deep sleep to accumulate new information. Last-night study will not only leave you sluggish and out of your zone during exam, but you won’t remember most of what you study a few hours later.

Exceptions are pretty much the norm. Plan for the long-term, not for every situation. Try to get an average of 7 hours of sleep per night during an average week. Figure out your natural average for yourself, it may be different. Sleeping also boosts our immune system.

Corollary

Alternatively, if you can’t fall asleep, don’t try hard. Either get some work done until you’re sleepy (at which point leave everything and go to bed,) or read a book in bed until you sleep (but don’t sleep with your glasses and lights on.) Don’t spend a couple of hours tossing and turning in bed, instead use that time to get something done. If your eyes are tired, try listening an audiobook or some music.

Eat

Nutrition comes next. When trying to meet a deadline we might skip a meal or two, get junk food or just go on coffee or coke. If you can plan your day, and you know it’s going to be a long one, make sure you make room for a good full-meal. If you can go out for lunch break, do so. You’ll be able to get a decent meal and give yourself a break. This will give you both physical energy and have a recreational effect. You’ll get back refreshed. Avoid going on bad diet for long periods of time. Minimize coffee if possible. Drink some fresh juice, tea, hot/cold chocolate and other beverages, including water. Caffeine, like alcohol, is diuretic. It dehydrates your body. It’s effect in increasing alertness doesn’t last very long either.

Make sure you don’t go on an empty stomach to important meetings. Being hungry makes most of us edgy and easy to get irritated. It’ll probably make you impatient as well, which isn’t a trait you want to have when making critical decisions.

Make sure your body is getting essential nutrients. Your immune system is at its weakest when stressed and sleep-deprived. Make sure you’re not malnourished as well when going on a spree. So the-daily-pizza has to make room for other -more healthy- meals. Lunch breaks with nutritious meals will more than pay back when you don’t get bed ridden for a few days on end, or drag yourself to work for a couple of weeks with a red runny nose, when the flu season hits.

Corollary

Don’t over eat! Not being hungry doesn’t mean having a 110% full stomach either. This is especially true if you have to do mental and/or physical activity (as opposed to mechanical and tedious work.) Eating too much will get you sluggish and sleepy. Moderation is the key.

Don’t Drink (too much)

It’s well known that a bit of drink after a long day is a good relaxant. This works best with soft liquors like wine, martini, champagne and beer in small quantities. Consume hard liquor or excessive soft ones at your peril. Alcohol is actually known to disrupt our sleep patterns. It’ll dehydrate you, leaving you thirsty all night and give you a nice buzzing headache in the morning. So not only you won’t get a good deep sleep, but you’ll wake up tired and hungover. The best way to use alcohol as a relaxant is, after dinning, to drink no more than 100-150ml (half a cup) and, once you feel a bit buzzed, go to bed. The difference between half a beer and a full bottle will probably cost you the next day.

If you must, drink on Fridays or when you can afford to take the next day off. But don’t drink like there’s no tomorrow.

Take a Break

During a long day as well as during a long project, make sure you get refreshing power breaks. The lunch break outside the office is one such. Try to do something unrelated, even if on the same project or subject. I take coffee breaks (but I avoid coffee as such) when I get stuck or between tasks. This forces me to get up and stretch my muscles as well as socialize. The chances that I’ll be distracted are extremely high, which is the point of the break. However, make sure you won’t be dragged into something extended. Limit the break to 15-20 minutes max but typically 10. Socializing in person is a great way to do this, but don’t get into a global warming argument! Even talking about work will be refreshing. I tend to read a few pages from a non-technical book like popular science. Watching a funny sketch, video clip or reading a blog article is also a good way to get away.

Take power-naps if it’s your thing whenever you can. For some people who like napping even dozing off for 10 minutes during the day gives them a great boost. If you can’t nap, try stretching on a sofa and relax. Reading or listening chill music can also help you get a grip during a hectic day.

Every so often, take an early leave or a day off. Go do something completely different and unlike your daily habit. Even if you stay-in and sleep or go for a walk and watch a movie, you’ll get back to your project much more refreshed and enthused.

Corollary

Be wary of getting out of your zone. If you’re making progress and things are rolling like a well-oiled machine, don’t stop! In fact, avoid distractions at all cost. Being in the zone is when we’re most efficient and productive. Switch your IM to “Busy” or “Don’t disturb” status. Check email and get back to colleagues later. Make it clear when you don’t want to be interrupted unless the building is collapsing so your colleagues will be mindful. When taking breaks or power-naps, be very aware of the time. Set alarms and go back to work when your time is up. If you’re too tired to work, then either go get some sleep, discuss work-related topics or do some other mentally undemanding and mechanical task. Any progress is better then idle chatter or web surfing (aka watching funny pics.)

Don’t Work Too Hard

In some professions keeping up with industry can be critical for success. Burying one’s head in some project for extended time might not be the wisest of decisions. Don’t neglect the rest of the world. Working too hard on your project will probably have diminishing returns beyond some point anyway. Instead, try to keep your proverbial finger on the trends pulse. Spend some time reading the news, read on similar projects, success and failure stories, blogs with insightful technical and non-technical information. Look for smart ways to take shortcuts and reuse other successful platforms or components. Look for good patterns and stories from people like yourself. Keep an eye on competition, both existing and potential. But don’t overwhelm yourself with news and obsessive competition tracking. Get back to your project and get focused.

Working too hard may not be the most efficient way to make a successful project. Be thoughtful of the alternatives. Having a well-rested and fresh mind will certainly help with this.

Bottom-line (TL;DR)

  • Sleep well: makes you fresh, active and in your zone. But if you can’t sleep, get some work done.
  • Eat well: replenish your energy and nutrients. But don’t overeat.
  • Don’t drink: not when you have to work the next day. But half a pint before sleep may help.
  • Take a break: refresh and clear your mind. But don’t get carried away.
  • Don’t work too hard: keep updated on news, competition and advice from others. But don’t overwhelm yourself.
Share
 

We live in a time where communication is evermore effortless and taken for granted. So much so, that the audience is impatient to get to the point and the authors need say more in less.

I learned this the hard way. My most recent article, which weighed in at ~2200 words, was quickly buried when submitted on a social site. I could tell it was the length had something to do with it. I wasted no time; I shredded 2/3rd of the article and came up with an abridged version. At 800+ words, at least one person complained that it’s not abridged enough. Yet, where the original got less than 40 views, the abridged version got over 2000 hits in the first day and translated into Japanese.

This is very unfortunate. Because, at one extreme, one should just state their conclusions as tersely as possible, and on the other, one should write a book-load to make well-founded arguments. The latter is when the topic you’re trying to tackle is complicated, controversial, highly-misunderstood or all of the above. You have no much choice but to go at length stating where you’re coming from and where your arguments lead. What about the other extreme? When can or should one be terse? Hard to say, but one thing is for sure: being concise and articulate are exceedingly difficult.

Yet, fortunately, there are those who appreciate a well fleshed-out article. The same article, unabridged, seems to have made the front page of DZone.com, where the article is republished, and from there over 600 hits followed to this site (2300 more on dzone.)

But how long is too long? Turns out it depends on the subject and the target audience. On the web, I suspect most typically want to get the gist in under 400 words. Should every lengthy article get an abridged version? Probably not. But if one wants to be heard, one should be mindful of their target audience. You can have the most insightful things to say, yet if no one has the patience to listen, then you might as well do something different… or rather, do it differently.

Share
QR Code Business Card