<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8096012</id><updated>2011-11-28T02:19:38.814+01:00</updated><category term='wiki'/><category term='unrealadmin'/><category term='idle thumbs'/><category term='law'/><category term='libhttp'/><category term='programming'/><category term='sourceforge'/><category term='uncodex'/><category term='UT3'/><category term='games'/><category term='vbulletin'/><category term='delphi'/><category term='pascal'/><category term='copyright'/><category term='dns'/><category term='opensource'/><category term='lba'/><category term='vbdrupal'/><category term='unit testing'/><category term='unrealscript'/><category term='unreal'/><category term='eclipse'/><category term='preprocessor'/><category term='review'/><category term='WebAdmin'/><category term='visualstudio'/><category term='rant'/><category term='web design'/><title type='text'>Michiel 'elmuerte' Hendriks</title><subtitle type='html'>Master Control Program</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://elmuerte.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>45</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8096012.post-8317352879040213472</id><published>2009-08-11T13:45:00.001+02:00</published><updated>2009-08-11T13:53:08.479+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sourceforge'/><title type='text'>Extracting legacy release notes on sourceforge.net</title><content type='html'>&lt;p&gt;Recently sourceforge.net changed their File Release System (FRS). One of the changes affected now release notes are attached to files. With the old system you would simply enter the release notes in the submission form. With the new system you are supposed to upload a release note file and associate it with the file you want. This new system has various advantages.&lt;/p&gt;
&lt;p&gt;The release notes of the file releases that were made before the FRS change are still present in the database, and still linked to from the files. This will probably remain active for a very long time. And according to the staff you can safely rename and move the files and still have the proper release note association. (It is probably linked through the md5 and sha1 hash of the file.)&lt;/p&gt;
&lt;p&gt;But, it doesn't give a nice consistent picture when modern releases have a txt file next to them, and the old releases have a "release note" page. So, that's why I created &lt;a href="http://elmuerte.users.sourceforge.net/get-rls-notes/get-rls-notes.phps"&gt;this PHP script&lt;/a&gt;. It will parse a specific "files" page from the sourceforge project site and dump all "legacy" release notes to a text file. The files are places the same directory structure as the files are.&lt;/p&gt;
&lt;p&gt;You can use this script at your own leisure, I'm not going to provide support for it. So use it at your own risk.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-8317352879040213472?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://elmuerte.users.sourceforge.net/get-rls-notes/get-rls-notes.phps' title='Extracting legacy release notes on sourceforge.net'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/8317352879040213472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/8317352879040213472'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2009/08/extracting-legacy-release-notes-on.html' title='Extracting legacy release notes on sourceforge.net'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-6475413728227449535</id><published>2009-08-04T10:12:00.005+02:00</published><updated>2009-08-05T11:28:54.851+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='sourceforge'/><title type='text'>Eclipse update site on SourceForge</title><content type='html'>&lt;p&gt;This article will explain how to create an eclipse update site on sourceforge which is compliant to the sourceforge guidelines. A lot of projects host a update site on the project's webspace. But this is not really allowed by sourceforge's TOS. You should not host downloads on the project web.&lt;/p&gt;

&lt;p&gt;With sourceforge's recent update to the file release system (FRS) it became easier to host an eclipse update site through that same file release system. There are however some small issues you should be aware of.&lt;/p&gt;

&lt;p&gt;Simply create an eclipse update site like usual. Now you only need to make one small adjustment to the &lt;code&gt;site.xml&lt;/code&gt; file. To the root element &amp;lt;site&amp;gt; add an attribute with the name &lt;code&gt;url&lt;/code&gt; and the value &lt;code&gt;http://downloads.sourceforge.net/project/&lt;i&gt;[myproject]&lt;/i&gt;/&lt;i&gt;[file directory]&lt;/i&gt;/&lt;/code&gt;. Where &lt;i&gt;[myproject]&lt;/i&gt; is the UNIX name of your project, and &lt;i&gt;[file directory]&lt;/i&gt; is the directory where you are going to upload your site within the new FRS. Eclipse's site manifest editor does not provide a field for this property, so you have to edit the xml file by hand.&lt;/p&gt;

&lt;p&gt;So for example, if you project's UNIX name is &lt;i&gt;myproject&lt;/i&gt; and you're going to place the update site in the directory &lt;i&gt;eclipse&lt;/i&gt; then the value of the url attribute should be &lt;code&gt;http://downloads.sourceforge.net/project/myproject/eclipse&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;After this save and build the update site and upload the files to sourceforge &lt;a href="http://sourceforge.net/apps/trac/sourceforge/wiki/Release%20files%20for%20download"&gt;using the standard method&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now this is where the primary issue lies. You can not tell people to use &lt;code&gt;http://downloads.sourceforge.net/project/myproject/eclipse&lt;/code&gt; as the url for the update site. This does not work (see below). Instead you should tell people to use &lt;code&gt;http://master.dl.sourceforge.net/project/myproject/eclipse&lt;/code&gt; as the url for this update site. This url points to the main sourceforge's download site. But because the &lt;code&gt;site.xml&lt;/code&gt; contains the url attribute with the value &lt;code&gt;http://downloads.sourceforge.net/project/myproject/eclipse&lt;/code&gt; it will download all the files from that location. That location will automatically redirect to one of sourceforge's mirrors.&lt;/p&gt;

&lt;p&gt;Of course &lt;code&gt;http://master.dl.sourceforge.net/project/myproject/eclipse&lt;/code&gt; is not a really nice URL to hand out to your users. There are two ways you can improve that.&lt;/p&gt;

&lt;p&gt;1. Mirror the &lt;code&gt;site.xml&lt;/code&gt; in your projects webspace, for example at: &lt;code&gt;http://myproject.sourceforge.net/eclipse&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;2. Or you can create a HTTP level redirect to that url. You could use either create redirect script on your project web (see below), or use a URL shorting service that performs a 302 or 301 redirect (sourceforge's URL shorten service does not work for that).&lt;/p&gt;

&lt;p&gt;The reason you can not use &lt;code&gt;http://downloads.sourceforge.net/project/myproject/eclipse&lt;/code&gt; as the location for the update site is because of eclipse's mechanism to find the site information. Eclipse searches for a several files at that location. If it receives a 404 it will continue to the next possible site information file. But that sourceforge url does not result in a 404 when you request a non existing file, and for that reason eclipse won't accept the url as an update site.&lt;/p&gt;

&lt;p&gt;
This is an example .htaccess configuration you can use in your sourceforge project web to make a shorter eclipse update site url:
&lt;pre&gt;RewriteEngine On
# Redirect the root requests to the master site
RewriteRule ^([^/]*)$ http://master.dl.sourceforge.net/project/myproject/eclipse/$1 [L]
# The rest goes to the auto-mirror location
RewriteRule (.*) http://downloads.sourceforge.net/project/myproject/eclipse/$1 [L]
&lt;/pre&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-6475413728227449535?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/6475413728227449535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/6475413728227449535'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2009/08/eclipse-update-site-on-sourceforge.html' title='Eclipse update site on SourceForge'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-937865069400471823</id><published>2008-12-20T23:10:00.001+01:00</published><updated>2009-01-25T16:57:46.788+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='idle thumbs'/><title type='text'>Idle Ballad: The Ballad of John Riccitiello</title><content type='html'>&lt;p&gt;A while ago &lt;a href="http://www.idlethumbs.net"&gt;Idle Thumbs&lt;/a&gt; restarted as a (weekly) podcast. It's over an hour of mind blowing funny chatter about games.&lt;/p&gt;
&lt;p&gt;Some podcasts also contain a funny song, which you can also download from the idle thumbs website.&lt;/p&gt;
&lt;p&gt;One of the running gags on the forum is registering domain names related to the episodes, often with a funny splash page. For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.explode-mode.com"&gt;http://www.explode-mode.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.vigivigivigi.com"&gt;http://www.vigivigivigi.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anyway, Episode 10 of the Idle Thumbs podcast contained an awesome song called "The Ballad of John Riccitiello". This song gave me the idea to create a nice animation along side of it. The animation is completely HTML, CSS and Javascript base. Flash is only used to play the MP3 file.&lt;/p&gt;
&lt;p&gt;You can view this animation here: &lt;a href="http://www.idleballad.com"&gt;http://www.idleballad.com&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-937865069400471823?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.idleballad.com' title='Idle Ballad: The Ballad of John Riccitiello'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/937865069400471823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/937865069400471823'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2008/12/idle-ballad-ballad-of-john-riccitiello.html' title='Idle Ballad: The Ballad of John Riccitiello'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-5422428062552312829</id><published>2008-10-03T20:34:00.003+02:00</published><updated>2008-10-03T20:36:18.921+02:00</updated><title type='text'>UT3 WebAdmin for UT3 patch 1.4 - preview #2</title><content type='html'>&lt;p&gt;The game profile editor. Which allows you to edit various game type configurations on which the players could vote.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_stIaq0ZaJFA/SOZmExhZqeI/AAAAAAAAAB0/FWv9gcIrvKA/s1600-h/ut3webadmin-17b.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_stIaq0ZaJFA/SOZmExhZqeI/AAAAAAAAAB0/FWv9gcIrvKA/s320/ut3webadmin-17b.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5252998247573203426" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-5422428062552312829?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/5422428062552312829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/5422428062552312829'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2008/10/ut3-webadmin-for-ut3-patch-14-preview-2.html' title='UT3 WebAdmin for UT3 patch 1.4 - preview #2'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_stIaq0ZaJFA/SOZmExhZqeI/AAAAAAAAAB0/FWv9gcIrvKA/s72-c/ut3webadmin-17b.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-5429868488982967042</id><published>2008-09-18T20:25:00.003+02:00</published><updated>2008-09-18T20:32:37.042+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebAdmin'/><category scheme='http://www.blogger.com/atom/ns#' term='UT3'/><title type='text'>UT3 WebAdmin for UT3 patch 1.4 - preview</title><content type='html'>&lt;p&gt;Patch 1.4 (probably) for UT3 will contain an improved voting system. Because of this the map list management has been changed. This also affects the map list management as it was previously available in the WebAdmin. The screenshot below shows the new map list editor.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_stIaq0ZaJFA/SNKd99EyUfI/AAAAAAAAABM/xJI6qCkhtQ4/s1600-h/ut3webadmin-17a.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_stIaq0ZaJFA/SNKd99EyUfI/AAAAAAAAABM/xJI6qCkhtQ4/s320/ut3webadmin-17a.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5247430203532268018" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-5429868488982967042?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/5429868488982967042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/5429868488982967042'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2008/09/ut3-webadmin-for-ut3-patch-14-preview.html' title='UT3 WebAdmin for UT3 patch 1.4 - preview'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_stIaq0ZaJFA/SNKd99EyUfI/AAAAAAAAABM/xJI6qCkhtQ4/s72-c/ut3webadmin-17a.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-6278283681295577781</id><published>2008-06-30T14:22:00.002+02:00</published><updated>2008-06-30T14:29:16.619+02:00</updated><title type='text'>Updated Xslthl</title><content type='html'>&lt;p&gt;
The latest version of &lt;a href="http://elmuerte.com/xslthl/"&gt;Xslthl&lt;/a&gt; has some issues:
&lt;ol&gt;
&lt;li&gt;no xalan connector, only saxon6&lt;/li&gt;
&lt;li&gt;discards nested XML tags&lt;/li&gt;
&lt;li&gt;false positives in matching obstruct other matchers&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;
&lt;p&gt;
Issue #2 kind of annoying when you are using it with DocBook. It prevents you from from using the &amp;lt;co /&amp;gt; tags at the place you want them. You will have to fall back to areaspec's which are a pain to create.
&lt;/p&gt;
&lt;p&gt;
Issue #3 is also annoying because when you use a keyword matcher you can not use a regex matcher that matches on non-identifier and identifier tokens.
&lt;/p&gt;
&lt;p&gt;
So I addressed these issue (issue #3 is not completely resolved, there are some constructions that are still not possible). The result is an &lt;a href="http://elmuerte.com/xslthl/"&gt;updated xslthl&lt;/a&gt; release. I've submitted the patches back to the &lt;a href="http://sourceforge.net/projects/xslthl"&gt;xslthlproject&lt;/a&gt;, but considering the project didn't see any activity in the last 2 years it might not be included very soon.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-6278283681295577781?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://elmuerte.com/xslthl/' title='Updated Xslthl'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/6278283681295577781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/6278283681295577781'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2008/06/updated-xslthl.html' title='Updated Xslthl'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-1349672651519059413</id><published>2008-05-10T16:06:00.002+02:00</published><updated>2008-05-10T16:10:49.609+02:00</updated><title type='text'>Escape From Butcher Bay on Windows Vista</title><content type='html'>&lt;p&gt;If you want to play The Chronicles of Riddick - Escape From Butcher Bay on Windows Vista you will probably have problems getting the game to run. That is, unless you use a pirated version of the game.&lt;/p&gt;
&lt;p&gt;The copy protection software included with this game causes the issues. So if you want to play your legitimate copy of the game you will need to visit GameCopyWorld and download a no-dvd check patch. After that the game will run without problems.&lt;/p&gt;
&lt;p&gt;Another great example of how copy protection software only hinders customers and not pirates.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-1349672651519059413?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/1349672651519059413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/1349672651519059413'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2008/05/escape-from-butcher-bay-on-windows.html' title='Escape From Butcher Bay on Windows Vista'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-2790491457977211742</id><published>2008-03-15T15:47:00.003+01:00</published><updated>2008-03-15T15:50:14.210+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebAdmin'/><category scheme='http://www.blogger.com/atom/ns#' term='UT3'/><title type='text'>Bot management for UT3 WebAdmin v0.10</title><content type='html'>&lt;p&gt;Below you see a screenshot of the bot management functionality of v0.10 of the UT3 WebAdmin. You can edit the bot roster by dragging and dropping the bots list of the right. And you can move them up and down the list. To add or remove bots from the current game, simply select them and press the submit button.&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_stIaq0ZaJFA/R9vhxvbduOI/AAAAAAAAAA8/I0VWCg7zLnw/s1600-h/ut3wa-06.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_stIaq0ZaJFA/R9vhxvbduOI/AAAAAAAAAA8/I0VWCg7zLnw/s320/ut3wa-06.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5177980441254017250" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-2790491457977211742?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/2790491457977211742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/2790491457977211742'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2008/03/bot-management-for-ut3-webadmin-v010.html' title='Bot management for UT3 WebAdmin v0.10'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_stIaq0ZaJFA/R9vhxvbduOI/AAAAAAAAAA8/I0VWCg7zLnw/s72-c/ut3wa-06.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-7590706580905061827</id><published>2008-03-01T19:17:00.002+01:00</published><updated>2008-03-01T19:18:37.735+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebAdmin'/><category scheme='http://www.blogger.com/atom/ns#' term='UT3'/><title type='text'>Map list editing for the UT3 WebAdmin</title><content type='html'>&lt;p&gt;Below is a screenshot of the map list editor for the UT3 WebAdmin. It provides drag and drop functionality to create a map cycle.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_stIaq0ZaJFA/R8md6Zca0hI/AAAAAAAAAA0/aDhIoIhFp0w/s1600-h/ut3wa-05.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_stIaq0ZaJFA/R8md6Zca0hI/AAAAAAAAAA0/aDhIoIhFp0w/s320/ut3wa-05.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5172839273599783442" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-7590706580905061827?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/7590706580905061827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/7590706580905061827'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2008/03/map-list-editing-for-ut3-webadmin.html' title='Map list editing for the UT3 WebAdmin'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_stIaq0ZaJFA/R8md6Zca0hI/AAAAAAAAAA0/aDhIoIhFp0w/s72-c/ut3wa-05.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-1496982796612367259</id><published>2008-02-02T21:57:00.001+01:00</published><updated>2008-02-02T21:59:32.706+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebAdmin'/><category scheme='http://www.blogger.com/atom/ns#' term='UT3'/><title type='text'>Changing the current game in the UT3 WebAdmin</title><content type='html'>&lt;p&gt;New feature added, you can now change the current game through a nice interface. Changing the gametype will update the map list and mutator list to match the filters for that gametype.&lt;/p&gt;
&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_stIaq0ZaJFA/R6TZStuXoFI/AAAAAAAAAAs/DQlgrFyrX_E/s1600-h/ut3wa-04.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_stIaq0ZaJFA/R6TZStuXoFI/AAAAAAAAAAs/DQlgrFyrX_E/s200/ut3wa-04.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5162489988408385618" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-1496982796612367259?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/1496982796612367259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/1496982796612367259'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2008/02/changing-current-game-in-ut3-webadmin.html' title='Changing the current game in the UT3 WebAdmin'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_stIaq0ZaJFA/R6TZStuXoFI/AAAAAAAAAAs/DQlgrFyrX_E/s72-c/ut3wa-04.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-8014441204533973049</id><published>2008-01-30T21:44:00.000+01:00</published><updated>2008-01-30T22:04:11.725+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebAdmin'/><category scheme='http://www.blogger.com/atom/ns#' term='UT3'/><title type='text'>UT3's Mutator layout</title><content type='html'>&lt;p&gt;The UT3 Mutator layout has changed quite a bit from the previous games. Previously a mutator could belong to a mutator group (or not). When a mutator is in a group only a single mutator from that group can be selected. Not a major deal to organize that for the WebAdmin.&lt;p&gt;
&lt;p&gt;In UT3 the mutators have a list of groups they can be long to. Additionally a mutator also has a gametype filter, meaning that it's only available for a selection of gametypes. The gametype filter isn't a major deal, except for caching of the list. The organizing of the mutators based on groups is a bit of a pain. The groups can have overlapping sets. For example&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Group 1
&lt;ul&gt;
&lt;li&gt;Mutator 1&lt;/li&gt;
&lt;li&gt;Mutator 2&lt;/li&gt;
&lt;li&gt;Mutator 3&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Group 2
&lt;ul&gt;
&lt;li&gt;Mutator 1&lt;/li&gt;
&lt;li&gt;Mutator 4&lt;/li&gt;
&lt;li&gt;Mutator 5&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Group 3
&lt;ul&gt;
&lt;li&gt;Mutator 2&lt;/li&gt;
&lt;li&gt;Mutator 5&lt;/li&gt;
&lt;li&gt;Mutator 6&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When mutator 1 is selected, mutators 2 to 5 can not be selected. So, how to organize this using HTML. Should the user be able to select, for example, mutator 2 and thereby deselecting mutators the mutators belonging in groups 2 and 3. And how to disable/process this. UnrealScript does not provide good graph processing methods. But also the HTML processing is a bit difficult. A single group can be managed using radio elements. But selecting a mutator from a given group should also deselect conflicting mutators.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-8014441204533973049?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/8014441204533973049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/8014441204533973049'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2008/01/ut3s-mutator-layout.html' title='UT3&apos;s Mutator layout'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-5572997128724983084</id><published>2008-01-27T19:36:00.000+01:00</published><updated>2008-01-27T19:44:25.983+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='WebAdmin'/><category scheme='http://www.blogger.com/atom/ns#' term='UT3'/><title type='text'>UT3 WebAdmin - preview</title><content type='html'>&lt;p&gt;The current game in progress:&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_stIaq0ZaJFA/R5zPZNuXoCI/AAAAAAAAAAU/H9RDCsNZ4Lg/s1600-h/ut3wa-02.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_stIaq0ZaJFA/R5zPZNuXoCI/AAAAAAAAAAU/H9RDCsNZ4Lg/s200/ut3wa-02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5160227305147572258" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;p&gt;Player management:&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_stIaq0ZaJFA/R5zQd9uXoEI/AAAAAAAAAAk/gQFxFPm1WDI/s1600-h/ut3wa-01.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_stIaq0ZaJFA/R5zQd9uXoEI/AAAAAAAAAAk/gQFxFPm1WDI/s200/ut3wa-01.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5160228486263578690" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;p&gt;The chat console:&lt;/p&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_stIaq0ZaJFA/R5zPZNuXoDI/AAAAAAAAAAc/6RgELfLRVog/s1600-h/ut3wa-03.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_stIaq0ZaJFA/R5zPZNuXoDI/AAAAAAAAAAc/6RgELfLRVog/s200/ut3wa-03.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5160227305147572274" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-5572997128724983084?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/5572997128724983084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/5572997128724983084'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2008/01/ut3-webadmin-preview.html' title='UT3 WebAdmin - preview'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_stIaq0ZaJFA/R5zPZNuXoCI/AAAAAAAAAAU/H9RDCsNZ4Lg/s72-c/ut3wa-02.jpg' height='72' width='72'/></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-9208723115823561521</id><published>2007-01-21T14:44:00.000+01:00</published><updated>2007-01-21T19:59:51.944+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='copyright'/><category scheme='http://www.blogger.com/atom/ns#' term='lba'/><title type='text'>retro64 violates copyright - update</title><content type='html'>&lt;p&gt;An indi game development company by the name Retro64 infringes copyright with at least one of their games. A member of the Magicball Network &lt;a href="http://forum.magicball.net/showthread.php?t=11983"&gt;found out&lt;/a&gt; that Retro64's game with the name "Bugatron Worlds" violates the copyright of Adeline Software.&lt;/p&gt;
&lt;p&gt;The planet in the background of the &lt;a href="http://www.retro64.com/bugatron.asp?game_id=7680014&amp;showbig=bw_big_1.jpg"&gt;menu of Bugatron Worlds&lt;/a&gt; shows the image of a planet that very much resembles the planet &lt;a href="http://www.magicball.net/image_galleries/lba2/high_resolution/the_3_planets"&gt;Twinsun of the Little Big Adventure games&lt;/a&gt;.&lt;/p&gt;
&lt;div style="margin: auto;"&gt;&lt;img src="http://www.magicball.net/mirrors/official-lba2/IMAGES/TWINSUN.GIF" alt= "" /&gt;&lt;/div&gt;
&lt;p style="text-decoration: line-through;"&gt;This makes you wonder how much of the other art of their games is original. But this simple case of copyright infringement should be enough reason for not buying at least that particular game and maybe enough to think twice to buy any game from them.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update!&lt;/b&gt; the art for that game was provided by &lt;a href="http://forum.magicball.net/showpost.php?p=302743&amp;postcount=9"&gt;an other party&lt;/a&gt;, retro64 has updated the game. So it's safe to to buy their games again ;). And actually, this was quite nice by retro64, they resolved this issue quickly without any fuss. &lt;/p&gt;
&lt;p&gt;It's actually a sad thing. A developer hires a 3rd party to do some original art but in turn gets copied stuff. The developer will be held accountable because nobody knows that he has been ripped of by the third party.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-9208723115823561521?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/9208723115823561521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/9208723115823561521'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2007/01/retro64-violates-copyright.html' title='retro64 violates copyright - update'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-115609065058203900</id><published>2006-08-20T18:17:00.000+02:00</published><updated>2007-01-14T14:11:43.883+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>Bad Day LA Demo</title><content type='html'>&lt;p&gt;I was very excited about this game, it looked very funny and interesting to play. The concept was more or less interesting.&lt;/p&gt;
&lt;p&gt;But the demo changed by positive view on this game. And unless major changes are planned I don't see this going to change anything for the final game.&lt;/p&gt;
&lt;p&gt;The execution of the concept is rather poor. There are a couple of damn annoying design errors in the game.&lt;/p&gt;

&lt;h3&gt;1. Invisible walls&lt;/h3&gt;
&lt;p&gt;These things suck big time. If you want want people to go into a certain direction block their way in a visible way. Don't cut the gameplay to let the main character tell you that he doesn't want to go there. This essentially puts a temporary halt on the game.&lt;/p&gt;

&lt;h3&gt;2. Lack of direction&lt;/h3&gt;
&lt;p&gt;Players need to go in what general direction they have to move or what in general their task is. And only show the task when it's relevant. There is no point telling the poeple to kill 5 terrorist when they first have to walk a mile and a half before even encountering the first terrorist in the game.&lt;/p&gt;
&lt;p&gt;You don't want people roaming around for minutes before they finally find the "hidden" passage to continue to the next part.&lt;/p&gt;
&lt;p&gt;Bad Day LA (BDLA) doesn't have a radar or pointer in the HUD to tell you where your task is. It does have pointers at the point of interest. But they are no good when a house is in front of it.&lt;/p&gt;

&lt;h3&gt;3. Nagging character&lt;/h3&gt;
&lt;p&gt;I know where I'm going, but not completely sure how I get to it. So stop complaining about asking for directions. It's not like I can ask anyone for directions.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-115609065058203900?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.baddayla.com/' title='Bad Day LA Demo'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/115609065058203900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/115609065058203900'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2006/08/bad-day-la-demo.html' title='Bad Day LA Demo'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-115099182982172744</id><published>2006-06-22T17:57:00.000+02:00</published><updated>2007-01-14T13:45:26.015+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>Prey - the game</title><content type='html'>&lt;p&gt;The &lt;a href="http://www.prey.com/"&gt;Prey&lt;/a&gt; demo has been released. Ever since I first heard of the game (back in 1997) I was interested in it. Ofcourse 3D Realms became too busy with other things to continue the game, so that was a bit of a downside. When I heard Prey was back in development I got excited. So Prey was going to use the Doom3 demo. I wasn't very excited about doom. the game itself wasn't very special. So what would Human Head do with it for Prey.&lt;/p&gt;
&lt;p&gt;The first movie of the new Prey looked awesome. It looked like they were going to perform weird shit with stuff walking on walls and a interesting looking spirit mode.&lt;/p&gt;
&lt;p&gt;Anyway, today I installed the Prey demo. And O.M.F.G. this rocked. You start out in the toiled of a crappy bar, nothing great about that. But instead of the usual static environment (almost) everything worked. You can flush toilets, you can dry hour hands, flip light switches. In the rest of the bar you could play slot machines and a pacman clone. There was also a jukebox with various songs you could select and a black and white TV showing real world clips. Very very nice. Much better than what iD pulled of in the bar in Doom 3. Ok so far the human world is interactive (like it should). So, nothing much happens, you talk about with the bar lady and then some guests start to become annoying. You smash their head in and all is safe. But then hell breaks lose and the emergency channel is activated broadcasting info about weird sightings. Suddenly "Reaper" by the &lt;a href="http://www.blueoystercult.com/"&gt;Blue Öyster Cult&lt;/a&gt; starts playing. It's a great song and it immediately remembered me how this same song was used in the mini-series "&lt;a href="http://www.imdb.com/title/tt0108941/"&gt;The Stand&lt;/a&gt;" based on a book by Stephen King. How they used it in that series was simply awesome. Then it struck me, I didn't put that song on in the jukebox. The the roof of the bar got ... uhm... well... it disappeared. Strange lights were shining through, apperently tractor beams since stuff from the bar was picked up. And eventuelly they also got me (well, the player). After that came a sequence where you were moved through the space ship or something, much like in Half Life 2 (but much much better). You get sprung from your prison, but your friend and father don't. And here starts the actual game.&lt;/p&gt;
&lt;p&gt;So Prey already had a kick as intro. The game itself is a first person shooter set in a alien space station. Nothing new here. However these aliens apperently have weird portal and gravity technology. The portal technology allows them to put doors in places where you enter a completely different room. Some portals are even two way (and yes you can and sometimes must use the portals). Prey makes a lot of use of the six degrees of freedom. Sometimes you can walk on walls and the ceiling when walking over a magnetic floor or something (if you jump you'll fall off). Walking on this floor is really funky. There are also gravity switches, shooting at a gravity switch will change the gravity in the room in that direction. You sometimes have to use this to solve a puzzle. These gravity things and portals really make the game more unique. In Serious Sam you also had some gravity and portal things, but there were not always functional and more like a engine demo show-off than something contributing to the game. And other thing in Prey is the spirit mode. This means you can leave your body and go past certain obstacles (like force fields). You usually need this to solve a puzzle you can continue.&lt;/p&gt;
&lt;p&gt;That's all for my short review of the demo. You should really try it out (if your system can handle it). If you thought Doom 3 or Half Life 2 was great you'll be amazed by this game. I can't wait to play the full version.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-115099182982172744?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.prey.com/' title='Prey - the game'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/115099182982172744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/115099182982172744'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2006/06/prey-game.html' title='Prey - the game'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-115087544716518461</id><published>2006-06-21T09:03:00.000+02:00</published><updated>2007-01-14T13:46:01.658+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>The price of games</title><content type='html'>&lt;p&gt;PC Games are getting more expensive (again). When I started playing and buying PC games (1995) the prices were between &amp;euro;45 (100 guilders) and &amp;euro;70 (150 guilders). At the time of 1997 the prices dropped to &amp;euro;35 and &amp;euro;45. The last couple of years the prices converged to about &amp;euro;40 a game. But recently the prices started increasing to &amp;euro;50. It somewhat started with Half Life 2 and Doom 3. These games were the first games to use &amp;euro;40+ prices for their normal package. And now pretty much all games that are released have this price tag.&lt;/p&gt;
&lt;p&gt;It's not like games are getting better or contain more hours of enjoyment. I think &amp;euro;40 is quite a lot for a game. Specially if the replay value is low. Sure, watching a movie in the theatre is even more expensive (but that's just a bad comparission). The whole problem is that I can only spend money once. And when I have to fork over a large amouth I will think longer about it (and eventually not buy it). I often pick up games from bargin bins, and not even play them. Or I do play them for a while and then stop because I didn't like it afterall. But for an full price game I will think much longer, if there isn't even a demo of the game I can't even try it out. So why should I fork over a large amouth of money just to buy a game that eventually was crap. It's not like I could get my money back if I was disappointed. If the game was less expensive it wouldn't matter that much.&lt;/p&gt;
&lt;p&gt;If a game would cost about &amp;euro;30 I would buy it much faster than a &amp;euro;50 game. In fact, I would buy two &amp;euro;30 games more easily than a single &amp;euro;50 game. With high prices game creators will have to compete with eachother more than they would have to compete with lower prices. If more consumers feel like this popular games might see less revenue, but less popular games would see more. But the less popular games would become more popular. So in the end the publisher will earn more. (2*30 &gt; 50; yes it really is).&lt;/p&gt;
&lt;p&gt;Recently there has been a new development, episodic content. Instead of paying &amp;euro; 50 for a game you pay 3 times &amp;euro; 20 (which equals &amp;euro; 60) for the game. Or something like that. I thought Half Life 2 Episode 2 wasn't great, in fact it was quite boring, it didn't add much to what Half Life 2 already gave. It was more of a poor expansion pack. A lot of others think it was great or something, and even tho the game had only 4 hours of gameplay with a low replay value people thought "Hey! It was only &amp;euro; 20 so screw it". I'm not saying episodic content is the way of the future, I rather play a complete story, and not have to wait over a year before I can continue it. It's more that apperently people don't care much about the &amp;euro; 20. If you are going episodic make sure your episodes can stand on their own, it's pretty much like the old sharware days.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-115087544716518461?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/115087544716518461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/115087544716518461'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2006/06/price-of-games.html' title='The price of games'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-114952646678105253</id><published>2006-06-05T18:54:00.000+02:00</published><updated>2007-01-14T13:46:10.493+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><title type='text'>Tweakers.net sucks</title><content type='html'>&lt;p&gt;A user (Otis) of Tweakers.net posted the &lt;a href="http://tweakers.net/reacties.dsp?Action=Posting&amp;amp;ParentID=1659929"&gt;following comment&lt;/a&gt; (in Dutch; and copy posted below) concerning banners on websites and why visitors are allowed to block certain content from sites. Part of Tweakers.net's bullshit &lt;abbr title="Acceptable Use Policy"&gt;AUP&lt;/abbr&gt; is a entry about users not being permitted to block ads on their site (and as Otis explain is a bullshit reason). Besides that he also said he blocked the banners on the site of tweakers.net.&lt;/p&gt;
&lt;p&gt;As a result of that comment Otis was banned from Tweakers.net, just a little more proof of the ever degrading quality of tweakers.net. The site is more about the money than it is to provide a "quality" service to a community. Tweakers.net does not allow negative feedback to some of their policies. Being the hypocrytical assholes they are they even post news about net nutrality and censorship. Apperently they are against censorship and for net nutrality unless it's something negative towards their site.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;Copy of the comment by Otis:&lt;/i&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;Tja, maar Tweakers.net is niet de eigenaar van de connectie naar hun site, dat is de bezoeker. De bezoeker mag dus bytes weren op zn eigen computer. Daar heeft tweakers.net niets over te zeggen. Tweakers.net mag zenden wat ze willen, de gebruiker is baas over welke bytes er wel en niet inkomen. Dan mag tweakers.net een lijst met algemene voorwaarden opstellen, maar een bepaling dat tweakers.net kan bepalen wat jij wel en niet toe moet staan qua bytes in je eigen computer is in strijd met de wet, wat zoiets inhoudt als dat die bepaling dus niet rechtsgeldig is. Niet dat dat wat boeit natuurlijk, maar toch.&lt;/p&gt;

&lt;p&gt;Daarnaast is het niet in Tweakers.net's belang dat bezoekers worden gebanned omdat ze adblock gebruiken. Ik blokkeer ook alle ads op deze pages en op got via adblock in firefox. Dat tweakers.net daar wellicht het niet mee eens is, is jammer voor ze, maar daar heb ik geen boodschap aan, simpelweg omdat adblock gewoon requests weghaalt en html weghaalt uit de page. Het web is nl. nog altijd een pull medium, geen push medium. Dus als ik vanuit MIJN browser geen request opstart naar een webads server, dan is dat mijn verantwoordelijkheid en niet die van tweakers.net en ook mijn goed recht. Het moet toch niet gekker worden zeg, dat ik niet mag bepalen met welke sites ik verbinding maak.&lt;/p&gt;

&lt;p&gt;Want, vergeet nooit, als er, in het hypothetische geval, kinderporno in een ad staat, en ik ben verplicht die binnen te halen ivm algemene voorwaarden van een site, wie is er dan verantwoordelijk volgens de wet? Tweakers.net? Denk het niet, zij pushen nl. niets, de browser van de gebruiker pullt de content.&lt;/p&gt;

&lt;p&gt;Verder komt dit neer op "Jij kijkt nu verplicht naar onze reclame tussen de programma's in! het is verboden weg te zappen naar een ander net, anders mag je niet meer naar ons programma kijken!"... tja.&lt;/p&gt;

&lt;p&gt;Maar goed, deze discussie is niet nieuw, en tweakers.net weet ook wel dat mensen hier ads blocken. Als ze werkelijk tot bannen overgaan van mensen, moeten ze dat maar doen, het zal ze niet veel 'goodwill' opleveren&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-114952646678105253?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://tweakers.net/reacties.dsp?Action=Posting&amp;ParentID=1659929' title='Tweakers.net sucks'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/114952646678105253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/114952646678105253'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2006/06/tweakersnet-sucks.html' title='Tweakers.net sucks'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-114944544355735209</id><published>2006-06-04T20:00:00.000+02:00</published><updated>2007-01-14T13:46:20.983+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='law'/><title type='text'>What is theft?</title><content type='html'>&lt;p&gt;According to WordNet 2.0:&lt;/p&gt;
&lt;pre&gt;  theft
       n : the act of taking something from someone unlawfully; "the
           thieving is awful at Kennedy International"&lt;/pre&gt;
&lt;p&gt;So, you take something from someone without their concent and therefor they no longer have access to the thing that was taken away (they no longer possess it). Right? &lt;/p&gt;
&lt;p&gt;Well, assume it is right. If I tell you a joke and you tell that joke to another person. Is that theft? Did you steal the joke from me? Apperently not because I still know the joke and I can still tell it to other people. (note: if you claim you made up the joke it's plagarism, not theft).&lt;/p&gt;
&lt;p&gt;If we extrapolate it to computer data. If I copy a file I have two identical copies, you can not distinguish them from eachother. If I move them around I'm 100% sure you can not tell them apart. Except one of the files is on my system and the other isn't. Did I steal the file? To answer that, let's go back to the beginning. You took something (a copy of a file) from someone (me). If it was with or without my concent doesn't matter (yet). The question is, do I still have access to the thing that was taken away? Yes, I still have the "original" file. So it wasn't taken from me, I still have it. Therefor it can't be theft. Because of this "they" invented something called copyright. Copyright fills the gap between theft and creating a copy without concent of the owner.&lt;/p&gt;
&lt;p&gt;So creating a copy of a file isn't theft but a possible violation of the copyright. Ofcourse a lot of people don't agree and claim that downloading a MP3 is theft (and copyright violtation). Ofcourse the person violating the copyright is the person that made the MP3 available. You (the downloader) would be labeled the thief (by organisations like RIAA/MPAA/Brein (Dutch "version" of MPAA)). And this thing has been an somewhat redundant debat over and over again for the past years.&lt;/p&gt;
&lt;p&gt;And today I read &lt;a href="http://www.spectrum.ieee.org/jun06/3673"&gt;something&lt;/a&gt; more interesting. &lt;q&gt;Jamie Kellner, [...], called skipping commercials "theft" ...&lt;/q&gt;. Uhm... okay. Then what did I take away?. As far as I can tell those commercials take something from me: &lt;i&gt;time&lt;/i&gt;. If I skip commercials with some piece of technology it's theft. What if I leave the room or close my eyes and ears. Is that theft too? If you said yes then you deserve to get shot in the face for the simple reason that you are stealing the right to live from others simply by existing. Ofcourse I could interpret what Kellner said more figuratively. But if you are going about mangling the meaning of words then what's the purpose of give meaning to words in the first place. You should "call the beast by it's name".&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-114944544355735209?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/114944544355735209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/114944544355735209'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2006/06/what-is-theft.html' title='What is theft?'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-114898034390244504</id><published>2006-05-30T11:12:00.000+02:00</published><updated>2007-01-14T13:46:33.402+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>TubeTwist</title><content type='html'>&lt;p&gt;&lt;a href="http://www.garagegames.com/products/57"&gt;TubeTwist&lt;/a&gt; is an interesting game. I've only played the demo so far, but I really like it. It's one of those games where you have to deliver a ball from X to Y using various forms of tubes. It's like &lt;abbr title="The Incredible Machine"&gt;TIM&lt;/abbr&gt; except that you only have balls and tubes.&lt;/p&gt;
&lt;p&gt;The game even has a story, not a very useful story but it kinda makes sense.&lt;/p&gt;
&lt;p&gt;The demo only has 6 levels, the full game has 80. It took me some while to complete those 6. It's a great game to simply play when you have some spare time. The demo has one annoying bug and that is that it doesn't work very well with a multi monitor setup. If it's fixed in the full version I'm going to buy it.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-114898034390244504?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.garagegames.com/products/57' title='TubeTwist'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/114898034390244504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/114898034390244504'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2006/05/tubetwist.html' title='TubeTwist'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-114882608893810373</id><published>2006-05-28T16:21:00.000+02:00</published><updated>2007-01-14T13:46:49.503+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>Freedom Fighters</title><content type='html'>&lt;p&gt;Recently I've played and completed &lt;a href="http://www.ea.com/official/freedom/freedomfighters/us/home.jsp"&gt;Freedom Fighters&lt;/a&gt;. It's an interesting game, it's one of the many 3rd person semi-open-world action games.&lt;/p&gt;
&lt;p&gt;For some "missions" there are multiple locations where you need to complete things, actually there are just multiple missions you can complete in any order. If you complete them in the right order it's much easier. For example, first complete the mission where you can stock up on C4, then do the mission with the helipad, then the electricity mission. And finally the other mission. Doing it in an other order might make it quite difficult.&lt;/p&gt;
&lt;p&gt;While completing the missions you can earn points that allow you to recruit others to keep up with you. You can give those recruits commands to attack or something. I rarely used that feature, except for parts where I figured enemies would respawn.&lt;/p&gt;
&lt;p&gt;The game is quite short, there are only 9 missions in total, including the first short tutorial mission. You can complete those missions in just a bit over 30 minutes. The in-game time that passes is 8 months, that was something that I didn't notice until the end sequence. It doesn't feel like 8 months have passed.&lt;/p&gt;
&lt;p&gt;Also the save system is quite annoying, you can quick save at certain point, but you lose the quick saves when you exit the game. Real saves are only done when you move to a different location. When you return to a location everything is back to normal except for the completed tasks. You will also lose your recruits when you move to an other location. Because of this you could get into a very difficult position where you can only recruit a small number an have to face an enormous number of enemies.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-114882608893810373?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.ea.com/official/freedom/freedomfighters/us/home.jsp' title='Freedom Fighters'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/114882608893810373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/114882608893810373'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2006/05/freedom-fighters.html' title='Freedom Fighters'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-114812863184586477</id><published>2006-05-20T14:37:00.000+02:00</published><updated>2007-01-14T13:47:07.718+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vbdrupal'/><category scheme='http://www.blogger.com/atom/ns#' term='vbulletin'/><title type='text'>vbDrupal: Drupal + vBulletin</title><content type='html'>&lt;p&gt;
&lt;a href="http://www.vbdrupal.org"&gt;vbDrupal&lt;/a&gt; is a fork of the CMS &lt;a href="http://www.drupal.org"&gt;Drupal&lt;/a&gt;. It uses the forum software vBulletin as it's base for user accounts and a couple of other things.&lt;/p&gt;
The first version of vbDrupal was based on Drupal 4.6, a lot of changes were made to the original code making it actually quite difficult to keep it up to date with newer Drupal versions.&lt;/p&gt;
&lt;p&gt;
At the end of 2005 I found out about vbDrupal and it was exactly what I needed as front page for my little big adventure community: &lt;a href="http://www.magicball.net"&gt;Magicball Network&lt;/a&gt; (MBN). At that point vbDrupal was already a couple of months old. After installing vbDrupal on the MBN I developed a couple of modules to implement certain features I wanted. After a while I got a bit more involved with vbDrupal, a special website was made for vbDrupal and it was put on &lt;a href="http://sourceforge.net/projects/vbdrupal"&gt;sourceforge&lt;/a&gt;. As soon as the sourceforge project was online I came aboard as a developer for vbDrupal. I added a couple of new vBulletin related modules and also did some maintenance. After a while I released a new version of vbDrupal, it was a dumpy release, images were corrupt, some development code wasn't properly inlined as vBulletin plugins. Not one of my better software releases.&lt;/p&gt;
&lt;p&gt;
Almost a month ago Drupal 4.7 was finally released, quite some things have changed between Drupal 4.6 and 4.7 so I decided we started vbDrupal 4.7 from scratch. Taking into account some mistakes that were made in the previous version of vbDrupal. One of the major goals in vbDrupal Next Generation (NG) was to keep the modifications to the original Drupal code as small as possible and try to keep it as much as possible compatible with all Drupal modules. In the previous vbDrupal version the user table was completely removed, this caused quite some issues with modules that relied on this table. With NG we decided to keep the user table and simply mirror the database between both user tables.&lt;/p&gt;
&lt;p&gt;
So far the modifications to Drupal's core are quite limited. However a couple of things needed to be replaced. First of all the bootstrapping of Drupal needed to be modified to initialize the vBulletin environment so that Drupal can reuse parts of it. As of Drupal 4.7 the bootstrapping is much cleaner allowing easier modifications. Pretty much all bootstrapping code has been moved to functions. In vBulletin this is not the case, therefor creating a global variable hell. The vBulletin initialization can't be started from within a function. Besides some little modifications here and there we also need to replace a few things. For example we completely replace the session code from Drupal to make use of the existing vBulletin session. And the user module needs to be modified a lot. Also the comment module needs some modifications here and there. It should be split into two parts, the default Drupal behavior or the functionality to use vBulletin for comments.&lt;/p&gt;
&lt;p&gt;
Another thing I'm keeping in mind while working on NG is to make sure it's possible to seperate Drupal and vBulletin in the future. I haven't tested it yet, but a bit of effort it should be fairly easy to replace vbDrupal with a stock Drupal. This wasn't possible with the current stable release. I'm also going to look into a Drupal -&gt; vbDrupal conversion script.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-114812863184586477?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.vbdrupal.org/' title='vbDrupal: Drupal + vBulletin'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/114812863184586477'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/114812863184586477'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2006/05/vbdrupal-drupal-vbulletin.html' title='vbDrupal: Drupal + vBulletin'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-113943963405716622</id><published>2006-02-08T23:53:00.000+01:00</published><updated>2007-01-14T13:47:16.598+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><title type='text'>Games with balls</title><content type='html'>&lt;p&gt;What is it with games with balls?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.garagegames.com/pg/product/view.php?id=15"&gt;Marble Blast&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ballance.org/"&gt;Ballance&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mobygames.com/game/dos/rollin"&gt;Rollin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.metaball.org"&gt;Metaball&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.op-games.com/games.html"&gt;Spheroid&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Games with balls simply marble^Wrock.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-113943963405716622?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/113943963405716622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/113943963405716622'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2006/02/games-with-balls.html' title='Games with balls'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-113826427367815156</id><published>2006-01-26T09:31:00.000+01:00</published><updated>2007-01-14T13:47:26.741+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='lba'/><title type='text'>LBA3 Campaign</title><content type='html'>&lt;p&gt;One of my all time favorite games is Little Big Adventure. The first game in the series was released in 1994, a sequel was released in 1997. The team behind it also planned for a 3rd release, but things didn't went as they hoped to. A lot of things happened, the team moved to various companies, split up, etc. The posibilities for an LBA3 were quite slim, even tho the whole team wanted to make the game.&lt;/p&gt;
&lt;p&gt;But &lt;a href="http://www.twinadv.net/news/view.php?id=13"&gt;recent developements&lt;/a&gt; gave new light to the posibility of LBA3. This got the fans from &lt;a href="http://www.magicball.net"&gt;the Magicball Network&lt;/a&gt; excited. They have started a &lt;a href="http://www.magicball.net/lba3_campaign"&gt;campaign&lt;/a&gt; to put LBA in the spotlight to give LBA3 a higher chance to be picked up by a developer.&lt;/p&gt;
&lt;p&gt;On a side node: Sebastien Vianny showed some activity on the &lt;a href="http://lbawin.magicball.net"&gt;LBAwin project&lt;/a&gt; again, version 0.8.1 might be close. I hope this will be a steady walk to a final release.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-113826427367815156?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://el-muerte.student.utwente.nl/lba/lba3_campaign' title='LBA3 Campaign'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/113826427367815156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/113826427367815156'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2006/01/lba3-campaign.html' title='LBA3 Campaign'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-113180665329531115</id><published>2005-11-12T15:44:00.000+01:00</published><updated>2007-01-14T13:47:46.675+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unreal'/><category scheme='http://www.blogger.com/atom/ns#' term='wiki'/><title type='text'>UnrealAdminWiki</title><content type='html'>&lt;p&gt;A while ago I finally finished some work on the wiki for the UnrealAdmin page. It's an modified version of the MediaWiki wiki engine (the same one as is used for WikiPedia). One of the more important things I modified was to hook up the user system with our main site that was powered by vBulletin. It's isn't as easy as it looks. Because MediaWiki is quite limited in the username format, only alphanum and _ are allowed. But vBulletin allows pretty much everything. This create a very annoying problem. How to hook up those users. I could imply convert the username to MediaWiki style, but this could create name clashing. So instead I ripped out the whole User namespace support and changed the way usernames where parsed. Username will now foward to the vBulletin profile page for users that exist. Some of the changes required modifing original files (which I don't like). So right now when a user type ~~~ (for a signature) it will be replace with a new tag [[profile:uid|Username]]. The username is ignored in further processing, it's only useful when editing a page and still being able to see the actual username. All links to the user namespace, [[user:Username]], will also be rewritten to an url to the vBulletin profile page (if the username can be found). Now this creates another problem, some usernames can contain characters so that [[user:Username]] doesn't work well. I fixed this by adding some magic: [[User:?|Username]] will work for these usernames and still allow me to look up the actual info.&lt;/p&gt;
&lt;p&gt;If you are creating a new site with MediaWiki (or any other wiki) and vBulletin simply limit the characters that people can use to alphanum and the underscore (or space). This will save you a lot of work.&lt;/p&gt;
&lt;p&gt;Besides the vbulletin integration I also made a couple of other extentions, pretty much all are &lt;a href="http://wiki.unrealadmin.org/UnrealAdminWiki:Extentions"&gt;available&lt;/a&gt;. While working on extentions I found out that MediaWiki doesn't really make it easy to develop extentions. Sometimes you need to change stuff deep inside some routines, or at least on certain places. Then you'll find out there are not enough hooks available to get to the right place. vBulletin 3.5 did it much better. For example simple things as adding ACL for pages isn't possible without modifyin the original code. But then again, MediaWiki is one of the nicer PHP powered wikis I've found so far, and their text syntax is nice too (much like the syntax UnrealWiki uses).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-113180665329531115?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://wiki.unrealadmin.org' title='UnrealAdminWiki'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/113180665329531115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/113180665329531115'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2005/11/unrealadminwiki.html' title='UnrealAdminWiki'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-112742544416113340</id><published>2005-09-22T23:44:00.000+02:00</published><updated>2007-01-14T13:49:02.879+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unreal'/><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='unrealscript'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>UsUnit</title><content type='html'>&lt;p&gt;There you've got it. The second more mature release of the UnrealScript Unit Testing Framework. A few minor changes to the real framework. More important is a working WebAdmin module.&lt;/p&gt;
&lt;p&gt;So far UsUnit contains some graceful code, some somehwta hacky code and some scary code. For the webadmin module I tried to create a better PlayInfo to HTML converter that the one that was already present. Actualy, the existing one couldn't be use in arbitrary places. My converter current supports just check and text types, but also arrays. My initial idea was to auto detect arrays, but because of a bug in PlayInfo's validation code for TEXT render types this can't be used. Instead you will have to use a CUSTOM render type which will figure out of it was suppost to be rendered by the TEXT type. For the TEXT type I also made a special case of numeric values. If the extra data contains range information it will be used to show a specialised text filed with a plus and min button and it will respond to certain key events (up, down, home, end, pgup and pgdown) to modify the value.&lt;/p&gt;
&lt;p&gt;An other tricky issue I had to solve was to add some logic to cope with possible invalid test classes. The test class configuration uses strings. It might happen that a single entry isn't a valid name for a class. But during configuration I don't want to remove those entries, or change them at all. Therefor I added a displacement array that keeps track of the array index differences between the two arrays.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wiki.beyondunreal.com/wiki/UsUnit"&gt;More information about UsUnit.&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-112742544416113340?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://wiki.beyondunreal.com/wiki/UsUnit' title='UsUnit'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/112742544416113340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/112742544416113340'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2005/09/usunit.html' title='UsUnit'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-112699230963890922</id><published>2005-09-17T23:11:00.000+02:00</published><updated>2007-01-14T13:48:34.974+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><title type='text'>&lt;a href="javascript:..."&gt; rant</title><content type='html'>&lt;p&gt;Sometimes you want to do some special dynamic stuff on a webpage, by means of javascript. Well apperently a lot of people on this world think that only anchors (you know, thos &lt;code&gt;&amp;lt;a href="..." /&amp;gt;&lt;/code&gt; thingies) are the thing for that. Well it's NOT. In fact it's the worst possible thing. Why? well, an anchor should contain a link to a new location. "javascript:..." is not a new location. Besides, since it's already used for dynamic stuff you should just use the "onclick" argument of pretty much every visible HTML tag. And now we ofcourse get: &lt;code&gt;&amp;lta href="#" onclick="..." /&amp;gt;&lt;/code&gt;. Well that's wrong too. Why? because you you create a link to nowhere. People (like me) often open a link in a new window\tab (middle mouse button is some browsers, or ctrl+click). Using a "#" or "javascript:" as link just breaks stuff like this and makes it annoying.&lt;/p&gt;
&lt;p&gt;What is the right thing? Well, there are two options:
&lt;ol&gt;
&lt;li&gt;For complete dynamic things that don't open new pages you should do something like &lt;code&gt;&amp;lt;span onclick="javascriptFunctionCall()" &amp;gt;your text&amp;lt;/span&amp;gt;&lt;/code&gt;, and maye make it more visible my means of CSS&lt;/li&gt;
&lt;li&gt;When you want to open a document in a special way (like a popup window with special properties) do something like this: &lt;code&gt;&amp;lt;a href="linkToTheDocument" onclick="javascriptCallToOpenWindow('linkToTheDocument'); return false;"&amp;gt;your text&amp;lt;/a&amp;gt;&lt;/code&gt;. This way when a user normally clicks on the link it will call that javascript function with the url. If the user clicks on that link with the middle mouse button (or ctrl+click) it will simply open that link in the default behavior of the browser. The "return false" in the onclick makes sure the default behavior doesn't happen in case of the onclick event. This method gives you the best of both worlds and doesn't annoy users that link to middle click or don't have a javascript enabled browser.
&lt;/li&gt;
&lt;/ol&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-112699230963890922?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/112699230963890922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/112699230963890922'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2005/09/rant.html' title='&amp;lt;a href=&quot;javascript:...&quot;&amp;gt; rant'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-112699086886280901</id><published>2005-09-17T23:00:00.000+02:00</published><updated>2007-01-14T13:48:52.113+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unreal'/><category scheme='http://www.blogger.com/atom/ns#' term='unrealscript'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>UnrealWiki Developer Journal 17-09-2005</title><content type='html'>&lt;p&gt;It has been a while since my last dev journal entry (again). First a little update about my last entry. I'm no longer actively working on a VisualStudio AddIn. The features I wanted to add required me to write a VisualStudio Package instead of just an AddIn. Writing a package isn't as simple as writing an AddIn. I hit an issue while implementing the basic framework that I haven't been able to resolve (devstudio gives me an error when I want to load a few things here and there). So that project has been put on ice.&lt;/p&gt;
&lt;p&gt;As for other projects, a while ago I continued some development of &lt;a href="http://wiki.beyondunreal.com/wiki/LibHTTP"&gt;LibHTTP&lt;/a&gt; and got a bit annoyed on my testing class. So I decided to make a testing framework based on unit testing. That's how &lt;a href="http://wiki.beyondunreal.com/wiki/UsUnit"&gt;UsUnit&lt;/a&gt; came to life. Because I wanted to include the source file and line where a check failed I had to write an UnrealScript PreProcessor, and I also wanted a few other features that a precompile could accomplish. And that's why I created &lt;a href="http://wiki.beyondunreal.com/wiki/UCPP"&gt;UCPP&lt;/a&gt;. Well, UCPP had some releases, and it quite mature and finished right now. So I've gone back to working on &lt;a href="http://wiki.beyondunreal.com/wiki/UsUnit"&gt;UsUnit&lt;/a&gt; some more. I've already made one release so far. But this was mostly to put out the first binary package for people to play with. You could consider it a beta release for now. I want to complete just a few more things for the next release, it can be summed up into: finish the webadmin module.&lt;/p&gt;

&lt;p&gt;Also, today barnEbiss contacted me if I was interested in helping him with a weapon mod. His idea is quite interesting. He wants to create a weapon that allows you to create a line of gasoline and set that one fire (the fire ofcourse will hurt people). It's quite an interesting weapon to create, with some interesting implementation issues to solve. So I will also be working on that project.&lt;/p&gt;
&lt;p&gt;Well I guess that's all I have to say about that for now.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-112699086886280901?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://wiki.beyondunreal.com/wiki/El_Muerte/Developer_Journal' title='UnrealWiki Developer Journal 17-09-2005'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/112699086886280901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/112699086886280901'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2005/09/unrealwiki-developer-journal-17-09.html' title='UnrealWiki Developer Journal 17-09-2005'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-112680413999435109</id><published>2005-09-15T19:08:00.000+02:00</published><updated>2007-01-14T13:49:52.212+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dns'/><title type='text'>R.I.P. Free PowerDNS express</title><content type='html'>&lt;p&gt;&lt;a href="http://express.powerdns.com/"&gt;PowerDNS express&lt;/a&gt; is no longer free. It used to be completely free for pretty much unlimited control over 5 domain names. It's a great service and the interface to manage the DNS entries was clean and simple enough. But because of various reason they can no longer provide the service for free. Too bad, I really liked it. Since my registrar also provides DNS services (my previous registrar didn't that's why I used powerdns) without extra cost I've switched to that one. Thier interface isn't as nice as the one provided by powerdns, but it doesn't cost me at least $8 a year. So here powerdns, some free advertisment in return for those years of free service.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-112680413999435109?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://express.powerdns.com/' title='R.I.P. Free PowerDNS express'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/112680413999435109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/112680413999435109'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2005/09/rip-free-powerdns-express.html' title='R.I.P. Free PowerDNS express'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-112401645944554282</id><published>2005-08-14T12:47:00.000+02:00</published><updated>2007-01-14T13:51:03.090+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='games'/><category scheme='http://www.blogger.com/atom/ns#' term='lba'/><title type='text'>LbaWin - Little Big Adventure</title><content type='html'>&lt;p&gt;I'm a big LBA fan, have been since I first got the game (june 1995). I completed the game so many times I've lost count. After a certain point it's no longer fun to play the game because you know every little thing in the game. So I stopped with that. After a while one of the team members that made the game poped up with a &lt;a href="http://lbawin.akoonet.com/"&gt;windows port of the game (LbaWin)&lt;/a&gt;. Since he was doing it by himself he could use some beta testers. I decided to help him out (just like quite some others) and started to play the game again, but this time to find bugs. I did that for quite some time. But before the development of LbaWin came to a stop I already got sidetracked from playing the game. So it has been quite some time since the last beta release of LbaWin. And for some reason I wanted to play LBA once more. Installed the game and started playing, only took me a few hours to complete the game once more (in all it's glory). I still know exactly what to do. The game just looks so small when you know what to do and where to go. But the fact remains that it actually is still quite a large game if you compare it to the time needed to complete other games. I mean, the first time I played LBA it took me quite some hours to finish it. I've played other games that I completed the first time in just a couple of hours. Ofcourse you could strech the game, but that might just make it boring. LBA is still a awesome game, I just want something new to explore. (note: stil have to replay LBA2, haven't done that in some time now)&lt;/p&gt;

&lt;p&gt;Coming back to the point of something new, LBA has quite some places that could be expanded (made larger). And there are quite some places where more world could be placed between some scenes. It would be great if these things could be expanded. And maybe even add some side quests.&lt;/p&gt;

&lt;p&gt;Some people in the &lt;a href="http://forum.magicball.net"&gt;LBA community&lt;/a&gt; continued work I started years ago and already made some tools to view and even edit the scenes in the game. Additional tools to compile story code and stuff like that are also being worked on.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-112401645944554282?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://lbawin.akoonet.com/' title='LbaWin - Little Big Adventure'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/112401645944554282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/112401645944554282'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2005/08/lbawin-little-big-adventure.html' title='LbaWin - Little Big Adventure'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-112298776967687431</id><published>2005-08-02T15:02:00.000+02:00</published><updated>2007-01-14T13:51:17.560+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unreal'/><category scheme='http://www.blogger.com/atom/ns#' term='wiki'/><title type='text'>Readonly UnrealWiki mirror</title><content type='html'>&lt;a href="http://www.beyondunreal.com"&gt;BeyondUnreal&lt;/a&gt; has been offline for a couple of days now. And because the &lt;a href="http://wiki.beyondunreal.com"&gt;UnrealWiki&lt;/a&gt; is hosted on the same machine so is that site. It kinda sucks, because now nobody can get any information from that site, unless they have a copy of the offline unrealwiki. I've created a &lt;a href="http://unreal.student.utwente.nl/wiki/"&gt;UnrealWiki mirror&lt;/a&gt; using the offline copy. It's not perfect but at least you can still view all documents. The offline copy isn't great to use as a mirror because the case of the characters in the page names have been lost and subpages don't exist on-disk. So a direct link back to the original wiki page isn't possible (unless when you use the link at the bottom).
It would be nicer if there was some way of distributing the unrealwiki over multiple servers, but I guess the wiki engine must be designed for that or else you would get annoying edit conflicts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-112298776967687431?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://unreal.student.utwente.nl/wiki/' title='Readonly UnrealWiki mirror'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/112298776967687431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/112298776967687431'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2005/08/readonly-unrealwiki-mirror.html' title='Readonly UnrealWiki mirror'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-111882102159282038</id><published>2005-06-15T09:37:00.000+02:00</published><updated>2007-01-14T13:51:47.538+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unreal'/><category scheme='http://www.blogger.com/atom/ns#' term='unit testing'/><category scheme='http://www.blogger.com/atom/ns#' term='preprocessor'/><category scheme='http://www.blogger.com/atom/ns#' term='unrealscript'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>UsUnit + UCPP</title><content type='html'>&lt;p&gt;Well I laid my plans for a VS.Net Package aside for a while, kept getting annoying errors outside my source code. I'm been working on a UnrealScript Unit Testing Framework, somewhat similar to &lt;a href="http://dunit.sf.net"&gt;DUnit&lt;/a&gt; and &lt;a href="http://www.JUnit.org"&gt;JUnit&lt;/a&gt;. It's called UsUnit. It's almost done, but UnrealScript doesn't allow me to do certain cool things (like point out what check() failed). For this I started to create a PreProcessor for UnrealScript: &lt;a href="http://wiki.beyondunreal.com/wiki/UCPP"&gt;UCPP&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;UCPP stands for UnrealScript (Class|Code) PreProcessor, the extention for UnrealScript classes is .uc so therefor UCPP, I'm not sure what the 'c' stands for. So far I've implemented quite some useful features:
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;#define NAME VALUE&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;#if EXPR (#else) #endif&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;UpperCase words in the code are replaced with thier definition according to a previous &lt;code&gt;#define&lt;/code&gt; statement&lt;/li&gt;
&lt;/ul&gt;
The expression in the &lt;code&gt;#if&lt;/code&gt; is quite extensive, simple boolean evaluations and some basic math functions.&lt;/p&gt;

&lt;p&gt;But my current problem is with defining function macros:
&lt;pre&gt;
#define DUMMY(a,b) DoSomething(a, b)

DUMMY("bla", 12345) -&gt; DoSomething("bla", 12345);
&lt;/pre&gt;
I'm having problems to create a nice way to implement this feature. I don't want the definition list to be depended on a parser, but how do I process the definition to replace the arguments. &lt;code&gt;a&lt;/code&gt; should be replace, but &lt;code&gt;aa&lt;/code&gt; or &lt;code&gt;"a"&lt;/code&gt; shouldn't be replaced. A simple replace text routine won't work.
I could write an event&lt;br /&gt;
&lt;code&gt;OnParseArguments(args: array of string; func: string; var OffsetList: TListOfSomeSort)&lt;/code&gt;
&lt;dl&gt;
&lt;dt&gt;args&lt;/dt&gt;
&lt;dd&gt;the argument names as specified in the name; this is simple to parse&lt;/dd&gt;
&lt;dt&gt;func&lt;/dt&gt;
&lt;dd&gt;the function part of the definition&lt;/dd&gt;
&lt;dt&gt;OffsetList&lt;/dt&gt;
&lt;dd&gt;Will contain the positions of the of the argument names in the function string; length isn't required since it's known.&lt;/dd&gt;
&lt;/dl&gt;
The user will then have to assign a function to this event that will do the real parsing. However, this doesn't solve the magic entities in the macro definition (e.g. &lt;code&gt;#&lt;/code&gt; and &lt;code&gt;##&lt;/code&gt;).But I guess that can be hacked in to the offset list in someway. Or I can add &lt;code&gt;self&lt;/code&gt; and give direct access to the object that is actually being parsed.&lt;br /&gt;
The function definition only needs to be parsed the first time it's used. I can throw an exception when a definition can not be parsed because the event is not assigned.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-111882102159282038?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/111882102159282038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/111882102159282038'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2005/06/usunit-ucpp.html' title='UsUnit + UCPP'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-111427582631954974</id><published>2005-04-23T18:55:00.000+02:00</published><updated>2007-01-14T13:52:05.820+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visualstudio'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>VisualStudio.Net Add-in written in Delphi, part 2</title><content type='html'>&lt;p&gt;Ok, adding a new tool window wasn't hard at all, actually it's quite simple.&lt;/p&gt;
&lt;p&gt;Just create an ActiveX form, get it's GUID from the type library window &lt;code&gt;View -&gt; Type Library&lt;/code&gt; and call the following functions:&lt;br /&gt;
&lt;code&gt;
myToolWindow = DTE(Application).Windows.CreateToolWindow(AddInInstance, 'your_library.activex_form', 'Some Title', '{THE GUID}', dummyIDsipatch);
&lt;/code&gt;&lt;br /&gt;
The form is just like any other form in Delphi, you might want to set the form's &lt;code&gt;AxBorderStyle&lt;/code&gt; to &lt;code&gt;efbNone&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;One ting, when creating an activex form Delphi automatically changes the target extention to &lt;code&gt;ocx&lt;/code&gt;, I didn't like that and changed it back to the normal &lt;code&gt;dll&lt;/code&gt;. Also, don't forget to register the "ActiveX Server" when you added a new COM object, otherwise the GUID won't be registered in the registry.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-111427582631954974?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/111427582631954974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/111427582631954974'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2005/04/visualstudionet-add-in-written-in_23.html' title='VisualStudio.Net Add-in written in Delphi, part 2'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-111418933140042385</id><published>2005-04-22T18:38:00.000+02:00</published><updated>2007-01-14T13:52:16.920+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visualstudio'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>VisualStudio.Net Add-in written in Delphi</title><content type='html'>&lt;p&gt;I'm planning to create a spin-off of UnCodeX (again), this is going to be an add-in for VisualStudio.Net. Right now Epic has a simple tool that gives a class and package tree, but compared to UnCodeX is kinda inferior. Since I have a lot of base code it would be easy to create an add-in right?&lt;/p&gt;
&lt;p&gt;Well not completely, first the add-in creation is done via an wizard in VisualStudio, well great, but how would I do the same in Delphi?. The add-ins are all COM based, so I will have to import a type-library somewhere. The VS.Net wizard does all the base work, so I have a few pointers, like what interfaces I should implement. But I have no idea what type-libraries to import. After a long search and some pointers here and there I've found out how to create a Add-in for VS.Net in Delphi.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Before you do anything you will first have to import and &lt;em&gt;install&lt;/em&gt; the type libraries (to make things easier in the next few steps).
&lt;ol&gt;
&lt;li&gt;Import and install the type library: &lt;code&gt;Microsoft Add-Iin Desginer&lt;/code&gt;, the actual file is called: &lt;code&gt;MSADDNDR.DLL&lt;/code&gt;.
&lt;li&gt;Import and install the type library: &lt;code&gt;Microsoft Development Environment 7.0&lt;/code&gt;, the actual file is called: &lt;code&gt;dte.olb&lt;/code&gt;.
&lt;/ol&gt;
Make sure you installed them in a package.&lt;/li&gt;
&lt;li&gt;Now create a new ActiveX library; nothing major here, you just need it.&lt;/li&gt;
&lt;li&gt;Now in your library create a new ActiveX Automation Object.
&lt;ol&gt;&lt;li&gt;Enter any name you like; different from your library name.&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;You will now see the Type Library tool, select your library in the tree and open the &lt;code&gt;Uses&lt;/code&gt; tab.
&lt;ol&gt;
&lt;li&gt;Right-click the list and "show all type libraries"&lt;/li&gt;
&lt;li&gt;Now select the same type libraries you previously installed.&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;Now select the Automation Object you created (it's the one not prefixed with an &lt;code&gt;I&lt;/code&gt;)
&lt;ol&gt;
&lt;li&gt;Select the &lt;code&gt;Implements&lt;/code&gt; tab&lt;/li&gt;
&lt;li&gt;Right click and add &lt;code&gt;_IDTExtensibility2&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Right click and add &lt;code&gt;AddIn&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;If either one of these are not available you messed up in the previous steps.&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;li&gt;Close the type library tool window.&lt;/li&gt;
&lt;li&gt;Save the new unit (Save all files i the project)&lt;/li&gt;
&lt;li&gt;Now add the following to the &lt;code&gt;interface&lt;/code&gt; uses list: &lt;code&gt;, EnvDTE_TLB, AddInDesignerObjects_TLB&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;If everything is ok you should be able to compile the library.&lt;/li&gt;
&lt;li&gt;After the compile is done you should register the library via the menu &lt;code&gt;Run -&gt; Register ActiveX Server&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Now you will have to add an entry to the registry so the add-in will show up in the Add-in manager. Add a new key to &lt;code&gt;HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\7.1\Addins\&lt;/code&gt;. The key name should be: &lt;code&gt;&amp;lt;library name without extention&amp;gt;.&amp;lt;automation object name&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;The add-in should now be visible in the add-in manager&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you want to change the descript and version information in a later stage just open the &lt;code&gt;.tlb&lt;/code&gt; file in Delphi. This will pop-up the type library tool.&lt;/p&gt;
&lt;p&gt;These are just the basics for a add-in, how the rest works is still a mystery, but I hope to solve it soon and report it here. Next thing might be how to add your own tool window, I assume this can done via an ActiveForm. The tool windows are refered to via the GUID in VisualStudio.NET, so it would be some more ActiveX\COM stuff.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-111418933140042385?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/111418933140042385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/111418933140042385'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2005/04/visualstudionet-add-in-written-in.html' title='VisualStudio.Net Add-in written in Delphi'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-111337884783195355</id><published>2005-04-13T09:40:00.000+02:00</published><updated>2007-01-14T13:52:28.708+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Delphi 6 + build configuration</title><content type='html'>&lt;p&gt;Delphi 6 misses (at least) one important feature: being able to create\manage build configurations. For my UnCodeX project I want two build configurations: debug (or development) and release. For the simple reason that the debug builds will include debugger information so I can use some tools to find memory leaks and what not. The release builds ofcourse should not contain the debug info and should be optimized. But Delphi 6 was no way to manage the project options\settings. You can have various "desktop" configurations, really don't see the use of that, but not build configurations. So far I've only found one IDE expert that helps me a little bit: &lt;a href="http://www.gexperts.org"&gt;GExperts&lt;/a&gt;. However, the way I have to use this isn't great at all, the overview of te configuration is completely lost and it doesn't store the alternate configurations on the project. This way I can't include it with the CVS and use the alternate configurations on other machines. This sucks a lot.&lt;/p&gt;
&lt;p&gt;I don't know if newer Delphi releases do support management of alternate build cofigurations, I don't have the money to upgrade to a newer Delphi release anyway. Delphi 6 still works well enough for me, except for a couple of annoyances.&lt;/p&gt;
&lt;p&gt;If anyone knows of an IDE expert, or maybe an other method, that makes this easier please let me know. Important to note that this tool has to be free (as in beer), or at least with a small price tag, because I don't want to limit people in being able to work on my open source uncodex project.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-111337884783195355?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/111337884783195355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/111337884783195355'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2005/04/delphi-6-build-configuration.html' title='Delphi 6 + build configuration'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-111286816107948429</id><published>2005-04-07T12:02:00.000+02:00</published><updated>2007-01-14T13:53:25.724+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unreal'/><category scheme='http://www.blogger.com/atom/ns#' term='uncodex'/><category scheme='http://www.blogger.com/atom/ns#' term='unrealscript'/><title type='text'>UnCodeX releases</title><content type='html'>&lt;p&gt;I think I need to make my release schedule for UnCodeX a bit shorter. It has been almost 1 year since the last stable release. And I've only had a few major stable releases since the beginning. So right now, I'm going to finish all tasks that have a priority of 7 or higher and then I'll release a stable version.&lt;br /&gt;
Ofcourse I also need to update quite some documentation, specially the PascalScript part requires a lot of documentation work. I'm not really looking forward to do work on that part of the documentation. But there's not much choise.&lt;/p&gt;
&lt;p&gt;I hope to release a new version before the last one is a year old, I think two weeks, but maybe a little more.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-111286816107948429?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://sourceforge.net/pm/?group_id=120421' title='UnCodeX releases'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/111286816107948429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/111286816107948429'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2005/04/uncodex-releases.html' title='UnCodeX releases'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-111286552256279297</id><published>2005-04-07T11:01:00.000+02:00</published><updated>2007-01-14T13:53:14.886+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='uncodex'/><category scheme='http://www.blogger.com/atom/ns#' term='pascal'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='opensource'/><title type='text'>Open Source, it's nice.</title><content type='html'>&lt;p&gt;I'm not going to stay Open Source is the way to go, or that everybody must switch to open source (altough it would be very nice). &lt;/p&gt;
&lt;p&gt;
I'm working on a fully Open Source programms (&lt;a href="http://uncodex.elmuerte.com"&gt;UnCodeX&lt;/a&gt;), and while working on it I sometimes use other open source tools (&lt;a href="http://www.freepascal.org"&gt;FreePascal compiler&lt;/a&gt;) and components (&lt;a href="http://www.remobjects.com/?ps"&gt;RemObjects' PascalScript&lt;/a&gt;). Both the examples are open source (and free software, in a way). &lt;br /&gt;
PascalScript didn't compile for FreePascal out of the box, but because the source was available I could apply the changes required to make it compile. I mailed my changes to the developers and they applied them to their SubVersion repository. Now everybody can enjoy PascalScript in FreePascal.&lt;br /&gt;
As for FreePascal, the ini file classes provided by Borland in Delphi 6 didn't meet up to some of my requirements, and because of the &lt;code&gt;private&lt;/code&gt; vs &lt;code&gt;protected&lt;/code&gt; shit I could override some functions. FreePascal provided similar classes, and because the license of FreePascal is compatible with the license of UnCodeX (both are &lt;a href="http://www.gnu.org/licenses/licenses.html#LGPL"&gt;LGPL&lt;/a&gt;) I could use the FreePascal implementation and make my adjustments. While I was making some adjustments I discovered a few bugs in their implementation (&lt;a href="http://v.mahon.free.fr/pro/freeware/memcheck"&gt;the Delphi memory leak detection script by Vincent Mahon&lt;/a&gt; helped me to find one of them). I reported the bugs I found, and the fixes for it, and they have been applied to the standard distribution of FreePascal.&lt;/p&gt;
&lt;p&gt;So, for at least two projects I found some issues, was able to fix them and contributed the fixes back to the creators. They helped me, I helped them in return. Sure, there are a lot of people that don't help out. But why shouldn't you? What would be the reason not to help others out that helped you at the first place. Please that report bugs are great, people that report bugs with correct patches are just awesome. And you can't create patches when you don't have source access.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-111286552256279297?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/111286552256279297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/111286552256279297'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2005/04/open-source-its-nice.html' title='Open Source, it&apos;s nice.'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-110362428464201199</id><published>2004-12-21T10:07:00.000+01:00</published><updated>2007-01-14T13:53:50.429+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Private vs Protected</title><content type='html'>&lt;p&gt;
Pretty much every object oriented programming language let's you set the visibility of object members. Usually it defaults to &lt;code&gt;public&lt;/code&gt;. That means everybody can access that member. Ofcourse often you don't want to other objects to access certain parts of your object. This is where &lt;code&gt;private&lt;/code&gt; or &lt;code&gt;protected&lt;/code&gt; come in to play. 
&lt;/p&gt;

&lt;h3&gt;Limiting members access&lt;/h3&gt;
&lt;p&gt;
An object should only expose members that really need to be accessed from the outside. All other members should be "hidden". It's not just a security issue but also creates nicer foot prints to work with the code. For example IDEs only have to list the public accessable functions in their "code insight" (or whatever you want to call it) listing. The public members are the members to work with, it also makes it easier for you to find what entry points you need to use on an object (in case it's not your code).
&lt;/p&gt;

&lt;h4&gt;Private&lt;/h4&gt;
&lt;p&gt;
The actual outcome of this depends on the language. But usually it comes down that only the objects within the same scope can access this member, subclasses do no have access to this member. What the scope is depends on the language used, often the scope is just the object itself. In ObjectPascal however the scope is the unit file (the source code).
&lt;/p&gt;
&lt;p&gt;
One of the basics of OOP is that you can extend an object and add additional functionality. And usually you can only add additional functionlity outside of the "scope" because you can either not touch the original source or you simply shouldn't.&lt;br /&gt;
Using &lt;code&gt;private&lt;/code&gt; to protect members of an object will prevent an subclass to work with these members. This is often needed.
&lt;/p&gt;

&lt;h4&gt;Protected&lt;/h4&gt;
&lt;p&gt;
&lt;code&gt;Protected&lt;/code&gt; is similar to &lt;code&gt;private&lt;/code&gt; except that subclasses can always access these members no matter if they are in the same scope.
&lt;/p&gt;
&lt;p&gt;
Making members protected opens a security issue for those members. Since a subclass has access to these members it's possible to work around security measures.
&lt;/p&gt;

&lt;h3&gt;How to choose&lt;/h3&gt;
&lt;p&gt;
I'm sure somebody already though about that, however I am not aware of a document that introduces a formal method for member accessability. If such document would exist it would be very technical for most programmers to understand, or at least it would way to time consuming. That doesn't mean it's not wise to read it and use it's methods.
&lt;/p&gt;
&lt;p&gt;
Here's a simple classification scheme I think should work well enough for most people.
&lt;/p&gt;

&lt;p&gt;
&lt;ol&gt;
 &lt;li&gt;Is the member valuable to access from other classes? &lt;sup&gt;(1)&lt;/sup&gt;&lt;br /&gt;
 Yes -&gt; go to 2; No -&gt; go to 3.&lt;/li&gt;
 &lt;li&gt;Is it a variable?&lt;br /&gt;
 Yes -&gt; go to 2.1; No (it's a function) -&gt; &lt;code&gt;public&lt;/code&gt;
 &lt;ol&gt;
  &lt;li&gt;Should this variable be read-only? &lt;sup&gt;(2)&lt;/sup&gt;&lt;br /&gt;
  Yes -&gt; create a public accessor function and go to 3; No -&gt; &lt;code&gt;public&lt;/code&gt;&lt;/li&gt;
 &lt;/ol&gt;&lt;/li&gt;
 &lt;li&gt;Does the member contain\give access to security sensitive information? &lt;sup&gt;(3)&lt;/sup&gt;&lt;br /&gt;
 Yes -&gt; go to 3.1; No -&gt; &lt;code&gt;protected&lt;/code&gt;
 &lt;ol&gt;
  &lt;li&gt;Is it a variable?&lt;br /&gt;
  Yes -&gt; go to 3.1.1; No -&gt; go to 3.2
  &lt;ol&gt;
   &lt;li&gt;Should a subclass be able to write this member?&lt;br /&gt;
   Yes -&gt; go to 3.3; No -&gt; go to 3.1.2
   &lt;ol&gt;
   &lt;li&gt;Should a subclass be able to read this member?&lt;br /&gt;
   Yes -&gt; &lt;code&gt;private&lt;/code&gt; and create a &lt;code&gt;protected&lt;/code&gt; accessor method; No -&gt; &lt;code&gt;private&lt;/code&gt;&lt;/li&gt;
  &lt;/ol&gt;&lt;/li&gt;
  &lt;li&gt;Does this member give readonly access?&lt;br /&gt;
  Yes -&gt; go to 3.2.1; No -&gt; go to 3.3
  &lt;ol&gt;
   &lt;li&gt;May a subclass read this data? &lt;sup&gt;(4)&lt;/sup&gt;&lt;br /&gt;
   Yes -&gt; &lt;code&gt;protected&lt;/code&gt;; No -&gt; &lt;code&gt;private&lt;/code&gt;&lt;/li&gt;
  &lt;/ol&gt;&lt;/li&gt;
  &lt;li&gt;Does the new value need to be validated? &lt;sup&gt;(5)&lt;/sup&gt;&lt;br /&gt;
   Yes -&gt; &lt;code&gt;private&lt;/code&gt; and create a &lt;code&gt;protected&lt;/code&gt; method that will validate and set the &lt;code&gt;private&lt;/code&gt; method; No -&gt; &lt;code&gt;protected&lt;/code&gt;&lt;/li&gt;
  &lt;/ol&gt;&lt;/li&gt;
 &lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;
Only in a few cases the member will become and isolated private member (e.g. unable to read\write to the member).
&lt;/p&gt;

&lt;p&gt;
&lt;dl&gt;
 &lt;dt&gt;1.&lt;/dt&gt;
 &lt;dd&gt;This is quite a difficult question, is the member for internal use only? When is something for internal use only? Things like buffers and pointers are usually for internal use only. Maybe somebody else can shed some light on this question.&lt;/dd&gt;

 &lt;dt&gt;2.&lt;/dt&gt;
 &lt;dd&gt;Very often you want to be able to give other classes access to certain variables, like the current position of a parser, but you don't want them to be able to modify the value. For this you should create an accessor function &lt;code&gt;getMyVariable()&lt;/code&gt; that will simply return the current value of the variable.&lt;/dd&gt;

 &lt;dt&gt;3.&lt;/dt&gt;
 &lt;dd&gt;When is something security sensitive? Things like keys and passwords and sensitive. But it's not limited to authentication related information, sometimes things like an URI could be sensitive. Things that might need to be validated before they are used are security sensitive. For example in games you might want to give a user the freedom so configure some client side things. However, these things could be abused for cheating. So the settings need to be validated before they are set.&lt;/dd&gt;

 &lt;dt&gt;4.&lt;/dt&gt;
 &lt;dd&gt;In only a very few cases you want to prevent a subclass from reading certain variables. It's pretty much only the case for keys and passwords. Even though a subclass might have set the value via an other method it still doesn't mean it should be able to read a password.&lt;/dd&gt;

 &lt;dt&gt;5.&lt;/dt&gt;
 &lt;dd&gt;In some cases you want to give a subclass the right to set a new value, but you also want to validate the new value to meet certain security measures. For this you need to make sure the subclass has to use your method to set the new value and not be able to override it with it's own faulty method. Most languages provide the means to do this (UnrealScript allows you to mark a function as final, thus preventing it to be overwritten by a subclass). There is a trick to do this. Simply make the member &lt;code&gt;private&lt;/code&gt; so it can't be accessed from the subclass and create protected accessor methods (get and set). In your set method you will validate the new value and pass it to the protected member. This way subclasses will have to use the parent set method in order to write the new value.
 &lt;pre&gt;
 //pseudo code

 var private string SensitiveInfo;

 protected function bool SetSensitiveInfo(string newValue)
 {
  if (newValue doesn't meet constraints) return false;
  SensitiveInfo = newValue;
  return true;
 }

 protected function string GetSensitiveInfo()
 {
  return SensitiveInfo;
 }
 &lt;/pre&gt;
 &lt;/dd&gt;
&lt;/dl&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-110362428464201199?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/110362428464201199'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/110362428464201199'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2004/12/private-vs-protected.html' title='Private vs Protected'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-109776622421799310</id><published>2004-10-14T16:37:00.000+02:00</published><updated>2007-01-14T13:54:02.508+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rant'/><category scheme='http://www.blogger.com/atom/ns#' term='web design'/><title type='text'>MSIE and the &lt;button&gt; tag</title><content type='html'>MSIE doesn't really support the &amp;lt;button&amp;gt; as defined in the HTML 4 specification. Sure it does render a button, and something happens when you push on it. But it doesn't work as specified.&lt;br /&gt;

&lt;h3&gt;Why use &amp;lt;button&amp;gt; instead of a &amp;lt;input type="submit" ... /&amp;gt;?&lt;/h3&gt;
Simple, &amp;lt;button&amp;gt; gives you more power. For example, with the &amp;lt;button&amp;gt; tag the text on the button is different that the value submitted when the button is clicked. this is very usefull when you want to use a nicer description and don't want to use ugly value checks in your backend script.&lt;br /&gt;
&lt;code&gt;&amp;lt;input type="submit" name="mybutton" value="add this new entry" /&amp;gt;&lt;/code&gt; displays:&lt;br /&gt;
&lt;input type="submit" name="mybutton" value="add this new entry" /&gt;&lt;br /&gt;
When submitted the following details will be received by the back end script:
&lt;code&gt;mybutton = "add this new entry"&lt;/code&gt;&lt;br /&gt;
Sure it works when you only have only one button. But what if you have two buttons:&lt;br /&gt;
&lt;input type="submit" name="action" value="add as child" /&gt;&lt;input type="submit" name="action" value="add as sibling" /&gt;&lt;br /&gt;
Now you will have to check the value of the &lt;code&gt;action&lt;/code&gt; variable. It would be much nicer in the code if that value would be &lt;code&gt;addChild&lt;/code&gt; or &lt;code&gt;addSibling&lt;/code&gt; (also better for localization). But this is not possible with the &amp;lt;input&gt; element. &lt;br /&gt;
That's where the &amp;lt;button&amp;gt; tag is usefull:&lt;br /&gt;
&lt;code&gt;&amp;lt;button name="action" value="addChild" /&gt;add as child&amp;lt;button&gt;&amp;lt;/button name="action" value="addSibling" /&gt;add as sibling&amp;lt;/button&gt;&lt;/code&gt; produces:&lt;br /&gt;
&lt;button name="action" value="addChild" /&gt;add as child&lt;/button&gt;&lt;button name="action" value="addCSinbling" /&gt;add as sibling&lt;/button&gt;&lt;br /&gt;
Depending on which button is pressed the value of &lt;code&gt;action&lt;/code&gt; would be either &lt;code&gt;addChild&lt;/code&gt; or &lt;code&gt;addSibling&lt;/code&gt; while the text on the button is descriptive.&lt;br /&gt;
Another thing about the &amp;lt;button&amp;gt; is, that it's easier to use for style sheets, you don't have to set a special CSS class for all buttons (since not all Browsers support &lt;code&gt;Input[type="submit"]&lt;/code&gt; elements in CSS).&lt;br /&gt;

&lt;h3&gt;But MSIE is broken&lt;/h3&gt;
The &amp;lt;button&amp;gt; in MSIE doesn't work as it should. Instead of sending the value of the &lt;code&gt;value&lt;/code&gt; property, it will send the value of the &lt;code&gt;innerText&lt;/code&gt; (note: this is documented on MSDN), in other words, it will just behave like a normal &amp;lt;input&gt; . &lt;br /&gt;
Another thing is that MSIE will include all &amp;lt;button&amp;gt; elements in the submit data, not just the one of the pressed button. So you would get something like: &lt;code&gt;?action=addChild&amp;amp;action=addSibling&lt;/code&gt;. This makes the button element complete useless since you don't know what button was pressed. This incorrect behavior isn't even documented on the MSDN.&lt;br /&gt;

&lt;h3&gt;A ugly workaround&lt;/h3&gt;
I came up with an ugly workaround for just MSIE. It uses some javascript.
Instead of creating a submit button I will create a normal button:
&lt;code&gt;&amp;lt;button type="button" onclick="onButtonClick(this, 'action', 'addChild')"&gt;Add as a child&lt;/button&gt;&lt;/code&gt;&lt;br /&gt;
Note, no value and no name have been set, this is very important.
When this button is clicked it will call the following JavaScript code:
&lt;pre&gt;
function onButtonClick(btn, name, value)
{
 btn.name = name;
 btn.value = value;
 btn.form.submit();
}
&lt;/pre&gt;
This will simply set the name of the button pressed to the desired name and set the value. After which it will submit the form.&lt;br /&gt;
Now when the button is pressed the text on the button will change to the desired value (yep, that's also incorrect behavior). But the form is submitted at once so it doesn't hurt a lot.&lt;br /&gt;
This bug exists in all MSIE versions that support the &amp;lt;button&gt; tag, up to MSIE 6 sp2.&lt;br /&gt;
If everybody would switch to browsers that did support the standards as defined (like &lt;a href="http://www.mozilla.org"&gt;Mozilla&lt;/a&gt;, &lt;a href="http://www.getfirefox.com"&gt;Firefox&lt;/a&gt;, or Opera) it wouldn't be a problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-109776622421799310?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/109776622421799310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/109776622421799310'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2004/10/msie-and-tag.html' title='MSIE and the &amp;lt;button&amp;gt; tag'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-109723801316053443</id><published>2004-10-08T14:18:00.000+02:00</published><updated>2007-01-14T13:54:25.404+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unreal'/><category scheme='http://www.blogger.com/atom/ns#' term='uncodex'/><category scheme='http://www.blogger.com/atom/ns#' term='unrealscript'/><title type='text'>UnrealWiki Dev Journal 27-09-2004</title><content type='html'>&lt;a href="http://wiki.beyondunreal.com/wiki/UnCodeX"&gt;UnCodeX&lt;/a&gt; Tribes:V ponderings:

&lt;h3&gt;Interfaces&lt;/h3&gt;
Currently, there's only one root for the class tree. I'm going to
add a new root item "Interfaces" that contains all interfaces.&lt;br /&gt;
&lt;br /&gt;
Interfaces don't have parents, so this would be the best choice.&lt;br /&gt;
Things to think about:
&lt;ul&gt;&lt;li&gt;auto expand Object works differently with more than 1 root node&lt;/li&gt;
&lt;li&gt;no create subclass menu item for interfaces&lt;/li&gt;&lt;/ul&gt;

&lt;h3&gt;Defines&lt;/h3&gt;
I may have to redesign my complete parsing system. Maybe have to
move it to a single pass parser. Right now I first construct the class
tree, after that I analyse all the classes. This might not be possible
anymore because of the #if ... #endif macros.&lt;br /&gt;
I'm pretty sure it's not possible to have a different class name,
however, it might be possible that the parent class can be changed
using these macros. So I would have to construct the tree and analyse
the packages at the same time so all #defines are catched. The best
method might be to mimick the way the unrealscript compiler does it:
per package. This ofcourse would re-introduce the package order
mechanism. This would be the nicest solution.&lt;br /&gt;
&lt;br /&gt;
The other solution would be to extend the package scanner to parse
through the whole source file every time just to capture the #define,
#if...#endif macros.&lt;br /&gt;
Another thing I need to know is if the #define macros are system
wide, or only for the subclasses. Most #defines are afaik in the Object
class, so that would automatically make them system wide. &lt;br /&gt;
Also I would need to implement a expression evaluator for the #if macro.

&lt;h3&gt;Imports&lt;/h3&gt;
Depending on what the import directive does I might have to
implement this too. Mostlikely it's just identical to the #import
macro, which will simply import type declarations. In this case I don't
need to change anything (except to ingore the import lines).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-109723801316053443?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/109723801316053443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/109723801316053443'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2004/10/unrealwiki-dev-journal-27-09-2004.html' title='UnrealWiki Dev Journal 27-09-2004'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-109603334045931973</id><published>2004-09-24T15:41:00.000+02:00</published><updated>2007-01-14T13:54:53.638+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unreal'/><category scheme='http://www.blogger.com/atom/ns#' term='libhttp'/><category scheme='http://www.blogger.com/atom/ns#' term='unrealscript'/><title type='text'>UnrealWiki Dev Journal 24-09-2004</title><content type='html'>LibHTTP 3 is getting pretty solid. I've added a test class to perform various requests. I already found a few minor bugs using that test class, bugs that have been in there for quite some time.&lt;br /&gt;
The build is currently 133KiB, I'm not going to strip source from the package because of the simple reason that you can no longer use the package during compile time, only run-time. Stripping the source would reduce the package to 54KiB.&lt;br /&gt;
I've been thinking about creating a better source stripper. It doesn't strip the complete source, only the function and state body. The result would be that the TextBuffer (that usually contains the source code) only contains the declarations. This should be enough to use the package for compiling, and have a minimal size. I would add a comment to the top of the TextBuffer explaining that the code was removed to reduce size and stuff. However, creating such a tool isn't every easy. You can't simply replace the TextBuffer with a new one, you will have to update all the offsets in the file. Note that this tool is not for code protection, because you can still decompile the package. It's just to reduce the size.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-109603334045931973?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/109603334045931973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/109603334045931973'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2004/09/unrealwiki-dev-journal-24-09-2004.html' title='UnrealWiki Dev Journal 24-09-2004'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-109559182931906821</id><published>2004-09-19T13:03:00.000+02:00</published><updated>2007-01-14T13:55:28.312+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unreal'/><category scheme='http://www.blogger.com/atom/ns#' term='libhttp'/><category scheme='http://www.blogger.com/atom/ns#' term='unrealscript'/><title type='text'>UnrealWiki Dev Journal 19-09-2004</title><content type='html'>Well found some time to work on LibHTTP version 3. So far I've made the following changes:
&lt;ul&gt;&lt;li&gt;Improved easy of use: get(), post(), head()&lt;/li&gt;
&lt;li&gt;Support for multipart/form-data POST data&lt;/li&gt;
&lt;li&gt;Two different transfer modes: Normal and Fast (tries to download as much data as allowed within a single tick)&lt;/li&gt;
&lt;/ul&gt;
Previously you had to use HttpRequest to perform a request. I made
this function protected and added functions for each HTTP request
method. The HttpRequest function wasn't really a nice way to perform
requests. Now you will have to set the cookie data before doing a
request. You can't include it with the request function (was kinda
useless).&lt;br /&gt;
As for the POST request, now both x-url-encoded data and form-data
request bodies are supported. I've added some easy to use functions to
add form-data fields. Using multipart/form-data you will have much more
control over the posted content, for example it's possible to use
Base64 to send binary data.&lt;br /&gt;
I also added a additional transfer mode: Fast. This will try to
download as much data as allowed (defined by a couple of variables)
within a single tick. This is usefull when you need to make sure
certain data is downloaded as fast as possible and system impact isn't
a big issue. &lt;br /&gt;
&lt;br /&gt;
That's pretty much all the ideas I had to put into the new LibHTTP version, if you have requests, let me know ASAP.&lt;br /&gt;
Also LibHTTP3 will be shipped with the source code stripped from the
binary package. This is to reduce the file size (87 KiB vs 33KiB).&lt;br /&gt;
Ofcourse the source code will be included seperately with the package
so you don't have to download it via CVS.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-109559182931906821?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/109559182931906821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/109559182931906821'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2004/09/unrealwiki-dev-journal-19-09-2004.html' title='UnrealWiki Dev Journal 19-09-2004'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-109493210320960847</id><published>2004-09-11T21:34:00.000+02:00</published><updated>2007-01-14T13:55:47.298+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unrealadmin'/><category scheme='http://www.blogger.com/atom/ns#' term='unreal'/><title type='text'>downloads.UnrealAdmin.org</title><content type='html'>Ok, finished the new download section for the UnrealAdmin page. It's a rather gloryfied directory listing. With a couple of nice touches. &lt;br /&gt;
It will automatically include the README file, if it exists, in the directory listing. This is useful for directory descriptions.&lt;br /&gt;
Also if the file has an MD5 file (&lt;code&gt;&lt;i&gt;filename&lt;/i&gt;.md5&lt;/code&gt;) it will be added below the filename on the listing.&lt;br /&gt;
Additionally, when there's a text file attached to a other filename it will show a like &lt;code&gt;[toggle info]&lt;/code&gt;. This link will open/close the text file inline with the entry in the directory listing. This feature can be used to display the readme file per file. Very usefull for patches.&lt;br /&gt;
&lt;br /&gt;
To protect the download page from being abused by other site, deep linking directly to the files so it will look like they host the file, I've added checks on the referer. If a browser doesn't send a referer, or adds bogus data, a cookie will be used to check if the user saw the notice that UnrealAdmin.org hosted the site. Ofcourse this check will only be done on full featured clients like Mozilla, Opera and MSIE. Clients like lynx, links or wget will directly download the file. So when server admins can simply download the file directly to their server from a shell.&lt;br /&gt;
I don't really like this protection, but it's needed because there are quite some assholes out there.&lt;br /&gt;
&lt;br /&gt;
Future additions to the download page will be at least:
&lt;ul&gt;&lt;li&gt;search feature&lt;/li&gt;&lt;li&gt;stats? (or maybe just Webalizer Output)&lt;/li&gt;&lt;/ul&gt;

Also we could use some mirrors (hosts that mimick hour directory structure and files so we could link to them directly). I haven't thought out yet how I'm going to add the links to the directory listing, but I'll figure that out by the time we have a mirror.&lt;br /&gt;
I was also think about giving Epic and Ryan Gordon an account on the machine to upload beta patches directly for an instant mirror. The last beta patch for linux failed completely because Ryan's "0day" server was overloaded.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-109493210320960847?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/109493210320960847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/109493210320960847'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2004/09/downloadsunrealadminorg.html' title='downloads.UnrealAdmin.org'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-109474580121836189</id><published>2004-09-09T17:41:00.000+02:00</published><updated>2007-01-14T13:56:15.133+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unrealadmin'/><title type='text'>UnrealAdmin.org - the future</title><content type='html'>I am one of the main admins on &lt;a href="http://www.unrealadmin.org" target="_blank"&gt;the UnrealAdmin page&lt;/a&gt; (ua.org). Ever since the site was started by Azazel we've been growing, and for a couple fo years we've been the authority for server administration for the Unreal games (Unreal Tournament, UT2003, UT2004).
One of the main principles of our site is to stay independed as much as possible and remain free. Ofcourse being independed and free introduces some issues for hosting of the website.&lt;br /&gt;
In the beginning the site was hosted on a commercial host. But within a short time this wasn't enough to cope with the activity. &lt;a href="http://www.multiplay.co.uk" target="_blank"&gt;Multiplay UK&lt;/a&gt; (MPUK) jumped it and provided use with a nice shared hosting solution without any hooks attached. This was great, it allowed us to continue growing. Over time ideas came up to expand our services, for that to work we need a dedicated hosting solution.&lt;br /&gt;
A little while ago &lt;a href="http://www.gameservers.net" target="_blank"&gt;GameServers.net&lt;/a&gt; (gs.net) offered to host our site. Since we where happy with our current host gs.net had to make us a better offer. So they offered us a dedicated host, that was great, it would allow us to expand has we had planned (for the future). After some discussion within the admin team we decided to do it. But before we made the final dicision Azazel first wanted to talk with MPUK and thank them for their services. MPUK responded by offering a dedicated but "jail" host on a FreeBSD machine. Well, that was nice, now we could discuss if we would take th gs.net offer or the MPUK offer.&lt;br /&gt;
In case of gs.net we would have to put a banner of gs.net on every site, but we would get a dedicated machine with Linux ES (RedHat). In case of MPUK we would have the same deal as before, but get a dedicated machine with FreeBSD within a jail (so no full control). The jail wouldn't matter much, it's not like I would recompile a FreeBSD kernel. The main reason for tha jail would be to allow the MPUK admins to fix the machine after we "broke" it. I would be the main person to administer the software on the machine, and I didn't care if it was a FreeBSD jail or a RedHat hell. I would prefer a nice &lt;a href="http://www.debian.org" target="_blank"&gt;Debian Linux&lt;/a&gt; machine, but nobody offered that. So I left it up to Azazel and he decided to stay with MPUK. So when our MPUK related site admin (Killing) requested the jailed machine from the MPUK admins they wouldn't give it to us. Instead, they gave use a normal (no jail) FreeBSD machine, even better.&lt;br /&gt;
Well, last monday I got access to the machine to install apache, php and mysql for the initial setup to host our current site. To summerise: FreeBSD package system sucks big time compared to Debian. Also FreeBSD doesn't really use stable software via the package system. For example &lt;code&gt;pkg_add -r mysql-server&lt;/code&gt; will install a MySQL 4.1 alpha server. I had to manually download the binary package for MySQL 4.0 (there was no 3.23 package available). The alternative was to compile it manually via the ports system. Also installing PHP and requested extentions isn't as easy in FreeBSD as it is in Debian. So after two days and quite some annoyance I finally installed Apache2, PHP5 and MySQL. Ofcourse our forum software &lt;a href="http://www.vbulletin.com" target="_blank"&gt;vBulletin&lt;/a&gt; isn't compatible with PHP5. All my own PHP scripts work perfectly, but quite some things in vBulletin just didn't work. On their site they only stated that PHP5 support was still being tested, instead of just saying "it doesn't work out of the box". So I had to replace PHP5 with PHP4. After an hour or two messing with FreeBSD I had replaced it... It could have been easier.&lt;br /&gt;
Right now our new machine is being tested if the current site works as it should. With a little luck I'm going to issue a site move by the end of the week (sunday or something). For this work work smoothly I'm planning to create an additional hostname to point to the new location (&lt;code&gt;www2.unrealadmin.org&lt;/code&gt;). This is to give people direct access to the site while the DNS entries have been updated for everybody (1 or 2 days).&lt;br /&gt;
After that we can start planning the new stuff in the future of UnrealAdmin.org.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-109474580121836189?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/109474580121836189'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/109474580121836189'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2004/09/unrealadminorg-future.html' title='UnrealAdmin.org - the future'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-109472974960394107</id><published>2004-09-09T13:34:00.000+02:00</published><updated>2007-01-14T13:56:43.966+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='unreal'/><category scheme='http://www.blogger.com/atom/ns#' term='uncodex'/><category scheme='http://www.blogger.com/atom/ns#' term='libhttp'/><category scheme='http://www.blogger.com/atom/ns#' term='unrealscript'/><title type='text'>UnrealWiki Dev Journal 09-09-2004</title><content type='html'>I've been rather busy with school the last two weeks. So I haven't done much.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight:bold;"&gt;Unreal Kart&lt;/span&gt;: nothing much has been done, I need to "re-activate" the team, they have been slacking. In the meanwhile I've been experimenting with bot AI and path finding (to understand it better). This experimentation will result in a new gametype: Deluder&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight:bold;"&gt;Deluder&lt;/span&gt;: this new gametype is a tribute to the Developers of Incredible Power. It's a rather nice gametype from an old FPS game (you might now it). This gametype might be the first step on converting more of that old game. Right now I use it for experimentation for Unreal Kart to better understand bot AI and path finding. The most important part of this gametype is a roaving token that runs away from the players, so it has a somewhat reversed hunting AI. It's rather interesting, usually you want pawns to go somewhere, but in this case I want to pawn not to go somewhere. Right now the pawn tries to move away as much as possible. However, quite often it runs past the current players, and I don't want that to happen. So, in one of the test levels (Albatros) it get's stuck on AIMarker8, the AI script of that marker doesn't do anything usefull, and the pawn doesn't just jump off the ledge for some reason, so I have to figure out what it should do there.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight:bold;"&gt;UnCodeX&lt;/span&gt;: haven't done anything since the HTML Hints for the the application. Soon I hope to implement PascalScript in the documentation generation. But my motivation for this project isn't that high, for some reason it's not really recognised, maybe I just expect too much of it. UnDox received a shit load of attention, but UnCodeX is pretty much not present, or maybe I just don't see it. However, I did receive an email from Bruce Shankle a long time ago, he was quite impressed with it. I really wonder how many people use UnCodeX.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight:bold;"&gt;LibHTTP&lt;/span&gt;: I'm working on a new version of LibHTTP, version 3. This version won't be completely backwards compatible, even tho it has the same base code. This version will ofcourse contain a couple of bug fixes (actually, just one at the moment, and it was only a bug for the UT2003 build). Some of the new features will include: easier usage via get(), post() or head() functions. Also a faster download mode when download speed is ciritcal, this will try to download more data each tick (ofcourse with setable thresholds). I'm also going to implement a document cache, and maybe some some binary options. Anyway, if you have any feature requests, let me know.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-109472974960394107?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/109472974960394107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/109472974960394107'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2004/09/unrealwiki-dev-journal-09-09-2004.html' title='UnrealWiki Dev Journal 09-09-2004'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry><entry><id>tag:blogger.com,1999:blog-8096012.post-109359429868944299</id><published>2004-08-27T10:10:00.000+02:00</published><updated>2004-10-16T13:47:16.343+02:00</updated><title type='text'>Welcome to my blog</title><content type='html'>I'm not really into blogging, but I might give this a try.&lt;br /&gt;
It's better than updating a .plan, and people can add comments.&lt;br /&gt;
&lt;br /&gt;
I'm planning to cross post my entries on my &lt;a href="http://wiki.beyondunreal.com/wiki/El_Muerte/Developer_Journal"&gt;Unreal Wiki Dev Journal&lt;/a&gt; on this blog. But also other things that I can't post on that Dev Journal.
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8096012-109359429868944299?l=elmuerte.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/109359429868944299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8096012/posts/default/109359429868944299'/><link rel='alternate' type='text/html' href='http://elmuerte.blogspot.com/2004/08/welcome-to-my-blog.html' title='Welcome to my blog'/><author><name>elmuerte</name><uri>http://www.blogger.com/profile/17242977628682087156</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://2.bp.blogspot.com/_stIaq0ZaJFA/Sweui7pp-EI/AAAAAAAAACw/HDjYcTegZ94/s1600-R/elmuerte-avatar.gif'/></author></entry></feed>
