A Web Developer’s Macbook Pro 15 Wishlist

I’m due for a laptop update at the end of the year. I love to follow news about the laptop brands I care about though. Apple is on top of the list.

I only have one Macbook, as I use Windows very often. I got my Apple Macbook when I wanted a *nix friendly native OS for development, and I felt that Linux just doesn’t cut it.

Of course I realize that *nix tools are coming to Windows relatively soon, I’m not sure whether my next laptop will be a Macbook.

But there are things I definitely like about Mac OSX, and the laptop itself. Battery life is one, and the power available in the form factor and current weight is very cool as well.

So, if I’m going to buy a Macbook for my next laptop, this is what I wish Apple would include in a 2016-2017 Macbook Pro 15:

  • A touchscreen!
    C’mon Apple. You are seriously behind on this one

  • Non Retina screen
    The 1440×900 screen is lovely already.
    At least offer the option for those willing to take it for the battery benefit

  • Long lasting battery
    12+ hours, at least

  • An extra right-side “Control” keyboard key
    Eat a bit from the spacebar key. It’s OK.
    As a right-handed developer, with a lot of tools defaulting to using “Control” not “Cmd”, that key will be a saver

  • Same CPU class as before
    Don’t go to these “U” CPUs, keep the quad core CPU, just update to latest generation

And what could be a really nice bonus, although I’m not holding my breath:

  • 32 GB RAM :) :)
    Because, why not?!

  • Same size and weight, with better ventilation
    I don’t want a thinner or lighter Macbook. It’s perfect as it is now.
    I want one that doesn’t feel hot too often that it has a series of fan-controlling apps though!

It’s a VERY long shot to expect that Apple will read this, let alone listen, but who knows…

You Don’t Just Claim Authority Over “Standard” JavaScript

I stumpled upon a contraversial website called standardJS.com the other day.

Originally I didn’t bother the name until a friend on social media commented on it, and then I looked more into the naming.

The website offers some guidelines for writing JS. It tackles a lot of areas with common disagreements like banning semicolons and defining tabs as 2 whitespaces.

However, as the domain shows, this is called StandardJS.com!!

This quickly reminded me of another story

Standard Markdown

In 2014, Jeff Atwood, a celebrity also known as CodingHorror, decided after many frustrations with fragmentation of Markdown Flavors, to create a Standard Markdown flavor.

This is how it started: Standard Flavored Markdown

And This is How it ended: Standard Markdown is now Common Markdown

You see, Jeff, being a celeberity, got his project very popular by just creating it. This also caused the flame wars to go strong. And the expected outcome to happen.

You’d think this should be a good lesson for future Open Source Standard projects, but it wouldn’t be software if we don’t just re-implement the same mistake every few years, would it?

Standard JavaScript

Then there is standardJS.com thingy. The creator writes the following in the FAQ (emphasis mine):

Q: But this isn’t a real web standard!

A: Of course it’s not! The style laid out here is not affiliated with any official web standards groups, which is why this repo is called feross/standard and not ECMA/standard.

But the domain is NOT FerossStandardJS.com , it’s just StandardJS.com.

Even worse, there’s a static analysis NPM package, that is supposed to help enforce the guidelines in Pull Requests etc., for repositories that implement the standard.

Guess what’s the name of the npm package?

Correct, it’s standard (Yes, No JS even, it is THE Standard!)

“I Disagree” As a repository label

Of course several people tried to object to the naming, via the most appropriate Github way to object to things, project Issues.

They called claiming the word Standard as “Obnoxious”, “Misleading”, and plain “Arrogant”.

All issues discussing the name went into a Github Issues label called “I Disagree“.


I tried to do it differently, and suggest just changing the non-constrained standardJS.com domain naming.

My issue was quickly closed with the same label (in about 11 minutes), thinking that it disagrees with the project naming.

Once I explained it was about the domain (once more), it was opened, and marked as a Question.

Here it’s: Abandon / Redirect standardjs.com domain to something else

Thinking About It

The whole thing is a bit weird though. Isn’t?

One doesn’t just declare standard over NPM or JS without being in the official authorities for these. io.js didn’t call itself StandardNodeJS, even though it had old NodeJS contributors in its committee.

Am I crazy to think that we should have gone past this kind of issues?

That’s what it’s like to go offline for a week with a scratch in the eye

A few hours ago I tweeted:

In this post I’ll talk about how the experience was like. If you suspect you have a similar issue and came here searching for it, stop, and get the patient to a hospital ASAP. If you are interested in the human experience, read along.

How did it happen?

Things like this can be very easy. The bottom of one of the pants of my pair of jeans hit my left eye while Mrs. was tiding. It hit me like a sharp knife even though it was obviously by mistake.

This happened on Tuesday evening and I didn’t think it’d be a big deal even though the pain was horrible. By morning time, I know I knew I needed to visit a hospital.

What was it like?

It felt like a strong sting. It always felt like I had something in my eye, but sometimes it felt like a knife, or a pin, and sometimes it felt like I had a tiny coin in my eye. At first I was quite sure there’s something in my eye (I thought maybe a very tiny string or whatever).

The hardest part is that it hurt more whenever I blinked. Due to some surgery in the left side in my head as a child, my left eye is already “lazy”. This means I tend to blink/close it all the time. Not to mention the annoyance of feeling pain, automatically closing my eye from the pain, just to get more of it!

Seeking Medical Advice

I had some infection in my right eye a few weeks ago and went to a GP who got me some good antibiotic eye drops. So, I got an appointment with her on Wednesday noon (the earliest I could get). While waiting, I thought that I need someone well equipped to check if there’s something in my eye. I took my wife and went to St. George Public Hospital emergency.

The constant about any medical practice anywhere in the world is waiting. I’m talking about 1-2 hours of waiting especially at a public hospital. I did try a private hospital but they said they didn’t have emergency section and told me to go to St. George.

At the first hospital

I met someone whom didn’t look aware of Albinism (that’s the general medical condition of people with pure white skin + hair like me, especially eye effects). He measure my eyesight and told me “Do you realize you are legally blind?”. You can imagine how freaked out I was.

At this time I was thinking the degradation of sight is just due to so many tears overnight and still nonstop. I thought he is wrong taking it more serious than my pain. I was wrong.

He called a senior doctor, who advised having some fluorescent eye drops. They are called fluorescent because they light up under the light of the eye specialist’s tools and show the cornea very well. That was when they told me that I had a scratch in my cornea.

They gave me some antibiotic eye drops, and told me to use an ointment at morning and night. They gave me a certificate to take Wednesday and Thursday off. By the looks of Wednesday night, I could easily tell this was not enough, so, I asked my wife to email my company, Readify, (which was very understanding) that I’ll take Friday off as well.

At Sydney Eye Hospital

Sydney Eye Hospital - Credit: Wikipedia

By Thursday night, it was pretty much the same annoyance. I visited Sydney Eye Hospital on Friday morning. The eye specialist (after another 2 hour waiting) used less fluorescent eye drops (the first one filled my face, this one felt more right), and told me the scratch was so big that it must have been the same size it was on Wednesday.

He called his senior doctor, who suggested I stop the prescribed antibiotic and use the off-the-shelve ointment on hourly basis!

Getting ready to go back to work

I used the ointment every hour. I got my wife to put it for me, and it felt like an addict in some movie asking for his drug dose, LOL! I also asked her to email my company and tell them I may not come entire next week, just in case.

My pain started to improve on Monday. My vision started to improve on Tuesday, it wasn’t still clear, it still got blurry at not-so-close objects / text, and quite watery.

I visited Sydney Eye Hospital again on Wednesday this week, did my 3 hour waiting (1 hour for the nurse, and another 2 for the doctor) who didn’t call for a senior doctor this time.

She advised me that the scratch is now too small that it is even hard to see. I accepted her feedback as during the long wait I was already feeling hourly improvements in my vision without any medication that day.

She told me that I can go back to work. She said the laptop screen should not cause harm to the cornea even with the scratch. She asked me to reduce the ointment to morning and night only (where did I hear that before?) as it’s probably the main cause for the watery/slightly-blurred vision I have, and suggested a dry eye off-the-shelve eye drops to use as often as possible (up to hourly).

So, I went home, opened Visual Studio, made sure I can read and modify code, and emailed my company by myself letting them know the changes, and here I am ready to work, with a plan to visit the eye hospital again next Wednesday.

What I was doing all this time

The first couple of days I was mostly just in bed suffering pain. My wife had to handle all the things I used to handle for our 4 years old son, and our shopping, etc. (thanks!).

After Friday, having expected this to expand to next Weekend in fact, I started considering something to do. Because I was extremely cautious, didn’t let myself in front of any screen even with covered eye, especially that eye covers were touching the eye lid and I took them off more often, I only got one podcast on my mobile, and kept listening to it all week.

The Entreprogrammers Podcast

The podcast deserves its own post. For now lets say I had about 14 episodes of 1-2 hour long podcast to listen to. I didn’t have any podcast setup at that time, and the default player didn’t always sync the last listened-to position. I listened to duplicated parts, sometimes because I was afraid of finishing the podcast and not finding anything to do, and something because I keep thinking about other things, like my eyes.

The funny thing about that is that after fearing to run out of episodes, I now listened only to 10, and need to catch up with the rest 4 and find room for it in my busy routine, not to mention the amount of personal and work email I need to check, catching up with the project I was working on before this happened, and catching up with other channels I used to follow. Fun stuff!

The Good Parts

O.K., as it’s hopefully close to an end, I can have a better look back, and tell that it wasn’t all too bad. There were some good benefits as well:

  • I got to take a week off. I rarely take any. Mostly I just take the Christmas break as often a mandatory leave for our clients.

  • I got to spend more time with my 4yo son. This is something I always feel guilty about whenever I’m sitting at my laptop at home, even when maybe I shouldn’t. There’s no “enough” time for spending with your son, and there are always tons of competing priorities

  • I didn’t drink coffee for a week. For some reason I thought I won’t benefit from even a tiny pressure increase or awake nerves. I wasn’t doing much anyway. I kept it coffee-free. This is very good for the heavy coffee drinker like myself, and it’s something that I read people only do when they are on leave

  • I think the podcast has got me to think differently about how I want to tackle personal branding and related profitable activities. I’m not too horrible at personal branding (although I can do tons better), but I suck at getting to any other profitable activity other than my full time job. This has to change!

Going forward

Well, I’m still recovering, and have a doctor appointment week, but at least I can resume my usual activities, so …

Using OneNote As Wiki Inside Readify

onenote In recent projects I have been on with Readify, I have seen the rise of using OneNote to share most of the artifacts related to project. We still had requirement documents and proposals and all, and also tracking systems for ongoing and future work (backlog), but we used OneNote to record all sorts of information you’d store in a Wiki and/or in email and floating documents everywhere like:

  • Induction information (why does the project exist? how to setup dev environment? etc.)
  • Demo notes (what items are ready to demo? what are the steps? which users/links are needed?)
  • Meeting notes (demo meetings, sprint retrospectives)
  • Essential communication (Copies of release notes after sending, special notes coming in email / chat)

The availability of OneNote pretty much everywhere (including mobile devices, and web, as it’s hosted in out Office 365) and automatic synchronization made it a perfect alternative to a wiki for internal communication.

And yes, although I haven’t noticed this earlier, but OneNote also keeps track of all revisions and modifications, just like a proper wiki does.

If you want to learn more about how this approach worked for us in Readify, Tatham Oddie, one of our Readify Principal Consultants had an extensive writing of this model and other related communication strategies that help us excel at Readify.


Of course this is more applicable in situations where we do have more control over the way of communication. Not all projects follow this yet, and many projects work according to the established ways of our clients as long as they get the job done.

My Answer To The Question: Is having an online reputation on sites such as Quora important for young people?

Social SitesToday I’ll be sharing with you another answer I’ve added to Quora. The question I answered was:

Is having an online reputation on sites such as Quora important for young people?

And here’s my answer:

In a direct way, only specialised sites count. For programmers for example, a high rank in StackOverflow might be valuable to some employers.

Apart from that, for a site like Quora or so, a high rank will possibly be just like contributing to charity or playing a team sport. A little nice thing for the HR person or cultural interview.

However, there’s more…

Answering questions will likely require you to research topics that you thought you know, when you start explaining them, you get the areas you miss and you figure them out to complete the answer. As the old saying goes, best way to really learn something is to teach it.

Even if a normal answer like this one I’m providing  Just writing your thoughts does help organize them, which is a very good both mental and writing exercise.

So, in short, it’s nice, very nice to have, although not necessarily that important.

Authoring Introductory Articles: The Pitfalls I See As A Reviewer

Authoring Introductory Articles

Just finished replying to an author who asked me to review his introductory article.

The lesson learned from reading and reviewing is that there are some quite common pitfalls to these kinds of articles, which are essentially the same thing:

Thinking That One Size Can Fit All

You are writing an introductory article, so, you target beginners, but even for beginners, you have to assume some level of common ground as a foundation to build on, but how much of a common ground is that? IS the author targeting those who have experience with similar tools/concepts? Students? Professionals with other (unrelated) programming experience?

Sometimes it feels like the author keeps changing his imaginary idea of the intended audience as they keep writing. Eventually the author finds himself inserting some hints and references that if the reader understands then they probably don’t need to read your article (except to review it).

Which leads to:

Unlearning is hard

Just simulating not knowing what you know already. Yes, it’s not that easy!

If you are an author

When you work on any kind of introductory material (which is different from these posts you write just because you want to “take the thought off your chest to the wild”), always be very strict about:

  • Who you audience are
  • Who your audience are not

Identify them by what they do, and what experience they had doing what they do. Be honest with yourself about this identification means they’ll actually benefit from your material or they’ll just congratulate you on it (if you know some people who fit into the audience) without real benefit.

Think of what they are “not” more often as you keep writing. Check every assumption about the audience that you make in the material against the “not” bit.

You may find it hard. Depending on why you are working on the educational material, it may simple be worse changing the intended audience. If this happens without lots of modifications to the work you already did still, it means neither of your images about the intended audience were correct, not the original one, and not the new one too.

As A Reviewer

A reviewer also has their own challenge…

What are some time-saving tips every AngularJS user should know?

Today I’ll be quoting my answer to this question on Quora: What are some time-saving tips every AngularJS user should know?

The Answer

I have read so many advices, most of them are the same, some of them come from the time angular was new and everyone was just worried about reverting to jQuery. Now, these are what I learned:

  • Use routing from the very beginning, go ahead and include ui-route and architect your pages around the idea of routing, don’t be afraid of using child routes / child states

  • Include jQuery, for a “large app” you’re likely to need it anyway, and sometimes the behavior changes when its included (for example, a bad one in fact, historically at least ng-touch for mobile doesn’t stop the 300ms click delay when jQuery is included). If you are building a mobile app maybe this’d be different, but read the next one if you read this

  • Write directives (and filters). Don’t be afraid of writing them. You know all the advice about not doing DOM and stuff? Don’t worry about these much, just make sure whenever you do it, you are doing it in a directive. And yeah, don’t worry about having “too many directives”, most people have the opposite problem; also don’t worry about remembering the syntax, I almost always copy it from another one or docs, don’t let that make you write less directives.
    Same thing applies to filters BTW, write as many of these as you feel you need, sometimes you’ll want to keep them next to the controller they are used in, that’s fine, really.

  • Use services, whenever the controller feels too long (what’s so long? up to you, compare to a regular server MVC controller action, or a class in Java/C# and apply whatever rules you use there), or seems to have so many dependencies (too many function parameters) consider encapsulating most of the logic in a service or more. Think of services as a way to breakup up code more than a way to make it reusable, meaning, don’t fear building one or more services to serve one controller.

  • Write a different CSS file per route view, and use clear classes or so to make sure the CSS doesn’t have conflicts when all combined/minified together (because of course you use some sort of combining/bundling and minification, right?). Of course you’ll also have some shared files (per site and per application module / feature / route) for reusable stuff.

  • Create folders by feature, not by file type. this is called vertical slicing sometimes. The idea instead of having folders named like “Controllers”, “Views”, “Services”, etc., have the folders named after the feature instead (that’s the route most often, but not necessarily, feel free to have some matching route names and some not, it’s OK), and let it have the relevant controller (or controllers, if having child ones), view, and any supporting files, like services, directives, etc.

Disclaimer: Note this is not about being new to Angular or doing JS in general. This is what will help most for “big” applications, although you can use some of it in smaller apps as well of course.

(Solution) Windows 8.1 hangs on sleep/standby, can’t wake up

The Problem

When you send your physical computer running Windows 8.1 to sleep (stand-by), the computer screen goes black but all other power lights remain on, and you cannot wake it up by pressing any key or whatever, you have to hard reset it by pressing the power button till it stops.

Root Cause

The main problem in my case at least was a conflict between a VirtualBox network driver that it installed on Windows 8.1 (the host) to support “Bridge” networks in virtual machines (clients). Windows hangs at trying to turn this off.

Note that it’s not the same device you see in front of other network adapters in device managers. The one you see is the “host only network”.

The Solution

I managed to solve the problem by uninstalling VirtualBox, and then installing it again without Bridge network support. In the install wizzard “Custom Setup” step, under “VirtualBox Application” -> “VirtualBox Networking”, I disabled “VirtualBox Bridged Networking”, and continued the setup with everything else set (the default).


Note that I tried removing bridged networking from the virtual machines that used it and it didn’t solve it. I had to remove the feature as explained above.

But I need bridged networking!

Ideally, most of the use cases for bridged networking will be solvable using NAT networking instead, use this for your virtual machines unless you really really need the bridging, and then you need to choose between it and the ability to set the computer to sleep, at least until BirtualBox solves the problem.

Applies To: (Version information)

I experienced this problem with VirtualBox 4.2.18. Most likely the problem itself will be solved in some future version.


If you want to watch for progress on this issue, check out the issue report in VirtualBox issue tracker:

Maintaining your personal brand online with @TathamOddie – New Video

My new video featuring @TathamOddie on maintaining your personal brand both online and offline is now up…

Tatham Oddie is a well known public figure in Microsoft world as he speaks in so many .NET conferences around the world and is an active contributor to several high profile open source projects like WebFormsMVP.

In this video Mohamed Meligy interviews Tatham on online personal branding and ow you can makes the best out of people you meet in social media and offline groups. Tatham shares his experience on how to make it easy for people to recognize you and communicate with you for both social and business benefits.


Manually Compressing Any ASP.NET Page, PageMethod, MVC Action, HTTPHandler,..

Compressing A Single ASP.NET Response Manually

This post is about compressing your HTTP result without using IIS Dynamic Compression. I’ll save the story to the end and give you the code first:

Well, this shows how to do the compression itself. Depending on how you do ASP.NET, you probably will call it differently.

In my case, I called it manually from an ASP.NET Webforms PageMethod (more on why below), but if you are using ASP.NET MVC for example, you probably want to wrap it in an ActionFilter and apply that to the action you want to compress its output. Let me know in the comments or on twitter if you have a problem implementing it in a particular situation.

IIS Dynamic Compression

IIS 7+ has built in dynamic compression support (compressing output of server-side scripts like ASP.NET, PHP, etc.). It’s not by default because compressing dynamic content means running the compression for every request (because it doesn’t know what the server-side script will generate for every request, the point of using server-side programming is generating dynamic content!).

Static compression on the other side (caching static files like styles and scripts) is on by default because once the static resource is compressed, the compressed version is cached and served for every future request of the same file (unless the file changes of course).

General advice: I’d say if your server side scripts expect to return large text-based content (say, large data, even after paging, etc. like large reports or whatever), always turn dynamic compression on, at least for the pages that expect to return large data sets of text.

In many cases though the majority of large files will be scripts (and possibly images) will be the larger parts though, which are often taken care of (for scripts for example) by IIS static compression or ASP.NET Bundling.