Tuesday, January 24, 2012

I'm back!

... not that I had gone anywhere...

In the last 4 years, I've been involved in a lot of projects:
  • I've worked for Alonia (www.alonia.ro)
  • I've worked on Windows Mobile
  • I've worked on some poker related projects
  • I've done some pretty cool QT GUIs
  • Done some heavy low-level Windows-hooks programming
  • Some C# and Java
  • Some Linux (even though Windows is still my favorite)

The same holds true for all projects, no matter what language: the KISS principle (Keep It Simple, Stupid). If it's simple, you can maintain, fix, extend it as easy as a breeze!

Another word of advice - if it's a constant, make it a runtime setting! Can't explain how easy this can make your life! Instead of recompiling to see what happens if "we're using a 100Mb cache instead of 50Mb", just change one line of text, re-run, and boom - you know it!

Well, that's it for now, cya soon!

Best,
John

Sunday, June 15, 2008

Don't let teachers interfere with your education...

They usually say "Don't let school interfere with your education..." - but school is only part of the problem.

You grow up being told that School is the ultimate tool to crave our future, and we need to obey School. You need to learn everything they teach in School. You need to get good grades, you can't skip School, and so on...

Our parents tell us that we need to respect the Teachers. You can't be a troublesome kid, "do what the Teacher tells you to" - and that's how the problem develops.

We, as kids, see that Teachers are the authority. If the Teacher says X, you do X.

But worst of all, the Teacher has the right to say "You failed this exam. Yes, the Teacher has the holy right to fail you - and you'll need to take the exam again and again, until he decides you can pass.

(side-note: this is seen much clearer in Universities/Colleges, as opposed to High Schools/Primary or Secondary School)

Teachers know this, and a very lot of them overuse this power. It's going to their head - a lot of Teachers consider themselves as super-beings. Most of them think that the class they teach is a must - you will never succeed in life without their precious advices. And since they have the power to fail you, they can subtly force you do stuff you normally don't need to do. Like, in Romania, it's common use for a University Teacher to force you to buy his book (or, you won't pass the exam) - and most such books, just between you and me, are crap.

In Romania (and it seems quite often abroad as well), attending courses is obligatory. That is plain stupid, to say the least. What if I can learn by myself? What if I have something better to do? Give me a fair exam at the end of the semester, and be objective. How I study your courses - that's my problem. Why do you have to force me attend your courses? Holy Teacher, is this the best you can do?

But the cherry on the top - if you fail an exam, you need to take it again and again until you pass it (and sometimes you need to re-take the courses over and over). To this, I have a simple question: "Why?"

Why do You have to decide for me if a class is important to me? Just to show me that I'm small and you're BIG. So that You'll show me who's the authority... We all know we need to respect authority. We all know we need to respect Teachers.

Well, not me - I don't respect teachers - just because they're teachers. You, as teacher, need to earn my respect - I don't respect you by default.

Getting back to the problem at hand - why can't the school let you graduate with some exams failed? Fine, I failed some exams - I don't care - it's most likely classes I never cared, nor will ever care about. At the end of the school, just give me a diploma, and write my grades on it - if anybody want's to know, they'll check that. It's my interest we're talking about - if I fail an exam I care about, I'll feel ashamed, and take that course again because I want to.

School - as is right now, is obsolete - and I'm not talking about Romania here. Instead of forcing you to obey (which is what schools do now), they should show you free will. It's very hard to have free will if all your life you've been taught to obey.

Just think about it, when for your work, you attend a one-week course, those teachers are really amazing and they do everything in their power to make you understand. And at the end of the course, You give a grade to your teacher. That's how it should be.

Because, if we come to think of school as a business,
  • the teachers are the employees
  • the students are the customers
  • and the customer is always right
So, in the end,

If you're a teacher, remember
  • you're not a super-being, and
  • not all the students care about your class - this is ok, those that really care, will actually learn/be interested about your class
  • failing students will not help them
  • if you truly care about what you teach, make sure your classes are interactive, and that you actually care about what your students have to say
If you're a student, remember:
  • you don't need to respect a teacher just because he's a teacher
  • focus on the classes that you care about
  • you can learn a lot by yourself from books - often better than what teachers teach
  • university (lowercase "u") is not the holy grail - don't let teachers interfere with your education...

Wednesday, June 4, 2008

eGUI++ - Easy GUI for C++

Hey guys,

It's finally here: eGUI++ (Easy GUI for C++). It's the follower of win32gui, much easier to use, much simpler, cool code-completion, events are very simple to use, and a lot more goodies.

Read about it on MSDN
And download it from here

Best,
John

Saturday, May 24, 2008

Craving for more?

When describing desires, people fall into 2 categories:
  • Person F, who has an income of 4500 euros, or 4700, but strives for 5000 euros
  • Person M, who has an income of 4600 euro, but strives for 400 more euros
Person F strives for a fixed amount, while Person M strives for more X euros. Do you see a fundamental difference here?

If not, let me give you a slightly different example. Say you're looking for a new job, and before going to any interviews, you said: "I'm targeting 5000 euros".

You get 2 offers:
  • Offer 1: 4800 euros, flexible hours, not very stressful
  • Offer 2: 5500 euors, 9-to-5 hours, with the possibility of aprox 20% overtime
Person F will choose Offer 1, while Person M will choose Offer 2.

Before delving into more details, let me give you the facts:
  • there are a lot more of Person M in the universe
  • Person F live a quite happier life than Person M
The fundamental difference between Person F and Person M is:
  • Person F has a fixed goal, knows when the goal is reached (in our case, the 5000 euros/mo), and takes the time to enjoy it, before eventually moving on to other goals
  • Person M will always want more, even if he reaches 6 or 7000 euros (while also ending up working more and being more stressed)
There's something very comforting about reaching a goal, and slowing down for a while, just to enjoy it.

The trouble with being a Person M, is that it unconsciously means more work on your part. You want more, you need to do more. The fundamental difference is that Person F understands this, while Person M doesn't (and doesn't know when to stop).

What type are you, and, if you're a Person M, are you willing/do you want to change?

P.S. It's my birthday today, so Happy Birthday to meee!

Thursday, May 15, 2008

The ancients and their fax machines...

Personally, I don't understand people that still use the fax. It truly denotes a lot of stupidity on their part, when email is soooooooo much better.

Email is so much easier :
  • to store
  • to copy
  • to search
  • to send/receive
  • to categories
  • to forward
  • the service is 99.99% available

And who can be so stupid to use the fax? At least the following: the Romanian Pu(b)lic Administration. Unfortunately, they're not alone: there are other idiots that use it (like, Grupul de Presa Roman, aka, Romania Libera).

When I hear of an organization that uses the fax, a bell rings - this clearly has quite a few employees that are there just to slow down a process.

Unfortunately, you do need to deal with idiots now and then. I used to be very pissed before, since I don't have a fax and had to go to the Post Office to send faxes.

Well, finally, I'm using www.efax.com to send my faxes online. They haven't payed me for advertising, I'm just happy they exist - I've sent a few faxes using their service, and amazingly, it works. Just one less stress for me :)

Wednesday, April 23, 2008

Yahoo Mail is plain stupid...

I don't care what you think, but the fact that yahoo has email addresses like someone@yahoo.co.uk, or someone@yahoo.it, etc. - that's completely idiotic.

Why do I need to remember, besides the username, the yahoo extension? It's like saying "Hey, his name is James, but you need to call him James Jayjay before he answers".

I really don't care about Yahoo's history, but this should not exist. If it's yahoo, it should be "yahoo.com". I'm more and more inclined to forget about Yahoo completely. Really.

Friday, April 18, 2008

Addicted to blogging?

It seems that more and more bloggers have their blogs crowded - that is, 3-6 blog entries per day, or more. Probably they think they'll get more readers that way (the law of the big numbers - I will write more, so that a reader will find at least something I wrote interesting).

(side-note: I'm not talking about "magazine-like" blogs, where more authors write to the same blog; I'm talking about a single author's blog)

Well, for some, this has definitely proved to be a winning strategy. But for the rest, this is a waste of time twofold:
  • for the blogger, that wastes time finding stories to tell (having links to other blogs, etc)
  • for the reader, trying to find something useful, but finding just "cover-stories"
Why am I saying this?

Today I unsubscribed from 6 blogs. I value my time, and I don't want to waste it reading pointless stories.

I really value bloggers that write 1 post every 1-2 days, or even more seldom: Joel, Seth, Stevey, etc.

When I read a story, I see that they took the time to write and refine it. I know reading their posts is not a waste of my time. They give me "The Wow! effect" (I'll blog about this later).

So, why not write less, but say more?

Wednesday, April 16, 2008

Answering thy phone...

Seth Godin makes a very valid point. And it's happened to me quite a few times - someone bored answering the phone, not giving me the information I need, etc.

The solution?

  • Conversations need to be recorded
  • Bad feedback
    • must reach management; his needs to happen right away - if you can't forward the person directly to a manager, forward him the recording of the call
    • when receiving bad feedback, ask the caller for a phone no. or email, so that you can later reach him/her
  • Allow your customers to rate the person they talked to. I've seen this happen for some enterprise corporations like IBM, HP - kudos to them!
  • The marks your phone operators get - record them, and also forward them back to the phone operators
  • Have rewards for operators that are rated best
It's not that hard, you just need to truly care for your customers...

Monday, March 31, 2008

IM versus Phone

I enjoy IM much more than phone. Of course phone is best at times.

However, mostly, I really enjoy IM
  • IM doesn't have the "urgency" attached to it - I can solve a request on my own time
  • IM is logged by default (while phone is not recorded by default)
  • sometimes you forget things over the phone, while with an IM, you can later remember them
What do you enjoy?

Saturday, March 22, 2008

Thy Visual search... - update

After a few more clicks, I found out there's another 3d search engine: www.spacetime.com

First of all, this works now. I downloaded it, it's really really cool. I did find a few bugs, but it's understandable. So, prepare for the next era of browsing...

Thy Visual search...

I've just seen it - www.searchme.com.

It shows you search results, visually.

It's quite amazing, not sure if others had the same idea before, but I think this one came at the right time:
  • a lot of people have broadband (which you need in order for the search results to be visual)
I do believe it can improve your searches, but I need to check it out live, before making further comments. Take a look!

Thursday, March 20, 2008

Email: Check for messages when?

Yup, most (if not all) email readers have a "feature" : Check for email messages every X minutes.

That's a misfeature:
  • if you check it too often (like every 10 mins), you get bugged too many times (usually you hear a sound and some message near the system tray)
  • if you check it too seldom (like, every 2-3 hours), you could find out about stuff too late; things could get worse if the email server is down exactly when you check it (happened to me a few times)
  • the program should alert you only when emails that interest you arrive (see below)
Email checking should be done every 5 minutes (this is a reasonable default, you should be able to customize it).

However, alerting you when new messages arrive, that's a completely different matter (in other words, the mail reader can check and download new messages every minute if it wants to, but it can tell me about new messages every hour).

New email messages can be split into 2 categories:
  1. message from someone you already know, related to some matter you probably know
  2. message from someone you don't know yet (so you don't yet know how you should react)
In the first case, you'll have your filters (don't you use filters? you'd better learn how to use them fast!) sort the email and put it into some folder.

In the latter case, new email will just go into the root folder, which is usually ok anyway.

Having that, here's what should happen:
  1. For certain folders, you can have an alert (when a message gets routed to a folder, play a sound).
  2. Otherwise, let the program alert you every hour or so (of new mail)
Now this is a huge advantage over what's happening today. Imagine this: you can instruct your colleagues, partners, etc. to include '[critical]' in the email subject to let you know of something that is indeed critical. Then, when something really urgent hits, you'll know in 2-3 minutes, helping you deal with it ASAP. And you know that the earlier you solve a critical issue, the less damage it does - every minute could count!

What is achievable now:
  1. there's an extension for Thunderbird: "Mailbox Alert" which can trigger an action when a new email arrives into a certain folder (the case 1 above)
  2. anyway, every hour or so, I read new mail (the case 2 above)
Well, it's as close as I could get to perfection ;)

Wednesday, March 19, 2008

We're gonna implement that cool feature! Great, but who's gonna use it?

Assume you're a programmer, part of team A to develop product B. You have release X.Y.Z coming up in 2 months, and there's plenty of features to develop. So, lets make up the list of features to develop, for release X.Y.Z.

A lot of companies these days are democratic - they will create some great meeting(s), involving all the team, and then deciding what (features) to implement next. Then, go ahead and do them, and as release approaches, well, just drop some features (those too hard to implement).

Sounds (too) familiar?
Well, I'm here to tell you - it's wrong!

No matter how democratic a company is, when deciding the features to implement, this should be up to the User Experience department.

Why? Because programmers will just choose the features that sound coolest for them to implement, not with the benefit to the user in mind. It's very hard for a programmer to think like a user, and even if you think you do, you're too close to the code.

The features should be in line with your customers' needs, and the priority of the features should always match those needs.

The challenge for you, the programmer, is to make it happen. It's good to be under a bit of pressure, so that
  • you'll talk to the User Experience department to understand what this feature offers the user, to implement it right
  • you can focus on using the best tools (as opposed to subjective thoughts like, I'm not using Language X because it lacks A,B,C)
  • you can shift focus on getting things done. We programmers tend to spend a lot of time blabbering about which technology is cooler/better/etc. - but it doesn't matter. You first need to understand the problem, and then choose the technology you'll use to solve it (not the other way around)

Thursday, March 13, 2008

Directories - a flawed concept...

Yes, I'm talking about thy usual directory. Or folder, if you wish. What your OS provides you with. And you explore with "Windows Explorer", or some clone, or some *nix tools.

It's a concept invented by a programmer, long long time ago, and I'm sure it seemed a very nice idea at the time - a way to structure files. And to us, the programmers, folders are 2nd nature - it's so much in our blood, that we never question it.

It's a flawed concept!

Why?

Because finding a file is just too hard:

  • the user needs to know too much about the file's location - basically, he needs to know all the path leading up to it
  • or, he needs to search for it (which takes CPU time, he could be searching in the wrong place, etc)
  • when dealing with multiple files/ locations, there's too much burden - on where which file/folder is

But now, the root problem: an item (i.e., file) can and usually belongs to more than one place.

The examples are endless:

  • that Excel report you just made for HR, belongs to at least 2 categories: HR and Reports
  • that cool header file you just added to your project, belongs to at least 2 categories: Headers and [ModuleName] (the module it's for)
  • that movie you just saw belongs to lots of categories: Movies, SF, Thriller, Kevin Spacey, etc
  • just rethink a bit about some of your files: you'll find at least one more category than the one they're in

Directories just show a too-limited view of the world...

Workaround #1: Shortcuts, Hard Links, Soft Links

... are just a workaround for a flawed way of storing information. Each file that is somewhat important to you would need a few shortcuts. You’d end up having hundreds or thousands of shortcuts. But who has the time to create them? And then, when you move/rename a file, then what?

Workaround #2: Virtual Folders

... same thing (virtual folder = the results of a search, shown as a folder). This is not what you want. It’s not as if every movie name has “movie” as its prefix so that a search for “movie” will return all movies...

The solution: Categories and Aliases

As I already pointed out, categories are a much more meaningful way of storing information. Most information belongs to more than one category.


Aren’t familiar with the term categories? Maybe you’re more familiar with other terms: labels, tags:

  • when you write a blog entry, you can specify multiple labels: it’s the same thing – an entry can have multiple labels; a user can select a label, and see all entries that have that label
  • when using digg, you use tags, with the same meaning: a certain site can belong to multiple tags
  • Google Reader uses the term “folder”; however, when you subscribe to a feed, the subscription can be placed into multiple folders.

All the above show how easily you can structure information into categories.

But how do I browse?

Having this hierarchy-based thinking so built into us, you’ll definitely ask that. Browsing can still happen in an Explorer like fashion:

  • assume you have a root. Lets call it “/”
  • expanding the root will show some aliases; I’ll explain them in a moment (for now, just think of them as some very clever shortcuts)
  • expanding an alias will show categories, other possible aliases, and files
  • there will be an alias called “Everything” – expanding it will show all categories and all files
  • expanding a category will show
    • all the files that are in all categories expanded so far (including the now expanded category) and
    • all the other categories that share files with all expanded categories

The last one is a bit tricky, so I’ll give you a short example.

What’s an alias?

An alias is similar to a shortcut, but in the context of categories. An alias is:

  • a union of one or more categories
  • you can treat it exactly like a category

An alias is just a better name, suited for you - the user, one that names what you want in a simpler way. For instance, you could call the group of categories [“Incoming" and "Document" and "Resumes”] as “Incoming CVs”.

There’s a fundamental difference between an alias and what you currently know as a shortcut. But it’s not very relevant here, and I’ll let the diligent readers find it.

Benefits

The benefits are too many, here are just a few:

  • straightforward storage: the storage is made with the you – the user – in mind; information is organized into categories, matching the user’s thinking; when a file logically belongs to a category, just add it there – simple, straightforward, and easy
  • easier search: finding information that belongs to several categories is as easy as expanding those categories, and seeing what’s there. Just think how easy it can be to find all movies that are SF and comedy. How about cartoons that are SF?
  • no unneeded duplication: if you want to add the file to a category, just do it – you don’t need to copy or move it; it will then belong to one more category
  • easy to personalize: you can easily select groups of categories which you use often, and create aliases for them; this beats shortcuts by far. Imagine an alias to My Last 3 projects, or Anything with Kevin Spacey.

Other things you can do:

  • History: can be a category; some program can update this by keeping a history of, lets say, last 100 opened files. Each opened file is automatically added to “History” category
  • Favorites: (have a category called “Favorites”) anything can be added to Favorites, not just URLs
  • Last Searches: the Explorer program can remember the last 20 searches. After a search is run, an automatic category is created, called “Searching ... on ”, and the files that match the search will automatically be added there
  • Visited Web Pages: pages that are viewed, can be placed into aliases called “Today”, “Yesterday”... Assuming today is 12 March 2008, I’ll have a category called “12 March 2008”, and “Today” will be an alias to it. When the day becomes 13 March 2008, the “Today” alias will point to “13 March 2008”, and “Yesterday” will point to “12 March 2008”. This way, you can keep a more detailed history with pages visited each day, for the last, lets say 50 days.


What next?

Using categories instead of folders should have happened long time ago. WinFS had some intent of implementing something similar.

All the above is doable – on Windows, simply have a virtual drive on which you implement “Categories”. I’m not saying it’s easy, but it’ll be:

  • cool to implement
  • challenging
  • a real benefit for the users

Sounds like an excellent job for me! I’ll talk to Microsoft, Google and other companies, to see who wants me to implement this for them.

And I’ll be the first user of Category Explorer!

Wednesday, March 12, 2008

Directories - a flawed concept... - Example of aliases

Say I have 4 categories: HR, Document, Resume, Report.

  • I have the following files:
    • My Test Doc, belonging to Document
    • John’s Report, belonging to Document, Report
    • Yearly Report, belonging to Document, Report
    • My Recruiting Report, belonging to HR, Document, Report
    • Victor’s Resume, belonging to HR, Document, Resume
    • HR Evaluation, belonging to HR, Document, Report

Browsing away:

  • I’m in “/Everything”. I see all 6 files and 4 categories
    • I expand to “Document”
      • I’m in “/Everything/Document”
      • I see HR, Resume, Report categories
      • I see all 6 files
    • I expand to “HR”
      • I’m in “/Everything/Document/HR”
      • I see Resume, Report categories
      • I see 3 files: My Recruiting Report, Victor’s Resume, HR evaluation
    • I expand to “Report”
      • I’m in “/Everything/Document/HR/Report”
      • I don’t see any more categories
      • I see 2 files: My Recruiting Report, HR evaluation
Browsing away, take 2:

  • I’m in “/Everything”. I see 6 files and 4 categories
    • I expand to “Report”
      • I’m in “/Everything/Report”
      • I see Document, HR categories
      • Note: here I don’t see Resume category, since there aren’t any files that belong to both Report and Resume
      • I see 4 files: John’s report, Yearly Report, My Recruiting Report, HR Evaluation
    • I expand to “HR”
      • I’m in “/Everything/Report/HR”
      • I see Document category
      • I see 2 files: My Recruiting Report, HR Evaluation
    • I expand to “Document”
      • I’m in “/Everything/Report/HR/Document”
      • I don’t see any more categories
      • I see 2 files: My Recruiting Report, HR Evaluation

This is just one way to explore categories. There can be other ways - I'm all for diversity...


Tuesday, March 11, 2008

Thy virtual office...

... do you have one? You'd better!

What I'm saying below is Sales 101, but still a lot of store owners ignore them...

More and more people try to find you online these days... When someone wants to buy something from you, he has 2 choices:
  • see the merchandise face-to-face
  • see and order it online
Sure, seeing it face-to-face rules, but, once the customer has seen what he wants, he's tested it, he'll most likely want it again. And again...

And then, "online ordering" comes very much in handy. Why? Because coming to your office is quite a lot of bother. Lets just mention traffic and parking - need I say more?

The physical office is a lot of bother :
  • For your customers
    • it can be hard to find
    • parking
    • standing in line
    • it has a time-table (opens at time X and closes at time Y)
    • can be hard to search
    • for asking detailed information, he might have to wait inline, until some clerk becomes available
  • For you
    • rent - this is volatile, it can go (usually) higher
    • you might need to move to a new office (this is the worst, especially if you've built a customer base)
The Virtual Office has none of the above problems:
  • virtual office = online store
  • easily searcheable
  • customers can access it anytime
  • customers can order online
  • customers can ask queries in a simple manner, and you can answer them effectively
  • rent is way cheaper
  • moving to a new office - will never happen
As long as you have your store online also, you've simply boost your sales and your customer base... What more can you ask for?

Sunday, March 2, 2008

Think, before doing like the crowd!

It's funny how people do some stuff, just because most others do them. Yes, I'm talking about IT.

Case 1

When developing a site, make sure you do a "captcha", wherever.

For Night Buyers, I've added captcha, only at login, and only after about 1.5 months since we've started it. Why? It wasn't on my top priorities. Captcha is good to forbid bots to register. But that happens only when you have lots and lots of users. Which is certainly not when you start the site!


Case 2

Validating the user's email. To do that, you send an email to the user, with an activation code. The user opens his email, clicks the activation code, and there you go.

First, this is a lot of code from your part. Then, it puts a burden on the user - he's using your site because he needs something. All this mambo jambo, and he can lose 10 minutes to one hour or so. Not to say that he might just dump your site and go elsewhere.

On Night Buyers, we don't have email validation. We trust the user to provide us with a valid email when he registers - we send him confirmation of his order via email. If he doesn't need confirmation, fine, let him provide a dummy email address.

But, when you develop your site you need to answer 2 questions:
  • Do I need email confirmation? Why do I need the user's email? To send him what?
  • Do I need email confirmation now?
To the latter question, what if you can wait, lets say, one week, for the user to confirm his email address? If so, you can allow the user to use your site right now, and if he finds the information there worthwhile, trust me, he'll be more than glad to register.

Saturday, March 1, 2008

Paying your people

It's no secret that people go from one company to the next, to the next, and so on. This is even more common in the IT industry.

Most people leave because of the following:
  1. the company is on shaky ground
  2. bad management (stressing the employees, giving them too much work, overtime, and so on)
  3. treating them like average
If you're in case 1. or 2., you're company is hopeless. However, most companies (especially outsourcing companies) are in case 3.

You're in a company of type 3. if
  • you don't have a bonus system
  • you don't get paid overtime more than usual hours or you don't get paid overtime at all
  • if you perform good or very good, there's no message from above; only when your work is less than average, then you're marked as "bad employee"
In such companies, people learn to just do what's expected of them (enough not to get fired). Quality then tends to be average.

These companies are setting themselves for disaster - it might take 10 or more years, but it'll happen. They'll make room for the new companies - where people are rewarded for doing good work. And this will actually make people be more responsible.

When doing a project, a good company will think and plan for bonuses from the start. This sends an amazing message: you do great work, you get rewarded.

Of course, not everybody is fit for such a company. But if you're in charge of one, you'll also be able to filter out the average. And more to the point, your people will stop leaving.

Tuesday, February 26, 2008

Burning ahead...

Yes, it seems I'm a newbie when it comes to blogging... Just a few days ago, a friend asked me "Don't you have feedburner?"
"What's that?", I asked.

... and then I realized, and of course I got mine. Pretty nifty...

Goolag - testing thy site's vulnerabilities...

Well, one more tool to test thy site - for vulnerabilities, that is... If you've hired someone to do your site, I guess this is just a quick way to see how much he's screwed up (since you'll be suffering from the screw ups, in the end).

More details here.
The main site is, of course, goolag.org

I will certainly test it on a few of my sites ;)