A Very Long Tale of My Career, Or How Teaching NHibernate & Other Backend Stuff Got Me Into Readify

I told a few people how I joined Readify, but I never wrote it down. Here’s more than you ever wanted to know:

Before The Beginning

I didn’t have a computer when I was a kid, until I was 14 or something. I only had access to DOS computer in the mid-to-late 90s in a community center, where I was not allowed to run Norton Commander, because “you won’t learn anything like that”. I learned DBASE III, at the time my teacher was using Windows 95 or 98.

Then I got a computer. Internet came later. I noticed I could be a web developer. PHP was the craze at the time. I jumped on it, and learned some C and Visual Basic too. I didn’t get so far with either.

Then my family moved into another house. My new neighbour who attended a Computer Science college said they had free lectures on Visual Studio 2002 beta during summer, and I couldn’t have missed them! I got the software with a help of the public library I used to go to. The IT manager there was so helpful, even though I was barely allowed in the “grownups” section at the time. That reminds me of something else that’s useless in this context, which is how for over a year I used to note “useful URLs” in a small book, until an affordable Internet Cafe was open in the same library, and I was able to surf like a guru!

My First Company

I started work when I was at uni. I attended a international Microsoft developers conference in Egypt on 2004 and was picked as a best attendee by one of the speakers, to win a Microsoft MCAD training track (8 courses). I was in my first year of 5 years engineering uni.

It wasn’t easy doing a 4 hour training 3 days a week plus uni, but it paid off. I was lucky that most students were senior developers at the time, and all somewhat new to .NET.

A friend recommended me as a trainee in her company in the summer. She left the company, and shortly after, the other 2 developers left on the same day. It was funny. I had to handle this little company myself, with an interesting technical founder who at the time only knew classic ASP. I was interviewing both junior and senior hires technically while still called a trainee!
I also wrote a PoS Windows app that sync’ed with my web app’s SQL DB via Access and DataSets!

My First Move

Then one of the 2 developers who left invited me to work as a freelancer in her company, for a month, with 6 times my full time trainee salary. It was a custom CMS written by someone who left and no one else could wrap their head around the code, and the company needed to extend it in ways it was never meant to work.

That was flattering, and I was crazy about CMSes at the time. I took it, and after a few weeks of day and night work, I decided to dedicate my day to the new work.

It was uni time again (September 2005). My work was successful and led to more work. Eventually someone else left, and he was taking care of a system that nobody wanted to touch for a very different reason. It was in VB.NET! I didn’t know VB.NET at the time, but I took it, and it had some interesting business challenges, and .. em .. KSA remote client management challenges.

I decided to continue working as a part-timer during uni. It was the beginning of crazy era.

The Work – Uni Balance

A New Life

I’d go to uni, finish and head to the company, through a very crowded road (about 2 hours long, including 45 minutes in a single crossing), finish work so late I’m too tired to go home, pull in some chairs together to sleep on, to wake up early enough before anybody comes, and go to uni.

I’d go back home every 2-3 days to change my clothes. I also would take 2-4 weeks off before and during exams. I was so proud I was so rich I could order food whenever I wanted, and was being treated just like all the “big developers”.

Officially A Full-Timer

Then the same person who brought me to the company told me about this American company opening in Egypt, that is always working with pre-release technologies. She said she failed their test because she didn’t take it seriously as the company didn’t seem to have a proper office or anything. She told me she thought she was wrong, as it’s just a different culture. She told me the UX designer I liked the most in our company went to work there.

So, right after finishing a uni final test, I went to this other company for a tech test. It was a horrible idea. I think I did too bad, but having been blogging for a while about tech events in Egypt and other tech stuff, when .NET bloggers were relatively rare at the time (talking 2006), especially in Egypt, I was a well known person to the guys who worked there. Also one of them knew me from a tech forum we both used to help people in.

So, I got to the interview with the tech founder. He’s an Indonesian from a Chinese background, who I think holds a degree from Australia, and is partnering with an American in founding a company in Egypt! He was a legend!

These maybe were some of my best times in life. I worked as a full-time junior developer for pretty much the same salary as my previous company. I worked in the same way I did in the other company plus 10 hours a day in weekends to have 40 hours total. That was doable because our main account was in the U.S., and the time difference was in my favor as I was working mostly by night during uni.

A Senior Title

I really enjoyed the company. The founder made it ever better. He was an awesome geek. He stayed late with me, came on weekends, and sometimes we both would go out to eat or just walk. That was life!

I was the only junior developer at the time. A year later they started hiring junior developers and I was promoted to a senior developer. I was proud I got the title while still a student, even though that didn’t include a pay rise. That came a few months later though.

The company also encouraged me to start public speaking. I was a semi-frequent speaker at the only .NET usergroup in Egypt at the time, and the company itself held its own conference every year, having me as a speaker twice. That was cool, and helped more people recognize me.

The “Experts” Team

After graduating (2008), a friend from the MCAD courses told me his friend left his well-paying online freelancing work to go back to their old company, which was re-opening. It was a part of a very large well known brand in Egypt. He called me to join him in an architecture team they called “The Experts Team”.

It also had the guy I liked the most from the usergroup organizer team. I was getting ready for marriage at the time, and for those who don’t know, marriage costs tens of thousands in Egypt — that’s IF you have an apartment, and I was lucky that my parents suffered from paying loans for many years to ensure I had one before I understood why that was important.

Flying To Abu Dhabi

The Decision I Never Considered

So, I moved to the same team as that friend. I got married. I was happy where I was, working with nice people in a big company. Then the same guy who got me in the company told me about a senior position in a big company in Abu Dhabi. He told me he was called for the opportunity but he felt it was small for him, but OK for me. At first, I rejected the idea. I was still new in my company and wouldn’t want to leave so quick. I also never thought about traveling, but -let me admit- mostly because I never thought I’d be able to do it.

Then someone else from the company encouraged me to take it. My father, whom I thought would say don’t go, encouraged me to go abroad in a way that was very touchy. We are talking 2009. Things weren’t that bad in Egypt, but they were still definitely not good. Having recommendations from the company I didn’t want to leave, and also because the phone interview with my team leader was so nice (He was sure a geek I’d enjoy working with), all led me to go ahead with the offer.

That was the best decision I have taken in my life. Not just because the Egyptian company closed again in a year or two (the parent company thought software was lengthy and expensive compared to integration like SharePoint etc), but also due to political issues later, etc.

Life In Abu Dhabi

I arrived to Abu Dhabi. First time to travel by air. I got freaked out in Abu Dhabi airport when they couldn’t get a scan of my “eye print” and kept me held for an hour. But I was let in! And I started work. I was well respected and had my fame with me, which was nice at first. It wasn’t an oil company but the closest to that (half owned by government). I didn’t have the best salary, but had the highest medical insurance etc.

The Real Beginning

Meligy, The Backend-Focused Speaker

At this time I was all about design patterns and framework design. I had already spoken in the usergroup about all of these. I was being followed by Scott Hanselman on Twitter!

I also went too fast with Entity Framework when it was very new and it screwed me up. I turned to NHibernate, and after joining their mailing list looking for help, I myself became someone who helps others, and someone who interferes with some of the maintainers for how they’d make fun of some of the questions etc. I made good friends with some NHibernate core members. And this was how I heard about Readify.

In February 2010, I was invited by the .NET usergroup I used to speak in, to speak in a big conference they organized, called Cairo Code Camp. It was the 2nd one and I had already spoken at the first. I couldn’t miss it. Scott Hanselman was there. I’ll see him for the first time, AND, as a speaker, both of us, WOW!

I was delivering a session called “Framework Design Guidelines”. That is, stuff inspired by MSDN Patterns and Practices, and Design Patterns and Domain Driven Design.

Someone else was in there, Mitch Denny, the Readify CTO at the time (now in Microsoft U.S.). I enjoyed a nice conversation with him during speaker dinner party, although I didn’t know where he was working at the moment.

My Friend, From The NHibernate Core Team

Now, back to Abu Dhabi. Work was getting boring. I was hoping for some challenging work in U.A.E (Abu Dhabi or Dubai), again, not thinking about travel. It wasn’t very successful. I chatted to my NHibernate core team member friend, and he pointed me to someone he knew, who blogged about his interview process at Readify.

I was pretty impressed. I thought they’ll never take me. There were so many celebrities who worked there that I just knew I won’t be good enough to work there. I tried anyway!

And guess what? They called me back! I learned that Mitch actually remembered me, and knew where he works! I still had to go through a tough interview, and I passed! Hooray!!

The Foolish Call That Made Me Decide To Join Readify

But I wasn’t sure whether I want to make such a big move myself. Fun fact: when they asked me: “which state would you be interested in going to?” I said Sydney only because it was the only city I knew its name (and didn’t remember how I knew it). I wanted to get something extra to weigh the decision.

I DM’ed Scott Hanselman. Didn’t I tell you he was following me on Twitter and knew me in person? I asked for someone who can tell me in all fairness whether Readify was a good company. He pointed me to Tatham Oddie, our current Delivery Lead today :D — He had his phone number on his blog at the time. He picked up the phone once to find an anonymous international caller saying Scott Hanselman recommended him for asking whether Readify was a good company. Of course he wouldn’t say anything bad about his company to a stranger! It was a foolish call, but it was all I needed to get going.

Making The Move

My annual-paid rent was expiring — I had to borrow 60% of my salary to pay that rent (Not having a good enough eyesight for driving made cheaper out of the city options impractical for me). I had to live in a temporary apartment that had legal issues and could have had me kicked out any time because it was cheap and had nice furniture for me and wife. The visa took from April to August, which was very unusual, but it came, and I arrived in Australia!

Since I arrived, so many things happened. I hated Sydney at first because Abu Dhabi was so fancy (I used to move around in latest-model taxi cars, for 6 Dirhams or so — the city was so small). I learned to see the beauty of Sydney only a few months later. My son spoke his first words here, and I and him call it home today.

It’s been long time since arrival in September 2010. During the time I only left Sydney to one-day company annual events in other states, and a one week holiday in Melbourne earlier this year.

Life At Readify

I joined Readify and worked in the same company as so many celebrities I used to fancy, and so many great other people I discovered while working here.

I saw the company go through several growing stages, every time feeling a worry about losing the culture I love in the company, then feeling happy that it is as awesome as ever.

It is definitely an awesome place to work. There’s countless number of great people around here, and I also more than often get to either work at great customer sites with great people I loved to go back to and help with the great work they are doing (my current client is one of them), and other sites that are not as great as I’d hope to see them yet, but instead of feeling feeling bad, I feel inspired to help them make things better bit by bit. Because that’s why you’d hire a Readifarian :)

Yesterday And Today

I got to work with so many clients in different industries, from finance to media to charity to met and livestock handling(!), and many others. I got to play different roles, as a team member, as a mentor, as an appointed tech lead, etc. etc.

I spoke at ALT .NET and SydJS usergroups, and DDD Sydney and NDC Sydney conferences.

And I learned a lot more, not just at work.

I attended several workshops, like Distributed Software Architecture and Messaging by Greg Young, and International Domain Driven Design Tour workshop by Vaughn Vernon. I attended workshops on being a Scrum Product Owner, and a Scrum Master (and learned that I cannot be both at the time time, before they are different interests).

And then I somehow became known as a JavaScript guy. That’s me, who in 2007 was very happy that UpdatePanel in Webforms could abstract AJAX, and thought that people who could write code with Scriptaculous (before jQuery) were magicians. I even run a usergroup for one of popular JavaScript frameworks in Sydney!!!

I’m very proud of what I have done so far, and am still hungry for more learning and achievements. This is a journey that will hopefully never end before I die. One that I wanted to document the past pieces of before I start losing some of the important details.

Thanks for sticking with me till the end. in this long post :)

Cheers,

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“.

Middleground

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.

Check it out: BEING AN OPEN RECIPIENT

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).

virtualbox

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.

Update

If you want to watch for progress on this issue, check out the issue report in VirtualBox issue tracker:
https://www.virtualbox.org/ticket/12063

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.

http://youtu.be/6UBIRiEglsM