recent blog entries


Blog Migration Magic (from Blogger to Wordpress)

by roystontay @ June 24th, 2008

the following observations applies only to wordpress, the self-hosted blog software..

You’re looking at our blog revamp! It took only a day to migrate from blogger to wordpress, including customizing the template to look the way it is now, and I thought I’d take some time to rave about it.

Having migrated from wordpress to blogger (due to some misplaced advice) and now back to wordpress within a span of 2 months, I now have the dubious distinction of being ‘the most experienced blog migrant’. And coming from someone who’s done it both ways, I can’t think of a reason why anyone would choose blogger over wordpress, unless he really hates himself, or he can’t afford to host his own blog. Either way, its sad. I know I’m being biased here.. this blog actually does a good job of comparing the good and the bad of migrating.

Since I’m still in awe of how great the latest wordpress is compared blogger, I’ll quickly pen these thoughts down..

Besides having a beautiful and clean interface (cleaner than the champion of clean interfaces - google), it’s extremely user-friendly as well. Small things like having automatic pingbacks, Akismet spam protection and media library management really added up in terms of user experience. What really made the difference though, was the importing of old blog posts and ease of theme customization.

Importing of old blog posts

During the migration back to wordpress, importing old posts was my most dreaded process because I remembered how painful it was to move my wordpress posts into blogger. Search for “migrating from wordpress to blogger“, and 50% of your top hits will probably be for migrating the other way round. And the top relevant hit involved doing a mysqldump to grab the blog posts and writing a python script to get the comments. NICE, for a geek. Not for me.

Going from blogger to wordpress was magic. Literally. Here’re the steps, and I won’t even dare call it a guide, its dead-simple. If you want the ‘ultimate guide’, you can get it here.

Step 1: Click on Authorize. You’ll be brought to a google log in page to key in your blogger id and password. Next, just grant wordpress permission to access your account.

wordpress import step 1

Step 2: All your blogger posts and comments will magically be available for importing. You just need to click on “The Magic Button”.

Wordpress import step 2

Step 3: You’re done! You can now “Set Authors” which is simply mapping your blogger authors to your wordpress authors. Sweet!

Wordpress import step 3

And since its so fun, wordpress actually allows you to clear account information so that you can redo everything again and take screenshots, like i just did. Its also just in case some of your writers continue contributing posts in blogger, you can still import them and wordpress will handle all the duplicates. magically. Sweet huh!

Theme Customization

Unless you’re willing to read through all the pages (like this) describing how Blogger’s own templating language works, don’t even begin. Though I must admit I didn’t really give it much of a chance, I did try to edit the blogger template html to customize parts of our old blog. There were too many rules to follow (eg. i couldn’t have html tags within ’section’ tags) making the templating language more prohibitive than er.. Singapore. You’ll probably see 1537 of these messages and finally decide its not worth your time.

“We were unable to save your template
Please correct the error below, and submit your template again.
Your template could not be parsed as it is not well-formed. Please make sure all XML elements are closed properly.
XML error message: The content of elements must consist of well-formed character data or markup.”

Wordpress in comparision uses php templates which most web developers are well-versed in anyways. Their APIs are relatively simple and well-documented. Getting information about your blog is as easy as using get_bloginfo(). If you work from the default wordpress template, you won’t even have to read up much about the APIs. Just read, understand and copy =)

Webpage Makeover (Part II)

by roystontay @ May 10th, 2008

This is an update on the status of our webpage makeover. It is still under way, but we’ve managed to get a couple more pages up, such as features, contact us, and learn more, to provide more information about our product. It is still pretty barebones for now, but at least there are no more dead links and placeholder texts lying around.

Leaving for Sunny California on 12th May

by roystontay @ May 10th, 2008

This month’s an exciting month for Zopim, we’ll be all over the place, literally. Our designer will still be in town attending her graduation ceremony. Some of us will be in the Bay Area (California) to work our hats off, while one of us will be touring Europe for 3 weeks. Talk about equality… =)

While in Silicon Valley, we’ll be attending TIECON (dubbed the world’s largest entrepreneurs conference) to showcase our product as well as get some insights and pointers from many of the distinguished speakers at the event, including executive team members from companies such as Intuit, Rockyou, Facebook, etc..

Just like the announcement on our webpage, we may be overseas till the end of the month, but our heart and souls are still with our users. We will still be checking our emails and live chat regularly, albeit in a different timezone. So just drop us a message if you need us.

Webpage Makeover!

by roystontay @ May 2nd, 2008

If you happened to surf here via our webpage, you’d have noticed our *spanking* new design! We actually got the finalized design sometime last week, thankfully our in-house designer, tengwan picked up html and css quickly enough to whip up the webpage!

The design was created with simplicity and fun in mind, hence the bright colors and non-cluttered feel. Some website designs that we referenced were 37signals, crazyegg, splunk and of course our favourite fogbugz, with whom we promised we’d get our new design up by May 1st.

If you’ve tried navigating around, you’d find that most of the links aren’t working. Ideally we’d like to launch our website with everything in place, but a promise is a promise, and must be carried out at once!

Promises are like crying babies in a theater, they should be carried out at once.
~Norman Vincent Peale

Thats why the old design has been taken down even though we aren’t quite ready to launch the new webpage yet. Bear with us for just the short moment though, we’ll throw in the rest of the works along the way.

Meanwhile, couple of things works on the main page, like the animations for the 4 main descriptors on the page (which still feels quite jarring, we’d definitely work on it). You should also notice our chat button prominently docked to the top right of our page. Already there was a customer who asked why we keep the best button designs to ourselves!

Its actually the same button as all our customer’s but strategically hidden by our new button. You’d be able to see it with your firebug on. Eventually our button will have the ability to be customized, but for now, this quick hack works fine for us =) Something else that works quite fine is our sign up form itself ;p try it to believe it!

We wouldn’t have been able to deliver our promise without our dear designer, Winnie, who tirelessly worked through several iterations of this design and listened patiently to our requests and feedbacks. Thanks Winnie, we love our new look! And we hope you guys love it too!

More improvements

by roystontay @ April 23rd, 2008
This week’s version release includes the following requested features along with other bug fixes.

Visitor-side

  • Immediate loading of chat button while visitor is surfing
    • Cached chat button / status

Desktop-side

  • Flashing title when there is an incoming chat (Meebo-style)
    • To get the attention of customers who do not have sound notifications enabled
  • Confirmation message before closing desktop
    • As requested by customers who accidentally surf away from the desktop

ZopIM Version 0.2.2

by roystontay @ April 9th, 2008

We’d like to thank our users for their feedback and bug reports. To make it even easier for you to send feedbacks, there is now a feedback button within the desktop itself. And your submission goes straight into our issue tracking system!

We’ll be rolling out more of these weekly minor releases, so keep your suggestions and feedback coming in. We still entertain emails, IMs, snail mail, or phone calls. Oh ya, livechats too ;p

Improvements

  • Agent Desktop
    • Feedback option - file a bug report / feature request right into our issue tracking system
    • Added ability to ‘preview’ webpages that your visitors are on
    • Added ability to refresh webpages inside ‘preview’ windows
  • Visitor-side (chat button and chat window)
    • Made name changing more intuitive to visitors by adding ‘click to change’ beside their name
    • Chat windows are only opened when agent sends a message to client. Previously when agent double clicks on a guest, the chat window is opened on the visitor’s side
  • Added sound notification for incoming messages on both agent and visitor side

Bug Fixes

  • Disconnection alerts fixed. Now upon disconnection, agents will be able to know if his account had been accessed from another location or if it broke off due to internet connectivity problems.
  • (IE7) Phantom dialog box remained on the screen after agent ends a chat session. Problem fixed.
  • (IE7) Fixed weird bug where ‘Chat Logs’ module wasn’t loaded when js file was served from cache.

ZopIM Releases Version 0.2

by roystontay @ April 8th, 2008

This post is kinda outdated, but necessary nonetheless to update our users on how we’ve been improving ZopIM in the past few months. Do try it to have a feel of it and let us know what you think!

Our release went live on a quiet Wednesday nite 2 weeks ago. The minor bug fixes and improvements were countless, but the major improvements are as follows:

Backend Overhaul (For the geeks out there)

  • Migration of offline messaging platform from Jabber to LibPurple.. benefits discussed here.
  • Changed transport mechanism from COMET to Flash sockets. Improvements include
    • slight improvements in speed, no more HTTP headers!
    • greater reliability
      • able to determine earlier when a connection is broken
      • no more mysteriously dropped messages
  • Messaging architecture redesigned
    • better reliability
    • improved scalability

Agent Desktop

  • Javascript framework upgraded from Ext 1 to Ext 2.
    • improved performance
    • improved look
    • bugs fixes
  • Desktop components rewritten to improve user interface
  • More features focused on improving chat efficiency. For example
    • auto-completion tool
    • shortcut templates for messages and urls
    • chat summary panel similar to the speed dial on opera. helps you manage all your existing conversations seamlessly at one glance
  • More preferences
  • Improved chat history retrieval
    • ability to search by agent name, visitor name, duration, date, etc…
    • ability to track unread conversations (i.e. msgs that were left while you were online)

Visitor-side (chat button and chat window)

  • Compatibility on most browsers (IE6-7/Safari2-3/Opera/Firefox2-3)!
  • Nicer chat button design. Resizable to fit your website.
  • Greeting message in button can now be customized

Load testing - Do you want a sexy time?

by roystontay @ April 4th, 2008

We were just talking about performance/load/stress testing over lunch today and had a hilarious recollection of how we stimulated, or simulated many visitors on our system during our prototyping days.

We knew the merits of using web application testing tools like Watir or Selenium, but during our early days, we didn’t have the luxury of time to properly plan an automated QA procedure that performed end-to-end testing of our system. We needed mechanical turks, for free.

Anyways, our game plan was to round up all our friends on msn/gtalk and get them to come on our website so we could stress test our desktop application. The problem with this foolproof gameplan was that given our habit of working early (like 1am early), most friends were either asleep or engaged in more stimulating activities than helping to stress test our system.

We logged onto our desktop anyways and started coercing/tricking/bribing our friends to help out. They started trickling in slowly. Meanwhile, in his own corner, Julian was surrepticiously doing some other stuff and not really contributing in our combined efforts to populate our website.

Then it happened. In droves, visitors started visiting our webpage and starting chats with us. Boy, were they enthusiastic visitors. Almost all of them initiated chats asking questions like, “Er.. is Mary here?” or “Sexy chat?”. We were bewildered..


Well to cut the long story short, always have a member in your team who’s resourceful enough and thinks out of the box. Like Julian, who simply downloaded an IRC-client while we were busy begging friends to help out. By logging into popular rooms and typing one line, “for sexy chat with XXX, go to www.zopim.com”, he got us the droves of visitors that 3 engineers combined couldn’t conjure up.

Peanut the Chinchilla

by yangbin @ April 3rd, 2008


Peanut the Chinchilla from tinywingz on Comiqs

IM integration adventures (Part I)

by wenxiang @ April 2nd, 2008

At ZopIM we believe that every visitor on your website is invaluable. TLC should be showered on them no matter where you are or what you’re doing. We also believe that you should not have to alter your working habits to serve your customers. So having to install extra software on your computer, or being permanently logged in a web page to monitor traffic on your website is a huge NO NO for us.

It didn’t take us long to realize how painful it was to constantly monitor our visitors in the desktop view. We also realized that the only application that is always open in everyone’s terminal is their IM client. Being the biggest fans and users of ZopIM, we must confess that IM integration has made our product much more usable, and significantly increased our response times (Guess how we manage to talk to you even when you come in at 4am in the morning).

Right now we are only able to notify you via IM when a visitor has entered your site or requests to chat with you, but the ability to directly respond to your visitors from your IM client is already in development, so stay tuned!

This integration however, wasn’t exactly a piece of cake and thus this post is dedicated to those who went through the same journey we did, and any developer who might want to explore IM integration with their projects ;)

Iteration 1: Jabber server with transports to other networks…. and why this solution sucks

In ZopIM’s previous version which was written in Java and the Jetty web server using cometd techniques (why we’ve ditched this calls for another blog post.. when I finally muster the energy to write it), we used the Smack XMPP client libraries (which were very nice IMO) to talk to Jabber which connected to the various IM networks using transport service libraries. However from our experience this solution simply sucks for the following reasons:

  1. The transport libraries were outdated and not actively maintained. Libraries provided by the py-transports group are by far the most updated, and it can be seen that their activity is still extremely low.
  2. Related to reason 1, many things just didn’t work transparently. Adding a buddy in MSN sometimes failed, and in Yahoo, it just didn’t seem to work. The whole point of using jabber is to not have to care about the underlying transport network… this just sucked
  3. Maybe still related to 1 and 2, roster and presence management didn’t seem to work at all for the other transports… Nothing happened no matter what I did when buddies changed their statuses
  4. Maybe I got too pissed off by now to tweak the setup or configure it properly. It was a MEMORY HOG. Unforgivable. Jabberd ended up chomping up hundreds of mbs of RAM after long periods of use. SIMPLY UNFORGIVABLE.

The only thing that worked well was message sending/receiving, but otherwise… this solution just sucked. We ditched it after about 4 months and have moved to a much more scalable and elegant solution: libpurple!!!

Anyway that’s it for part one, stay tuned!!