<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Kartones Blog</title><link>http://kartones.net/blogs/kartones/default.aspx</link><description>Be the change you wanna see in this world</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Build: 20611.960)</generator><creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/Kartones" type="application/rss+xml" /><feedburner:emailServiceId>Kartones</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site, subject to copyright and fair use.</feedburner:browserFriendly><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><title>Kartones.Net CS2007 Addon Pack 1.3.2: Lightweight + Visual Tags</title><link>http://feedproxy.google.com/~r/Kartones/~3/OBlU1KL3Sik/kartones-net-cs2007-addon-pack-1-3-2-lightweight-visual-tags.aspx</link><pubDate>Sun, 12 Jul 2009 19:44:22 GMT</pubDate><guid isPermaLink="false">b86c0850-82e5-42ed-a9d8-bde9e8f94ec1:50201</guid><dc:creator>Kartones</dc:creator><slash:comments>0</slash:comments><comments>http://kartones.net/blogs/kartones/archive/2009/07/12/kartones-net-cs2007-addon-pack-1-3-2-lightweight-visual-tags.aspx#comments</comments><description>&lt;p&gt;In &lt;a href="http://kartones.net/blogs/kartones/archive/2009/06/22/kartones-net-cs2007-addon-pack-1-3-1-released.aspx"&gt;my last release&lt;/a&gt; of &lt;a href="http://kartones.net/files/folders/communityserver/entry2400.aspx"&gt;this Community Server 2007 pack&lt;/a&gt; I added a lightweight list of all posts, but it wasn’t the only optimization I had in mind to do small speed increases on blog page loads. Two new controls I’ve just finished are a readonly tag list, and a “visual tag” list, which I’ll explain in detail.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;WeblogPostTagList&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This control is just a simplified, readonly version of the default one that CS2007 ships. I have stripped down all javascript the inline tag editor uses and all related functionality, creating a smaller and faster one that just renders the list of tags/categories of a post (or a post list, just like the normal tag list did).&lt;/p&gt;  &lt;p&gt;Features:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Readonly: To edit the tags you must edit the post. In exchange, no CS/ASP.NET javascript is injected, so the weight of the page and the number of http requests is decreased considerably. &lt;/li&gt;    &lt;li&gt;Prefix can be specified: By default it prepends the typical “Filed under: “, but you can specify whatever you want (HTML tags included). &lt;/li&gt;    &lt;li&gt;If the post has no tags, nothing is rendered. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The syntax is almost the same as with the CS one:, with the addition of the new property:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;KartonesNet:WeblogPostTagList&lt;/font&gt;&lt;font color="#ff0000"&gt; runat&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;server&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; TagListPrefixLiteral&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;Tags: &amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; Tag&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;Div&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; CssClass&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;em&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;For example this blog now uses it.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;WeblogPostVisualTagList&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This control uses the previous one as the base, but what it does is, instead of rendering text tags, renders images based on lowercasing and replacing spaces by underscores of the tag name (for example “XBox 360” would become “xbox_360.xxx”.&lt;/p&gt;  &lt;p&gt;Features:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Readonly: No JS injected. &lt;/li&gt;    &lt;li&gt;TagImagesURL: Property to specify the url containing the tag images. &lt;/li&gt;    &lt;li&gt;ImagesExtension: Property to specify the extension of the image tags. &lt;/li&gt;    &lt;li&gt;TagListPrefixLiteral: Property to specify the tag list prefix (just like the other control). &lt;/li&gt;    &lt;li&gt;TagAliases: To properly display the alt/title attributes of the &amp;lt;img&amp;gt;, you can specify a list of aliases (even multiple ones for a tag). Example: &lt;em&gt;360,xbox360=XBox 360;wii=Nintendo Wii&lt;/em&gt; &lt;/li&gt;    &lt;li&gt;If the post has no tags, nothing is rendered. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Example of how to use it:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;KartonesNet:WeblogPostVisualTagList&lt;/font&gt;&lt;font color="#ff0000"&gt; runat&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;server&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; Tag&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;Div&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; CssClass&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;em&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000"&gt;     &lt;br /&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; TagImagesURL&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;=&amp;quot;http://mydomain.com/images/tags/&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; ImagesExtension&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;png&amp;quot;&lt;/font&gt;&lt;/font&gt;&lt;font color="#ff0000"&gt;     &lt;br /&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; TagListPrefixLiteral&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" face="Courier New"&gt;=&amp;quot;&amp;lt;b&amp;gt;Tags&amp;lt;/b&amp;gt;: &amp;quot;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#ff0000"&gt;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; TagAliases&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;360,xbox360=XBox 360;wii=Nintendo Wii&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt;&amp;#160;&lt;/font&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;And a real example of how it looks:&lt;/p&gt;  &lt;p&gt;&lt;img title="visual tags example" alt="visual tags example" src="http://kartones.net/images_posts/kartonesblog/visualtags_sample.jpg" /&gt;&lt;/p&gt;  &lt;p&gt;This all happened because compressing ASP.NET and CS Javascripts is no easy task, and in order to do it you have to use ASP.NET AJAX (which I didn’t wanted to use either). But my battle of speeding up this blog as much as possible is still ongoing (I want to do one additional task :)&lt;/p&gt;&lt;img src="http://kartones.net/aggbug.aspx?PostID=50201" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/K0neXnAeXefXiC-bFCHK6pwX3s4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K0neXnAeXefXiC-bFCHK6pwX3s4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/K0neXnAeXefXiC-bFCHK6pwX3s4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/K0neXnAeXefXiC-bFCHK6pwX3s4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=OBlU1KL3Sik:WkvvXzw_tYw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=OBlU1KL3Sik:WkvvXzw_tYw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=OBlU1KL3Sik:WkvvXzw_tYw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=OBlU1KL3Sik:WkvvXzw_tYw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=OBlU1KL3Sik:WkvvXzw_tYw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=OBlU1KL3Sik:WkvvXzw_tYw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Kartones/~4/OBlU1KL3Sik" height="1" width="1"/&gt;</description><category domain="http://kartones.net/blogs/kartones/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://kartones.net/blogs/kartones/archive/tags/.NET/default.aspx">.NET</category><category domain="http://kartones.net/blogs/kartones/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://kartones.net/blogs/kartones/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Kartones.Net/default.aspx">Kartones.Net</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Blogging/default.aspx">Blogging</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Javascript/default.aspx">Javascript</category><feedburner:origLink>http://kartones.net/blogs/kartones/archive/2009/07/12/kartones-net-cs2007-addon-pack-1-3-2-lightweight-visual-tags.aspx</feedburner:origLink></item><item><title>How we Europeans get cheated with videogame prices</title><link>http://feedproxy.google.com/~r/Kartones/~3/w7d6u-9JY-Y/how-we-europeans-get-cheated-with-videogame-prices.aspx</link><pubDate>Sun, 12 Jul 2009 00:26:06 GMT</pubDate><guid isPermaLink="false">b86c0850-82e5-42ed-a9d8-bde9e8f94ec1:50197</guid><dc:creator>Kartones</dc:creator><slash:comments>3</slash:comments><comments>http://kartones.net/blogs/kartones/archive/2009/07/12/how-we-europeans-get-cheated-with-videogame-prices.aspx#comments</comments><description>&lt;p&gt;This is going to be a small rant post not related to development, but I just couldn’t resist to talk about this semi-fraud.&lt;/p&gt;  &lt;p&gt;Everybody who plays videogames (either on PC or on console) knows that in Europe prices are “a bit higher” and games usually come “a bit later”). Well, thanks to my friend Lobo666 (who told me about &lt;a href="http://userscripts.org/scripts/show/50989"&gt;this Greasemonkey script&lt;/a&gt;) we can see “real-time proofs” of it.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.steampowered.com"&gt;Steam&lt;/a&gt; is Valve’s digital distribution system, widely used and very nice for a lot of things. When it has deals, some of them are pretty attractive, but other times… how can we be sure they are even worthy of being called deals?&lt;/p&gt;  &lt;p&gt;Here’s an example:&lt;/p&gt;  &lt;p&gt;&lt;img title="screenshot" alt="screenshot" src="http://kartones.net/images_posts/kartonesblog/steam_comparison_01.jpg" /&gt; &lt;/p&gt;  &lt;p&gt;So, compared with the US price, this weekend it is a real deal to buy GRID… but then why on the United Kingdom they have an even lower price? Maybe some special deal? Anyway, we can see that Steam’s currency maths are quite bad, because 1€ is not 1$. A miskate?&lt;/p&gt;  &lt;p&gt;I don’t think so…&lt;/p&gt;  &lt;p&gt;&lt;img title="screenshot" alt="screenshot" src="http://kartones.net/images_posts/kartonesblog/steam_comparison_02.jpg" /&gt; &lt;/p&gt;  &lt;p&gt;Now this is something we could even call fraud. Not only prices are higher on europe using the sadly so common “1$ = 1€”, but here we even get an increase of 10 additional euros! &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Sadly this not only happens on Steam. The average price for Overlord on PC goes from 35€ to 45€ on Spain depending on the store/website. Only a few online sites really offer more or less correctly exchanged prices (around 28€ is the correct exchange for today).&lt;/p&gt;  &lt;p&gt;And now, you can even buy online on a few sites (but they are growing) serial numbers for between 10-20€. Unused ones, perfectly valid. You have to download the game from anywhere else (probably a Torrent site), but you plug your serial number and voila. This is possible because in some places like Rusia or Asia prices are much lower (instead of higher as in Europe), and yes, it is perfectly legal (although companies are now starting to get worried about this &lt;strike&gt;problem&lt;/strike&gt; situation, same as they are about second-hand games and rentals).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;So, I’m not saying piracy is the answer to this cheating of prices, but I am definetly making a call to search for cheaper alternatives than just a local store or Steam if you have the feeling a game is a bit overpriced. There are plenty of options without entering the ilegal sector.&lt;/p&gt;&lt;img src="http://kartones.net/aggbug.aspx?PostID=50197" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ah_0v-Ui7UvoK00MVSoDmTOPxFk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ah_0v-Ui7UvoK00MVSoDmTOPxFk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ah_0v-Ui7UvoK00MVSoDmTOPxFk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ah_0v-Ui7UvoK00MVSoDmTOPxFk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=w7d6u-9JY-Y:1_6nq7QUoiw:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=w7d6u-9JY-Y:1_6nq7QUoiw:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=w7d6u-9JY-Y:1_6nq7QUoiw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=w7d6u-9JY-Y:1_6nq7QUoiw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=w7d6u-9JY-Y:1_6nq7QUoiw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=w7d6u-9JY-Y:1_6nq7QUoiw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Kartones/~4/w7d6u-9JY-Y" height="1" width="1"/&gt;</description><category domain="http://kartones.net/blogs/kartones/archive/tags/Videogames/default.aspx">Videogames</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Offtopic/default.aspx">Offtopic</category><feedburner:origLink>http://kartones.net/blogs/kartones/archive/2009/07/12/how-we-europeans-get-cheated-with-videogame-prices.aspx</feedburner:origLink></item><item><title>Five basic concepts of scalability</title><link>http://feedproxy.google.com/~r/Kartones/~3/lTqSQIN8pXg/five-basic-concepts-of-scalability.aspx</link><pubDate>Mon, 06 Jul 2009 00:08:58 GMT</pubDate><guid isPermaLink="false">b86c0850-82e5-42ed-a9d8-bde9e8f94ec1:50179</guid><dc:creator>Kartones</dc:creator><slash:comments>0</slash:comments><comments>http://kartones.net/blogs/kartones/archive/2009/07/06/five-basic-concepts-of-scalability.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;: I’ve been only working for few months in high-scalability stuff so don’t expect super-secret techniques or expert advices. It is just a newbie 5-point basic list based on what I’ve learned and read about this subject up to now ;)&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Don’t touch the data layer&lt;/strong&gt;. No matter what, try to avoid performing any SELECT query, any XML reading, except for the first time. ASP.NET page caching, XML caching or data caching (like for example PHP’s &lt;a href="http://www.danga.com/memcached/"&gt;memcached&lt;/a&gt; or Microsoft’s &lt;a href="http://msdn.microsoft.com/en-us/data/cc655792.aspx"&gt;Velocity&lt;/a&gt;). Avoid unnecesary querys: 15 queys on a page multiplied by millions equals insta-death against a DB-only data layer. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Size matters&lt;/strong&gt;. Every KB counts when daily pageviews go crazy. Compress Javascripts, CSS, output HTML, images, JSON data, DB table fields… everything you can. Remove all unnecessary data. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Design for redundancy, balancing, partitioning, and implement failover architectures&lt;/strong&gt;. *** happens, no matter how good the system is. So better to be prepared to apply countermeasures or at least soft failures. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Servers are no magical devices with unlimited resources&lt;/strong&gt;. Skipping coding errors like memory leaks, big traffic sites need to be as optimum as possible with everything. If you use heavyweight objects here and there, think about refactoring them to smaller ones (or detach the most important and frecuently used data from the “extra” data, as when normalizing DB schemas). &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Design for scalability&lt;/strong&gt;. Database partitioning, distributed web services, load balancers, archieving… We all hate twitter’s fail whale, but having millions of twitts per day &lt;a href="http://natishalom.typepad.com/nati_shaloms_blog/2008/05/twitter-as-an-e.html"&gt;requires a lot of stuff underneath&lt;/a&gt; (and that’s just an example, there are many more out there). &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;And as an extra, talking about web, &lt;strong&gt;prepare to enter the hell of browser incompatibilities, limitations and hacks&lt;/strong&gt;. Desktop development is a piece of cake compared to any medium-complex web project.&lt;/p&gt;&lt;img src="http://kartones.net/aggbug.aspx?PostID=50179" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3FmNtrWbFpFBl1WpYsz1LagNOoI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3FmNtrWbFpFBl1WpYsz1LagNOoI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3FmNtrWbFpFBl1WpYsz1LagNOoI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3FmNtrWbFpFBl1WpYsz1LagNOoI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=lTqSQIN8pXg:4sD0S4rGTig:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=lTqSQIN8pXg:4sD0S4rGTig:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=lTqSQIN8pXg:4sD0S4rGTig:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=lTqSQIN8pXg:4sD0S4rGTig:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=lTqSQIN8pXg:4sD0S4rGTig:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=lTqSQIN8pXg:4sD0S4rGTig:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Kartones/~4/lTqSQIN8pXg" height="1" width="1"/&gt;</description><category domain="http://kartones.net/blogs/kartones/archive/tags/Patterns+_2600_amp_3B00_+Practices/default.aspx">Patterns &amp;amp; Practices</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Scalability/default.aspx">Scalability</category><feedburner:origLink>http://kartones.net/blogs/kartones/archive/2009/07/06/five-basic-concepts-of-scalability.aspx</feedburner:origLink></item><item><title>Kartones.Net CS2007 Addon Pack 1.3.1 Released</title><link>http://feedproxy.google.com/~r/Kartones/~3/t9vVLt0tVKo/kartones-net-cs2007-addon-pack-1-3-1-released.aspx</link><pubDate>Mon, 22 Jun 2009 18:48:00 GMT</pubDate><guid isPermaLink="false">b86c0850-82e5-42ed-a9d8-bde9e8f94ec1:50163</guid><dc:creator>Kartones</dc:creator><slash:comments>0</slash:comments><comments>http://kartones.net/blogs/kartones/archive/2009/06/22/kartones-net-cs2007-addon-pack-1-3-1-released.aspx#comments</comments><description>&lt;p&gt;I’ve just released &lt;a href="http://kartones.net/files/folders/communityserver/entry2400.aspx"&gt;the 1.3.1 version of my Community Server 2007 addon pack&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Small incremental release because I only added a small new component, &lt;b&gt;AllWeblogPostsList&lt;/b&gt;, which doesn’t uses paging and has a few internal optimizations to retrieve &lt;b&gt;all&lt;/b&gt; blog posts from a given blog (the one in which you place it).&lt;/p&gt;  &lt;p&gt;I made it because I wanted to have a full one-page post archive without additional uneeded stuff for one of our blogs.&lt;/p&gt;  &lt;p&gt;Using it is fairly easy (read the included txt), just like the normal blog post archive from CS2007 (and allowing any formatting you want):&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;KartonesNet:AllWeblogPostsList&lt;/font&gt;&lt;font color="#ff0000"&gt; id&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;EntryItems&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; Runat&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;server&amp;quot;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;HeaderTemplate&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;ul&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;HeaderTemplate&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;ItemTemplate&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;CSBlog:WeblogPostData&lt;/font&gt;&lt;font color="#ff0000"&gt; ID&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;WeblogPostData&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; runat&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;server&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; Property&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;Subject&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; LinkTo&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;Post&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt; Tag&lt;/font&gt;&lt;font color="#0000ff"&gt;=&amp;quot;li&amp;quot;&lt;/font&gt;&lt;font color="#ff0000"&gt;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;ItemTemplate&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&lt;font face="Courier New"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#800000"&gt;FooterTemplate&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;ul&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;FooterTemplate&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000"&gt;     &lt;br /&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#800000"&gt;KartonesNet:AllWeblogPostsList&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;You can see a live example &lt;a href="http://kartones.net/blogs/viciocomomonos/postarchives.aspx"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;I’m taking small vacations in a few days so more small things that I have in mind related to Kartones.Net and Community Server 2007 will have to wait. Until then, may the force of C# be with you!&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Update&lt;/b&gt;: Fixed a small error in the example, inside the &amp;lt;ul&amp;gt; should be only &amp;lt;li&amp;gt; elements, doh! (&amp;gt;_&amp;lt;) &lt;br /&gt;&lt;/p&gt;&lt;img src="http://kartones.net/aggbug.aspx?PostID=50163" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/FmKVWRXiP5_knCkhIX8fPkDEKPI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FmKVWRXiP5_knCkhIX8fPkDEKPI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/FmKVWRXiP5_knCkhIX8fPkDEKPI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/FmKVWRXiP5_knCkhIX8fPkDEKPI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=t9vVLt0tVKo:m-1crFpjUyo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=t9vVLt0tVKo:m-1crFpjUyo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=t9vVLt0tVKo:m-1crFpjUyo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=t9vVLt0tVKo:m-1crFpjUyo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=t9vVLt0tVKo:m-1crFpjUyo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=t9vVLt0tVKo:m-1crFpjUyo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Kartones/~4/t9vVLt0tVKo" height="1" width="1"/&gt;</description><category domain="http://kartones.net/blogs/kartones/archive/tags/.NET/default.aspx">.NET</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Kartones.Net/default.aspx">Kartones.Net</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Community+Server/default.aspx">Community Server</category><feedburner:origLink>http://kartones.net/blogs/kartones/archive/2009/06/22/kartones-net-cs2007-addon-pack-1-3-1-released.aspx</feedburner:origLink></item><item><title>Windows Mobile and iPhone thoughts</title><link>http://feedproxy.google.com/~r/Kartones/~3/5X2Ig5aliuE/windows-mobile-and-iphone-thoughts.aspx</link><pubDate>Thu, 18 Jun 2009 21:52:19 GMT</pubDate><guid isPermaLink="false">b86c0850-82e5-42ed-a9d8-bde9e8f94ec1:50146</guid><dc:creator>Kartones</dc:creator><slash:comments>4</slash:comments><comments>http://kartones.net/blogs/kartones/archive/2009/06/18/windows-mobile-and-iphone-thoughts.aspx#comments</comments><description>&lt;p&gt;Since my shift of job, I’m “living” on a multi-platform environment (in fact, I am part of the minority of Windows users), and a lot of people has iPhones. Add to it some friends who have them too, and it’s impossible to avoid looking and chatting about them. So this post is some sort of personal comparison and thoughts about iPhone and Windows Mobile.&lt;/p&gt;  &lt;p&gt;I’ve been using Windows Mobile since I think 8 years (the old HPs with 4 colors and a terrible battery), so I have some knowledge of their evolution.&lt;/p&gt;  &lt;p&gt;Windows Mobile has always been very similar. Apart from higher resolution &amp;quot;cousins” (which haven’t extended too much to the market, maybe because of the higher battery consumption, maybe because a lot of applications don’t support non standard 320x240 or 240x320 resolutions), most core changes habe been related either to internal aspects (less hangs/errors, better multithreading, lower battery consumption, smaller WM cores…) or to integrate Windows Mobile with phones (but then, not so good, because Smartphones are just non-touch screens and fewer buttons, and at least with WM5.0 Visual Studio had yet problems differentiating them).&lt;/p&gt;  &lt;p&gt;So we can say that Windows Mobile evolves very slowly, except on from the developers perspective, because since .NET Compact Framework appeared, creating apps has been simplified and extended a lot (currently we have .NET CF versions 2.0 and 3.5, although are not comparable to normal .NET Framework ones).    &lt;br /&gt;And with P/Invoke we always have the option to access all the APIs non available from managed code.&lt;/p&gt;  &lt;p&gt;But Windows Mobile has a really big burden that Microsoft seems to avoid constantly: Usability. &lt;/p&gt;  &lt;p&gt;Using a smartphone is far away from using a low-cost Nokia, and miles away from using an iPhone. And the PDAs, phone or not, can’t be properly used without the pen, no matter how much effort companies like HTC put into creating custom UI; they are just applications over the Windows GUI and you end having to use it for any non-trivial task.&lt;/p&gt;  &lt;p&gt;But then came the iPhone and revolution arised. A semi-perfect UI, impressive look&amp;amp;feel, fast responses, very decent battery, big buttons and on-screen keyboard to avoid needing a pen…&lt;/p&gt;  &lt;p&gt;So my first question is: Why Microsoft doesn’t improves drastically the UI of Windows Mobile? After all those years it should have been a logical advance. Now, it is a requisite.&lt;/p&gt;  &lt;p&gt;Windows Mobile 6.5 has indeed improved it, but both internet articles and friends told me that it is “the Windows Vista of PDAs”: Pretty but slow and a resource hog. So either you buy a new non-cheap phone with a fast &amp;quot;cpu, or forget about it. Do we have to wait now until WM7.0 to “fix” resource usage?&lt;/p&gt;  &lt;p&gt;Apple is improving iPhone OS quite vastly, adding tons of new APIs and radical unpresent functionalities (like push application messages). Why MS don’t does something similar, at least with the things it most needs?&lt;/p&gt;  &lt;p&gt;The iPhone has hardware accelerated graphics built-in, and a growing list of impressive games. Windows Mobile has had touch screens since they appeared, and until the Nintendo DS came out, we didn’t had more than one or two games that implemented radically different ways of interacting with a pen on a touch screen.    &lt;br /&gt;Some PDAs even had a now defunct NVidia 3D accelerator. And yet, I only play two games or ScummVM from my PDA, because the rest of games suck.&lt;/p&gt;  &lt;p&gt;Why so much resource, innovation (at the past) and time wasted for nothing?&lt;/p&gt;  &lt;p&gt;The iPhone has some serious lacks, like not supporting background applications. Windows Mobile has always had them, and it is so easy to develop one. And yet, Appe launches a “patch” (push messages) and I’m sure it will make the iPhone shine even more.&lt;/p&gt;  &lt;p&gt;I am tired of phone company spam over SMS, so I have in mind developing an SMS-spam filter (a background application that checks new SMS as they arrive and using a black-list deletes them automatically). That kind of application can’t be done for the iPhone, unless Apple decides to do it (or you jailbreak it, because I’ve seen that kind of apps on a unlocked iPhone).&lt;/p&gt;  &lt;p&gt;We have Windows Mobile emulators, APIs, third party components, native DLLs, ActiveSync APIs, PocketOutlook, IRDA, GPRS, 3G, Wireless, Bluetooth, SMS, MMS, push mail… tons of options at our disposal. And all of them lightly used.&lt;/p&gt;  &lt;p&gt;Just look at the browsers… iPhones Safari is almost perfect, it only lacks Flash support, but renders webpages perfectly, allows zoom and works like a charm. Is almost equal as using the desktop Safari.   &lt;br /&gt;Windows Mobile 6 has a crappy “Mobile Internet Explorer” that sucks (in fact works like Internet Explorer 3.0, doesn’t even supports a decent javascript or CSS 2.0), so we have to either rely on Opera Mobile (which works fine, but needs a lot of memory and is slow and not as usable as Safari) or wish that Mobile Firefox comes out soon. Why doesn’t Microsoft improves once and for all Mobile Internet Explorer? (And no, Pocket IE6 is not much of an improvement, it is only good compared with the current PocketIE).&lt;/p&gt;  &lt;p&gt;Apple has some dictatorial restrictions: App store apps having to be approved, SDK only for Mac and limited (but growing a lot in new APIs), no option of other browsers or applications already present at the iPhone OS… But it works! At least what they provide is really good, enough for the majority of the users!&lt;/p&gt;  &lt;p&gt;I love having the option &lt;a href="http://kartones.net/blogs/kartones/archive/2007/08/25/net-compact-framework-gmail-contacts-importer.aspx"&gt;to develop my own applications&lt;/a&gt; for the devices I use, I like developing in C# for my HTC Touch. But the truth is that if in Spain Telefonica didn’t had the monopoly of iPhone distribution, I would probably switch from Windows Mobile to an iPhone, even not being able to develop my apps (or maybe yes, if Mac OS and the SDK works inside a VM…).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Palm is already dead because of their lack of innovation, and Windows Mobile took its market.    &lt;br /&gt;Blackberrys are widely extended for corporate use because they won’t be really nice, but they are usable and good for email.     &lt;br /&gt;If Microsoft doesn’t “awakes” and starts focusing on really improving Windows Mobile, they will lose their market share and user base and keep their PDA-Phones only for their employees and friends.&lt;/p&gt;  &lt;p&gt;And from my developer perspective, that would be a pity. Windows Mobile isn’t bad, it is just too desktop-like and needs to become a real phone-oriented OS. But Microsoft doesn’t seems to understand that, and is slowly going to the same path Palm went: slow and delayed improvement (not evolution). While iPhone is becoming a revolution.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: &lt;a href="http://bloggingabout.net/blogs/andries/archive/2009/05/05/from-windows-mobile-to-iphone.aspx"&gt;Here it is&lt;/a&gt; a very similar post to what I think of iPhone, but more deep as the author actually owns an iPhone and not has only played with them as I.&lt;/p&gt;&lt;img src="http://kartones.net/aggbug.aspx?PostID=50146" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/dQ42n0D_B_mxN3X7DGIWLYQ0O9g/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dQ42n0D_B_mxN3X7DGIWLYQ0O9g/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/dQ42n0D_B_mxN3X7DGIWLYQ0O9g/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/dQ42n0D_B_mxN3X7DGIWLYQ0O9g/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=5X2Ig5aliuE:QjDX21VYTAk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=5X2Ig5aliuE:QjDX21VYTAk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=5X2Ig5aliuE:QjDX21VYTAk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=5X2Ig5aliuE:QjDX21VYTAk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=5X2Ig5aliuE:QjDX21VYTAk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=5X2Ig5aliuE:QjDX21VYTAk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Kartones/~4/5X2Ig5aliuE" height="1" width="1"/&gt;</description><category domain="http://kartones.net/blogs/kartones/archive/tags/PocketPC/default.aspx">PocketPC</category><category domain="http://kartones.net/blogs/kartones/archive/tags/.NET+Compact+Framework/default.aspx">.NET Compact Framework</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Windows+Mobile+6/default.aspx">Windows Mobile 6</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Apple/default.aspx">Apple</category><category domain="http://kartones.net/blogs/kartones/archive/tags/iPhone/default.aspx">iPhone</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Internet+Explorer/default.aspx">Internet Explorer</category><feedburner:origLink>http://kartones.net/blogs/kartones/archive/2009/06/18/windows-mobile-and-iphone-thoughts.aspx</feedburner:origLink></item><item><title>Introducing KartonesNet.APIs.GoogleAnalyticsAPI</title><link>http://feedproxy.google.com/~r/Kartones/~3/1jgaTQ1wsSA/introducing-kartonesnet-apis-googleanalyticsapi.aspx</link><pubDate>Mon, 08 Jun 2009 07:30:16 GMT</pubDate><guid isPermaLink="false">b86c0850-82e5-42ed-a9d8-bde9e8f94ec1:50128</guid><dc:creator>Kartones</dc:creator><slash:comments>0</slash:comments><comments>http://kartones.net/blogs/kartones/archive/2009/06/08/introducing-kartonesnet-apis-googleanalyticsapi.aspx#comments</comments><description>&lt;p&gt;This weekend, in my spare time, I’ve finally achieved one thing I wanted since some time: Fully automating &lt;a href="http://kartones.net/sitestats.aspx"&gt;the Site Stats of Kartones.Net&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Previously, I had to manually update the page with the current data each month, plus exporting some Google Analytics reports in PDF. As computers are supposed to exist to make our lives easier (although for developers is more of the opposite actualy :), I decided to use the &lt;a href="http://code.google.com/apis/analytics/docs/gdata/gdataDeveloperGuide.html"&gt;Google Analytics Data Export API&lt;/a&gt; (which as usual uses GData for retrieval of the information) and &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=130f7986-bf49-4fe5-9ca8-910ae6ea442c&amp;amp;DisplayLang=en"&gt;ASP.NET Chart Controls&lt;/a&gt; to create an automated and live stats page.&lt;/p&gt;  &lt;p&gt;As I had in mind publishing the class under my &lt;a href="http://kartones.net/files/folders/communityserver/entry2400.aspx"&gt;KartonesNet CS2007 Addon Pack&lt;/a&gt;, I’ve made some things in the code specifically to make it more customizable by anyone. But let’s get into how I’ve made it and how it works…&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Without entering into details of how GData works, as usual working with it when being authenticated we will make http request to specific urls and retrieve XML contents (in which we will have a list of &lt;font face="Courier New"&gt;&amp;lt;entry&amp;gt;&lt;/font&gt; elements). The requests have this format:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;https://www.google.com/analytics/feeds/data?ids=ga:&lt;strong&gt;&lt;font color="#ff0000"&gt;_ProfileID_&lt;/font&gt;&lt;/strong&gt;&amp;amp;dimensions=&lt;strong&gt;&lt;font color="#ff0000"&gt;_Dimensions_&lt;/font&gt;&lt;/strong&gt;&amp;amp;metrics=&lt;strong&gt;&lt;font color="#ff0000"&gt;_Metrics_&lt;/font&gt;&lt;/strong&gt;&amp;amp;sort=&lt;strong&gt;&lt;font color="#ff0000"&gt;_OrderBy_&lt;/font&gt;&lt;/strong&gt;&amp;amp;start-date=&lt;strong&gt;&lt;font color="#ff0000"&gt;_StartDate_&lt;/font&gt;&lt;/strong&gt;&amp;amp;end-date=&lt;strong&gt;&lt;font color="#ff0000"&gt;_EndDate_&lt;/font&gt;&lt;/strong&gt;&amp;amp;prettyprint=true&amp;amp;max-results=&lt;strong&gt;&lt;font color="#ff0000"&gt;_MaxResults_&lt;/font&gt;&lt;/strong&gt;&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;As we can see, the first parameter is a Profile ID, obtained after authentication. My API supports only &lt;a href="http://code.google.com/apis/analytics/docs/gdata/1.0/gdataProtocol.html#ClientLogin"&gt;ClientLogin&lt;/a&gt; (user &amp;amp; password, as usual *), but &lt;a href="http://code.google.com/apis/analytics/docs/gdata/1.0/gdataProtocol.html#Authenticating"&gt;there are another two methods&lt;/a&gt;. After authentication, we will receive an authorization token, which we will need to always specify in the headers of our Http Requests:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;request.Headers.Add(&amp;quot;Authorization: GoogleLogin auth=&amp;quot; + &lt;strong&gt;&lt;font color="#ff0000"&gt;sessionToken&lt;/font&gt;&lt;/strong&gt;);&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;The profile ID represents the “site” we want to get data about. If you don’t know the profile ID of your site, or only have one, don’t bother with it, if you call the API &lt;font face="Courier New"&gt;Login()&lt;/font&gt; method without ProfileID, it will get the first available one.&lt;/p&gt;  &lt;p&gt;Login with the API can’t be easier:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#000000"&gt;GoogleAnalyticsAPI googleAnalytics &lt;/font&gt;&lt;font color="#0000ff"&gt;= new &lt;/font&gt;&lt;font color="#000000"&gt;GoogleAnalyticsAPI()&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;;        &lt;br /&gt;bool &lt;/font&gt;&lt;font color="#000000"&gt;loginSuccess &lt;/font&gt;&lt;font color="#0000ff"&gt;= &lt;/font&gt;&lt;font color="#000000"&gt;googleAnalytics.Login(user, password)&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" face="Courier New"&gt;;      &lt;br /&gt;if &lt;/font&gt;&lt;font color="#000000" face="Courier New"&gt;(loginSuccess)      &lt;br /&gt;{       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ...&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;After authentication, we can make GData requests to gather data, by specifying &lt;a href="http://code.google.com/apis/analytics/docs/gdata/gdataReferenceDimensionsMetrics.html"&gt;dimensions and metrics&lt;/a&gt;. As the documentation is pretty self-explaining I won’t enter into details, just mentioning that it is important to check the &lt;a href="http://code.google.com/apis/analytics/docs/gdata/gdataReferenceDimensionsMetrics.html#validCombinations"&gt;valid combinations&lt;/a&gt; of them because you can have errors with given combinations.&lt;/p&gt;  &lt;p&gt;I have recreated for Kartones.Net some basic reports, like visits/pageviews, visitor OS, browser and language config, or a ‘Top 20 content pages’. There is a lot of room for imagination here, specially if you perform operations with the returned data.&lt;/p&gt;  &lt;p&gt;The API calls are very simple:&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;public string &lt;/font&gt;&lt;font color="#000000"&gt;GADataCall(&lt;/font&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;font color="#000000"&gt;[] Dimensions, &lt;/font&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;font color="#000000"&gt;[] Metrics, &lt;/font&gt;&lt;font color="#0000ff"&gt;string &lt;/font&gt;&lt;font color="#000000"&gt;OrderBy)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;I have not made enumerations for dimensions/metrics just in case Google extends it (and because they are a lot and I only needed a few for my reports), and the OrderBy parameter can be set to null/string.Empty if you don’t want ordering.&lt;/p&gt;  &lt;p&gt;Note: To specify a descending order, prepend a minus to the field, e.g.: &lt;font face="Courier New"&gt;-ga:pageviews&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;A few important things about the API calls to gather data:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;The date range of data to request is defined with the &lt;font face="Courier New"&gt;StartingDate&lt;/font&gt; and &lt;font face="Courier New"&gt;EndingDate&lt;/font&gt; properties of the &lt;font face="Courier New"&gt;GoogleAnalyticsAPI&lt;/font&gt; class. If not specified, they will set to retrieve from the past month up to yesterday (same day). &lt;/li&gt;    &lt;li&gt;The number of results is specified too with the property &lt;font face="Courier New"&gt;MaxResults&lt;/font&gt;. By default is 50. &lt;/li&gt;    &lt;li&gt;If running under ASP.NET, call results are cached automatically for the number of seconds specified in &lt;font face="Courier New"&gt;CacheExpirationTime&lt;/font&gt; (default: 300 secs). &lt;/li&gt;    &lt;li&gt;And most important, returned data from this call is not XML, but a formatted string. ¿How do we format that string?… &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;One thing I wanted is to allow customization of the results while keeping them small and light. My scenario was the web, but even in there I needed more than only “table formatting” with &amp;lt;tr&amp;gt; and &amp;lt;td&amp;gt;, so I created this small interface:&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;namespace &lt;/font&gt;&lt;font color="#000000" face="Courier New"&gt;KartonesNet.APIs      &lt;br /&gt;{       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#006400"&gt;/// &amp;lt;summary&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; /// Interface for implementing a Google Analytics data formatter         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;/summary&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;public interface &lt;/font&gt;&lt;/font&gt;&lt;font color="#000000" face="Courier New"&gt;IGoogleAnalyticsDataFormatter      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#006400"&gt;/// &amp;lt;summary&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// Tag to inject before each element         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;/summary&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;returns&amp;gt;Tag&amp;lt;/returns&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;string &lt;/font&gt;&lt;font color="#000000"&gt;PreElementTag()&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" face="Courier New"&gt;;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#006400"&gt;/// &amp;lt;summary&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// Tag to inject before each field of an element         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;/summary&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;returns&amp;gt;Tag&amp;lt;/returns&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;string &lt;/font&gt;&lt;font color="#000000"&gt;PreFieldTag()&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" face="Courier New"&gt;;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#006400"&gt;/// &amp;lt;summary&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// Tag to inject after each field of an element         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;/summary&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;returns&amp;gt;Tag&amp;lt;/returns&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;string &lt;/font&gt;&lt;font color="#000000"&gt;PostFieldTag()&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" face="Courier New"&gt;;      &lt;br /&gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#006400"&gt;/// &amp;lt;summary&amp;gt;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// Tag to inject after each element         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;/summary&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; /// &amp;lt;returns&amp;gt;Tag&amp;lt;/returns&amp;gt;         &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;string &lt;/font&gt;&lt;font color="#000000"&gt;PostElementTag()&lt;/font&gt;&lt;/font&gt;&lt;font color="#0000ff" face="Courier New"&gt;;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#000000" face="Courier New"&gt;}      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Very simple and customizable (you can simply return string.Empty on those values you don’t want to use). I provide three DataFormatters with the API:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;em&gt;GoogleAnalyticsCommaDataFormatter&lt;/em&gt;: A simple concatenation of fields via commas. Very useful for manipulating later data (with a simple &lt;font face="Courier New"&gt;string.split(‘,’)&lt;/font&gt;) &lt;/li&gt;    &lt;li&gt;&lt;em&gt;GoogleAnalyticsTableDataFormatter&lt;/em&gt;: Simple table formatter, adds &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt; structure. Note: It adds Community Server css classes too, so I recommend you to create another one without custom css classes. &lt;/li&gt;    &lt;li&gt;&lt;em&gt;GoogleAnalyticsTableWithLinkDataFormatter&lt;/em&gt;: The same as the previous one, but converting the first field of each data element/entry into a HREF tag (for the Top 20 content pages) and prepending the host url (‘http://Kartones.net’) to it. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This is an example call that uses all stuff (not much anyway):&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&lt;font color="#000000"&gt;googleAnalytics.DataFormatter &lt;/font&gt;&lt;font color="#0000ff"&gt;= new &lt;/font&gt;&lt;font color="#000000"&gt;GoogleAnalyticsTableDataFormatter()&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;;       &lt;br /&gt;&lt;/font&gt;&lt;font color="#000000"&gt;googleAnalytics.MaxResults &lt;/font&gt;&lt;font color="#0000ff"&gt;= &lt;/font&gt;&lt;font color="#800000"&gt;12&lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#0000ff"&gt;;       &lt;br /&gt;&lt;/font&gt;&lt;font color="#000000"&gt;osGAData &lt;/font&gt;&lt;font color="#0000ff"&gt;= &lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#000000"&gt;googleAnalytics.GADataCall(       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;new string&lt;/font&gt;&lt;font color="#000000"&gt;[] { &lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;ga:operatingSystem&amp;quot; &lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#000000"&gt;},       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#0000ff"&gt;new string&lt;/font&gt;&lt;font color="#000000"&gt;[] { &lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;ga:pageviews&amp;quot; &lt;/font&gt;&lt;/font&gt;&lt;font face="Courier New"&gt;&lt;font color="#000000"&gt;},       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;font color="#808080"&gt;&amp;quot;-ga:pageviews&amp;quot;&lt;/font&gt;&lt;font color="#000000"&gt;)&lt;/font&gt;&lt;font color="#0000ff"&gt;;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt; And not much else to add… Plugging the gathered data into the ASP.NET Charting Control as usual took more time for visual setup than for logic itself but was really easy, and as it has caching too, the resulting stats page loads pretty fast on subsequent calls (and not slow on the first one).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Here is a screenshot of how all this looks once finished (if you want to see it live, check &lt;a href="http://kartones.net/sitestats.aspx"&gt;the stats page&lt;/a&gt;):&lt;/p&gt;  &lt;p&gt;&lt;img title="The new Kartones.Net site stats" alt="The new Kartones.Net site stats" src="http://kartones.net/images_posts/kartonesblog/kartonesnet_newstats.png" /&gt;&lt;/p&gt;  &lt;p&gt;All that remains is &lt;a href="http://kartones.net/files/folders/communityserver/entry2400.aspx"&gt;grabbing the component&lt;/a&gt; and making your own reports!&lt;/p&gt;  &lt;p&gt;I hope the API proves useful, feel free to drop a comment with suggestions, problems or just thoughts about it :)&lt;/p&gt;&lt;img src="http://kartones.net/aggbug.aspx?PostID=50128" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/s657rp5flhHYfVmyDvmtS1SqUDU/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/s657rp5flhHYfVmyDvmtS1SqUDU/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/s657rp5flhHYfVmyDvmtS1SqUDU/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/s657rp5flhHYfVmyDvmtS1SqUDU/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=1jgaTQ1wsSA:3l9VBW9eqDY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=1jgaTQ1wsSA:3l9VBW9eqDY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=1jgaTQ1wsSA:3l9VBW9eqDY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=1jgaTQ1wsSA:3l9VBW9eqDY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=1jgaTQ1wsSA:3l9VBW9eqDY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=1jgaTQ1wsSA:3l9VBW9eqDY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Kartones/~4/1jgaTQ1wsSA" height="1" width="1"/&gt;</description><category domain="http://kartones.net/blogs/kartones/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://kartones.net/blogs/kartones/archive/tags/.NET/default.aspx">.NET</category><category domain="http://kartones.net/blogs/kartones/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Kartones.Net/default.aspx">Kartones.Net</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Community+Server/default.aspx">Community Server</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Google/default.aspx">Google</category><category domain="http://kartones.net/blogs/kartones/archive/tags/GData/default.aspx">GData</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Charting/default.aspx">Charting</category><feedburner:origLink>http://kartones.net/blogs/kartones/archive/2009/06/08/introducing-kartonesnet-apis-googleanalyticsapi.aspx</feedburner:origLink></item><item><title>KartonesNet CS2007 Addon Pack 1.2.1</title><link>http://feedproxy.google.com/~r/Kartones/~3/7zWItY-U_q0/kartonesnet-cs2007-addon-pack-1-2-1.aspx</link><pubDate>Sat, 06 Jun 2009 17:11:23 GMT</pubDate><guid isPermaLink="false">b86c0850-82e5-42ed-a9d8-bde9e8f94ec1:50127</guid><dc:creator>Kartones</dc:creator><slash:comments>0</slash:comments><comments>http://kartones.net/blogs/kartones/archive/2009/06/06/kartonesnet-cs2007-addon-pack-1-2-1.aspx#comments</comments><description>&lt;p&gt;I’ve just updated &lt;a href="http://kartones.net/files/folders/communityserver/entry2400.aspx"&gt;my Community Server 2007 addon pack&lt;/a&gt; to add support for &lt;a href="http://www.slideshare.net/"&gt;Slideshare&lt;/a&gt; presentations. The name of the component has changed to from &lt;strong&gt;GDocsSlideshowAddon&lt;/strong&gt; to &lt;strong&gt;SlideshowsAddon&lt;/strong&gt; so remember to update your CommunityServer.config file reflecting the change.&lt;/p&gt;  &lt;p&gt;Here is a sample embedded presentation:&lt;/p&gt;  &lt;p&gt;&lt;object style='margin:0px' width='425' height='355'&gt;&lt;param name='movie' value='http://static.slidesharecdn.com/swf/ssplayer2.swf?webstock-designing-for-sign-up-090305065126-phpapp01&amp;amp;rel=0' /&gt;&lt;param name='allowFullScreen' value='true'/&gt;&lt;param name='allowScriptAccess' value='always'/&gt;&lt;embed src='http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=webstock-designing-for-sign-up-090305065126-phpapp01&amp;amp;rel=0' type='application/x-shockwave-flash' allowscriptaccess='always' allowfullscreen='true' width='425' height='355'&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;img src="http://kartones.net/aggbug.aspx?PostID=50127" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0en-TXNiL3dz5TYeXEw53aDsUG8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0en-TXNiL3dz5TYeXEw53aDsUG8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0en-TXNiL3dz5TYeXEw53aDsUG8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0en-TXNiL3dz5TYeXEw53aDsUG8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=7zWItY-U_q0:Ab3x-uyIGVo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=7zWItY-U_q0:Ab3x-uyIGVo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=7zWItY-U_q0:Ab3x-uyIGVo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=7zWItY-U_q0:Ab3x-uyIGVo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=7zWItY-U_q0:Ab3x-uyIGVo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=7zWItY-U_q0:Ab3x-uyIGVo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Kartones/~4/7zWItY-U_q0" height="1" width="1"/&gt;</description><category domain="http://kartones.net/blogs/kartones/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://kartones.net/blogs/kartones/archive/tags/.NET/default.aspx">.NET</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Kartones.Net/default.aspx">Kartones.Net</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Community+Server/default.aspx">Community Server</category><feedburner:origLink>http://kartones.net/blogs/kartones/archive/2009/06/06/kartonesnet-cs2007-addon-pack-1-2-1.aspx</feedburner:origLink></item><item><title>Where most blogs fail: Long lifespan</title><link>http://feedproxy.google.com/~r/Kartones/~3/OvK0ZO67nBs/where-most-blogs-fail-long-lifespan.aspx</link><pubDate>Sat, 06 Jun 2009 10:03:03 GMT</pubDate><guid isPermaLink="false">b86c0850-82e5-42ed-a9d8-bde9e8f94ec1:50126</guid><dc:creator>Kartones</dc:creator><slash:comments>0</slash:comments><comments>http://kartones.net/blogs/kartones/archive/2009/06/06/where-most-blogs-fail-long-lifespan.aspx#comments</comments><description>&lt;p&gt;Sadly, the end of a lot of small to medium sized blogs is the same: left dead.&lt;/p&gt;  &lt;p&gt;The problems or circumstances for what this happens can be varied:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Loss of enthusiasm&lt;/strong&gt;: As with everything new, at first there is a peak of hype in which we only think about ‘our blog’, ‘what to post about’, etcetera.&amp;#160; But when that peak lowers, you have to start thinking about spending time as if it were a small job. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Goal-oriented blog&lt;/strong&gt;: Some blogs don’t appear to share knowledge. Some blogs have ‘hidden’ goals, like looking cool for a job we want (at a company we know takes into account having a blog). Those blogs end usually dead when the goal is achieved (or left for impossible). &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Loss of the original focus of the blog&lt;/strong&gt;: A few blogs suddenly change the topics they talk about to something very different, lose their readers and end dead. IMHO it is better to open another blog for the new topics instead of switching too radically. Same applies with the language, I’ve left reading two blogs because they switched from english to german. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;No time for blogging&lt;/strong&gt;: Blogging takes time, specially if you plan to do it on a regular basis. Thinking small code examples, building diagrams, searching for images, writing the text… You might have personal or professional changes that take out the free time you had before. For example I use &lt;a href="http://www.google.es/url?sa=t&amp;amp;source=web&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Fwindowslivewriter.spaces.live.com%2F&amp;amp;ei=YjwaSt7lHYOUjAf4wtHwDA&amp;amp;usg=AFQjCNEXav76iu-SgGK4k1VwsAVt5Eikeg&amp;amp;sig2=NnGfTVRxazMJfL8RjHwwVQ"&gt;Windows Live Writer&lt;/a&gt; to write down ideas or post drafts, so if I’m inspired one day, I can write down all the ideas before they fade out, and then write the full posts whenever I have time. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Too much corporate blogging&lt;/strong&gt;: The biggest example is &lt;a href="http://blogs.msdn.com/"&gt;MSDN blogs&lt;/a&gt;. Some of their blogs have awesome posts, but other blogs are dead since months or even years. Again, having a blog requires time, so you must be willing to write on it, instead of doing so just for work. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Zombie blogs&lt;/strong&gt;: This is my personal denomination for those blogs who have a low and prolonged inconsistent posting rate. Blogs that for example Google Reader suggests as ‘most obscure’ (probably dead) but that, from time to time (usually a few months) post something. Only people well known and with a solid user base can relax so much without losing their readers. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;As a small conclusion, &lt;em&gt;blogging is for fun and sharing what we know, but you need to spend time on it&lt;/em&gt;.&lt;/p&gt;&lt;img src="http://kartones.net/aggbug.aspx?PostID=50126" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/6b6plgg9oO51086h7CwKhLtBXlI/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6b6plgg9oO51086h7CwKhLtBXlI/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/6b6plgg9oO51086h7CwKhLtBXlI/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/6b6plgg9oO51086h7CwKhLtBXlI/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=OvK0ZO67nBs:j3X7o0GWanE:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=OvK0ZO67nBs:j3X7o0GWanE:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=OvK0ZO67nBs:j3X7o0GWanE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=OvK0ZO67nBs:j3X7o0GWanE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=OvK0ZO67nBs:j3X7o0GWanE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=OvK0ZO67nBs:j3X7o0GWanE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Kartones/~4/OvK0ZO67nBs" height="1" width="1"/&gt;</description><category domain="http://kartones.net/blogs/kartones/archive/tags/Blogging/default.aspx">Blogging</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Blogs/default.aspx">Blogs</category><feedburner:origLink>http://kartones.net/blogs/kartones/archive/2009/06/06/where-most-blogs-fail-long-lifespan.aspx</feedburner:origLink></item><item><title>Review: PasswordsPro</title><link>http://feedproxy.google.com/~r/Kartones/~3/Yn_pRYNPl5I/review-passwordspro.aspx</link><pubDate>Sun, 31 May 2009 07:22:54 GMT</pubDate><guid isPermaLink="false">b86c0850-82e5-42ed-a9d8-bde9e8f94ec1:50109</guid><dc:creator>Kartones</dc:creator><slash:comments>0</slash:comments><comments>http://kartones.net/blogs/kartones/archive/2009/05/31/review-passwordspro.aspx#comments</comments><description>&lt;p&gt;Time for another review, &lt;a href="http://www.passwordspro.com/"&gt;PasswordsPro&lt;/a&gt;. PasswordsPro is a “passwords safe” tool, similar to another application I use, &lt;a href="http://www.pocketinformant.com/products_info.php?p_id=ewallet"&gt;Flexwallet/eWallet&lt;/a&gt;. It allows storing sensitive passwords (like website or email account ones) in an encrypted file.&lt;/p&gt;  &lt;p&gt;&lt;img title="screenshot" alt="screenshot" src="http://kartones.net/images_posts/kartonesblog/passwordspro_01.png" /&gt; &lt;/p&gt;  &lt;p&gt;The interface is very simple: We choose a passwords file, enter it’s master password, and then manage the list of passwords and secure notes (more on this later). There is no categorization so with a huge list of passwords it might get a bit messy, but nothing we can’t control by adding more info to the names.&lt;/p&gt;  &lt;p&gt;&lt;img title="screenshot" alt="screenshot" src="http://kartones.net/images_posts/kartonesblog/passwordspro_02.png" /&gt;&lt;/p&gt;  &lt;p&gt;The info for each password is the typical as we can see in the screenshot just above. There’s no type/scope options, but we can store notes for each individual password (and so, use this as a manual “custom fields” section). &lt;/p&gt;  &lt;p&gt;Apart from passwords, we can store “secure notes” too.&lt;/p&gt;  &lt;p&gt;&lt;img title="screenshot" alt="screenshot" src="http://kartones.net/images_posts/kartonesblog/passwordspro_03.png" /&gt;&lt;/p&gt;  &lt;p&gt;As the name hints, they are just a list of text notes. Simple, but not available on other password safe programs, and interesting to not only store passwords but sensitive info.&lt;/p&gt;  &lt;p&gt;&lt;img title="screenshot" alt="screenshot" src="http://kartones.net/images_posts/kartonesblog/passwordspro_04.png" /&gt;&lt;/p&gt;  &lt;p&gt;Apart from this features, PasswordsPro supports inactivity protection, another usual feature that allows to auto-close the application after not being used for a given time (so you don’t have to worry leaving opened your safe lists). &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;And the last nice feature, the application supports being used as a portable app from a usb disk, just copying the .exe, a .dll and your license file.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;My only real complaint about this application is that I haven’t found any details of what encryption algorithms are used, just “&lt;em&gt;PasswordsPro uses encryption algorithms that are standard in the industry having a strong level of securit&lt;/em&gt;y”.&lt;/p&gt;&lt;img src="http://kartones.net/aggbug.aspx?PostID=50109" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/wxT5LtIZerb-dzVadhzCH0rsItg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wxT5LtIZerb-dzVadhzCH0rsItg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/wxT5LtIZerb-dzVadhzCH0rsItg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/wxT5LtIZerb-dzVadhzCH0rsItg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=Yn_pRYNPl5I:Lu_F7NX_n14:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=Yn_pRYNPl5I:Lu_F7NX_n14:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=Yn_pRYNPl5I:Lu_F7NX_n14:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=Yn_pRYNPl5I:Lu_F7NX_n14:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=Yn_pRYNPl5I:Lu_F7NX_n14:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=Yn_pRYNPl5I:Lu_F7NX_n14:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Kartones/~4/Yn_pRYNPl5I" height="1" width="1"/&gt;</description><category domain="http://kartones.net/blogs/kartones/archive/tags/Security/default.aspx">Security</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Tools/default.aspx">Tools</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Review/default.aspx">Review</category><feedburner:origLink>http://kartones.net/blogs/kartones/archive/2009/05/31/review-passwordspro.aspx</feedburner:origLink></item><item><title>Tip: Increase user process address space to 3GB (and other misc. tweaks)</title><link>http://feedproxy.google.com/~r/Kartones/~3/60dyxwOR7WE/tip-increase-user-process-address-space-to-3gb-and-other-misc-tweaks.aspx</link><pubDate>Tue, 26 May 2009 18:13:26 GMT</pubDate><guid isPermaLink="false">b86c0850-82e5-42ed-a9d8-bde9e8f94ec1:50096</guid><dc:creator>Kartones</dc:creator><slash:comments>3</slash:comments><comments>http://kartones.net/blogs/kartones/archive/2009/05/26/tip-increase-user-process-address-space-to-3gb-and-other-misc-tweaks.aspx#comments</comments><description>&lt;p&gt;If your gaming PC uses Windows XP (or Windows 2003) and you mainly use it for gaming (I have a “dedicated gaming PC” only for that and watching movies/listening to music), you can change one option in the &lt;a href="http://technet.microsoft.com/en-gb/sysinternals/bb963892.aspx"&gt;boot.ini file&lt;/a&gt; to achieve two goals:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Force detection of 3 GB of RAM in XP (32bits/x86). I’ve seen a few systems who didn’t recognized correctly the 3 GB before this tweak. &lt;/li&gt;    &lt;li&gt;Increase the user process address space to 3 GB. This way a single application can have as much as 3 GB for itself. This is great for videogames who eat almost all your PC resources.      &lt;br /&gt;Note: The game’s exe must have been compiled with a flag to be “3GB-aware”, so not all games benefit from this. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The command to place on your boot.ini is “&lt;strong&gt;/3GB&lt;/strong&gt;”.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Another common tweaks are disabling DEP/NoExecute (command “/noexecute=AlwaysOff”), moving your pagefile.sys file to another hard disk (instead of the one in which Windows is installed), or disabling pagefile at all if you have 3 or 4 GigaBytes of RAM (4 for Vista, 3 for XP).&lt;/p&gt;  &lt;p&gt;If you have Vista you can also fully disable Aero and disable the “&lt;a href="http://itsvista.com/2007/04/desktop-window-manager-session-manager/"&gt;Desktop Window Manager Session Manager&lt;/a&gt;” and “&lt;a href="http://www.microsoft.com/windows/windows-vista/features/superfetch.aspx"&gt;Superfetch&lt;/a&gt;” Services. Also, if you don’t use them, disable the &lt;a href="http://support.microsoft.com/kb/310405"&gt;System Restore Points&lt;/a&gt; as they have a significant impact on HDD activity.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;More info of &lt;a href="http://www.microsoft.com/whdc/system/platform/server/PAE/PAEmem.mspx"&gt;Memory under Windows&lt;/a&gt; and of &lt;a href="http://support.microsoft.com/kb/875352"&gt;DEP&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;: As I said, this is optimum for gaming only pcs. If you use your pc for working, development or other tasks it is not recommended for example to disable Superfetch.&lt;/p&gt;&lt;img src="http://kartones.net/aggbug.aspx?PostID=50096" width="1" height="1"&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nC7FGwERKE3nnOF9ZJpwm_aF3qA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nC7FGwERKE3nnOF9ZJpwm_aF3qA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nC7FGwERKE3nnOF9ZJpwm_aF3qA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nC7FGwERKE3nnOF9ZJpwm_aF3qA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=60dyxwOR7WE:HRcHCy7uWEs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=60dyxwOR7WE:HRcHCy7uWEs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=60dyxwOR7WE:HRcHCy7uWEs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=60dyxwOR7WE:HRcHCy7uWEs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/Kartones?a=60dyxwOR7WE:HRcHCy7uWEs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/Kartones?i=60dyxwOR7WE:HRcHCy7uWEs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Kartones/~4/60dyxwOR7WE" height="1" width="1"/&gt;</description><category domain="http://kartones.net/blogs/kartones/archive/tags/Windows/default.aspx">Windows</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Videogames/default.aspx">Videogames</category><category domain="http://kartones.net/blogs/kartones/archive/tags/Tweaks/default.aspx">Tweaks</category><feedburner:origLink>http://kartones.net/blogs/kartones/archive/2009/05/26/tip-increase-user-process-address-space-to-3gb-and-other-misc-tweaks.aspx</feedburner:origLink></item></channel></rss>
