Archive for June, 2009:
My Dad :)
Just got my Dad’s CD put on YouTube. Nothing fancy~
He’s been singing and composing all his life and put out two CD’s. This is a small preview of his ‘Golden Classics’ Album. For more information about the CD, please get in touch with wolfhartmayer@gmail.com
PHP LoadScript Class
This is a really handy class I wrote that loads all your scripts Server Side so that when your page loads there aren’t so many HTTP Requests. Useful if you’re trying to load 6 different js files and 4 different style sheets, or whatever. That’s 10 requests, completely gone. Just keep in mind that it dumps all your files straight into the html document- so, as long as you don’t have a problem with that, this is a great tool.
In addition, it’s really easy to add your own script types. Check out the script for details.
( Available At: PasteBin: LoadScript Class )
Usage:
<?php # Include Class include_once('class.scriptloader.php'); # Instantiate $jsLoader = new ScriptLoader('JS'); # Add Scripts $jsLoader->addScript('my-javascript.js'); $jsLoader->addScript('jquery.js'); $jsLoader->addScript('other-scripts.js'); # Dump into Document $jsLoader->echoScripts(); ?>
On a quick note, it’d probably be a lot ‘neater’ to mod-rewrite a php file to handle at least one request per script type. That way it doesn’t all get dumped straight into the page.
Something like:
RewriteRule ^script\.(.*)$ script-loader.php?type=$1 [L]
And for script-loader.php
<?php switch($_GET['type']) { case 'js': // Load all of the JavaScript files here break; } ?>
That way when you load something like script.js it will dump all of your java scripts into a ‘fake’ file. Just make sure to use the default $ScriptLoader->type (don’t set one when instantiating) if you are loading it from a src=”foo.bar”.
.. or something like that xD
PHP TripCode
** EDIT **
I found some problems with my code. =) Did some research on PHP’s crypt() and found out that the salt doesn’t quite work they way I had expected it to. Going to post a revision soon.
This is my version of a PHP TripCode (that I will be using for No-Mess-Enger). The way it works is, the user chooses a name, and a key. That information along with the randomly generated URI generate an integer that will eventually be used to select a random animal or something like that. This will allow users to remain anonymous while upholding the integrity of the users authenticity, in case another user tries to choose the same name.
function utilMakeTripcode($alias,$key,$uri) { # generate tripcode $s = crypt($alias,"$key#$uri"); $r = ''; for($i=0;$i<strlen($s);$i++) { $r.= hexdec(substr($s,$i,1)); } return bindec($r); }
Example:
- User enters the Alias: Jon
- User enters the Key: SecretWord
- The TripCode Int generated is 101
At this point I can use something like this to select the users animal:
$usersAnimal = $allAnimals[$maxAnimals-$maxAnimals%$tripCodeInt];
In this example $allAnimals is an array holding every Animal name. $maxAnimals is the array size, and $tripCodeInt is the integer generated from the utilMakeTripCode() function.
So now when the user talks in Chat he might be called:
Jon the Koala
** Note **
I’ve only TESTED the function. Can’t verify that the second snippet works exactly that way. It’s more pseudo code.. so don’t hate me if it’s not quite right. ^.^
Custom Scripting Language for Items
I’ve been working on some new software.. Below is a prototype version of my proprietary itemScript parser, written in PHP. The goal is to have a pseudo-scripting language available for game-items that can be read dynamically by the server, so that new items can be added without additional hard coding.
function scriptToArr($str) { # Parse for Whitespace $str = preg_replace("#(\r\n|\r|\n|\t|\s)#","",$str); # Event Handlers preg_match_all("#(.*?)\{(.*?)\}(,|)#is",$str,$findEventHandlers); $arrEvents = array(); for($j=0;$j<sizeof($findEventHandlers[1]);$j++) { # this event $thisEvent = $findEventHandlers[1][$j]; # these functions $getFunctions = $findEventHandlers[2][$j]; $allFunctions = explode(";",$getFunctions); # get all parameters foreach($allFunctions as $function) { # read and parse function preg_match("#(.+?)\((.*)\)#",$function,$functionAndPara); $thisFunction = $functionAndPara[1]; $thisParaSet = $functionAndPara[2]; # parse and arr strings while(preg_match("#\'(.+),(.+)\'#",$thisParaSet)) { $thisParaSet=preg_replace("#\'(.+?),(.+?)\'#","'$1\0COMMA\0$2'",$thisParaSet); } $thisParaSet = explode(",",$thisParaSet); # get each parameter foreach($thisParaSet as $parameter) { if($addPara = str_replace("\0COMMA\0",",",$parameter)) $arrEvents[$thisEvent][$thisFunction][] = $addPara; } } } return $arrEvents; }
Here is a sample script I created:
onDraw { setMana( 1, thisPlayer() ); doOtherThing( 5, thisPlayer() ); }, onExert { sendToHand( thisTile(), thisPlayer(), x, y, z, 0 ); }, onDestroy { setMana( 5, thisPlayer() ); }
The script then gets torn apart and dumped into a multi-dimensional array. See Screenshot.
User Interface: Doodle Ragnarok Patcher
Threw this together for the DoodleRO project I’m working on. This serves as the launch pad and patcher for Doodle. Utilizing the existing patch software I was able to seamlessly integrate the web interface (the stoney area) with the software application. Overall, I think it looks pretty decent. ^_^
File Compression Hax
So, I was playin around with WinZIP and WinRAR today, trying to understand how those programs work. I mean- I know HOW they work, but I wanted to see which types of files compress the best, and which don’t. It came to no surprise that text documents are the easiest to pack up, since there is so much data redundancy. So, I had a little fun.
I created a 100MB text file filled entirely with whitespace. Then I RAR’d it, and then ZIP’d that. Amazingly enough, I was able to reduce a 100MB file to 222bytes. That’s even less than my minimum sector size (4kb) . Awesome.
Check it out!
Download: Compression Hax



