
So now that I have everything set up for diggbeep so it works ok, I thought about releasing a similar program for www.propeller.com. So after 3 hours of copy-pasting code I present you the "copy-paste-replace-etc" release notes:
This windows application monitors your recent propeller (www.propeller.com) stories from your traybar. It will show you how many people vote each of your stories and how many people left comments using a simple MSN-like interface. You can also hear a sound when any of your monitored stories gets voted or commented while you do other stuff with your pc (Optional). All you have to do is run propellertray and enter your username.
You need the .net 2 framework in order to run this. Get it from microsoft.
Recommendations:
- Use as long interval as possible because this will consume both yours and the propeller.com server bandwidth. The default is 60 seconds.
- If all those voting sounds are getting annoyed just disable them from settings.
Post any bugs you find or any *reasonable* suggestions you have here.
note1: I hate installers so don't come complaining! :)
note2: The propeller dude picture and the propeller icon are registered to propeller.com.
Download it here
Friday, March 28, 2008
PropellerTray
Thursday, March 27, 2008
DiggBeep - Hear your stories getting digged!

DiggBeep is my new GUI program. It sits on your traybar and monitors your most recent stories. If you are a digg addict and want to know about your story's appeal you'll love this.
DiggBeep will show you how many people digged each of your stories and how many people left comments using a simple MSN-like interface. You can also hear a sound when any of your monitored stories gets digged or commented while you do other stuff with your pc (Optional). All you have to do is run diggbeep and enter your digg.com username.
You need the .net 2 framework in order to run this. Get it from microsoft.
Recommendations:
- Use as long interval as possible because this will consume both yours and the digg's server bandwidth. The default is 60 seconds.
- For the same reason be cautious of how many stories you'll want to monitor. The default is 25.
- If all those digg sounds are getting annoyed just disable them from settings.
Post any bugs you find or any *reasonable* suggestions you have here.
note1: I hate installers so don't come complaining! :)
note2: The digg dude picture and the digg icon are registered to digg.com.
Download it here: DiggBeep 1.10
Monday, March 24, 2008
Change speaker mode using command line (speakersetup)

My new program is yet another command line utility. This time it's about changing speaker settings mode found under control panel. I developed it mainly because I got tired of going to control panel to switch my mode to headphones every time I wanted to play Counterstrike. It's best suited for gamers and htpc addicts to change between speaker modes using shortcuts and remote controls. I myself just created two shortcuts. One for headphones mode ("speakersetup.exe hp") and one for stereo speakers ("speakersetup.exe 2"). I assigned a hotkey to each and now I can just press ctrl-f2 before starting Counterstrike to switch to headphones. You can also use it with AutoHotKey to assing a single hotkey to cycle between speaker modes (go there for an example). So here are the details:
Useage:
speakersetup.exe [Speaker Mode]
[Speaker Mode] can be one of the following:
hp: Stereo headphones
1: Monophonic speaker
2: Desktop stereo speakers (2.0)
4: Quadraphonic speakers (4.0)
5: Surround sound speakers (5.0)
5.1: 5.1 surround sound speakers
7.1: 7.1 speakers
Examples:
speakersetup.exe 5.1 will switch to 5.1 surround sound speakers.
speakersetup.exe hp will switch to headphones.
Download it here.
Wednesday, March 19, 2008
Gamepe review
Gamepe is a sweet free program that injects an MSN window within your games without having to alt-tab out of them all the time when you hear that annoying "incoming message" sound. You just press the assigned hotkey and the following window becomes visible within the game and you can chat right there!
This saves a lot of critical game time like for example when you're on a 40-man raid in world of warcraft and you just hear that MSN sound, you just press "ctrl-d" instead of making 40 people wait for you. It also includes an in-game mp3 player which I don't use since I prefer having global hotkeys for my media player classic.
Gamepe is kind of new and has some minor bugs, but these guys are working hard and fixing everything really quick.
Download it here
Score: Recommended now - Must have when all bugs are fixed
Tuesday, March 18, 2008
A lookup combobox in flex
If you are used to the LookupComboBox control in delphi or the similar ones in .net and you wish you had something like that for flex well wait no more. Here is a LookupGridColumn component:
LookupGridColumn.mxml code:
<?xml version="1.0" encoding="utf-8"?>
<mx:DataGridColumn
xmlns="*"
xmlns:mx="http://www.adobe.com/2006/mxml"
editorDataField="LookupValue"
labelFunction="Lookup">
<mx:Script>
<![CDATA[
// LookupGridColumn.mxml
// Help here: http://vrokolos.blogspot.com/2008/03/lookup-combobox-in-flex.html
//the lookup field of the lookupProvider objects
[Bindable]
public var lookupField: String;
//the description field of the lookupProvider objects
[Bindable]
public var resultField: String;
//the provider for the values of the combobox
[Bindable]
public var lookupProvider: Object;
//given an object, it will return the lookup's description
public function Lookup(theOb: Object, column: DataGridColumn): String
{
var tempResult: String = "";
for each ( var n: Object in lookupProvider )
{
if (n[lookupField] == theOb[dataField])
{
tempResult = n[resultField];
break;
}
}
return tempResult;
}
]]>
</mx:Script>
<mx:itemEditor>
<mx:Component>
<mx:ComboBox
dataProvider="{outerDocument.lookupProvider}"
labelField="{outerDocument.resultField}">
<mx:Script>
<![CDATA[
//returns the lookup field of the selected item
public function get LookupValue(): Object
{
if (selectedItem != null)
{
return selectedItem[outerDocument.lookupField];
} else {
return "";
}
}
//whenever the row changes, find the selecteditem
public override function set data(theOb: Object): void
{
super.data = theOb;
for (var i: int = 0; i< dataProvider.length; i++)
{
var k: Object = dataProvider[i];
if (k[outerDocument.lookupField] == theOb[outerDocument.dataField])
{
selectedIndex = i;
}
}
}
]]>
</mx:Script>
</mx:ComboBox>
</mx:Component>
</mx:itemEditor>
</mx:DataGridColumn>
Now let's see an example. Suppose we have these two classes in our model:
[Bindable]
public class Category
{
public var UniqueId:int;
public var Name:String;
}
[Bindable]
public class Product
{
public var UniqueId:int;
public var CategoryId:int;
public var Name:String;
public var Descn:String;
}
where each product's CategoryId links to the UniqueId of it's Category. To use this relationship in a datagrid we just have to do this:
<mx:DataGrid id="grdProduct" editable="true" dataProvider="{Products}">
<mx:columns>
<mx:DataGridColumn headerText="Name" dataField="Name"/>
<mx:DataGridColumn headerText="Descn" dataField="Descn"/>
<mx:DataGridColumn headerText="CategoryId" dataField="CategoryId"/>
<local:LookupGridColumn
lookupProvider="{Categories}"
headerText="Category"
dataField="CategoryId"
lookupField="UniqueId"
resultField="Name"/>
</mx:columns>
</mx:DataGrid>
And here's the example: (try changing the category and focusing another row to see what happens to CategoryId)
UPDATE: Someone noticed that if you focus the field categoryId (that one specifically) before changing rows and after selecting another value in the lookupcombobox it won't save the changes. I don't think this will affect any of your projects since the field categoryId or the similar ones will most likely be hidden or read-only.
Sunday, March 16, 2008
Desktop Tower Defence Review
In 1998 the mighty Blizzard released my favorite strategy game which is Starcraft. I'm still playing it 10 years after its release and I can't wait for the sequel. There is a Starcraft's custom map/mod called Tower Defense. Your purpose in this mod is to kill all units before they reach the other side of the map. If a unit reaches the destination you lose. Your only way of stopping those units is by building and upgrading different kind of towers. You pay for the towers and the upgrades with the money you earn by killing creatures. There are many flying units, armored units, fast units, bosses that come wave after wave, with each wave getting stronger as time goes by. This sounds simple and silly but it's exactly the opposite. It's an extremely addictive and enjoyable puzzle game. You could call it "antilemmings on steroids".
Desktop Tower Defense is a flash version of the game with some minor differences. You won't need anything to start playing, but you'll need help to stop playing. I warned you! (My best score is 8500 on hard by the way)
Play here
Score: Recommended!
Saturday, March 15, 2008
Grim Fandango Font Editor
This will allow you to edit fonts for the game Grim Fandago. It works like an icon editor and
it was used for converting the game's codepage to greek - translation project forum page
First get a codepage ascii character map like this.
Check which codes you need to change for the game to support your codepage.
Load a laf file, change the fonts for each character code and then save it.
Download it: GrimFontEditor
Cycle nvidia display outputs using command line and autohotkey
New nvidia graphic cards usually come with a tv output, a vga output and a dvi output. You can use those outputs at the same time or you can switch between them. I prefer the latter. Going to the control panel all the time to switch displays was a pain in the ass. So I made this autohotkey script to cycle between my TV, my Monitor and my Projector using Ctrl-F2:
currentMode = 0
^F2:: ;Ctrl-F2
if (currentMode = 0) {
run rundll32.exe NvCpl.dll`,dtcfg setview 0 standard TA,,Hide ;TV
currentMode = 1
} else if (currentMode = 1) {
run rundll32.exe NvCpl.dll`,dtcfg setview 0 standard DA,,Hide ;DVI
currentMode = 2
} else if (currentMode = 2) {
run rundll32.exe NvCpl.dll`,dtcfg setview 0 standard AA,,Hide ;VGA
currentMode = 0
}
return
AutoHotKey + Two SoundCards + One Volume Control
I use my audigy 2 for my speakers and my onboard sound card for my headphones so I can switch between them without plugging and unplugging anything.
AutoHotKey is a nifty program that helps you assign scripts to keyboard, mouse or remote. It's quite useful for stuff you do often.
Using AutoHotKey I managed to synchronize the volume for my two sound cards. It was getting annoying for me to monitor both volumes so I just came up with this script:
SC120:: ;Mute Button on Microsoft Multimedia Keyboard
SoundSet, +1, , mute, 3
SoundSet, +1, , mute, 1
return
SC12E:: ;Volume Down Button
SoundSet, -5, , ,3
SoundGet, vol_Master, Master,, 3
SoundSet, %vol_Master%, , ,1
return
SC130:: ;Volume Up Button
SoundSet, +5, , , 3
SoundGet, vol_Master, Master,, 3
SoundSet, %vol_Master%, , ,1
return
Where 1 and 3 are my sound card ids.. Just use 1 and 2 if you only have two sound cards. (I also have a tv tuner with id 2)
Now both my sound cards volume levels change simultaneously with the press of a button
VrokSub released!

UPDATED VERSION 1.10
UPDATE 5/11/2008: Made it so it works with the new version of the opensubtitles api
This command line program will automatically download subtitles for your movies, rename your movies using a customized format, create folders for your movies and download imdb covers and details. You just pass a folder path and a preferred language list and it searches for subtitles using your avi files. It uses opensubtitles for the search and it requires the .net 2 framework runtimes which you probably already have.
Useage:
vroksub.exe "[Folder Path]" [Language Code Sequence] [Params]
Folder Path: The path to the folder that has all your movies. VrokSub will search all subfolders of this path for movies.
Language Code Sequence: A sequence of two letter language codes according to your preference separated by coma. You can find the two letter codes here: http://www.loc.gov/standards/iso639-2/php/code_list.php VrokSub will search subtitles of the first language code and if it doesn't find one it will continue to the next code.
Params:
/rename will rename all the movies for which vroksub has found a subtitle using the format found in vroksub.exe.config.
/newonly will only try to locate subtitles for movies without subtitles and ignore the ones that have subtitles already
/nfo will download data from imdb.com (like actors, directors etc) and save them to a .nfo file named like your movie
/covers will download the cover images imdb uses and save them to a .jpg file named like your movie
/folders will create a folder for each movie and move all files there. If /covers is used with this then a folder.jpg will also be created so that whenever you browser your output folder with explorer's thumbnail view, this cover will be displayed over the folder icon.
/move="[Output Path]" will move all files and folders for movies who's subtitles were found to the given path. Useful if combined with /folders so you don't have both old and new folders in the same directory
Config:
Edit your vroksub.exe.config to alter the way vroksub renames your movie files with /rename or creates folders with /folders.
CDFormat is the format used for the current CD. %C is the CD number.
FileFormat is the format used for renaming your movies. %M is movie, %C is the CD string after format and %Y is year
Example1: %M renames to Casablanca
Example2: %M(%Y)%C renames to Casablanca(1942)-CD1.avi
FolderFormat is the format used for the /folders parameter to get each folder's name.
Example1: %M%Y creates outputPath\Casablanca(1942)
Example2: %Y\\%M creates outputPath\1942\Casablanca
Examples:
vroksub.exe "c:\my videos" gr,en
This will first try to locate a greek subtitle for every movie in c:\my videos (including subfolders) and if it doesn't find one it will try to find one in english. You can use more language codes if you'd like.
vroksub.exe "c:\my videos" gr,en /rename
will also rename all movies where subtitle has been found with the format found in vroksub.exe.config. default: MovieName(Year)-CD2.avi
vroksub.exe "c:\my videos" gr,en /newonly
will only search for subtitles for movies that don't have a subtitle already.
vroksub.exe "c:\unsubbedvideos" nl /rename /folders /nfo /covers /mo
ve="c:\my videos"
1) Creates a folder for each movie under "c:\my videos" with the name format found in vroksub.exe.config
2) Renames each movie using the format found in vroksub.exe.config
3) Downloads dutch subtitles for each movie
4) Downloads imdb details and saves them to the output folder
5) Downloads imdb covers and saves them to the output folder as folder.jpg and movie.jpg
Note: Only movies with found subtitles will be affected (the language sequence parameter is required)
Download it here: VrokSub 1.10
Older version: VrokSub 1.00