<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel>
        <link>http://mttech.mobitype.com</link>
        <title>Mobitype Tech</title>
        <description>Behind the curtain of Mobitype</description>
        <lastBuildDate>Tue, 04 Apr 2006 23:39:51 +0200</lastBuildDate>
        <item>
            <guid isPermaLink="true">http://mttech.mobitype.com/mobitype_feed_refresh_pol.html</guid>
            <title>Mobitype feed refresh policy</title>
            <description>Cedric from over-blog asked me a question today: how often does Mobitype refresh feeds published on </description>
            <content:encoded><![CDATA[<div>Cedric from over-blog asked me a question today: how often does Mobitype refresh feeds published on other servers?<br />A rather simple question, but the answer is quite complex.<br />In fact, Mobitype refresh policy changed many times since first releases. The current feed base is about 20,000 feeds, we cannot refresh them too often, having server resources limited. But it is discouraging to consistently have stale feeds in the database ;)<br />So, first of all, all feeds are divided into two groups. There are alive feeds and dead feeds. A feed is alive when it has at least one subscriber, or it has at least 100 consultations per week.<br />For all alive feeds, an average time spacing between posts is calculated within last several posts (posts in future are not counted, since there are users who timestamp their posts in late 2099). Having this average spacing as A, the refresh time for the feed is calculated as A/20. Afterwards, it is bounded to be between 30 minutes and 1 day, to be reasonable.<br />The refresh time for dead feeds is about once every several days.<br />So when you browse lists of feeds, like tops, favorites or text search, the local database copy of the feed is displayed. However, when user clicks on "View post", the local copy is verified. If it has not been refreshed for more then 2 hours, the live request is being sent to the remote server at the time of the page rendering, and the feed eventually updated.</div>]]></content:encoded>
            <pubDate>Tue, 04 Apr 2006 23:39:51 +0200</pubDate>
        </item>
        <item>
            <guid isPermaLink="true">http://mttech.mobitype.com/new_in_mobitype__amr_podc.html</guid>
            <title>New in Mobitype: AMR podcasting!</title>
            <description>Got a very fruitful conversation with Loïc le Meur this morning, about new features in Mobitype. Loïc</description>
            <content:encoded><![CDATA[<div>Got a very fruitful conversation with <a href="http://www.loiclemeur.com">Loïc le Meur</a> this morning, about new features in Mobitype.</div><div>Loïc gave me an idea of some inexpensive, but extremely useful points. Some of them have been implemented this afternoon ;)))</div><h3>Podcasting with AMR.</h3><div>AMR is a new generation standard for audio/video encoding. Chances are that this is the standard in which your mobile phone saves microphone and conversation recordings. Widely used in the mobile world, it is far from being common to desktop users.</div><div>The idea itself was to convert .AMR to .mp3 on the fly as soon as they are uploaded to Mobitype. Some <a href="http://www.3gpp.org">free libraries</a> and some <a href="http://xa.bi/mms/">hack</a> did the job ;) </div><div>In fact, Mobitype will keep both versions (.mp3 and .AMR), and cover the .mp3 file link with a nice podcast-looking thumbnail ;)</div><h3>Post by mail confirmation.</h3><div>Do you want to be sure your posting-by-mail have passed? Now yes, you'll get a confirmation mail, unless you desactivate it in the profile. The implementation is a bit lightweight by now, someone would like to be able to unsubscribe from annoying confirmation just by clicking to the link inside the mail, or recieve a live link to the new post... well, one cannot have everything at a time, that will appear a bit later.</div><div>Enjoy, and stay with Mobitype!</div>]]></content:encoded>
            <pubDate>Tue, 20 Dec 2005 19:59:03 +0100</pubDate>
        </item>
        <item>
            <guid isPermaLink="true">http://mttech.mobitype.com/mobitype_and_caches__swit.html</guid>
            <title>Mobitype and Caches: switching to OsCache</title>
            <description>Cache is critical for Mobitype. In fact, every RSS or Atom feed fetched from the Web should be cached</description>
            <content:encoded><![CDATA[<div>Cache is critical for Mobitype.</div><div>In fact, every RSS or Atom feed fetched from the Web should be cached. This may avoid much of extra effort on verifying if feed have been changed or not. In fact, once the feed is in the cache, and if Mobitype does not know if the feed have been modified since last lookup, Mobitype may ask a question to the remote server in a form of  <i>"Please give me this feed if it has not been modified since last monday?"</i>  Most servers could report to this question shortly, saying either  <i>"Yes, here is the new version"</i>  , or  <i>"Just feel free to used your cached one, nothing changed"</i>  . This simple algorythm saves terabytes of trafic all over the world, and in fact just every known browser and web server uses it. But we definitely need cache for that.</div><div>Mobitype took off with <a href="http://ehcache.sourceforge.net/">EhCache</a> - a simple non-clustered solution from <a href="http://sf.net">SourceForge</a> that can keep files in memory for fast access and swaps them to disk in case of memory owerfolw. Simple to configure, it showed up shortly with some decieving drawbacks :(</div><blockquote>- Its disk owerflow mecanics is quite fragile. In fact, when a memory store reaches its limit, EhCache starts to enqueue objects to the in-memory spool, and there is a special process that flushes them to disk one by one. This process has, however, a vulnerability, that can be discovered by looking at the source code: whatever unexpected happens while flushing objects to disk, the spooling process may just die, and no more objects will be saved untill next server restart. The spooling queue just grows, untill it occupies all available memory, and server falls down ;[]</blockquote><blockquote>- All the cached entries are stored in one geant file, which grows progressively with every new entry, occupying enourmous space and heavily clustered. This file is indexed, and the index is stored in memory until the server is shut down. In case of abnormal server termination, all the index is lost ;( The geant cache file is however not cleaned up, and new entries are just appended th the end, thus wasting disk space.</blockquote><div>Our next attempt is OsCache from <a href="http://opensymphony.com">Open Symphony</a> .</div><div>At a glance, OsCache is twice complicated than EhCache, both in amount of source code and in configuration. In fact, there is a built-in clustering capability, wich may be not unnecessary if Mobitype grows up ;)) Same memory-overwlow-disk strategy, several caching algorythms (First-In-First-Out or Least-Recently-Used). Every disk-stored item is serialized in its own file, all files by default stored in the same directory. Expecting a very large number of files to store, I decided to override this behaviour to store files in a sort of a balanced tree of folders, which was surprisingly simple (just override the function which chooses a file name for an item, and change a configuration line).</div><div>As a first bad surprise, I didn't find any clue on how to remove expired elements from the disk, OsCache considers disk just  <i>unlimited</i>  . But having files stored in a simple directory structure, it seems to be simple to charge cron to sweep out very old files from time to time.</div><div>Time will show if this second attempt is fruitful.</div>]]></content:encoded>
            <pubDate>Fri, 25 Nov 2005 17:32:36 +0100</pubDate>
        </item>
        <item>
            <guid isPermaLink="true">http://mttech.mobitype.com/mobitype___java___postgre.html</guid>
            <title>Mobitype : java + postgress</title>
            <description>Mobitype is a Java project. Why Java? It is not an evident solution for this kind of open projects, m</description>
            <content:encoded><![CDATA[<div>Mobitype is a Java project.</div><div>Why Java? It is not an evident solution for this kind of open projects, mostly written in PHP/MySQL or <a href="http://www.typepad.com">Perl</a> .</div><div>Because I just know Java and I know that it works ;)</div><div>The main advantage of choosing Java is a possibility of a nicer architecture with classes and interfaces. The disadvantage is that it is a bit complex ;)</div><div>Mobitype uses <a href="http://postgresql.org">PostgreSQL</a> . Not very traditional, neither, but the only  <i>really</i>  free solution for a project that belongs to the commercial structure and cannot publish its source code ( <a href="MySQL"> <a href="http://mysql.org">http://mysql.org</a> </a> seems to be more popular and faster, but it is not truely free).</div><div>As of now, Mobitype is a single standalone monoprocessor server, with the database and Tomcat server onboard. In this configuration it should be able to support about several thousands of named users.</div>]]></content:encoded>
            <pubDate>Fri, 25 Nov 2005 13:48:11 +0100</pubDate>
        </item>
        <item>
            <guid isPermaLink="true">http://mttech.mobitype.com/mobitype_technical_blog.html</guid>
            <title>Mobitype technical blog</title>
            <description>In this blog I'll try to communicate, if I have time, some technical background and gotchas on the M</description>
            <content:encoded><![CDATA[<div>In this blog I'll try to communicate, if I have time, some technical background and gotchas on the Mobitype functionnality and the underlying technology.</div><div>I choosed to do it in English, as it seems to be flooded with technical terms. Excuse my spelling in advance!</div><div>I'm Oleg Sidko, CTO of Tekora S.A., and the main developer for this project.</div><div>See you in this blog ;)</div>]]></content:encoded>
            <pubDate>Fri, 25 Nov 2005 11:50:15 +0100</pubDate>
        </item>
    </channel>
</rss>
