Pagehop – Your Terminal for the Web

PageHop logo

Developers are weird creatures. We always want to optimize everything and make sure that we lose as little time as possible while doing our job. Our thought usually goes faster than a computer, so we get irritated when we need to wait or spend clicks and keystrokes to do simple things like browsing the web, or opening applications. This is the reason text editors like Vim are extremely popular. They are a mess by modern UX standards, and using them feels like going back in time, but because they save so much time and make automation possible, people still love them.

Today, I stumbled upon another automation tool, which tries to trim more seconds from a developer’s precious time – it’s called Pagehop. Pagehop lets you navigate the web without opening your web browser. It lets you type commands and take action on the results in a simple text box. Any user of Alfred or Vim will feel right at home. I’ve been a user of Alfred for a long time now, and I’ve grown to love it. It’s the start of everything I do on my Mac, weather that would be opening an application or searching Google. But although Alfred has multiple extensions – it only goes so far. Most of the stuff it can do is limited to offline applications. Searching Google seems to be all that falls into its scope when doing things online.

Pagehop is Alfred for the web. Not only can you open web pages with it, but it also lets you navigate multiple links, or search the content of each result. Let’s see how that works.

Once installed, Pagehop can be invoked by pressing Ctrl-Option-Space on your Mac. A textbox appears. You can do a simple Google search by typing “g <your search term>”. Let’s try it by searching for the React javascript framework.

Google Search for React in PageHop

The results of the search are shown immediately below the text box. Pressing Enter would take you to the selected result, but you can also go through them, or type further to filter more. Let’s say that we actually want the React documentation rather than the homepage. We can extend our search by typing “:l docs”.

Search React Links and go directly to documentation

The “:l” tells Pagehop that we want to go through all Links in the result, and search for the string “docs”. Pressing Enter takes us directly to the documentation page. This is where Pagehop feels much more advanced than Alfred. While in Alfred you can tab through the different results, Pagehop lets you use issue custom commands. Apart from selecting links, it also lets you do fuzzy search, regex search or search through the URLs rather than text. It’s like having a terminal for the web. You can call commands, and pass them options and arguments.

Of course googling isn’t the only thing Pagehop can do. It has a number of built-in recipes. A recipe is just a different source of information that Pagehop can pull data from. There are built-in recipes for Google, Bing, DuckDuckGo, Wikipedia, MDN, HackerNews, StackOverflow, and others. You can list all recipes by typing “allr”. Pagehop lets you search documentation or read developer news just by typing, instead of opening your browser. Of course once you are done with your search, Pagehop opens the result in your default browser so you can read at peace.

I already mentioned Vim, and developer’s love for it has caused the creation of tools like Vimium – a browser plugin which lets you navigate Chrome using the Vim shortcuts. Pagehop lets you do something similar without even opening your browser. It provides the simplicity of Alfred combined with the power of Vim to navigate anything with a keyboard.

But the best news of all is that Pagehop lets you extend it with third-party recipes and tools. If recipes are the sources of information, tools are the commands that you can pass to each recipe. If you know JavaScript, and you have an idea for a new recipe that may fit your personal development workflow, you can go through the developer documentation to learn how new recipes are created.

I’ve only been playing with Pagehop for an evening, but it feels wonderful and I suspect that any automation geek will feel at home. Go play around with it.

On Gender Equality

We can do it

Forgive me for having the unpopular viewpoint here, but I think that instead of trying to be equal to men, women should concentrate on being better… women. Gender equality has been blown out of proportion and I am failing to see why. It’s become the new racism – an issue that turns into a taboo – and everyone starts avoiding talks about it, just because it is safer.

Before you call me sexist, let me say that I adore women. I respect them and love them. But I hate it when they want to be men just for the sake of it. Instead, I would prefer if they embrace their femininity and even use it to their own advantage.

I grew up in a country where men have historically been sexist and dominating. Yet this hasn’t prevented women from being happy or successful. You know what else, Bulgarian women have been consistently voted in the top places as the most beautiful. I think Bulgaria is a much happier place than the US in terms of gender. The occasional sexist comment doesn’t provoke lawsuits and it is generally understood for what it means – a joke. I am not a fan of taking it to extremes and hurting women, but I am not a fan of making a fuss and forbidding jokes either. And I can say this, because I am an adult human who can think for himself. I have my common sense. When you create a law about gender discrimination, you rob people of the chance to have their own interpretation. You can do it to be on the safe side, but that makes everyone doubt other people’s intention and destroys trust. And trust is what lets people respect each other in the first place. Don’t force opinions. Let people communicate and resolve problems between them before making them public.

What provoked this outpour of thought is that today, Github’s co-founder resigned over a harassment scandal. There is absolutely no evidence about anything, but his reputation sustained enough damage and he couldn’t go on. I think that the publicity behind the whole story got in the way and he lost his position as a result. He shouldn’t have. The issue should have been resolved inside the company, rather than on the pages of newspapers and blogs. I respect Julie Ann Horvath for her work, but I hate her for starting this. She has damaged the reputation of one of the most loved companies and instead of solving her personal problem, she has used media as a weapon. Despite there being no evidence on the subject, and no matter if she is right or wrong, I still think less of her for bringing this public.

It seems to me that in our modern world, success and professionalism has been portrayed by the media as male-looking. And many women are mistakenly taking this as a sign that they should behave like men. This is hurting women and is hurting the image of success. One part of the problem is that the western world largely defines success as power. If you are not powerful, then you have not succeeded. I think this is plainly wrong. Success can be much more than that, but the most important thing is that it’s different for everyone. Find your own version and then make it happen, but don’t try to turn into the widely accepted powerful business executive only because the media loves it.

There have been a number of studies measuring the ratio of men to women in tech. Why even try to suggest that those numbers should be equal? Let people choose what they want to do. Let others appreciate the choice they’ve made and make sure that everyone respects them, no matter what their profession. If women want to be in tech – fine. Just don’t force them to go. Why isn’t anyone trying to solve the problem of not having enough male nurses? Because it doesn’t make sense, unless men want to be nurses. It seems to me we are trying to fight the natural order of things when we should be spending our time on more important problems. Widespread equality doesn’t exist. We have a number of examples of what happens when you try to force it.

Dear women, the media is trying to paint a picture of abuse and make you think that men think of you as inferior. I can assure you that most men in the west don’t. They love you, want to be with you, to work with you, to respect you and to share their life with you. Instead of trying to be equal to them, why not try to be a better woman? I would respect you much more if you are striving to be Marylin Monroe than Hilary Clinton. Marilyn is just more likeable. And even if you want Hilary’s success, go for it. Not because it is considered “successful”, but because that’s what you want. Just don’t turn into a man while chasing it. 

Vinyl 101

My record player setup

Today probably everyone can say that they listen to a lot of music. If you cannot say so, go away. You are not the type of person who should be reading my rants :). So a big part of our entertainment is listening to the sounds produced by celebrities we love. And no wonder all performers become celebrities. They touch us with their creativity in a way nothing else can. By choosing whose music we listen to, we make up our identity. It is part of who we are.

Nevertheless, some people have a more special relationship with music. I think I am one of those people. It forms such a big chunk of the things that are important to me, that I don’t think I would have existed without music. Anyway, that being said, I am inclined to do things that normal people don’t usually do. Things like spending money on physical CDs when everyone around you is pirating even single songs. Or taking whole evenings to search for album art and properly tag and categorize your mp3 collection. And although those things make my relationship with music physical and unique, they are never enough. So I’ve discovered one more totally unnecessary black hole where I can throw my money – buying vinyl LPs.

IMG_3194

LPs are those large black discs that maybe your parents mentioned or even owned. They look like large black CDs, but have very miniature grooves on them and are listened to by playing them on a turntable. A turntable is a circular platter that rotates. It also has an arm with a needle at the end which magically outputs music when it touches the spinning LP record.

Now that we’re done with the definitions for the kids, let me explain why I am crazy enough to spend money on such archaic things. There may be several reasons that you’d want to start listening to analogue vinyl.

  1. Someone told you that vinyl sounds better than any other medium (including CDs)
  2. You are a DJ and you want to make those scratchy sounds
  3. You hate technology and digital stuff. You dream of going back to everything physical in nature
  4. You’ve gone insane

My choice was formed partly because of all the above, according to the following distribution:

  1. 20%
  2. 0%
  3. 30%
  4. 50%

Now, I am not even trying to explain number 4, but I think I can rationalise the rest at least a little.

Vinyl sounds better than everything else

The thinking going behind this one is the same as in situations where you spend 500 pounds (see, I am thinking British already) for a bottle of wine. Or, as another example, cases when you pay 300 pounds for a Burberry scarf, instead of 20 for a normal one. In other words, you are so obsessed with originality, quality and purity, that you’re willing to go the extra 80% cost, to get the extra 20% difference. Or more like 95% : 5%.  Now, some purists are saying that vinyl sounds awesome. They talk about warmth, hi-fidelity, natural sound and other fancy words. They are telling you that everything digital loses some of the soul of a recording. Although there is a scientific explanation for this, most humans are not able to hear any differences in compressed formats, let alone lossless digital formats like CDs and FLAC. So although I wanted to hear what could happen, this wasn’t the main reason.

DJ parties and scratching

DJ scratching on a turntable

I am not a fan of any style of music involving DJs. For me they are just publicity junkies who want to appear creative, but are not willing to put in effort and learn any musical instrument. This is a discussion for another time, but let’s say my dive into turntables and records has nothing to do with DJs.

Building a physical relationship with your music

Now this is where I was sold. Being a huge music aficionado, I feel like being on drugs in each situation where I am touching, looking at or communicating about music-related stuff. Yes, I said “aficionado”. I am trying to sprinkle some non-understandable words to appear knowledgeable and hip. Anyway, I am the type of person buying merchandise after concerts, wearing band T-shirts, buying posters, etc. I want physical stuff to help me communicate my passion for music. That being said, it’s hard to touch MP3s in your computer. One of the reasons I started buying CDs. The thing is, though, that vinyl records are larger, allow for more album art, are physically interacting with your turntable, and just plainly look better. I was sold.

Clapton LP Truckfighters LP Stevie Wonder LP

There are many more facts about vinyl that you may or may not know. These are not reasons to start buying them, but may have made the music world what it is today more than you think. The LP (long-playing) vinyl format is what ushered the music industry into the album era. Before LPs existed, there was no way to record a whole album on anything small enough to be practical. Other record formats could only hold 1-2 songs per record. Since LPs allowed artists to distribute music 10 songs at a time (more or less), they started recording whole themes and ideas formed by multiple songs. The LP created the music album as we know it today.

Here is the moment to mention another thing about albums. Although nowadays this may be lost to many, artists actually think about how to arrange the order of the songs in an album. They intend you to listen to the whole thing at once because that’s the way they created it. If you take specific songs out, you are missing out the whole idea. This was the reason many artists objected when iTunes started selling single songs for $1. With digital players and formats, it is very easy to switch to the next song when you are listening to music. Vinyl makes this a little bit harder, so usually what you do is play a record from start to finish. This gets you as close to the artist intention as possible.

So all I’ve said may not be that important to you, but it is for me. Vinyl records have made music what it is today. They allowed artists to scale their distribution and reach millions reliably. They started a revolution of awesomeness which has continued in the music industry until today. And although there may be easier ways for you to listen to music, I am the person who is willing to pay my respect to vinyl and indulge in the physicality of it for no sane reason.

I have just completed my setup. I bought a turntable, an amp and speakers and already collected my first records. You need all those things to start listening to vinyl, and although for any meaningful quality it requires quite a budget, for me it’s worth it. If you decide to go into it, just make sure that you do enough research and don’t buy a turntable that looks good, but will ruin your records. Living in London helps quite a lot. There are numerous vintage record shops where you can browse for hours in search of your favourite artists. And when tired of everything else, that’s what I’ll do.

Photo credits: The DJ photo is from http://www.flickr.com/photos/djcheff/5438605567. All other photos are the author’s.

Moving

London panorama

It’s done. I moved to London. I still cannot comprehend it fully, but it happened. Two months ago I was still a Bulgarian in Sofia, going about his daily life. Now I am in the UK, I have a job and an apartment (flat, pardon me), and I am writing this in my new bedroom.

This is an attempt, rough and unedited, to put my thoughts on paper and maybe try to understand what happened. Why did I move? The truth is, I don’t know. I desperately needed a change. I had been working for the same (awesome) company for 5 years. I knew that I wanted to experience more of the world, but it would almost certainly mean that I had to put up with some unpleasant stuff and lose a lot. Change is hard. Maybe that’s why the British are not so fond of it, but it is necessary. Like they say – to make an omelette, you have to break some eggs. In the end, I am glad that I decided to move. Now I can at least say that I have tried and if it doesn’t work out for me, I will know why. Although the way it looks for now – it is going to work out.

I loved my life in Sofia. I had a job which allowed me to live carelessly. I was doing better than the average Bulgarian. I was out all the time with the friends I loved (and still love). I had time for guitar, I went snowboarding in the winter, went to the seaside for the summer where all the action is. I could visit my family whenever I wanted to, just a 2-hour drive away in my first self-bought car. But in a little corner in my mind I knew that I wasn’t getting everything I wanted. While I was going about my daily stuff, I couldn’t help but notice the misery and bad stuff around me. I couldn’t stay blind for the unimaginable corruption of the politicians which was becoming so widespread that everyone just accepted it. I was getting the feeling that the Bulgarian nation was just learning to live with the cancer that it had. It had switched from fighting to acceptance.

Then the protests happened. Hope. There were still people in my home country who cared and wanted to live a normal life like most 21-century human beings. This was like a ray of sunlight coming from out of nowhere in our dark basement. I grabbed onto it like it was the last thing that could save me. I was there when I could, walking the streets with the rest of the hard working people who’d had enough. For 6 months we stood on the streets standing up for what we thought was right. And nothing happened. The government stepped on the brakes, but instead of shifting into reverse and doing the right thing, they went around and still did what they’d planned, in secrecy.

There were, of course, the poets of the revolution, who were in the media all the time shouting about how this was the birth of the Bulgarian civil society, the beginning of a new era. But the corrupt were still in parliament, spending our money and the poor and uneducated were still voting for them in return for a 20 leva bill. Bulgaria had cancer, and we were treating it for sunburn. Worse, we couldn’t even agree what the actual disease was.

The education was becoming less and less relevant. More people were getting degrees, but there were less qualified workers. The national debt was increasing and someone would have to pay it afterwards. Everything was done without thinking about the cost and the next generations would have to just swallow it and deal with it.

Would I want to live in a society like this? No, I wouldn’t. Would I want my children to live in it? Of course not. Would I pay the price of losing contact with my closest people to try and fix my life for good? This was the question which had been bugging me for at least a year, and the hardest one to answer. And although I don’t know the answer to this moment, I am now in London trying to move on.

From what I have written it may seem like it was all a question of politics. It was not. There wasn’t just a single reason for my move. It wasn’t the dirty streets or the economic climate. It definitely wasn’t just the government. After all, I was doing fine despite their wrongdoing. It wasn’t just the job. I had a wonderful job, my colleagues were my friends and it payed generously. I wanted more opportunity, and wanted to do something different. I wanted to learn more, but I was still happy. Maybe that’s what made my choice so hard. I was happy the whole time and there wasn’t a single specific thing which was driving me mad to the point of giving up. But all these reasons, by their powers combined, created this Captain Dead End situation which felt like living in an artificial aquarium. I felt like a gold fish, which was doing better than the regular fish, but it was still in the same aquarium, being a prisoner. It had limits to what it could do, because it had already done what’s possible in this local environment. So I jumped out, hoping to reach the ocean. I am currently somewhere on land, where it feels foreign, but I seem to have caught some stream which allows me to breathe and is carrying me somewhere better.

London seems great. I have experienced only good things so far, and none of the bad. I haven’t been mugged, but I have gone through the awful process of finding an apartment (flat, that is. dammit). I have seen Camden, and Brick Lane market, and work seems to be starting off wonderfully. I miss everyone in Sofia, I miss my guitar, but I am starting to feel good. Let’s hope it keeps getting better and better.

I have a ton of things to explore. I have plenty of the best clubs in the world. There is also plenty of history waiting. There are startup meetups, bars, trains, castles, bakeries, restaurants, streets, graffiti, concerts, galleries, people. I am looking forward to all that. Wish me luck.

(Photo credits: http://www.flickr.com/photos/38181284@N06/8697705007/)

The End of “var that = this” – Arrow Functions in ECMAScript 6 Are Awesome

JavaScript has taken off. If you are a web developer, you have probably noticed the trend. In the last couple of years the language has seen a tremendous growth in adoption and tools. The community has created some awesome things, among which are client MV* frameworks like Backbone and AngularJS, and also server tools like node.js. The future seems bright for JavaScript and if you are just starting to learn web development, make sure that you pay attention.

I was looking through the new stuff introduced in the latest specification for ECMAScript 6, which is the official standardized name for JavaScript. This new specification is still in development and there’s no browser support yet, but it introduces some very interesting changes. Today I want to focus on only one of them, namely – arrow functions. Arrow functions is a new syntax for declaring functions in JavaScript, but not only that. It also redefines the meaning of this . We will see why this is so good in a moment, but first let’s talk about the syntax.

Arrow Function Syntax

A normal JS function is declared like this:

In arrow function syntax, the same code can be translated as follows:

As you have already guessed from the above example, arrow functions start with the list of parameters in brackets, followed by a double arrow (=>), and then an expression which returns the value of the function. In the above case the function multiplies the two parameters passed to it. However, you are not limited to only using a single statement. You can also write a function which executes multiple statements, as long as it returns only one value. In that case, we need to enclose the multiple statements in brackets.

You may be thinking that this is not much different from the regular function syntax and it doesn’t help you a lot. Well, if you have very simple functions with only 1 parameter and a single return statement, things look much simpler.

As you can see, we have omitted the braces which enclose the parameter list, as well as the curly brackets enclosing the statements. When there’s just one function parameter and one return statement, they are optional. This saves a lot of writing. But the biggest advantage it gives over regular function syntax is how it redefines the meaning of the  this keyword.

The meaning of “this”

When you use the this keyword inside a JavaScript function, its value depends on how the function was called, unlike other object-oriented languages where this always points to the current object instance. In a global function, this refers to the window object:

When your function is a member of an object, then this points to the object itself.

If the function handles some DOM event in the web page, then this points to the DOM element which triggered the event.

For more info on the different behavior of  this , you can read this great article on MDN: this

Of course today most developers are not writing event handlers and global functions like the above examples. People have started using the module pattern to introduce better structure to their applications. They are using immediately invoked function expressions and use the concept of closures to emulate encapsulation in JavaScript objects and block access to some of the members. If you are not using these, you should be.

Note: If you are not familiar with the module pattern and closures, please go ahead and read about those first. These articles are a good starting point:

In order to illustrate how arrow functions change the meaning of this, let’s take a simple module as an example.

The above code snippet defines a single module. Note the difference between writing public and private methods. Private methods are normal functions inside our module and can only be accessed by other functions inside the same scope. Public methods are members of a custom object. We return that custom object as the result of our immediately executed function. So anyone outside our module will only see the members of this object.

When we log the value of this in a private method, it points to the object which called the function. Why is this so?

The reason is that privateMethod is not a member, it is a normal function defined in our module’s scope. Inside that function, this points to the caller, in this case window  (see the examples above).

For object-oriented development, it is very weird for this to point to an external caller. That’s why JS developers have tried to escape from this oddity using different techniques. One such technique was to declare an internal variable, which holds a reference to this even after the closure exits. You can declare such a variable right next to our private method.

This practice is very common and widespread. Once we have an internal variable, we use that variable in all our methods instead of  this . We guarantee that it will point to the object it is declared in. Although this solves the problem, it is not very straightforward and may still confuse developers who are new to the concept.

Other techniques to solve the same problem are to use bind(), call() or apply() to change the value of this when you invoke each function. However, this moves the responsibility of supplying the scope to the caller and is not very good for encapsulation.

Arrow functions to the rescue

Designers of the JavaScript language and members of the committee working on the ECMAScript specification have noticed this problem, and they have provided a solution in the form of arrow functions. Arrow functions capture the value of this  from the enclosing context, no matter the caller. This changes everything (no pun intended). If we use arrow functions, we can just use this everywhere and our code will work.

No matter who calls the method, it will always log the Module object return value to the console. You can see that this feels much more intuitive than introducing variables to hold our context. Arrow functions can change the way we currently write JavaScript modules. The specification is not finalized yet, and currently there is no official support in any browser, but very soon you will be able to play with the new ECMAScript 6 features and take advantage of the new syntax.

You can follow how browser support for the different features of ES6 rolls out at this excellent comparison table: http://kangax.github.io/es5-compat-table/es6/

My Experience with a MacBook Air 2013

MacBook Air

It happened. I finally gave in to the temptation and bought a mac. I had been planning to get one for a while in order to start learning iOS development and experiment, but postponed it for at least a year. The primary reason being the price tag. When Apple launched the latest MacBook Air 2013 models with Intel Haswell processors I finally got one.

You can find the specs of my machine here: http://www.everymac.com/systems/apple/macbook-air/specs/macbook-air-core-i5-1.3-13-mid-2013-specs.html. I got the standard 13″ MacBook Air with 128GB flash storage and an upgrade to 8GB of RAM.

I’ve been using this for a little more than a month now, and I have to say it’s a great machine. As a first-time mac user I cannot be happier with it. Not everything has gone perfect, but the problems I’ve had have all been resolved and I am now using it as my primary machine.

Hardware

What I like the most is that it has an exceptional build quality. No other PC that I’ve used has been manufactured so well. The unibody aluminum design definitely wins over everything that is made of plastic out there. It is also very thin and light and I can use it on top of my lap for long periods of time without getting tired. Although it is not the fastest machine out there, I still haven’t noticed any lag or inability to perform. In all honesty, I haven’t done much work which requires heavy use of the hardware, but I have also tried things which are a little more complex than browsing pages. I have used GarageBand with software effects and I have also used LogicPro for audio processing. Most of the time the cooling fan doesn’t even start and you cannot hear anything while the machine is working. I have had the fan turn on only twice, when doing intensive work with the hard disk. The rest of the time, the machine was almost impossible to hear.

Although one of the major advantages of the Air is the long battery life, I haven’t been able to squeeze 12 hours out of it. It could probably go for 12 hours if you only click around on the web, but watching videos and doing development drains it much faster. It is still way better than other PCs, because the average in my case is 3-4 hours of heavy work. I haven’t seen a machine match this.

Software

I have tried MacOS before but had not used it day-to-day. It is a lot friendlier than Windows, although I am a power user and some of the things are too hidden for me. I have started using LaunchPad and the Dock heavily and feel happy with them. Every piece of software that I’ve installed looks great and is a pleasure to use. On Windows you can find a lot of things which are ugly and not thought out well. This is not the case here.

One major advantage over every other laptop that I’ve ever used is the trackpad. This is so good that when you try it once, you get annoyed when you cannot use the same features on another machine. Two-finger scroll, two-finger click for a context menu, moving between applications with horizontal swipe – these things are just awesome. Apple hit a home run with this.

The Problems

There are a couple of things which I had trouble with.

The WiFi Issue

The first one was the infamous WiFi issue with these models. Immidiately after I got home from the store I setup the mac and tried to get a feel of it. When I connected to my home router, I could browse online for about 10 minutes after which the connection stopped without any indication. The icon stays there and everything on the machine looks like it is connected, but you cannot open any web page. I called the Apple representative that I bought it from and they ran tests on the machine, concluding that there was nothing wrong with it. In the end, it turned out to be the encryption type on my router. I changed it from “WPA – Personal” to “WPA2 – Personal” and everything started working normally. It seems that with the upgraded wireless chip, Apple has some problems connecting to old networks with old encryption protocols. For most people, this would virtually be a non-issue since they probably have a newer router. Mine is a Linksys WRT54GL from 2005.

Multiple monitor support

The other problematic issue is multiple monitors. When I’m home, I use the mac with an external monitor through the Thunderbolt port (with an adapter). Apple have decided to make MacOS be smart about monitors, so whenever you connect a second one, it automatically recognizes it and sets it up with your last used settings. You can either mirror the built-in display or extend it, like you’d expect. However, whenever I put the laptop to sleep, the windows I have open are moved around after wakeup. If I have a window on the second monitor before sleep, the window is moved to the first one after wake. The window keeps the same dimensions it had on the external monitor, and in my case it looks ugly because the second monitor is with larger resolution. So not only is the window moved, but it doesn’t fit on the default screen. I still haven’t figured out how to fix this – it is probably a bug in MacOS. I hope that they will resolve it in a future update.

As a whole I am very happy with the machine and I haven’t touched my PC since I bought it. It serves me well as a primary laptop and I can recommend it to anyone who is planning to buy a laptop in this class. The price is not that higher than the rest of the competition but you get a lot more for it.

One week with iPhone 5

5 days ago (not even a full week), I got an iPhone 5. If I have to describe these first 5 days of using it in one sentence, the sentence will be “It’s freaking FAST!” And since this description is too simplistic, here’s a more detailed version of my experience.

Before I say anything, please note that I’m coming from an Android background, and more specifically the shitty HTC-version-of-Android background. Before this phone I had an HTC Desire HD. Well, in the last days before the iPhone I had to force myself not to throw it away. My Android story is that I bought the HTC a little over 2 years ago to replace my… wait for it… Windows Mobile phone. This is Windows Mobile, not Windows Phone… you know… the archaic stylus-based version with 5×5 pixel buttons. It was again an HTC (Touch Diamond 2) and it was my first encounter with smartphones. The HTC Desire HD was my first encounter with Android and although I loved it in the beginning, after 2 years I started to experience THE issue with Android, which is lack of updates. HTC decided that my hardware was too incapable to run their Icecream Sandwich and stopped providing updates. While newer and better versions of Android were released, I was patient with my 2.3.5 Gingerbread and quietly wept every night. This all made me switch to Apple. And before you ask “Why didn’t you just root and use Cyanogen?”, I will say: Why do I have to? I paid a big pile of cash for a phone, I don’t want to waste another night of my life redoing everything from scratch. Having the ability to root your phone is one thing, having the necessity to do it is another. I don’t want to be forced to root. Plus, Cyanogen with Android 4+ is still not officially available at the time I write this.

If you haven’t realized it until now, I’m not a fan boy, I just like technology and base my choices on facts and experience. Now, on to the iPhone.

This thing is great. Even though I’m comparing it to a very old HTC, I cannot help but wonder how awesome the display is. Once I look at the iPhone, looking back at my 22″ monitor feels like the right half of this (in other words, painful):

Retina Compare

Retina has spoiled me. The iPhone is also super-fast. iOS is very good in terms of user experience. I haven’t had a dealbreaker issue until now. Did I mention that the iPhone is very fast? Here is the list of my top pros and cons:

Good

Bad

FAST! No ability to arrange homescreen icons (no widgets)
Good ecosystem (many apps) No FM Radio app
Very good looking Turning WiFi on/off is harder than it shoud be
Very light Setting a custom ringtone requires Googling and iTunes

Although there are some things I don’t like, I wouldn’t go back to Android. For me, the huge Apple ecosystem and the very good user experience are the two most important factors in a phone, and I would trade the ability to do some customization for them. After a while you get used to the iOS way of doing things and you form habits. That’s a good thing, because most apps try to conform to those habits, and you know how to use them before you’ve tried them. While Android also have some UI Guidelines for developers, in reality the marketplace (Play Store) is one big mess, where each application introduces its own UI, and there is so much diversity, that at some point you just give up.

I am very happy with my first week with the iPhone. There are definitely things that can be fixed, but I’d bet Apple will do that at some point. My hopes for cleaning up the Google Play Store are just not helping. Oh and here’s the answer your other hypothetical question about why I didn’t get a Windows Phone: I like shadows and rounded corners more than single-color squares and sharp edges.

(Photo credits: http://www.apple.com/pr/products/iphone/iphone.html, http://www.theverge.com/2012/3/7/2851127/new-ipad-hands-on-preview)

Django Unchained – Movie Review

Last night I watched Django Unchained by Quentin Tarantino. It. Was. Awesome.

I am a big fan of Tarantino as a director and this movie did not disappoint. All the graphic deaths, tense dialogue and twists you’d expect from Tarantino are delivered, together with a modern reading of the Western genre, which appeals to a 21 century crowd. Nowadays, I already expect each new Hollywood movie to be pure crap and I’ve started watching independent cinema more often. Django Unchained is the gem which still keeps my hopes for mass market films high.

Jamie Foxx, Christoph Waltz and Leonardo DiCaprio all perform marvelously, but the best actor in the movie is Samuel Jackson in the role of a black servant who’s ready to obey his slaver till death. Apart from the great actors, which is the single most important ingredient of a good movie, Django Unchained also has much to offer in plot and dialogue. Sweeping political correctness under the rug, as each self-respecting playwright should, Tarantino manages to transport you to the slavery era in America like no one else.

However, the skill which makes him such a great director is not that he can please the critics or drive them mad. It’s the fact that he can make a good movie, which appeals to the standard hollywood crowd, and still avoid cliches. Even those of you who’d prefer an action flick with a love story happy ending, even you will not be disappointed. Find Django Unchained in your local theater and watch it.

1991

In today’s digital age, it’s easy to forget the lessons of the past and dismiss them as old-fashioned. There’s always going to be a big divide between young and old, liberal and conservative. But I think sometimes looking back into time can pay off. By just observing how people lived without our modern tools, one can wonder how they managed to survive. For good or bad, I’ve always been fascinated with the past.

In 1991 I celebrated my 7th birthday and started school. There was no Facebook and Twitter, the Web was just getting started in some remote part of the world, there were no digital cameras and most people in my country didn’t know what a computer is. At the time Bulgaria was preparing for the country’s first democratic elections after the fall of the communist regime in 1989. I vaguely remember my parents talking about it and how they went to the polls. People had their hopes high and were singing a song in the streets I’ll always remember. The lyrics were: “45 години стигат, времето е наше (45 years are enough, time is ours now).” I remembered all this by looking at the pages of a 1991 magazine I bought on EBay a month ago. Here’s what it looks like.

Disclaimer: This blog post contains pictures of Rollingstone Magazine from January 1991. I don’t intend any copyright infringement, I’ve included them as reference. All rights of the magazine content are held by Rollingstone Magazine and the respective authors.

The reason I bought the magazine is Slash on the cover. For me, that’s the man who created the best guitar solos in the world, so no wonder I bough it.

Rollingstone Magazine 1991 with Slash on the cover

Although at first I just wanted to read about Slash, that issue quickly became a trip back to 1991 for me. Apparently at the time they had the movie Green Card in theaters, and there was a full page ad about it.

Green Card movie ad

It seems the economy wasn’t in any better shape, too. Confirms my theories that according to media, we’re always in some crisis.

The economy

State of the art technology was Digital Audio Tape Recorders. Another ad.

Sony digital audio tape recorder

The article on Slash was awesome. I didn’t regret buying the magazine at all. It was an interview he gave a little before Guns n’ Roses released the Use Your Illusions album. I read somewhere afterwards that this particular interview was one of the reasons the relationship between Slash and Axl worsened. I have no idea why. There’s nothing so revealing about Axl in there.

Slash Interview

Slash Interview

Eight grand in 1991 got you a Plymouth. Of course you’d have to be blind, because I don’t see how anyone could buy such an ugly set of wheels.

Plymouth ad

Although CDs already existed, Sony was still trying to sell its tape cassettes. It’s Metal-SR after all. It gives you a wide dynamic range. What-eva.

Sony Metal-SR cassette

Now, if you think Microsoft is the pioneer of word processing, think again. I don’t know if at the time Word was just an idea in Bill’s head, but people were selling high-tech typewriters. If you don’t know what a typewriter is, ask your dad.

Typewriter ad

What self-respecting magazine wouldn’t include classifieds? Not Rollingstone, that’s for sure. You could find anything there. From birthday wishes and inventors, to striptease clubs and phone sex.

Classifieds 1

Classifieds 2

Classifieds 3

And to finish up with my 1991 review, I’ll give you the charts at the time in the US. Remember Vanilla Ice and MC Hammer? They were kicking ass.

Billboard charts

All I can say after reading the whole issue is that 1991 was an awesome year. It may sound unlikely to you, but people had fun without our digital gadgets and being connected all the time. They probably hung out more often, and I think they definitely created better music than people do today.

So next time your internet connection is slow or your iPhone’s giving you trouble, remember 1991 and go do what you want to do in person. And listen to a piece by Slash on the way. You’ll thank me later.

Project Hosting Solutions: Another Comparison of Options

Ages ago, when this blog was still hosted on WordPress.com, I had written a post, comparing several project hosting solutions. Well, things have changed since then, and I have found a couple more that I want to share.

At the time I was working on a student project and all I needed was some source control. A project hosting service would provide much more than that, which I didn’t take into account at all. Now when comparing similar services, issues like integrated bugtracking, the type of source control system used and availability of private repositories are much more important to me than they were in my previous review.

Here’s a list of what I want no matter what:

  • Private repository (at least one).
  • Support for a distributed version control system (Git or Mercurial).
  • Integration with a bugtracker.

So the the following are four more project hosting services for anyone who needs an integrated solution with private source control hosting:

Bitbucket

This is my personal favorite. Lately I’ve been reading about distributed version control systems (DVCS), like Mercurial and Git, and growing fond of them. I can say that I switched to using Mercurial for all my personal projects. Bitbucket is a service that gives you unlimited private and public source repositories based on Mercurial, with an integrated bugtracker for free up to 5 users. They also have other pricing plans for larger projects, but this is the best free offer you will find on the market. I’ve been using Bitbucket for a while now and these terms are new, after today they announced they’ve been acquired by Atlassian. Definitively a good bet.

Kiln

A work of FogCreek software, which you’ve probably heard of (Joel Spolsky). Kiln is a system implemented on top of Mercurial, which adds some advanced features (not listed because they are irrelevant in the comparison). One good thing is that it integrates very nicely with FogBugz, a top-notch bugtracking tool. Please note that what I’ve used is the so-called “Student and Startup Edition”, which allows for unlimited space and number of repositories for 2 users. They provide a standalone Kiln client, but any Mercurial client should work (if you want tighter integration with your IDE for example).

Project Locker

Up to 3 projects, 500MB, 5 users – free. That’s their offering. The difference here would be that they offer Subversion and Git hosting, rather than Mercurial. If that’s the type of source control you’d rather use, maybe this is a better option for you. Github might actually be better known, but as of now they don’t offer a private repository for free, and that’s one of my primary concerns. The con I find about Project Locker is their speed and the clumsy and unfriendly web interface. They also only provide TRAC for bugtracking, and put ads on those pages when you browse, which is probably understandable, but still a downside.

Beanstalk

This is what I used before I switched to Project Locker. The two are probably comparable, Beanstalk have a free account for 3 users, 1 private repository and 100MB of space. Subversion and Git are supported, but space is definitely a limiting factor here. The web interface is wonderful compared to Project Locker, but I wouldn’t use this for anything else than a test project simply because of the 100 MB limitation. Please note that they also don’t provide integration with a bugtracking service.

I’ve been researching services similar to the ones above for more than a year or two now, and the ones I mentioned are what I consider the best at the moment. Please share your comments if you’ve used some of them and have any particular impressions or know about another one I probably haven’t heard of. Until the next edition of such a comparison, happy coding.