Sometimes, medium is everything

I sucked at arts and crafts. So when my primary school arts teacher told the class to come up with our own art projects to submit, I wasn’t too happy.

Luckily, I had a children’s encyclopedia (yes, it was still a thing back then…) and I flipped through the arts and crafts book… And found something interesting.

It was a woven seat. Basically you take strips of newspaper (the printed kind. Yes, it was still a thing back then…) and weave them together. I believe there were 2 sets of the weaves, and then you weave them together at the edges. Each strip was maybe 4 layers of newspaper, so the whole thing turned out to be quite bulky. And soft due to the material used.

My arts teacher was positively ecstatic, probably because my newspaper woven seat was one of the few original projects in the class. However, the “dirtiness” of the woven seat bothered her. You know newspapers are (were?) printed with ink, and newspaper ink can, you know, smudge your fingers.

So she asked me to make another one, but use construction paper instead.

That was hard. Construction paper is rougher and less pliable than newspaper, so it’s harder to weave. In the end, the one made with construction paper didn’t have the seat-feel to it.

A simple solution to the newspaper woven seat being “dirty” would be to wrap it in clear plastic. This way, the texture is retained, the softness retained, the “artistic” look retained, yet it remains “clean”.

Construction paper is just not very suitable for this particular art project. Sometimes, medium is everything.


My Open XML spreadsheet class is starting next Monday, 2 July. I’ve written a programming guide on the topic, but this is the first time I’m writing a study course curriculum on it. I’m excited!

Internet browsing with awareness

Some time ago, a friend asked me for advice on online businesses and online marketing and stuff. You know, because I started learning how to feed myself without relying on a job over 3 years ago. That’s also about the time I started writing here, which is what every Internet marketer will tell you to do, start a blog. Then I went ahead and wrote about maths and programming, which probably isn’t very lucrative. It hasn’t earned me enough to buy a cup of tea in any case. You don’t read much about my perilous journey in the online marketing/business world, because I haven’t thought it useful or interesting to write. Well, I thought maybe I should start telling you about it now.

Back to my friend. I was explaining how Google works (generally, because my friend might collapse from information overload). Out of curiosity, I asked him how he did searches. He said he types in the search term, hits the enter key, and clicks on whatever is on the screen. Galloping galaxies, he doesn’t even look?!?

I told him some of those links he clicked on probably cost some person out there 50 cents every time he clicked it. I’m more concerned with the unfiltered, unthinking, undead way he went about browsing the Internet. Perhaps Nicholas Carr was right, maybe Google is making us stupid.

My friend wasn’t technologically inclined. Then again, I know some programmers who were frightfully stupid in tech stuff… I am going to assume you know the general safety tips for browsing the Internet:

  • password safety (but it’s moot if you use the same password on every online account)
  • anti-virus software is set up (even supposedly impenetrable Macs and Unixes/Linuxes were compromised before)
  • be careful about revealing sensitive, personal information

Now, I’m probably going to anger many Internet marketers, because in the process, I’ll expose some of the tricks they use to entice people to buy, join, sign up, and generally act on something. That’s assuming they even read my stuff. Maths and programming blog? I don’t see it happening soon.

But all that is unintentional (hey I do know the meaning of the word!). My aim is for you to browse the Internet with some awareness of what you’re doing.

The big takeaway is trust. As you probably gathered, I have a healthy amount of distrust. 3 years of studying marketing strategies and tactics, and having bought certain Internet marketing products (and felt cheated after that), and experimenting with the methods (my first significant outsourcing turned out to be a fun adventure) did that to me. This is going to be a series of articles, and I will start with the basic concept of the Internet:


Links can be open about where they lead. For example, is direct enough.

Links can also be disguised. For example, Get Awesome Delicious Chocolate Chip Cookies For Free! (hey don’t click that, you’ll spoil my search engine optimisations…)

This happens on a web page. What you may not know is, links can also be disguised in PDFs and emails. I understand that when you click on a link in a PDF, Adobe Reader puts a prompt before directing you to that link. Due to routine, habit, or just laziness, you might not take a look before confirming. Same thing with email, because we now have HTML emails.

The way to safeguard yourself is to hover over the link (but don’t click it yet). The actual URL will be displayed somewhere. On a web page, it might be displayed at the lower left corner of your browser. In a PDF or email, it’s probably hovering in a box close to where your mouse cursor is. It’s easy, takes just a couple of seconds to check, and can potentially save you tons of headaches.

Affiliate links

Alright, here’s where all the Internet marketer hate will be directed. First, I want to say there’s nothing wrong with affiliate links. There’s nothing wrong with trying to earn a little bit of commission. I have affiliate links to products and services I believe in (and I can’t remember all the places where I put them, even though there aren’t many…). Usually Amazon book recommendation affiliate links. If you buy using my affiliate links, I get a small commission (which helps feed me and keep this blog running). If you buy directly, you pay the same price anyway, so I’d appreciate it if you buy using my link.

The point is transparency. I’m not talking about disclosing the relationship you have with your advertiser or sponsor right beside the link (or in the article/post, or in a privacy policy). I’m talking about deliberately cloaking the link so the actual URL is misrepresented.

Here’s a “tip” I learnt from an Internet marketer (I’m not saying his name). You create a PDF ebook and give it for free or sell it. You write useful content, and give a recommendation on something, say web hosting. You deliberately do not name the web host. Just say something like “Here’s a good web host”, and transform that phrase into a link.

Here’s where it gets sneaky. You create a page on your website such as and use that page as the link in the PDF. On this page of yours, you do a URL redirect (using meta tags, JavaScript, or PHP) to the recommended web host, likely as an affiliate link.

Now, the PDF is already out there in the open. What happens if you no longer want to be an affiliate of that particular web host? Ah, just change the redirection to another web hosting affiliate link. The link in the PDF remains intact, clicking the link goes to your page, which redirects to the new web host.

This is why you should try to glimpse at the destination URL first. With URL shorteners nowadays, this gets a little harder. You’ll have to trust the URL shortener service. I suggest you trust those that allow you to glimpse at the resulting URL (such as You still need to look at the unravelled URL though.

Which brings us to…

Uniform Resource Locators

Look for the complete domain name. is not the same as (I hope you appreciate all this search engine doubtification I’m doing…) Look for the first forward slash that’s not part of http:// or https://

Now look at the domain name. Do you trust it? If you don’t, then do you trust the source? Was it a search result? Do you trust the search engine (results can be manipulated somewhat to a certain extent)? Did it come from your friend? Do you trust your friend (it’s a weird question, I know)?

My point is for you to cultivate independent thinking. I mean, we’ve already got problems with cross-site scripting. Don’t make it easy for the bad guys by rampantly clicking on links.

Here’s a bonus. Look at the full URL link. Look for a question mark or some shortened form of the person’s name or website in URL. For example, (by query parameters) or That’s usually an indication of an affiliate link. I would deduce that “r=1234” means 1234 (“r” probably stands for “referral”) is the ID number of the person, or a product ID.

That’s it for now. Let me know what you think in a comment, and I’ll see you soon.

A typical month work load

Climber by Bettina Ritter
[image by Bettina Ritter]

I don’t really have a typical work day. It doesn’t mean I have an exciting job. It just means I can’t tell you what I’ll be doing the next day, because I don’t know for sure what I’ll be doing. What I can tell you is what I do in a typical month, generally speaking. There’s a point to all this, and I’ll start with…

From 8:30 am till 6 pm

Those are my work hours. Except Friday. On Fridays, I get to go off at 5:30 pm. My current job title is IT Analyst, changed from Systems Analyst. And if you think that’s vague, you’re right. My job scope is quite varied. Basically, my contractual terms require me to “do whatever the boss tells you to do”.

The current company I’m working for isn’t a software company. I just work in the IT department. What it means is, programming isn’t as highly regarded as I want, as what I read about in those programming blogs and sites. It kinda sucks, but it keeps me fed.

Let me tell you about the tools I use at work. I’m the “online guy”, which means any user interface related development comes to me. I use Visual Studio 2003 (C# and VB.NET) for all the web applications, console programs and a few software tools I create to help me. I also use Visual Studio 2005 for one particular application, with a graphical user interface. It’s too tedious to explain why I use both versions. It’s enough to know that I do.

I also use PowerBuilder for some Windows applications. It’s really, really painful to work with PowerBuilder code. I tell myself it’s the previous programmer’s skill that’s to blame, not the language, but I frequently fail. Tracing and debugging PowerBuilder code takes a lot of work for me. I really hate PowerBuilder… I think this calls for a separate rant article.

I’ve been asked to investigate C and C++ code on Unix machines too. So yes, I understand make files, shell scripts and cron jobs. I even know how to use the vi editor! I used to telnet to the Unix machines with TerraTerm, which is now abandoned for a more secure client application. Can’t remember the name because I rarely use it, because I rarely need to telnet.

Database admin, server admin and LAN admin

Despite the fact that I’m completely ignorant of SQL and databases in my formal education, I’m thrust full force into it at work. I’ve worked with the Oracle, SQL Server and Sybase databases, know most of the nuances between them on SQL syntax, and understand how to use stored procedures. I handle them all.

I am also completely in charge of a few Windows servers and the SQL Server databases running on them. Server maintenance, backup schedule and tapes, security patches, SSL certificates, IIS configuration, server performance.

Then I’ve got to know about the opening of ports for security purposes, who to notify when there are application or server changes. I need to know ping and tracert and ipconfig and other network related stuff.

All of that maintenance and administration is on top of my development work.

I don’t need to connect to Oracle databases now, but I used to do so with TOAD. There’s a limit to the number of licenses, so I wrote my own database connector program. It only does retrieval of data, basically the select statement, but it’s enough for current tasks. The Oracle databases belong to another team, and they’ve only needed me to help out rarely.

I use the Enterprise Manager and Query Analyzer for the SQL Servers. They’re great tools, and they come with the database installation, which is cool. There’s also another tool that has saved me many times. It’s the DTS, Data Transformation Services. I’ve used it to transfer data interchangeably between Oracle, SQL Server, Sybase and get this, Excel. Users take to Excel much better, so I need to use their form of “database”.

Designers, comparers and reflectors

I’m also a web designer. I suck at it, but I’ve been lucky enough to muddle through, and my users and their customers think my user interface looks awesome. I use Paint.NET (and sometimes the inbuilt Windows Paint program) for my image editing tasks. Plus I’ve got some colour tricks up my sleeve.

Some time ago, I had to verify some old code by another programmer. He can’t remember what he changed, and I obviously don’t know what could possibly be changed. I needed help! Fortunately, I found CSDiff. It allows you to compare two files (or even folders) and lists down differences between them. Much better than checking line after line of code by inspection.

And if you do .NET work, you must get the Reflector by Lutz Roeder, which had been taken over by Red Gate Software. It allows you to get back code from compiled .NET DLLs and programs. The result might not be the prettiest code, but with sufficient talent and patience, you can get something out of it.

I’ve used it on my own code and other team members’ code to check for disparity. Sometimes, you forget which version you’ve compiled that code into… Sometimes, it’s for self study, to understand what others have done.

The phone calls. Oh the phone calls.

My phone rings a lot. There are over 10 people in my immediate vicinity. I can tell you that, if you add up all the phone calls all of them ever receive in a month, it would still be less than what I alone receive in that same month.

Remember I told you I’m the “online guy”? That means a lot of users know me, and I don’t know all of them. Since they usually interact with the application interface, any problem is routed to me. Whether it’s data inconsistency, business logic query, application error or failure, all of them come to me. I’m a one-man helpdesk I tell ya.

It was so bad that sometimes, I’ve had to solve and handle user queries for entire days on end. Due to the nature of my work, the start and end of the month are particularly busy for my team. The number of times my phone rings goes through the roof. Maintaining decent phone etiquette starts to be a strain…

Wait, there’s something missing…

Where’s the source control software I’m supposed to be using? Well, I’m the source control. My team is very small in size. Company directives dictate we send work to our offshore colleagues. I think those (typically recent graduate) colleagues have some problems of their own, let alone set up a source control system that works across geographic boundaries.

I’ve not been with development teams at other IT departments, but I think we would totally fail at the Joel Test. Totally.

Despite these circumstances, I still manage to do development work, sometimes with surprising and outstanding results. I believe good task management is crucial to my balancing act. Which brings me to…

Holistic approach to programming

If you’re working at a software company, or on something focused on software and programming, I envy you. I really do. You’d probably get to talk with other programmers on interesting topics. Your work is really appreciated, because it goes to the bottom line.

I might not be programming exclusively, but I get to see the bigger picture. I get to liaise with people from sales, marketing and customer service. I get to talk with upper management and even the actual customers. I get to see the kinds of products and services offered, and how it’s implemented and supported by software.

Programming is kind of … an elite thing. When I was studying C programming in university, I was surprised that many of my fellow students struggled with it. I took to it like a fish in water. After a while, I realised that most people cannot grasp the thinking required in programming, even if they opted to study it themselves.

So I’m going to state this. Many people are not going to understand how great that piece of code you’ve written. Many people think software can make their lives easier, but fail to realise that not everyone can write good software.

This is where all your other skills come in. You have to sell what you’re doing to other people. Convince them that it’s useful, that it’s awesome, that it’s relevant, that what you do and what you propose is important.

Sell your ideas. Market your ideas. Your software is more useful if you see it from a bigger-picture point of view, from other people’s point of view. That requires you to understand other concepts. Concepts that aren’t related to programming at all. And you synthesise them together to make your code better.

And that, is my point.

You have 10 seconds

I was walking along the Orchard Road (a busy “consumercial” street) in Singapore. There was this guy who approached me with maybe 2 pieces of paper and a blue plastic envelope/bag in his hands. He looked a bit flustered, and started talking to me and pointing to the top piece of paper.

I heard words such as “help”, “ex-convict” and “get jobs”. I saw the word “ex-convict” on the piece of paper he’s pointing to. The foremost thought on my mind was, “what does he want me to do?“. Do I need to sign a petition? Do I donate some money? Do I have to give out contact information?

After, I don’t know, 30, maybe 40 seconds, he finally got to the point. “Please donate.” And that’s what the plastic envelope was for. I’m not sure if you’ve seen this. It’s a flat carrier, with a small slit near the handle on top, large enough for coins to be slotted. You can even slot dollar notes if you fold them a little.

I donated some money and I was off. I am aware of this movement; I read some poems written by inmates on those service tray paper in Coffee Bean. It’s the Yellow Ribbon movement in Singapore.*

There was another incident where I was having lunch with my colleagues, and this young lady approached us and started her conversation with the words “I’m not here to sell you anything”. Loosely speaking, she was selling us something. I’ll get to that in a moment.

I can’t even remember what she was representing. She pointed to her badge hung around her neck, said something to the effect that she’s authentic and real and part of an authorised movement. She started talking about her cause. For, I don’t know, 30, maybe 40 seconds.

Then she got to the point. “Please donate”.

I have every respect for your cause. I empathise with the people you want to help. I also treasure my time very much. So please tell me exactly what you want me to do, and then tell me why I should do it.

Get to the point

Let’s look at this in a simple situation. A tourist asking for directions. “Hi there, I’m kinda lost. Can you tell me how to get to such-and-such building? I’ve been walking up and down this street for a long time.”

Short, simple and under 10 seconds. From your look, your mannerisms, your dressing, your behaviour and then with your question in context, I have already made up my mind about what I want to do with you. Say a stranger walked up to me, and from appearances I could guess he’s a tourist. Facial expressions and body movements suggested tiredness and slight frustration. I could probably tell if he’s lying, if his words matched his outward appearance.

Frankly speaking, when the stranger walked up to me, I probably already decided that he’s lost and he’s going to ask me for directions. And I’ve already decided to help him if I could. Verbalising the question was just a formality.

What happened for the 2 people above was that, when they approached me, I’ve already made many unconscious decisions and arrived at an answer. They were asking for donations, and maybe spread awareness of some kind. They were asking for help.

I’ve already decided they’re probably asking for donations, and I was waiting for them to confirm that. I could be wrong. So I waited for them to tell me if they wanted a donation, and if it was, what was I donating to.

I waited and waited. I didn’t interrupt them since it would be rude. And waited for 40 seconds. I was deciding if I wanted to donate, and what else they wanted with me. And that thought occupied my entire thinking process while they were trying to educate me about whatever it was they stood for.

Make it simple and painless

Look, it’s hard to approach someone as a stranger, and start trying to educate that person about something within minutes. That person is already busy trying to figure out what you want with him. You’re making it harder by introducing a concept that might possibly be unfamiliar to the person.

Now, this might sound a little odd. Anytime you ask for something, you’re actually selling something. It’s just that sometimes, your price isn’t monetary. In fact, if you’re reading this far, I’ve already sold you something. I sold you information, and it’s free. In monetary price anyway. The price was actually your time, your attention. And it’s very valuable to you and to me.

For donations, the product being sold is the feeling of helping someone or a cause.** It might sound materialistic and cynical. It took me a while to wrap my brain around this. If it helps take the edge off, you can think of the product sold as just helping someone or a cause.

Donations obviously have a monetary price tag on it. Is there a need for people to pay with time and attention too? There are empathic people. There are also empathic people with busy schedules and limited time. You can spread awareness about your cause in another fashion. The street is not the most conducive environment to do it.

There’s something I read, written by David Eddings. It’s fiction, but I think it has real life roots. Eddings wrote about this beggar. The beggar was obviously asking for donations. The “trick” was to get the message across, and make it as painless for the donor to donate as possible. A missing leg, dressed in rags, covered in dirt, and crying out “Charity!” in the feeblest, most pathetic voice while sticking out a donation bowl worked wonders.

The wordless exchange

There’s another incident where I was having my meal at a diner. It was relatively empty, only another lady and me. A person walked into the diner and laid something on that lady’s table. “I’ve seen this before.” was my first impression. And that person came over to me and laid something on my table too. It’s a card and a key chain, shaped like a key. The card read something to the effect of “I’m dumb and please buy this key chain from me.”.

When that person walked in and placed something on that lady’s table, I already came up with an image. A dumb (as in unable to speak) person asking people to buy something, almost like a donation. That person placed his card and key chain on my table, and left. His body movements, and my previous memories of similar encounters, and the card told me everything I needed to know. And I knew what he wanted, to buy his key chain (in this case).

He didn’t stay to explain his situation. He didn’t have to explain his cause. He couldn’t tell me even if he wanted to. Yet within seconds, I knew what he wanted me to do.

He returned after a while, and came to retrieve the cards and the key chains. If the person wanted to buy, great. If not, he’d just collect his card and key chain.

He came to me. I bought his key chain. I took out the required amount and handed the money over to him. He took out a set of key chains and gestured. Oh, I get to choose the colour, and chose gold. He took out a new gold key chain, and handed it to me. Then he took out another card and showed it to me. Oh, it acts as a bottle opener too.

Key chain shaped like key

I smiled at him. He smiled back, and then left. I didn’t feel stupid at all, despite some fumbles over communication, despite the fact that no words were ever exchanged. I felt good.

Impassive interface

Human face-to-face interactions have the benefit of facial expressions and body movement to add context. With computer programs, your users miss out on this benefit. Suppose the user already know what the interface is for, for example, an online sales order form. Is the interface intuitive enough that the user knows what he needs to do next?

I’m not talking about people who have the attention span of a gnat, who clicks away within 2 seconds if the web page doesn’t load fast enough, or the initial look isn’t interesting enough. I’m talking about people who already know what they need to do, and why. I’m talking about people on that web page, or program interface, and they are confused about what they need to do to make what they want happen.

Make the steps they need to do obvious. Make the text fields and required input format obvious. Have appropriate text for action buttons. Some of these people could be busy on the phone, attending to customers. The last thing they need is a confusing interface. Make it obvious to them what they need to do.

Because on the screen, you have 10 seconds to tell them what to do.

* I went to the web site, and it turns out there’s a pop-up warning about donation soliciting on streets. Maybe I was conned?

** There’s this idea that when you buy, you’re actually buying a feeling. That car you bought? You’re buying the feeling of freedom, of convenience, of status. That dinner you bought? You’re buying the feeling of staving off hunger, of being satiated. Just a different perspective.

BlogRush – the first rush

[Note: there are referral links in the post]
BlogRush widget capture I just read an article from Yaro about this new blog widget/technology called BlogRush. Intrigued, I went to take a look and after watching the introduction video, I was moderately interested.

But I was actually ready to abandon the whole idea, because it sounded a bit too fantastic. Then I thought that this was an excellent chance to do some blog traffic experimentation. So here’s a brief rundown of how it works.

  • Sign up for an account, where you’ll then be given some Javascript
  • Stick that Javascript code into your blog
  • Wait for traffic to come

That’s the easy part. Now for the technical part. Every time your page is loaded with the widget, you get one credit. For every credit you amass, your blog is shown on another blog’s BlogRush widget. So this means, the more your blog is visited, the more your blog is shown on other blogs, which brings more visitors.

Here’s the cool part. For every referral you make by getting someone to sign up for BlogRush, their credit is added to your own. And for every referral that person make, you get their referral’s credit too. It’s a multi tier thing, and it goes up to ten levels deep.

This was where my internal alert came up. I thought on it for a while, and decided that it could be marketing done well. It’s similar to other means of marketing, like MyBlogLog. So after deliberating for another few minutes, I decided to give it a go.

Besides, it might be fun to see how a startup technology perform. Here’s the link again:

Just checked my inbox, and received an email from John Reese, the founder of BlogRush. Turns out the referral system isn’t one credit per referral all the way down the ten tiers, as I originally thought.

1st Generation Of Referrals (Directly From You) = 1:1 2nd Generation Of Referrals (i.e. Jen in the video) = 1:1 3rd – 6th Generation Of Referrals = 1:4 7th – 10th Generation Of Referrals = 1:8

1:1 means you earn 1 syndication credit for every 1 impression of the widget by your own traffic or by any users located on the 1st (direct) or 2nd generations.
1:4 means you earn 1 syndication credit for every 4 impressions of the widget by any user located on the 3rd to 6th generations.
1:8 means you earn 1 syndication credit for every 8 impressions of the widget by any user located on the 7th to 10th generations.

Anyway, after giving it some thought, BlogRush will need a really scalable system or they’re going to crash. Just remember Friendster. And this is going to be much more calculation intensive. I would think most bloggers have more readers as referrals than people have as friends. And this is supposed to be ten levels deep.

Crash and burn? Only time will tell…