Archive | May, 2007

Use WordPress for your blog

I have used different content management and blogging tools to host the articles that I have written during the spare time. So far, I love the features that Wordpress provided. Here are the reasons why I chose to use Wordpress:

  1. Great themes for selection – I am a programmer but not a graphical designer. However, I have good judgement on what gives a clean look to my readers to promote stickiness to my site.  I believe the themes that Wordpress community provided is great. 
  2. Easy framework to extend – Again I am a programmer. So, I am looking for an easy way to extend the features provided by framework. With the 5 mins walk through video provided by Mark, I am impressed by how easy to write a plugin in Wordpress.
  3. Rich SEO tools – a site without traffics is no good, especially you want to get some returns on your investment via ads. To make a site ranked high in organic search via SEO (ie. a free way to market), you need both on-page and off-page optimization. For on-page optimization, you need to make your site both search engine and user friendly via doing the followings:
    • Make your posts serving with meaningful permalinks (Built-in. Configure it under Options > Permalinks).
    • Create sitemap (Plugin: Sitemap Generator, Google Sitemap Generator)
    • Make it easy for readers to advertise your posts via digg, delicious and many other social networks. (Plugin: Sociable)
    • Make it easy for readers to tell their friends about your posts via “Email Your Friend”. (Plugin: WP-Email)
    • Make it easy for readers to add more values to your posts like comments and rating. (Plugin: Akismet is used to prevent the comment spam).
    • Generate RSS feeds for your posts (Built-in). And make it easy for readers to subscribe your feeds (Plugin: Chicklet Creator).
    • Let readers to subscribe the comments of your posts.  
    • Categorize and tag your posts with search features for readers to locate the posts they are interested quickly.

All the stuffs I mentioned above are not related to the content of your post. However, they are very critical for you to win the heart of your readers. Although I am a programmer, I would not want to write all the codes to enable these on my site. I am glad to find Wordpress that saves me tons of hours and many thanks to the contributors for the awesome plugins, so I can spend more time to research on the subjects that I am interested. :)

Leave a comment Continue Reading →

Flex Architecture – MVCS

I have come across an excellent article from Joe Berkovitz that talks about a “right” way to architect your application. I like this article a lot. It gives me a good refresh of what I have learnt in these years. I decide to spend a little time to go over some of the key points from this article.

Isolation and encapsulation are the keys. Isolating concerns opens the door to accommodating change, because it puts boundaries on the ripple effects of changes within the code. Isolation makes modular development and testing easy. Isolation makes it easy to have different people work on different pieces. Finally, isolation makes it easier to envision ways of improving the user experience that are generalized and powerful.

The first rule I learnt in component design is “Reduce coupling and increase cohesion”. The goal of this is to reduce the amount of interactions among components and in turn promote reusability and reduce complexity. This concept proven to be useful in my career life. The tricky part of it is to draw a line around a component and provide a clear responsibilities (ie. via interface) and interactions of it (ie. communication). A good architect can make it very clean and simple whereas a novice designer cannot make a component reusable without associated with different dependencies. In this article, the author focuses on the design in UI, but the rules apply to all aspects of design. A term “MVCS” is mentioned that adds “Services” to the common known MVC pattern. Service is responsible to encapsulate the communication with the external world. Here is the diagram of the MVCS:

MVCS

In MVCS, Model captures the state of the application. It doesn’t know any of the non-Model classes and it carries no intelligence (ie. no function but read/write for properties). According to the author:

In general, avoid functions, since they introduce more complexity, and stray interactions with non-Model objects can creep in. Complex logic for model objects usually belongs in the Controller.

However, from what I have learnt, there are certainly logics belongs to the model classes. A domain model without any behavior is termed as “Anemic Domain Model” by Martin Fowler. “…this is an anti-pattern because it’s so contrary to the basic idea of object-oriented design; which is to combine data and process together.” When I look closer, this is the model that supports the UI but not the domain model in the server side. Is the same rule applied in this area as well? On the other hand, how the model notifies the View if its state is changed? In Flex, you can define your properties as “Bindable”. Whenever the state of the model is change, an event will be fired to notify the associated View.

View references objects in Model via data binding. Bindings are used to move data from sources that change into destinations that need to be change-aware. Besides,View captures users interaction (via event handler registration) and hands off action to Controller (via calling Controller’s function in event handler). Controller, like Session, is application-wide object that should be obtained through a static instance variable to avoid having to pass all such objects all over the application.

Controller is the center of the application. It is the place where application logic and behavior are implemented. It is the only part of the architecture that communicates with all the other parts, thus relieving the View, Model, and Service packages from needing to know too much about each other.

Service objects make up a layer of objects that handle all communication with the outside world like Web Service and Http calls. Besides, Services act as factories for Operation objects; it is actually these Operations that do the work of communication by initiating requests, handling responses, and dispatching status and completion events. Why not just do it internally rather than generate the Operation for controller to call? According to the author, it gives more flexibility. However, I don’t see such much usage of this flexibility. So, I still prefer doing simple Service’s method call… :)

 

fig_09.gif

Leave a comment Continue Reading →

Analyze your site’s traffics

Identify who comes to your site

It is crucial to analyze the users who come to your site because you can use this data to evaluate and customize your site to better serve your users and maximize the ad income. For example, you may find out that a lot of users from Asia is reading your posts related to immigration laws in US. Then, you may want to start writing more articles related to this topic and join some ad networks in Asia for geo-targeting ads like immigration office located in Hong Kong. Those ads may have much higher chance for users to click. In this article, I will go through some of the free web analytic tools that I use for my wedding company – JustProposed.com

Who are our users? Tool: Demographic prediction – Microsoft adCenter Labs Finding: It confirms me that our target users are brides instead of grooms :)

demographic prediction

 

Find out how they find your site

What do our users search before and after they search on the keyword I targeted?

Tool: Search Funnel – Microsoft adCenter Labs Finding: It gives me better idea what keywords I should target (from pre search result) and whether I should cover some areas that my users may interest (from post search result). From the diagram shown below, I should provide a wedding planning tool for the brides. pre search funnel result from keyword: wedding websites post search funnel result for keyword - wedding websites What is the trend for the keyword or service I am working on? Tool: Keyword Forecast - Microsoft adCenter Lab Finding: Looks like there are more search for wedding websites at the beginning of the year. May be couples tend to plan their weddings at the beginning of the year and have their weddings at second half of the year. keyword trend Now I have some ideas of the targeted users. I know it is mostly female (ie. bride) at the age group 25-34 and they may use wedding website to plan their weddings. The data also indicates that I should focus my marketing campaign at the beginning of the year around March. It makes a lot of sense to me. OK, what is next? The tools I showed you before do not give you a good picture of the users actually come to your site. However, you may want to answer the questions below:

  1. How many unique visitors come to your site per day or per month? What is the trend?
  2. How do they find your site?
  3. Which regions are they located? If your service open globally, you may want to know that for geo-targeting campaigns.
  4. How effective the marketing campaigns you just executed?
  5. What are the sign up and conversation rate?
  6. What pages your users mostly visited on your site?

How to find those information? Your Apache access log! If you want to visualize it, try Google Web Analytic Tool. Avinash has written a nice article to walk you through the V2 of this tool. Take a look and see what information it provides that you cannot find it from access log.

Leave a comment Continue Reading →

Boost up your advertisement revenue

Targeted Traffics is the Key

To boost up your ad revenue, first you need to bring in targeted traffics to your site. How? The keys here are great content and effective marketing strategy. I will have another articles to talk about this. For now, let's focus on how to monterize and then optimize the revenue from your traffics. Here is the summary of the important points I got from a nice article authored by Pat McCarthy.

  1. Sell targeted ads
    • Provide "Advertise with us" link on your site and gives out statistics and uniqueness to attract advertisers in your industry to sign up. This help you to eliminate the middleman like Google. The problem for this approach is the effort needed to reach out the potential advertisers in the first place. You may consider to hire a company to do this for you or use automated services like Adbrite, AdEngage, Adster and Adify.
  2. Work with multiple ad networks
    • AdSense is good but it doesn't tell you the math behind. You have no idea whether you already maximize the revenue. You may want to try out more ad networks to see who gives you the most. However, it is always a headache to manage them. RightMedia looks like provide a good solution because it establishes an open marketplace for ad exchange. On top of that, it helps you to determine which ad network to use on the fly based on the statistics generated from your site.
  3. Pick the right type of ads (contextual ads, display ads and etc)
    • Experiment it yourself because there is no fixed rule here. To me, video ads may indirectly enrich the content of your site if the video ads are related.
  4. Test different ad location and size
    • This is more the result from the user behaviorial studies. The guidelines that you may hear like ads should be above the fold, integrated in content, or placed according to an advertising heat map. However, the result varies with different layouts of your site. I suggest you find the best combination from experiments.
    • You can create your own heat map for your site using the services from ClickDensity and CrazyEgg.
  5. Work with different ad pricing models (CPC, CPM, CPA and etc)
    • This helps you earn more money by opening your site up to more advertisers, and more competition from advertisers can drive your overall rates and revenue up. It's easiest if you use an ad management tool that allows you to accept multiple types of pricing deals and allocate your inventory appropriately.
Leave a comment Continue Reading →