Archives for the month of: July, 2007

I’ve been working on a social networking site for a while now, and here’s some basic concept I’ve learn from he process ( warning : These are based on my experience, maybe different with you, but what do i care… ) :

Basic Entity of a Social Network Site :

  1. User ( could be Person or anything else, think about social network for your pet )
  2. Message
  3. File

Expecting something more ? well, I tell you, nothing more than these I can tell you about :)
Anything else is built on top of those entities as extension, or simply connecting those three, in meaningful way of course.

Example :

  • User connected to other User as friend
  • User send Message to other User, to her / his friends, or simply make it available to public
  • A File attached to a Message sent from one User to another.
  • User make a mark ( a tag , for you pundits ) to a File, then send Message to other user about it.
  • User make comment on other User’s Message with a File attached to it, a comment itself is another form of Message

Think about it, we can create so many other kind of relationship between those three objects, tangle it, twist it, of course it has to be in meaningful way, and then you got your social networking site, as simple as that, in a geek point of view.

So far, with all these basic knowledge about those three basic entities, I have abandon one CMS system ( Drupal, sorry for all you Drupal fans out there… ) because I then realize that generic CMS can only accomodate the relationship the way it want me to, not the way I want it to, well, maybe because I have insufficient knowledge for the CMS, or maybe I just mess around too much with it, I don’t know… All I know is that I can’t get scalability and speed by just plugging around all different add-on modules created by all different people and way of thinking and then try to configure smoothly as if it was all come from same people. It was simply hard to imagine how to scale up, if early in development phase you already have at least 40 tables in the default database ( yaiksss… ), not to mention the way add-on, modules, and hooks works… with more than 20 modules installed, a simple process like saving a node will take significant time since the system will have to enquire which hook implementation should be triggered, and amny other part of the system need to be triggered to keep everything in sync.

I tell you, it was like fishing with a shot gun… really, you are on boat, aiming for a fish with your shot gun, fire up, and then … the thundering sound will drive away the fish , along with everything else that can move, and the shot gun kick back will send you off the boat on the other direction :) … not good, not good…

I move on rewriting the whole thing, using CodeIgniter, a sleek simple MVC based PHP framework, and so far I get by with only 15 tables in my database to carry all the data required by those 3 basic entities, including all the relationships between them, not a bad setup, as I expect I will end up with less than 20 tables when the site will be launched.

Okay, I admit, I do a great deal of denormalization, because I need speed and less query, the wisdom came from my mobile content days… And I also feel sick about table joins, so I’d rather make the DBAs and business application programmers disappointed, than make my life less joyful, couldn’t care less about their feelings anyway, if you ask me… After all, theory is good, but when you have to face real world, all you can think of is how to get there in simplest, fastest way possible.

Another hilarious stuff about Operating Systems on Nodstrum.

Hilarious !! Check this out … if you are designer, architect, designer slash architect, or whatever job with client – vendor relationship.

After several times dealing with major open source CMS ( Mambo, Joomla, Drupal, WordPress ), I have developed certain wisdom over the matter in a holistic ( pvuwaah !! :) ) ) approach.

Well, NOT… haha

Okay, seriously… in my point of view now, a CMS is a rigid blob of code, needed to be hacked, tweaked, whipped hard like a mule, just to get it working the way you want it to, that is manage your content…

Yes, true that they are designed to ease the development process, especially when you don’t have that much resources around. A web designer could use Joomla for example , to have a dynamic website up and running in matter of days from scratch, but that’s just a plain good website taking its content from database, plus some some plugins and add on stuck all over it just to get client eat the eye candy happily…

The fact is, after the final payment, the designer going home happy, while the horror for the client has just began … CMS usually designed to be general purpose, therefore many things are just unnecessary bloat… to make it flexible, the developer usually compromise on many thing, like deliberately unoptimized query… why it’s not optimized ? because it is necessary to be unoptimized… otherwise no way to get things done, not necessarily done gracefully, but just done. period.

My latest experience is with Drupal… a CMS with great review, popularity, and a horde of fanatical fans… how am I doing with it ? I tell you, my first impression is great, it’s slim ( just under 400kb of source script ) , easy install, no nonsense administrative panel, multiple site with one installation, possibility to make sigle sign on for multiple site, etc.

The “community plumbing” motto sounds good, the plug in architecture is nice, user management is just about everything you need… but then comes the horror… what i needed to for the site i developed is a full featured media management system, that is a system that is capable to handle video, audio, and image, plus i have to develop certain degree of social network and commerce function on top of it. I tried all available add on , plug ‘em in, configure, tweak… no use… everything just plain messy, disintegrated, and worst, it force user ( and me as developer ) to think the way Drupal ( or its developer ) think. The ugly magic showed up, weird stuff popping up here an there… just like you are on a boat in the middle of a lake, where the boat turn out to be a wreck because the shiny paint that looks great on shore , simply dissolve in the water, revealing horrific holes and ugly creaking patches.

okay, enough with the horror story, the thing is that after grinding my brain on moving things in Drupal molasses, I just fed up and swallow the fact that it’s just only good for prototype, a proof of concept. I wouldn’t even bother to imagine using it for real production site, which will handle thousands of concurrent user every second. It just won’t stand it.

Now, back to square one… well not entirely, i got the whole plan mapped out and all pitfalls and bewares noted from the proto site. All i need to do now is to rewrite the whole thing nearly from scratch, using lower level library and framework. that way I know what’s under the hood, as I’m the one writing it, i know the kinks and bends as i created them :)

So… don’t get too excited with CMS, my good friend… it could only get you that far, but never beyond…

As I worked thru my days as many roles in tech biz, ie: 3d animator, web designer, photoshop banger :P , dreamweaver slave, glorified overworked salesman – aka COO , glorified sys admin manager – aka CIO, unshaven geek aka programmer, and whatever stupid role naming people has given me thru the years, I find one very basic thing that never change about people and technology :
People tend to get jumpy ( and cranky ) on technology.

Yes, it’s a simple fact, and someway it makes us geeks living in pain :P

Why :

People always over expect on technology while always ignoring the fact that technology is just another human creation.

People need scapegoat to blame when things don’t work as they expect them to be. Well, sometime something just not designed to work they way people want it to , for example : a music site designed to display and sell songs, it was designed for people to buy, pay and download the music, NOT PLAYING the music ON THE SITE. for that, go get winamp or iTunes, for cry sake … buy the music, download it, save ‘em in the hardrive, then play using whatever music player application you have, don’t expect to play while you browse, and don’t get mad when the music you played in an embedded flash player in the browser just stop when you jump into another page… it’s just a web page in a God damn web browser, not a multitasking operating system. And when these thing happen, who they shouted at ? us geeks, because we create that thing, because we designed that thing, and because we are so shortsighted not to make it the way they want… Haha…

What happen when things worked beautifully for them ? They say “hey look at MY site”, “check out MY laptop, it does many wonderful things” …

Humm… No, I’m not saying that we want more credits on whatever we’ve done… Just that, please, improve the attitude… be cool about technology… don’t throw your phone to somebody’s face just because your thumb is to huge to type SMS… be considerate, that it’s just a piece of tech, designed for masses, there’s no such thing as technology designed just for you… if something like that ever existed, then surely, you won’t get your hand on it, because US geeks, will keep it for ourself :) because we sweat our brain for it, create it, and then simply decided not to release it for the masses. Yes, geeks are God in a certain sense in technology realm. We simply decided to ,or not to, use the tech because we simply know what is it under the hood, while the rest of human race is just a pool of consuming sharks waiting for whatever the Gods fed them with, even shit will be eaten, so to speak :) just see those geeks at Redmond fed you with…

Anyway, it’s just the way it works… get use to it, one thing I wish would happen is people don’t get jumpy when things gone “wrong”, just be cool, it’s nobody fault ( well, in some case, it’s simply user’s fault, not to know how to properly use the tech, nor knowing it’s limitation )

Sigh…