<?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>raspi.fi</title>
	<atom:link href="http://raspi.fi/feed/" rel="self" type="application/rss+xml" />
	<link>http://raspi.fi</link>
	<description>raspi&#039;s homepage</description>
	<lastBuildDate>Sat, 05 Dec 2009 05:04:58 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Move PostgreSQL database</title>
		<link>http://raspi.fi/2009/12/05/move-postgresql-database/</link>
		<comments>http://raspi.fi/2009/12/05/move-postgresql-database/#comments</comments>
		<pubDate>Sat, 05 Dec 2009 05:04:58 +0000</pubDate>
		<dc:creator>raspi</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://raspi.fi/?p=68</guid>
		<description><![CDATA[Moving PostgreSQL database to different name is pretty hard compared to MySQL. But here&#8217;s how you do it:

$ pg_dump --no-acl --no-owner -U &#60;username&#62; -h &#60;host&#62; -Fc &#60;database&#62; &#62; &#60;dump filename&#62;
$ pg_restore -1 -c -U &#60;username&#62; -d &#60;database&#62; -h &#60;host&#62; --no-owner &#60;dump filename&#62;


$ pg_dump --no-acl --no-owner -U old -h 127.0.0.1 -Fc olddb &#62; old.dump
$ pg_restore -1 [...]]]></description>
			<content:encoded><![CDATA[<p>Moving PostgreSQL database to different name is pretty hard compared to MySQL. But here&#8217;s how you do it:</p>
<pre class="brush: plain;">
$ pg_dump --no-acl --no-owner -U &lt;username&gt; -h &lt;host&gt; -Fc &lt;database&gt; &gt; &lt;dump filename&gt;
$ pg_restore -1 -c -U &lt;username&gt; -d &lt;database&gt; -h &lt;host&gt; --no-owner &lt;dump filename&gt;
</pre>
<pre class="brush: plain;">
$ pg_dump --no-acl --no-owner -U old -h 127.0.0.1 -Fc olddb &gt; old.dump
$ pg_restore -1 -c -U newuser -d newdb -h postgresql.lan --no-owner old.dump
</pre>
]]></content:encoded>
			<wfw:commentRss>http://raspi.fi/2009/12/05/move-postgresql-database/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding Windows 7 drivers directly to DVD</title>
		<link>http://raspi.fi/2009/10/31/adding-windows-7-drivers-directly-to-dvd/</link>
		<comments>http://raspi.fi/2009/10/31/adding-windows-7-drivers-directly-to-dvd/#comments</comments>
		<pubDate>Sat, 31 Oct 2009 07:12:56 +0000</pubDate>
		<dc:creator>raspi</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://raspi.fi/?p=61</guid>
		<description><![CDATA[If you&#8217;re familiar with Windows XP Service Pack slipstreaming, this is pretty similar.
I&#8217;m using Windows XP Professional for this.
Make ISO image from your Windows 7 DVD with your favorite software. I used CDBurnerXP.
Save install.wim somewhere on your hard drive from that ISO image or straight from DVD.
Download Windows Automated Installation Kit for your OS.
Start AIK [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re familiar with Windows XP Service Pack slipstreaming, this is pretty similar.</p>
<p>I&#8217;m using Windows XP Professional for this.</p>
<p>Make ISO image from your Windows 7 DVD with your favorite software. I used CDBurnerXP.</p>
<p>Save <strong>install.wim</strong> somewhere on your hard drive from that ISO image or straight from DVD.</p>
<p>Download Windows Automated Installation Kit for your OS.</p>
<p>Start AIK Deployment Tools Command Prompt</p>
<pre class="brush: plain;">
cd &lt;path where you saved that wim file&gt;
</pre>
<p>Mount the WIM image with write permissions:<br />
imagex will tell which number is which Windows edition if it&#8217;s not found. I tried it first with just number 0.<br />
Number 4 is in this case Windows 7 Ultimate Edition 64 bit.</p>
<pre class="brush: plain;">
imagex /mountrw install.wim 4 c:\wim
</pre>
<p>add as many drivers as you like by using DISM<br />
if dism says that files are essential for booting but drivers are unsigned, then add /forceunsigned parameter.</p>
<p>Here&#8217;s example for nvidia nforce drivers (Installer EXE extracted with 7-zip):<br />
SATA/SATARAID/IDE/Ethernet/etc drivers:</p>
<pre class="brush: plain;">
cd c:\dl\15.51_nforce_win7_64bit_whql\ide\win764\
dism /image:c:\wim /add-driver /driver:. /recurse

cd c:\dl\15.51_nforce_win7_64bit_whql\smbus
dism /image:c:\wim /add-driver /driver:. /recurse /forceunsigned

cd c:\dl\15.51_nforce_win7_64bit_whql\smu
dism /image:c:\wim /add-driver /driver:. /recurse

cd c:\dl\15.51_nforce_win7_64bit_whql\ethernet
dism /image:c:\wim /add-driver /driver:. /recurse
</pre>
<p>..and so on for all needed drivers..</p>
<p>You will need to expand unexpanded driver files in some cases. Drivers are not expanded if filenames in driver directory are <strong>foo.dl_</strong> and not <strong>foo.dll</strong> etc.</p>
<p>Here&#8217;s NVidia GeForce driver sample for you (Installer EXE extracted with 7-zip)</p>
<pre class="brush: plain;">
cd c:\dl\191.07_desktop_win7_winvista_64bit_international_whql
mkdir c:\displaydriver
expand *.* c:\displaydriver
</pre>
<p>and then</p>
<pre class="brush: plain;">
cd c:\displaydriver
dism /image:c:\wim /add-driver /driver:. /recurse
</pre>
<p>Save the WIM image with new drivers:</p>
<p>unmount and commit (commit = save)</p>
<pre class="brush: plain;">
imagex /unmount /commit c:\wim
</pre>
<p>Add the <strong>install.wim</strong> back to the ISO image with your favorite ISO handling software. I used UltraISO.<br />
Make sure that the DVD is bootable. Burn ISO as new DVD yet again with favorite burning software (CDBurnerXP).<br />
Boot and enjoy your new Windows 7 with correct and working drivers.</p>
]]></content:encoded>
			<wfw:commentRss>http://raspi.fi/2009/10/31/adding-windows-7-drivers-directly-to-dvd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>zfComicEngine now at Launchpad</title>
		<link>http://raspi.fi/2009/10/24/zfcomicengine-now-at-launchpad/</link>
		<comments>http://raspi.fi/2009/10/24/zfcomicengine-now-at-launchpad/#comments</comments>
		<pubDate>Sat, 24 Oct 2009 16:16:24 +0000</pubDate>
		<dc:creator>raspi</dc:creator>
				<category><![CDATA[Projects]]></category>
		<category><![CDATA[zfComicEngine]]></category>

		<guid isPermaLink="false">http://raspi.fi/?p=59</guid>
		<description><![CDATA[I&#8217;ve added zfComicEngine to launchpad. It should be easy now to add new translations. Here&#8217;s the link: https://launchpad.net/zfcomicengine.
]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve added zfComicEngine to launchpad. It should be easy now to add new translations. Here&#8217;s the link: <a href="https://launchpad.net/zfcomicengine">https://launchpad.net/zfcomicengine</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://raspi.fi/2009/10/24/zfcomicengine-now-at-launchpad/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building OpenVPN for gaming</title>
		<link>http://raspi.fi/2009/10/13/building-bridged-openvpn-for-gaming/</link>
		<comments>http://raspi.fi/2009/10/13/building-bridged-openvpn-for-gaming/#comments</comments>
		<pubDate>Tue, 13 Oct 2009 17:38:09 +0000</pubDate>
		<dc:creator>raspi</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://raspi.fi/?p=47</guid>
		<description><![CDATA[This is OpenVPN setup for gaming where VPN&#8217;s own internal network is not connected to physical LAN. It&#8217;s star shaped and OpenVPN server is running on high bandwidth connection on virtual machine or dedicated server in some ISP&#8217;s server room so that the latency is minimal to all connected gamers (ie. guy which has most [...]]]></description>
			<content:encoded><![CDATA[<p>This is <a href="http://www.openvpn.net/">OpenVPN</a> setup for gaming where <a href="http://en.wikipedia.org/wiki/Virtual_private_network">VPN</a>&#8217;s own internal network is not connected to physical <a href="http://en.wikipedia.org/wiki/Local_area_network">LAN</a>. It&#8217;s star shaped and OpenVPN server is running on high bandwidth connection on virtual machine or dedicated server in some ISP&#8217;s server room so that the latency is minimal to all connected gamers (ie. guy which has most upload bandwidth should do this). Every player and game server hoster connects to this server and OpenVPN handles rest of networking stuff. It&#8217;s also <a href="http://en.wikipedia.org/wiki/Data_Link_Layer">layer 2</a> (TAP) so that everyone sees mac addresses and <a href="http://en.wikipedia.org/wiki/User_Datagram_Protocol">UDP</a> <a href="http://en.wikipedia.org/wiki/Broadcast_address">broadcasts</a> work ok etc.</p>
<h2>Install OpenVPN</h2>
<pre>aptitude install openvpn</pre>
<h2>Setting up OpenVPN server</h2>
<p>/etc/openvpn/server.conf:</p>
<pre class="brush: plain;">
mode server
tls-server
port 1194
proto udp
dev tap
client-to-client
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/servername.crt
key /etc/openvpn/easy-rsa/keys/servername.key
dh /etc/openvpn/easy-rsa/keys/dh384.pem
ifconfig-pool-persist ipp.txt
server-bridge 10.10.10.1 255.255.255.0 10.10.10.128 10.10.10.250
push .route 10.10.10.1 255.255.255.0
keepalive 5 60
comp-lzo
persist-key
persist-tun
status /var/log/openvpn-status.log
log-append /var/log/openvpn.log
verb 3
user nobody
group nogroup
#this allows more than one connection at a time from same key
#good if you just want to give one &quot;gaming&quot; certificate to everybody
#duplicate-cn
</pre>
<pre>mkdir /etc/openvpn/easy-rsa
cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa</pre>
<p>Modify &#8220;<em>vars</em>&#8221; file with your favorite editor</p>
<p>Change <em>export KEY_SIZE=1024</em> to <em>export KEY_SIZE=384</em>. We don&#8217;t need much encryption for gaming.</p>
<p>Modify <em>export KEY_COUNTRY, KEY_PROVINCE, KEY_CITY, KEY_ORG</em> and <em>KEY_EMAIL</em> to your liking.</p>
<p>Save the file.</p>
<pre>source ./vars
./clean-all
./build-ca
./build-key-server servername
./build-dh
</pre>
<p>Use</p>
<pre>/etc/init.d/openvpn restart
/etc/init.d/openvpn start
/etc/init.d/openvpn stop
</pre>
<p>To start/stop/restart the OpenVPN server.</p>
<h2>Adding clients</h2>
<p>Replace <em>clientX</em> with actual username wanted.</p>
<pre>cd /etc/openvpn/easy-rsa
source ./vars
./build-key-pkcs12 clientX</pre>
<p>copy clientX.p12 file from &#8220;<em>keys</em>&#8221; directory to some directory</p>
<p>create following clientX.ovpn file:</p>
<pre class="brush: plain;">
client
dev tap
proto udp
#replace this with your OpenVPN server hostname/IP
remote 192.168.0.123 1194
resolv-retry infinite
nobind
ns-cert-type server
comp-lzo
verb 3
pull
# Replace this with your own .p12 certificate file
pkcs12 clientX.p12
</pre>
<p>Send the certificate (.p12) and .ovpn file to your buddy.</p>
<h2>Windows client configurations / troubleshooting</h2>
<p>We used <a href="http://openvpn.se/">OpenVPN GUI</a> as Windows client. Download the .ovpn and .p12 file to <em>C:\Program Files\OpenVPN\config</em> directory. Click connect on OpenVPN GUI&#8217;s taskbar icon and you should be connected.</p>
<p>To minimize problems set the OpenVPN TAP Adapter as first interface from network configuration. This required reboot for me so that Windows XP acknowledged it. Remove unnecessary stuff from TAP interface (like QoS).</p>
<p><a href="http://www.wireshark.org/">WireShark</a> is your friend. Use it to find out if games are shouting their packets to wrong network and not to VPN IP network. 99.9% of LAN games use UDP broadcast to tell about themselves so use &#8220;<em>udp</em>&#8221; as filter. <strong> </strong></p>
<p><strong>Ping</strong> and <strong>arp -a</strong> is also good for basic connectivity testing. Some firewalls block ping (ICMP) so be aware of that too. Other good tool is <strong>netstat</strong> and <a href="http://technet.microsoft.com/en-us/sysinternals/bb897437.aspx">TCPView</a> for looking in which port the game is running.</p>
<p>If you&#8217;re running some old games through virtual machine then set the virtual machine&#8217;s network adapter to OpenVPN&#8217;s TAP Adapter. IPX packets <em>should</em> go through too because TAP is layer 2 (but I didn&#8217;t test).</p>
<p>I also found this <a href="http://www.r1ch.net/stuff/forcebindip/">ForceBindIP</a> application which will force specified application to certain network card or network card IP. Might come in handy if game is constantly picking up wrong NIC or IP network.</p>
<h2>Sources</h2>
<ul>
<li><a href="http://www.openvpn.net/index.php/open-source/documentation/miscellaneous/76-ethernet-bridging.html">OpenVPN bridging page</a></li>
<li><a title="Permanent Link: Setting up OpenVPN in debian/ubuntu" rel="bookmark" href="http://www.monkeedev.co.uk/blog/2009/03/06/setting-up-openvpn-in-debianubuntu/">Setting up OpenVPN in debian/ubuntu</a></li>
<li><a href="http://www.thebakershome.net/openvpn_tutorial?page=1">How to Install Openvpn</a></li>
<li><a rel="bookmark" href="http://judebert.com/progress/permalink/GameVPN.html">Setting Up A Gaming LAN with OpenVPN</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://raspi.fi/2009/10/13/building-bridged-openvpn-for-gaming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Minimal feedback form with ZF</title>
		<link>http://raspi.fi/2009/10/04/minimal-feedback-form-with-zf/</link>
		<comments>http://raspi.fi/2009/10/04/minimal-feedback-form-with-zf/#comments</comments>
		<pubDate>Sat, 03 Oct 2009 23:01:00 +0000</pubDate>
		<dc:creator>raspi</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://raspi.fi/?p=40</guid>
		<description><![CDATA[Here&#8217;s minimal feedback form example using Zend Framework 1.9.2 without  MVC.

&#60;?php
ignore_user_abort(true);
header(&#34;Content-Type: text/html; charset=utf-8&#34;)

error_reporting(E_ALL);
ini_set('display_errors', '1');

ini_set('magic_quotes_gpc', false);
ini_set('magic_quotes_runtime', false);

ini_set('default_charset', 'UTF-8');

ini_set('iconv.input_encoding', 'UTF-8');
ini_set('iconv.output_encoding', 'UTF-8');
ini_set('iconv.internal_encoding', 'UTF-8');

function stripinputslashes(&#38;$input)
{
  if (is_array($input))
  {
    foreach ($input as $key =&#62; $value)
    {
      switch (gettype($value))
      {
   [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s minimal feedback form example using Zend Framework 1.9.2 without  MVC.</p>
<pre class="brush: php;">
&lt;?php
ignore_user_abort(true);
header(&quot;Content-Type: text/html; charset=utf-8&quot;)

error_reporting(E_ALL);
ini_set('display_errors', '1');

ini_set('magic_quotes_gpc', false);
ini_set('magic_quotes_runtime', false);

ini_set('default_charset', 'UTF-8');

ini_set('iconv.input_encoding', 'UTF-8');
ini_set('iconv.output_encoding', 'UTF-8');
ini_set('iconv.internal_encoding', 'UTF-8');

function stripinputslashes(&amp;$input)
{
  if (is_array($input))
  {
    foreach ($input as $key =&gt; $value)
    {
      switch (gettype($value))
      {
        default: break;
        case 'string':
          $input[$key] = stripinputslashes($value);
        break;
      } // /switch
    } // /foreach
  } // /if
  else
  {
    switch (gettype($input))
    {
      default: break;
      case 'string':
        $input = stripslashes($input);
      break;
    } // /switch
  } // /else

  return true;
} // /function

if (version_compare(phpversion(), 6) === -1)
{
  if (function_exists(&quot;get_magic_quotes_gpc&quot;) &amp;&amp; get_magic_quotes_gpc() === 1)
  {
    array_walk_recursive($_GET, 'stripinputslashes');
    array_walk_recursive($_REQUEST, 'stripinputslashes');

    if (isset($_POST))
    {
      array_walk_recursive($_POST, 'stripinputslashes');
    } // /if

  } // /if
} // /if

// Add library path
set_include_path(implode(PATH_SEPARATOR, array(
  realpath(dirname(__FILE__) . '/../library'),
  get_include_path(),
)));

// Enable autoloader
require_once 'Zend/Loader/Autoloader.php';
Zend_Loader_Autoloader::getInstance();

$view = new Zend_View();

$form = new Zend_Form();
$form-&gt;setView($view);
$form-&gt;setMethod(Zend_Form::METHOD_POST);
$form-&gt;setAction('/');

$submit = new Zend_Form_Element_Submit('submit');
$submit-&gt;setLabel('OK');

$email = new Zend_Form_Element_Text('email');
$email-&gt;setRequired(true);
$email-&gt;setLabel('E-mail');
$email-&gt;addFilter('StringTrim');
$email-&gt;addFilter('StringToLower');
$email-&gt;addValidator('StringLength', false, array(7));
$email-&gt;addValidator(new Zend_Validate_EmailAddress(Zend_Validate_Hostname::ALLOW_DNS, true));

$txt = new Zend_Form_Element_Textarea('text');
$txt-&gt;setRequired(true);
$txt-&gt;addFilter('StringTrim');
$txt-&gt;addValidator('StringLength', false, array(3));

// Add fields to form
$form-&gt;addElement($email);
$form-&gt;addElement($txt);
$form-&gt;addElement($submit);

if (isset($_POST) &amp;&amp; !empty($_POST))
{
  if ($form-&gt;isValid($_POST))
  {
    $values = $form-&gt;getValues();

    $m = new Zend_Mail('UTF-8');
    $m-&gt;setBodyText($values['text']);
    $m-&gt;setFrom($values['email']);
    $m-&gt;addTo('feedback@example.com');
    $m-&gt;setSubject('Feedback');
    $m-&gt;send();

    header(&quot;Location: /ok.php&quot;);
  }

}

// Output form to page
echo $form;
</pre>
<p>Page contains e-mail and free text field. E-mail address is checked against DNS. Form contents are send to feedback@example.com and given e-mail address is the sender. stripinputslashes kills all  stupid slashes from _POST data.</p>
<p>Directory structure:</p>
<pre>/home/foo/public_html/index.php (feedback form)
/home/foo/public_html/ok.php
/home/foo/library/Zend/ (ZF files)
</pre>
<p>ok.php contains something like &#8220;Thank you for giving feedback.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://raspi.fi/2009/10/04/minimal-feedback-form-with-zf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Gozerbot and What is this file?</title>
		<link>http://raspi.fi/2009/10/02/gozerbot-and-what-is-this-file/</link>
		<comments>http://raspi.fi/2009/10/02/gozerbot-and-what-is-this-file/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 18:06:42 +0000</pubDate>
		<dc:creator>raspi</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[What is this file?]]></category>

		<guid isPermaLink="false">http://raspi.fi/?p=38</guid>
		<description><![CDATA[It&#8217;s been many years since I played with IRC bots. I&#8217;ve used eggdrop for something like 10+ years. Now I tried Gozerbot and coded plugin (source) to it which gets URLs from chat and then gives some information about them. It utilizes my other project &#8211; &#8220;what is this file?&#8221; which runs on top of [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s been many years since I played with <a href="http://en.wikipedia.org/wiki/Internet_Relay_Chat">IRC</a> bots. I&#8217;ve used <a href="http://www.eggheads.org/">eggdrop</a> for something like 10+ years. Now I tried <a href="http://gozerbot.org/">Gozerbot</a> and coded plugin (<a href="http://dev.gozerbot.org/trac/attachment/ticket/138/urlinfo.py">source</a>) to it which gets URLs from chat and then gives some information about them. It utilizes my other project &#8211; &#8220;<a href="http://whatisthisfile.appspot.com/">what is this file?</a>&#8221; which runs on top of <a href="http://code.google.com/appengine/">Google App Engine</a>. Everything is using <a href="http://python.org">Python</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://raspi.fi/2009/10/02/gozerbot-and-what-is-this-file/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>First site using zfComicEngine!</title>
		<link>http://raspi.fi/2009/09/26/first-site-using-zfcomicengine/</link>
		<comments>http://raspi.fi/2009/09/26/first-site-using-zfcomicengine/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 19:39:21 +0000</pubDate>
		<dc:creator>raspi</dc:creator>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[zfComicEngine]]></category>

		<guid isPermaLink="false">http://raspi.fi/?p=33</guid>
		<description><![CDATA[Finnish Pikselinviilaajat IT comic is now using zfComicEngine. It was previously running on my non-opensource and age old code. I coded simple converter which corrected all the old links in HTML etc with PHP&#8217;s DOM and XML Starlet.
ZFCE has many similarities to old Pikselinviilaajat comic publishing engine but of course it&#8217;s all been rewritten.
If you [...]]]></description>
			<content:encoded><![CDATA[<p>Finnish <a href="http://pikselinviilaajat.net/">Pikselinviilaajat</a> IT comic is now using <a href="http://code.google.com/p/zfcomicengine/">zfComicEngine</a>. It was previously running on my non-opensource and age old code. I coded simple converter which corrected all the old links in HTML etc with PHP&#8217;s DOM and <a href="http://xmlstar.sourceforge.net/">XML Starlet</a>.</p>
<p>ZFCE has many similarities to old Pikselinviilaajat comic publishing engine but of course it&#8217;s all been rewritten.</p>
<p>If you want to try out zfCE, please use <a href="http://zfce.raspi.fi/">my demo site</a>. I&#8217;m also looking for some people with some graphical eye so that zfCE could have more default CSS files for new users.</p>
<p>I&#8217;m also <a href="http://code.google.com/p/zfcomicengine/issues/detail?id=9">planning for Flash support</a> so that you could publish animations easily too.</p>
<p>New translations are also welcome. Currently supported languages are Finnish and English.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 32px; width: 1px; height: 1px;">http://code.google.com/p/zfcomicengine/issues/detail?id=9</div>
]]></content:encoded>
			<wfw:commentRss>http://raspi.fi/2009/09/26/first-site-using-zfcomicengine/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Few Trac plugins</title>
		<link>http://raspi.fi/2009/09/24/few-trac-plugins/</link>
		<comments>http://raspi.fi/2009/09/24/few-trac-plugins/#comments</comments>
		<pubDate>Thu, 24 Sep 2009 20:44:31 +0000</pubDate>
		<dc:creator>raspi</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://raspi.fi/?p=20</guid>
		<description><![CDATA[Here&#8217;sfew plugins for Trac:
Timing and Estimation Plugin
Project manager,  CEO and customer are usually not interested in count of tickets. This plugin adds new fields to tickets where you can add hour estimations and actual worked hours. It also adds checkbox for billable/not billable ticket.
Homepage
Batch modification of tickets
I found this useful when you have for [...]]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;sfew plugins for <a href="http://trac.edgewall.org/">Trac</a>:</p>
<h2>Timing and Estimation Plugin</h2>
<p>Project manager,  CEO and customer are usually not interested in count of tickets. This plugin adds new fields to tickets where you can add hour estimations and actual worked hours. It also adds checkbox for billable/not billable ticket.</p>
<p><a href="http://trac-hacks.org/wiki/TimingAndEstimationPlugin">Homepage</a></p>
<h2>Batch modification of tickets</h2>
<p>I found this useful when you have for example milestone Preview1 and all tickets are there. Then you release the Preview1 version. Next you create Preview2 milestone and move all open tickets from Preview1 to Preview2. No need to modify every ticket, only make a custom query and select all open tickets.</p>
<p><a href="http://trac-hacks.org/wiki/BatchModifyPlugin">Homepage</a></p>
]]></content:encoded>
			<wfw:commentRss>http://raspi.fi/2009/09/24/few-trac-plugins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Virtualizing retro BBS software</title>
		<link>http://raspi.fi/2009/09/22/virtualizing-retro-bbs-software/</link>
		<comments>http://raspi.fi/2009/09/22/virtualizing-retro-bbs-software/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 13:39:04 +0000</pubDate>
		<dc:creator>raspi</dc:creator>
				<category><![CDATA[Projects]]></category>

		<guid isPermaLink="false">http://raspi.fi/?p=13</guid>
		<description><![CDATA[So what would you need to run BBS today? No, I don&#8217;t mean those crappy forums  that float in every corner of internet.
Generating ISO image for VMWare
I aqcuired old DOS boot floppy image from the internets. It was in IMG format so my VMWare wouldn&#8217;t like it. What to do? Who has floppy drives or [...]]]></description>
			<content:encoded><![CDATA[<p>So what would you need to run <a href="http://en.wikipedia.org/wiki/Bulletin_Board_System">BBS</a> today? No, I don&#8217;t mean those crappy forums  that float in every corner of internet.</p>
<h2>Generating ISO image for VMWare</h2>
<p>I aqcuired old DOS boot floppy image from the internets. It was in IMG format so my <a href="http://www.vmware.com/">VMWare</a> wouldn&#8217;t like it. What to do? Who has floppy drives or disks any more? You guessed it: Use <a href="http://chitchat.at.infoseek.co.jp/vmware/vfd.html">virtual floppy drive</a> of course!</p>
<p>Ok, let&#8217;s create that ISO 9660 image. Open up <a href="http://cdburnerxp.se/">CDBurnerXP</a> and go to Disc -&gt; Boot options and load up the IMG file. Now Burning software will scrape it for necessary boot stuff. Browse to that virtual floppy drive and throw all files to disc. Next thing is to &#8220;burn&#8221; it as ISO image. Easy.</p>
<h2>Installing operating system</h2>
<p>I&#8217;m using VMWare Server for this. Create new virtual machine and select Windows 98. I used 64 MB of memory, 1 GB of disk space and no networking. Use the generarated ISO image as virtual CD/DVD drive. Don&#8217;t add virtual COM ports just yet, let&#8217;s test this thing first.</p>
<p>Aargh! MS-DOS is horrible! Where&#8217;s scrollable screen or auto completion for commands? But show must go on. Run FDISK to create partition C:. After you&#8217;ve created the partition, reboot (CTRL-ALT-Insert). Go to BIOS (F2) and set CD-ROM drive as first bootable device. Next thing is to format C:. Run FORMAT C: /Q. Next thing is to copy OS to C:. Run COPY *.* C:. Go to C: drive and write the Master Boot Record with command FDISK /MBR. Go back to A: drive and run SYS C: which restores system. Next go to virtual RAM drive and copy some necessary software like EDIT with COPY *.* C:. It was in my case drive D:.  Reboot. Change first bootable device to hard drive from BIOS. Now you&#8217;re running DOS from C:. Easy isn&#8217;t it?</p>
<h2>Install PCBoard</h2>
<p>First, you need to <a href="http://outer.reaches.dyndns.org/modules.php?name=Downloads&amp;d_op=viewdownload&amp;cid=2">download PCBoard</a>. Unzip the file. Open up the generated ISO image and add all unpacked files to some subdirectory (I used PCBOR11). Also, if you don&#8217;t have XCOPY.EXE anywhere in your ISO image, get it. Save the ISO file again. Reboot from CD.</p>
<p>Go to CD drive. In my case it was E:. Run XCOPY /S pcbor11 c:. Go to C: drive. go to install directory and run install.</p>
<p>*<em>insert hours after hours of frustration here</em>*</p>
<h2>Installing Windows 98</h2>
<p>This should be pretty basic stuff.</p>
<h2>Installing virtual modem</h2>
<p>Install virtual modem to your actual OS. I found and used Virtual Modem Pro. I created Virtual COM1 port with it and then used the &#8220;Use physical serial port&#8221; from VMWare configuration for my guest OS.</p>
<h2>Installing BBBS</h2>
<p>Fetch BBBS from <a href="http://www.bbbs.net/">it&#8217;s site</a>.</p>
<p>Configure BBBS by running bcfg4</p>
<p>Start node 1 by running BBBS 1</p>
<p>BBBS should be now in &#8220;Waiting for calls&#8221; state. Or if not, install &#8220;Standard 56k modem&#8221; to W98 and try again.</p>
<h2>But that&#8217;s not enough</h2>
<p>You can&#8217;t run that virtual modem over VoIP. VoIP is designed for human voice. Modem&#8217;s noise is garbled and connection cannot be made. There&#8217;s hope though, ITU V.150.1 AKA V.MoIP (Modem over IP) is coming. Some hardware boxes seems to support it already. So let&#8217;s try someday again when MoIP support is available.</p>
<h2>Setup in the end</h2>
<p>Windows XP is running virtual modem and VMWare. VMWare is running Windows 98 and it&#8217;s running BBBS which is connected to virtual COM1 port via VMWare&#8217;s &#8220;physical&#8221; COM1 which is connected to that virtual modem.</p>
]]></content:encoded>
			<wfw:commentRss>http://raspi.fi/2009/09/22/virtualizing-retro-bbs-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MyDefrag</title>
		<link>http://raspi.fi/2009/09/17/mydefrag/</link>
		<comments>http://raspi.fi/2009/09/17/mydefrag/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 17:13:15 +0000</pubDate>
		<dc:creator>raspi</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://raspi.fi/?p=7</guid>
		<description><![CDATA[My computer was getting slow and I found the culprit: fragmented harddrive. So as a Super User™ I searched for better defragmentation software than Windozes own and found software called MyDefrag.
So why it&#8217;s so much better alternative than OS&#8217;s own built-in software? You can script it! It also runs as a screensaver. So I&#8217;m now [...]]]></description>
			<content:encoded><![CDATA[<p>My computer was getting slow and I found the culprit: fragmented harddrive. So as a <a href="http://superuser.com">Super User</a>™ I searched for better defragmentation software than Windozes own and found software called <a href="http://www.mydefrag.com/">MyDefrag</a>.</p>
<p>So why it&#8217;s so much better alternative than OS&#8217;s own built-in software? You can <em>script</em> it! It also runs as a screensaver. So I&#8217;m now getting average of 8 hours of defragmentation per day. That should keep harddrive fragmentation in order.</p>
]]></content:encoded>
			<wfw:commentRss>http://raspi.fi/2009/09/17/mydefrag/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
