<?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>Chris Chabot - chabotc.com &#187; Linux</title>
	<atom:link href="http://www.chabotc.com/category/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.chabotc.com</link>
	<description>Random storms of thoughts</description>
	<lastBuildDate>Thu, 07 Jan 2010 14:55:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Getting the most performance out of PHP Shindig</title>
		<link>http://www.chabotc.com/linux/getting-the-most-performance-out-of-php-shindig/</link>
		<comments>http://www.chabotc.com/linux/getting-the-most-performance-out-of-php-shindig/#comments</comments>
		<pubDate>Tue, 24 Feb 2009 13:05:03 +0000</pubDate>
		<dc:creator>chabotc</dc:creator>
				<category><![CDATA[FriendConnect]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OpenSocial]]></category>
		<category><![CDATA[shindig]]></category>

		<guid isPermaLink="false">http://www.chabotc.com/?p=185</guid>
		<description><![CDATA[If your using or planning to use php-shindig in production, your probably wondering what knobs can be twiddled to get the highest possible performance out of it; So here&#8217;s some tips on how to make it go just that bit faster.
The first thing to look at is the general PHP performance on your server. Out [...]]]></description>
			<content:encoded><![CDATA[<p>If your using or planning to use php-shindig in production, your probably wondering what knobs can be twiddled to get the highest possible performance out of it; So here&#8217;s some tips on how to make it go just that bit faster.</p>
<p>The first thing to look at is the general PHP performance on your server. Out of the box PHP is very poorly equipped for high traffic websites, and chances are you already have a few of these optimizations in place, combined these tricks will more then double the performance of your shindig deployment.</p>
<p>To be able to give some semi-meaningful measurements I&#8217;ll be using the QPS (queries per second) of how fast php-shindig can render the OpenSocial Dev App (OSDA) on my workstation, which has a single Quad Core 2 Duo @ 3Ghz and a single SATA II disk, so a standard of the rack server should be able to do a bit better then the results I&#8217;m getting here. The base line of a plain outo-of-the-box php and shindig configuration is ~ 210 QPS.</p>
<p><strong>Opcode Cache</strong></p>
<p>Perhaps the most important tip for php performance is to install an opcode cache.. PHP is still an interpreted language, and that means that in it&#8217;s default configuration, on every page hit, it will read your PHP code and interpret it into opcodes. An op(eration)code is the instruction that the Zend engine actually performs, and this constantly interpreting will take most of your server&#8217;s resources! The solution is to install an opcode cache that caches these compiled instructions in memory, so that your webserver can focus on actually executing the code. My personal favorite is the <a title="APC" href="http://pecl.php.net/package/APC" target="_blank">Alternative PHP Cache (APC)</a></p>
<p>Using APC the QPS on my workstation goes from 210 to 385, a pretty impressive performance increase!</p>
<p><strong>PHP FatMM</strong></p>
<p>The next tip is to use the<a title="php-fatmm" href="http://tekrat.com/php/php-fatmm/" target="_blank"> php-fatmm</a> patch, the fat memory manager patch changes the way that the PHP engine allocates memory, instead of (de/)allocating memory on the fly it will pre-allocate a configured amount of memory, and only if that runs out will it allocate more; The end result is that it can save PHP having to do thousands of alloc()&#8217;s, which means it can spend more time doing useful stuff <img src='http://www.chabotc.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  This does mean your server process will use more memory, and I wouldn&#8217;t advice to use this on a server that also serves static content or very simple php scripts, but for a server that is dedicated to php-shindig, this is just what the doctor ordered.</p>
<p>Re-benchmarking our OSDA rendering using both APC and php-fatmm brings us to 410 QPS, while not as earth-shattering as APC, still a very nice improvement!</p>
<p><strong>Disk IO &#8211; Caching back-ends to use</strong></p>
<p>Now with the basic PHP bottle-necks out of the way, lets focus on the other thing that will bring a server to it&#8217;s knees: Disk IO. Harddisks are the slowest component in your server and having a lot of reads and writes happening will cause your CPU&#8217;s just just spin idly in their sockets waiting for data to appear.</p>
<p>The highest impact change here is to go from a disk based cache in php-shindig (the CacheFile class which is the default configured cache back-end since it works on every platform/configuration) to a memory based caching class. Now there&#8217;s two distinct types of cached information in php-shindig, the one is the &#8216;feature_cache&#8217;, where it stores the processed (and if configured, minimized) feature information.. parsing hundreds of little xml and javascript files is a very expensive operation so caching this adds a lot to the efficiency of php-shindig. The other cache type is the general &#8216;data_cache&#8217;, which is used to cache all remote resources such as the gadget xml files, message bundles, all proxied files, etc.</p>
<p>The features information doesn&#8217;t take so much space to store, and as such using a close-to-home cache for the feature_cache like the CacheApc class is the best solution, The data cache on the other hand will hold  many thousands of files, so will be considerably larger to store.. as such using a shared cache between your shindig servers is much more efficient, so using CacheMemcache is the optimum solutions there. So by changing the following bits:</p>
<p><code> 'data_cache' =&gt; 'CacheMemcache',<br />
'feature_cache' =&gt; 'CacheApc',<br />
</code></p>
<p>and rerunning the benchmark brings the total QPS to 435.</p>
<p><strong>Disk IO &#8211; PHP Shindig configuration</strong></p>
<p>The last bit of tweaking we can do is to disable the file checking, php-shindig has been coded to fail gracefully and check everything rigorously however that does cause some extra disk IO, however as long you feel certain you won&#8217;t go and delete files from your production systems, it&#8217;s pretty safe to turn this off, this is done by setting &#8216;check_file_exists&#8217; to false in the configuration. We can also save some disk IO by changing the relative-path-resolution in the configuration to absolute paths, so change any paths like &#8220;realpath(dirname(__FILE__) . &#8216;/..&#8217;) . &#8216;/&#8217;&#8221; to their actual locations (like &#8220;/var/www/html/shindig/&#8221;). And setting &#8216;debug&#8217; to false removes the last few of these checks. So in the configuration we set:</p>
<p><code> 'debug' =&gt; false,<br />
'check_file_exists' =&gt; false,<br />
'base_path' =&gt; '/var/www/html/shindig/',<br />
'features_path' =&gt; '/var/www/html/shindig/features',<br />
'container_path' =&gt; '/var/www/html/shindig/config',<br />
'javascript_path' =&gt; '/var/www/html/shindig/javascript',<br />
'private_key_file' =&gt; '/var/www/html/shindig/php/certs/private.key',<br />
'public_key_file' =&gt; '/var/www/html/shindig/certs/public.crt',</code></p>
<p><strong>Conclusion</strong></p>
<p>With all these measures in place, the benchmark now shows us doing some 450 QPS, more then doubling the 210 QPS we started out with, quite a satisfying result if you consider this means we end up transferring more then 45 megabyte/sec over the network at that point.</p>
<p>Now for the real speed freaks, all these results are based on the 1.0.x release tree from the svn repo, which is what you should be using since the trunk is seeing heavy development for the upcoming 0.9 changes, however the trunk has a re-factored gadget renderer that is a ~ 20-30% faster then the current release, so more performance goodness will be coming your way once the trunk stabilizes and becomes release ready.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chabotc.com/linux/getting-the-most-performance-out-of-php-shindig/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebChat 2.0 &#8211; First release</title>
		<link>http://www.chabotc.com/javascript/webchat-20-first-release/</link>
		<comments>http://www.chabotc.com/javascript/webchat-20-first-release/#comments</comments>
		<pubDate>Thu, 12 Apr 2007 14:49:21 +0000</pubDate>
		<dc:creator>chabotc</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.chabotc.com/javascript/webchat-20-first-release/</guid>
		<description><![CDATA[Due to to many circumstances to mention, the release of WebChat2.0 has suffered some delays; In the meantime most of the desired features (and bug &#38; browser compatibility fixes) have taken place, however a few still remain; As does a healthy dose of nice to have features that will be put in in the future
So [...]]]></description>
			<content:encoded><![CDATA[<p>Due to to many circumstances to mention, the release of WebChat2.0 has suffered some delays; In the meantime most of the desired features (and bug &amp; browser compatibility fixes) have taken place, however a few still remain; As does a healthy dose of nice to have features that will be put in in the future</p>
<p>So because things have been on hold so long i&#8217;ve decided to release and open-source what we have so far, as Eric S. Raymond said: &#8220;Release early, release often&#8221;.The project has been released under the GPL v2 licence.</p>
<p>In laymen terms this means you can do with it what you want, but you have to contribute your changes back to the community / the project, and you can&#8217;t just pick it up and sell it integrated into your own projects as if it was your own, integration into other projects is only allowed if you either contact me for a commercial licence, or if your project is GPL compatible too; However using it in your website, intranet, extranet, etc is fully permitted without any problems. <span id="more-32"></span> I&#8217;ve setup a code.google.com project at:<br />
<a href="http://code.google.com/p/webchat2/">http://code.google.com/p/webchat2/</a></p>
<p><a href="http://code.google.com/p/webchat2/"></a>To check out the project source:<br />
<em># svn checkout http://webchat2.googlecode.com/svn/trunk/ webchat2</em></p>
<p>You can download the source of this initial release here:<br />
<a href="http://www.chabotc.com/webchat2/webchat2-1.0.tar.gz">http://www.chabotc.com/webchat2/webchat2-1.0.tar.gz</a></p>
<p>Issues can be reported here:<br />
<a href="http://code.google.com/p/webchat2/issues/list">http://code.google.com/p/webchat2/issues/list</a></p>
<p>And you can contribute documentation and other usefull information here:<br />
<a href="http://code.google.com/p/webchat2/w/list">http://code.google.com/p/webchat2/w/list</a></p>
<p><a href="http://code.google.com/p/webchat2/w/list"></a>I&#8217;m very open to contributions of any kind, so if you need any help to get started feel free to contact me at chabotc@xs4all.nl</p>
<p>Much of the information about this project can be found in the initial post:<br />
<a href="http://www.chabotc.com/generic/chat-prototype-first-public-demo/">http://www.chabotc.com/generic/chat-prototype-first-public-demo/</a></p>
<p>And the public demo version is still running at:<a href="http://www.chabotc.nl:2001/chat.html">http://www.chabotc.nl:2001/chat.html</a></p>
<p>Talking of the public demo, its been running without a glitch or restarting the IRC server or PHP daemon for over 3 months, so it seems its quite stable in real life testing.Do be ware, since the project isn&#8217;t completely finished yet, it does mean it currently comes without to much of documentation or instalation guides, and some small bugs remain.</p>
<p>And to get it all running you need a number of things:</p>
<ul>
<li>IRC server (hybrid prefered). I used the Fedora Extra&#8217;s ircd-hybrid package</li>
<li>PHP (developed and tested with 5.2.x) Need to have socket extentions enabled. The demo version is running in a chroot&#8217;d envirioment, there&#8217;s plenty of guides out there on how to set this up if you need more information about this. Should only be a extra layer of security, since there&#8217;s no real potential for code injection, however if you are paranoid about security, this could be a good idea</li>
<li>A modern web browser, like IE6, IE7 or preferable Firefox</li>
</ul>
<p>When configuring your IRC server (which is used in the backend, and guarantees infinite scalability which is tried and tested) a few things are important:</p>
<p>Set the &#8220;<em>throttle_time</em>&#8221; to 0 or else connections would be denied if multiple people connect at the same time.Then to allow for more then the pre configured users from one IP (standard this is set to 3 or 4 connections). Change:<br />
<em>max_clients<br />
number_per_ip<br />
max_global<br />
max_local </em></p>
<p>The demo server on chabotc.nl is set to a max of 4096 connections but any number will do as long as your server can handle it.</p>
<p>Also change the &#8220;auth&#8221; section in your ircd.conf and comment out the following:<br />
/*flags = need_ident;*/</p>
<p>This is because all connections come from your own server, so it only causes delayes when connecting thru the web chat frontend.Then change your network name and description to something fitting, and you should be all set! There&#8217;s a lot of other options in the ircd.conf file, but their pretty well documented in the configuration file and there&#8217;s plenty of documentation about it on the web.</p>
<p>After this, check out the webchat2 source, change the port number you want it to listen on (currently defaults to 2001) in chat.php, change the server list in htdocs/js/chatConnectWindow.js(!!) you can hide the selection box and make it default to your local server easily there too and change the default channel in httpServer.php (line 78).</p>
<p>After this you should be able to run the daemon:<br />
<em># chmod +x ./chat.php<br />
# ./chat.php</em></p>
<p>if all worked well you should be able to connect to your chat setup thru (replace yourhost.com and port number with your local values):</p>
<p>http://www.yourhost.com:2001/</p>
<p>A few wishlist items that are currently high on my list of things to fix:</p>
<ul>
<li>Configuration file for IP&#8217;s, port numbers, etc</li>
<li>Implement IRC /ignore, /query, /whois, /ping and /help commands in back and frontend</li>
<li>Implement double click on nick (in left list) = open private chat window with that person</li>
<li>Implement right click menu on nick (in left list) for common options like private chat, whois, etc</li>
<li>Few cross browser bugs remain, and smiley&#8217;s selection still needs to be made! Much in the same style as color parsing in javascript, it needs to insert the image on click, then on sending the msg rewrite the image tag to the matching smiley sequence, aka &#8220;:D&#8221; etc, translating these smilies to images again is already implemented</li>
</ul>
<p>There&#8217;s plenty of other items that i left out of the list but those are top priority in my perspective and i&#8217;ll be working on them as time permits, but i&#8217;m very open to patches too</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chabotc.com/javascript/webchat-20-first-release/feed/</wfw:commentRss>
		<slash:comments>31</slash:comments>
		</item>
		<item>
		<title>Chat prototype &#8211; First public demo</title>
		<link>http://www.chabotc.com/generic/chat-prototype-first-public-demo/</link>
		<comments>http://www.chabotc.com/generic/chat-prototype-first-public-demo/#comments</comments>
		<pubDate>Sun, 17 Dec 2006 18:42:56 +0000</pubDate>
		<dc:creator>chabotc</dc:creator>
				<category><![CDATA[Generic]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.chabotc.nl/generic/chat-prototype-first-public-demo/</guid>
		<description><![CDATA[It&#8217;s my distinct pleasure to be able to announce the first public showing of a project that I&#8217;ve been working on in my spare time in the last month or two, a new Web Based IRC chat application.
This project brings together a lot of new technologies which had to be developed to make this a [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.chabotc.com/wp-content/uploads/2007/02/screenshot-webchat-20-mozilla-firefox-7.thumbnail.png" alt="WebChat2.0" align="left" hspace="4" vspace="4" />It&#8217;s my distinct pleasure to be able to announce the first public showing of a project that I&#8217;ve been working on in my spare time in the last month or two, a new Web Based IRC chat application.</p>
<p>This project brings together a lot of new technologies which had to be developed to make this a feasible, scalable and efficient.</p>
<p>Some of the underlying tools build to make this posible that i consider &#8217;stable enough&#8217; are already released, such as the <a href="http://www.chabotc.nl/phpsocketdaemon/">php Socket Daemon</a> library i wrote to be able to deal with hundreds up to many thousands of &#8220;Comet&#8221; http connections, and an equal amount of IRC client connections.</p>
<p>Also the <a href="http://www.chabotc.nl/javascript/parsing-mirc-colors-in-javascript/">javascript to parse the mIRC color codes</a> is already available, also this web site of things relies solely on prototype and script.aculu.us, plus from the ground up implementations of tabs, windows, tooltip, context menu and channel components based on prototype (all to be released soon, together with the main app).</p>
<p>The main application its self will be open-sourced as soon as a few more visual features are finished (such as a context menu to have a visual interface to commands like whois, op, voice, topic, etc..These commands have already been implemented by typing things like: /op NickName, or /topic My New Topic, etc, but they still need a good, usable and attractive interface before the &#8216;average user&#8217; will understand what and where they are.<span id="more-21"></span></p>
<p style="text-align: left">&nbsp;</p>
<p><img src="http://www.chabotc.com/wp-content/uploads/2007/02/screenshot-webchat-20-mozilla-firefox-7.thumbnail.png" alt="WebChat2.0" align="left" /><strong>Demo</strong></p>
<p>To stress test the framework, and find any bugs that can only happen in the wild, I&#8217;m making the current version available as a preview to what is still to come, please feel free to play with it, and leave your comments, compliments and/or bugs reports here</p>
<p><a href="http://www.chabotc.nl:2001/chat.html" target="_blank" title="Launch Web Chat Demo"><img src="http://www.chabotc.nl/wp-content/uploads/2006/12/launch.jpg" alt="Launch!" title="Launch!" align="right" /></a><strong><a href="http://www.chabotc.nl:2001/chat.html" target="_blank" title="Web Chat Application">Launch Web Chat  Application.</a></strong><strong><a href="http://www.chabotc.nl:2001/chat.html" target="_blank" title="Web Chat Application"></a></strong></p>
<p>* Please note only Firefox (1.5 &amp; 2.0) and IE 7 have been tested, IE6 and opera still have some problems, which are planned to be addressed shortly. Until then i would strongly recommend using Firefox, in general this is a good idea actually</p>
<p><strong>How to use</strong></p>
<p><strong> </strong>When you enter the application you will see a login dialog, enter a valid nickname here (and try to make sure its unique), and select a network to chat on. Currently 2 networks are supported: Local, which is a IRC server running on this server, which allows up to 4096 connections, and &#8216;EFNet&#8217; (one of the worlds largest irc networks).</p>
<p>EFNet servers however only allow upto a max of 2 or 4 connections from one IP (as is the case with this chat, all connections come from the server), so it tries to pick a random server out of a pre-programmed list. However these slots will fill up quickly,  so if your connections fails refresh the page, and try again.Connecting to EFNet takes longer then the local network too, this is due to the identd timeouts those servers maintain, please be patient while its connecting.</p>
<p><strong>Commands</strong></p>
<p>The join channel dialog has already been finished (click the + tab in the upper left corner), however most commands and functionalities don&#8217;t have a visual interface yet. However they do have &#8216;IRC&#8217; style typed counterparts that allow you to use them. These are:</p>
<ul>
<li>/join #channel</li>
<li>/part</li>
<li>/op Nick</li>
<li>/deop Nick</li>
<li>/voice Nick</li>
<li>/devoice Nick</li>
<li>/nick newNickname</li>
<li>/topic Some channel topic</li>
<li>/invite Nick</li>
<li>/whois Nick</li>
<li>/whowas Nick</li>
<li>/msg Nick some message</li>
<li>/tell, /privmsg, as same /msg above..</li>
<li>/quit</li>
</ul>
<p><strong>Technology</strong></p>
<p>The chat application consists out of a few separate components:</p>
<ol>
<li>Socket daemon library</li>
<li>HTTP daemon implementation (for the streaming comet connections for server to client communication, and dealing with the ajax requests for client for the client to server communication)</li>
<li>IRC Client implementation (which exchanges the events and messages with the comet http connection, and receives the user&#8217;s commands and messages)</li>
<li>The web application its self, which is implimented using <a href="http://script.aculo.us/" target="_blank">prototype.js and script.aculo.us</a></li>
</ol>
<p>A comet implementation was needed to provide real-time, fully async messaging, see this figure for an overview of the different application communication paradigm&#8217;s:</p>
<p align="center"><img src="http://www.chabotc.nl/wp-content/uploads/2006/12/fig1.jpg" alt="Ajax and comet overview" /></p>
<p>The colors and some graphics were borrowed from <a href="http://www.jackslocum.com/blog/" target="_blank">yui-ext</a>, a unique look is in development, and i hope to have an alternative theme available at release.</p>
<p><strong>When is the public release?</strong></p>
<p>Ohhh i know the answer to this one: &#8220;When its done!&#8221;, in all seriousness though, i expect to have a few more good weekends and some of the Christmas holiday left to work on perfecting and finishing this, and your testing will help greatly with that!So expect a final release in early 2007. when it will most likely be released and licensed under the GPL (GNU Public License)Thanks to anyone who will is willing to help test this application, i&#8217;m looking forward to your feedback!</p>
<p><strong>Other irc web chat projects</strong></p>
<p>There&#8217;s only one viable other option i&#8217;m currently aware off, the widely used <a href="http://cgiirc.sourceforge.net/" target="_blank">CGI:IRC</a> (written in perl), however it&#8217;s not nearly as full featured, easy to use or scalable as this project</p>
<p><strong>Interview</strong></p>
<p>Ajaxian.com talked to me about this project, and asked me if I could share with them the biggest challenges: the <a href="http://ajaxian.com/archives/new-chat-prototype-using-comet-and-prototype" target="_blank">Ajaxian article</a> in which I replied to them:</p>
<blockquote><p> The greatest challenge writing this was to make it scale up, and keep IO in check. The orignal plan was to layer out the http, irc and comet components, but the overhead of sending all the event trafic over local loops/connections when dealing with hundreds to thousands of connections, is just to much. All the memory bandwidth used would then be multiplied 3x, which was just a to high of a strain on the system.Second challenge was that there were no decent comet implementations available (except for dojo&#8217;s which i used as a reference), and there was definitely a challenge that there were no PHP (my preferred language) libraries or tools available which could deal with a large amount of always-on connections, even fast-cgi with something like lighttp just wouldn&#8217;t scale to hundreds of live connections, and the memory needed would be horrendous, hence the new php socket daemon library was born, its a riskier model, if the program has a fatal crash (great care was taken to avoid this) the service has to be restarted again (happens automaticly), loosing the client connections in the process, however it now only takes 15Mb of memory under moderate load, and guarantees responses in under 0.15ms, something that would be unfeasible with a clasic apache/php situation.Also most of the heavy lifting (such as link and color parsing, etc) has been lifted to the client, it would be way to heavy for the server to do all of this, and still be able to scale upLikewise the javascript side of things took a bit of trial and error too, some channels can have thousands of messages, and hundreds of members, so browser speed has defiantly been an thing to optimize too.Lastly the back-end uses a plain old IRC server, which is almost infinitely scalable, just add a server, link the IRC servers together, and run another web chat back-end on it, repeat ad infintum.. (irc networks are known to have many hundreds of thousands of people connected, using this as the backbone of the messaging provides guaranteed scalability)</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.chabotc.com/generic/chat-prototype-first-public-demo/feed/</wfw:commentRss>
		<slash:comments>42</slash:comments>
		</item>
		<item>
		<title>phpRPMlib</title>
		<link>http://www.chabotc.com/php/phprpmlib/</link>
		<comments>http://www.chabotc.com/php/phprpmlib/#comments</comments>
		<pubDate>Sat, 16 Dec 2006 13:49:20 +0000</pubDate>
		<dc:creator>chabotc</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.chabotc.nl/php/phprpmlib/</guid>
		<description><![CDATA[This is a RPM binary format reader implementation written in PHP as a proof of concept, and as study project, and now released under the GPLv2.
This library contains the following files:
RPMDefines.php : RPM tag type and constants definitions
RPMIO.php : Used to read the RPM header information, and interpret its binary types propery
RPMLead.php : Reads in [...]]]></description>
			<content:encoded><![CDATA[<p>This is a RPM binary format reader implementation written in PHP as a proof of concept, and as study project, and now released under the GPLv2.</p>
<p>This library contains the following files:</p>
<p>RPMDefines.php : RPM tag type and constants definitions<br />
RPMIO.php : Used to read the RPM header information, and interpret its binary types propery<br />
RPMLead.php : Reads in the RPM lead information (mostly depreciated info, use header info instead)<br />
RPMSignature.php : Reads the signature of the RPM<br />
RPMIndex.php : RPM index reading &#038; parsing<br />
RPMIndexEntry : Class instanced by RPMIndex<br />
RPMHeader.php : RPM Header reading &#038; parsing<br />
RPM.php : demo file, change /path/to/some/file.rpm to a real rpm file, and run to see all the info collected</p>
<p>You can download the library here: <a href="http://www.chabotc.nl/phprpmlib/phpRPMlib-1.0.tar.gz">phpRPMlib-1.0.tar.gz</a> and here: <a href="http://phprpmlib.googlecode.com/files/phpRPMlib-1.0.tar.gz">http://phprpmlib.googlecode.com/files/phpRPMlib-1.0.tar.gz</a><br />
Google code project page: <a href="http://code.google.com/p/phprpmlib/">http://code.google.com/p/phprpmlib/</a><br />
Subversion repository: <a target="_blank" href="http://phprpmlib.googlecode.com/svn/trunk/">http://phprpmlib.googlecode.com/svn/trunk/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.chabotc.com/php/phprpmlib/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WebFM 0.1</title>
		<link>http://www.chabotc.com/php/webfm-01/</link>
		<comments>http://www.chabotc.com/php/webfm-01/#comments</comments>
		<pubDate>Sat, 16 Dec 2006 13:06:06 +0000</pubDate>
		<dc:creator>chabotc</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.chabotc.nl/php/webfm-01/</guid>
		<description><![CDATA[*note*
This project now has its own page, please see:
http://www.chabotc.nl/webfm/
While going thru my old projects to see which would be of any use to the open-source community, i came along an old project of mine, WebFM (Web File Manager).
I was applying for my previous job when i was asked to write a filemanager demonstrate my php [...]]]></description>
			<content:encoded><![CDATA[<p><strong>*note*</strong></p>
<p>This project now has its own page, please see:</p>
<p><a href="http://www.chabotc.nl/webfm/">http://www.chabotc.nl/webfm/</a></p>
<p>While going thru my old projects to see which would be of any use to the open-source community, i came along an old project of mine, WebFM (Web File Manager).</p>
<p>I was applying for my previous job when i was asked to write a filemanager demonstrate my php abilities, the time alloted for this undertaking was 2 days, and i&#8217;m sure they wanted something a lot simpler, so i may have gone a little over the top when writing this, but i did feel i had a point to make <img src='http://www.chabotc.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  Its Written for PHP 4, but i&#8217;m sure with some minor modifications it can be made to work fine with PHP 5.x too.</p>
<p>You can download the tarbal locally: <a href="http://www.chabotc.nl/webfm/webfm-0.1.tar.gz">webfm-0.1.tar.gz</a><br />
or <a href="http://webfm.googlecode.com/files/webfm-0.1.tar.gz">via google code&#8217;s download</a></p>
<p>Google code project page: <a href="http://code.google.com/p/webfm/" target="_blank">http://code.google.com/p/webfm/</a><br />
Subversion repository: <a href="http://webfm.googlecode.com/svn/trunk/" target="_blank">http://webfm.googlecode.com/svn/trunk/</a></p>
<p>To configure the file manager for all virtual hosts and hide the script from the virual host&#8217;s document root:<br />
Place fm.php in a dir outside of the document root (for example /var/www/fm.php, and the images in /var/www/fmicons).<br />
Then configure Apache aliases in your httpd.conf to access them as such:<br />
Alias /filemanager &#8220;/var/www/fm.php&#8221;<br />
Alias /fmicons/ &#8220;/var/www/fmicons/&#8221;</p>
<p>It tries to be security conscious, stores its passwords outside of the webroot (must have feature), and is very simple to configure for mass-hosting environments.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chabotc.com/php/webfm-01/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
