<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Serendipitous altruism &#187; PHP</title>
	<atom:link href="http://serendipity.ruwenzori.net/index.php/category/php/feed" rel="self" type="application/rss+xml" />
	<link>http://serendipity.ruwenzori.net</link>
	<description>Pseudo-random experience capitalization by Jean-Marc Liotier, just in case...</description>
	<lastBuildDate>Mon, 04 Mar 2013 10:29:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="http://superfeedr.com/hubbub"/><atom:link rel="hub" href="http://ayup.us/"/><cloud domain='serendipity.ruwenzori.net' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
		<item>
		<title>Free GPL and BSD licensed charts and graphs generator libraries</title>
		<link>http://serendipity.ruwenzori.net/index.php/2007/10/19/free-gpl-and-bsd-licensed-charts-and-graphs-generator-libraries</link>
		<comments>http://serendipity.ruwenzori.net/index.php/2007/10/19/free-gpl-and-bsd-licensed-charts-and-graphs-generator-libraries#comments</comments>
		<pubDate>Fri, 19 Oct 2007 09:12:24 +0000</pubDate>
		<dc:creator>Jean-Marc Liotier</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Systems]]></category>

		<guid isPermaLink="false">http://serendipity.ruwenzori.net/index.php/2007/10/19/free-gpl-and-bsd-licensed-charts-and-graphs-generator-libraries</guid>
		<description><![CDATA[PHP : Sparkline is a PHP library that produces Edward Tufte inspired &#8220;intense, simple, wordlike graphics&#8221;. I like the way sparklines spruce up text without interrupting its flow. Libchart is a simple PHP charting library that reminds me of the core functionality of the Jpgraph. Simple to deploy and does the basics well. Jpgraph can [...]]]></description>
			<content:encoded><![CDATA[<p> PHP :</p>
<ul>
<li><a href="http://sparkline.org/">Sparkline</a> is a PHP library that produces <a href="http://www.edwardtufte.com/">Edward Tufte</a> inspired &#8220;intense, simple, wordlike graphics&#8221;. I like the way sparklines spruce up text without interrupting its flow.</li>
<li><a href="http://naku.dohcrew.com/libchart/pages/introduction/">Libchart</a> is a simple PHP charting library that reminds me of the core functionality of the <a href="http://www.aditus.nu/jpgraph/">Jpgraph</a>. Simple to deploy and does the basics well.</li>
<li><a href="http://www.aditus.nu/jpgraph/">Jpgraph</a> can be used to create numerous types of graphs either on-line or written to a file. The range of functionality is very impressive and new features get added all the time. But basic use remains simple. <a href="http://www.aditus.nu/jpgraph/">Jpgraph</a> is used by many Free software projects such as <a href="http://www.mantisbt.org/">Mantis</a>.</li>
<li><a href="http://pear.veggerby.dk/">PEAR::Image_Graph</a> was formerly known as GraPHPite. It supports a good choice of graph types, five types of data sources and many output formats.</li>
<li><a href="http://www.artichow.org/">Artichow</a> is yet another small PHP charting library. Functionality is limited but it does look clean. The downside is that everything about it is in French&#8230; But that may be an upside if you are a French speaker !</li>
</ul>
<p>Command-line and CGI :</p>
<ul>
<li><a href="http://ploticus.sourceforge.net/doc/welcome.html">Ploticus</a> provides a C and Python API, and a Perl command line that can be called from CGI. It is a mature solution that is no longer on the cutting edge but still satisfy many users.</li>
</ul>
<p>DHTML and Javascript :</p>
<ul>
<li><a href="http://simile.mit.edu/timeplot/">Timeplot</a> is a DHTML-based AJAXy widget for plotting time series and overlay        time-based events over them (with the same data formats that <a href="http://simile.mit.edu/timeline/">Timeline</a> supports). It has limited functionnality, but what it does looks very good and easy to integrate.</li>
<li><a href="http://www.liquidx.net/plotkit/">Plotkit</a> is aimed at web    applications that require plotting series of data in modern web    browsers. It requires <a href="http://mochikit.com/">MochiKit</a> and supports HTML Canvas and SVG, which makes it a cutting edge way to render graphics. It supports graphing from a dynamic table.</li>
<li><a href="http://solutoire.com/plotr/">Plotr</a> is a fork of <a href="http://www.liquidx.net/plotkit/">Plotkit</a> with no need for MochiKit. The result is an incredibly lightweight charting framework : only 12 KB !</li>
</ul>
<p>Multiplatform :</p>
<ul>
<li><a href="http://timepedia.org/ChronoscopeHome.html">Chronoscope</a> aims  	to bring something like the experience of Google Maps or Google Earth to 	time series data. It is quite flexible as it supports <a href="http://timepedia.org/ChronoscopeAuthoring.html">three authoring models</a> : <a href="http://code.google.com/webtoolkit/">GWT</a> Widget using Java, Javascript widget, pure HTML+CSS using microformats. In addition it is capable of <a href="http://timepedia.org/ChronoscopeLarge.htm">smart handling of large datasets, even on the client side</a>.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://serendipity.ruwenzori.net/index.php/2007/10/19/free-gpl-and-bsd-licensed-charts-and-graphs-generator-libraries/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Munin plugin for IRC channel user count</title>
		<link>http://serendipity.ruwenzori.net/index.php/2007/08/14/munin-plugin-for-irc-channel-user-count</link>
		<comments>http://serendipity.ruwenzori.net/index.php/2007/08/14/munin-plugin-for-irc-channel-user-count#comments</comments>
		<pubDate>Tue, 14 Aug 2007 13:35:18 +0000</pubDate>
		<dc:creator>Jean-Marc Liotier</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Systems]]></category>

		<guid isPermaLink="false">http://serendipity.ruwenzori.net/index.php/2007/08/14/munin-plugin-for-irc-channel-user-count</guid>
		<description><![CDATA[Since I began playing with Net_SmartIRC, I found a new way to put that library to work : a Munin plugin script to monitor the number of users in an IRC channel. Here is an example of the graphical output provided by Munin : As you can see, the Debian IRC channel is a very [...]]]></description>
			<content:encoded><![CDATA[<p>Since <a href="http://serendipity.ruwenzori.net/index.php/2007/07/26/getting-friendly-with-pligg-irc-notifications-and-post-submission-restriction-by-user-level">I began playing with Net_SmartIRC</a>, I found a new way to put that library to work : a <a href="http://munin.projects.linpro.no/">Munin</a> plugin script to monitor the number of users in an <a href="http://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a> channel.</p>
<p>Here is an example of the graphical output provided by <a href="http://munin.projects.linpro.no/">Munin</a> :</p>
<p style="text-align: center"><img src="http://www.ruwenzori.net/blog_images/kivu.grabeuh.com-debian_irc_channel_users-day.png" height="250" width="468" /></p>
<p>As you can see, the <a href="http://en.wikipedia.org/wiki/Debian">Debian</a> IRC channel is a very crowded place ! You may also notice small gaps in the data : the script sometimes fails on a refused connection, and I have not elucidated the cause. But as the graph shows, I have coded the script so that those failure cases only result in a null output, which <a href="http://munin.projects.linpro.no/">Munin</a> handles well by showing a blank record.</p>
<p>Because my lacking skills and crass lazyness  prevented me from writing it all in a single language, I hacked that plugin by simply patching together the parts I could produce rapidly :</p>
<ul>
<li><a href="http://www.ruwenzori.net/code/munin_irc_channel_users_plugin/irc_channel_users.html">irc_channel_users</a> is a Munin plugin script that calls <a href="http://www.ruwenzori.net/code/munin_irc_channel_users_plugin/irc_channel_users.php.html">irc_channel_users.php</a></li>
</ul>
<ul>
<li><a href="http://www.ruwenzori.net/code/munin_irc_channel_users_plugin/irc_channel_users.php.html">irc_channel_users.php</a> performs the actual login and count on the IRC server.</li>
</ul>
<p>The PHP script is uses <a href="http://pear.php.net/package/Net_SmartIRC/docs/latest/li_Net_SmartIRC.html" target="_blank">Net_SmartIRC</a> which is available in Debian as <a href="http://packages.debian.org/stable/web/php-net-smartirc" target="_blank">php-net-smartirc</a>. It must be configured by modifying the hardcoded server and channel &#8211; that may not be what is best in production use, but for the moment it works for me. Here is the full extent of the PHP code :</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span> ?php
<span style="color: #b1b100;">include_once</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'/usr/share/php/Net/SmartIRC.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$irc</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">&amp;new</span> Net_SmartIRC<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//$irc-&gt;setDebug(SMARTIRC_DEBUG_ALL);</span>
<span style="color: #000088;">$irc</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setUseSockets</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$irc</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setBenchmark</span><span style="color: #009900;">&#40;</span><span style="color: #009900; font-weight: bold;">TRUE</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$irc</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">connect</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'irc.eu.freenode.net'</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">6667</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$irc</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">login</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'usercount'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'Users counting service for Munin monitoring'</span><span style="color: #339933;">,</span>
<span style="color: #0000ff;">'0'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'usercount'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$irc</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getList</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'#test_channel'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$resultar</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$irc</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">objListenFor</span><span style="color: #009900;">&#40;</span>SMARTIRC_TYPE_LIST<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$irc</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">disconnect</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$resultar</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$resultar</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">rawmessageex</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">4</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>The <a href="http://www.ruwenzori.net/code/munin_irc_channel_users_plugin/irc_channel_users.html">irc_channel_users</a> <a href="http://tiswww.case.edu/php/chet/bash/bashtop.html">Bash</a> script is also quite simple. Apart from the barely modified boilerplate adapted from <a href="http://munin.projects.linpro.no/browser/trunk/node/node.d.linux">other simple Munin bash scripts</a>, the specific meat of the script is as follow :</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">work_directory</span>=<span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>jim<span style="color: #000000; font-weight: bold;">/</span>applications<span style="color: #000000; font-weight: bold;">/</span>munin<span style="color: #000000; font-weight: bold;">/</span>irc_channel_users
<span style="color: #007800;">php_interpreter</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">which</span> php<span style="color: #000000; font-weight: bold;">`</span>
<span style="color: #007800;">user_population</span>=<span style="color: #000000; font-weight: bold;">`</span><span style="color: #007800;">$php_interpreter</span> <span style="color: #007800;">$work_directory</span><span style="color: #000000; font-weight: bold;">/</span>irc_channel_users.php
 <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">awk</span> <span style="color: #660033;">-F</span><span style="color: #ff0000;">&quot;#&quot;</span> <span style="color: #ff0000;">'{print($1)}'</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">grep</span> <span style="color: #660033;">-e</span> <span style="color: #ff0000;">'^[0-9]+$'</span><span style="color: #000000; font-weight: bold;">`</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #660033;">-n</span> <span style="color: #ff0000;">&quot;population.value &quot;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$user_population</span></pre></td></tr></table></div>

<p>As you can see, the munin bash script is mostly about setting a few Munin variables, calling the php script and formatting the output.</p>
<p>Here are sample outputs :</p>
<pre>
15:32 munin@kivu /etc/munin/plugins% ./irc_channel_users autoconf
yes

15:32 munin@kivu /etc/munin/plugins% ./irc_channel_users config
graph_title #b^2 IRC channel users
graph_args --base 1000 -l 0
graph_vlabel population
graph_scale no
population.label users

15:32 munin@kivu /etc/munin/plugins% ./irc_channel_users
population.value 6</pre>
<p>No demonstration is available on a public site, but the above graph is about all there is to know about the output of this plugin.</p>
<p><a href="http://www.ruwenzori.net/code/munin_irc_channel_users_plugin/">The code resides on its own page and updates if they ever appear shall be stored there</a>.</p>
<p>This experience taught me that coding basic <a href="http://muninexchange.projects.linpro.no/">Munin plugins</a> is fun and easy. I will certainly come back to it for future automated graphing needs.</p>
<p>And for those who wonder about the new syntax highlighting, it is produced using <a href="http://qbnz.com/highlighter/">GeSHi</a> by <a href="http://www.emacsblog.org/">Ryan McGeary</a>&#8216;s very nice <a href="http://wordpress.org/extend/plugins/wp-syntax/">WP-Syntax</a> WordPress plugin.</p>
]]></content:encoded>
			<wfw:commentRss>http://serendipity.ruwenzori.net/index.php/2007/08/14/munin-plugin-for-irc-channel-user-count/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Awaiting Lilina&#8217;s rebirth</title>
		<link>http://serendipity.ruwenzori.net/index.php/2007/07/27/awaiting-lilinas-rebirth</link>
		<comments>http://serendipity.ruwenzori.net/index.php/2007/07/27/awaiting-lilinas-rebirth#comments</comments>
		<pubDate>Thu, 26 Jul 2007 23:53:37 +0000</pubDate>
		<dc:creator>Jean-Marc Liotier</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RSS]]></category>

		<guid isPermaLink="false">http://serendipity.ruwenzori.net/index.php/2007/07/27/awaiting-lilinas-rebirth</guid>
		<description><![CDATA[Since my migration to PHP 5 revealed a problem with the ancient Lilina 0.7 my interest in Lilina has been rekindled. As I said, I am quite hopeful because I would like to keep using Lilina for small aggregations and avoid deploying the more complex Gregarius where its better scalability is not needed. What first [...]]]></description>
			<content:encoded><![CDATA[<p>Since my <a href="http://serendipity.ruwenzori.net/index.php/2007/07/19/php5-breaks-lilina-07-solution-found">migration to PHP 5 revealed a problem with the ancient Lilina 0.7</a> my interest in Lilina has been rekindled. As I said, I am quite hopeful because I would like to keep using <a href="http://lilina.cubegames.net/">Lilina</a> for small aggregations and avoid deploying the more complex <a href="http://gregarius.net/">Gregarius</a> where <a href="http://serendipity.ruwenzori.net/index.php/2006/10/18/gregarius-better-than-lilina-for-aggregating-large-number-of-feeds">its better scalability</a> is not needed. <a href="http://serendipity.ruwenzori.net/index.php/2006/06/07/compound-newsfeeds-with-lilina">What first attracted me toward Lilina</a> still holds true.</p>
<p>I started by <a href="http://code.google.com/p/lilina/source">checking out the development version from Google Code</a> and I deployed it on a handful of small aggregations such as <a href="http://jim.liotier.org/feed/">my personal feed</a>. I then immediately started gently pestering the project lead about a few bugs, first by mail and then using <a href="http://code.google.com/p/lilina/issues/list?can=1&amp;q=&amp;colspec=ID+Type+Status+Priority+Milestone+Owner+Summary&amp;cells=tiles">the nice Google Code Lilina issue tracker</a>. <a href="http://serendipity.ruwenzori.net/index.php/2006/07/26/ryan-mccue-takes-over-the-management-of-the-lilina-project">Ryan Mc Cue</a> has been very responsive and very nice. I look forward making my small contributions in helping him bring <a href="http://lilina.cubegames.net/">Lilina</a>  toward 1.0</p>
<p><a href="http://serendipity.ruwenzori.net/index.php/2006/07/26/ryan-mccue-takes-over-the-management-of-the-lilina-project">A year has passed since Ryan announced his intentions</a>. He has already done a lot but his  <a href="http://lilina.googlecode.com/svn/trunk/lilina/TODO">roadmap for Lilina 1.0 is very ambitious</a> so there is still a lot of work remaining. At the current pace it may take a few more months, but this is a journey I am eager to follow : I like <a href="http://lilina.cubegames.net/">Lilina</a> and since I am a novice PHP coder I am quite happy whenever I find a project I like and to which I can give a little help. I am actually quite proud of being mentioned in <a href="http://lilina.googlecode.com/svn/trunk/lilina/CREDITS">the credits</a> for <a href="http://serendipity.ruwenzori.net/index.php/2006/06/08/lilina-now-outputs-rss-with-feedcreator">having brought RSS output to Lilina</a> : it was the first time I had some of my code included in a significant project.</p>
]]></content:encoded>
			<wfw:commentRss>http://serendipity.ruwenzori.net/index.php/2007/07/27/awaiting-lilinas-rebirth/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting friendly with Pligg &#8211; IRC notifications and post submission restriction by user level</title>
		<link>http://serendipity.ruwenzori.net/index.php/2007/07/26/getting-friendly-with-pligg-irc-notifications-and-post-submission-restriction-by-user-level</link>
		<comments>http://serendipity.ruwenzori.net/index.php/2007/07/26/getting-friendly-with-pligg-irc-notifications-and-post-submission-restriction-by-user-level#comments</comments>
		<pubDate>Thu, 26 Jul 2007 12:59:54 +0000</pubDate>
		<dc:creator>Jean-Marc Liotier</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://serendipity.ruwenzori.net/index.php/2007/07/26/getting-friendly-with-pligg-irc-notifications-and-post-submission-restriction-by-user-level</guid>
		<description><![CDATA[A few old friends and I often hang together on our usual IRC channel, and while discussing we like to share links. I thought it might be a good idea to use a web tool for that so that we can also share our favorite links with the rest of the world. I thought a [...]]]></description>
			<content:encoded><![CDATA[<p>A few old friends and I often hang together on our usual IRC channel, and while discussing we like to share links. I thought it might be a good idea to use a web tool for that so that we can also share our favorite links with the rest of the world. I thought a private <a href="http://www.digg.com/">Digg </a>clone could play that role, and I needed an excuse for more <a href="http://www.php.net/">PHP</a> development. After some research I found that <a href="http://pligg.com/">Pligg</a> was the best candidate. I downloaded Beta 9.7 and I have been quite amazed how fast I got <a href="http://infotain.ruwenzori.net/">a smooth Pligg site</a> up and running &#8211; it seems like much work went into this code.</p>
<p>The first bug that arose was <a href="http://forums.pligg.com/general-help/7708-solved-mangled-accents-link_title-field-links-table.html">mangled accents in some URLs. I solved it by adding a few cases to a character substitution matrix</a>. This matrix is used to sanitize strings before using them for URLs. The problem is that this method requires each accented character to be treated individually. Maybe a more general solution exists. Anyway I am surprised that no other user noticed that problem with French accents before.</p>
<p>Since I wanted to use <a href="http://pligg.com/">Pligg</a> in a way closely associated with our <a href="http://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a> habit, I thought it might be a good idea to make Pligg capable of notifying an <a href="http://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a> channel of an upcoming story. Rumaging through <a href="http://www.php.net/">PHP</a> libraries capable of speaking <a href="http://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a> I ended up using <a href="http://pear.php.net/package/Net_SmartIRC/docs/latest/li_Net_SmartIRC.html" target="_blank">Net_SmartIRC</a> which is available in Debian as <a href="http://packages.debian.org/stable/web/php-net-smartirc" target="_blank">php-net-smartirc</a>. The examples packaged with the class are quite good at teaching its use so I soon wrote <a href="http://www.ruwenzori.net/code/Net_SmartIRC/">a small proof-of-concept of notifying an IRC</a><a href="http://www.ruwenzori.net/code/Net_SmartIRC/"> channel from </a><a href="http://www.ruwenzori.net/code/Net_SmartIRC/">PHP.</a></p>
<p><a href="http://forums.pligg.com/core-development/7742-irc-notification-pligg.html">Some more hacking later I figured how to splice that IRC notification functionality into Pligg</a>. This is a prototype : it works fine for me but you need to overwrite a file from the standard Pligg and edit it with your parameters, and it probably ignores any convention used by those who are familiar with working on Pligg. To reach release quality this functionality should probably be architectured as a proper configurable Pligg plugin. To use it, you need to install <a href="http://pear.php.net/package/Net_SmartIRC/docs/latest/li_Net_SmartIRC.html" target="_blank">Net_SmartIRC</a> which is available in Debian as <a href="http://packages.debian.org/stable/web/php-net-smartirc" target="_blank">php-net-smartirc</a>. Make sure that the path of that library as declared in my submit.php is correct.Then you need to edit my submit.php to set connect parameters, login parameters, and the channel. Make a backup of your original submit.php and replace it with mine. That is all !</p>
<p>With IRC notification in place I found that I did not want just anyone spamming our favorite IRC channel. <a href="http://pligg.com/">Pligg</a> has three hardcoded user levels : &#8220;user&#8221;, &#8220;admin&#8221; and &#8220;god&#8221;. By default the users can submit posts. I decided to restrict posting to the &#8220;admin&#8221; and &#8220;god&#8221; levels. That way we keep control of posting, our friends can vote and comment as &#8220;user&#8221; and the rest of the anonymous world can read the site.</p>
<p><a href="http://forums.pligg.com/general-help/3429-rights-access-according-user-level.html">With the beginning of a familiarity with the Pligg code it did not take me too much grepping to understand the conditional access system and wedge a typical implementation where it should work</a>. And work it did, just as advertised ! I am not sure that the core Pligg developers intended this previously clean switch statement to be hacked like that, but it works for me. A further step would be to make this restriction code conditional and to make the condition a user-configurable parameter in /admin_config.php so that god can choose at which user level submissions are allowed. I am sure that many site operators would appreciate this feature.</p>
<p>So as a summary and conclusion, here is the patch that modifies Pligg&#8217;s 9.7 submit.php to provide post submission restriction by user level and IRC notification of posts :</p>
<ul>
<li><a href="http://www.ruwenzori.net/code/pligg/submit.php.orig_digg9.7.html">The original submit.php from Pligg 9.7</a></li>
<li><a href="http://www.ruwenzori.net/code/pligg/submit.php-Pligg_patched_by_JML_for_restricted_post+irc_notification.html">submit.php from Pligg 9.7 patched to provide post restriction by user level and IRC notification of post</a></li>
<li><a href="http://www.ruwenzori.net/code/pligg/submit.php-JML_Pligg_restricted_post+irc_notification_patch.diff.html">diff between the above files</a>.</li>
</ul>
<p>Have fun with <a href="http://www.pligg.com/">Pligg</a> ! I&#8217;m done with it for now but who knows what other functions I&#8217;ll feel like hacking into it in the future&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://serendipity.ruwenzori.net/index.php/2007/07/26/getting-friendly-with-pligg-irc-notifications-and-post-submission-restriction-by-user-level/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PHP5 breaks Lilina 0.7 &#8211; solution found</title>
		<link>http://serendipity.ruwenzori.net/index.php/2007/07/19/php5-breaks-lilina-07-solution-found</link>
		<comments>http://serendipity.ruwenzori.net/index.php/2007/07/19/php5-breaks-lilina-07-solution-found#comments</comments>
		<pubDate>Thu, 19 Jul 2007 14:37:01 +0000</pubDate>
		<dc:creator>Jean-Marc Liotier</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Systems]]></category>

		<guid isPermaLink="false">http://serendipity.ruwenzori.net/index.php/2007/07/19/php5-breaks-lilina-07-solution-found</guid>
		<description><![CDATA[After migrating an host to PHP5 I found that Lilina 0.7 no longer works and instead produces the following error : PHP Fatal error: Cannot redeclare class soapclient in /your-lilina-directory/inc/nusoap.php on line 4096 Happily, Robert Mao at &#8220;Inmates are Running the Asylum&#8221; had already stumbled on this and found a solution. Robert found a report [...]]]></description>
			<content:encoded><![CDATA[<p>After migrating an host to PHP5 I found that <a href="http://lilina.cubegames.net/">Lilina</a> 0.7 no longer works and instead produces the following error :</p>
<blockquote><p>PHP Fatal error:  Cannot redeclare class soapclient in /your-lilina-directory/inc/nusoap.php on line 4096</p></blockquote>
<p>Happily, <a href="http://dev.robertmao.com/2007/06/27/install-lilina-07-on-php-50-linux-box/">Robert Mao at &#8220;Inmates are Running the Asylum&#8221; had already stumbled on this and found a solution</a>.</p>
<p>Robert found a <a href="http://www.oreillynet.com/cs/user/view/cs_msg/56663">report of the Nusoap</a><a href="http://www.oreillynet.com/cs/user/view/cs_msg/56663"> library conflicting with PHP5&#8242;s built in SOAP functions</a>. The only use of <a href="http://dietrich.ganx4.com/nusoap/">Nusoap</a> in <a href="http://lilina.cubegames.net/">Lilina</a> is the Google API. So Robert found that by disabling the peripheral functionality dependant on the Google API Lilina no longer produced the error.</p>
<p>It works but it is a quick and dirty fix. Enters <a href="http://serendipity.ruwenzori.net/index.php/2006/07/26/ryan-mccue-takes-over-the-management-of-the-lilina-project">Ryan Mc Cue who took over Lilina&#8217;s development last year</a>. Ryan soon mentioned that the aforementioned functionality is completely disabled in the current development version of Lilina which therefore works fine with PHP5.</p>
<p>There has not been a release of <a href="http://lilina.cubegames.net/">Lilina</a> in quite a while but indeed Ryan and his friends have not been idle and on top of a <a href="http://lilina.cubegames.net/">Brand new web site</a> there have been many commits to the <a href="http://code.google.com/p/lilina/source">Lilina Subversion repository on Google Code</a>.</p>
<p>So <a href="http://lilina.cubegames.net/">Lilina</a> 1.0 is in development and I&#8217;m going to take look at it. I am quite hopeful because I would like to keep using <a href="http://lilina.cubegames.net/">Lilina</a> for small aggregations and avoid deploying the more complex <a href="http://gregarius.net/">Gregarius</a> where <a href="http://serendipity.ruwenzori.net/index.php/2006/10/18/gregarius-better-than-lilina-for-aggregating-large-number-of-feeds">its better scalability</a> is not needed.</p>
]]></content:encoded>
			<wfw:commentRss>http://serendipity.ruwenzori.net/index.php/2007/07/19/php5-breaks-lilina-07-solution-found/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gregarius better than Lilina for aggregating large number of feeds</title>
		<link>http://serendipity.ruwenzori.net/index.php/2006/10/18/gregarius-better-than-lilina-for-aggregating-large-number-of-feeds</link>
		<comments>http://serendipity.ruwenzori.net/index.php/2006/10/18/gregarius-better-than-lilina-for-aggregating-large-number-of-feeds#comments</comments>
		<pubDate>Tue, 17 Oct 2006 23:55:21 +0000</pubDate>
		<dc:creator>Jean-Marc Liotier</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Systems]]></category>

		<guid isPermaLink="false">http://serendipity.ruwenzori.net/index.php/2006/10/18/gregarius-better-than-lilina-for-aggregating-large-number-of-feeds</guid>
		<description><![CDATA[I am currently supporting a French centrist political party, mostly helping local militants to improve their web presence by giving them tailored tools and pushing them toward a sensible communication strategy and the organization that goes with it. WordPress and Dokuwiki were of course among the first tools out of the box. I then soon [...]]]></description>
			<content:encoded><![CDATA[<p>I am currently supporting a <a href="http://www.udf.org/">French centrist political party</a>, mostly helping local militants  to improve their web presence by giving them tailored tools and pushing them toward a sensible communication strategy and the organization that goes with it. <a href="http://wordpress.org/">WordPress</a> and <a href="http://wiki.splitbrain.org/wiki:dokuwiki">Dokuwiki</a> were of course among the first tools out of the box. I then soon considered the constellation of militant small-time blogs and decided there was a prime target for <a href="http://en.wikipedia.org/wiki/News_aggregator">aggregation</a>.</p>
<p>I first deployed the <a href="http://serendipity.ruwenzori.net/">Lilina PHP news aggregator  </a>- I love it and it worked very well for <a href="http://planet.c5.grabeuh.com/">tiny &#8220;me and my friends&#8221; feed aggregations</a>. With <a href="http://serendipity.ruwenzori.net/index.php/2006/07/26/ryan-mccue-takes-over-the-management-of-the-lilina-project">Lilina under new management</a> there were even <a href="http://vrypan.net/log/2006/07/30/lilina-update/">prospects for improvement</a>. But when the number of inbound feeds began to soar toward 150 I realized that the whole user experience was sinking into a pit of cold molasses. Unexpectedly the host was not even significantly loaded, it was just that updating from that many feeds sequentially was taking much time.</p>
<p>Enter <a href="http://gregarius.net/">Gregarius</a>. Of course I knew about <a href="http://gregarius.net/">Gregarius</a> before. But I had no reason to go through the slight hassle of using the <a href="http://www.mysql.org/">Mysql</a> database that <a href="http://wiki.gregarius.net/index.php/Main_Page">Gregarius</a> needs : deploying <a href="http://serendipity.ruwenzori.net/">Lilina</a> only requires the unpacking of my <a href="http://www.ruwenzori.net/code/lilina_grabeuh_feedcreator_rss_output_patch/lilina-0.7-grabeuh_rss_output_patch.tar.bz2">custom distribution of Lilina patched for provinding RSS output</a>. <a href="http://serendipity.ruwenzori.net/">Lilina</a> crawling  gave me the reason. On top of that, the <a href="http://dcostanet.net/wordpress/2005/11/12/lilina-theme-for-gregarius/">Lilina theme for Gregarius</a> really made migration as painless as possible for <a href="http://serendipity.ruwenzori.net/">Lilina</a> refugees who can feel at home right out of the box.</p>
<p><a href="http://wiki.gregarius.net/index.php/Installation">Installation was dead easy</a> and importing all those incoming feeds was done in the single step of entering the URL for <a href="http://serendipity.ruwenzori.net/">Lilina</a>&#8216;s <a href="http://en.wikipedia.org/wiki/OPML">OPML</a> output and waiting a few seconds for all the feeds to be fetched and parsed. And there you are : <a href="http://blogsudf.bayrou92.fr/">130 blogs (and growing) aggregated</a> effortlessly with reasonnable response time and barely any load on the host. Gregarius is even easier than <a href="http://serendipity.ruwenzori.net/">Lilina</a> to administer, and it has categories and <a href="http://wiki.gregarius.net/index.php/Tags">tags</a> that <a href="http://serendipity.ruwenzori.net/">Lilina</a> does not, and also does <a href="http://wiki.gregarius.net/index.php/Search">searching</a>.</p>
<p>So from now on I&#8217;ll use <a href="http://serendipity.ruwenzori.net/">Lilina</a> for aggregating up to about a couple dozen feeds. Beyond that the territory belongs to <a href="http://gregarius.net/">Gregarius</a> !</p>
]]></content:encoded>
			<wfw:commentRss>http://serendipity.ruwenzori.net/index.php/2006/10/18/gregarius-better-than-lilina-for-aggregating-large-number-of-feeds/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Lilina vs. Gregarius</title>
		<link>http://serendipity.ruwenzori.net/index.php/2006/06/16/lilina-vs-gregarius</link>
		<comments>http://serendipity.ruwenzori.net/index.php/2006/06/16/lilina-vs-gregarius#comments</comments>
		<pubDate>Fri, 16 Jun 2006 14:30:25 +0000</pubDate>
		<dc:creator>Jean-Marc Liotier</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RSS]]></category>

		<guid isPermaLink="false">http://serendipity.ruwenzori.net/index.php/2006/06/16/lilina-vs-gregarius</guid>
		<description><![CDATA[Coldforged mentioned that Lilina &#8220;silently failed on several malformed feeds&#8220;. Coldforged adds &#8220;that wouldn’t be so bad if it survived such indignities but it didn’t. Instead my entire aggregation page would simply not load and the only notice I ever got that something was awry was the PHP error_log in the aggregator directory&#8220;. I&#8217;ll look [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.coldforged.org/archives/2005/06/03/out-with-lilina-in-with-feed-on-feeds/"> Coldforged mentioned that Lilina &#8220;<em>silently failed on several malformed feeds</em></a>&#8220;. Coldforged adds &#8220;<em>that wouldn’t be so bad if it survived such indignities but it didn’t. Instead my entire aggregation page would simply not load and the only notice I ever got that something was awry was the <acronym title="Hypertext Preprocessor">PHP</acronym> error_log in the aggregator directory</em>&#8220;. I&#8217;ll look out for such behavior, but  so far I have had no problems with <a href="http://jim.liotier.org/feed/">the few feeds I am using</a>.</p>
<p>Were I looking for something with more features than <a href="http://lilina.sourceforge.net/">Lilina</a> I would probably turn to <a href="http://gregarius.net/">Gregarius</a> with the <a href="http://themes.gregarius.net/index.php?req=info&amp;id=6">Lilina theme</a> because I like <a href="http://lilina.sourceforge.net/">Lilina</a>’s way so much. And the <a href="http://plugins.gregarius.net/index.php?req=info&amp;id=7">“<acronym title="Rich Site Summary">RSS</acronym> View” plugin</a> apparently provides the outgoing something like <a href="http://serendipity.ruwenzori.net/index.php/2006/06/08/lilina-now-outputs-rss-with-feedcreator">the aggregated <acronym title="Rich Site Summary">RSS</acronym> feed that I implemented in Lilina by splicing Feedcreator in</a>.</p>
<p>But for now I’ll stick with <a href="http://lilina.sourceforge.net/">Lilina</a> because it is extremely easy to use. The lack of need for a database makes deployment as simple as copying files, setting permissions (<a href="http://www.ruwenzori.net/code/lilina_grabeuh_feedcreator_rss_output_patch/lilina-0.7-grabeuh_rss_output_patch.tar.bz2">the archive of the patched Lilina</a><a href="http://www.ruwenzori.net/code/lilina_grabeuh_feedcreator_rss_output_patch/lilina-0.7-grabeuh_rss_output_patch.tar.bz2"> I provide</a>  now features a script to do it for you) and editing a couple of lines in a configuration file. That is hard to beat.</p>
]]></content:encoded>
			<wfw:commentRss>http://serendipity.ruwenzori.net/index.php/2006/06/16/lilina-vs-gregarius/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lilina now outputs RSS with Feedcreator</title>
		<link>http://serendipity.ruwenzori.net/index.php/2006/06/08/lilina-now-outputs-rss-with-feedcreator</link>
		<comments>http://serendipity.ruwenzori.net/index.php/2006/06/08/lilina-now-outputs-rss-with-feedcreator#comments</comments>
		<pubDate>Thu, 08 Jun 2006 17:38:15 +0000</pubDate>
		<dc:creator>Jean-Marc Liotier</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Meta]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Systems]]></category>

		<guid isPermaLink="false">http://serendipity.ruwenzori.net/index.php/2006/06/07/lilina-now-outputs-rss-with-feedcreator</guid>
		<description><![CDATA[Aggregated RSS feeds presented as HTML and Javascript by Lilina are very sweet. The more we used them, the more we missed having them served as RSS. After much research it seemed to us that there is no nice and easy PHP code capable of mixing RSS as RSS. There are plenty of feed mixers [...]]]></description>
			<content:encoded><![CDATA[<p>Aggregated <a href="http://en.wikipedia.org/wiki/RSS_%28file_format%29">RSS</a> feeds presented as HTML and Javascript by  <a href="http://lilina.sourceforge.net/">Lilina</a> are very sweet. The more we used them, the more we missed having them served as <a href="http://en.wikipedia.org/wiki/RSS_%28file_format%29">RSS</a>. After much research it seemed to us that there is no nice and easy PHP code capable of mixing <a href="http://en.wikipedia.org/wiki/RSS_%28file_format%29">RSS</a> as <a href="http://en.wikipedia.org/wiki/RSS_%28file_format%29">RSS</a>. There are plenty of <a href="http://libraryclips.blogsome.com/2005/05/20/rss-filter-and-re-mix/#eight">feed mixers offered as a service</a> but very few offered as a product.</p>
<p>On the fetching and parsing side, <a href="http://lilina.sourceforge.net/">Lilina</a> had everything I wanted.  All I needed was to make  it generate RSS instead of HTML.</p>
<p>I went foraging for <a href="http://en.wikipedia.org/wiki/RSS_%28file_format%29">RSS</a> creation libraries. The first one I found was <a href="http://search.cpan.org/~autrijus/XML-RSS-Aggregate/">XML-RSS-Aggregate</a> . I liked it because <a href="http://search.cpan.org/dist/XML-RSS-Aggregate/lib/XML/RSS/Aggregate.pm#SYNOPSIS">the example provided with XML-RSS-Aggregate is an RSS agregator that ouptuts RSS</a> &#8211; exactly what I was looking for. But <a href="http://www.shlomifish.org/">Shlomi Fish</a>  mentioned that “<a href="http://cpanratings.perl.org/dist/XML-RSS-Aggregate">this module is unmaintained and no longer works very well. The author (and I) recommend that you use XML::Feed now</a>“. So I took a look at <a href="http://search.cpan.org/dist/XML-Feed/">XML-Feed</a> and found it too complex for my meagre skills. And I’m not that hot with <a href="http://www.perl.org/">Perl </a>anyway.  So I went looking somewhere else.</p>
<p>I found my salvation in <a href="http://www.bitfolge.de/rsscreator-en.html">Feedcreator</a>. <a href="http://www.bitfolge.de/rsscreator-en.html">Feedcreator</a> creates valid feeds in various formats, features configurable caching, reasonnable documentation and readable code. I found it quite easy to use. All it needs is an array of RSS elements, and that is exactly what <a href="http://lilina.sourceforge.net/">Lilina</a> provides.</p>
<p>I took <a href="http://lilina.sourceforge.net/">Lilina</a>’s index.php, cleaned up the HTML generation, spliced in the example code from  <a href="http://www.bitfolge.de/rsscreator-en.html">Feedcreator</a>, mapped input to output and lo and behold I had <a href="http://planet.grabeuh.com/aggregated_rss">a reasonably valid RSS output by Lilina</a>. Very sweet !</p>
<p><a href="http://www.ruwenzori.net/code/lilina_grabeuh_feedcreator_rss_output_patch/lilina-0.7-grabeuh_rss_output_patch.tar.bz2">Source code of the modified Lilina with Feedreactor hybridation is available here</a>.</p>
<p><a href="http://planet.grabeuh.com/">I even added a cute RSS icon to Lilina’s default layout…</a></p>
]]></content:encoded>
			<wfw:commentRss>http://serendipity.ruwenzori.net/index.php/2006/06/08/lilina-now-outputs-rss-with-feedcreator/feed</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Compound newsfeeds with Lilina</title>
		<link>http://serendipity.ruwenzori.net/index.php/2006/06/07/compound-newsfeeds-with-lilina</link>
		<comments>http://serendipity.ruwenzori.net/index.php/2006/06/07/compound-newsfeeds-with-lilina#comments</comments>
		<pubDate>Wed, 07 Jun 2006 21:04:26 +0000</pubDate>
		<dc:creator>Jean-Marc Liotier</dc:creator>
				<category><![CDATA[Meta]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[RSS]]></category>
		<category><![CDATA[Systems]]></category>

		<guid isPermaLink="false">http://serendipity.ruwenzori.net/index.php/2006/06/07/compound-newsfeeds-with-lilina</guid>
		<description><![CDATA[Looking for a way to fetch multiple RSS news feeds and present them as a single HTML page I found the wonderful Lilina. &#8220;Lilina is a simple but powerful news aggregator written in PHP. No database is needed, RSS/ATOM parsing is done by the excellent MagpieRSS library&#8221;. That piece of advertisement is all true : [...]]]></description>
			<content:encoded><![CDATA[<p>Looking for a way to fetch multiple <a href="http://en.wikipedia.org/wiki/RSS_%28file_format%29">RSS</a> news feeds and present them as a single HTML page I found the wonderful <a href="http://lilina.sourceforge.net/">Lilina</a>.</p>
<blockquote><p>&#8220;<a href="http://lilina.sourceforge.net/">Lilina</a> is a simple but powerful news aggregator written in PHP. No database is needed, RSS/ATOM parsing is done by the excellent <a href="http://magpierss.sourceforge.net/">MagpieRSS</a> library&#8221;.</p></blockquote>
<p>That piece of advertisement is all true : <a href="http://lilina.sourceforge.net/">Lilina</a> is dead simple to set up, requires no special dependancies and produce very nice aggregated news feeds. This was love at the first sight !</p>
<p>I immediately set up a couple of aggregated news feeds :</p>
<ul>
<li><a href="http://planet.grabeuh.com/">Grabeuh planet</a>  shows articles and news items published by my fellow geek friends and myself.</li>
<li><a href="http://jim.liotier.org/feed/">Jean-Marc&#8217;s little corner of the world</a> shows all photos, articles and news items by me.</li>
</ul>
<p>Next will be a personal feed gathering all my favorite places that publish irregularily. That page will save me quite a lot of clicking around checking for updates.</p>
]]></content:encoded>
			<wfw:commentRss>http://serendipity.ruwenzori.net/index.php/2006/06/07/compound-newsfeeds-with-lilina/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Good feedback about my Jabber presence indicator in a web page</title>
		<link>http://serendipity.ruwenzori.net/index.php/2006/05/24/good-feedback-about-my-jabber-presence-indicator-in-a-web-page</link>
		<comments>http://serendipity.ruwenzori.net/index.php/2006/05/24/good-feedback-about-my-jabber-presence-indicator-in-a-web-page#comments</comments>
		<pubDate>Wed, 24 May 2006 17:36:55 +0000</pubDate>
		<dc:creator>Jean-Marc Liotier</dc:creator>
				<category><![CDATA[Code]]></category>
		<category><![CDATA[Jabber]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://serendipity.ruwenzori.net/index.php/2006/05/24/good-feedback-about-my-jabber-presence-indicator-in-a-web-page</guid>
		<description><![CDATA[A while ago I built a Jabber presence indicator on my personal web page by customizing one of the examples provided with class.jabber.php. I have received enthusiastic feedback from a handful of users &#8211; that makes me feel warm inside ! Do not neglect the ego of people who provide free services, be they Free [...]]]></description>
			<content:encoded><![CDATA[<p>A while ago I built a <a href="http://serendipity.ruwenzori.net/index.php/2006/02/27/jabber-presence-indicator-in-a-web-page" rel="bookmark" title="Permanent Link: Jabber presence indicator in a web page">Jabber presence indicator on my personal web page</a> by customizing one of the <a href="#038;sub=examples">examples provided with class.jabber.php</a>. I have received <a href="http://davidbanes.com/?id=120">enthusiastic feedback</a> from a handful of users &#8211; that makes me feel warm inside ! Do not neglect the ego of people who provide free services, be they Free software developpers or volunteers for anything : a kind comment or a nice stroke in the right direction go a long way toward feeding their motivation. So next time you enjoy the produce of the gift economy be sure to let people know how much you liked it !</p>
<p>With the kind words came a question which made me aware that a newcomer may not find the required configuration as obvious as I do. One of the least obvious steps is telling the script whose status it is supposed to check. Don&#8217;t look for a JID parameter inside <a href="http://www.ruwenzori.net/code/presence/">the presence indicator script</a> : <a href="http://www.ruwenzori.net/code/presence/">the </a><a href="http://www.ruwenzori.net/code/presence/">presence indicator </a><a href="http://www.ruwenzori.net/code/presence/">script</a> itself knows nothing about the user whose status it checks. It is the watcher bot user that has the watched user on his roster. <a href="http://www.ruwenzori.net/code/presence/">The </a><a href="http://www.ruwenzori.net/code/presence/">presence indicator </a><a href="http://www.ruwenzori.net/code/presence/">script</a> will return the status of anyone on the watcher bot user&#8217;s roster. That makes it quite flexible because it will work for any number of users.</p>
<p>If anything remains unclear to you, please be sure to <a href="mailto:jim@liotier.org">report it to me</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://serendipity.ruwenzori.net/index.php/2006/05/24/good-feedback-about-my-jabber-presence-indicator-in-a-web-page/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Class.jabber.php Google Talk compatibility</title>
		<link>http://serendipity.ruwenzori.net/index.php/2006/03/03/classjabberphp-google-talk-compatibility</link>
		<comments>http://serendipity.ruwenzori.net/index.php/2006/03/03/classjabberphp-google-talk-compatibility#comments</comments>
		<pubDate>Fri, 03 Mar 2006 16:52:27 +0000</pubDate>
		<dc:creator>Jean-Marc Liotier</dc:creator>
				<category><![CDATA[Jabber]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://serendipity.ruwenzori.net/index.php/2006/03/03/classjabberphp-google-talk-compatibility</guid>
		<description><![CDATA[Nathan Fritz reports Lars Mikkelsen patching class.jabber.php to support Google Talk. Nathan is reviewing the patch and considers including it in a next release of class.jabber.php. So we learn simultaneously that class.jabber.php does not support Google Talk and that it soon will&#8230;]]></description>
			<content:encoded><![CDATA[<p><a href="http://fritzyandfriends.com/wordpress/?p=9">Nathan Fritz reports Lars Mikkelsen patching class.jabber.php to support Google Talk</a>. Nathan is reviewing the patch and considers including it in a next release of <a href="http://cjphp.netflint.net/?section=about">class.jabber.php</a>.</p>
<p>So we learn simultaneously that <a href="http://cjphp.netflint.net/?section=about">class.jabber.php</a> does not support <a href="http://www.google.com/talk/">Google Talk</a> and that it soon will&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://serendipity.ruwenzori.net/index.php/2006/03/03/classjabberphp-google-talk-compatibility/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sophisticated Web Jabber presence indicator</title>
		<link>http://serendipity.ruwenzori.net/index.php/2006/03/03/sophisticated-web-jabber-presence-indicator</link>
		<comments>http://serendipity.ruwenzori.net/index.php/2006/03/03/sophisticated-web-jabber-presence-indicator#comments</comments>
		<pubDate>Fri, 03 Mar 2006 13:06:07 +0000</pubDate>
		<dc:creator>Jean-Marc Liotier</dc:creator>
				<category><![CDATA[Jabber]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://serendipity.ruwenzori.net/index.php/2006/03/03/sophisticated-web-jabber-presence-indicator</guid>
		<description><![CDATA[You may have noticed that I have added a to the Jabber presence indicator on my personal web page. It is provided by Edgar, a sophisticated Web Jabber presence indicator based on class.jabber.php. To use the Edgar service, all you need is an image tag such as : http://edgar.netflint.net/status.php?jid=jim@jabber.grabeuh.com&#38;type=image Edgar displays status fast because it [...]]]></description>
			<content:encoded><![CDATA[<p>You may have noticed that I have added a <img src="http://edgar.netflint.net/iconsets/gabber/chat.gif" />to the <a href="http://serendipity.ruwenzori.net/index.php/2006/02/27/jabber-presence-indicator-in-a-web-page" rel="bookmark" title="Permanent Link: Jabber presence indicator in a web page">Jabber presence indicator on my personal web page.</a> It is provided by <a href="http://edgar.netflint.net/">Edgar</a>, a sophisticated Web Jabber presence indicator based on <a href="http://cjphp.netflint.net/?section=about">class.jabber.php</a>. To use the Edgar service, all you need is an image tag such as :</p>
<blockquote><p><a href="http://edgar.netflint.net/status.php?jid=jim@jabber.grabeuh.com&amp;type=image">http://edgar.netflint.net/status.php?jid=jim@jabber.grabeuh.com&amp;type=image</a></p></blockquote>
<p>Edgar displays status fast because it splits processing in two independant parts sharing a database :</p>
<ul>
<li>edgar.php is a command line script that collects presence data into the database.</li>
<li>status.php reads the database and displays presence on an HTML page.</li>
</ul>
<p><a href="http://edgar.netflint.net/">Edgar</a> is licensed under the <a href="http://www.gnu.org/copyleft/gpl.html">GPL</a> so you can download it and <a href="http://edgar.netflint.net/howto.php">set it up on your own host</a>.</p>
<p>I like <a href="http://edgar.netflint.net/">Edgar</a> and I will certainly study it as an exemple of a non-trivial implementation of <a href="http://cjphp.netflint.net/?section=about">class.jabber.php</a>. But I shall continue to use <a href="http://www.ruwenzori.net/code/presence/">my pathetic Web Jabber presence indicator</a> based on one of the <a href="http://cjphp.netflint.net/?section=manual&amp;sub=examples">examples provided with class.jabber.php</a> because <a href="http://edgar.netflint.net/bugs/?do=details&amp;id=18">Edgar does not yet display <em>ressources</em></a> whereas <a href="http://www.ruwenzori.net/code/presence/">the script I use</a> <a href="http://serendipity.ruwenzori.net/index.php/2006/02/27/jabber-presence-indicator-in-a-web-page">does</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://serendipity.ruwenzori.net/index.php/2006/03/03/sophisticated-web-jabber-presence-indicator/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
