<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Rampa.SK RSS feed.</title>
        <link>http://rampa.sk</link>
        <description><![CDATA[Rampa.SK RSS feed.]]></description>
        <atom:link href="http://rampa.sk/rss.xml" rel="self"
                   type="application/rss+xml" />
        <lastBuildDate>No date found.</lastBuildDate>
        <item>
    <title>Atlantis Clouds</title>
    <link>http://rampa.sk/static/atlantisClouds.html</link>
    <description><![CDATA[<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
        <title>Shallow Rampa - Atlantis Clouds</title>
        <link rel="stylesheet" type="text/css" href="../css/default.css"></link>
        <link rel="alternate" type="application/rss+xml" title="Shallow Rampa" href="../rss.xml"></link>
    </head>
    <body>
        <h1>Shallow Rampa - Atlantis Clouds</h1>
        <div id="navigation">
            <a href="../">Home</a>
            <a href="../posts.html">All posts</a>
            <a href="../static/messageBoard.html">Message</a>
        </div>

        <h1>Atlantis Clouds</h1>

<p>by <em>dixie</em> on <strong>Date unknown</strong></p>

<p>Tagged as: <a href="../tags/data.html">data</a>, <a href="../tags/chat.html">chat</a>.</p>

<h2 id="about">About</h2>
<p>For some period of time (about 2–3 months) there was running <code>who</code> snapshots which have been used as input for clouds pictures here. Images are produced by <code>wordcloud</code> program included at <a href="http://code.haskell.org/diagrams/">diagrams</a> haskell package.</p>
<p>Size of letters determines higher sum of measured value over whole snapshoting interval.</p>
<h2 id="nicknames-cloud">Nicknames cloud</h2>
<p>As measured value is how often given person was online. <a href="img/nicks.svg">SVG With Better Resolution 5MB</a></p>
<div class="figure">
<img src="img/nicks.png" alt="Nicks"></img><p class="caption">Nicks</p>
</div>
<h2 id="rooms-cloud">Rooms cloud</h2>
<p>As measured value is how many people are at room.</p>
<div class="figure">
<img src="img/rooms.png" alt="Rooms"></img><p class="caption">Rooms</p>
</div>
<h2 id="levels-cloud">Levels cloud</h2>
<p>As measured value is how much people of given level were online.</p>
<div class="figure">
<img src="img/levels.png" alt="Levels"></img><p class="caption">Levels</p>
</div>

    </body>
</html>
]]></description>
    <pubDate>No date found.</pubDate>
    <guid>http://rampa.sk/static/atlantisClouds.html</guid>
</item>
<item>
    <title>Atlantis Social Network</title>
    <link>http://rampa.sk/static/atlantisNetwork.html</link>
    <description><![CDATA[<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
        <title>Shallow Rampa - Atlantis Social Network</title>
        <link rel="stylesheet" type="text/css" href="../css/default.css"></link>
        <link rel="alternate" type="application/rss+xml" title="Shallow Rampa" href="../rss.xml"></link>
    </head>
    <body>
        <h1>Shallow Rampa - Atlantis Social Network</h1>
        <div id="navigation">
            <a href="../">Home</a>
            <a href="../posts.html">All posts</a>
            <a href="../static/messageBoard.html">Message</a>
        </div>

        <h1>Atlantis Social Network</h1>

<p>by <em>dixie</em> on <strong>Date unknown</strong></p>

<p>Tagged as: <a href="../tags/data.html">data</a>, <a href="../tags/chat.html">chat</a>.</p>

<h2 id="about">About</h2>
<p>For some period of time (about 2–3 months) there was running <code>who</code> snapshots which have been used as input for social network here. Graphical output of graph is procuded by <a href="http://www.graphviz.org">graphviz</a> and pure graph data are constructed by haskell program.</p>
<p>Each Node represents a nickname. Edge are constructed based on frequency of the nickname pairs at the same room and time (with some variantions below)</p>
<p>Edge like this (origin Nick1 and destination Nick2):</p>
<pre><code>[Nick1]---&gt;[Nick2]
</code></pre>
<p>Above relation means that the most times is <code>nick1</code> with <code>nick2</code> at the same room.</p>
<p>For viewing SVG capable image viewer is needed, or <a href="http://www.firefox.com">Firefox</a>.</p>
<h2 id="social-network-groups">Social Network Groups</h2>
<p>Here for each person is taken only most cooroom person.</p>
<ul>
<li><a href="img/social_net.svg">Atlantis Social Network in SVG - 500KB</a></li>
</ul>
<h2 id="social-network-pairs">Social Network Pairs</h2>
<p>Here for each person is taken only most cooroom persons but for analysis only two people at time+room are considered (pairs).</p>
<ul>
<li><a href="img/social_net_pairs.svg">Atlantis Social Network Pairs in SVG - 500KB</a></li>
</ul>

    </body>
</html>
]]></description>
    <pubDate>No date found.</pubDate>
    <guid>http://rampa.sk/static/atlantisNetwork.html</guid>
</item>
<item>
    <title>Dawb - DArcs Web Browser</title>
    <link>http://rampa.sk/static/dawb.html</link>
    <description><![CDATA[<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
        <title>Shallow Rampa - Dawb - DArcs Web Browser</title>
        <link rel="stylesheet" type="text/css" href="../css/default.css"></link>
        <link rel="alternate" type="application/rss+xml" title="Shallow Rampa" href="../rss.xml"></link>
    </head>
    <body>
        <h1>Shallow Rampa - Dawb - DArcs Web Browser</h1>
        <div id="navigation">
            <a href="../">Home</a>
            <a href="../posts.html">All posts</a>
            <a href="../static/messageBoard.html">Message</a>
        </div>

        <h1>Dawb - DArcs Web Browser</h1>

<p>by <em>dixie</em> on <strong>Date unknown</strong></p>

<p>Tagged as: <a href="../tags/darcs.html">darcs</a>, <a href="../tags/app.html">app</a>.</p>

<h2 id="overview">Overview</h2>
<p>Dawb is simple web based browser for the Darcs repositories. It allows quick check of repositories which are hosted on pure HTTP server without DarcsWeb or anything similar (patchtag, darcsden). Sometimes I need to check how alive is the some project without darcs command near the hand.</p>
<p>Accessible on:</p>
<p><a href="http://handra.rampa.sk/dawb/changes">http://handra.rampa.sk/dawb/changes</a></p>
<p>It serves also RSS feed.</p>
<p>Some operations are slow because:</p>
<ul>
<li>the dawb code is not optimized</li>
<li>some darcs operations are slow on big repositories (e.g. <code>darcs log &lt;element&gt;</code>)</li>
<li>served on shared low resource virtual machine</li>
</ul>
<p>Complex queries can be slow and end fish timeout, usually the <code>darcs log some-element</code></p>
<h2 id="features">Features</h2>
<ul>
<li>View repository changes (<code>darcs log</code>)</li>
<li>Regex and element filter for changes view</li>
<li>View files with syntax highlight (highlighting-kate)</li>
<li>View changes with syntax highlight</li>
<li>All information stored in URL - can be sent over IM or EMAIL</li>
<li>RSS feed for repository changes</li>
</ul>
<h2 id="known-issues">Known issues</h2>
<p>View file functionality doesn’t work on repositories hosted on patchtag or darcsden. The reason is in assumption of dawb how to access file over HTTP.</p>
<h2 id="examples">Examples</h2>
<p>Example repositories:</p>
<ul>
<li><a href="http://handra.rampa.sk/dawb/changes?repoPage=0&amp;repoURL=http%3A%2F%2Fui3.info%2Fdarcs%2Fepub-metadata%2F&amp;repoSummary=on&amp;repoLimit=50&amp;repoElem=&amp;repoRegex=">http://ui3.info/darcs/epub-metadata/</a></li>
<li><a href="http://handra.rampa.sk/dawb/changes?repoPage=0&amp;repoURL=http%3A%2F%2Fdarcs.net%2Fscreened%2F&amp;repoSummary=on&amp;repoLimit=50&amp;repoElem=&amp;repoRegex=">http://darcs.net/screened/</a></li>
<li><a href="http://handra.rampa.sk/dawb/changes?repoPage=0&amp;repoURL=http%3A%2F%2Fdarcs.net%2Freviewed%2F&amp;repoSummary=on&amp;repoLimit=50&amp;repoElem=&amp;repoRegex=">http://darcs.net/reviewed/</a></li>
<li><a href="http://handra.rampa.sk/dawb/changes?repoPage=0&amp;repoURL=http%3A%2F%2Fdarcs.haskell.org%2Fghc&amp;repoSummary=on&amp;repoLimit=50&amp;repoElem=&amp;repoRegex=">http://darcs.haskell.org/ghc</a></li>
<li><a href="http://handra.rampa.sk/dawb/changes?repoPage=0&amp;repoURL=http%3A%2F%2Fcode.haskell.org%2Fhoogle&amp;repoSummary=on&amp;repoLimit=50&amp;repoElem=&amp;repoRegex=">http://code.haskell.org/hoogle</a></li>
<li><a href="http://handra.rampa.sk/dawb/changes?repoPage=0&amp;repoURL=http%3A%2F%2Fcode.haskell.org%2Fxmonad&amp;repoSummary=on&amp;repoLimit=50&amp;repoElem=&amp;repoRegex=">http://code.haskell.org/xmonad</a></li>
<li><a href="http://handra.rampa.sk/dawb/changes?repoPage=0&amp;repoURL=http%3A%2F%2Fcode.haskell.org%2FXMonadContrib&amp;repoSummary=on&amp;repoLimit=50&amp;repoElem=&amp;repoRegex=">http://code.haskell.org/XMonadContrib</a></li>
<li><a href="http://handra.rampa.sk/dawb/changes?repoPage=0&amp;repoURL=http%3A%2F%2Fcode.haskell.org%2Fgtk2hs%2F&amp;repoSummary=on&amp;repoLimit=50&amp;repoElem=&amp;repoRegex=">http://code.haskell.org/gtk2hs/</a></li>
<li><a href="http://handra.rampa.sk/dawb/changes?repoPage=0&amp;repoURL=http%3A%2F%2Fdarcs.nomeata.de%2Fdarcswatch%2F&amp;repoSummary=on&amp;repoLimit=50&amp;repoElem=&amp;repoRegex=">http://darcs.nomeata.de/darcswatch/</a></li>
<li><a href="http://handra.rampa.sk/dawb/changes?repoPage=0&amp;repoURL=http%3A%2F%2Fcode.haskell.org%2Flambdabot&amp;repoSummary=on&amp;repoLimit=50&amp;repoElem=&amp;repoRegex=">http://code.haskell.org/lambdabot</a></li>
</ul>
<p>RSS feeds:</p>
<ul>
<li><a href="http://handra.rampa.sk/dawb/rss?repoRURL=http%3A%2F%2Fdarcs.net">RSS for http://darcs.net/</a></li>
<li><a href="http://handra.rampa.sk/dawb/rss?repoRURL=http%3A%2F%2Fwiki.darcs.net">RSS for http://wiki.darcs.net/</a></li>
</ul>
<h2 id="installation">Installation</h2>
<p>Software is not prepared for general usage and it has all configuration hardcoded. It starts local HTTP service on http://localhost:3000/changes after start.</p>
<pre class="Bash"><code>$ darcs get --lazy http://darcsden.com/dixie/dawb
$ cd dawb
$ cabal install
$ dawb
</code></pre>
<p>Please be aware that it is still ALPHA quality software.</p>
<h2 id="download">Download</h2>
<ul>
<li>Source code repository (darcs) at <a href="http://darcsden.com/dixie/dawb">http://darcsden.com/dixie/dawb</a></li>
</ul>

    </body>
</html>
]]></description>
    <pubDate>No date found.</pubDate>
    <guid>http://rampa.sk/static/dawb.html</guid>
</item>
<item>
    <title>Jabber Telnet Bot Gateway</title>
    <link>http://rampa.sk/static/jabbertelnetbot.html</link>
    <description><![CDATA[<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
        <title>Shallow Rampa - Jabber Telnet Bot Gateway</title>
        <link rel="stylesheet" type="text/css" href="../css/default.css"></link>
        <link rel="alternate" type="application/rss+xml" title="Shallow Rampa" href="../rss.xml"></link>
    </head>
    <body>
        <h1>Shallow Rampa - Jabber Telnet Bot Gateway</h1>
        <div id="navigation">
            <a href="../">Home</a>
            <a href="../posts.html">All posts</a>
            <a href="../static/messageBoard.html">Message</a>
        </div>

        <h1>Jabber Telnet Bot Gateway</h1>

<p>by <em>dixie</em> on <strong>Date unknown</strong></p>

<p>Tagged as: <a href="../tags/chat.html">chat</a>, <a href="../tags/xmpp.html">xmpp</a>, <a href="../tags/app.html">app</a>.</p>

<h2 id="overview">Overview</h2>
<p>Jabber Bot provides interface for telnet connection over XMPP.</p>
<p>It allows interaction with MUDs or Talkers over the IM clients (pidgin, gajim, gtalk, etc).</p>
<div class="figure">
<img src="img/jabberbot_diagram.png" alt="Overview Picture"></img><p class="caption">Overview Picture</p>
</div>
<p>Developed for <a href="http://atlantis.talker.sk">Atlantis Talker</a>. Atlantis Talker uses Slovak/English languages mix. You can use it over the JID <a href="jid:atlantis@atlantis.talker.sk">atlantis@atlantis.talker.sk</a> on any XMPP network like gmail chat.</p>
<p>The development of Jabber Telnet Bot is <strong><em>discontinued</em></strong>.</p>
<h2 id="source-repository">Source Repository</h2>
<ul>
<li><a href="https://sourceforge.net/projects/jabbertelnetbot/">https://sourceforge.net/projects/jabbertelnetbot/</a></li>
</ul>
<h2 id="faq">FAQ</h2>
<ul>
<li><strong>Q:</strong> Is this transport for XMPP server which allows interactions with other XMPP servers and user can add Atlantis/Talker user into Contact List ?</li>
<li><strong>A:</strong> No. This is bot which is something like a gateway over which user can create telnet session and interact with Atlantis or other telnet service.</li>
</ul>
<h2 id="known-issues">Known Issues</h2>
<ul>
<li>To have working bot agaist latest jabberd 2.4 it is needed to do some workarounds:
<ul>
<li>disable digest-md5 http://jabberd2.xiaoka.com/ticket/233</li>
<li>disable SASL in the bot</li>
</ul></li>
</ul>
<h2 id="download">Download</h2>
<ul>
<li><a href="https://sourceforge.net/projects/jabbertelnetbot/files/JabberTelnetBot-0.4.tar.gz/download">jabbertelnetbot–0.4.tgz</a></li>
<li><a href="http://www.rampa.sk/up/upload/jabberatlbot/jabbertelnetbot-0.3.tgz">jabbertelnetbot–0.3.tgz</a></li>
</ul>
<h2 id="screenshots">Screenshots</h2>
<div class="figure">
<img src="http://rampa.sk/up/upload/jabberatlbot/snapshot1.png" alt="Screenshot Pidgin (0.3)"></img><p class="caption">Screenshot Pidgin (0.3)</p>
</div>
<div class="figure">
<img src="img/gmail_jabberbot.png" alt="Screenshot Gmail (.0.4)"></img><p class="caption">Screenshot Gmail (.0.4)</p>
</div>
<h2 id="original-plan-for-next-version-0.5">Original Plan for next version 0.5</h2>
<p>Actually with help of guys at #pidgin I found exact limit on pidgin for rich text messages:</p>
<pre class="c"><code>        /* Awful hack to work around GtkIMHtml's inefficient rendering of messages with lots of formatting changes.
         * If a message has over 100 '&lt;' characters, strip formatting before appending it. Hopefully nobody actually
         * needs that much formatting, anyway.
         */
        for (bracket = strchr(displaying, '&lt;'); bracket &amp;&amp; *(bracket + 1); bracket = strchr(bracket + 1, '&lt;'))
                tag_count++;

        if (tag_count &gt; 100) {
                char *tmp = displaying;
                displaying = purple_markup_strip_html(tmp);
                g_free(tmp);
        }
</code></pre>
<ul>
<li>I’ll add in next version support for this limit consideration during telnet-&gt;jabber message conversion.</li>
<li>commands for control of telnet-jabber session, like “connect”, “disconnect” (allow to connect on any telnet server)</li>
</ul>
<h2 id="installation-source-release-only">Installation (Source Release only)</h2>
<p>Following dependencies are needed:</p>
<ul>
<li>Python 2.5.2</li>
<li>Python xmpp 0.3.1</li>
</ul>
<p>For debian-based distros (Ubuntu) type following for installing them:</p>
<p><code>$ sudo apt-get install python-xmpp python</code></p>
<h3 id="extract-jabbertelnetbot-x.y.tar.gz">Extract JabberTelnetBot-X.Y.tar.gz</h3>
<p><code>$ tar xfvz JabberTelnetBot-X.Y.tar.gz</code></p>
<h3 id="configuration">Configuration</h3>
<p>It is necessary to setup credentials for Jabber Account which is used by robot for reading incomming commands.</p>
<p>Template configuration is at cfg/ directory and it is python source file.</p>
<pre class="python"><code><br /># Atlantis host/port
ATL_HOST=&quot;atlantis.talker.sk&quot;
ATL_PORT=23
# JID = login into jabber / PWD = plaintext password
JABBER_JID=&quot;meciar@gmail.com&quot;
JABBER_PWD=&quot;nbusr123&quot;
# This can be Set to None if JID contains all info
JABBER_SERVER=(&quot;talk.google.com&quot;, 5223)
# JABBER_SERVER=None
</code></pre>
<h3 id="usagestart">Usage/Start</h3>
<p>For help:</p>
<pre><code>$ ./jbtelbotd --help
</code></pre>
<p>For start:</p>
<pre><code>$ ./jbtelbotd -d -v -c ./cfg/jbtelbot.conf
</code></pre>
<p>It starts Jabber Telnet Bot on foreground. You can stop it with <strong><em>CTRL+C</em></strong> on terminal.</p>
<p>It should connect and authorize to configured jabber server.</p>
<h3 id="usagechat">Usage/Chat</h3>
<p>It is necessary add the bot into your other jabber account contact list.</p>
<p>When the bot appear as online it is possible send him messages which are send to established telnet connection. Any response from the telnet connection is sent back as message to given jabber user.</p>
<p>There is 1:1 mapping between jabber user and established telnet connection.</p>

    </body>
</html>
]]></description>
    <pubDate>No date found.</pubDate>
    <guid>http://rampa.sk/static/jabbertelnetbot.html</guid>
</item>
<item>
    <title>LDIF - LDAP Data Interchange Format</title>
    <link>http://rampa.sk/static/ldif.html</link>
    <description><![CDATA[<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
        <title>Shallow Rampa - LDIF - LDAP Data Interchange Format</title>
        <link rel="stylesheet" type="text/css" href="../css/default.css"></link>
        <link rel="alternate" type="application/rss+xml" title="Shallow Rampa" href="../rss.xml"></link>
    </head>
    <body>
        <h1>Shallow Rampa - LDIF - LDAP Data Interchange Format</h1>
        <div id="navigation">
            <a href="../">Home</a>
            <a href="../posts.html">All posts</a>
            <a href="../static/messageBoard.html">Message</a>
        </div>

        <h1>LDIF - LDAP Data Interchange Format</h1>

<p>by <em>dixie</em> on <strong>Date unknown</strong></p>

<p>Tagged as: <a href="../tags/app.html">app</a>, <a href="../tags/lib.html">lib</a>, <a href="../tags/tree.html">tree</a>.</p>

<h2 id="overview">Overview</h2>
<p><strong>ldif</strong> is <a href="http://haskell.org">Haskell</a> library and tools for work with LDIF files. For the details about the LDIF please look <a href="http://en.wikipedia.org/wiki/LDIF">LDIF on Wikipedia</a>:</p>
<pre><code>The LDAP Data Interchange Format (LDIF) is a standard plain text data
interchange format for representing LDAP (Lightweight Directory Access
Protocol) directory content and update requests. LDIF conveys
directory content as a set of records, one record for each object (or
entry). It represents update requests, such as Add, Modify, Delete,
and Rename, as a set of records, one record for each update request.
</code></pre>
<p>The parser from library is still not in 100% conformity with the LDIF related RFCs.</p>
<h2 id="installation">Installation</h2>
<p>Use the <a href="http://hackage.haskell.org/">HackageDB</a> as usually.</p>
<pre class="Bash"><code>$ cabal install HUnit
$ cabal install ldif
</code></pre>
<p>Please be aware that it is still ALPHA quality software.</p>
<h2 id="usage">Usage</h2>
<p>Commands provided:</p>
<ul>
<li><code>ldif2html</code> - LDIF file pretty printing to the HTML file</li>
<li><code>diffLDIF</code> - Calculates delta between two LDIF files</li>
<li><code>ldifmodify</code> - Replays delta</li>
<li><code>ldifparse</code> - Ignore, only for parser debugging purposes</li>
</ul>
<h3 id="diffldif">diffLDIF</h3>
<p>Calculates delta LDIF based on two given content LDIF files.</p>
<p>If the change LDIF is applied into LDAP directory with state of content <code>src.ldif</code> the state will be changed to <code>dst.ldif</code>.</p>
<p>Delta LDIF contains LDAP operations like add, delete, modify. It is similar to the <code>patch</code> of the unix <code>diff</code> but on the LDIF files.</p>
<p>Usage:</p>
<pre><code>diffLDIF: Create delta LDIF between Source LDIF and Target LDIF

diffldif [FLAG]

  -? --help[=FORMAT]  Show usage information (optional format)
  -V --version        Show version information
  -v --verbose        Higher verbosity
  -q --quiet          Lower verbosity
  -s --srcFile=FILE   Source LDIF File
  -t --dstFile=FILE   Target LDIF File
</code></pre>
<p>In pictures, there is process of Changes LDIF construction (diff): <img src="img/ldifdiff.png" alt="LDIF Diff changes"></img></p>
<p>Process of applying changes LDIF into source LDIF (ldapmodify): <img src="img/ldifapply.png" alt="LDIF Apply of Diff"></img></p>
<p>See example LDIF files below.</p>
<p>Fist input file - filesrc.ldif</p>
<pre class="Makefile"><code>dn: cn=The Postmaster,dc=example,dc=com
objectClass: organizationalRole
cn: The Postmaster
oldAttr: attrValue1
oldAttr: attrValue2

dn: cn=The Postmaster Remove,dc=example,dc=com
objectClass: organizationalRole
cn: The Postmaster Remove
</code></pre>
<p>Second input file - filedst.ldif</p>
<pre class="Makefile"><code>dn: cn=The Postmaster,dc=example,dc=com
objectClass: organizationalRole
cn: The Postmaster
newAttribute: newValue
</code></pre>
<p>The command where files filedst.ldif and filesrc.ldif are involved:</p>
<pre class="Bash"><code>$ diffLDIF -s filesrc.ldif -t filedst.ldif
</code></pre>
<p>Output of diffLDIF command - delta.ldif</p>
<pre class="Makefile"><code>dn: cn=The Postmaster,dc=example,dc=com
changetype: modify
delete: oldAttr
oldAttr: attrValue1
-
delete: oldAttr
oldAttr: attrValue2
-
add: newAttribute
newAttribute: newValue

dn: cn=The Postmaster Remove,dc=example,dc=com
changetype: delete
</code></pre>
<h3 id="ldifmodify">ldifmodify</h3>
<p>Replays the delta LDIF upon the content LDIF like the <code>ldapmodify</code> command.</p>
<p>If the <code>diffLDIF</code> is understood as the <code>diff</code> than the <code>ldifmodify</code> can be understood as the unix <code>patch</code> command.</p>
<p>Usage:</p>
<pre><code>ldifmodify: Apply LDAP operations from LDIF to LDIF (like ldapmodify)

ldifmodify [FLAG] [LDIF Files for applying]

  -? --help[=FORMAT]  Show usage information (optional format)
  -V --version        Show version information
  -v --verbose        Higher verbosity
  -q --quiet          Lower verbosity
  -f --baseFile=FILE  Base LDIF File
  -o --outFile=FILE   Output LDIF File
</code></pre>
<p>Example is based on <code>diffLDIF</code> files</p>
<pre><code>$ ldifmodify -f filesrc.ldif delta.ldif
</code></pre>
<p>The output of the <code>ldifmodify</code> example command above is <code>filedst.ldif</code> content.</p>
<p>The summary of the both diffLDIF and ldifmodify examples:</p>
<ul>
<li>diffLDIF: Create <code>patch</code> or <code>diff</code> between <code>filesrc.ldif</code> and <code>filedst.ldif</code> with name <code>delta.ldif</code></li>
<li>ldifmodify: Apply the <code>patch</code> file <code>delta.ldif</code> on <code>filesrc.ldif</code> and get the <code>filedst.ldif</code></li>
</ul>
<p>The above procedure is helpful when the <code>delta.ldif</code> is some kind of the patch applied on real LDAP directory, e.g. adding the users or updating of the structure.</p>
<h3 id="ldif2html">ldif2html</h3>
<p>It generates the <em>brows-able</em> LDIF as the HTML page.</p>
<p>Usage:</p>
<pre><code>ldif2html &lt;input.ldif&gt; [&lt;input2.ldif&gt; &lt;input3.ldif&gt; ... &lt;inputN.ldif&gt; ] &lt;output.html&gt;
</code></pre>
<h2 id="download">Download</h2>
<ul>
<li>Darcs repository at <a href="http://patch-tag.com/r/dixiecko/ldif">http://patch-tag.com/r/dixiecko/ldif</a></li>
<li>HackageDB Page at <a href="http://hackage.haskell.org/package/ldif">http://hackage.haskell.org/package/ldif</a></li>
<li>Archlinux AUR at <a href="http://aur.archlinux.org/packages.php?ID=34060">http://aur.archlinux.org/packages.php?ID=34060</a></li>
</ul>
<h2 id="changes">Changes</h2>
<ul>
<li>0.0.6+7
<ul>
<li>added ldifmodify</li>
<li>changed interface of the library</li>
</ul></li>
<li>0.0.5
<ul>
<li>fix in diffLDIF (missing new entries from second ldif not in first ldif - adds)</li>
</ul></li>
<li>0.0.4
<ul>
<li>add ldif2html</li>
</ul></li>
</ul>

    </body>
</html>
]]></description>
    <pubDate>No date found.</pubDate>
    <guid>http://rampa.sk/static/ldif.html</guid>
</item>
<item>
    <title>Message Board</title>
    <link>http://rampa.sk/static/messageBoard.html</link>
    <description><![CDATA[<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
        <title>Shallow Rampa - Message Board</title>
        <link rel="stylesheet" type="text/css" href="../css/default.css"></link>
        <link rel="alternate" type="application/rss+xml" title="Shallow Rampa" href="../rss.xml"></link>
    </head>
    <body>
        <h1>Shallow Rampa - Message Board</h1>
        <div id="navigation">
            <a href="../">Home</a>
            <a href="../posts.html">All posts</a>
            <a href="../static/messageBoard.html">Message</a>
        </div>

        <h1>Message Board</h1>

<p>by <em>dixie</em> on <strong>Date unknown</strong></p>

<p>Tagged as: <a href="../tags/chat.html">chat</a>.</p>

<iframe src="http://www.rampa.sk/board/listing.php" width="700" height="420" frameborder="0" scrolling="no">
  <p>
Your browser does not support iframes.
</p>
</iframe>

<hr></hr>

    </body>
</html>
]]></description>
    <pubDate>No date found.</pubDate>
    <guid>http://rampa.sk/static/messageBoard.html</guid>
</item>
<item>
    <title>#Socky.ZU</title>
    <link>http://rampa.sk/static/socky.html</link>
    <description><![CDATA[<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
        <title>Shallow Rampa - #Socky.ZU</title>
        <link rel="stylesheet" type="text/css" href="../css/default.css"></link>
        <link rel="alternate" type="application/rss+xml" title="Shallow Rampa" href="../rss.xml"></link>
    </head>
    <body>
        <h1>Shallow Rampa - #Socky.ZU</h1>
        <div id="navigation">
            <a href="../">Home</a>
            <a href="../posts.html">All posts</a>
            <a href="../static/messageBoard.html">Message</a>
        </div>

        <h1>#Socky.ZU</h1>

<p>by <em>dixie</em> on <strong>Date unknown</strong></p>

<p>Tagged as: <a href="../tags/chat.html">chat</a>.</p>

<h2 id="about">About</h2>
<p>Channel about the stuff which matters.</p>
<p>IRC Logs analysis results:</p>
<ul>
<li>The weekend talks are not often</li>
<li>The most of the talks happen at the Monday</li>
<li>The intensity of the talks decreases from Monday till Friday</li>
</ul>
<h2 id="connection">Connection</h2>
<ul>
<li>Preferred way <a href="http://webchat.quakenet.org/">http://webchat.quakenet.org/</a></li>
<li>Or over pure IRC client (xchat, pidgin, irssi, epic4, bitchX…)</li>
</ul>

    </body>
</html>
]]></description>
    <pubDate>No date found.</pubDate>
    <guid>http://rampa.sk/static/socky.html</guid>
</item>
<item>
    <title>Socky Clouds</title>
    <link>http://rampa.sk/static/sockyClouds.html</link>
    <description><![CDATA[<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
        <title>Shallow Rampa - Socky Clouds</title>
        <link rel="stylesheet" type="text/css" href="../css/default.css"></link>
        <link rel="alternate" type="application/rss+xml" title="Shallow Rampa" href="../rss.xml"></link>
    </head>
    <body>
        <h1>Shallow Rampa - Socky Clouds</h1>
        <div id="navigation">
            <a href="../">Home</a>
            <a href="../posts.html">All posts</a>
            <a href="../static/messageBoard.html">Message</a>
        </div>

        <h1>Socky Clouds</h1>

<p>by <em>dixie</em> on <strong>Date unknown</strong></p>

<p>Tagged as: <a href="../tags/data.html">data</a>.</p>

<h2 id="about">About</h2>
<p>Few visualizations of the IRC logs from <a href="socky.html">#Socky.ZU channel</a>. Images produced with <code>wordcloud</code> program from <a href="http://code.haskell.org/diagrams/">diagrams</a> haskell package.</p>
<p>Size of the letters reflects the weight. The placement and colors are random.</p>
<h2 id="nicknames-cloud">Nicknames cloud</h2>
<p>Weight is How many lines particular person wrote on the channel.</p>
<div class="figure">
<img src="img/socky_nicks.png" alt="Nicks"></img><p class="caption">Nicks</p>
</div>
<h2 id="words-cloud">Words cloud</h2>
<p>Weight is How often particular word appeared on the channel.</p>
<div class="figure">
<img src="img/socky_words.png" alt="Words"></img><p class="caption">Words</p>
</div>
<h2 id="sentences-cloud">Sentences cloud</h2>
<p>Weight is How often particular sentence appeared on the channel.</p>
<div class="figure">
<img src="img/socky_sentences.png" alt="Sentences"></img><p class="caption">Sentences</p>
</div>

    </body>
</html>
]]></description>
    <pubDate>No date found.</pubDate>
    <guid>http://rampa.sk/static/sockyClouds.html</guid>
</item>
<item>
    <title>TCP Loop Connect</title>
    <link>http://rampa.sk/static/tcpLoopConnect.html</link>
    <description><![CDATA[<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
        <title>Shallow Rampa - TCP Loop Connect</title>
        <link rel="stylesheet" type="text/css" href="../css/default.css"></link>
        <link rel="alternate" type="application/rss+xml" title="Shallow Rampa" href="../rss.xml"></link>
    </head>
    <body>
        <h1>Shallow Rampa - TCP Loop Connect</h1>
        <div id="navigation">
            <a href="../">Home</a>
            <a href="../posts.html">All posts</a>
            <a href="../static/messageBoard.html">Message</a>
        </div>

        <h1>TCP Loop Connect</h1>

<p>by <em>dixie</em> on <strong>Date unknown</strong></p>

<p>Tagged as: <a href="../tags/network.html">network</a>.</p>

<p><a href="http://www.tcpipguide.com/free/t_TCPOperationalOverviewandtheTCPFiniteStateMachineF-2.htm">TCP state machine</a> allows that TCP client establishes connection using <code>connect()</code> to itself. Look on diagram and focus on <em>Simultaneous Open</em> part.</p>
<h2 id="preconditions">Preconditions</h2>
<p>Following conditions are needed for the loop:</p>
<ol style="list-style-type: decimal">
<li>Connection is established from HOST to HOST on the same IP</li>
<li>Destination TCP Port has to be from range of ephemeral ports configured on OS</li>
<li>Listen port is unbound</li>
</ol>
<h2 id="probability">Probability</h2>
<p>Preconditions don’t automatically guarantee the loop situation. But they are needed. Loop happens when OS bind the TCP port to client attempting to connect on the same. It can happen only for ephemeral ports.</p>
<p>The correctly designed TCP client/server application should not use the ephemeral ports for service side listener. Otherwise there is a chance it will establish unwanted connection to itself - loop.</p>
<p>In general it depends on various conditions like how OS assign ephemeral ports and how TCP client constructs sockets, but probability increases when:</p>
<ol style="list-style-type: decimal">
<li>TCP client creates for each connection new socket and OS assigns new ephemeral port (done usually in some high-level languages by programmers)</li>
</ol>
<pre class="c"><code>/* 
 * Try establish connection with 127.0.0.1:33333
 * THIS IS BAD EXAMPLE because it behaves like infinite loop at various 
 * conditions 
 */

do {  
    socket = getSockFromSystem();      /* it may use always different ephemeral port */
    connectTo(socket, 127.0.0.1, 33333);  /* it may connect to itself if ephemeral port == 33333 */ 
} while(isNotConnected(socket));

/* ... continue with established connection ... */
</code></pre>
<h2 id="ephemeral-ports">Ephemeral ports</h2>
<p>For the details please read <a href="http://www.ncftp.com/ncftpd/doc/misc/ephemeral_ports.html">article describing them</a>, basically on linux they can be displayed using:</p>
<pre><code>$ cat /proc/sys/net/ipv4/ip_local_port_range 
32768	61000
</code></pre>
<p>Do not use for TCP lister port the value from that range.</p>
<h2 id="example-tcp-client">Example TCP Client</h2>
<p>Compile as <code>gcc -o tcploop tcploop.c</code></p>
<pre class="c"><code>/* tcploop.c */
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;unistd.h&gt;
#include &lt;assert.h&gt;
#include &lt;sys/socket.h&gt;
#include &lt;arpa/inet.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;netdb.h&gt;
#include &lt;string.h&gt;

int main(int argc, char *argv[])
{
  int port = 0;
  int sckfd = 0;
  int opt = 1;
  struct sockaddr_in *remote;
  char *ip = &quot;127.0.0.1&quot;;
  int rc;
  long n = 0;

  if(argc != 2){
    printf(&quot;Usage: %s &lt;listen port&gt;\n&quot;, argv[0]);
    exit(1);
  }
  port = atoi(argv[1]);

  /* Set to Localhost:Port */
  remote = (struct sockaddr_in *)malloc(sizeof(struct sockaddr_in *));
  remote-&gt;sin_family = AF_INET;
  assert(inet_pton(AF_INET, ip, (void *)(&amp;(remote-&gt;sin_addr.s_addr))) &gt; 0);
  remote-&gt;sin_port = htons(port);

  /* create socket */
  assert((sckfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) &gt; 0);
  assert(setsockopt(sckfd, SOL_SOCKET, SO_REUSEADDR, &amp;opt, sizeof(opt)) &gt;= 0);

  printf(&quot;Trying to connect...&quot;); fflush(stdout);
  while(1) {
    n++;
    rc = connect(sckfd, (struct sockaddr *)remote, sizeof(struct sockaddr)); 
    if(rc &lt; 0){
      if(n % 1000 == 0) { printf(&quot;.&quot;); fflush(stdout); }
      continue;
    }
    else {
      printf(&quot;Connected after %ld tries\n&quot;, n);
      break;
    }
  }
  /* Wait for Enter */
  printf(&quot;Press Enter to Continue...\n&quot;);
  getchar();
  close(sckfd);
  return 0;
}
</code></pre>
<h2 id="example-output">Example output</h2>
<p>Three commands outputs:</p>
<ol style="list-style-type: decimal">
<li>Show how Ephemeral port range is configured</li>
<li>Invocation of tcploop with port from that range (33333)</li>
<li><code>lsof</code> output for port 33333 in the other terminal</li>
</ol>
<pre><code>$ cat /proc/sys/net/ipv4/ip_local_port_range 
32768	61000

$ ./tcploop 33333
Trying to connect..............Connected after 11263 tries
Press Enter to Continue...

$ lsof -n | grep 33333
COMMAND     PID  USER   FD      TYPE     DEVICE  SIZE/OFF       NODE NAME
tcploop    3440 dixie    3u     IPv4     163396       0t0        TCP 127.0.0.1:33333-&gt;127.0.0.1:33333 (ESTABLISHED)
</code></pre>

    </body>
</html>
]]></description>
    <pubDate>No date found.</pubDate>
    <guid>http://rampa.sk/static/tcpLoopConnect.html</guid>
</item>
<item>
    <title>TreeMap Haskell library</title>
    <link>http://rampa.sk/static/treemap-html.html</link>
    <description><![CDATA[<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
        <title>Shallow Rampa - TreeMap Haskell library</title>
        <link rel="stylesheet" type="text/css" href="../css/default.css"></link>
        <link rel="alternate" type="application/rss+xml" title="Shallow Rampa" href="../rss.xml"></link>
    </head>
    <body>
        <h1>Shallow Rampa - TreeMap Haskell library</h1>
        <div id="navigation">
            <a href="../">Home</a>
            <a href="../posts.html">All posts</a>
            <a href="../static/messageBoard.html">Message</a>
        </div>

        <h1>TreeMap Haskell library</h1>

<p>by <em>dixie</em> on <strong>Date unknown</strong></p>

<p>Tagged as: <a href="../tags/data.html">data</a>, <a href="../tags/app.html">app</a>, <a href="../tags/lib.html">lib</a>, <a href="../tags/tree.html">tree</a>.</p>

<h2 id="overview">Overview</h2>
<p><strong>treemap-html</strong> is <a href="http://haskell.org">Haskell</a> library and tools for construction foldable HTML tree view.</p>
<p>For the details about <em>real</em> Treemaps see <a href="http://en.wikipedia.org/wiki/Treemapping">Wikipedia Treemapping</a></p>
<p>To be honest the library doesn’t construct the real treemap with sizes of rectangles on the map based on some node weight parameters. It is only <em>nested boxes tree view</em> and package names are unfortunately misleading.</p>
<h2 id="installation">Installation</h2>
<p>On Linux use <a href="http://hackage.haskell.org/">HackageDB</a> as usually.</p>
<p>On MS Windows you can use also binaries, see <a href="files/dirmap.exe" title="dirmap.exe - Binary for MS Windows">dirmap.exe</a> and <a href="files/xml2treemap.exe" title="xml2treemap.exe - Binary for MS Windows">xml2treemap.exe</a>.</p>
<pre><code><br />$ cabal install treemap-html
$ cabal install treemap-html-tools
</code></pre>
<p>Please be aware that it is an experimental throw away software.</p>
<h2 id="usage-of-library">Usage of library</h2>
<p>The function <code>treeMap</code> takes the <code>Data.Tree</code> with the <code>String</code> nodes and render it to the <code>String</code> with HTML elements.</p>
<p>Simple example which explain it:</p>
<pre class="haskell"><code>import Text.HTML.TreeMap
import Data.Tree

exampleTree :: Tree String
exampleTree = Node &quot;Slovakia&quot; [
                 Node &quot;Bratislava&quot; [
                     Node &quot;Petrzalka&quot; [] 
                 ], 
                 Node &quot;Zilina&quot; [ 
                     Node &quot;Hajik&quot; [
                        Node &quot;Mr. Cirman&quot; [] 
                     ] 
                 ]
              ]

main = putStrLn (treeMap exampleTree)
</code></pre>
<p>Screen shot from Firefox (unfolded with clicks on the labels):</p>
<div class="figure">
<img src="img/treemap-example.png" alt="TreeMap Example"></img><p class="caption">TreeMap Example</p>
</div>
<h2 id="usage-of-tools">Usage of tools</h2>
<p>Two basic commands provided:</p>
<ol style="list-style-type: decimal">
<li><code>dirmap</code></li>
<li><code>xml2treemap</code></li>
</ol>
<h3 id="dirmap">dirmap</h3>
<p>Creates tree view from the directory content.</p>
<p>Usage:</p>
<pre><code><br />Usage: dirmap [OPTION...] directory
  -v          --verbose        verbose output on stderr
  -l Integer  --level=Integer  maxlevel for recursive directory listing
  -n Integer  --name=Integer   maximum size of filename. than truncation.
  -o FILE     --output=FILE    output FILE
  -f          --files          include files in listing
  -e                           do not included subtrees without files
</code></pre>
<p>Example usage:</p>
<pre><code><br />$ dirmap -f -n 1000 -l 2 -o libs_l2.html /usr/lib
</code></pre>
<h3 id="xml2treemap">xml2treemap</h3>
<p>Creates tree view from the XML.</p>
<p>Usage:</p>
<pre><code>Usage: xml2treemap [OPTION...] &lt;input file.xml&gt;
  -v          --verbose       verbose output on stderr
  -o FILE     --output=FILE   output FILE
</code></pre>
<p>Example usage:</p>
<pre><code><br />$ xml2treemap -o map.xml /usr/share/dbus-1/interfaces/org.kde.KWin.xml
</code></pre>
<h2 id="examples">Examples</h2>
<p>The boxes are unfolded with mouse click on their text labels.</p>
<ul>
<li><a href="http://rampa.sk/up/upload/haskell/dirmap.html">Linux source code dirmap</a></li>
</ul>
<div class="figure">
<img src="img/kernel-treemap.png" alt="Linux source code dirmap"></img><p class="caption">Linux source code dirmap</p>
</div>
<ul>
<li><a href="http://rampa.sk/up/upload/haskell/hackagedb-treemap.html">Hackage DB modules treemap</a></li>
</ul>
<div class="figure">
<img src="img/hackagedb-treemap.png" alt="Hackage DB modules dirmap"></img><p class="caption">Hackage DB modules dirmap</p>
</div>
<ul>
<li><a href="http://rampa.sk/up/upload/haskell/xmlmap.html">Ant Build XML with xml2treemap</a></li>
</ul>
<div class="figure">
<img src="img/xml2treemap-example.png" alt="Ant Build XML with xml2treemap"></img><p class="caption">Ant Build XML with xml2treemap</p>
</div>
<h2 id="download">Download</h2>
<ul>
<li>Binaries for MS Windows:
<ul>
<li><a href="files/dirmap.exe" title="dirmap.exe - Binary for MS Windows">dirmap.exe</a></li>
<li><a href="files/xml2treemap.exe" title="xml2treemap.exe - Binary for MS Windows">xml2treemap.exe</a></li>
</ul></li>
</ul>
<h2 id="sources">Sources</h2>
<ul>
<li>Darcs repository
<ul>
<li>treemap-html <a href="http://patch-tag.com/r/dixiecko/treemap-html">http://patch-tag.com/r/dixiecko/treemap-html</a></li>
<li>treemap-html-tools <a href="http://patch-tag.com/r/dixiecko/treemap-html-tools">http://patch-tag.com/r/dixiecko/treemap-html-tools</a></li>
</ul></li>
<li>HackageDB Page
<ul>
<li>treemap-html <a href="http://hackage.haskell.org/package/treemap-html">http://hackage.haskell.org/package/treemap-html</a></li>
<li>treemap-html-tools <a href="http://hackage.haskell.org/package/treemap-html-tools">http://hackage.haskell.org/package/treemap-html-tools</a></li>
</ul></li>
</ul>
<h2 id="changes-treemap-html">Changes treemap-html</h2>
<ul>
<li>0.1 (later) marked as a depreciated package</li>
<li>0.1 initial release to hackage</li>
</ul>
<h2 id="changes-treemap-html-tools">Changes treemap-html-tools</h2>
<ul>
<li>0.2 (later) marked as a depreciated package</li>
<li>0.2 xml2treemap command included</li>
<li>0.1 initial release to hackage</li>
</ul>

    </body>
</html>
]]></description>
    <pubDate>No date found.</pubDate>
    <guid>http://rampa.sk/static/treemap-html.html</guid>
</item>
<item>
    <title>Wikipedia4epub</title>
    <link>http://rampa.sk/static/wikipedia4epub.html</link>
    <description><![CDATA[<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
        <title>Shallow Rampa - Wikipedia4epub</title>
        <link rel="stylesheet" type="text/css" href="../css/default.css"></link>
        <link rel="alternate" type="application/rss+xml" title="Shallow Rampa" href="../rss.xml"></link>
    </head>
    <body>
        <h1>Shallow Rampa - Wikipedia4epub</h1>
        <div id="navigation">
            <a href="../">Home</a>
            <a href="../posts.html">All posts</a>
            <a href="../static/messageBoard.html">Message</a>
        </div>

        <h1>Wikipedia4epub</h1>

<p>by <em>dixie</em> on <strong>Date unknown</strong></p>

<p>Tagged as: <a href="../tags/ebook.html">ebook</a>, <a href="../tags/app.html">app</a>.</p>

<h2 id="overview">Overview</h2>
<p><strong>Wikipedia4epub</strong> is command line application which creates the <strong>offline ebook</strong> from articles on <a href="http://www.wikipedia.org">wikipedia</a>.</p>
<p>It doesn’t provide the complete offline wikipedia can download given article and its direct children <code>(wiki4e-mkepub-subtree)</code></p>
<p>Examples via wiki4e-mkepub-subtree:</p>
<ul>
<li><a href="files/EPUB.epub">ebook from EPUB article</a></li>
<li><a href="http://handra.rampa.sk/Nintendo_Entertainment_System.epub">ebook from Nintendo_Entertainment_System article</a></li>
</ul>
<h2 id="installation">Installation</h2>
<p>The best is to use HackageDB, the GHC 6.12.1 and newer is required.</p>
<pre><code>$ cabal install wikipedia4epub
</code></pre>
<p>Please be aware that it is still ALPHA quality software.</p>
<h2 id="usage">Usage</h2>
<p>There are following commands:</p>
<ul>
<li><code>wiki4e-mkepub-subtree http://en.wikipedia.org/&lt;acticle&gt;</code></li>
</ul>
<h3 id="example-of-usage-wiki4e-mkepub-subtree">Example of usage (wiki4e-mkepub-subtree)</h3>
<pre class="Java"><code>$ wiki4e-mkepub-subtree http://en.wikipedia.org/wiki/EPUB
# STAGE 1/4 - Fetch starting article: http://en.wikipedia.org/wiki/EPUB
[1/1] Already cached. Skipping download. /home/dixie/.wiki4e/wiki4e_fetch/EPUB
# STAGE 2/4 - Fetch children articles: 113
[1/113] Already cached. Skipping download. /home/dixie/.wiki4e/wiki4e_fetch/EPUB
[2/113] Fetching : http://en.wikipedia.org/wiki/Filename_extension
...
[11/113] Fetching : http://en.wikipedia.org/wiki/DTBook
[12/113] Fetching : http://en.wikipedia.org/wiki/Website
...
[113/113] Already cached. Skipping download. /home/dixie/.wiki4e/wiki4e_fetch/Main_Page
# STAGE 3/4 - Sanitize articles
# STAGE 4/4 - Download images
Count = 352
[1/352] Already cached. Skipping download. /home/dixie/.wiki4e/wiki4e_images/100px-EBookreal.jpg
[2/352] Already cached. Skipping download. /home/dixie/.wiki4e/wiki4e_images/50px-Question_book-new.svg.png
...
Done.
</code></pre>
<p>For a performance reasons, the downloaded articles amd images are cached. Cache has to be cleanup manually.</p>
<p>For caching purpose following directories are constructed:</p>
<ul>
<li><code>$HOME/.wiki4e/wiki4e_fetch/</code></li>
<li><code>$HOME/.wiki4e/wiki4e_sanitize/</code></li>
<li><code>$HOME/.wiki4e/wiki4e_images/</code></li>
</ul>
<h2 id="screenshot">Screenshot</h2>
<p>The quality of screenshots is poor because they were shot with a phone camera.</p>
<h3 id="listing-of-the-books-in-reader">Listing of the books in Reader</h3>
<div class="figure">
<img src="img/sony_books.jpeg" alt="Book Listing. First is Wikipedia from Firefox"></img><p class="caption">Book Listing. First is Wikipedia from Firefox</p>
</div>
<h3 id="context-table-of-the-wikipedia-articles">Context table of the Wikipedia articles</h3>
<div class="figure">
<img src="img/sony_table.jpeg" alt="Context Table. Each Chapter is one Article"></img><p class="caption">Context Table. Each Chapter is one Article</p>
</div>
<h3 id="one-selected-wikipedia-article">One selected Wikipedia article</h3>
<div class="figure">
<img src="img/sony_article.jpeg" alt="Article Content, Top"></img><p class="caption">Article Content, Top</p>
</div>
<h3 id="the-same-article-after-scrolling">The same article after scrolling</h3>
<div class="figure">
<img src="img/sony_article2.jpeg" alt="Article Content, Scrolled"></img><p class="caption">Article Content, Scrolled</p>
</div>
<h2 id="source-code-bugs">Source code &amp; bugs</h2>
<p><a href="http://darcs.net">Darcs</a> repositories:</p>
<ul>
<li>Library for EPUB library: <a href="http://patch-tag.com/r/dixiecko/epub">http://patch-tag.com/r/dixiecko/epub</a></li>
<li>Wikipedia4epub program: <a href="http://darcsden.com/dixie/wikipedia4epub">http://darcsden.com/dixie/wikipedia4epub</a></li>
</ul>
<p>For reporting the bug or questions please write me email to <script type="text/javascript">
<!--
h='&#x67;&#x6d;&#x61;&#x69;&#108;&#46;&#x63;&#x6f;&#x6d;';a='&#64;';n='&#100;&#x69;&#120;&#x69;&#x65;&#x63;&#x6b;&#x6f;';e=n+a+h;
document.write('<a h'+'ref'+'="ma'+'ilto'+':'+e+'">'+'<code>'+e+'</code>'+'<\/'+'a'+'>');
// -->
</script><noscript>dixiecko at gmail dot com</noscript></p>
<h2 id="changes">Changes</h2>
<ul>
<li>0.0.12 &lt;2011–11–11&gt;
<ul>
<li>remove all commands except subtree</li>
<li>replace hardcoded usage of wikipedia url</li>
<li>thanks to previous point the book can be created from any wikipedia language</li>
</ul></li>
<li>0.0.10 … 0.0.11
<ul>
<li>development amnesia</li>
</ul></li>
<li>0.0.9 &lt;2011–02–17&gt;
<ul>
<li>decompress gzip compressed pages</li>
<li>use makeValid for sanitize of filenames</li>
<li>set stdout to binary mode</li>
</ul></li>
<li>0.0.7 and 0.0.8
<ul>
<li>broken uploads</li>
</ul></li>
<li>0.0.6 &lt;2010–07–21&gt;
<ul>
<li>enable relative hrefs within epub</li>
<li>minor fixes (allow the ’:’ char within name of the article)</li>
</ul></li>
<li>0.0.5 &lt;2010–03–14&gt;
<ul>
<li>enable hrefs within articles in one epub</li>
<li>new command wiki4e-mkepub-subtree fetchs article and children</li>
<li>new command wiki4e-mkepub-cache makes epub from cached articles</li>
<li>known issue - space leaks during article hardvesting for images</li>
</ul></li>
<li>0.0.4 &lt;2010–02–13&gt;
<ul>
<li>create temporary files at getAppUserDataDirectory()</li>
<li>display progress of the download</li>
</ul></li>
<li>0.0.3 &lt;2010–01–11&gt;
<ul>
<li>download images</li>
</ul></li>
</ul>
<h2 id="epub-format">EPUB Format</h2>
<p>It is standarized &amp; open format for ebooks, but basically it is ZIP-ed XHTML pages, images with some metadata. For the details see <a href="http://en.wikipedia.org/wiki/EPUB">EPUB Article on Wikipedia</a></p>
<p>It is suppored with my <a href="http://www.sonystyle.com/webapp/wcs/stores/servlet/ProductDisplay?productId=8198552921665245739&amp;storeId=10151">ebook reader (PRS–505)</a> and also my new <a href="http://wiki.mobileread.com/wiki/Hanlin_V5">ebook reader HanLin V5</a>.</p>
<p>The “full blown” open source software for ebook management - <a href="http://calibre-ebook.com/">Calibre</a> - supports the EPUB too.</p>

    </body>
</html>
]]></description>
    <pubDate>No date found.</pubDate>
    <guid>http://rampa.sk/static/wikipedia4epub.html</guid>
</item>

    </channel> 
</rss>

