Category Archives: software

captain obvious

I’ve said this before, if you state the obvious, chances are you have presented yourself as the most clever person in the group. If everyone is thinking it (and it’s a good idea) but everyone thinks it’s obvious and no one says it, then well… you’ve lost a good idea. So it’s okay, go ahead and say the obvious, go ahead be unoriginal. Say the obvious, and everyone will agree with you and you’ll be credited with the idea (if that’s what you want) because you simply spoke up.

Now I’d like to get into specifics at work. However, there’s a slight difference from what I presented above. There are times when I think the idea is obvious (because in my mind it is obvious) but other folk don’t see it that way. This has happened at the new workplace quite a bit. Because in my natural flow of saying what is obvious, I sometimes happen to say things that are obvious to me but not to everyone else. This makes me seem more intelligent than I actually am. It’s outright deception.

I look at something, and I will say, “Hmmm… this seems not right (polite way of saying it’s wrong). How about we do it this other way.” Initially there will be resistance, this is expected. But after some thought and deliberation people will realize why it’s better. In fact they’ll issue this smile that indicates they’ve been introduced to a whole new way of thinking. It’s not a half-hearted, “yeah that sounds like a good idea”. It’s a, “OMFG, that’s bluddy brilliant!”. Yes, I deduce this all from a smile.

Sometimes there won’t even be any resistance.
I say, “I think we should do it this way.”
Cue smiles.
“That’s actually a great idea!”.

But in my mind it’s just the way I’d do it. Why else would I do it any other way? It just seems so natural. It might be experience in dealing with these type of things, and that experience quickly collects in my mind and tells me the “natural” way. Of course, the readings I do also help. But I haven’t tried most of what I’ve read. I just “feel” that it will work.

When I see something that isn’t done quite “right”, I can’t help not say anything. I must speak out. It doesn’t matter whether it’s the Main Architect (notice the upper case) person or the junior developer. If I see something that doesn’t “feel” right to me, they’ll hear it. It really is nothing personal. I don’t dislike you, unless you’re incompetent. I can’t stand incompetence. Don’t be a pretender, go do something else instead. At least be honest, admit your incompetence. Okay, back to what I was saying. It’s not personal, please don’t take it personally. But some people do take it personally, this bothers me. They’ll defend their work even if it’s wrong. Grow up and get over yourself. Admit your mistake and move on. No harm, no foul. Thank you.

Of course this applies to me too. I’ve deleted/restarted/ditched plenty of my own ideas because I’ve realized that I was plain wrong. This is probably why I know that you’re wrong, because I’ve been wrong myself.

In any case, I was pulled into a meeting where a 3rd party software vendor was describing how we could integrate their software into our websites. I took a look at the integration code that was in their powerpoint presentation.

I resisted the urge, I really did.

But then I raised my hand and said, “Wouldn’t be a lot simpler if you used hashes? And that would automatically allow you to provide X, Y and Z functionality without much extra work!!”.

The technical person on their end thought about it for a second or two. “Yes, that’s a good idea. Actually it’s a great idea”. I could see the smile forming on his face. As if he was introduced to a whole new way of seeing the problem (and he was). The pains he’s had to go through to implement his own solution were showing. He sits down, a few more seconds pass. It’s still on his mind, “That would make things a lot easier”.

“Yeah, come on guys, why wouldn’t you think of this in the first place? Now you’ve released your API to so many of your customers. It’d be hard to change it and get them to implment it.”

“Yes, but we could still try it. Why don’t you send us an email, maybe we could implement it for you?”, the tech lead says.

“Also, please attach your resume to that email. We’re always looking for clever people.”, says one of their tech/business people.

I think I laughed inside a little. Did they just offer me an interview in a meeting where we were purchasing their software? Hah!

At least my experiences here (current workplace) have been better in that regard, here people will eventually admit to good/obvious idea, even if we can’t implement it due to whatever constraints. Where I worked before, I just got mad stares and weird looks, I felt I was insane.

Point is, tell people when they’ve done something wrong or complicated. Even if it seems like the obvious thing to say. They don’t know any better.

i am here, again

so firstly, i’m not in pakistan. i’m here.

secondly, i’m here again. what does that mean?

that means i am, once again, thinking of writing a blogging program.

“why would you engage in such madness adnan?”, you ask.

“because madness engages me”, i respond. and i assure you that i’m just as confused by the response as you are.

but in part seriousness… the nature of blogging used to be simpler. if you had a one liner, you’d blog. if you had a link to share, you’d blog. if you had a long piece to write, you’d blog. if you had to rant, you’d blog.

now, we have different tools to do each. i don’t fancy this. twitter for one liners and updates, tumblr for links, blog for long posts… meh. no. it’s too complex, too many logins, too much work. i need simple and minimal.

the blog needs to do all that. while i can just blog the links and updates and what not, the presentation of that information isn’t exactly friendly to the way it is absorbed and consumed. i know what i mean in my mind, so i won’t even explain it.

oddly enough, and as many will attest, it doesn’t get simpler/minimaler than nothing. but i keep coming back. for one reason or another.

if i knew i could stay away, i would. but i can’t. no really, i can’t. i haven’t blogged like this since… since forever.

so, as it were, i am… here… again. hello.

it’s a mac yo!

The iPod Touch (hereinafter referred to as itouch) arrived last Friday, and the macbook (hereinafter referred to as macbook) arrived Monday. Which was great because I got to spend Canada Day with the macbook.

About the itouch, I had been researching eReaders for a while. The Kindle was not a possibility because it’s only available in the States, plus it’s extremely expensive and doesn’t natively read PDFs. The iLiad? Also very expensive. The Cybook? Decently priced, but still pricey. At some point I was seriously considering the Sony Reader. But with all the research I couldn’t still justify spending hundreds on another device to carry around. So I looked into the itouch, to see whether it would could be used as an ebook reader. I was skeptical since it only has a 3.5 inch screen (compared to 6 to 8 inch screens on the ereaders). I knew the pain of trying to read PDFs on a small screen when I tried it out on a Sony Erricson PDA. You have to scroll horizontally forward and backward for each line. Not fun. And I still couldn’t justify purchasing another MP3 player.

But as fate would have it (it always does), my laptop screen broke and I had to make a decision. I had also been researching tablet pcs for a while and was really high on getting one. I eventually went with the macbook.

“Why macbook?”, you ask. And I’m glad you did.

Well, for many reasons. While the tablet would have been a great play toy, and great for taking notes during work or school, the macbook’s benefits outweighed the tablet’s.

First of all, going from PC to Mac is like changing religions. It’s not a small step. It’s not easy at the start and has its bumps.

You may be distracted by the fancy exterior and the shiny graphics of the Mac, but I’m more interested in what’s inside. Mac hardware is known to be rock solid when it comes to personal PCs. They recently switched to an intel based processor (more on this later). The operating system, Mac OS X, is a Unix based OS and written/modified specifically to work with Mac’s hardware.

I extremely dislike Windows’ navigation system and much prefer to use the command-line on a Linux machine, specially when it comes to software development. So to keep my sanity I was having to keep source code files on a Ubuntu Linux VMWare install, and I would SSH into it to access and manipulate the files and using IntelliJ or Zend Studio on the Windows end. With the macbook, I get the best of both worlds, I can use my IDEs and access the command-line whenever I want. Unlike the other Unix environments, Mac can actually run programs like Photoshop and the like. Win-win.

Now, if there is ever a moment where I need to run software that will only run on Windows and not a Mac, I can use VMWare or Parallels (haven’t decided which yet) to install a Windows virtual machine. I’m using VMWare’s trail version and it’s much better for the Mac than it was for windows. I still want to give Parallels a shot. This is where the Intel chipset comes in real handy, the Windows virtual machine runs really well on the Mac. Really really well.

I want to delve into Rails development, and most of the Rails world uses Mac and they recently started using git as their SCM tool. And git really works well with Unix based systems. Most of the Rails books use a Mac as a default platform. Macbook, win-win.

I really like the desktop navigation features, the F8 to F11 keys help me easily get to any window I want without having to plow through Alt-Tab selections. It’s really good.

But the macbook is not without its quirks. The keyboard is fine, but I still need to get used to the trackpad mouse. Particularly dealing with the speed at which the mouse pointer moves, and the size of the trackpad: it’s huge! I also don’t like how when I’m filling out forms the tab key takes me to the address bar instead of the next form element. I don’t want to have to flame my carpal-tunnel having to reach for the trackpad every time I fill out a form. The Firefox theme on the macbook is just… no. It’s not right. I still haven’t found a theme I like yet.

But getting the Unix features with a great GUI trumps all of that. This is not a toy, it’s a real heavy-duty machine. I could use it for pretty much anything I would use a PC for, except gaming. I don’t play games much anymore.

Oh yes… the itouch. This is an exciting device. What makes it different from all the previous iPod versions is that it has Mac OS X installed on it. Which really makes it a mini-tablet computer! After hacking (or jail-breaking as it’s called in the itouch world) into it, I can load up a shell prompt and play with the command-line. The wifi allows me to SSH into it from another computer, and it can even run a web server. Madness and awesomeness, for a device so small. So deceptive, yet powerful and strong. I can check mail on it and download Google Reader feeds onto it and browse through them on the subway.

Reading full-sized PDFs on it is still a pain, but reading properly formatted PDFs is fine. Just getting properly formatted PDFs is hard. I need to find a way to convert normal PDFs to iPod PDFs. But HTML/text based ebooks are fine. In fact, they’re great. The itouch is a great e-book reader! I downloaded a bunch of books from ManyBooks.net and will make my way through them.

I was originally excited about the itouch because it’s 3.5 inch screen is great for watching video. I have yet to transfer a single video to it.

I may post tweaks and tips that I’ve come across for the macbook to make it more comfortable.

search is where it’s at

The new Firefox 3 browser is out! You should go download it.

It has a slightly new look and feel, it also uses a lot less memory. I really like how when you’re on a page where you enter a password, it doesn’t popup a window anymore asking you if you want to remember your password. Instead it will continue to the next page, and ask you in a bar if you want to remember the password. This makes things flow smoother and faster. I’ll find out the other changes/features as I use the browser more and more.

The most noticeable change is the address bar, it now uses search to show you the most relevant URL. This means you can type in any portion of a URL and the address bar will show you the matching URLs. In fact, you can even type on the title of a page (that’s not part of the URL) and it will still show you the proper URL matches. This is great for moments where you don’t remember the exact domain name or URL but remember only portions of it. The ability to search is awesome.

This takes us to Google Desktop. This program indexes all the files on your computer and even the web pages you’ve visited. So now, if you forget the domain name and URL, but you remember some of the content on the page, Google Desktop will search amongst the pages that you’ve visited. If you download a file and forget where you saved it, or you forget the exact name, no problem. Just press the CTRL button twice, the search prompt makes itself available, type in your search query and you’re good to go.

You know how when you’ve installed hundreds of programs on your computer and Window’s Start Menu becomes huge! Well now, instead of looking through the menu to launch your program, you can just search for it. This makes life a lot easier.

Addendum
Google Desktop also indexes your email (Gmail email). Which means that you can search for your email even when you’re not connected to the intertubes. It doesn’t index Gtalk though.
End Addendum

Some of you may be concerned about Google indexing everything that’s on your computer and then transferring that data to their grand central database. This is a valid concern, though they say that they don’t do this. But Google already knows everything. Google knows what you want (because you use Google to search for it), Google knows who you talk to (because you use Gmail and Gtalk), Google also knows what you say to the people you talk to, Google knows where you live (because you use Google Maps), Google knows what data you pull in (because you use Google Reader), Google knows what you’re doing on the certain day (because you use Google Calendar), Google knows what videos you watch (because you use Google’s YouTube), Google even knows what blog posts you have in draft mode (because you use Google’s Blogger (though WordPress has but a huge dent here, but Google still has all of those indexed in their search anyway)). Google just knows. Google knows. Google.

Try out Google Desktop (which interestingly and surprisingly comes in Linux and Mac versions as well), it will make things faster to look for. Just give in… to Google. You already have.

on change

Everyone wants change. We all want to thrive for excellence and reach for the top and whatever else your motto/slogan is. But when it comes time to make the hard decisions, you’re paralyzed. Change paralyzes people. Scared and stunned, we cower back into our illusionary comfort zones.

“Change is inevitable”, “The only constant thing is change”, “(mad laughter here)”… I’m not exactly talking about that kind of change. While the principles still apply in the software context. It’s interesting how the principles apply in multiple facets of life.

You can throw all the buzz words around, as much as you want. Social networking, Web 2.0, “we’re forward looking”, “emerging technologies”, but this is all lip service. Put your code where your mouth is, and eat it. Redo it, rebuild it, go through a process of rebirth. Because if you don’t, you’ll die. You’ll become sidelined and insignificant. You won’t be able to carry your own weight and you will collapse under it.

So stop talking about it, and adopt it. Be willing to adopt it. You don’t always have to change, but you must always be willing to adopt change. That’s one of the biggest mistake software companies make, they lock themselves in. Developers write code, and they’re joined to it at the hip. It becomes their baby, and to suggest that it should be changed is off-limits. Management will in turn back these developers, because they wrote the system, they know how it works. So management is scared they’ll leave or pout if change is suggested and they’ll lose the knowledge base. So first of all, hire people so not only take pride in their work, but also take ownership. Hire developers who will own their code and the code of the entire team. And when the times comes, they’re willing to say, “oh yeah, I frakked this up. Let’s do it again, let’s do it right. Anyone have any ideas?”.

Instead, the software industry is littered with people who, on the suggestion of change, will look at you as if you just killed their dog, and then the neighbour’s kittens. Developers don’t just build features into software, they also build in job security. If someone checks in job security into your software, fire them.

But this is not the only case where people freeze upon the mention of change. There’s also the issue of “but we have software live, we can’t begin to change portions of it, we’ll lose money!”. Yes, this is true. But you have to take off your short-sighted spectacles at some point. You’re already losing money by not changing. So take a few developers, branch off the code base and let them go nuts. Keep maintaining your existing software and either make incremental changes, or in the case where you change wholesale, develop an upgrade path.

It’s okay to experiment. One of the factors that prevents change is that management wants sure fire change. They want massive guarantees, and plans and details to the extreme before any work starts. While this is okay if you’re building bridges in sky scrapers, for software sometimes you just have to make the changes. The TDD folk will disagree on the onset, but you know exactly what I’m talking about. You can’t just phantom out of thin air what changes are required or what changes will fix things. You have to tinker and play with the system to find out. Sometimes you have to make the change to see if it works. This scares management (and some developers even). People want decisions in the confines of a meeting room, afraid to deal with the unknown, afraid to take chances and afraid to move forward. To say, “we’ll have to look that up and get back to you” is like admitting defeat. Well, it’s time to accept defeat.

Once you know there is a problem, get people to fix it. Don’t have the resources? Well then, make time for one person for a day a week. Start simple, but present opportunities instead of blockages. This should be management’s primary goal. If your best people are bitching about problems, listen to them. If they’re suggesting change, listen to them. They know better than you, that’s why they’re working for you, that’s why you hired them. And if you don’t trust them to know better, then fire them. But stop pretending to want to improve and take real steps towards change. Listen very very carefully to your best people.

There’s no better way to kill innovation and creativity than to continually resist change. Stop resisting.

I am excited, okay?

I am, it’s all inside though.

I’m having lunch with an ex-coworker a week ago. We’re catching up and he asks me what’s going on with me. I tell him about work and how that’s going, and I mentioned to him how I got into the MBA program at York.

“Congratulations man, ahahaha, buddy this is big news. You say it like it’s nothing!”, the excitement on his face not being reflected in mine.

Hmm… I guess it is big news. And I am excited, I really am. I’m not sure how more to show it. But I am. It’s just that I’m in purgatory right now.

I left a place where I thought I should have some say. Say in the design and direction of the software. I didn’t want full control, but I deserved to be heard. I didn’t feel that was happening nearly to the degree it should have. And when it did, I felt it was too late. If someone heard me a year and a half ago, we would be a year and a half ahead. Too little, too late. I loved the environment, I loved the business domain, but I couldn’t stand the technology. I couldn’t stand that I wasn’t in any position to improve it. I can’t sit there and watch. I slugged through a few years, I felt like I paid my dues and I just couldn’t bare to see things repeat themselves. We should have known better. We should have done better. But we constantly chose not to. I had to leave. You can give me a fancy job title and throw more money at me, but I’m not buying it. If I can’t make things better, I will go crazy.

Now I’m in a place where I haven’t done anything. Where I was, I felt as if I contributed enough to say and to be heard. Here, I’ve done nothing. I feel like an observer. I haven’t written much code in the last year, that simply wasn’t my job. Now I’m trying to get back into things. It takes more time than one would have imagined. Sadly, I haven’t been doing much coding on my own time. I’m rusty. So I find it odd that in a place where I haven’t contributed anything, in a place where they haven’t experienced me first hand, they’re ready and willing to listen to what I have to say. Not only that, they’re modifying portions of the system based on my input. Simply because the ideas make sense. Where I was before I just thought I was crazy.

It feels odd, it shouldn’t be like this. People shouldn’t just listen (even if they argue back and I have to prove the point in detail and draw diagrams and what not), I’ve done all this before and been pretty much ignored. So it feels odd. I’m almost offended. Hah. But I haven’t done anything. I don’t understand why they’re so willing to listen. I’ll eventually get over it, eventually I’ll have contributed something and found my place. But right now, I’m not in my comfort zone, but then I realize that I may never have been, ever. I have to balance this, I’m in a moment without balance.

Excited, yes. That I got in. In all honesty, I wasn’t expecting to get in. Or I thought I’d have to jump a few hoops. It can’t be this simple, right? How can it be? My final year marks weren’t spectacular and my GMAT scores were mildly decent. So how do I just get in? Yes, excited.

But I have to make schedules work with school and work. I’ve done this before, and this is not easy, school and work at the same time aren’t easy. So I’m sitting in the office of the Director of my department, trying to be as excited as I could be, explaining to her that I got in and mostly the courses I will take will be in the evening, but some courses will be in the afternoon. She says that she fully understands and supports the initiative I’m taking. “I see you as a leader, someone who has and can provide vision. Right now though, I need you in the code, so that when you say something later, you can say it with authority”. I don’t get it. She barely knows me. How does she see me as anything? Don’t get me wrong, I praise the Lord for the situation I’m in. But it’s as if something is amiss. I can’t quite put my finger on it.

But there is wisdom in what she says. I respect that. Having someone to mentor you is invaluable in this industry. It’s invaluable in life. Go find a mentor in whatever you’re doing. I’m in purgatory. I’m not quite yet settled in. It has been weeks. So you’ll excuse my excitement.

Most people just don’t get it. Not this purgatory or unsettled thing. Most people in the software industry just don’t get it. They’re in it because it was all the buzz, and it was a guaranteed pay cheque. Which is fine I suppose, you have to eat and cloth yourself. I understand. But the problem is that if you work with me, I’ll have issues. I have issues. Most people in the industry just suck. I have massive issues with this. It’s difficult to find people that don’t suck. When I was in India, I sat in about 15 or so interviews in a month, and not a single time did I say “hire”. It’s not much different here. I was particularly upset with the hiring practices where I was before, and got myself into the interviewing process. It’s hard to find good people.

So why am I saying this? Meh, I’m in purgatory. Eventually I need not to be. I can’t work for someone else for the rest of my life. Unless they’re in the 10% of people that don’t suck. I have to be working on something that is beyond me. I have to be doing something that I love, and something that people will love.

So, yeah. I’m excited. Hear me roar.

getting back in the groove

I spent most of last night investigating setup and environments for web development in Rails (ruby) and Django (python). I like Ruby as a language, I like how it flows. I still need to delve further into Python, primarily because it’s named after the Monthy Python series. That is enough for it to deserve my attention.

I also kept switching between Windows and Linux environments. I’d prefer to work in Windows because… that’s my main operating system on the laptop right now (though some will argue why I have it in such a state). I’m running VMWare that allows me to run Linux inside Windows, so it’s still good. I’ll start using meebo for browser based instant messaging. The issue with Windows is that I’d want an IDE to work with. With Linux, I’m comfortable with the command line and Vim. So it’s works out smoother.

I think I’ll just go with Windows being the main OS, a Linux virtual machine, and development in Linux. It’s likely that any production environment will be Linux, so it only makes sense.

I haven’t done any heaving programming in my free time in a long time, and I need to get back to it. I’m high on certain notions, that I’d better get into motion, before the the driving passion dies down (yes, I tried to make this sentence as cheesy as possible).

But in either case, this is good.

at work

In an ongoing email discussion about redirecting users to a third party billing site, I asked a developer to do a code check to see if the site was up before we do a redirect.

He asked me what we can do if the site goes down after we do the check… my response:

———-

then we can’t do anything. then it’s up to God.

take care,
Adnan.

———-

CouchDB

This news makes me happy. It means you can bake your cake, eat it, and share it too. I’m being completely bowled over by the power of free (as in speech) software. Awesomeness.

Good for you Damien. I’m also in love with the CouchDB logo:

CouchDB logo

I’ve been meaning to mess around with CouchDB, the whole document based database with Lucene based full-text search intrigues me much. Not to mention the JSON and REST interface. “relax”… I think I just might.


compassion, empathy, trust and happiness: a work-life balance

Bear with me here, these are all random unstructured thoughts.

Do you love what you do? In work or in life?

Why is it important to love the work you do? At least, why is it important for me to love the work I do? The work I do is a part of my life, it is a part of who I am. The general structure of our society dictates that we are at work at least 8 hours a day, for a lot of us it’s more than that. This means that we spend more time in a day working and getting to work then we do other things, like spending time with family and loved ones or sleeping. So is it not important that for our own well being that we love what we do? Or that we do what we love?

Does money buy happiness? If time = money, and money buys you happiness, I would argue that time (not buys but) brings you happiness. Hah, the need for money vs the need for time. I would choose time every time around. Time allows you to do (or think) a lot more than money does. Money is a lame substitute for time. And those that are attracted by the lure of money are also lame. Money does not, cannot and will not buy you peace of mind. Time is not equal to money, time is far more valuable than that.

So then, why are we not happy? At work or in life? No one can be happy all the time, so why aren’t we as happy as we should be. I think it has a lot to do with a lack of compassion, empathy and trust. Think of all the conflicts you find yourself a part of, now imagine that those involved in the conflict trusted each other more, empathized with each other and were more compassionate, what would be that state of the conflict then?

I’m sure there are more concepts apart of those three that I’m missing, but in my mind those three suffice. It’s sad because we are not conditioned to trust or empathize or be as compassionate as we should be. But then, when we are, it’s often misconstrued, people start thinking things, questioning your motives. Now think of how difficult it is for someone to empathize or be compassionate when all you are doing is questioning their motives. Meh, but don’t let that phase you.

If you’re doing something good for someone and are looking for something back in return, you might as well be dealing in money instead. I’m not saying that knowing that you helped someone is a reward in and of itself (it might be though), but I’m saying, stop looking for rewards.

Clear your mind, think of nothing. If you think about nothing, then you have nothing to worry about. In our lives these nothing moments are very short and they come in different forms. A chuckle, a laugh perhaps a gasp (there are so many more), but they don’t last long. Think about what we can do to maximize those moments, think about what we can do to maximize those moments for others!

Let moments of nothingness be your motive, let them be your reward.