﻿<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule"><channel><title>Stritar's chronolog</title><link>http://www.stritar.net</link><description>Category: Webdev</description><copyright>Neolab d.o.o.</copyright><ttl>5</ttl><item><title>Solving global and local records in SaaS database design</title><pubDate>Sat, 20 Jul 2013 23:50:56 GMT</pubDate><description>&lt;p&gt;Lately, we've been seriously considering developing a &lt;a href="http://www.neolab.si/" class="more" target="_Blank" title="Neolab, Software Development"&gt;new version of our framework&lt;/a&gt;. This one is already a few years old, and besides other problems it's facing, it lacks one very important thing - it's &lt;b&gt;not suited for SaaS&lt;/b&gt; &lt;a href="http://en.wikipedia.org/wiki/Software_as_a_service" class="more" target=_blank" title="Software as a service"&gt;(Software as a Service)&lt;/a&gt; applications. Often, we would like to host a few simple projects (like multiple web pages) in a single database, but we are also thinking about developing a product / service, which we could &lt;b&gt;offer to multiple clients&lt;/b&gt;. Making &lt;a href="http://www.solidcageblog.com/2009/11/top-5-database-design-considerations.html" class="more" target="_blank" title="Top 5 Database Design Considerations For SaaS Software"&gt;a product for different clients&lt;/a&gt; that would &lt;b&gt;live in the same database&lt;/b&gt; is not simple, and requires an architecture that is both rigid and flexible, micro-useful and scalable. &lt;/p&gt;

&lt;p&gt;The database model we currently use is doing quite well. It's able to support complex &lt;a href="http://www.neolab.si/Information-Systems.aspx#down" class="more" target="_blank" title="Neolab Information Systems"&gt;business-oriented systems&lt;/a&gt;, &lt;a href="http://www.neolab.si/Web-Portals.aspx#down" class="more" target="_Blank" title="Neolab Social Web Portals"&gt;social portals&lt;/a&gt; and &lt;a href="http://www.neolab.si/Web-Pages.aspx#down" class="more" target="_blank" title="Neolab Web Sites"&gt;web sites&lt;/a&gt;, the core tables being the same across all applications. Sure, there are many redundant things, but we are aware where we should scale-down. More importantly, we have to decide how to upgrade this database model which is used in different applications to be able to &lt;b&gt;work in a single database&lt;/b&gt;. I'm not that fond of &lt;a href="http://stackoverflow.com/questions/69128/saas-database-design-multiple-databases-split" class="more" target="_blank" title="SaaS database design - Multiple Databases? Split?"&gt;using multiple databases or schemas&lt;/a&gt; in SaaS architecture, since this is a similar situation to which we have now, and it doesn't work that well. &lt;b&gt;I'm certain having the same database for different clients&lt;/b&gt; is most suited for &lt;a href="http://www.neolab.si/Integrated_Information_Solutions.aspx#down" class="more" target="_blank" title="Neolab Integrated Information Solutions"&gt;our business&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;This means we will be &lt;b&gt;having a ClientID (ApplicationID)&lt;/b&gt; in all the tables that will be used by all clients / applications. But what is the best way to take care of &lt;b&gt;global and local records&lt;/b&gt; - records that are used by everyone versus those in only a few applications?&lt;/p&gt;


&lt;p&gt;Let's assume we are building a CMS system for many sites, for which we will be needing two global Roles (Administrator, Moderator), but one instance will have its own Role as well (News editor). There are many ways we can go.&lt;/p&gt;


&lt;h2&gt;1. Local roles&lt;/h2&gt;


&lt;p&gt;This architecture means &lt;b&gt;each client having it's own Roles&lt;/b&gt;. It's a simple solution, very flexible, but has many flaws - the most obvious being the benefits of global functionalities. E.g. if you're and Administrator, you can restart the site. Since we now have multiple Administrators (ID = 1,3,…), features like these get a bit harder to implement, and you can end up developing a totally different application for each client.&lt;/p&gt;

&lt;br&gt;
&lt;table cellspacing="0" cellpadding="3" border="0" align="center" &gt;
&lt;tr&gt;&lt;th&gt;ApplicationID&lt;/th&gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;b&gt;5&lt;/b&gt;&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;



&lt;h2&gt;2. Global Roles with a M:N table&lt;/h2&gt;


&lt;p&gt;The other option is to have &lt;b&gt;global Roles, which are attached to a single application using a M:N table&lt;/b&gt;. This is an elegant and very flexible solution, but from my experience, you should avoid using M:N tables if possible. Of course, there are logical cases in which you can't, but you should always consider other options. Adding another table to the equation complicates queries, makes direct data browsing less understandable, besides raising the possibilities of errors.&lt;/p&gt;
&lt;br&gt;
&lt;table cellpadding="0" cellspacing="0" width="100%"&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;table cellspacing="0" cellpadding="3" border="0"  &gt;
&lt;tr &gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;td align="right"&gt;
&lt;table cellspacing="0" cellpadding="3" border="0"  &gt;
&lt;tr&gt;&lt;th&gt;ApplicationID (PK)&lt;/th&gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;


&lt;h2&gt;3. Composite key&lt;/h2&gt;


&lt;p&gt;Another possibility that comes to mind is to &lt;b&gt;use a composite key, which in reality, makes a single table from the above two&lt;/b&gt; (Roles, ApplicationsRoles). This allows using the same IDs for the same Roles in different systems. But it also requires having a composite key, which makes other things more complicated. It prevents making simple joins (you need to make a join by both primary keys), which means all the tables joined to Roles would need the ApplicationID field as well, even if they wouldn't really require it. Not to mention this model simply calls for trouble.&lt;/p&gt;
&lt;br&gt;
&lt;table cellspacing="0" cellpadding="3" border="0" align="center" &gt;
&lt;tr&gt;&lt;th&gt;ApplicationID (PK)&lt;/th&gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;



&lt;h2&gt;4. Fake composite key&lt;/h2&gt;
&lt;p&gt;Sometimes, it makes sense using an &lt;b&gt;additional primary key in a M:N relationship&lt;/b&gt;, so you can easily join the table further. We could do this as well, making the previous case a bit more easy-going. But this situation makes all the magic that we could do across the system a bit harder - since all the joins would be made using new local IDs, we are getting too close to the first solution (you can't make joins with the RoleID field, since it's not unique).&lt;/p&gt;
&lt;br&gt;
&lt;table cellspacing="0" cellpadding="3" border="0" align="center" &gt;
&lt;tr &gt;&lt;th&gt;ID (PK)&lt;/th&gt;&lt;th&gt;ApplicationID&lt;/th&gt;&lt;th&gt;RoleID&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;&lt;b&gt;5&lt;/b&gt;&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;



&lt;h2&gt;5. NULL-able ApplicationID&lt;/h2&gt;
&lt;p&gt;A different architecture enables &lt;b&gt;using global Roles that have no ApplicationID, and local Roles that have it&lt;/b&gt;. Each application is set to use both sets of Roles, allowing flexibility and understandability. But this model has a problem as well - we can't prevent an application from seeing a global Role - those are intended for everybody, which means that in the long run, the system would start gravitating towards not having any global roles at all, to assure flexibility. To simplify - this architecture is great, but needs something that takes care of Denying.&lt;/p&gt;
&lt;br&gt;
&lt;table cellspacing="0" cellpadding="3" border="0" align="center" &gt;
&lt;tr&gt;&lt;th&gt;ApplicationID&lt;/th&gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;



&lt;h3&gt;5. a) Creating a table for Deny&lt;/h3&gt;
&lt;p&gt;Let's put another application (ApplicationID = 3) into the equation, which, for some reason, doesn't want to have the global Role named Moderator (RoleID = 2). &lt;b&gt;Adding another table to care of Denied Roles&lt;/b&gt; would solve the problem perfectly, but do we really need another table? We want to keep our database with as little tables as possible, so it's easier to use. That's why we should consider extending the Roles table to handle denying as well. &lt;/p&gt;

&lt;br&gt;
&lt;table cellpadding="0" cellspacing="0" width="100%"&gt;
&lt;tr&gt;
&lt;td valign="top"&gt;
&lt;table cellspacing="0" cellpadding="3" border="0" &gt;
&lt;tr&gt;&lt;th&gt;ApplicationID&lt;/th&gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;
&lt;/td&gt;
&lt;td align="right" valign="top"&gt;

&lt;table cellspacing="0" cellpadding="3" border="0" &gt;
&lt;tr &gt;&lt;th&gt;ApplicationID (PK)&lt;/th&gt;&lt;th&gt;DeniedRoleID (PK)&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;

&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;


&lt;h3&gt;5. b) Adding two fields for Deny&lt;/h3&gt;
&lt;p&gt;In the most normalized way, we need &lt;b&gt;two fields to take care of Deny&lt;/b&gt; - a boolean to mark we are working with a Deny record type, and an integer to tell which record we are denying. But what if we want to optimize even further?&lt;/p&gt;

&lt;br&gt;
&lt;table cellspacing="0" cellpadding="3" border="0" align="center" &gt;
&lt;tr&gt;&lt;th&gt;ApplicationID&lt;/th&gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;th&gt;IsDenied&lt;/th&gt;&lt;th&gt;DeniedRoleID&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;



&lt;h3&gt;5. c) Using an existing field for Deny&lt;/h3&gt;
&lt;p&gt;We could put &lt;b&gt;information about which record we are denying into the existing Roles.Role field&lt;/b&gt;, since we don't really need it in these cases. But there's a major setback; if a non-numeric field would be accidentally stored in the denied Role, the SQL engine would throw an error.&lt;/p&gt;
&lt;br&gt;
&lt;table cellspacing="0" cellpadding="3" border="0" align="center" &gt;
&lt;tr&gt;&lt;th&gt;ApplicationID&lt;/th&gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;th&gt;IsDenied&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;


&lt;h3&gt;5. d) Using a single field for Deny&lt;/h3&gt;


&lt;p&gt;It's much easier to combine the first two fields into one, &lt;b&gt;marking the record implicitly&lt;/b&gt;. If the DeniedID is NULL, it means we are working with a regular record, otherwise, we are dealing with a denying record. Information about which Role we are denying is stored in the same field, which &lt;b&gt;works both as a boolean, as an integer&lt;/b&gt;. &lt;/p&gt;
&lt;br&gt;

&lt;table cellspacing="0" cellpadding="3" border="0" align="center" &gt;
&lt;tr&gt;&lt;th&gt;ApplicationID&lt;/th&gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;th&gt;DeniedRoleID&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;



&lt;h2&gt;The decision&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;The last architecture (5. d) is the one I think it's best.&lt;/b&gt; It's very transparent and flexible, and it has only one major problem I can currently think of; if only a few (of many) applications would require to share a Role, this wouldn't be possible to solve with this model, but I can live with that.&lt;/p&gt;

&lt;br&gt;

&lt;table cellspacing="0" cellpadding="3" border="0" align="center" style="font-size: 17px;" &gt;
&lt;tr&gt;&lt;th&gt;ApplicationID&lt;/th&gt;&lt;th&gt;RoleID (PK)&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;th&gt;DeniedRoleID&lt;/th&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Administrator&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;td&gt;Moderator&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;td&gt;News editor&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;/tr&gt;
 &lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;&lt;td&gt;NULL&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;


&lt;h2&gt;The SQL statement&lt;/h2&gt;
&lt;p&gt;I have played around a bit with the 5. d) and it works very well. Here's the &lt;b&gt;SELECT statement that retrieves the records for each specific application&lt;/b&gt;, supporting the mentioned scenarios.&lt;/p&gt;

&lt;p&gt;
&lt;i&gt;SELECT Roles.*&lt;br&gt;

FROM Roles &lt;br&gt;

WHERE &lt;br&gt;

(Roles.ApplicationID = 3 OR Roles.ApplicationID IS NULL) --retrieve local and global roles&lt;br&gt;

AND&lt;br&gt;

Roles.DeniedRoleID IS NULL --use only regular records&lt;br&gt;

AND &lt;br&gt;

Roles.RoleID NOT IN --remove denied roles&lt;br&gt;

(&lt;br&gt;

    SELECT DeniedRoles.DeniedRoleID FROM Roles AS DeniedRoles&lt;br&gt;

    WHERE DeniedRoles.ApplicationID = 3&lt;br&gt;

    AND DeniedRoles.DeniedRoleID IS NOT NULL&lt;br&gt;

)&lt;br&gt;

&lt;/i&gt;&lt;/p&gt;


&lt;p&gt;The same query, solved with a &lt;b&gt;JOIN instead of WHERE IN&lt;/b&gt;, which is faster, but probably less understandable.&lt;/p&gt;



&lt;p&gt;
&lt;i&gt;SELECT RealRoles.*&lt;br&gt;

FROM Roles AS RealRoles --regular records&lt;br&gt;

LEFT OUTER JOIN&lt;br&gt;

Roles AS DeniedRoles --denying records&lt;br&gt;

ON RealRoles.RoleID = DeniedRoles.DeniedRoleID --join by the ID of the role&lt;br&gt;

AND RealRoles.DeniedRoleID IS NULL  --but only those records that are real&lt;br&gt;

AND DeniedRoles.DeniedRoleID IS NOT NULL --vs those that are denying&lt;br&gt;

AND DeniedRoles.ApplicationID = 3&lt;br&gt;

WHERE &lt;br&gt;

(RealRoles.ApplicationID = 3 OR RealRoles.ApplicationID IS NULL) --retrieve my and global roles&lt;br&gt;

AND &lt;br&gt;

RealRoles.DeniedRoleID IS NULL -- take all regular roles&lt;br&gt;
AND &lt;br&gt;

DeniedRoles.RoleID IS NULL --that don't have a deny
&lt;/i&gt;&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;There are many ways to solve a database model in a SaaS architecture, but because of many reasons, &lt;a href="http://www.neolab.si/Organization_Marketing_Consulting_And_Information_Technologies.aspx#down" class="more" target="_Blank" title="Neolab, Software Development Team"&gt;we've decided&lt;/a&gt; to &lt;b&gt;use a single database with an additional foreign key&lt;/b&gt; that defines the client in all the required tables. One of the biggest concerns in this architecture is solving global and local records, but the &lt;b&gt;model presented here takes care of most requirements&lt;/b&gt; a typical Saas system might stumble upon, by using a NULL-able ApplicationID, with another field to take care of exceptions that require denying.&lt;/p&gt;

&lt;p&gt;This architecture solves most of the problems, and if you're leaning towards a single database architecture, it's probably the best way to go.&lt;/p&gt;







 





</description><link>http://stritar.net/Post/Solving-global-and-local-records-in-SaaS-database-design.aspx</link></item><item><title>Reinventing the blog, part 3: WTF did Pitchfork just do?</title><pubDate>Thu, 30 May 2013 20:24:21 GMT</pubDate><description>&lt;p&gt;You know that feeling when you do a lot of research, and after you publish your results, you notice something else that should be included as well? Happens to me all the time. Immediately after creating the &lt;a href="http://stritar.net/Post/Reinventing-the-blog-part-1-User-Experience-Analysis-of-the-most-innovative-and-best-designed-blogs.aspx" class="more" target="_blank" title="Reinventing the blog, part 1: Dissecting the most innovative and best-designed blogs"&gt;list of the most outstanding blogs&lt;/a&gt;, I noticed &lt;a href="http://bgr.com/" class="more" target="_blank" title="BGR | Mobile and tech news, reviews, opinions and insights&lt;"&gt;a few others&lt;/a&gt; that &lt;b&gt;should be added to the directory&lt;/b&gt;. Shit happens. I also tried to identify the &lt;b&gt;funky new UI elements&lt;/b&gt; these blogs use, which would help me understand the &lt;a href="http://stritar.net/Post/Reinventing-the-blog-part-2-The-challenges-the-opportunies.aspx" class="more" target="_Blank" title="Reinventing the blog, part 2: The challenges, the opportunies"&gt;user experience requirements&lt;/a&gt; driving modern publishing trends. Felt pretty good about the conclusions, but only to find myself out of luck again. Turns out I &lt;b&gt;missed something very important&lt;/b&gt;, something I noticed when I saw &lt;a href="http://pitchfork.com/features/cover-story/reader/daft-punk/" class="more" target="_blank" title="Cover Story: Daft Punk"&gt;what Pitchfork does with their cover articles&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When I was doing some &lt;a href="http://stritar.net/Post/Daft-Punk-Arrested-Development-and-how-content-is-becoming-an-experience.aspx" class="more" target="_blank" title="Daft Punk, Arrested Development, and how content is becoming an experience"&gt;research on Daft Punk&lt;/a&gt;, I read an &lt;a href="http://pitchfork.com/features/cover-story/reader/daft-punk/" class="more" target="_blank" title="Cover Story: Daft Punk"&gt;article on Pitchfork&lt;/a&gt;, and their use of &lt;a href="http://en.wikipedia.org/wiki/Parallax_scrolling" class="more" target="_Blank" title="Parallax scrolling"&gt;parallax scrolling&lt;/a&gt; almost brought tears to my eyes. Not that parallax scrolling is anything new - there are &lt;a href="http://www.awwwards.com/30-great-websites-with-parallax-scrolling.html" class="more" target="_blank" title="30 Great Websites with Parallax Scrolling"&gt;many outstanding cases&lt;/a&gt; of using this technique in web design. But usually, this means the &lt;b&gt;whole website is a single-page showcase&lt;/b&gt; that is using multiple layers that scroll with different velocity and in different directions to display information in an interesting way. One page. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://pitchfork.com/features/cover-story/reader/daft-punk/" class="more" target="_blank" title="Cover Story: Daft Punk"&gt;Not on Pitchfork&lt;/a&gt;. They're using advanced layouts and super-fancy parallax scrolling on &lt;a href="http://www.digitalartsonline.co.uk/news/interactive-design/pitchforks-creative-director-discusses-design-of-cover-stories/" class="more" target="_blank" title="Pitchfork's creative director discusses the design of Cover Stories"&gt;all of their cover articles&lt;/a&gt;. Custom fucking everything. Contrary to some other magazines, who are also using generic parallax scrolling in their &lt;a href="http://www.thedailybeast.com/newsweek/2013/05/22/the-al-jazeera-revolution.html" class="more" target="_blank" title="Newsweek feature article"&gt;feature articles&lt;/a&gt; (respect!), and some other blogs using custom layouts for &lt;a href="http://www.theverge.com/2013/5/29/4374012/nokia-lumia-928-review" class="more" target="_blank" title="The Verge review cover story"&gt;cover stories&lt;/a&gt; (respect!), this is simply over the top. &lt;a href="http://pitchfork.com/features/cover-story/reader/daft-punk/" class="more" target="_blank" title="Cover Story: Daft Punk"&gt;Check it out for yourself&lt;/a&gt;. I can't imagine &lt;b&gt;how much time is put into a post like this&lt;/b&gt;, making it looks as good as it does.&lt;/p&gt;&lt;br&gt;
&lt;img alt="Pitchfork Daft Punk Cover Story Parallax Scrolling Transition 1" src="http://stritar.net/Upload/Images/Pitchfork/Daft-Punk-1.jpg"&gt;&lt;br&gt;&lt;br&gt;
&lt;img alt="Pitchfork Daft Punk Cover Story Parallax Scrolling Transition 2" src="http://stritar.net/Upload/Images/Pitchfork/Daft-Punk-2.jpg"&gt;&lt;br&gt;&lt;br&gt;
&lt;img alt="Pitchfork Daft Punk Cover Story Parallax Scrolling Transition 3" src="http://stritar.net/Upload/Images/Pitchfork/Daft-Punk-3.jpg"&gt;
&lt;p class="underpicture"&gt;One of the crazy transitions and animations &lt;a href="http://pitchfork.com/features/cover-story/reader/daft-punk/" class="more" target="_blank" title="Cover Story: Daft Punk"&gt;inside the story&lt;/a&gt;.&lt;/p&gt;


&lt;p&gt;But what does this mean? Simple. Do you remember &lt;a href="http://www.youtube.com/watch?v=KHILJBw-104" class="more" target="_blank" title="Introducing The Daily"&gt;The Daily&lt;/a&gt;, an iPad-only magazine that &lt;a href="http://allthingsd.com/20121203/news-corp-shutters-the-daily-ipad-app/" class="more" target="_blank" title="News Corp. Shutters The Daily iPad App"&gt;was already discontinued&lt;/a&gt;? Supposedly it offered &lt;b&gt;revolutionary ways of consuming content&lt;/b&gt;. I didn't get the chance to try it out, but I did saw a few issues of &lt;a href="http://www.youtube.com/watch?v=zBIitccr7bw" class="more" target="_Blank" title="Wired - Trailer - iPad"&gt;Wired on the iPad&lt;/a&gt;, and I have to admit, it did &lt;b&gt;feel like being in the future&lt;/b&gt;. &lt;/p&gt;

&lt;p&gt;These paradigms are slowly &lt;b&gt;being adopted on the Web&lt;/b&gt; as well, and some magazines and blogs are already polishing their most important content to impressive levels, combining in-depth stories and custom development into &lt;b&gt;digital masterpieces&lt;/b&gt;. Like &lt;a href="http://pitchfork.com/features/cover-story/reader/daft-punk/" class="more" target="_blank" title="Cover Story: Daft Punk"&gt;Pitchfork's cover story&lt;/a&gt;, or even a &lt;a href="http://www.thedailybeast.com/newsweek/2013/05/22/the-al-jazeera-revolution.html" class="more" target="_blank" title="Newsweek feature article"&gt;feature on Newsweek&lt;/a&gt; or a &lt;a href="http://www.theverge.com/2013/5/29/4374012/nokia-lumia-928-review" class="more" target="_blank" title="The Verge review cover story"&gt;review on The Verge&lt;/a&gt;. This goes beyond putting some text into a WYSIWYG editor and uploading a few photos. Modern (digital) publishing is obviously pointing towards a collaborative effort of a &lt;b&gt;broad team of journalists, designers and web developers&lt;/b&gt;, which will be the only way to deliver content that will retain audience. So much for a plain and simple blog redesign.&lt;/p&gt;
&lt;p class="infoseries"&gt;Check out the complete &lt;a class="more" title="Reinventing the blog" href="http://stritar.net/Series/Reinventing-the-blog.aspx"&gt;Reinventing the blog&lt;/a&gt; series.&lt;/p&gt;
</description><link>http://stritar.net/Post/Reinventing-the-blog-part-3-WTF-did-Pitchfork-just-do.aspx</link></item><item><title>Reinventing the blog, part 2: The challenges, the opportunies</title><pubDate>Thu, 09 May 2013 12:42:06 GMT</pubDate><description>&lt;p&gt;After the initial &lt;a href="http://stritar.net/Post/Reinventing-the-blog-part-1-User-Experience-Analysis-of-the-most-innovative-and-best-designed-blogs.aspx" class="more" target="_Blank" title="Reinventing the blog, part 1: Dissecting the most innovative and best-designed blogs"&gt;dissection of the most innovative and well designed blogs&lt;/a&gt;, it's time to go behind the scenes. We've seen how some of these blogs look like, but there's even more value in understanding &lt;b&gt;why they look like they do&lt;/b&gt;. Every good &lt;a href="http://luxr.co/10_principles_of_lean_user_experience" class="more" target="_blank" title="10 Principles of Lean User Experience"&gt;user experience analysis&lt;/a&gt; needs to have a clear overview of the &lt;b&gt;goals&lt;/b&gt; and good insight into the &lt;b&gt;problems&lt;/b&gt; of the situation, and I will try to outline these by using my blog as an example. A lot can be deducted by monitoring the basic &lt;a href="http://stritar.net/Post/The_Impact_Of_Hyperlinks_Toolbars_And_Url_Shorteners_On_Google_Analytics.aspx" class="more" target="_Blank" title="The impact of hyperlinks, toolbars and URL shorteners on Google Analytics"&gt;Google Analytics&lt;/a&gt; reports.&lt;/p&gt;

&lt;p&gt;Even though generic blog &lt;b&gt;challenges and opportunities&lt;/b&gt; may not exist, I think that most blogs probably share around &lt;b&gt;80% of these goals&lt;/b&gt;. And just to be clear, by blogs I don't mean corporate blogs with their specific requirements (sales, leads, conversions), but modern online magazines, &lt;a href="http://socialmediatoday.com/anthony-baisi/1309526/blogs-vs-big-media" class="more" target="_blank" title="Blogs Vs. Big Media"&gt;originally (and still) called blogs&lt;/a&gt;, even though they are actually becoming mainstream media. Therefore, this analysis can work for &lt;b&gt;most online publishers&lt;/b&gt;, but I'm doing it mostly to help me understand what I need to do to &lt;a href="http://stritar.net/Post/Redesigning_The_Blog_-_Behold_The_Chronolog.aspx" class="more" target="_Blank" title="Redesigning the blog - behold the Chronolog"&gt;reinvent my blog again&lt;/a&gt;. It's pretty simple: &lt;b&gt;getting and retaining traffic&lt;/b&gt;. All other requirement are derived from these two.&lt;/p&gt;

&lt;h2&gt;Main goal: getting traffic, increasing engagement&lt;/h2&gt;

&lt;p&gt;The main goal of every website is to &lt;a href="http://stritar.net/Post/I-Got-Another-Scent-Of-Going-Viral-On-Social-Media-And-I-Am-Loving-Every-Bit-Of-It.aspx" class="more" target="_Blank" title="I got another scent of going viral on social media. And I'm loving every bit of it."&gt;get traffic&lt;/a&gt;. For traffic, you need &lt;b&gt;great (or at least good) content&lt;/b&gt;, something with added value for the users. What you do with that traffic, is another story. Sell things, sell ads, sell yourself.&lt;/p&gt;

&lt;p&gt;There are primarily three different sources of traffic you can receive: &lt;b&gt;direct, referral and search&lt;/b&gt;. You want all of them, and each component is a result of different activities. Getting direct traffic means you have a &lt;b&gt;strong brand&lt;/b&gt;. Getting referral traffic means you have great writers / influencers which help you &lt;b&gt;get backlinks&lt;/b&gt; to your blog. Getting search traffic means you have a great technical team and &lt;a href="http://www.quicksprout.com/2013/01/21/the-state-of-seo-whats-working-now/" class="more" target="_Blank" title="The State of SEO: What’s Working Now"&gt;SEO&lt;/a&gt; (&lt;a href="http://socialmediatoday.com/sbhsbh/1208256/step-aside-seo-you-need-think-about-cmo-now" class="more" target="_blank" title="Step Aside SEO, Content Marketing Optimization Is Here"&gt;CMO&lt;/a&gt; and &lt;a href="http://www.briansolis.com/2010/02/social-media-optimization-smo-is-the-new-seo-part-1/" class="more" target="_blank" title="Social Media Optimization: SMO is the New SEO – Part 1"&gt;SMO&lt;/a&gt;) optimized site&lt;/a&gt;.&lt;/p&gt;


&lt;p align="center"&gt;&lt;img src="http://stritar.net/Upload/Images/Reinventing-Blog-Analytics/Traffic-Sources.gif" alt="Google Analytics traffic sources"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;You want a well-balanced stream of traffic to your blog.&lt;/p&gt;


&lt;p&gt;The other important goal that websites have is &lt;b&gt;keeping the traffic on the site&lt;/b&gt;, which can be done by &lt;a href="http://www.websitemagazine.com/content/blogs/posts/archive/2013/03/29/2013-Social-SEO-Required.aspx" class="more" target="_blank" title="2013: Social SEO Required"&gt;stimulating user engagement&lt;/a&gt;. Helping things happen after you get people to your blog. You want users to spend &lt;b&gt;as much time as possible&lt;/b&gt; with you, navigate through many pages, and hopefully &lt;b&gt;give you some feedback&lt;/b&gt; - leaving comments and &lt;a href="http://stritar.net/Post/Reinventing-SEO-Search-Engine-Optimization-The-Social-Media-Effect.aspx" class="more" target="_blank" title="Reinventing SEO: The social media effect"&gt;sharing your posts on social media&lt;/a&gt;. Some blogs want other actions as well, but these are probably the most obvious ones.&lt;/p&gt;

&lt;h2&gt;Increasing social media activity&lt;/h2&gt;
&lt;p&gt;Social media is emerging as one of the most important &lt;b&gt;referral sources&lt;/b&gt;. But lately, it's becoming a noteworthy &lt;a href="http://www.searchprosystems.com/social-media%E2%80%99s-impact-on-google-search-rankings" class="more" target="_blank" title="Social Media’s Impact on Google Search Ranking"&gt;factor for search engine rankings&lt;/a&gt; as well. That's why blogs are trying hard to integrate social media widgets into their content, some even go beyond the standard &lt;a href="http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx" class="more" target="_blank" title="Adding share buttons to your blog or website - a comprehensive guide"&gt;tweet / like / + 1 buttons&lt;/a&gt;. &lt;b&gt;Help people share&lt;/b&gt;, there are &lt;a href="http://www.forbes.com/sites/kenkrogue/2012/07/20/the-death-of-seo-the-rise-of-social-pr-and-real-content/" class="more" target="_blank" title="The Death Of SEO: The Rise of Social, PR, And Real Content"&gt;many benefits&lt;/a&gt; from it, both direct and indirect.&lt;/p&gt;


&lt;br&gt;
&lt;img src="http://stritar.net/Upload/Images/Viral-Blogger-Social-Shares.gif" alt="Social shares of '5 reasons why I won't steal your idea'"&gt;
&lt;p class="underpicture"&gt;The social activity on my &lt;a href="http://stritar.net/Post/Five-reasons-why-I-will-not-steal-your-idea.aspx" class="more" target="_blank" title="5 reasons why I won't steal your idea"&gt;most visited post&lt;/a&gt;. These figures translate into more than &lt;a href="http://stritar.net/Post/I-guess-I-am-a-real-blogger-now.aspx" class="more" target="_blank" title="I guess I'm a real blogger now"&gt;10k unique users&lt;/a&gt;.&lt;/p&gt;


&lt;h2&gt;Lowering bounce rates, increasing time on site&lt;/h2&gt;
&lt;p&gt;Most blogs have &lt;a href="http://gatipoftheday.com/expect-a-high-bounce-rate-for-your-blog/" class="more" target="_blank" title="Expect a High Bounce Rate for Your Blog"&gt;very high bounce rates&lt;/a&gt; - people tend to &lt;b&gt;read a single post&lt;/b&gt; and leave the site. That is why designers and information architects are trying to do everything to &lt;a href="http://searchenginewatch.com/article/2237250/Reduce-Bounce-Rate-20-Things-to-Consider" class="more" target="_Blank" title="Reduce Bounce Rate: 20 Things to Consider"&gt;keep readers on their site&lt;/a&gt;, hoping to persuade them to read another article. Some are trying too hard by adding too many related posts, others are playing with many &lt;a href="http://stritar.net/Post/Reinventing-the-blog-part-1-User-Experience-Analysis-of-the-most-innovative-and-best-designed-blogs.aspx" class="more" target="_Blank" title="Reinventing the blog, part 1: Dissecting the most innovative and best-designed blogs"&gt;interesting ways&lt;/a&gt; of driving readers to the next page.&lt;/p&gt;


&lt;p&gt;My current bounce rate is more than 80%, with average visit duration just above 2 minutes. Something that needs to be &lt;b&gt;improved urgently&lt;/b&gt;. I am sure this will be one of the most significant challenges I will face when developing the next generation of &lt;a href="http://stritar.net/Projects/Chronolog.aspx" class="more" target="_blank" title="Stritar's chronolog"&gt;my blog&lt;/a&gt;.&lt;/p&gt;


&lt;p align="center"&gt;&lt;img src="http://stritar.net/Upload/Images/Reinventing-Blog-Analytics/Bounce-Rate-Time.gif" alt="Google Analytics bounce rates and time on site"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;Improving these bounce rates and time on site is one of my highest priorities.&lt;/p&gt;

&lt;h2&gt;Treating every page as a landing page&lt;/h2&gt;
&lt;p&gt;The time when people visited the homepage and navigated further from there are over. Today, specially &lt;b&gt;because of social media&lt;/b&gt;, &lt;a href="http://www.business2community.com/online-marketing/homepages-are-not-landing-pages-0450020" class="more" target="_blank" title="Homepages Are Not Landing Pages"&gt;every page is a landing page&lt;/a&gt; and needs to be treated as such. We are &lt;b&gt;consuming content in a different way&lt;/b&gt;, we don't browse for content anymore, the content finds us. That is why we need to design every single page as the starting point for our visitors.&lt;/p&gt;

&lt;p&gt;At this point, less than 10% of traffic to my blog comes through the homepage. Which means designing &lt;b&gt;great post pages&lt;/b&gt; is becoming more important than designing the homepage, since every page needs to become a hub for further navigation.&lt;/p&gt;

&lt;h2&gt;Building loyalty and credibility (branding)&lt;/h2&gt;
&lt;p&gt;Besides keeping users on site, it's also important you &lt;b&gt;get users back to the site&lt;/b&gt;. As your brand and reputation evolve, it gets easier with all of the traffic components, but you can achieve that with only one thing - &lt;b&gt;great content&lt;/b&gt;. Of course, nice design and user experience help, but you can't bypass this simple fact: you need something with &lt;b&gt;added value to the readers&lt;/b&gt;. Only then you will get loyal users and only then your blog will thrive.&lt;/p&gt;

&lt;p align="center"&gt;&lt;img src="http://stritar.net/Upload/Images/Reinventing-Blog-Analytics/New-Returning.gif" alt="Google Analytics new and returning visitors"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;Even though most focus is done on gaining new readers, you mustn't forget about returning ones.&lt;/p&gt;

&lt;h2&gt;Allowing a mobile-friendly experience&lt;/h2&gt;
&lt;p&gt;We are living in a mobile world and more and more &lt;a href="http://adage.com/article/special-report-digital-conference/top-10-internet-trends-2013/240912/" class="more" target="_blank" title="The Top 10 Internet Trends for 2013"&gt;traffic is made by mobile devices&lt;/a&gt;. This number is closing in on 20% on my blog, which means &lt;b&gt;optimization for mobile visitors&lt;/b&gt; is becoming something that you can't ignore.&lt;/p&gt;


&lt;p align="center"&gt;&lt;img src="http://stritar.net/Upload/Images/Reinventing-Blog-Analytics/Operating-systems.gif" alt="Google Analytics operating systems"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;Mobile operating systems are on the rise.&lt;/p&gt;

&lt;h2&gt;Combining it with the funky new UI elements&lt;/h2&gt;
&lt;p&gt;In my &lt;a href="http://stritar.net/Post/Reinventing-the-blog-part-1-User-Experience-Analysis-of-the-most-innovative-and-best-designed-blogs.aspx" class="more" target="_Blank" title="Reinventing the blog, part 1: Dissecting the most innovative and best-designed blogs"&gt;previous post&lt;/a&gt;, I outlined the &lt;b&gt;interesting new user interface elements&lt;/b&gt; my favourite blogs use. Now we can map these elements with the above mentioned five challenges and opportunities, which will help us understand the &lt;b&gt;requirements behind the innovations&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;
&lt;table cellspacing="0" cellpadding="3" border="0" width="100%"&gt;

&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Social media&lt;/th&gt;&lt;th&gt;Bounce / time&lt;/th&gt;&lt;th&gt;Landing pages&lt;/th&gt;&lt;th&gt;Branding&lt;/th&gt;&lt;th&gt;Mobile&lt;/th&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Unconventional navigation&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Fixed (floating) menu&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Responsive design&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Big key visual before text&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Advanced key visual (gallery, video)&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Abstract, teaser, subheading&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Suggested content within limits&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Custom social media integration&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Polished content (wrapping, quotes)&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Custom typography&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Infinite scroll&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Pinterest-style homepage&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Integrated content and navigation&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Total&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&lt;b&gt;5&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&lt;b&gt;10&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&lt;b&gt;8&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;/p&gt;
&lt;p&gt;It's pretty clear each of the elements has at least one specific goal that it's trying to solve. Some of them will surely &lt;b&gt;become a standard&lt;/b&gt; in the future.&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;What a modern blog is trying to achieve in 2013 is pretty clear. Get &lt;b&gt;more traffic&lt;/b&gt;, make users &lt;b&gt;spend more time&lt;/b&gt; on the site. This hasn't changed in decades, but the &lt;b&gt;behaviour of the users has&lt;/b&gt;. Only those that will be able to adapt to the newly-formed situation will survive. &lt;/p&gt;

&lt;p&gt;The most important paradigms that have shaped the past years are the &lt;a href="http://stritar.net/Post/Web-2-5-Looking-For-The-Missing-Link-Between-Web-2-0-And-Web-3-0.aspx" class="more" target="_blank" title="Web 2.5: Looking for the missing link between Web 2.0 and Web 3.0"&gt;social and mobile era&lt;/a&gt;, which have &lt;b&gt;revolutionized the ways we consume content&lt;/b&gt;. We are online all the time, with many devices, and there is so much content everywhere, it's overwhelming. Our attention span is becoming very limited, and all of above mentioned challenges are focused in &lt;b&gt;trying to capture it&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;I decided it's time to redesing my blog again, and by understanding what (and why) the &lt;b&gt;market leaders&lt;/b&gt; do, my task will surely be easier. I hope you find my analysis useful, but please feel free to add anything I may have forgotten in the comments. &lt;/p&gt;

&lt;p class="infoseries"&gt;Check out the complete &lt;a href="http://stritar.net/Series/Reinventing-the-blog.aspx" class="more" title="Reinventing the blog"&gt;Reinventing the blog&lt;/a&gt; series.&lt;/p&gt;
</description><link>http://stritar.net/Post/Reinventing-the-blog-part-2-The-challenges-the-opportunies.aspx</link></item><item><title>Reinventing the blog, part 1: Dissecting the most innovative and best-designed blogs</title><pubDate>Fri, 29 Mar 2013 15:23:46 GMT</pubDate><description>&lt;p&gt;The blog is getting mature. Ever since &lt;b&gt;Gawker did its eccentric redesign&lt;/b&gt; a few years ago, we've seen a lot of other blog (networks) doing similar things, trying to reinvent how the blog should look like in 2013. After the &lt;a href="http://www.aolnews.com/2011/02/07/gawker-redesign-does-not-exactly-thrill-the-internet/" class="more" target="_blank" title="Gawker Redesign Does Not Exactly Thrill the Internet"&gt;initial hiccup&lt;/a&gt;, Gawker managed to &lt;a href="http://thenextweb.com/insider/2012/02/02/remember-that-gawker-redesign-a-years-worth-of-data-says-it-worked/" class="more" target="_blank" title="Remember that Gawker redesign? A year’s worth of data says it worked."&gt;fortify its position and attract new users&lt;/a&gt;, showing others that people do like to see different things, things that are imitating the &lt;a href="http://informationarchitects.net/blog/wired-on-ipad-just-like-a-paper-tiger/" class="more" target="_blank" title="WIRED on iPad: Just like a Paper Tiger..."&gt;experience of reading electronic magazines on mobile devices&lt;/a&gt;. Today, there are many great cases of &lt;b&gt;how a modern blog should feel&lt;/b&gt;, and since I'm thinking about doing something similar myself (it's been almost 4 years since &lt;a href="http://stritar.net/Post/Redesigning_The_Blog_-_Behold_The_Chronolog.aspx" class="more" target="_Blank" title="Redesigning the blog - behold the Chronolog"&gt;I did this&lt;/a&gt;!), I decided to dissect a few of the most innovative ones, hoping to get a picture of &lt;b&gt;what works and what not&lt;/b&gt;. Here are my picks of the most creative and best designed (mainstream) blogs on the Web, those that are standing out from the crowd and are unique in what they offer to their readers.&lt;/p&gt;

&lt;h2&gt;Fast Company&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.fastcompany.com/" class="more" target="_blank" title="Fast Company | Business + Innovation"&gt;Fast Company&lt;/a&gt; is a great example that demonstrates the &lt;b&gt;power of images&lt;/b&gt; - especially if you have access to professional photographic material. The home page is clean and the highlighted article is integrated into the main key visual, which works very well. The same logic of the huge picture is implemented to the inner pages as well, and this &lt;b&gt;picture is transformed into a gallery&lt;/b&gt; if required. There isn't much of related content on a single article, and the &lt;b&gt;social buttons are custom&lt;/b&gt;, which I think we will be seeing a lot of in the future.&lt;/p&gt;&lt;br&gt;
&lt;a href="http://www.fastcompany.com/" class="more" target="_blank" title="Fast Company | Business + Innovation"&gt;&lt;img src="http://stritar.net/Upload/Images/Reinventing-Blog/Fast-Company-Article-Page.jpg" alt="Fast Company article page"&gt;&lt;/a&gt;
&lt;p class="underpicture"&gt;Fast Company uses an effective combination of the key visual, article header, additional flavor text and custom social buttons.&lt;/p&gt;


&lt;p&gt;Fast Company uses &lt;b&gt;custom typography&lt;/b&gt;, &lt;b&gt;infinite scroll&lt;/b&gt; to avoid paging, takes good advantage from the &lt;b&gt;article abstract / subtitle&lt;/b&gt; to make you curious (it's displayed on the article as the introduction as well), and their website is &lt;b&gt;responsive&lt;/b&gt;. It is also interesting that they keep a &lt;b&gt;single article visible above the fold&lt;/b&gt; on their homepage to retain focus. From the design and user experience perspective, this solution is one of my favorites.&lt;/p&gt;


&lt;h2&gt;Gawker&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://gawker.com/" class="more" target="_Blank" title="Gawker - Today's gossip is tomorrow's news"&gt;Gawker&lt;/a&gt;'s innovative approach was to use two columns for news on the home page - one for top stories and one for latest stories - and &lt;b&gt;ditching the main menu&lt;/b&gt;. While this may have been one of the most important evolutions modern blogs have made, I don't think this feature works well on the homepage, since I don't really notice the right column when I browse the site. However, this feature becomes &lt;b&gt;more useful on the inner pages&lt;/b&gt;, where this module is duplicated, and where most people land on the site. &lt;/p&gt;&lt;br&gt;

&lt;a href="http://gawker.com/" class="more" target="_Blank" title="Gawker - Today's gossip is tomorrow's news"&gt;&lt;img src="http://stritar.net/Upload/Images/Reinventing-Blog/Gawker-Tipical-Page-Video.jpg" alt="Gawker Typical Page Video"&gt;&lt;/a&gt;
&lt;p class="underpicture"&gt;Gawker and the omnipresent main menu that changed the game.&lt;/p&gt;


&lt;p&gt;This realization, that single blog posts should be treated as &lt;a href="http://www.business2community.com/online-marketing/homepages-are-not-landing-pages-0450020" class="more" target="_blank" title="http://www.business2community.com/online-marketing/homepages-are-not-landing-pages-0450020"&gt;primary landing pages&lt;/a&gt;, is very important, and Gawker was one of the first to fully &lt;a href="http://stritar.net/Post/Reinventing-SEO-Search-Engine-Optimization-The-Social-Media-Effect.aspx" class="more" target="_blank" title="Reinventing SEO: The social media effect"&gt;integrate that concept&lt;/a&gt; into its user experience. People don't browse blogs anymore, they &lt;b&gt;consume social media that brings them to blogs&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;Gawker also uses a big picture (not in such a cool way as Fast Company) in the post, and it's very smart and concise that this &lt;b&gt;picture can be replaced with a video&lt;/b&gt;. I like the way comments are solved, showing only the &lt;b&gt;most popular threads&lt;/b&gt;, and not the complete conversation (with the amount of comments they have, it would be probably useless otherwise). I'm also keen on the internal &lt;b&gt;hot meter&lt;/b&gt; they use, which they seem to use to distinguish the top and latest news. However, they should ditch the "like Gawker" block exposed on each article, it's very misleading. The mobile site should also be replaced with a responsive version.&lt;/p&gt;

&lt;h2&gt;Mashable&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://mashable.com/" class="more" target="_blank" title="Mashable"&gt;Mashable&lt;/a&gt;'s redesign introduced quite a few interesting features I look forward to adopting. They have &lt;b&gt;minimized the main menu&lt;/b&gt;, offering a drop down popup menu that allows further classification of news. This menu is well coded and does a pretty good job of taking care of incidental mouse moves (&lt;a href="http://bjk5.com/post/44698559168/breaking-down-amazons-mega-dropdown" class="more" target="_blank" title="Breaking down Amazon&amp;#8217;s mega dropdown"&gt;not as good as Amazon though&lt;/a&gt;). The homepage uses three columns to display articles, even though I'm not fully sure how that works ("The new stuff" is probably all articles, "The next big thing" are probably highlighted by the editor, and "What's hot" by the crowd), and this feature's &lt;b&gt;column header is fixed&lt;/b&gt; upon (infinite) scrolling. The design is, driven by their specific social media ninja audience, of course, &lt;b&gt;responsive&lt;/b&gt;.&lt;/p&gt;&lt;br&gt;

&lt;a href="http://mashable.com/" class="more" target="_blank" title="Mashable"&gt;&lt;img src="http://stritar.net/Upload/Images/Reinventing-Blog/Mashable-Article-Page.jpg" alt="Mashable Article Page"&gt;&lt;/a&gt;
&lt;p class="underpicture"&gt;Mashable has a clever integration of social media activity on the top of the article.&lt;/p&gt;

&lt;p&gt;What I like about Mashable's new version the most, is the &lt;b&gt;clever social media integration&lt;/b&gt;. They have the total number of shares displayed on the top of the article, as well as a little graph that displays the &lt;b&gt;dynamics of social activity&lt;/b&gt; for a specific post. These social media statistics are probably also used to feed the columns on the homepage, even though most people probably don't understand what's happening. But perhaps that's for the best - if it works well in recommending the articles, thumbs up.&lt;/p&gt;



&lt;p&gt;Again, we are seeing a picture above the article, which can be video as well. That's good. What I don't like about Mashable is the &lt;b&gt;three-column footer&lt;/b&gt; of the article, it is the same as the homepage, displaying a single category. I can understand the need for such a thing, it could work, cloning the homepage on the landing article page, but for me, it's just too overwhelming.&lt;/p&gt;



&lt;h2&gt;The Next Web&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://thenextweb.com/" class="more" target="_blank" title="The Next Web - International technology news, business &amp; culture"&gt;The Next Web&lt;/a&gt;'s new design is somewhere in between Mashable and Gawker. The homepage uses two columns, the Channels, which can be configured and switched from popular to latest, and the main window, which offers a &lt;a href="http://www.aericon.com/blog/did-you-know-that-the-pinterest-style-design-is-more-addictive-than-sex/" class="more" target="_blank" title="Did you know that the Pinterest style design is more addictive than sex?"&gt;pinterest-style display&lt;/a&gt; of articles, similar to the one Mashable uses. This &lt;b&gt;left menu box is fixed&lt;/b&gt; and used both on the home and inner pages, and it works as the main menu to navigate the content of the portal. The main main menu is simple and works as a hub for other TNW stuff.&lt;/p&gt;&lt;br&gt;

&lt;a href="http://thenextweb.com/" class="more" target="_blank" title="The Next Web - International technology news, business &amp; culture"&gt;&lt;img src="http://stritar.net/Upload/Images/Reinventing-Blog/The-Next-Web-Article-Page.jpg" alt="The Next Web Article Page"&gt;&lt;/a&gt;
&lt;p class="underpicture"&gt;The Next Web's navigation and post header, together with instruction to use the keyboard.&lt;/p&gt;


&lt;p&gt;The Next Web also has &lt;b&gt;custom social media integration&lt;/b&gt;, and offers the users to &lt;b&gt;navigate with the keyboard&lt;/b&gt;. This navigation works very well with the left box - meaning the users is navigating the current selection in the box, offering an experience similar to switching a remote on a digital TV, knowing what the next channel will be. I'm not sure how many users notice and use this feature, but this &lt;b&gt;integrated content and navigation approach&lt;/b&gt; is very interesting.&lt;/p&gt;

&lt;p&gt;The site is responsive, uses a big picture before the post, together with the detailed information about the article. Another interesting thing - the &lt;b&gt;images break out of the paragraph form&lt;/b&gt;. Overall, a very solid performance with a minimalistic design.&lt;/p&gt;



&lt;h2&gt;Quartz&lt;/h2&gt;
&lt;p&gt;While &lt;a href="http://qz.com/" class="more" target="_blank" title="Top Stories - Quartz"&gt;Quartz&lt;/a&gt; may not be one of the most well-known blogs out there, it still very much deserves a mention for its creative implementation. The clever &lt;b&gt;menu that collapses&lt;/b&gt; when you proceed to the article, the interesting fixed list on the left that can be &lt;b&gt;configured and pivoted&lt;/b&gt; according to your wishes, making the navigation much easier and again, &lt;b&gt;integrated with the content&lt;/b&gt;.&lt;/p&gt;&lt;br&gt;

&lt;a href="http://qz.com/" class="more" target="_blank" title="Top Stories - Quartz"&gt;&lt;img src="http://stritar.net/Upload/Images/Reinventing-Blog/Quartz-Homepage.jpg" alt="Quartz Homepage"&gt;&lt;/a&gt;
&lt;p class="underpicture"&gt;Quartz fully integrates the navigation and content.&lt;/p&gt;


&lt;p&gt;There's another innovative feature on Quartz for which I haven't decided if I like it or not, but it is very interesting nevertheless. When you scroll to the end of the article, the &lt;b&gt;next article is automatically displayed&lt;/b&gt;, together with a new URL. This is made as a redirect (the url changes), but it does not seem like one at all - when I get the time I will try to see how they technically achieve this. This &lt;b&gt;article change is integrated with the left box&lt;/b&gt;, which makes the complete experience pretty interesting, similar to the one The Next Web has. What Quartz misses is better social media integration. They went a step back and decided to use links to share pages instead of widgets, which probably doesn't help their traffic that much, but it's aligned with the design. The site is &lt;b&gt;responsive&lt;/b&gt;.&lt;/p&gt;


&lt;h2&gt;The Verge&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://www.theverge.com/" class="more" target="_blank" title="The Verge"&gt;The Verge&lt;/a&gt;'s homepage is probably the most unique of them all. While I would make the main menu less confusing, I really like the &lt;b&gt;tiles for the most interesting articles&lt;/b&gt;. This is followed by the video section, and by a ton of other articles - &lt;b&gt;too many of them&lt;/b&gt;, to be honest. But things get more interesting once you get to a specific post. The &lt;b&gt;menu gets smaller&lt;/b&gt;, there is a clear &lt;b&gt;navigation to the next and previous articles&lt;/b&gt; at the top, and the breaking news floats.&lt;/p&gt;&lt;br&gt;

&lt;a href="http://www.theverge.com/" class="more" target="_blank" title="The Verge"&gt;&lt;img src="http://stritar.net/Upload/Images/Reinventing-Blog/The-Verge-Article-Page.jpg" alt="The Verge Article Page"&gt;&lt;/a&gt;
&lt;p class="underpicture"&gt;The Verge's posts are close to perfection - full of images and quotes, together with embedded galleries.&lt;/p&gt;

&lt;p&gt;The design of the inner page is very creative, there is a huge image (not on all articles, it seems only on the reviews) with &lt;a href="http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx" class="more" target="_Blank" title="Adding share buttons to your blog or website - a comprehensive guide"&gt;social share widgets&lt;/a&gt;, a &lt;b&gt;secondary title is also used&lt;/b&gt;. I really like the &lt;b&gt;quotes inside the text&lt;/b&gt;, and the &lt;b&gt;jump-to thingie&lt;/b&gt; is useful as well. You can see that someone took a lot of time to shape the content, the text is &lt;b&gt;wrapped around images, the galleries are embedded within the text&lt;/b&gt;. This gives you an impression you are browsing a &lt;b&gt;high-end iPad magazine&lt;/b&gt; rather than a web page. There aren't to many other elements on the page, so the overall result is very clean and easy to read. On the other hand, that &lt;b&gt;polished content structure&lt;/b&gt; probably makes it quite hard for the site to be responsive, which The Verge is not.&lt;/p&gt;



&lt;h2&gt;Wired&lt;/h2&gt;
&lt;p&gt;The legendary &lt;a href="http://www.wired.com/" class="more" target="_blank" title="wired.com"&gt;Wired&lt;/a&gt; magazine has an online edition that would make a lot of people proud. They have been always known &lt;a href="http://stritar.net/Post/Creative_Online_Advertising_At_Its_Best_-_Wired_And_Youtube.aspx" class="more" target="_blank" title="Creative online advertising at its best – Wired and Youtube"&gt;as innovators&lt;/a&gt;, and were one of the first to introduce the &lt;b&gt;grid display of articles instead of a list&lt;/b&gt;. This means the emphasis is more on the images and headings than it is on the text. The popup menu is put somewhere inside this grid of posts, which is a daring, but effective solution. This menu neatly moves to the top on the inner pages.&lt;/p&gt;&lt;br&gt;


&lt;a href="http://www.wired.com/" class="more" target="_blank" title="wired.com"&gt;&lt;img src="http://stritar.net/Upload/Images/Reinventing-Blog/Wired-Article-Page.jpg" alt="Wired Article Page"&gt;&lt;/a&gt;
&lt;p class="underpicture"&gt;Wired's article headings have big titles and teasing abstracts.&lt;/p&gt;


&lt;p&gt;Again, we are seeing two different types of posts as on The Verge, the basic one, and the advanced one. The advanced one is a feast to the eyes, with a &lt;b&gt;huge heading and abstract&lt;/b&gt; that get you interested, the &lt;b&gt;pictures that break out of paragraphs&lt;/b&gt;. But there are a few things that are not suited for such an established magazine. In a gallery, each click reloads the complete page, which can be very very annoying. I don't think hunting for ad views makes it worth it. I would also make the right column a little less overwhelming with content (not only ads, but everything else as well). And the site is not responsive.&lt;/p&gt;



&lt;h2&gt;Breaking down the elements&lt;/h2&gt;
&lt;p&gt;Based on the analysis, we can conclude that new specific elements started to emerge with the next generation of blogs. These elements are the results of us &lt;b&gt;consuming content in a different&lt;/b&gt; way that we were a few years ago - before &lt;a href="http://stritar.net/Post/Web-2-5-Looking-For-The-Missing-Link-Between-Web-2-0-And-Web-3-0.aspx" class="more" target="_blank" title="Web 2.5: Looking for the missing link between Web 2.0 and Web 3.0"&gt;social and mobile&lt;/a&gt;. Most of them are taking care of "the homepage is not the landing page" situation, while trying to persuade people to proceed with browsing the content, &lt;b&gt;lowering bounce rates&lt;/b&gt;. &lt;/p&gt;
&lt;p&gt;
&lt;table cellspacing="0" cellpadding="3" border="0" width="100%"&gt;

&lt;tr&gt;&lt;th&gt;&lt;/th&gt;&lt;th&gt;Fastco&lt;/th&gt;&lt;th&gt;Gawker&lt;/th&gt;&lt;th&gt;Mashable&lt;/th&gt;&lt;th&gt;TNW&lt;/th&gt;&lt;th&gt;Quartz&lt;/th&gt;&lt;th&gt;Verge&lt;/th&gt;&lt;th&gt;Wired&lt;/th&gt;&lt;th&gt;Total&lt;/th&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Unconventional navigation&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="right"&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Fixed (floating) menu&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="right"&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Responsive design&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="right"&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Big key visual before text&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="right"&gt;&lt;b&gt;7&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Advanced key visual (gallery, video)&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="right"&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Abstract, teaser, subheading&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="right"&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Suggested content within limits&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="right"&gt;&lt;b&gt;5&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Custom social media integration&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="right"&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Polished content (wrapping, quotes)&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="right"&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Custom typography&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="right"&gt;&lt;b&gt;6&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Infinite scroll&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="right"&gt;&lt;b&gt;3&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Pinterest-style homepage&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="right"&gt;&lt;b&gt;4&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Integrated content and navigation&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td align="center"&gt;1&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td&gt;&amp;nbsp;&lt;/td&gt;&lt;td align="right"&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;

 &lt;tr&gt;&lt;td&gt;&lt;b&gt;Total&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&lt;b&gt;8&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&lt;b&gt;5&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&lt;b&gt;9&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&lt;b&gt;9&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&lt;b&gt;8&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&lt;b&gt;6&lt;/b&gt;&lt;/td&gt;&lt;td align="center"&gt;&lt;b&gt;5&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;

&lt;/p&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Typical design and user experience of mainstream blogs have &lt;b&gt;evolved in the past few years&lt;/b&gt;, and we will be seeing similar concepts &lt;a href="http://www.nytimes.com/marketing/prototype/index.html" class="more" target="_Blank" title="Introducing A New Article Design — NYTimes.com"&gt;adopted by the mainstream media&lt;/a&gt; as well. The &lt;a href="http://stritar.net/Post/Web-2-5-Looking-For-The-Missing-Link-Between-Web-2-0-And-Web-3-0.aspx" class="more" target="_blank" title="Web 2.5: Looking for the missing link between Web 2.0 and Web 3.0"&gt;social and mobile&lt;/a&gt; era have &lt;b&gt;changed the way we consume content&lt;/b&gt;, while heightening our expectations - most of us simply count on &lt;b&gt;great experiences&lt;/b&gt;. Luckily, the world is full of great innovators who are not afraid to take risks and implement new creative features that will become a standard in the years to come. I'm already looking forward to how other major players will respond to the new situation.&lt;/p&gt;

&lt;p class="infoseries"&gt;Check out the complete &lt;a href="http://stritar.net/Series/Reinventing-the-blog.aspx" class="more" title="Reinventing the blog"&gt;Reinventing the blog&lt;/a&gt; series.&lt;/p&gt;

</description><link>http://stritar.net/Post/Reinventing-the-blog-part-1-User-Experience-Analysis-of-the-most-innovative-and-best-designed-blogs.aspx</link></item><item><title>The Risk board game dice roll probability calculator and battle simulator</title><pubDate>Sun, 17 Mar 2013 16:32:12 GMT</pubDate><description>&lt;p&gt;I know there are plenty of you out there who love to play the board game &lt;a href="http://en.wikipedia.org/wiki/Risk_%28game%29" class="more" target="_blank" title="Risk (game) on Wikipedia"&gt;Risk&lt;/a&gt;. We're hooked on the Lord Of The Rings edition, and I still need to check out the &lt;a href="http://boardgamegeek.com/boardgame/8504/risk-lord-of-the-rings-expansion-set-incl-siege-o" class="more" target="_blank" title="Risk: Lord of the Rings Expansion Set (incl. Siege of Minas Tirith game)"&gt;very rare expansion pack&lt;/a&gt; one of my friends recently got. As you will see, I'm getting ready for it with all I've got, developing myself a &lt;b&gt;weapon that will help me dominate the game&lt;/b&gt;. Something that will turn the odds in my favor without actually cheating. Say hi to my &lt;b&gt;Risk battle simulator&lt;/b&gt;, which is able to calculate the chance of winning for specific Risk situations.&lt;/p&gt;

&lt;p align="center"&gt;&lt;a class="button2" title="Launch The Risk board game dice roll probability calculator and battle simulation" target="_blank" href="http://diceroll.stritar.net/risk.html"&gt;Launch&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;Risk is an interesting game, powered by &lt;b&gt;simple mathematics&lt;/b&gt;. In the battle, the attacker throws three dice, the defender throws two. The attacker's advantage is the one extra die. The defender's advantage is that he/she wins when the dice are tied. Which, in the general situation of 3 dice vs. 2 dice roll, translates into the &lt;a href="http://www.plainsboro.com/~lemke/risk/" class="more" target="_blank" title="Dice Odds in the Board Game Risk"&gt;following odds&lt;/a&gt;: the &lt;b&gt;attacker has 37.17% chance&lt;/b&gt; of winning, the &lt;b&gt;defender has 33.58% chance&lt;/b&gt; of winning, and there's a &lt;b&gt;29.26 % chance of tie&lt;/b&gt; - they will both lose one army. But what about specific situations? How can I know if my 10 armies are enough against my opponent's 5+4?&lt;/p&gt;

&lt;p&gt;Since I'm a developer and not a mathematician, I decided I will rather build a &lt;a href="http://diceroll.stritar.net/risk.html" class="more" target="_blank" title="The Risk board game dice roll probability calculator and battle simulation"&gt;simple brute force JavaScript simulator&lt;/a&gt; than try to derive the formula behind the battles. An application that simulates &lt;b&gt;10.000 Risk fights&lt;/b&gt; (around 50.000 dice rolls) and calculates the result odds. That should be enough to make an approximation, right?&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.hasbro.com/common/instruct/risk.pdf" class="more" target="_blank" title="Risk Instructions and Rules"&gt;Risk's rules&lt;/a&gt; specify that the attacker always has to &lt;b&gt;leave one army behind&lt;/b&gt; (can't use it to attack), and can &lt;b&gt;attack any number of territories&lt;/b&gt; in a single turn. Which the calculator also takes into account. Every territory the attacker wins, his/her number of armies is subtracted by 1 (one army is left behind), and the last army is not able to attack. I think I got it right, but if you find and error, please let me know. &lt;/p&gt;

&lt;p align="center"&gt;&lt;img alt="Risk Dice Roll Battle Simulation" src="http://stritar.net/Upload/Images/Risk-Dice-Roll/Risk-Dice-Roll-Battle-Simulation.jpg"&gt;&lt;/img&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;&lt;a class="more" title="The Risk board game dice roll probability calculator and battle simulation" target="_blank" href="http://diceroll.stritar.net/risk.html"&gt;Risk dice roll&lt;/a&gt; battle simulation.&lt;/p&gt;

&lt;p&gt;Besides, the simulator also knows how to calculate probabilities for specific single battle situations for different numbers of dice the attacker and defender throw, by going through all the possibilities of dice throw results (which means 7.776 (6&lt;sup&gt;5&lt;/sup&gt;) different dice throws in 3 vs. 2 battle).&lt;/p&gt;

&lt;p align="center"&gt;&lt;img alt="Risk Dice Roll Possibilities and Odds" src="http://stritar.net/Upload/Images/Risk-Dice-Roll/Risk-Dice-Roll-Possibilities-and-Odds.jpg"&gt;&lt;/img&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;&lt;a class="more" title="The Risk board game dice roll probability calculator and battle simulation" target="_blank" href="http://diceroll.stritar.net/risk.html"&gt;Risk dice roll&lt;/a&gt; possibilities and odds.&lt;/p&gt;

&lt;p&gt;I made this to help myself and others understand and appreciate the statistics behind the dice. So, the next time you play Risk, don't forget to bring your phone and use the simulator to your unfair advantage. And if you're a developer, feel free to upgrade the algorithm (&lt;a href="https://github.com/gstritar/DiceRoll" class="more" target="_blank" title="gstritar / DiceRoll on github"&gt;available on Github&lt;/a&gt;). Game on.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://diceroll.stritar.net/risk.html" class="more" target="_blank" title="The Risk board game dice roll probability calculator and battle simulation"&gt;http://diceroll.stritar.net/risk.html&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/gstritar/DiceRoll" class="more" target="_blank" title="gstritar / DiceRoll on github"&gt;https://github.com/gstritar/DiceRoll&lt;/a&gt;&lt;/p&gt;
</description><link>http://stritar.net/Post/The-Risk-board-game-dice-roll-probability-calculator-and-battle-simulator.aspx</link></item><item><title>I believe Firefox OS may be on to something</title><pubDate>Sat, 02 Mar 2013 22:27:50 GMT</pubDate><description>&lt;p&gt;A few days ago, during the &lt;a href="http://www.engadget.com/2013/02/28/mobile-world-congress-2013-best-of-show/" title="Mobile World Congress 2013: best of show" target="_blank" class="more"&gt;Mobile World Congress&lt;/a&gt;, &lt;a href="https://blog.mozilla.org/blog/2013/02/24/mozilla-unlocks-the-power-of-the-web-on-mobile-with-firefox-os/" class="more" target="_blank" title="Mozilla Unlocks the Power of the Web on Mobile with Firefox OS"&gt;Firefox announced its mobile OS&lt;/a&gt;, which will be available soon. Teaming up with &lt;b&gt;18 carriers and 4 announced manufacturers&lt;/b&gt; (&lt;a href="http://www.engadget.com/2013/02/27/sony-firefox-os-rom-xperia-e/" class="more" target="_blank" title="Sony begins exploring Firefox OS, dares Xperia E owners to experiment with new ROM"&gt;plus Sony&lt;/a&gt;), the release was probably bigger than expected. A few high-profile web services, including &lt;b&gt;AirBnb, Disney, Facebook, SoundCloud and Twitter&lt;/b&gt;, also joined the hype by including their apps to the new marketplace. Analysts quickly put down their bets, some &lt;a href="http://arstechnica.com/information-technology/2013/02/theres-a-web-for-thatwill-firefox-os-bring-about-the-end-of-the-app/" class="more" target="_blank" title="'There’s a Web for that'—will Firefox OS bring about the end of the app?"&gt;supporting the effort&lt;/a&gt;, while others &lt;a href="http://www.computerworld.com/s/article/9237135/Firefox_OS_too_late_to_shake_up_mobile" class="more" target="_blank" title="Firefox OS 'too late' to shake up mobile"&gt;denying the possibility of its success&lt;/a&gt;. One of the most fascinating things about the new OS is that it's going to be &lt;b&gt;entirely web based&lt;/b&gt;, the operating system itself, the apps, everything. Unlocking the power of the web, as they put it. And to be honest, I can buy that.&lt;/p&gt;

&lt;h2&gt;The situation&lt;/h2&gt;

&lt;p&gt;Currently, the &lt;a href="http://stritar.net/Post/Web-2-5-Looking-For-The-Missing-Link-Between-Web-2-0-And-Web-3-0.aspx" class="more" target="_blank" title="Web 2.5: Looking for the missing link between Web 2.0 and Web 3.0"&gt;mobile&lt;/a&gt; OS market is &lt;a href="http://bgr.com/2012/12/04/mobile-market-share-2012-android/" class="more" target="_blank" title="Mobile market share 2012: Android continues its success, iOS follows"&gt;dominated by two players&lt;/a&gt;, &lt;b&gt;Apple and Google&lt;/b&gt;. They both have their own strategies, Apple being the control-freak offering exclusivity, and Google being the easy-going dude appealing to the masses. &lt;b&gt;Windows&lt;/b&gt; is &lt;a href="http://stritar.net/Post/On-iPhone-toys-the-enterprise-and-of-course-Windows-8.aspx" class="more" target="_blank" title="On iPhone, toys, the enterprise and of course, Windows 8"&gt;trying to find its place&lt;/a&gt; somewhere in-between, but it's still struggling to gain its market share (currently at around few percent) - we will see how their &lt;a href="http://www.valuewalk.com/2013/01/nokia-corporation-adr-nysenok-soars-22-on-strong-pre-earnings/" class="more" target="_blank" title="Nokia Corporation (ADR) (NYSE:NOK) Soars 22% On Strong Pre-Earnings"&gt;partnership with Nokia&lt;/a&gt; turns out in the long run. We mustn't also forget about &lt;b&gt;Blackberry&lt;/b&gt; and their potential comeback with their new operating system and the newly introduced &lt;a href="http://allthingsd.com/20130301/blackberry-says-z10-appeals-to-platform-newbies/" class="more" target="_blank" title="BlackBerry Says Z10 Appeals to iPhone and Android Users - See more at: http://allthingsd.com/20130301/blackberry-says-z10-appeals-to-platform-newbies/"&gt;Z10 smartphone&lt;/a&gt;. But that's about it.&lt;/p&gt;

&lt;p&gt;Until Firefox OS was introduced. &lt;/p&gt;

&lt;h2&gt;The history&lt;/h2&gt;

&lt;p&gt;To begin with, we must take a look at the original Firefox browser, the first-choice &lt;b&gt;browser of the developer&lt;/b&gt; a few years ago. That is before &lt;a href="http://arstechnica.com/information-technology/2012/08/firefox-continues-to-gain-as-internet-explorer-chrome-slide/" class="more" target="_blank" title="Firefox continues to gain as Internet Explorer, Chrome slide"&gt;Chrome managed to offer&lt;/a&gt; a stabler and faster version of it. What made Firefox so useful, were the &lt;b&gt;Javascript console and Firebug&lt;/b&gt;, an add-on that all web developers need once they try out. But Firebug supposedly &lt;a href="http://mashable.com/2011/04/06/slow-firefox-add-ons/" class="more" target="_blank" title="Mozilla Hangs Slow Firefox Add-ons on a Wall of Shame"&gt;makes Firefox work much slower&lt;/a&gt;. Chrome built such a tool for client-side debugging inside its browsers and boom - millions of developers switched to Chrome. I don't know why Firefox hasn't offered a similar tool, they should, especially now, when they have a chance not only to gain mobile OS market share, but also to &lt;b&gt;regain their position in the browser wars&lt;/b&gt;. They should fully unlock the power of the web, with their potential mobile OS and browser marketing synergies. Firefox = the internet.&lt;/p&gt;

&lt;p&gt;The web is wonderful, and Firefox has always been one of its strongest advocates. And now they are doing it again, by offering an operating system that is fully &lt;b&gt;based on the web&lt;/b&gt;. Besides, for many reasons, they are probably in a much better position to do it then &lt;a href="http://news.cnet.com/8301-1035_3-57350971-94/ex-palm-employees-webos-destined-to-fail-report-says/" class="more" target="_blank" title="Ex-Palm employees: WebOS destined to fail, report says"&gt;WebOS was&lt;/a&gt;. Or as they put it:&lt;/p&gt;
&lt;p align="center"&gt;&lt;i&gt;
With Firefox OS, you can simply enter any search term and instantly create a one-time use or downloadable app.&lt;/i&gt;&lt;/p&gt;

&lt;h2&gt;The community&lt;/h2&gt;

&lt;p&gt;Developers are an &lt;a href="http://www.pcworld.com/article/2023783/google-apple-microsoft-app-number-wars-heat-up.html" class="more" target="_blank" title="Google, Apple, Microsoft app number wars heat up"&gt;important part of every mobile ecosystem&lt;/a&gt;, and developing for &lt;a href="http://stritar.net/Post/The-future-of-software-is-in-platforms.aspx" class="more" target="_blank" title="The future (of software) is in platforms"&gt;different platforms&lt;/a&gt; is a big pain in the ass. Of course, everybody has the possibility to decide for &lt;a href="http://www.html5rocks.com/en/mobile/nativedebate/" class="more" target="_blank" title="HTML5 vs Native: The Mobile App Debat"&gt;HTML app instead of a native app&lt;/a&gt;, but if the platform prefers native apps, it's a no brainer that those will have &lt;b&gt;more capabilities and better performance&lt;/b&gt;. But it's hard to make native apps. I am a web developer, been doing it for years,  tried to develop something for iOS one day. I lost interest in a few days, because you need to get used to a totally &lt;b&gt;new environment&lt;/b&gt;, and the thought of going through the same with Android and Windows just made me depressed. But here's what Firefox says:&lt;/p&gt;
&lt;p align="center"&gt;&lt;i&gt;Every Web developer can easily create and distribute HTML5 apps so you can find an app for whatever you want.&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;Holy crap, &lt;a href="https://blog.mozilla.org/webdev/2012/09/14/apps-the-web-is-the-platform/" class="more" target="_blank" title="Apps: The Web Is The Platform"&gt;the web as the platform&lt;/a&gt;! Which means I will be able to make Firefox OS apps already from the start. And when I have that HTML5 app, will I perhaps be willing to easily turn it into a &lt;a href="http://wiki.developerforce.com/page/Native,_HTML5,_or_Hybrid:_Understanding_Your_Mobile_Application_Development_Options" class="more" target="_Blank" title="Native, HTML5, or Hybrid: Understanding Your Mobile Application Development Options"&gt;hybrid native / HTML5 app&lt;/a&gt; for all other platforms? The thought is appealing. And since HTML5 is powerful enough to access the &lt;b&gt;phone's hardware&lt;/b&gt; (camera, GPS, etc.), this makes it much more interesting. Not to mention I would be improving my basic web developer skills if I would start developing for Firefox OS.&lt;/p&gt;

&lt;h2&gt;The recipe&lt;/h2&gt;

&lt;p&gt;Firefox OS has the &lt;a href="https://blog.mozilla.org/blog/2013/02/24/mozilla-unlocks-the-power-of-the-web-on-mobile-with-firefox-os/" class="more" target="_blank" title="Mozilla Unlocks the Power of the Web on Mobile with Firefox OS"&gt;carriers, manufacturers and supporters aboard&lt;/a&gt;, and if developing and deploying apps will be as easy peasy as they brag about it, it will all come down to a single thing: &lt;b&gt;the interface and user experience&lt;/b&gt; that the rendering engine will be able to provide. Firefox has its own &lt;a href="http://en.wikipedia.org/wiki/Gecko_(layout_engine)" class="more" target="_blank" title="Gecko (layout engine)"&gt;rendering engine Gecko&lt;/a&gt;, &lt;a href="http://arstechnica.com/information-technology/2008/09/mozilla-committed-to-gecko/" class="more" target="_blank" title="Why Mozilla is committed to Gecko as WebKit popularity grows"&gt;contrary to WebKit&lt;/a&gt;, which powers Chrome, Safari and &lt;a href="http://my.opera.com/haavard/blog/2013/02/13/webkit" class="more" target="_blank" title="300 million users strong, Opera moves to WebKit"&gt;Opera&lt;/a&gt;. Based on the first videos of the Firefox OS, it seems the &lt;a href="http://gizmodo.com/5986572/watch-firefox-os-in-action" class="more" target="_blank" title="This Is Firefox OS in Action"&gt;interface isn't as smooth&lt;/a&gt; as the one you &lt;a href="http://stritar.net/Post/How_Nokia_Lost_Its_Mobile_Interface_Domination_And_How_Apple_Took_It.aspx" class="more" target="_blank" title="How Nokia lost its mobile interface domination and how Apple took it"&gt;can get from the iPhone&lt;/a&gt;, Android or Windows Phone, and not as &lt;a href="http://reviews.cnet.com/8301-13970_7-57571755-78/ubuntu-touch-firefox-os-and-tizen-the-good-the-bad-and-the-ugly-new-oses/" class="more" target="_blank" title="Ubuntu Touch, Firefox OS, and Tizen: The good, the bad, and the ugly new OSes"&gt;innovative as Ubuntu Touch&lt;/a&gt;. Which can be a big, big problem. Manufacturers may need and support alternatives, but it's the &lt;b&gt;users who will decide&lt;/b&gt;, and their expectations are very high. &lt;/p&gt;

&lt;p&gt;If Firefox can take care of this, and (stronger) devices are fully adjusted to run it, while developers are able to upgrade the user experience, I don't see a reason why Firefox OS shouldn't gain traction. All the &lt;b&gt;components are there&lt;/b&gt;, the brand is strong and the race is long. Go Firefox!&lt;/p&gt;</description><link>http://stritar.net/Post/I-believe-Firefox-OS-may-be-on-to-something.aspx</link></item><item><title>5 reasons why I won't steal your idea</title><pubDate>Tue, 05 Feb 2013 09:22:39 GMT</pubDate><description>&lt;p&gt;Since I'm a &lt;a href="http://stritar.net/About/Skills.aspx" class="more" target="_blank" title="Grega Stritar Skills"&gt;software architect and a web developer&lt;/a&gt;, I get often approached by people with their new ideas. In most cases, for some &lt;b&gt;quality feedback&lt;/b&gt;, and on lucky days, for a &lt;b&gt;rough quote&lt;/b&gt; about the costs of such a project. These people are usually &lt;b&gt;very secretive&lt;/b&gt; about what they have, making me explain to them that it's far from my interest to steal that idea. One time, a guy even made me sign a &lt;a href="http://en.wikipedia.org/wiki/Non-disclosure_agreement" class="more" target="_blank" title="Non-disclosure agreement"&gt;Non-disclosure agreement&lt;/a&gt; before I could make him an offer for a service he was thinking about. After bargaining with me, he chose a different contractor, but ended up doing nothing, at least to my knowledge. He was obviously focused on the wrong things, instead of getting feedback from as many sources as possible, he was investing energy into bureaucracy and protection of his idea. Let me tell something to him and all others out there: &lt;b&gt;Focus on your product, and don't worry about me stealing your idea&lt;/b&gt;. I won't. I have at least five reasons not to.&lt;/p&gt;

&lt;h2&gt;1. Your idea probably isn't as great as you think&lt;/h2&gt;
&lt;p&gt;I've seen a lot of different people who &lt;b&gt;had "game-changing" ideas&lt;/b&gt;, at least so they though. A few of them actually managed to convince me and my partners that their idea is so amazing that it'll kick everyone's ass. Even though proper market research wasn't done, charisma is sometimes hard to resist, and if you are working with someone you've known for a long time, you are prepared to accept crazy terms, such as a delay of payment until this idea will start to generate revenue. After these specific ideas were put into the real world, it turned out there is a &lt;b&gt;huge discrepancy between ideals and reality&lt;/b&gt;, and we ended up with unpaid invoices and ignored phone calls.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://stritar.net/Post/The-Silicon-Valley-tour-part-8-Lessons-learned-time-to-reevaluate.aspx" class="more" target="_blank" title="The Silicon Valley tour, part 8: Lessons learned, time to reevaluate"&gt;Ideas are something, execution is everything else&lt;/a&gt;. There is a long way inbetween, a way paved with upgrades, downgrades, changes, &lt;a href="http://stritar.net/Post/A-case-study-in-agile-development-the-algorithm-for-Ljubljana-Realtime-s-event-discovery.aspx" class="more" target="_blank" title="A case study in agile development: the algorithm for Ljubljana Realtime's event discovery"&gt;pivots&lt;/a&gt;, time and hard work. Millions have ideas, only a few can make them work. I've seen &lt;a href="http://stritar.net/Post/The-Silicon-Valley-tour-part-1-Seedcamp-America-Trip-visiting-the-Googleplex.aspx" class="more" target="_blank" title="The Silicon Valley tour, part 1: Seedcamp America Trip visiting the Googleplex"&gt;Seedcamp companies&lt;/a&gt; &lt;b&gt;change their core concepts and business models&lt;/b&gt; completely, and these startups are already the best, selected from hundreds, if not thousands. When you start working on something and proceed ahead, the initial idea will &lt;b&gt;often evolve beyond recognition&lt;/b&gt;. Not to mention there is a very strong possibility that someone else was already &lt;a href="http://stritar.net/Post/Is-it-even-possible-to-create-original-content-in-this-age.aspx" class="more" target="_blank" title="Is it even possible to create original content in this age?"&gt;thinking about the same thing&lt;/a&gt;, except &lt;b&gt;better, years earlier&lt;/b&gt;. Your idea isn't amazing, but it may be &lt;b&gt;good enough to achieve something&lt;/b&gt; with &lt;a href="http://www.yalelawtech.org/control-privacy-technology/stealth-mode-is-stupid-why-your-ideas-don%E2%80%99t-matter/" class="more" target="_blank" title="Stealth Mode is Stupid: Why Your Ideas Don’t Matter"&gt;proper execution&lt;/a&gt;. That's why you need feedback and partners.&lt;/p&gt;

&lt;h2&gt;2. I have plenty of ideas of my own&lt;/h2&gt;
&lt;p&gt;You know what's better than your idea? My idea!&lt;/p&gt;
&lt;p&gt;Mostly because I kick ass, but also because &lt;b&gt;people get emotionally attached&lt;/b&gt; to the thoughts they generate by themselves. I have so many ideas I don't know what to do with them. They are probably not really great (see reason 1), but they are mine, and I try hard to make a few of them come alive every now and then, when I have the time. During the day, I work on &lt;a href="http://stritar.net/Projects/Neolab.aspx" class="more" target="_blank" title="Neolab, software development"&gt;real-life projects&lt;/a&gt;, during the night, &lt;a href="http://stritar.net/Post/Hey-developer-here-is-something-that-will-make-you-sound-smart.aspx" class="more" target="_blank" title="Hey developer, here's something that will make you sound smart"&gt;I play around&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When I decide on what to work on next, I usually look for the &lt;b&gt;best ratio between actuality, complexity, required energy and potential&lt;/b&gt;. This means I've already made my own &lt;b&gt;priority list&lt;/b&gt; of the services I will be rolling out in the future, and I must say, it would really be hard to put one of yours inside this packed list. I'm sure most developers think in a similar fashion, lacking resources to make everything they imagine a reality. Face it, there are hundred times as &lt;b&gt;many people who have unrealized ideas&lt;/b&gt;, than people who don't know what to work on. Do the math.&lt;/p&gt;

&lt;h2&gt;3. Your idea probably requires specific passion and know-how&lt;/h2&gt;
&lt;p&gt;The idea lives &lt;b&gt;strongest in the person who thought of it&lt;/b&gt;. It is a result of that person's experience from many fields, so it's hard to replicate in its full form without that experience. The ideas I've stumbled upon usually &lt;b&gt;solve very specific and niche problems&lt;/b&gt; you can't solve without digging yourself into that field. Which most of us don't have time or the resources to do. The core of the idea represents the person who thought of it, it may be taken to another level by a different person, but in most cases, it &lt;b&gt;requires the original author's knowledge, involvement and passion&lt;/b&gt; to work as it's supposed to.&lt;/p&gt;

&lt;p&gt;I can't execute an idea which will revolutionize kindergarten children education, I don't know shit about the problem, I don't have any connections in the industry, and I'm simply not that passionate about that field.&lt;/p&gt;

&lt;h2&gt;4. Your idea requires your involvement as a product manager&lt;/h2&gt;
&lt;p&gt;In the past few years, we've &lt;b&gt;implemented quite a few prototypes and services&lt;/b&gt; together with &lt;a href="http://neolab.si" target="_blank" title="Neolab" class="more"&gt;Neolab&lt;/a&gt;, and even though a few of them &lt;a href="http://stritar.net/Post/Twitfluence-Received-Some-Media-Attention-And-Almost-Went-To-Seedcamp.aspx" class="more" target="_blank" title="Twitfluence received some media attention. And almost went to Seedcamp."&gt;got some praise&lt;/a&gt;, they &lt;a href="http://stritar.net/Post/The-Silicon-Valley-tour-part-8-Lessons-learned-time-to-reevaluate.aspx" class="more" target="_blank" title="The Silicon Valley tour, part 8: Lessons learned, time to reevaluate"&gt;didn't make it to the mainstream&lt;/a&gt;. Take &lt;a href="http://stritar.net/Projects/Chronolog.aspx" class="more" target="_blank" title="Stritar's Chronolog"&gt;this blog for example&lt;/a&gt;, I developed it in &lt;a href="http://stritar.net/Post/Redesigning_The_Blog_-_Behold_The_Chronolog.aspx" class="more" target="_blank" title="Redesigning the blog - behold the Chronolog"&gt;early 2009&lt;/a&gt;, aggregating posts from different social services, presenting them (also) in a &lt;a href="http://stritar.net/Post/I-Have-Developed-A-Magazine-Based-On-My-Delicious-Bookmarks-And-A-Twitter-Bot.aspx" class="more" target="_blank" title="I've developed a magazine based on my Delicious bookmarks. And a Twitter bot."&gt;magazine form&lt;/a&gt;. What did I do with it? Nothing. Years later, a service called &lt;a href="https://www.rebelmouse.com/" class="more" target="_blank" title="RebelMouse"&gt;RebelMouse&lt;/a&gt; did something similar and &lt;a href="http://www.businessinsider.com/best-new-startups-2012-12#rebelmouse-aggregates-your-tweets-photos-and-facebook-status-messages-it-displays-them-on-a-single-page-in-a-beautiful-way-13" class="more" target="_blank" title="RebelMouse aggregates your tweets, photos and Facebook status messages; it displays them on a single page in a beautiful way."&gt;raised millions in funding&lt;/a&gt;. Same goes for &lt;a href="http://twenity.com" class="more" target="_blank" title="Twenity - discover your social capital while competing with your friends"&gt;Twenity&lt;/a&gt;, a spin-off from &lt;a href="http://stritar.net/Projects/Twitfluence.aspx" class="more" target="_blank" title="Twitfluence - measure your Twitter influence"&gt;Twitfluence&lt;/a&gt;, gamifying social authority measuring. Or &lt;a href="http://stritar.net/Projects/Ljubljana-Realtime.aspx" class="more" target="_blank" title="Ljubljana Realtime"&gt;Ljubljana Realtime&lt;/a&gt;, a social event discovery tool. All out there, but that's it.&lt;/p&gt;

&lt;p&gt;I simply don't have enough energy to &lt;b&gt;push a service beyond a point&lt;/b&gt;, or don't want to. Perhaps this fact will change someday, but at this point, you will need to be the &lt;b&gt;product manager of your idea&lt;/b&gt;, and I can be its architect. Since I have a &lt;a href="http://neolab.si" target="_blank" title="Neolab" class="more"&gt;real company to run&lt;/a&gt; besides all of this, I can't afford to be one.&lt;/p&gt;

&lt;p&gt;(Btw, if you think you could do anything with the above mentioned things, don't hesitate to &lt;a href="http://stritar.net/About/Contact.aspx" class="more" target="_blank" title="Grega Stritar contact"&gt;give me a shout&lt;/a&gt;).&lt;/p&gt;

&lt;h2&gt;5. Karma and stuff&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;I believe in karma&lt;/b&gt;. Don't do evil and all of that. I would really feel uncomfortable if I would take someone else's baby and make it my own. So I won't, because this simply wouldn't be a fair thing to do. I value proper sleep above success.&lt;/p&gt;

&lt;h2&gt;But what if&lt;/h2&gt;
&lt;p&gt;Of course, there are always exceptions, and I can imagine I could encounter something that would go beyond all of my points above. Perhaps there is one idea that I've heard about years ago that would suit this description. If I ever decide to proceed with this project, I will let that person know what I'm doing and invite him to join the project. Even if I'm thinking about a thing that only faintly resembles the original concept, I can't deny it's that person's idea. And since this guy was able to think of such a marvelous thing so much time ago, he would surely make a &lt;b&gt;great addition to the team&lt;/b&gt; (also see reason 3).&lt;/p&gt;

&lt;p&gt;That's it. &lt;b&gt;I won't steal your idea&lt;/b&gt;, so feel free to talk about your revolutionary innovation with me anytime. All I will do is to try to tear it apart and put it back together, and after we're done with that, if I get the chance, I will try to bring it to life.&lt;/p&gt;</description><link>http://stritar.net/Post/Five-reasons-why-I-will-not-steal-your-idea.aspx</link></item><item><title>Using JSON (with asp.net) is like wiping your ass with silk</title><pubDate>Sat, 05 Jan 2013 18:45:44 GMT</pubDate><description>&lt;p&gt;I love &lt;a href="http://stritar.net/Category/Mashups.aspx" class="more" target="_blank" title="Mashups on Stritar's chronolog"&gt;mashups&lt;/a&gt;. Actually, I love everything about them, I love using them, I &lt;a href="http://twenity.com/" class="more" target="_blank" title="Twenity - discover your social capital while competing with your friends"&gt;love making them&lt;/a&gt;, I love those who do everything &lt;a href="http://stritar.net/Post/The-future-of-software-is-in-platforms.aspx" class="more" target="_blank" title="The future (of software) is in platforms"&gt;they can to empower them&lt;/a&gt;. In my opinion, &lt;b&gt;mashups&lt;/b&gt; are one of the most significant concepts &lt;a href="http://stritar.net/Post/The-final-destination-part-1-technologies-and-concepts-enterprise-IT-will-have-to-adopt.aspx" class="more" target="_blank" title="The final destination, part 1: technologies and concepts enterprise IT will have to adopt"&gt; the Web has invented&lt;/a&gt;, since they represent unlimited possibilities of &lt;b&gt;integrating and reshaping&lt;/b&gt; things that are already done. &lt;a href="http://stritar.net/Post/The-future-of-software-is-in-platforms.aspx" class="more" target="_blank" title="The future (of software) is in platforms"&gt;The platforms&lt;/a&gt; out there are stable, so it's the creativity that sets the limits. These days, you can easily &lt;b&gt;take data from anyone and do something else with it&lt;/b&gt;. Just don't forget to use &lt;a href="http://www.json.org/" class="more" target="_blank" title="JSON"&gt;JSON&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I'm an old school guy who has been working mostly in &lt;a href="http://stritar.net/Projects/Neolab.aspx" class="more" target="_blank" title="Neolab on Stritar's chronolog"&gt;enterprise software environments&lt;/a&gt;, which means &lt;b&gt;using XML for data integrations&lt;/b&gt;, besides, &lt;a href="http://en.wikipedia.org/wiki/RSS" class="more" target="_blank" title="RSS"&gt;RSS&lt;/a&gt; used to be the man. The first generation of &lt;a href="http://twenity.com/" class="more" target="_blank" title="Twenity - discover your social capital while competing with your friends"&gt;Twenity&lt;/a&gt; (&lt;a href="http://stritar.net/Projects/Twitfluence.aspx" class="more" target="_blank" title="Twitfluence on Stritar's chronolog"&gt;Twitfluence&lt;/a&gt;) was using &lt;a href="http://stritar.net/Post/Twitfluence_Application_Basic_Technical_Specifications.aspx" class="more" target="_blank" title="Twitfluence application basic technical specifications"&gt;XML feeds&lt;/a&gt;, and &lt;a href="http://stritar.net/Projects/Chronolog.aspx" class="more" target="_blank" title="Stritar's chronolog"&gt;this blog&lt;/a&gt; is using mostly &lt;a href="http://stritar.net/Post/Redesigning_The_Blog_-_Behold_The_Chronolog.aspx" class="more" target="_blank" title="Redesigning the blog - behold the Chronolog"&gt;RSS for fetching entries&lt;/a&gt; from other sources. &lt;a href="http://en.wikipedia.org/wiki/XML" class="more" target="_blank" title="XML"&gt;XML&lt;/a&gt; was the standard we all spoke, &lt;b&gt;very cute and readable&lt;/b&gt;, but on the other hand, &lt;a href="http://stackoverflow.com/questions/9575180/asp-net-parsing-xml" class="more" target="_blank" title="ASP.Net - Parsing XML"&gt;not so easy to parse&lt;/a&gt;. At that time, this fact didn't represent such a major problem, since &lt;b&gt;a few more lines of code&lt;/b&gt; took care of everything. But today is a different situation.&lt;/p&gt;

&lt;p&gt;It was &lt;b&gt;Twitter&lt;/b&gt; who first started &lt;a href="https://dev.twitter.com/docs/api/1.1/overview#JSON_support_only" class="more" target="_blank" title="Overview: Version 1.1 of the Twitter API"&gt;dropping support for XML&lt;/a&gt;, which annoyed the hell out of me. I had to start &lt;b&gt;rewriting things for JSON&lt;/b&gt;. This turned out to be one of the best things that ever happened, since JSON seems to be loved by everyone. It's super &lt;a href="http://api.jquery.com/jQuery.getJSON/" class="more" target="_blank" title="jQuery.getJSON()"&gt;easy to use with jQuery&lt;/a&gt;, but since I'm a server-side type of a guy, it's even more important that it's &lt;b&gt;cleverly integrated into asp.net&lt;/b&gt;. Fetch the data, store it, do crazy shit with it.&lt;/p&gt;

&lt;p&gt;JSON is &lt;b&gt;serializable&lt;/b&gt; into a .net object with a &lt;b&gt;single line of code&lt;/b&gt;. Create the class with parameters compliant with the the specific JSON structure, serialize the response string into that class, and everything &lt;b&gt;automagically works&lt;/b&gt;. Piece of cake, unlimited opportunities. Take &lt;a href="https://twitter.com/gstritar" class="more" target="_blank" title="Grega Stritar (gstritar) on Twitter"&gt;Twitter&lt;/a&gt; for example:&lt;/p&gt;

&lt;p&gt;Make the basic Tweet class:&lt;/p&gt;
&lt;p style="font-family: Courier;"&gt;
 public class Tweet&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;public string &lt;b&gt;id_str&lt;/b&gt;;&lt;br&gt;
&amp;nbsp;public string &lt;b&gt;text&lt;/b&gt;;&lt;br&gt;
}
&lt;/p&gt;

&lt;p&gt;Create the request to access a tweet (funny, the hardest thing to do):&lt;/p&gt;
&lt;p style="font-family: Courier;"&gt;
string url = "http://api.twitter.com/1/statuses/show/274508827146215424.json";&lt;br&gt;
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);&lt;br&gt;
request.Method = "GET";&lt;br&gt;
WebResponse response = request.GetResponse();&lt;br&gt;
StreamReader reader = new StreamReader(response.GetResponseStream());&lt;br&gt;
string jsonResponse = reader.ReadToEnd();&lt;br&gt;
reader.Close();&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Which will return something like this (&lt;a href="https://dev.twitter.com/console" class="more" target="_blank" title="Exploring the Twitter API | Twitter Developers"&gt;play here&lt;/a&gt;):&lt;/p&gt;
&lt;p style="font-family: Courier;"&gt;
{&lt;br&gt;
&amp;nbsp;"created_at": "Fri Nov 30 13:42:59 +0000 2012",&lt;br&gt;
&amp;nbsp;"&lt;b&gt;id_str&lt;/b&gt;": "274508827146215424",&lt;br&gt;
&amp;nbsp;"&lt;b&gt;text&lt;/b&gt;": ""Facebook knows what we say, Google knows what we think",&lt;br&gt;
&amp;nbsp;"source": "web",&lt;br&gt;
&amp;nbsp;...
&lt;br&gt;
}
&lt;/p&gt;
&lt;p&gt;Serialize the response string into an object:&lt;/p&gt;
&lt;p style="font-family: Courier;"&gt;
JavaScriptSerializer js = new JavaScriptSerializer();&lt;br&gt;
Tweet tweet = new Tweet();&lt;br&gt;
tweet = js.Deserialize&amp;lt;Tweet&amp;gt;(jsonResponse);&lt;br&gt;
Response.Write(tweet.text);&lt;br&gt;
&lt;/p&gt;
&lt;p&gt;Pretty neat. Since I've started using JSON, &lt;b&gt;mashups have become easier than ever to make&lt;/b&gt;. With one of our &lt;a href="http://ljrt.neolab.si/" class="more" target="_blank" title="Ljubljana Realtime"&gt;latest projects&lt;/a&gt;, &lt;a href="http://neolab.si" target="_blank" title="Neolab, software development" class="more"&gt;we&lt;/a&gt;'ve integrated our application with &lt;a href="http://stritar.net/Post/Discover-what-is-happening-in-Ljubljana-in-real-time.aspx" class="more" target="_blank" title="Ljubljana Realtime - discover what's happening in Ljubljana in real-time"&gt;Twitter, Instagram, Foursquare and Flickr&lt;/a&gt;. For breakfast! XML may &lt;a href="http://blog.apigee.com/detail/why_xml_wont_die_xml_vs._json_for_your_api" class="more" target="_blank" title="Why XML won't die: XML vs. JSON for your API"&gt;have its advantages&lt;/a&gt;, but for such things, &lt;b&gt;JSON is simply the greatest&lt;/b&gt;. All hail the new lord!&lt;/p&gt;</description><link>http://stritar.net/Post/Using-JSON-with-asp-net-is-like-wiping-your-ass-with-silk.aspx</link></item><item><title>Hey developer, here's something that will make you sound smart</title><pubDate>Thu, 13 Dec 2012 08:21:02 GMT</pubDate><description>&lt;p&gt;I've met many developers in my life, and quite a few of them share a similar problem. Being mathematical geniuses and all, but not being able to &lt;b&gt;put into words what the hell they are doing&lt;/b&gt;. At least so it would sound &lt;b&gt;marketable and awesome&lt;/b&gt;. After all, it's not their job to sound smart, the developer's role in the &lt;a href="http://www.forbes.com/sites/andyellwood/2012/08/22/the-dream-team-hipster-hacker-and-hustler/" class="more" target="_blank" title="The Dream Team: Hipster, Hacker, and Hustler"&gt;Hipster - Hustler - Hacker&lt;/a&gt; dream team is a bit different. But talking like an &lt;b&gt;MBA&lt;/b&gt; can have it's advantages, specially when it comes to individuals &lt;b&gt;communicating with their clients&lt;/b&gt;.&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://mbadev.neolab.si/" class="button2" target="_blank" title="Launch #mbadev - MBA developer talk"&gt;Launch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Take my example, half of the time my customers don't fully understand what I'm saying even though I'm trying really hard. But I've noticed some phrases have a &lt;b&gt;better effect than others&lt;/b&gt;, some simply sound like &lt;b&gt;special awesome things&lt;/b&gt; are happening (which they are) and that &lt;b&gt;everything is under control&lt;/b&gt;. The funny thing is that the recipe to speak like that is very simple: say hi to the &lt;a href="http://mbadev.neolab.si/" class="more" target="_blank" title="#mbadev - MBA developer talk"&gt;MBA developer talk&lt;/a&gt;.&lt;/p&gt;

&lt;p align="center"&gt;&lt;i&gt;[MBA verb] + [technical noun] = [#mbadev]&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;The equation for the &lt;a href="http://mbadev.neolab.si/" class="more" target="_blank" title="#mbadev - MBA developer talk"&gt;#mbadev&lt;/a&gt; talk is elementary. Take a &lt;b&gt;power verb&lt;/b&gt; that has a really active meaning. Like "structuring", "evaluating" or "utilizing". These are often used to make an activity sound way cooler than it actually is. Then, take a &lt;b&gt;noun that is very hacker-specific&lt;/b&gt;, something that non-technical people don't fully understand. Like "metadata", "framework" or "encapsulation". Put them together, and you have a winner. Developers, face it, no one really understands what you're saying, so you might as well &lt;b&gt;make it sound cool&lt;/b&gt;.&lt;/p&gt;

&lt;p align="center"&gt;&lt;i&gt;"Dear client, I'm very busy &lt;b&gt;structuring metadata&lt;/b&gt;, thank you for your understanding".&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;The &lt;a href="http://mbadev.neolab.si/" class="more" target="_blank" title="#mbadev - MBA developer talk"&gt;MBA developer talk&lt;/a&gt; seems such a great concept that &lt;a href="http://neolab.si/" class="more" target="_blank" title="Neolab, software solutions"&gt;we&lt;/a&gt;'ve even made a &lt;b&gt;generator for it&lt;/b&gt;. Feel free to &lt;a href="http://mbadev.neolab.si/" class="more" target="_blank" title="#mbadev - MBA developer talk"&gt;take it for a spin&lt;/a&gt;, you'll be amazed by how such a basic combination can yield such &lt;b&gt;interesting results&lt;/b&gt;. Now all developers can sound really smart.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://mbadev.neolab.si/" class="more" target="_blank" title="#mbadev - MBA developer talk"&gt;http://mbadev.neolab.si&lt;/a&gt;&lt;/p&gt;</description><link>http://stritar.net/Post/Hey-developer-here-is-something-that-will-make-you-sound-smart.aspx</link></item><item><title>A case study in agile development: the algorithm for Ljubljana Realtime's event discovery</title><pubDate>Mon, 22 Oct 2012 20:01:16 GMT</pubDate><description>&lt;p&gt;When &lt;a href="http://neolab.si" target="_blank" title="Neolab, software development" class="more"&gt;we&lt;/a&gt; started working on &lt;a href="http://stritar.net/Post/Discover-what-is-happening-in-Ljubljana-in-real-time.aspx" class="more" target="_blank" title="Discover what's happening in Ljubljana in real-time"&gt;Ljubljana Realtime&lt;/a&gt;, we decided to approach it in an &lt;b&gt;agile way&lt;/b&gt;. Amongst others, we wanted to use a few interesting lean concepts such as &lt;a href="http://en.wikipedia.org/wiki/Rapid_application_development" class="more" target="_Blank" title="Rapid application development"&gt;rapid development&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Minimum_viable_product" class="more" target="_blank" title="Minimum viable product"&gt;Minimum Viable Product&lt;/a&gt; and the &lt;a href="http://lean.st/principles/build-measure-learn" class="more" target="_blank" title="The Lean Startup - Build Measure Learn"&gt;Build - Measure - Learn&lt;/a&gt; iterations. Less than two months later, the results are in, and they are very pleasing. The &lt;b&gt;MVP&lt;/b&gt; in the shape of an &lt;a href="http://ljrt.neolab.si/" class="more" target="_blank" title="Ljubljana Realtime"&gt;activity map&lt;/a&gt; was developed in a few weeks, only to show there is a lot of &lt;b&gt;social noise&lt;/b&gt; which will somehow need to be taken under control. But that's currently low priority, since the first &lt;a href="http://www.forbes.com/sites/martinzwilling/2011/09/16/top-10-ways-entrepreneurs-pivot-a-lean-startup/" class="more" target="_blank" title="Top 10 Ways Entrepreneurs Pivot a Lean Startup"&gt;pivot&lt;/a&gt; is already taking place, slowly shifting the focus from the &lt;a href="http://ljrt.neolab.si/" class="more" target="_blank" title="Ljubljana Realtime"&gt;rich map application&lt;/a&gt; towards an &lt;a href="https://twitter.com/LjubljanaRT" class="more" target="_blank" title="Ljubljana Realtime on Twitter"&gt;event discovery algorithm and stream&lt;/a&gt;. That's where I see the &lt;b&gt;most potential&lt;/b&gt; of &lt;a href="https://twitter.com/ljubljanaRT" class="more" target="_blank" title="Ljubljana Realtime on Twitter"&gt;Ljubljana Realtime&lt;/a&gt;, and in the last weeks, that's where the most work was done. &lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://ljrt.neolab.si/" class="button2" target="_blank" title="Launch Ljubljana Realtime"&gt;Launch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://stritar.net/Post/Discover-what-is-happening-in-Ljubljana-in-real-time.aspx" class="more" target="_blank" title="Discover what's happening in Ljubljana in real-time"&gt;Ljubljana Realtime&lt;/a&gt; event discovery engine uses &lt;b&gt;Foursquare&lt;/b&gt; trending venues and geo-tagged posts from &lt;b&gt;Twitter&lt;/b&gt;, &lt;b&gt;Instagram&lt;/b&gt; and &lt;b&gt;Flickr&lt;/b&gt; to discover what's happening in real life. At least &lt;b&gt;6 people checked-in&lt;/b&gt; on Foursquare or &lt;b&gt;two different people tweeting or posting photos&lt;/b&gt; in a single hour could mean something is going on. These events are posted to &lt;a href="https://twitter.com/LjubljanaRT" class="more" target="_blank" title="Ljubljana Realtime on Twitter"&gt;Twitter&lt;/a&gt; and &lt;a href="http://facebook.com/ljubljanaRT" class="more" target="_blank" title="Ljubljana Realtime on Facebook"&gt;Facebook&lt;/a&gt;, with links to the posts. A few versions of this algorithm were already deployed, each one solving new problems, resulting in a few micro &lt;b&gt;Build - Measure - Learn&lt;/b&gt; cycles in a single month.&lt;/p&gt;

&lt;h2&gt;Iteration 1: Foursquare, no duplicates&lt;/h2&gt;
&lt;p&gt;The first version of the &lt;a href="https://twitter.com/LjubljanaRT" class="more" target="_blank" title="Ljubljana Realtime on Twitter"&gt;stream (bot)&lt;/a&gt; was a simple one, at that point it was meant to work as &lt;b&gt;promotion for the map&lt;/b&gt;. The only thing it knew how to do was to wait a few hours until it posted the same thing again. I think Foursquare checkins are alive for &lt;b&gt;three hours&lt;/b&gt;, so if a trending venue was still trending after that time, new people had to checkin and the venue was still buzzing.&lt;/p&gt;
&lt;p&gt;Problem: Plain, &lt;b&gt;no real added value&lt;/b&gt;.&lt;/p&gt;

&lt;h2&gt;Iteration 2: Adding activity from other sources&lt;/h2&gt;
&lt;p&gt;When we were trying to make some space on the &lt;a href="http://ljrt.neolab.si/" class="more" target="_blank" title="Ljubljana Realtime"&gt;crowded map&lt;/a&gt;, we started &lt;b&gt;grouping posts&lt;/b&gt; from Twitter and Instagram by the nearest Foursquare venue, which meant having &lt;b&gt;less boxes on the screen&lt;/b&gt;. This turned out to be quite a complex thing to do properly, but it was worth the effort. On only a few occasions, one venue would have &lt;b&gt;multiple posts&lt;/b&gt; in a single hour, and in most cases, that meant something was happening there. This provided another very interesting potential for the activity stream. Actually, it made the stream bigger than the map could ever be.&lt;/p&gt;
&lt;p&gt;(I love it when such things happen, when you are trying to solve a problem, and it turns out there is much more hidden behind the resolution.)&lt;/p&gt;

&lt;p align="center"&gt;&lt;img src="http://stritar.net/Upload/Images/Ljubljana-Realtime/Ljrt-Event-Athletic-Meeting.gif" alt="Ljubljana Realtime event athletic meeting"&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;Groupping posts by a venue. Did &lt;a href="https://twitter.com/LjubljanaRT" class="more" target="_blank" title="Ljubljana Realtime on Twitter"&gt;Ljubljana Realtime&lt;/a&gt; just discover an athletic meeting taking place?&lt;/p&gt;


&lt;p&gt;The next problem: Activity in some venues, specially generic ones such as "Ljubljana" would &lt;b&gt;trigger the stream almost every day&lt;/b&gt;. Similarly, some large venues, such as supermarkets, would be &lt;b&gt;trending too many times on Foursquare&lt;/b&gt;.&lt;/p&gt;

&lt;h2&gt;Iteration 3: Balancing the posts&lt;/h2&gt;
&lt;p&gt;The algorithm needed an update, which would &lt;b&gt;lower the amount of times when a venue would be recognized as an event&lt;/b&gt;, either on Foursquare or on other channels. At first I though about an upgrade which would set the amount of people or tweets needed to trigger the "event discovered" action for a specific venue. This would enable us to &lt;b&gt;reduce the importance of some venues&lt;/b&gt;, but it would also require &lt;b&gt;manual work&lt;/b&gt;. Luckily, we came up with another brilliant idea: the more times a venue is trending, the harder it is for it to be trending again, at least for the next few days. &lt;b&gt;Automatic balancing&lt;/b&gt;.&lt;/p&gt;


&lt;p align="center"&gt;&lt;img src="http://stritar.net/Upload/Images/Ljubljana-Realtime/Ljrt-Generic-Venues.gif" alt="Ljubljana Realtime generic venues"&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;Venues with the most discovered events. Generic ones, besides massive places, such as train stations, cinemas, squares and shopping centers are too dominating.&lt;/p&gt;


&lt;p&gt;The next problem: At this point, we have launched other test instances of &lt;a href="https://twitter.com/ljubljanaRT" class="more" target="_blank" title="Ljubljana Realtime on Twitter"&gt;Ljubljana Realtime&lt;/a&gt; (&lt;a href="https://twitter.com/MariborRT" class="more" target="_blank" title="Maribor Realtime on Twitter"&gt;Maribor&lt;/a&gt;, &lt;a href="https://twitter.com/ZagrebRT" class="more" target="_blank" title="Zagreb Realtime on Twitter"&gt;Zagreb&lt;/a&gt; and &lt;a href="https://twitter.com/ZurichRT" class="more" target="_blank" title="Zurich Realtime on Twitter"&gt;Zurich&lt;/a&gt;), to see how the system behaves in other environments. Some cities are bigger, some are smaller, which means they produce &lt;b&gt;different amount of activity&lt;/b&gt;. Besides, &lt;b&gt;different services are used differently&lt;/b&gt; in different cultures.&lt;/p&gt;

&lt;h2&gt;Iteration 4: Supporting local instances&lt;/h2&gt;
&lt;p&gt;Foursquare is big in Croatia (&lt;a href="http://zgrt.neolab.si" class="more" target="_blank" title="Zagreb Realtime"&gt;Zagreb&lt;/a&gt;), but not so much in Switzerland (&lt;a href="http://zhrt.neolab.si" class="more" target="_blank" title="Zurich Realtime"&gt;Zurich&lt;/a&gt;), which means Zagreb Realtime's stream had a lot of Foursquare trending posts, while Zurich's had a lot of "Increased activity on Twitter and Instagram" posts. It was obvious that &lt;b&gt;local instances needed different algorithms&lt;/b&gt;. While having an option to set the &lt;b&gt;amounts which would trigger the post&lt;/b&gt; on a specific venue would be too much to moderate, having the same logic on a specific region could work. And it does. &lt;a href="https://twitter.com/ZagrebRT" class="more" target="_blank" title="Zagreb Realtime on Twitter"&gt;Zagreb&lt;/a&gt; now needs &lt;b&gt;more people checked-in on Foursquare&lt;/b&gt;, while &lt;a href="https://twitter.com/ZurichRT" class="more" target="_blank" title="Zurich Realtime on Twitter"&gt;Zurich&lt;/a&gt; needs &lt;b&gt;more unique people tweeting or sharing photos&lt;/b&gt;.&lt;/p&gt;

&lt;p align="center"&gt;&lt;img src="http://stritar.net/Upload/Images/Ljubljana-Realtime/Ljrt-Too-Many-Trending-Events.gif" alt="Ljubljana Realtime too many trending venues"&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;Number of discovered events by type (Foursquare vs. Twitter + Instagram) on each day. Foursquare trending venues are dominating Zagreb, while social streams are dominating Zurich Realtime.&lt;/p&gt;

&lt;p&gt;The next problem: The basic algorithm requires two different people to tweet/post from the same location in one hour. In case of &lt;a href="https://twitter.com/ZurichRT" class="more" target="_blank" title="Zurich Realtime on Twitter"&gt;Zurich&lt;/a&gt;, this amount was set to three, but it turns out this situation happens rarely, around &lt;b&gt;10 times fewer than with two people&lt;/b&gt;, or only two to three times a day. Obviously not enough.&lt;/p&gt;

&lt;h2&gt;Iteration 5: Improving the "increased activity" weight&lt;/h2&gt;
&lt;p&gt;You can only have a &lt;b&gt;whole amount of people tweeting&lt;/b&gt; in the past hour. Two or three. In our case, we needed something in the range of 2 1/2. The modified solution adds the number of posts divided by ten to the number of users, which means that currently, at &lt;b&gt;least two people making at least three posts&lt;/b&gt; in an hour will determine a trending event in Zurich. This is not a perfect solution from the event discovery view, but it does what urgently needed to be done: &lt;b&gt;prevent having too many tweets&lt;/b&gt; in the stream.&lt;/p&gt;
&lt;p&gt;The next problem: we currently have four Twitter accounts that &lt;a href="https://twitter.com/neolab_si/realtime" class="more" target="_blank" title="@neolab_si/Realtime on Twitter"&gt;tweet events for these four cities&lt;/a&gt;. Our target was for each of them to make around 10 - 15 tweets a day, which seems like a number that is not spam. But how can a person see which of these events is &lt;b&gt;THE event&lt;/b&gt;?&lt;/p&gt;

&lt;h2&gt;Iteration 6: Going super venue level 2&lt;/h2&gt;
&lt;p&gt;The latest version of the algorithm now recognizes &lt;b&gt;two levels of events&lt;/b&gt;. An event (mostly 6 people on Foursquare, mostly 2 different people tweeting), and an outstanding event (around 12 people on Foursquare, around 4 people tweeting). Our goal was to make this super event happen only &lt;b&gt;once a few days&lt;/b&gt;, on rare occasions two times per day, and it has already happened a few times. &lt;/p&gt;

&lt;p align="center"&gt;&lt;img src="http://stritar.net/Upload/Images/Ljubljana-Realtime/Ljrt-Super-Event-Philips-Fashion-Week-Kino-Siska.jpg" alt="Ljubljana Realtime super event for Philips Fashion Week in Kino Šiška"&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;Sometimes super events happen, with tens of posts in a single hour, such as the one for &lt;a href="http://www.elle.si/fashionweek/" class="more" target="_blank" title="Philips Fashion Week - Elle.si"&gt;Philips Fashion week&lt;/a&gt;. These events definitely require more exposure.&lt;/p&gt;

&lt;h2&gt;The next iterations&lt;/h2&gt;
&lt;p&gt;At this point, I'm very satisfied with how the algorithm works, even though a few other modifications need to be done (specially to support different days of week specifics and behavior). By &lt;b&gt;measuring&lt;/b&gt; what is happening, &lt;b&gt;learning&lt;/b&gt; from that information and &lt;b&gt;building&lt;/b&gt; the next releases based on that knowledge, the activity stream logic has come a long way from the initial version. Measuring is crucial, and rarely we have went to such extent to enable this in the widest way possible (e.g. the update to balancing the posts based on the previous events would be trivial by itself, but we wanted to log things that would happen but didn't happen, besides things that actually happened). &lt;/p&gt;

&lt;p&gt;These cycles of &lt;b&gt;Build - Measure - Learn&lt;/b&gt; can be a lot &lt;b&gt;hard work&lt;/b&gt;, but they provide &lt;b&gt;great results&lt;/b&gt;, which are also very fun and rewarding. Some people simply need to see how deep the rabbit hole is. Do you have any other interesting cases or experience with this approach?&lt;/p&gt;</description><link>http://stritar.net/Post/A-case-study-in-agile-development-the-algorithm-for-Ljubljana-Realtime-s-event-discovery.aspx</link></item><item><title>Discover what's happening in Ljubljana in real-time</title><pubDate>Fri, 28 Sep 2012 13:37:29 GMT</pubDate><description>&lt;p&gt;I've always been a big fan of the &lt;b&gt;power of the crowds&lt;/b&gt;. When a mass of people can &lt;a href="http://stritar.net/Post/Supporting-Events-On-Twitter-How-Pop-TV-And-Soocenje-Owned-The-Slovenian-Twitterverse.aspx" class="more" target="_blank" title="Supporting events on Twitter: how Pop TV and Soočenje owned the Slovenian Twitterverse"&gt;achieve much more&lt;/a&gt; than a few skilled individuals can. And ever since we've started &lt;a href="http://stritar.net/Projects/Twitfluence.aspx" class="more" target="_blank" title="Twitfluence"&gt;playing with Twitter's API&lt;/a&gt;, I've been think about the possibilities of this magnificent &lt;a href="http://www.mediabistro.com/alltwitter/twitter-400-million-tweets_b23744" class="more" target="_blank" title="Twitter Now Seeing 400 Million Tweets Per Day, Increased Mobile Ad Revenue, Says CEO"&gt;data source&lt;/a&gt;. Besides &lt;a href="http://twenity.com/" class="more" target="_blank" title="Twenity - discover your social capital while competing with your friends"&gt;Twenity&lt;/a&gt;, we've done a few other &lt;a href="http://twitter.com/gstritar" target="_blank" title="Grega Stritar on Twitter"&gt;Twitter&lt;/a&gt; mashups like &lt;a href="http://kcs.neolab.si/" class="more" target="_blank" title="#saveKCS on Twitter"&gt;Twitter walls&lt;/a&gt;, but this wasn't enough. We wanted something more - &lt;b&gt;geolocation&lt;/b&gt;. Displaying information on a map in &lt;b&gt;real-time&lt;/b&gt;. But since there aren't that many tweets equipped with GPS coordinates, we needed to include other services for more diversity as well. Which we did, and &lt;a href="http://ljrt.neolab.si/" class="more" target="_blank" title="Ljubljana Realtime"&gt;Ljubljana Realtime&lt;/a&gt;, a &lt;b&gt;social event discovery application&lt;/b&gt;, was born.&lt;/p&gt;

&lt;p align="center"&gt;&lt;a href="http://ljrt.neolab.si/" class="button2" target="_blank" title="Launch Ljubljana Realtime"&gt;Launch&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;Data and services&lt;/h2&gt;
&lt;p&gt;&lt;a href="http://ljrt.neolab.si/" class="more" target="_blank" title="Ljubljana Realtime"&gt;Ljubljana Realtime&lt;/a&gt; currently feeds on four different services: &lt;b&gt;Twitter&lt;/b&gt;, &lt;b&gt;Foursquare&lt;/b&gt;, &lt;b&gt;Instagram&lt;/b&gt; and &lt;b&gt;Flickr&lt;/b&gt;. It would be great if we could add other services as well, but Facebook doesn't allow public geo search, Google+ doesn't support geo search at all, and other services either aren't appropriate or don't offer an API which would allow us to get their data.&lt;/p&gt;





&lt;p&gt;These four services are visited &lt;b&gt;once a minute&lt;/b&gt;, and all posts in a radius of around 5km from &lt;a href="http://www.ljubljana.si/" class="more" target="_blank" title="Ljubljana"&gt;Ljubljana&lt;/a&gt; city center are found: tweets, Foursquare trending venues, pictures from Instagram and Flickr. A &lt;b&gt;variety of information created&lt;/b&gt; with different purposes on different occasions. &lt;/p&gt;

&lt;br&gt;
&lt;img src="http://stritar.net/Upload/Images/Ljubljana-Realtime/Ljubljana-Realtime-Radar.jpg" alt="Ljubljana Realtime radar"&gt;
&lt;p class="underpicture"&gt;The area covered by Ljubljana Realtime. Different services require different searches, based on maximum allowed radius.&lt;/p&gt;

&lt;h2&gt;The application&lt;/h2&gt;
&lt;p&gt;These posts are &lt;a href="http://ljrt.neolab.si/" class="more" target="_blank" title="Ljubljana Realtime"&gt;displayed on a map&lt;/a&gt;, which was the original idea for the prototype. The &lt;b&gt;last hours of posts&lt;/b&gt; on Google Maps, which can be zoomed and filtered at will. But the whole display felt a bit chaotic (still does), since there are &lt;b&gt;many posts in vicinity of one another&lt;/b&gt;. That's why we knew we need to group similar posts, and we did this by the post's nearest Foursquare venue. Then a funny thing happened: this simple solution enabled something magnificent, something that could be &lt;b&gt;much bigger&lt;/b&gt; than the whole posts-on-a-map application.&lt;/p&gt;

&lt;p&gt;Anyways, since geo location is heavily connected with &lt;b&gt;mobile devices&lt;/b&gt;, the application is &lt;a href="http://en.wikipedia.org/wiki/Responsive_Web_Design" class="more" target="_blank" title="Responsive web design"&gt;responsive&lt;/a&gt; and fully compatible with most smartphones. Perhaps there will be native apps as well at one point.&lt;/p&gt;

&lt;h2&gt;The stream&lt;/h2&gt;
&lt;p&gt;Back to the magnificent. Originally, a &lt;b&gt;Twitter bot&lt;/b&gt; was intended to come with the application (&lt;a href="http://stritar.net/Post/I-Have-Developed-A-Magazine-Based-On-My-Delicious-Bookmarks-And-A-Twitter-Bot.aspx" class="more" target="_blank" title="I've developed a magazine based on my Delicious bookmarks. And a Twitter bot."&gt;I love making those&lt;/a&gt;), which would tweet all trending foursquare venues to promote the application. But this seemed a bit lame, we needed to add &lt;b&gt;something cooler&lt;/b&gt;. Something that would add more value and detect an event &lt;b&gt;before a 4sq trending venue would happen&lt;/b&gt;. This is where the mentioned grouping of posts by venue came in handy, and the logic is as follows: if &lt;b&gt;two or more people publish form the same venue in a single hour&lt;/b&gt;, this could very well mean something's happening there. And in most occasions, this turned out to be true. Read further for more details.&lt;/p&gt;


&lt;p align="center"&gt;&lt;img src="http://stritar.net/Upload/Images/Ljubljana-Realtime/Ljubljana-Realtime-Tweets.gif" alt="Ljubljana Realtime tweets"&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;Discovering an event before a trending venue on Foursquare.&lt;/p&gt;

&lt;p&gt;The event discovery stream is available on &lt;a href="http://twitter.com/LjubljanaRT" title="Ljubljana Realtime on Twitter" target="_blank" class="more"&gt;Twitter&lt;/a&gt; and &lt;a href="http://facebook.com/LjubljanaRT" title="Ljubljana Realtime on Facebook" target="_blank" class="more"&gt;Facebook&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;The problems&lt;/h2&gt;
&lt;p&gt;&lt;b&gt;Besides unstable APIs&lt;/b&gt;, the biggest problem we are currently facing is the geolocation itself. GPS chips in mobile phones are often &lt;b&gt;not accurate enough&lt;/b&gt;, so people are located tens or hundreds of meters from their actual location. Combine that with the &lt;b&gt;amount of Foursquare venues&lt;/b&gt; out there (imagine tall buildings), and you can understand Ljubljana Realtime sometimes has problems with connecting a post to a venue. Not to mention duplicated venues. We've eliminated some of this effect by only using venues with a certain amount of checkins and different users, but this will surely be the greatest challenge the project is facing in the future.&lt;/p&gt;

&lt;p align="center"&gt;&lt;img src="http://stritar.net/Upload/Images/Ljubljana-Realtime/Ljubljana-Realtime-Fail.jpg" alt="Ljubljana Realtime failed discoveries"&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;An event which is not.&lt;/p&gt;


&lt;h2&gt;The results&lt;/h2&gt;
&lt;p&gt;Problems aside, in most cases, &lt;a href="http://twitter.com/LjubljanaRT" title="Ljubljana Realtime on Twitter" target="_blank" class="more"&gt;Ljubljana Realtime event discovery&lt;/a&gt; works great. In a week or so since it's online, it discovered many events that were happening in Ljubljana (night run to the Castle, an athletic meeting, one of the first iPhones 5 in Slovenia, a public garage sale in park Tabor, etc.), and on many occasions, it discovered these events before a trending venue happened on Foursquare. Which is great. The &lt;b&gt;potential is obviously there&lt;/b&gt;, and newer, improved versions and algorithms will surely behave even better.&lt;/p&gt;

&lt;p align="center"&gt;&lt;img src="http://stritar.net/Upload/Images/Ljubljana-Realtime/Ljubljana-Realtime-Discoveries.jpg" alt="Ljubljana Realtime discoveries"&gt;&lt;/p&gt;
&lt;p class="underpicture"&gt;A few of the great discoveries Ljubljana Realtime made.&lt;/p&gt;

&lt;h2&gt;The plans&lt;/h2&gt;
&lt;p&gt;This project is being developed in an &lt;a href="http://en.wikipedia.org/wiki/Agile_software_development" class="more" target="_blank" title="Agile software development"&gt;agile way&lt;/a&gt;, where the application's behavior is constantly being monitored and changes deployed rapidly according to discovered strengths and weaknesses. The MVP (&lt;a href="http://en.wikipedia.org/wiki/Minimum_viable_product" class="more" target="_blank" title="Minimum viable product"&gt;minimum viable product&lt;/a&gt;) is there, and with a few minor modifications, Ljubljana Realtime will soon be ready to expand to other cities and regions. Now it's up to you to &lt;b&gt;help us&lt;/b&gt;, and it's pretty simple. When something magical is happening on and you are &lt;b&gt;tweeting about it anyways&lt;/b&gt;, be a sport and click the arrow to &lt;a href="https://support.twitter.com/articles/118492" class="more" target="_blank" title="How to Use the Location Feature on Mobile Devices"&gt;include your geolocation&lt;/a&gt; in the tweet. By doing this, you will help others to discover what's going on in our beautiful city.&lt;/p&gt;

&lt;p&gt;That's it for now, party on.&lt;/p&gt;

&lt;p&gt;p.s. for all the Slovenians out there: the coordinates embedded in a tweet are pretty accurate even though Twitter will say &lt;b&gt;you are in Italy&lt;/b&gt;. If you look at the picture of the map below the tweet, there's a polygon around Italy which sadly contains Slovenia as well. Hopefully, Twitter will remove bug someday.&lt;/p&gt;</description><link>http://stritar.net/Post/Discover-what-is-happening-in-Ljubljana-in-real-time.aspx</link></item><item><title>Finally, a reason for bloggers to use Google+</title><pubDate>Sat, 22 Sep 2012 13:20:55 GMT</pubDate><description>&lt;p&gt;Despite &lt;a href="http://www.theverge.com/2012/7/27/3192928/google-plus-traffic-stats-june-2012" class="more" target="_blank" title="Google+ traffic soars: 66 percent increase in nine months"&gt;the traffic&lt;/a&gt;, there isn't that much going on on &lt;a href="http://gplus.to/stritar" class="more" target="_blank" title="Grega Stritar on Google+"&gt;Google+&lt;/a&gt;, and the referrals from this social network are still not that numerous. Most of mine &lt;a href="http://stritar.net/Post/I-Got-Another-Scent-Of-Going-Viral-On-Social-Media-And-I-Am-Loving-Every-Bit-Of-It.aspx" class="more" target="_blank" title="I got another scent of going viral on social media. And I'm loving every bit of it."&gt;come from other sources&lt;/a&gt;, but Google has a plan, and this plan is a smart one - using their services to push forward other services. You've probably noticed more and more results in Google search &lt;a href="http://support.google.com/webmasters/bin/answer.py?hl=en&amp;answer=1408986" class="more" target=_"blank" title="Author information in search results"&gt;contain the author's picture&lt;/a&gt;. They stand out from the rest, and since most bloggers want to get as much traffic to their site as possible, this fact can make a difference between which link is clicked or not. If you ask me, setting this up is a must, and it's really easy to do. But you need to have and pimp your Google+ profile.&lt;/p&gt;

&lt;p&gt;There are three steps you need to follow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;have an "Author" page, which links to your &lt;a href="http://gplus.to/stritar" class="more" target="_blank" title="Grega Stritar on Google+"&gt;Google+ profile&lt;/a&gt; with rel="me"&lt;/li&gt;
&lt;li&gt;have a link to your "Author" page on your post, which contains rel="author"&lt;/li&gt;
&lt;li&gt;have a link from your Google+ profile to your "Author" page (in "Contributor to" section)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here are the &lt;a href="http://www.labnol.org/internet/author-profile-in-google/19775/" class="more" target="_blank" title="Display your Profile Picture in Google Search Results"&gt;full instructions on how to technically implement this&lt;/a&gt;. It should take you about 10 minutes, and I've waited for about a week for Google's search results to actually start displaying my profile picture.&lt;/p&gt;
&lt;p align="center"&gt;
&lt;a href="http://stritar.net/Post/Did-Apple-and-Samsung-just-pull-the-greatest-trick-in-the-mobile-universe.aspx" class="more" target="_blank" title="Did Apple and Samsung just pull the greatest trick in the mobile universe?"&gt;
&lt;img src="http://stritar.net/Upload/Images/Google-Search-Profile-Picture-Results.jpg" alt="Google Search Profile Picture Results" border="0" &gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This feature has been available for quite some time, but I still see many bloggers that haven't implemented it yet, also because its availability was mostly unnoticed. Combining search and social is definitely an &lt;a href="http://techcrunch.com/2012/09/16/faceboogle/" class="more" target="_blank" title="Investors Are Salivating Over Zuckerberg’s Plans For Search. Here’s Why"&gt;advantage Google (still) has over Facebook&lt;/a&gt;, and they should've made more promotion about this interesting upgrade. Bloggers are &lt;a href="http://stritar.net/Post/Is-it-even-possible-to-create-original-content-in-this-age.aspx" class="more" target="_blank" title="Is it even possible to create original content in this age?"&gt;content creators&lt;/a&gt;, and you want as many content creators inside your social network as possible. They are the ones who provide original thoughts that others are looking for and will eventually follow.&lt;p&gt;

&lt;p&gt;It's hard to estimate if this fact (and different pictures) will have any significant &lt;a href="http://www.seomoz.org/blog/google-author-photos" class="more" target="_blank" title="How Optimizing My Ugly Google+ Pic Increased Free Traffic 35%"&gt;impact on search traffic&lt;/a&gt;, I'll keep you posted. But before everyone has it, it's a nice little feature that makes your results look different and much more appealing. Good job, Google, content is king, and you should stay its steward.&lt;/p&gt;</description><link>http://stritar.net/Post/Finally-a-reason-for-bloggers-to-use-Google-Plus.aspx</link></item><item><title>The art of internal hyperlinking</title><pubDate>Sun, 04 Sep 2011 21:00:02 GMT</pubDate><description>&lt;p&gt;
Everybody wants traffic on their blog or website. Direct traffic. Referring traffic. Search traffic. All good in their own way. Direct traffic means having a strong brand. Referring traffic means having a strong network. Search traffic means having a strong team. The first two are hard to influence, but search - that's the one you can influence the most. And even if search technology has changed a lot in the past few years, with &lt;a href="http://stritar.net/Post/Google_2-0_-_Take_Infinity_-_Google_Me.aspx" class="more" target="_blank" title="Google 2.0, take infinity: Google Me"&gt;mathematical algorithms slowly getting replaced by social ones&lt;/a&gt;, old school search engine optimization can still make a difference.&lt;/p&gt;

&lt;p&gt;Let's say you already have good content. And you have it technically optimized and search engine friendly. &lt;a href="http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx" class="more" target="_blank" title="Adding share buttons to your blog or website - a comprehensive guide"&gt;Like, Tweet and +1 buttons&lt;/a&gt; implemented where applicable, since they are more and more &lt;a href="http://stritar.net/Post/Reinventing-SEO-Search-Engine-Optimization-The-Social-Media-Effect.aspx" class="more" target="_blank" title="Reinventing SEO: The social media effect"&gt;important for search result rankings&lt;/a&gt;. All good, but you might have missed something. Since it's very hard to persuade other people to link to your site giving you a higher &lt;a href="http://en.wikipedia.org/wiki/Page_rank" class="more" target="_blank" title="Page Rank"&gt;PageRank&lt;/a&gt;, you just have to do it yourself. I'm talking about &lt;a href="http://www.searchengineguide.com/scott-allen/the-importance-of-internal-linking.php" class="more" target="_blank" title="The Importance of Internal Linking, and How to Do it Right"&gt;internal hyperlinking&lt;/a&gt;, where you cross-reference the content you already have.  &lt;a href="http://googlewebmastercentral.blogspot.com/2008/10/importance-of-link-architecture.html" class="more" target="_blank" title="Importance of link architecture"&gt;Google loves it so much&lt;/a&gt; that &lt;a href="http://googleblog.blogspot.com/" class="more" target="_blank" title="Official Google Blog"&gt;their official blog&lt;/a&gt;, besides influential blogs such as &lt;a href="http://mashable.com" class="more" target="_blank" title="Social Media News and Web Tips – Mashable – The Social Media Guide"&gt;Mashable&lt;/a&gt; and &lt;a href="http://readwriteweb.com" class="more" target="_blank" title="ReadWriteWeb - Web Apps, Web Technology Trends, Social Networking and Social Media"&gt;ReadWriteWeb&lt;/a&gt;, have main headings referencing itself.&lt;/p&gt;

&lt;p&gt;I approached this issue from two different angles. Sometime in October 2010 I took the time to systematically cross reference all my blog posts. It took me a lot of time, but I think it was worth it. Besides, I developed a &lt;a href="http://stritar.net/Post/The-Chronolog-Now-Understands-Connections-Between-Content.aspx" class="more" target="_blank" title="The chronolog now understands connections between content"&gt;"similar content" module&lt;/a&gt;, which additionally does it for me. The results on the diagram below, which display search-based traffic on my blog, are not real proof of that fact, since the experiment was not fully scientific;  there are many other SEO factors, additional content and optimizations that were put into the equation. But still, most energy was put into content cross referencing and the trend looks pretty good.&lt;/p&gt;
&lt;br&gt;
&lt;img src="http://stritar.net/Upload/Images/Hyperlinks/Search-Referrer-Trend.gif" alt="Search referrer trend"&gt;
&lt;p class="underpicture"&gt;Traffic to &lt;a href="http://stritar.net" class="more" target="_blank" title="Stritar's chronolog"&gt;http://stritar.net&lt;/a&gt; via search engines&lt;/p&gt;

&lt;p&gt;Since internal hyperlinking is an ongoing process, you have to have a good overview about the content you own, something that provides you with the complete picture. I used a plain Excel file, grouping my posts into general categories and started drawing arrows representing hyperlinks. At this point, it's already become a bit of a mess, so I'm thinking about moving to a stronger diagram-oriented software, but I think you get the picture. &lt;/p&gt;&lt;br&gt;
&lt;img src="http://stritar.net/Upload/Images/Hyperlinks/Internal-Hyperlinks-Cross-Reference.gif" alt="Internal hyperlinks cross reference"&gt;
&lt;p class="underpicture"&gt;&lt;a href="http://stritar.net" class="more" target="_blank" title="Stritar's chronolog"&gt;http://stritar.net&lt;/a&gt; internal hyperlink structure&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.mediavisioninteractive.com/blog/index.php/link-development/seo-tips-internal-linking-101" class="more" target="_blank" title="SEO Tips: Internal Linking 101!"&gt;Internal hyperlinking can help&lt;/a&gt;, and it's something you can do even if you don't have a lot of technical skills. Just a lot of time, but we're in a recession anyways. Now go for it and let me know about the results.&lt;/p&gt;</description><link>http://stritar.net/Post/The-Art-Of-Internal-Hyperlinking.aspx</link></item><item><title>Please help me upgrade my Twitter bot</title><pubDate>Tue, 30 Aug 2011 20:33:12 GMT</pubDate><description>&lt;p&gt;Half a year ago I decided to make something &lt;a href="http://stritar.net/Post/I-Have-Developed-A-Magazine-Based-On-My-Delicious-Bookmarks-And-A-Twitter-Bot.aspx" class="more" target="_blank" title="I've developed a magazine based on my Delicious bookmarks. And a Twitter bot."&gt;out of my Delicious bookmarks&lt;/a&gt;. The &lt;a href="http://stritar.net/Magazine.aspx" class="more" target="_blank" title="Magazine - Stritar's chronolog"&gt;magazine-style display&lt;/a&gt; inspired by Flipboard wasn't enough, I wanted to publish these links somewhere outside my &lt;a href="http://stritar.net/Projects/Chronolog.aspx" class="more" target="_blank" title="Stritar's chornolog"&gt;chronolog&lt;/a&gt;, somewhere on Twitter. So I made a &lt;a href="http://twitter.com/stritar_net" class="more" target="_blank" title="Stritar's chronolog on Twitter"&gt;bot&lt;/a&gt;. It's doing quite well, posting like mad, but it's really not where I want it to be. Until now, it made about 3.000 tweets (around 500 per month), but has only 67 followers. I know &lt;a href="http://delicious.com/user/stritar" class="more" target="_blank" title="Stritar on Delicious"&gt;my taste in content&lt;/a&gt; is a bit obscure, but still, only 67 followers?&lt;/p&gt;

&lt;p&gt;This calls for an upgrade. And since I won't change my interests and bookmarking habits, something else needs to be done. That's where I need your advice. Crowdsourcing the concept and stuff.&lt;/p&gt;

&lt;h2&gt;The brand&lt;/h2&gt;
&lt;p&gt;This is probably one of the greatest fails of the project. At first, I thought of it as an extension of my blog. Hence the account &lt;a href="http://twitter.com/stritar_net" class="more" target="_blank" title="Stritar's chronolog on Twitter"&gt;@stritar_net&lt;/a&gt;, the name Stritar's chronolog, together with the description it has. Should I rename it and try to make it a standalone "brand"? Should I openly say it's a bot (Stritar's bot or something)?&lt;/p&gt;

&lt;h2&gt;The selection&lt;/h2&gt;
&lt;p&gt;The bot currently posts &lt;a href="http://delicious.com/user/stritar" class="more" target="_blank" title="Stritar on Delicious"&gt;ALL my bookmarks&lt;/a&gt; to Twitter (as mentioned, around 15 per day or 500 per month) without any selection. But it could be done. Since my bookmarks are originally &lt;a href="http://stritar.net/Post/A-Few-Thoughts-On-Content-Categorization-No-Surprises-There-Less-Is-More.aspx" class="more" target="_blank" title="A few thoughts on content categorization. No surprises there, less is more."&gt;tagged&lt;/a&gt;, it could leave out those with too few tags (since I use the same method of counting tags to determine the &lt;a href="http://stritar.net/Post/I-Have-Developed-A-Magazine-Based-On-My-Delicious-Bookmarks-And-A-Twitter-Bot.aspx" class="more" target="_blank" title="I've developed a magazine based on my Delicious bookmarks. And a Twitter bot."&gt;initial weight of content&lt;/a&gt; for the magazine). Or specialize in specific segments according to tags. There could even be more of them bots. What do you think?&lt;/p&gt;

&lt;h2&gt;The frequency&lt;/h2&gt;
&lt;p&gt;Currently, the bookmarks I make go into a queue. I hate those Twitter accounts that post 10 tweets in 5 minutes and go silent for a day. I wanted to make it more smooth. So the queue always knows how many items it holds and adapts the frequency of posting according to it (less bookmarks in queue mean less frequent tweets). But that produces the situation where most of them are already a few hours or days out of date when they are published. A higher publishing frequency would solve some of it, but it opens a great dilemma: what's the lesser evil, over-spamming or being out of date?&lt;/p&gt;

&lt;h2&gt;The order&lt;/h2&gt;
&lt;p&gt;The order of bookmarks posted on Twitter is determined by two factors. The number of tags and the date they were published. More tags equals more importance. Older bookmarks get published sooner, otherwise they would get even more out of date. Should I do it the other way around and post more recent links sooner? This would make some of them more interesting and up-to-date, but other worse. &lt;a href="http://stritar.net/Post/Facebook_Vs_Twitter_-_Part_2_-_Privacy_And_Real-Time_Web.aspx" class="more" target="_blank" title="Facebook vs. Twitter - Part 2: Privacy and real-time web"&gt;Breaking content&lt;/a&gt; or consolidated content?&lt;/p&gt;

&lt;p&gt;So many decisions… In this case, the best way probably doesn't exists, but trade-offs can always be decided for the better. Please let me know what you think, your help would be more than appreciated. I could help back if I can.&lt;/p&gt;</description><link>http://stritar.net/Post/Please-Help-Me-Upgrade-My-Twitter-Bot.aspx</link></item><item><title>Determining if an element is in the last row of a table</title><pubDate>Mon, 25 Jul 2011 11:57:52 GMT</pubDate><description>&lt;p&gt;Once upon a time I stumbled upon a problem, where I needed to calculate if an element is in the last row of a table. Here's the scenario: you have a number of items, which are put in a table from left to right. When the row is full, the items continue in the next row. Imagine an airplane or a theater where people start sitting front-left and continue to the right until they run out of space, then going to the next row and so on. Now we want to know which people are sitting in the last of the populated rows.&lt;/p&gt;

&lt;p&gt;A weird problem, but hopefully I will be able to show you some cool results produced by this algorithm someday (yes, it's usable).&lt;/p&gt;

&lt;p&gt;The equation has 2 parameters: the total number of elements and the number of columns in a single row. There are a few ways to do it, using division with remainders (the &lt;a href="http://en.wikipedia.org/wiki/Modulo_operation" class="more" target="_blank" title="Modulo operation"&gt;modulo operation&lt;/a&gt;). The simple way would be comparing the total number of rows with the element's current row. Another one would be to calculate the number of elements in the last row and see if our element is in those last few. While both seem logically easy, they actually suck, because they contain exceptions (some states need to be handled specifically - if the last row is full or not).&lt;/p&gt;

&lt;p&gt;That's why I went for the ultimate way, using abstract mathematics which requires real magic, and since it would be too boring to explain it, just take it if you need it and don't try to understand - to be honest, even I'm not perfectly sure how I did it.&lt;/p&gt;

&lt;h2&gt;The number of rows way:&lt;/h2&gt;
&lt;p&gt;&lt;i&gt;lastRow = ((Math.DivRem(currentElementIndex + 1, numberOfColumns, out remainder1) + Convert.ToInt16(remainder1 &gt; 0)) &gt;= Math.DivRem(totalElements, numberOfColumns, out remainder2) + Convert.ToInt16(remainder2 &gt; 0))&lt;/i&gt;&lt;br&gt;
&lt;span style="color: rgb(190, 190, 190);"&gt;* Math.DivRem returns the division result and the remainder, since both are required for the calculation&lt;/span&gt;

&lt;h2&gt;The number of items in the last row way:&lt;/h2&gt;
&lt;p&gt;&lt;i&gt;lastRow =  (totalElements - (totalElements % numberOfColumns) - (numberOfColumns * Convert.ToInt16((totalElements % numberOfColumns) == 0)) &lt; currentElementIndex + 1)&lt;/i&gt;&lt;br&gt;
&lt;span style="color: rgb(190, 190, 190);"&gt;* % is the modulo - remainder from dividing&lt;/span&gt;


&lt;h2&gt;The ultimate way:&lt;/h2&gt;
&lt;p&gt;&lt;i&gt;lastRow = totalElements &lt; ((numberOfColumns + currentElementIndex) - (currentElementIndex % numberOfColumns) + 1)&lt;/i&gt;&lt;br&gt;
&lt;span style="color: rgb(190, 190, 190);"&gt;* % is the modulo - remainder from dividing&lt;/span&gt;&lt;/p&gt;



&lt;p&gt;&lt;a href="http://stritar.net/Category/Mathematics.aspx" class="more" target="_blank" title="Mathematics"&gt;Mathematics&lt;/a&gt; is awesome.&lt;/p&gt;
&lt;p&gt;UPDATE (27.7.2011): Silly me. Overwhelmed by "The ultimate way", I missed the opportunity to simplify "The number of rows way". I guess this is one of the cases which explain why counting starts with 0 instead of 1 in programming.&lt;/p&gt;

&lt;h2&gt;The improved number of rows way:&lt;/h2&gt;
&lt;p&gt;&lt;i&gt;lastRow = Math.DivRem(currentElementIndex, numberOfColumns, out result1) &gt;= Math.DivRem(totalElements - 1, numberOfColumns, out result2))&lt;/i&gt;&lt;br&gt;
&lt;span style="color: rgb(190, 190, 190);"&gt;* Math.DivRem returns the division result and the remainder, since we need the number rounded down.&lt;/span&gt;&lt;/p&gt;

&lt;br&gt;
&lt;img src="http://stritar.net/Upload/Images/Last-Row-In-Table.gif" alt="Last Row In Table"&gt;
</description><link>http://stritar.net/Post/Determining-If-An-Element-Is-In-The-Last-Row-Of-A-Table.aspx</link></item><item><title>Adding share buttons to your blog or website - a comprehensive guide</title><pubDate>Mon, 06 Jun 2011 12:05:14 GMT</pubDate><description>&lt;p&gt;A lot has happened in the field of share buttons in the past year: &lt;a href="http://mashable.com/2011/06/01/google-plus-one-button-2/" class="more" target="_blank" title="Google's +1 Button Challenges Facebook’s Like Across the Web"&gt;Google +1 button for web pages&lt;/a&gt; was introduced, Facebook started to &lt;a href="http://mashable.com/2011/02/27/facebook-like-button-takes-over-share-button-functionality/" class="more" target="_blank" title="Facebook Like Button Takes Over Share Button Functionality"&gt;migrate the Share and Like buttons&lt;/a&gt;, TweetMeme button is slowly getting replaced by the &lt;a href="http://blog.twitter.com/2010/08/pushing-our-tweet-button.html" class="more" target="_blank" title="Pushing Our (Tweet) Button"&gt;offical Tweet button&lt;/a&gt;, etc. Enough to make maintenance of these buttons a pain in the ass. But since social activity is getting &lt;a href="http://stritar.net/Post/Reinventing-SEO-Search-Engine-Optimization-The-Social-Media-Effect.aspx" class="more" target="_blank" title="Reinventing SEO: The social media effect"&gt;more and more important for SEO&lt;/a&gt;, this needs to be done, one way or another. To make it easier, I've put together a comprehensive list of different share widgets, together with some explanation, sample code and direct links to full documentation.&lt;/p&gt;


&lt;h2&gt;Keep it simple: Use basic links&lt;/h2&gt;
&lt;p&gt;Most social services support direct linking to share forms, which can be populated using a proper request. This means the URL of the target content (and sometimes title) must be passed in the query string (e.g. "?url=http://stritar.net"). In case you require a simple solution that doesn't require a lot of space, or you would like to style your share buttons on your own, this could be what you're looking for.&lt;/p&gt;
&lt;p&gt;
Facebook: &lt;a href="http://facebook.com/sharer.php?u=http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx" class="more" target="_blank"&gt;http://facebook.com/sharer.php?u=&lt;b&gt;&lt;%=contentUrl%&gt;&lt;/b&gt;&lt;/a&gt;
&lt;br&gt;Twitter: &lt;a href="http://twitter.com/?status=Adding share buttons to your blog or website - the complete guide http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx" class="more" target="_blank"&gt;http://twitter.com/?status=&lt;b&gt;&lt;%=contentTitle%&gt;  &lt;%=contentUrl%&gt;&lt;/b&gt;&lt;/a&gt;
&lt;br&gt;Reddit: &lt;a href="http://reddit.com/submit?url=http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx&amp;title=Adding share buttons to your blog or website - the complete guide" class="more" target="_blank"&gt;http://reddit.com/submit?url=&lt;b&gt;&lt;%=contentUrl%&gt;&lt;/b&gt;&amp;title=&lt;b&gt;&lt;%=contentTitle%&gt;&lt;/b&gt;&lt;/a&gt;
&lt;br&gt;Digg: &lt;a href="http://digg.com/submit?url=http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx" class="more" target="_blank"&gt;http://digg.com/submit?url=&lt;b&gt;&lt;%=contentUrl%&gt;&lt;/b&gt;&lt;/a&gt;
&lt;br&gt;Delicious: &lt;a href="http://delicious.com/post?url=http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx&amp;title=Adding share buttons to your blog or website - the complete guide" class="more" target="_blank"&gt;http://delicious.com/post?url=&lt;b&gt;&lt;%=contentUrl%&gt;&lt;/b&gt;&amp;title=&lt;b&gt;&lt;%=contentTitle%&gt;&lt;/b&gt;&lt;/a&gt;
&lt;br&gt;StumbleUpon: &lt;a href="http://stumbleupon.com/submit?url=http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx&amp;title=Adding share buttons to your blog or website - the complete guide" class="more" target="_blank"&gt;http://stumbleupon.com/submit?url=&lt;b&gt;&lt;%=contentUrl%&gt;&lt;/b&gt;&amp;title=&lt;b&gt;&lt;%=contentTitle%&gt;&lt;/b&gt;&lt;/a&gt;
&lt;br&gt;&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;Keep it simpler: Use AddThis&lt;/h2&gt;
&lt;p&gt;If you're not a demanding users and you're OK with a plain solution, the service AddThis may be just what you need. Set the parameters and you're good to go, and the number of supported services is really huge (and you also get the Print button).&lt;/p&gt;
&lt;p style="font-family: Courier;"&gt;&amp;lt;div class=&amp;quot;addthis_toolbox addthis_default_style&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;addthis_button_facebook_like&amp;quot; addthis:url=&amp;quot;&lt;b&gt;&amp;lt;%=contentUrl%&amp;gt;&lt;/b&gt;&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;addthis_button_tweet&amp;quot; addthis:url=&amp;quot;&lt;b&gt;&amp;lt;%=contentUrl%&amp;gt;&lt;/b&gt;&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;addthis_counter addthis_pill_style&amp;quot; addthis:url=&amp;quot;&lt;b&gt;&amp;lt;%=contentUrl%&amp;gt;&lt;/b&gt;&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://s7.addthis.com/js/250/addthis_widget.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;table cellpadding="0" cellspacing="0" width="400"&gt;&lt;tr&gt;&lt;td&gt;Result:&lt;/td&gt;&lt;td&gt; 
&lt;div class="addthis_toolbox addthis_default_style "&gt;
&lt;a class="addthis_button_facebook_like" addthis:url="http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx"&gt;&lt;/a&gt;
&lt;a class="addthis_button_tweet" addthis:url="http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx"&gt;&lt;/a&gt;
&lt;a class="addthis_counter addthis_pill_style" addthis:url="http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js"&gt;&lt;/script&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Possible modifications: too many to mention&lt;/p&gt;
&lt;p&gt;More info: &lt;a href="http://addthis.com" target="_blank" title="AddThis - The #1 Bookmarking &amp;amp; Sharing Service" class="more"&gt;http://www.addthis.com/&lt;/a&gt;
&lt;br&gt;&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;Facebook&lt;/h2&gt;
&lt;p&gt;So, you'll rather go for the real thing? Let's begin with Facebook. If you're trying to get the code for the Like button and it says you have to be a registered developer, don't worry, just logout and everything will be great. After that you will be offered with two sets of code, both of them work. I used the second one, which also support "Send to".&lt;/p&gt;
&lt;p style="font-family: Courier"&gt;&amp;lt;div id=&amp;quot;fb-root&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;http://connect.facebook.net/en_US/all.js#xfbml=1&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;fb:like href=&amp;quot;&lt;b&gt;&amp;lt;%=contentUrl%&amp;gt;&lt;/b&gt;&amp;quot; send=&amp;quot;false&amp;quot; layout=&amp;quot;button_count&amp;quot; width=&amp;quot;130&amp;quot; show_faces=&amp;quot;false&amp;quot; action=&amp;quot;like&amp;quot; font=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/fb:like&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;table cellpadding="0" cellspacing="0" width="200"&gt;&lt;tr&gt;&lt;td&gt;Result:&lt;/td&gt;&lt;td&gt; 
&lt;div id="fb-root"&gt;&lt;/div&gt;&lt;script src="http://connect.facebook.net/en_US/all.js#xfbml=1"&gt;&lt;/script&gt;&lt;fb:like href="http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx" send="false" layout="button_count" width="130" show_faces="false" action="like" font=""&gt;&lt;/fb:like&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Possible modifications: layout (standard, button_count, box_count), colorscheme (light, dark), action (like, recommend), show_faces, font, width, send (add send button), etc. &lt;/p&gt; 
&lt;p&gt;More info: &lt;a href="http://developers.facebook.com/docs/reference/plugins/like/" target="_blank" title="Like Button - Facebook developers" class="more"&gt;http://developers.facebook.com/docs/reference/plugins/like/&lt;/a&gt;
&lt;br&gt;&amp;nbsp;&lt;/p&gt;



&lt;h2&gt;Twitter&lt;/h2&gt;
&lt;p&gt;Since Twitter introduced the new Tweet button, the &lt;a title="TweetMeme Button" target="_blank" class="more" href="http://help.tweetmeme.com/2009/04/06/tweetmeme-button/"&gt;original TweetMeme button&lt;/a&gt; started to behave strangely (sometimes it doesn't count tweets correctly). On the other hand, the official Tweet button doesn't count the tweets for older posts, so all your viral posts from the past will show 0 tweets (and I was so proud one of my posts &lt;a href="http://stritar.net/Post/I_Got_The_Scent_Of_Going_Viral_On_Social_Media_-_Now_I_Am_A_Bit_Confused.aspx" class="more" target="_blank" title="I got the scent of going viral on social media. Now I'm a bit confused."&gt;got more than 100 retweets!&lt;/a&gt;). Your choice, I've decided to go for the new one.&lt;/p&gt;
&lt;p style="font-family: Courier"&gt;&amp;lt;a href=&amp;quot;http://twitter.com/share&amp;quot; class=&amp;quot;twitter-share-button&amp;quot; data-url=&amp;quot;&lt;b&gt;&amp;lt;%=contentUrl%&amp;gt;&lt;/b&gt;&amp;quot; data-count=&amp;quot;horizontal&amp;quot;&amp;gt;Tweet&amp;lt;/a&amp;gt;&lt;br&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://platform.twitter.com/widgets.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;table cellpadding="0" cellspacing="0" width="200"&gt;&lt;tr&gt;&lt;td&gt;Result:&lt;/td&gt;&lt;td&gt; 
&lt;a href="http://twitter.com/share" class="twitter-share-button" data-url="http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx" data-count="horizontal"&gt;Tweet&lt;/a&gt;&lt;script type="text/javascript" src="http://platform.twitter.com/widgets.js"&gt;&lt;/script&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/p&gt;
&lt;p&gt;&lt;table cellpadding="0" cellspacing="0" width="200"&gt;&lt;tr&gt;&lt;td&gt;TweetMeme:&lt;/td&gt;&lt;td&gt;
&lt;script type="text/javascript"&gt;
tweetmeme_url = 'http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx';
tweetmeme_style = 'compact';
&lt;/script&gt;
&lt;script type="text/javascript" src="http://tweetmeme.com/i/scripts/button.js"&gt;&lt;/script&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Possible modifications: data-count (vertical, horizontal, none), which modifies the layout. You can also set the default text and specify @via, etc.&lt;/p&gt; 
&lt;p&gt;More info: &lt;a href="http://twitter.com/goodies/tweetbutton" target="_blank" title="Twitter / Tweet Button" class="more"&gt;http://twitter.com/goodies/tweetbutton&lt;/a&gt;
&lt;br&gt;&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;Reddit&lt;/h2&gt;
&lt;p&gt;Reddit is a great community that can get you quite a bit of traffic if your topic is more on the geeky side.&lt;/p&gt;
&lt;p style="font-family: Courier;"&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
reddit_url='&lt;strong&gt;&amp;lt;%=contentUrl%&amp;gt;&lt;/strong&gt;';&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://reddit.com/static/button/button1.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;table cellpadding="0" cellspacing="0" width="200"&gt;&lt;tr&gt;&lt;td&gt;Result:&lt;/td&gt;&lt;td&gt; 
&lt;script type="text/javascript"&gt;                      reddit_url='http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx';
&lt;/script&gt;
&lt;script type="text/javascript" src="http://reddit.com/static/button/button1.js"&gt;&lt;/script&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Possible modifications: tens of different layouts&lt;/p&gt; 
&lt;p&gt;More info: &lt;a href="http://www.reddit.com/buttons/" target="_blank" title="reddit.com: reddit buttons" class="more"&gt;http://www.reddit.com/buttons/&lt;/a&gt;
&lt;br&gt;&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;Digg&lt;/h2&gt;
&lt;p&gt;Since Digg's last upgrade, I haven't been seeing any traffic from it, but it's nice to dream about the old times. Not working properly on FF2.&lt;/p&gt;
&lt;p style="font-family: Courier"&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
(function() {&lt;br /&gt;
var s = document.createElement('SCRIPT'), s1 = document.getElementsByTagName('SCRIPT')[0];&lt;br /&gt;
s.type = 'text/javascript';&lt;br /&gt;
s.async = true;&lt;br /&gt;
s.src = 'http://widgets.digg.com/buttons.js';&lt;br /&gt;
s1.parentNode.insertBefore(s, s1);&lt;br /&gt;
})();&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;a class=&amp;quot;DiggThisButton DiggCompact&amp;quot; href=&amp;quot;http://digg.com/submit?url=&lt;strong&gt;&amp;lt;%=contentUrl%&amp;gt;&lt;/strong&gt;&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;table cellpadding="0" cellspacing="0" width="200"&gt;&lt;tr&gt;&lt;td&gt;Result:&lt;/td&gt;&lt;td&gt; 
&lt;script type="text/javascript"&gt;
(function() {
var s = document.createElement('SCRIPT'), s1 = document.getElementsByTagName('SCRIPT')[0];
s.type = 'text/javascript';
s.async = true;
s.src = 'http://widgets.digg.com/buttons.js';
s1.parentNode.insertBefore(s, s1);
})();
&lt;/script&gt;
&lt;a class="DiggThisButton DiggCompact" href="http://digg.com/submit?url=http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx"&gt;&lt;/a&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Possible modifications: class (DiggWide, DiggMedium, DiggCompact, DiggIcon), which modifies the layout.&lt;/p&gt; 
&lt;p&gt;More info: &lt;a href="http://about.digg.com/downloads/button/smart" target="_blank" title="Integrate: The Digg Button" class="more"&gt;http://about.digg.com/downloads/button/smart&lt;/a&gt;
&lt;br&gt;&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;Delicious&lt;/h2&gt;
&lt;p&gt;We'll probably be seing &lt;a href="http://stritar.net/Post/Is-Delicious-Aiming-To-Become-The-Next-Twitter.aspx" class="more" target="_blank" title="Is Delicious aiming to become the next Twitter?"&gt;a new version of Delicious button&lt;/a&gt; soon, but for now, you can either put &lt;a href="http://www.delicious.com/help/savebuttons" class="more" target="_blank" title="'Bookmark this on Delicious' Button"&gt;a simple link without the count&lt;/a&gt; to your blog or some hacking is required. You practically have to make your own button that retrieves the data from Delicious and puts it into correct HTML tags. For advanced users only.&lt;/p&gt;

&lt;p style="font-family: Courier"&gt;&amp;lt;span id=&amp;quot;deliciouscount&amp;quot; style=&amp;quot;font-size: 12px; font-weight: bold;&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;a id=&amp;quot;deliciouslink&amp;quot; style=&amp;quot;font-size: 12px; font-weight: bold; text-decoration: none;&amp;quot; target=&amp;quot;_blank&amp;quot; title=&amp;quot;View details&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&lt;br/&gt;
&amp;lt;script type='text/javascript'&amp;gt;&lt;br /&gt;
function displayURL(data) {&lt;br /&gt;
var urlinfo = data[0];&lt;br /&gt;
if (urlinfo == null) {&lt;br /&gt;
document.getElementById('deliciouscount').innerHTML = &amp;quot;Bookmarks: 0&amp;quot;;&lt;br /&gt;
return;&lt;br /&gt;
}&lt;br /&gt;
else {&lt;br /&gt;
document.getElementById('deliciouslink').innerHTML = &amp;quot;Bookmarks: &amp;quot; + urlinfo.total_posts;&lt;br /&gt;
document.getElementById('deliciouslink').href = 'http://delicious.com/url/' + urlinfo.hash;&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;http://badges.del.icio.us/feeds/json/url/data?url=&lt;strong&gt;&amp;lt;%=contentUrl%&amp;gt;&lt;/strong&gt;&amp;amp;amp;callback=displayURL&amp;quot; &amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;

&lt;p&gt;&lt;table cellpadding="0" cellspacing="0" width="200"&gt;&lt;tr&gt;&lt;td&gt;Result:&lt;/td&gt;&lt;td align="left"&gt; 
&lt;span id="deliciouscount2" style="font-size: 12px; font-weight: bold;"&gt;&lt;/span&gt;
&lt;a id="deliciouslink2" style="font-size: 12px; font-weight: bold; text-decoration: none;" target="_blank" title="View details"&gt;&lt;/a&gt;
&lt;script type='text/javascript'&gt;
function displayURL(data) {
var urlinfo = data[0];
if (urlinfo == null) {
    document.getElementById('deliciouscount2').innerHTML = "Bookmarks: 0";
    
    return;
}
 else {
    document.getElementById('deliciouslink2').innerHTML = "Bookmarks: " + urlinfo.total_posts;
    document.getElementById('deliciouslink2').href = 'http://delicious.com/url/' + urlinfo.hash;
}
}         
&lt;/script&gt;    
&lt;script src="http://badges.del.icio.us/feeds/json/url/data?url=http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx&amp;amp;callback=displayURL" &gt;&lt;/script&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Possible modifications: the world is not enough&lt;/p&gt; 
&lt;p&gt;More info: &lt;a href="http://stritar.net/About/Contact.aspx" class="more" target="_blank" title="Contact Grega Stritar"&gt;contact me&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;&amp;nbsp;&lt;/p&gt;



&lt;h2&gt;StumbleUpon&lt;/h2&gt;
&lt;p&gt;I'm not sure if I'm using StumbleUpon properly, but I haven't managed to get a single stumble since I started blogging, so I temporarily removed it from my blog (due to lack of space).&lt;/p&gt;
&lt;p style="font-family: Courier"&gt;&amp;lt;script src=&amp;quot;http://www.stumbleupon.com/hostedbadge.php?s=2&amp;amp;r=&lt;strong&gt;&amp;lt;%=contentUrl%&amp;gt;&lt;/strong&gt;&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;table cellpadding="0" cellspacing="0" width="200"&gt;&lt;tr&gt;&lt;td&gt;Result:&lt;/td&gt;&lt;td align="left"&gt; 
&lt;script src="http://www.stumbleupon.com/hostedbadge.php?s=2&amp;r=http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx"&gt;&lt;/script&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Possible modifications: many different layouts&lt;/p&gt; 
&lt;p&gt;More info: &lt;a href="http://www.stumbleupon.com/badges/" target="_blank" title="StumbleUpon Badges" class="more"&gt;http://www.stumbleupon.com/badges/&lt;/a&gt;
&lt;br&gt;&amp;nbsp;&lt;/p&gt;


&lt;h2&gt;Google +1&lt;/h2&gt;
&lt;p&gt;It's too soon to say if +1 button will be a game changer, or it's just too lame, too late, like other &lt;a href="http://stritar.net/Post/Google_2-0_-_Take_Infinity_-_Google_Me.aspx" class="more" target="_blank" title="Google 2.0, take infinity: Google Me"&gt;Google's social services&lt;/a&gt;. We'll see. Not working properly on FF2, FF3.5 and IE7.&lt;/p&gt;
&lt;p style="font-family: Courier"&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://apis.google.com/js/plusone.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;g:plusone size=&amp;quot;medium&amp;quot; href=&amp;quot;&lt;strong&gt;&amp;lt;%=contentUrl%&amp;gt;&lt;/strong&gt;&amp;quot;&amp;gt;&amp;lt;/g:plusone&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;table cellpadding="0" cellspacing="0" width="200"&gt;&lt;tr&gt;&lt;td&gt;Result:&lt;/td&gt;&lt;td align="left"&gt; 
&lt;script type="text/javascript" src="http://apis.google.com/js/plusone.js"&gt;&lt;/script&gt;
&lt;g:plusone size="medium" href="http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx"&gt;&lt;/g:plusone&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Possible modifications: size (small, standard, medium, tall)&lt;/p&gt; 
&lt;p&gt;More info: &lt;a href="http://www.google.com/webmasters/+1/button/index.html" target="_blank" title="Google +1 your website" class="more"&gt;http://www.google.com/webmasters/+1/button/index.html&lt;/a&gt;
&lt;br&gt;&amp;nbsp;&lt;/p&gt;


&lt;h2&gt;LinkedIn (Update 28.11.2011)&lt;/h2&gt;
&lt;p&gt;LinkedIn may not be your dynamic social platform, but perhaps you may still find use for it.&lt;/p&gt;
&lt;p style="font-family: Courier"&gt;
&amp;lt;script src=&amp;quot;http://platform.linkedin.com/in.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;IN/Share&amp;quot; data-url=&amp;quot;&lt;strong&gt;&amp;lt;%=contentUrl%&amp;gt;&lt;/strong&gt;&amp;quot; data-counter=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;
&lt;/p&gt;
&lt;p&gt;&lt;table cellpadding="0" cellspacing="0" width="200"&gt;&lt;tr&gt;&lt;td&gt;Result:&lt;/td&gt;&lt;td align="left"&gt; 
&lt;script src="http://platform.linkedin.com/in.js" type="text/javascript"&gt;&lt;/script&gt;
&lt;script type="IN/Share" data-url="http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx" data-counter="right"&gt;&lt;/script&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;p&gt;Possible modifications: layour (vertical, horizontal, nocount)&lt;/p&gt; 
&lt;p&gt;More info: &lt;a href="https://developer.linkedin.com/plugins/share-button" target="_blank" title="Share Button | LinkedIn Developer Network" class="more"&gt;https://developer.linkedin.com/plugins/share-button&lt;/a&gt;
&lt;br&gt;&amp;nbsp;&lt;/p&gt;


&lt;h2&gt;Special: Like Facebook page and follow on Twitter&lt;/h2&gt;
&lt;p&gt;If you have a Facebook page, all you need to do is point the Like button to the URL of the page, and people will automatically become "fans". Similarly, you can implement the new Twitter Follow button and hopefully get new followers.&lt;/p&gt;
&lt;p style="font-family: courier"&gt;&amp;lt;div id=&amp;quot;fb-root&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;http://connect.facebook.net/en_US/all.js#xfbml=1&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;fb:like href=&amp;quot;&lt;strong&gt;http://facebook.com/neolab.si&lt;/strong&gt;&amp;quot; send=&amp;quot;false&amp;quot; layout=&amp;quot;button_count&amp;quot; width=&amp;quot;130&amp;quot; show_faces=&amp;quot;false&amp;quot; action=&amp;quot;likel&amp;quot; font=&amp;quot;&amp;quot;&amp;gt;&amp;lt;/fb:like&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;div id="fb-root"&gt;&lt;/div&gt;&lt;script src="http://connect.facebook.net/en_US/all.js#xfbml=1"&gt;&lt;/script&gt;&lt;fb:like href="http://facebook.com/neolab.si" send="false" layout="button_count" width="130" show_faces="false" action="like" font=""&gt;&lt;/fb:like&gt;&lt;/p&gt;
&lt;p style="font-family: Courier"&gt;&amp;lt;a href=&amp;quot;&lt;strong&gt;http://twitter.com/gstritar&lt;/strong&gt;&amp;quot; class=&amp;quot;twitter-follow-button&amp;quot; data-show-count=&amp;quot;false&amp;quot; &amp;gt;Follow @gstritar&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;http://platform.twitter.com/widgets.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://twitter.com/gstritar" class="twitter-follow-button" data-show-count="false" &gt;Follow @gstritar&lt;/a&gt;
&lt;script src="http://platform.twitter.com/widgets.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br&gt;&amp;nbsp;&lt;/p&gt;

&lt;h2&gt;Other platforms&lt;/h2&gt;
&lt;p&gt;All of these buttons can be modified to some extent, and most of them will work without the specified URL. But you'll probably need to set it anyways so they will also work on your homepage with many posts.&lt;/p&gt;
&lt;p&gt;The cases presented were made for asp.net, but they can be modified for other platforms such as WordPress or Blogger by replacing the &lt;b&gt;&lt;%=contentUrl%&gt;&lt;/b&gt; with something like &lt;b&gt;&amp;lt;?php the_permalink() ?&amp;gt;&lt;/b&gt; or &lt;b&gt;data:post.url&lt;/b&gt; (sorry, no experience). But if you managed to get the Facebook Like button to work, you will surely be able to modify others too.&lt;/p&gt;
&lt;p&gt;There you go, time to share.&lt;/p&gt;
</description><link>http://stritar.net/Post/Adding-Share-Buttons-To-Your-Blog-Or-Website-A-Comprehensive-Guide.aspx</link></item><item><title>Reinventing SEO: The social media effect</title><pubDate>Tue, 19 Apr 2011 09:00:38 GMT</pubDate><description>&lt;p&gt;Looks like the time for classic search and Search Engine Optimization (SEO) is &lt;a href="http://mashable.com/2011/03/04/search-marketing-changes/" class="more" target="_blank" title="Why the Search Marketing Industry Must Adapt or Perish"&gt;slowly running out&lt;/a&gt;, waiting to be replaced by more advanced and efficient algorithms than mathematical - &lt;a href="http://traackr.com/blog/2011/02/from-pagerank-to-peoplerank/" class="more" target="_blank" title="The Future of Search: from PageRank to PeopleRank"&gt;human powered&lt;/a&gt;. The &lt;a href="http://stritar.net/Post/The_Awesomeness_Of_The_Facebook_Like_Button.aspx" class="more" target="_blank" title="The awesomeness of the Facebook Like button"&gt;Facebook Like button&lt;/a&gt;, the Twitter retweet button and other social share widgets are on the uprise, and Google is fighting back with all its might. For now, their business model &lt;a href="http://techcrunch.com/2011/03/25/search-googles-castle-moat/" class="more" target="_blank" title="Search Is Google's Castle, Everything Else Is A Moat"&gt;relies heavily on search&lt;/a&gt; (other project like Android and Chrome too), but their &lt;a href="http://www.businessinsider.com/larry-page-just-tied-employee-bonuses-to-the-success-of-the-googles-social-strategy-2011-4" class="more" target="_blank" title="Larry Page Just Tied ALL Employees' Bonuses To The Success Of Google's Social Strategy"&gt;future social success&lt;/a&gt; was named the number one priority by the new old CEO Larry Page.&lt;/p&gt;

&lt;p&gt;Google still has a problem with providing a &lt;a href="http://stritar.net/Post/Google_2-0_-_Take_Infinity_-_Google_Me.aspx" class="more" target="_blank" title="Google 2.0, take infinity: Google Me"&gt;solid social alternative&lt;/a&gt; to the newly crowned social players, and for now (we'll have to see what happens with the &lt;a href="http://googleblog.blogspot.com/2011/03/1s-right-recommendations-right-when-you.html" class="more" target="_blank" title="+1's: the right recommendations right when you want them - in your search results "&gt;new +1 button&lt;/a&gt;), all they can do is to &lt;a href="http://www.searchenginejournal.com/google-clarifies-url-shortenings-impact-on-seo/29312/" class="more" target="_blank" title="Google Clarifies URL Shortening's Impact on SEO"&gt;somehow play along&lt;/a&gt;. In the mean time, a lot of people have been noticing the &lt;a href="http://www.seomoz.org/blog/tweets-effect-rankings-unexpected-case-study" class="more" target="_blank" title="A Tweet's Effect On Rankings - An Unexpected Case Study"&gt;impact of Facebook likes and Tweets&lt;/a&gt; on their Google results ranking, and guess what – I've noticed the same thing. Welcome to the age of &lt;a href="http://mashable.com/2011/03/17/curation-importance/" class="more" target="_blank" title="Why Curation Is Just as Important as Creation"&gt;social curation&lt;/a&gt;, where rating content is slowly getting as important as generating content. I guess there's about a billion times too much of it online, and who else knows it better than &lt;a href="http://www.seomoz.org/blog/google-bing-confirm-twitter-facebook-influence-seo" class="more" target="_Blank" title="Google and Bing Confirm that Twitter/Facebook Influence SEO"&gt;Google and Bing&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;While we knew Google is very good at &lt;a href="http://stritar.net/Post/The_Impact_Of_Hyperlinks_Toolbars_And_Url_Shorteners_On_Google_Analytics.aspx" class="more" target="_blank" title="The impact of hyperlinks, toolbars and URL shorteners on Google Analytics
"&gt;adapting its services&lt;/a&gt; to new trends, we are quite happy they actually went this far, embracing social virality into their search results. But what happened to the world's most powerful mathematic algorithm, &lt;a href="http://en.wikipedia.org/wiki/PageRank" class="more" target="_blank" title="PageRank"&gt;Google's PageRank&lt;/a&gt;? Is it becoming obsolete to the Facebook Like's search algorithm, which will surely come around soon in its full glory? Actually, it's getting clear it became obsolete together with the static Web 1.0, but only to get reborn for the &lt;a href="http://stritar.net/Post/Why_Web_2-0_Is_So_Important.aspx" class="more" targeT="_blank" title="Why Web 2.0 is so important"&gt;social world of Web 2.0&lt;/a&gt;. Slowly, almost underground, while we were being fed with news about how &lt;a href="http://thenextweb.com/google/2010/04/09/google-site-speed-search-ranking-factor/" class="more" target="_blank" title="Google Now Using Site Speed As A Search Ranking Factor"&gt;loading speeds&lt;/a&gt; make a significant difference on Google ranking.&lt;/p&gt;

&lt;p&gt;I've written a few blog posts that have been generating some &lt;a href="http://stritar.net/Post/I_Got_The_Scent_Of_Going_Viral_On_Social_Media_-_Now_I_Am_A_Bit_Confused.aspx" class="more" target="_blank" title="I got the scent of going viral on social media. Now I'm a bit confused."&gt;social buzz&lt;/a&gt;. A few Tweets, Likes and Reddit upvotes, and you have a winner (thank you!). "&lt;a href="http://www.google.com/search?hl=en&amp;client=safari&amp;q=jeopardy+slovenia&amp;btnG=Search&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=" class="more" target="_blank" title="jeopardy slovenia - Google Search"&gt;Jeopardy Slovenia&lt;/a&gt;" may not be a power search, but it became the first result on Google the same day I've published &lt;a href="http://stritar.net/Post/Can-You-Believe-Watson-Got-The-Question-About-Slovenia-Wrong-On-Jeopardy.aspx" class="more" target="_blank" title="Can you believe Watson got the question about Slovenia wrong on Jeopardy?"&gt;the post&lt;/a&gt;. With PageRank 0! And "&lt;a href="http://www.google.com/search?hl=en&amp;client=safari&amp;q=apple+slovenia&amp;btnG=Search&amp;aq=f&amp;aqi=&amp;aql=&amp;oq=" class="more" target="_blank" title="appleslovenia - Google Search"&gt;Apple Slovenia&lt;/a&gt;", a keyword much more interesting, is also displaying &lt;a href="http://stritar.net/Post/Apple-Has-Enough-Money-To-Buy-Slovenias-Entire-Yearly-Production.aspx" class="more" target="_blank" title="Apple has enough money to buy Slovenia's entire yearly production"&gt;my post&lt;/a&gt; on the first page. Not bad. And that's something we will probably be seeing even more of in the future, and that's why blogging is still (if not more than ever) very important.&lt;/p&gt;

&lt;p&gt;It's time to start &lt;a href="http://sethgodin.typepad.com/seths_blog/2011/04/wasting-the-digital-dividend.html" class="more" target="_blank" title="Wasting the digital dividend"&gt;monetizing your social capital&lt;/a&gt;. And of course, upgrade SEO marketing strategies with more efficient SMO (Social Media Optimization) strategies. Before you'll get your page on top of Google the old school way, you'll grow old. So be cool and remember, sharing is caring. Yes, that means you should click the button.&lt;/p&gt;
</description><link>http://stritar.net/Post/Reinventing-SEO-Search-Engine-Optimization-The-Social-Media-Effect.aspx</link></item><item><title>I've developed a magazine based on my Delicious bookmarks. And a Twitter bot.</title><pubDate>Fri, 25 Feb 2011 07:34:38 GMT</pubDate><description>&lt;p&gt;Last week was marked a great social achievement of mine – I managed to bookmark my &lt;a href="http://www.delicious.com/stritar" class="more" target="_blank" title="stritar's  Bookmarks on Delicious"&gt; 10.000th bookmark on Delicious&lt;/a&gt;. A lot of people have 10.000 &lt;a href="http://twitter.com/gstritar" title="Grega Stritar (@gstritar) or Twitter" class="more" target="_blank"&gt;tweets&lt;/a&gt;, but not many own 10.000 bookmarks, fully tagged and classified. I've been collecting these since December 2006 (probably one od my first 2.0 addictions), and they are becoming one of my greatest possessions – knowledge is the ultimate collection. Hopefully Delicious won't get &lt;a href="http://blog.delicious.com/blog/2010/12/whats-next-for-delicious.html" class="more" target="_blank" title="What’s Next for Delicious?"&gt;shut down or left behind&lt;/a&gt;, so I will be able to continue with this obsession.&lt;/p&gt;

&lt;p&gt;I've made a few interesting mashups with them already; as my most frequent actions online, my bookmarks represent the core of &lt;a href="http://stritar.net/Projects/Chronolog.aspx" class="more" target="_blank" title="Stritar's chronolog"&gt;the chronolog&lt;/a&gt;. But things are changing fast and the desire for presenting information is moving into a &lt;a href="http://gigaom.com/2011/02/11/its-facebook-vs-twitter-in-the-race-to-make-the-news-social/" class="more" target="_blank" title="It's Facebook Vs. Twitter In the Race to Make the News Social"&gt;new dimension&lt;/a&gt;. In case you didn't notice, &lt;a href="http://www.businessinsider.com/chart-of-the-day-gadget-shipments-2011-2" class="more" target="_blank" title="The Market For Tablets Is A Lot Bigger Than You Think"&gt;tablets are mainstream&lt;/a&gt;, and the media industry already hopes they are the &lt;a href="http://www.foliomag.com/2011/media-dealmakers-summit-web-dead" class="more" target="_blank" title="Media Dealmakers Summit: 'The Web Is Dead'"&gt;solution they've been waiting for&lt;/a&gt;. &lt;a href="http://www.wired.com/epicenter/2011/02/whats-new-about-the-daily" class="more" target="_blank" title="What's New About The Daily? The Oldest Media Idea There Is"&gt;The Daily&lt;/a&gt;, which was released a few weeks ago, is the first no-print, tablet  only magazine available (for iPad, Android version is coming), and other applications, based on &lt;a href="http://www.shinyshiny.tv/2010/12/social_curation_why_its_hot_ten_social_curation_sites.html" class="more" target="_Blank" title="Social Curation: What it is, why it's hot right now and 10 sites that do it"&gt;social curation&lt;/a&gt;, such as &lt;a href="http://flipboard.com/" class="more" target="_blank" title="Flipboard for iPad"&gt;Flipboard&lt;/a&gt; (which is amazing and inspired all of this) and &lt;a href="http://thenextweb.com/media/2011/01/24/forget-apps-onswipe-is-the-future-of-publishing/" class="more" target="_Blank" title="Forget apps, OnSwipe is the future of publishing."&gt;OnSwipe&lt;/a&gt; are revolutionizing the way we (create and) consume content.&lt;/p&gt;

&lt;p&gt;I find this evolution of displaying information fascinating and a bit ironic - going from newspaper form to blog form and back - but I've decided to play along, developing a &lt;a href="http://stritar.net/Magazine.aspx" class="more" target="_blank" title="Stritar's magazine"&gt;magazine based on my bookmarks&lt;/a&gt;. Using the &lt;a href="http://htmlagilitypack.codeplex.com/" class="more" target="_blank" title="Html Agility Pack"&gt;Html Agility Pack&lt;/a&gt; library for asp.net I managed to extract an image and a few paragraphs from each URL I bookmarked, using them to &lt;a href="http://stritar.net/Magazine.aspx" class="more" target="_blank" title="Stritar's magazine"&gt;form a magazine&lt;/a&gt;. The number of tags I put on each link determines the initial weight, which is &lt;a href="http://stritar.net/Post/Hot_On_The_Chronolog_-_And_How_It_Works.aspx" class="more" target="_blank" title="Hot on the chronolog - and how it works"&gt;additionally modified&lt;/a&gt; with your views and likes, allowing it to constantly adapt its shape. Those links which are stronger, are displayed higher, have a bigger picture and more text which makes them more visible.&lt;/p&gt;



&lt;p&gt;While contemplating about the potential of different APIs and all the pages I bookmarked these years, it occurred to me I could also make a &lt;a href="http://twitter.com/stritar_net" class="more" target="_blank" title="Stritar's chronolog (stritar_net) on Twitter"&gt;Twitter bot&lt;/a&gt;. All the bookmarks I save are now getting automatically &lt;a href="http://stritar.net/Post/The_Impact_Of_Hyperlinks_Toolbars_And_Url_Shorteners_On_Google_Analytics.aspx" class="more" target="_blank" title="The impact of hyperlinks, toolbars and URL shorteners on Google Analytics"&gt;shortened with bit.ly&lt;/a&gt; and posted to Twitter, with a bit of artificial intelligence. The speed of posting is determined by the number of items waiting in the queue, adjusting to the frequency of my actions. It still has a few problems, but they are only appropriate for a prototype, whose posting algorithm still needs to be technically and mathematically improved.&lt;/p&gt;

&lt;p&gt;The life cycle of my links I like has become quite a ride, as you can see in the diagram below, similar as the &lt;a href="http://stritar.net/Post/Web-2-5-Looking-For-The-Missing-Link-Between-Web-2-0-And-Web-3-0.aspx" class="more" target="_Blank" title="Web 2.5: Looking for the missing link between Web 2.0 and Web 3.0"&gt;evolution of the Web&lt;/a&gt;, transformed by social, mobile and the upcoming domination of the tablets. And while the major players are able to spend millions on the development of new and creative solutions, small players such as myself can only play along. Luckily, I like to play.&lt;/p&gt;&lt;br&gt;
&lt;img src="http://stritar.net/Upload/Images/Path_Of_A_Bookmark.jpg" alt="The Path of a Bookmark"&gt;
&lt;p class="underpicture"&gt;The path each one of my bookmarks makes in its lifetime.&lt;/p&gt;
</description><link>http://stritar.net/Post/I-Have-Developed-A-Magazine-Based-On-My-Delicious-Bookmarks-And-A-Twitter-Bot.aspx</link></item><item><title>The chronolog now understands connections between content</title><pubDate>Wed, 03 Nov 2010 21:20:56 GMT</pubDate><description>&lt;p&gt;I once made a promise that I will try to incorporate as many interesting features as possible into &lt;a href="http://stritar.net/Projects/Chronolog.aspx" class="more" target="_blank" title="Stritar's chronolog"&gt;my blog&lt;/a&gt;. My previous development sessions were based mostly on &lt;a href="http://stritar.net/About/Statistics.aspx" class="more" target="_blank" title="Chronolog statistics and analytics"&gt;interactions of readers&lt;/a&gt; with the posts, the peak of it being the &lt;a href="http://stritar.net/Post/Hot_On_The_Chronolog_-_And_How_It_Works.aspx" class="more" target="_blank" title="Hot on the chronolog - and how it works"&gt;Hot on the chronolog algorithm&lt;/a&gt;. But now, as the chronolog finally reached &lt;a href="http://stritar.net/Post/My_50th_Blog_Post_-_Time_To_Contemplate.aspx" class="more" target="_blank" title="My 50th blog post. Time to contemplate."&gt;critical mass&lt;/a&gt; in the amount of content it operates with, the time has come to do something new. The next step is focused on a different functionality, and a few days ago, the chronolog received an algorithm for recognizing relationships between different blog posts.&lt;/p&gt;

&lt;h2&gt;The connections&lt;/h2&gt;
&lt;p&gt;The whole concept is based on the occurrences of categories (which are actually tags) on different blog posts, the most obvious being the number of the same tags two different posts share. We did something similar on a web portal &lt;a href="http://neolab.si/Portfolio/Nogomania-Web-Portal.aspx#down" class="more" target="_blank" title="Nogomania.com web portal"&gt;we launched a few months ago&lt;/a&gt;, and it works pretty well. Sure, the proper way to do it would be using real text mining, where the strength of the relationships would be based on meaning and occurrences of words and external hyperlinks in a specific post. But in this stage, I'm keeping it simple: if two posts share a lot of tags, they appear more related.&lt;/p&gt;

&lt;h2&gt;The weight&lt;/h2&gt;
&lt;p&gt;Since some categories (tags) are used more often, they appear in many posts, making these posts too heavily related with each other. The number of categories attached to a single post also varies, giving a post with many tags a much stronger chance to appear as related to another. Therefore the general equation contains two modifiers, which are giving weight to each shared tag between two posts.&lt;/p&gt;

&lt;p&gt;Categories that appear only a few times globally, have more weight, because they represent a more scarce and therefore a more interesting and stronger connection. This takes care of the tags which are used very often, making them not too dominant. On the other hand, the weight of each tag on a post drops with the total number of tags the post has, so those posts, which have a lot of tags, don't become every other's related post. It may sound confusing, but it's probably a bit simpler to develop than to explain.&lt;/p&gt;

&lt;h2&gt;The results&lt;/h2&gt;
&lt;p&gt;I was actually quite surprised about the result the algorithm makes (which you can now see on the bottom of every post). As I was playing around a bit, observing how the calculation behaves and playing with constants, I actually found some interesting connections between posts which I didn't notice before. The engine finds quite a strong relationship between the post about using &lt;a href="http://stritar.net/Post/Slovenian_Grocers_Going_For_Web_20_design.aspx" class="more" target="_blank" title="Slovenian grocers going for Web 2.0 design"&gt;Web 2.0 logos in TV commercials&lt;/a&gt; and the one about &lt;a href="http://stritar.net/Post/Why_Are_All_Browser_Logos_And_Icons_Round_And_Blue.aspx" class="more" target="_blank" title="Why are all browser logos and icons round (and blue)?"&gt;Round browser icons&lt;/a&gt;, both of them being design clichés. &lt;a href="http://stritar.net/Post/I_Want_It_All_-_The_Curious_Case_of_Microsoft.aspx" class="more" target="_blank" title="I want it all - the curious case of Microsoft"&gt;The case of Microsoft&lt;/a&gt; and &lt;a href="http://stritar.net/Post/Google_2-0_-_Take_Infinity_-_Google_Me.aspx" class="more" target="_blank" title="Google 2.0, take infinity: Google Me"&gt;Google going social&lt;/a&gt; also made it strong, as the two posts are describing the struggle of two technology giants trying to adapt to the new situation. I could go on and on, but than you would probably just say I was doing SEO too hard.&lt;/p&gt;

&lt;p&gt;Search Engine Optimization (SEO) is actually another hidden benefit of the feature, something that occurred to me after I've already finished working on it. Google likes it if you have your content &lt;a href="http://www.searchengineguide.com/scott-allen/the-importance-of-internal-linking.php" class="more" target="_blank" title="The Importance of Internal Linking, and How to Do it Right"&gt;internally cross linked&lt;/a&gt;, so what better way to do it than to have automation take care of it. So until &lt;a href="http://paidcontent.org/article/419-seo-is-dead-and-the-new-king-is-smo/" class="more" target="_blank" class="more" title="SEO Is Dead, And The New King Is 'SMO'"&gt;SEO dies&lt;/a&gt;, this new functionality is actually a double win, because the chronolog became more optimized for crawlers and hopefully more useful for the readers. Even though most of you probably won't even notice.&lt;/p&gt;
</description><link>http://stritar.net/Post/The-Chronolog-Now-Understands-Connections-Between-Content.aspx</link></item><item><title>The awesomeness of the Facebook Like button</title><pubDate>Mon, 28 Jun 2010 07:46:07 GMT</pubDate><description>&lt;p&gt;Usually I'm quite &lt;a href="http://stritar.net/Post/Facebook_Vs_Twitter_-_Part_2_-_Privacy_And_Real-Time_Web.aspx" class="more" target="_blank" title="Facebook vs. Twitter - Part 2: Privacy and real-time web"&gt;critical towards Facebook&lt;/a&gt; and their policy for dominating the World Wide Web, but in this case I have to give them credit and respect. I finally took the time to add advanced share buttons / badges to my blog (and actually made a whole science out of it, but more on that some other time), one of them being the infamous &lt;a href="http://techcrunch.com/2010/03/25/facebook-to-release-a-like-button-for-the-whole-darn-internet/" class="more" target="_blank" title="Facebook To Release A 'Like' Button For the Whole Darn Internet"&gt;Facebook Like button&lt;/a&gt;. Needless to say it's probably the most advanced available share widget from the &lt;a href="http://www.webmonkey.com/2010/04/adding-facebook-like-buttons-to-your-site-is-damn-easy/" class="more" target="_blank" title="Adding Facebook 'Like' Buttons to Your Site Is Damn Easy"&gt;technical point of view&lt;/a&gt;, but I never imagined it's that advanced. Looks like Facebook isn't loosing any time to &lt;a href="http://edition.cnn.com/2010/TECH/04/29/cashmore.google.facebook/" class="more" target="_blank" title="Google's nightmare: Facebook 'Like' replaces links"&gt;index the web&lt;/a&gt;, and their architecture for achieving this goal is set up very well. The Like button is fully connected with all other social activities on Facebook, which obviously means Facebook is building a giant man powered map of the World Wide Web.&lt;/p&gt;

&lt;p&gt;After the Facebook Like button was released 21.4.2010 on the f8 conference as a &lt;a href="http://techie-buzz.com/facebook/facebook-f8-open-graph-like-toolbar.html" class="more" target="_blank" title="Facebook Unveils Its Roadmap to World Domination And It Is Good"&gt;part of the new Open Graph protocol&lt;/a&gt;, it was &lt;a href="http://www.allfacebook.com/2010/04/50000-websites-add-facebooks-like-button-and-social-plugins-in-first-week/" class="more" target="_blank" title="50,000 Websites Add Facebook's Like Button And Social Plugins In First Week"&gt;quickly adopted&lt;/a&gt; by a lot of sites and portals, many of them mainstream. It didn't take long for the button to produce criticism, because it turned out it can be used to exploit user profiles by &lt;a href="http://www.macworld.com/article/151087/2010/05/facebook_addingapps.html" class="more" target="_blank" title="Facebook's new features secretly add apps to your profile"&gt;installing applications&lt;/a&gt; and &lt;a href="http://edition.cnn.com/2010/TECH/social.media/06/02/cnet.facebook.privacy.like/index.html" class="more" target="_blank" title="Facebook 'Like' button draws privacy scrutiny"&gt;gathering user data&lt;/a&gt;. Today, this debacle is slowly turning into history, and more than &lt;a href="http://techcrunch.com/2010/05/11/facebook-social-plugins/" class="more" target="_blank" title="While Everyone Bitches, Facebook's New Social Plugins Surpass 100,000 Installs"&gt;100,001 sites&lt;/a&gt; already use the Facebook Like button, producing probably unimaginable amounts of likes and driving massive traffic to their sites.&lt;/p&gt;

&lt;p&gt;I use Facebook (and other social sites) to promote my blog by sharing links, and actually get quite a few referrers from it. Many of my previous posts have been liked and commented, making it a very useful tool for generating visits. But I haven't imagined these interactions would also reflect on the Facebook Like button I finally adopted on my blog. I apologize if this is a well-known fact, but I haven't heard about it from anyone and still have trouble finding any &lt;a href="http://blog.ninanet.com/2010/05/18/share-like-count" class="more" target="_blank" title="
Share, Like, Count"&gt;mention of it&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When I first tested how the Facebook Like button behaves, I noticed it displayed a few likes even though I've clicked on it around 2 AM. This made me wonder if something is wrong with it. Is Facebook trying to fake likes to make the button more appealing for publishers? Surely they have to be smarter than that. After I dug in a little deeper I noticed it displays a different number of likes on different posts I've made and published to Facebook. Hm... Could this mean...?&lt;/p&gt;


&lt;p&gt;I was intrigued by what I found out. Besides the actual clicks, the Like button also displays all the likes and comments on the links you or anybody else shared on Facebook, making it a global Facebook social interactions counter with a specific URL (link). I manually went through the statistics and concluded that all shares, likes and comments of posted links are also converted into likes on the button. I have tested it with 10 different posts and the numbers are pretty much correct, and I even found some &lt;a href="http://thenextweb.com/socialmedia/2010/05/23/has-facebook-just-merged-its-like-and-share-buttons-apparently-so/" class="more" target="_blank" title="Confirmed: Facebook has merged its 'Like' and 'Share' buttons. Slight catch though."&gt;proof of this fact&lt;/a&gt;. The people behind these likes and comments aren't mentioned with their names on the Like button, but they are there in the number. A pretty awesome feature for making your content look cooler and getting the most out of social interactions on Facebook.&lt;/p&gt;
&lt;p&gt;Here are some results from my testing, which provide almost a perfect match between likes on the freshly published (and unclicked) Like button and shares, likes and comments inside Facebook.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;a href="http://stritar.net/Post/The_Influence_Of_New_Generation_Information_Systems_On_Modern_Organizations.aspx" class="more" target="_blank" title="The influence of new generation information systems on modern organizations"&gt;The influence of new generation information systems on modern organizations&lt;/a&gt;: 5 likes on the button vs. 1 share (me), 2 likes (A, B) and 2 comments (me, B) - 5:5&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stritar.net/Post/Facebook_Vs_Twitter_-_Part_2_-_Privacy_And_Real-Time_Web.aspx" class="more" target="_blank" title="Facebook vs. Twitter - Part 2: Privacy and real-time web"&gt;Facebook vs. Twitter - Part 2: Privacy and real-time web&lt;/a&gt;: 6 likes on the button vs. 1 share (me) and 5 likes (A, B, C, D, E) - 6:6&lt;/li&gt;
&lt;li&gt;
&lt;a href="http://stritar.net/Post/Why_Are_All_Browser_Logos_And_Icons_Round_And_Blue.aspx" class="more" target="_blank" title="Why are all browser logos and icons round (and blue)?"&gt;Why are all browser logos and icons round (and blue)?&lt;/a&gt;: 8 likes on the button vs. 3 shares (me, A, unknown), 4 likes (A, B, C, D) on my share, 1 like on A's share - 8:8&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stritar.net/Post/Arthur_C_Clarke_Envisioning_The_World_Wide_Web_In_1968.aspx" class="more" target="_blank" title="Arthur C. Clarke envisioning the World Wide Web in 1968"&gt;Arthur C. Clarke envisioning the World Wide Web in 1968&lt;/a&gt;: 19 likes on the button vs. 8 shares (me, 7 unknown), 4 likes (A, B, C, D) and 2 comments (C, me) on my share, other interactions unknown - 19: 14 + x
&lt;li&gt;&lt;a href="http://stritar.net/Post/Neolab_In_2009.aspx" class="more" target="_blank" title="Neolab in 2009"&gt;Neolab in 2009&lt;/a&gt;: 19 likes on the button vs. 1 share (me), 9 likes (A - I), 8 comments (A, 2 x me, J - M) - 19:18&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Even though there are some differences, I still think the explanation is more than satisfactory and if I'm right, this fact alone probably makes it worth implementing anywhere. Besides, the Like button supposedly produces &lt;a href="http://mashable.com/2010/06/13/facebook-like-increases-blog-referral-traffic/"  class="more" target="_blank" title="Facebook 'Like' Increases Referral Traffic to Blogs by 50%"&gt;more traffic&lt;/a&gt; on sites and blogs using it, which will definitely be an interesting statistic to monitor. The only sad thing about is that I had to like (and unlike) all my previous blog posts to activate the count (taking some time and producing an empty Facebook profile), and it turns out sometimes the numbers don't load correctly because of unknown reasons.&lt;/p&gt;

&lt;p&gt;My fascination with the little widget doesn't mean Facebook is off the hook from my side. As useful as the Like button may be for companies, publishers and bloggers, it probably isn't that good for the users and their privacy. Facebook should build a fair and transparent strategy covering these issues, because it becoming Big Brother surely isn't that promising for the people and the future of the World Wide Web, and more and more of us are aware of that. But taking a look from the other perspective and comparing it to similar sharing solutions, the Facebook Like button is pure awesomeness.&lt;/p&gt;
&lt;p&gt;UPDATE (27.5.2011): Ever since Facebook started with the &lt;a href="http://mashable.com/2011/02/27/facebook-like-button-takes-over-share-button-functionality/" class="more" target="_Blank" title="Facebook Like Button Takes Over Share Button Functionality"&gt;unification of the Like and Share buttons&lt;/a&gt;, this behavior seems to have vanished. But it was fun while it lasted.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;UPDATE (1.11.2011): Silly me. The behavior is still there, but I've started posting to Facebook using an &lt;a href="http://stritar.net/Post/The_Impact_Of_Hyperlinks_Toolbars_And_Url_Shorteners_On_Google_Analytics.aspx" class="more" target="_Blank" title="The impact of hyperlinks, toolbars and URL shorteners on Google Analytics"&gt;url shortener&lt;/a&gt;, which messes up the global like count. I guess it's a trade-off between better measurement and more likes displayed on your post.&lt;/p&gt;</description><link>http://stritar.net/Post/The_Awesomeness_Of_The_Facebook_Like_Button.aspx</link></item><item><title>The impact of hyperlinks, toolbars and URL shorteners on Google Analytics</title><pubDate>Tue, 09 Mar 2010 18:51:45 GMT</pubDate><description>&lt;p&gt;In the past few weeks I've done an extended analysis of visits on &lt;a href="http://stritar.net/Projects/Chronolog.aspx" class="more" title="Stritar's chronolog" target="_blank"&gt;my blog&lt;/a&gt;, which made me wonder how the super fancy new web gadgets and features influence Google Analytics and traffic reports. By these new gadgets I mean the nowadays very popular &lt;a href="http://en.wikipedia.org/wiki/URL_shortener" class="more" target="_blank" title="URL Shortening"&gt;URL shorteners&lt;/a&gt;, such as tinyurl or bit.ly, and the annoying inside-browser toolbars, used by Digg, Stumbleupon, Google images and other services. These inventions made me wonder, as well as probably many other bloggers, web developers and marketers do - are these things messing up the traffic statistics? To be sure, I had to try it out by myself and found out the following: No, they do not. Or better put, Google is smart enough to know what's happening.&lt;/p&gt;
&lt;h2&gt;The methodology&lt;/h2&gt;
&lt;p&gt;Google Analytics and other statistical software is based on combining the user agent (operating system, browser), IP and &lt;a href="http://www.cookiecentral.com/c_concept.htm" class="more" target="_blank" title="The Cookie Concept"&gt;browser cookies&lt;/a&gt; to calculate visits on a site. While others are captured for different information, cookies are still the base of elementary &lt;a href="http://www.squidoo.com/webmetrics" class="more" target="_blank" title="Web Metrics"&gt;web metrics&lt;/a&gt;, so it's crucial to understand them and have them under control. I did just that each time I did a test – clean Google's cookies, close the browser, open the browser, check it out. I made a &lt;a href="http://stritar.net/Post/This_Is_A_Hidden_Post.aspx" class="more" target="_blank" title="This is a hidden post"&gt;hidden post&lt;/a&gt; for testing, one which definitely wouldn't get any other referrers other than me, besides using some old and already forgotten posts I made on Digg months ago and some indexed by Google images. Then I started testing different cases, which would help me understand the behavior of all the above mentioned things.&lt;/p&gt;

&lt;h2&gt;Referring vs. navigating&lt;/h2&gt; 
&lt;p&gt;The first interesting thing I found out was that Google Analytics knows the difference between clicking on a link and manually navigating to a page by entering the URL in the browser. In the first case it recognizes the referrer, and in other one it doesn't (it is displayed as google / organic in the statistics). This is caused by the referrer information captured in the &lt;a href="http://en.wikipedia.org/wiki/HTTP_referrer" class="more" target="_blank" title="HTTP referrer"&gt;HTML header&lt;/a&gt; of every web page. So, if somebody manually enters your web page's address after seeing a link on Facebook, Facebook won't be counted as a referrer, but if they click on the link, it will be.&lt;/p&gt;

&lt;h2&gt;Url shorteners&lt;/h2&gt;
&lt;p&gt;I tested a few url shorteners, tinyurl, is.gd, skrci.me and the one Twitter automatically uses (bit.ly). I found out that the ones I manually created and clicked on them inside the URL shortening site showed this site as the referrer. But in the case of Twitter, on which I made a tweet, clicked on the link and deleted it within seconds, Twitter was correctly shown as the referrer, even though the click first went to bit.ly and than to my blog. I went further, created a new shortened URL, put it in a hyperlink on a server, clicked on it, and again, this server was shown as the referrer. Because url shorteners only make the redirect, the click is keeping the original referrer, which enables the referrers to be fully captured, even if they go through the shortened URL.&lt;/p&gt;

&lt;h2&gt;Toolbars&lt;/h2&gt;
&lt;p&gt;I use a few Web 2.0 services to promote my blog, and it's been a trend for them to provide toolbars, which display the target site inside the parent site. The main reason for them doing this is to keep users inside their site, and in my opinion, it's annoying and it sucks. But at least it doesn't influence the statistics. I tested this behavior on Digg toolbar and on Google images (without removing or closing the toolbar) and in both cases it worked perfectly – the referrer was correctly recognized. After all, upon technically examining both cases, it's only an iframe opening the designated page below the toolbar, so the target page actually does fully open anyways.&lt;/p&gt;
 

&lt;h2&gt;Proof&lt;/h2&gt;
&lt;p&gt;The screenshots of Google Analytics below support my theory. In the case of the hidden post, I managed to create the following situations which prove my discussed behaviour of hyperlinks and URL shorteners:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;I clicked on a link from neolab.si (one referrer from neolab.si),&lt;/li&gt;
&lt;li&gt;I manually navigated to the post from neolab.si twice (by entering the url in the browser while being on neolab.si), shown as google / organic,&lt;/li&gt;
&lt;li&gt;I clicked on a shortened link on the is.gd site, later I pasted another is.gd short url directly to my browser (two referrers from is.gd),&lt;/li&gt;
&lt;li&gt;I clicked on a shortened link on the tinyurl site (a referrer from tinyurl),&lt;/li&gt;
&lt;li&gt;I clicked on the automatically bit.ly generated url in a tweet (a referrer from Twitter),&lt;/li&gt;
&lt;li&gt;I generated the skrci.me short url, put it in a hyperlink on localhost and clicked on it (a referrer from localhost).&lt;/li&gt;
&lt;/ul&gt;
&lt;img src="http://stritar.net/upload/Images/Analytics1.gif"&gt;&lt;br&gt;&lt;br&gt;

&lt;p&gt;The second report displays the referrers from Digg and Google images, both services using toolbars. On the first occasion, I opened two different posts inside the Digg toolbar, and on the second, two posts inside Google images toolbar, all of them without closing the toolbar (I went for one post twice, to check out if a session is also created and found out it is). As you can see, the referrers are all there and the toolbars don't corrupt the data in any way.&lt;/p&gt;&lt;br&gt;
&lt;img src="http://stritar.net/upload/Images/Analytics2.gif"&gt;&lt;br&gt;&lt;br&gt;
&lt;img src="http://stritar.net/upload/Images/Analytics3.gif"&gt;&lt;br&gt;&lt;br&gt;

&lt;h2&gt;Conclusion&lt;/h2&gt;
&lt;p&gt;Look like we don't need to worry about these things anymore. I'm actually quite surprised about finding out the mentioned things work like a charm, not influencing the analysis and statistics in any case. From now on, there can be no more blaming these new features and gadgets on low traffic and weird referrers. The World Wide Web has been well planned and Google Analytics is able to know everything, so if your statistics seem weird, there is probably more chance that you are the one who's wrong.&lt;/p&gt;</description><link>http://stritar.net/Post/The_Impact_Of_Hyperlinks_Toolbars_And_Url_Shorteners_On_Google_Analytics.aspx</link></item></channel></rss>