Technologies: C#, WPF, WinApi

Screen magnification tool to replace good old Zoom+ that was not working well with modern different DPI monitors.

Options include always on top and a pixel grid for zoom level > 4x. Status bar shows the position of the mouse, the color of the pixel under the mouse (Ctrl+C to copy that color to Clipboard) and the screen's DPI




Technologies: C#

Small Visual Studio extension to highlight in red all errors in the Output window, especially helpful for WPF's binding errors.

More info in this blogpost.




Technologies: Typescript, Javascript, jQuery, HTML

Darkbox is my own version of the so called "lightbox" plugins. I know there are a lot of them out there, but this one is mine!

I've made Darkbox especially for this site, my site, because I needed some sort of plugin to enlarge the photos on this page, the ones that you see at the right side of each project. Unfortunately for me, none of the existing lightboxes had everything I need.

The most annoying problem with existing lightbox plugins was the fact that when the box was open, you could still scroll the page behind it or, even worse, you could scroll the box out of the screen! Inadmisible from a UI point of view. The other thing I wanted to have were opening and closing (zooming) animation from/to the position of the image in the html page which gives a very natural feeling of what is happening when you click the images.

Having to write a lot of javascript for this project, I decided to avoid shooting myself in the foot every other minute and try Typescript. Although it doesn't solve all the problems javascript has, Typescript definitely saves a lot of effort. So... definitely typed :)

See more on the Darkbox page.


Technologies: C#, ASP.Net, Razor, HTML, Javascript

TraXCatalog is a website where one can upload gpx files produced by GPS devices. The site will display the track and will compute various statistics like length, average speed, total ascent and descent, moving time, etc.

TraXCatalog was the next (logical) step after the TraX desktop application: to have a site where to put all the tracks created with TraX. Couple of years ago, I was using Bikemap.net for this purpose, but Bikemap was a little bit slow and buggy especially in the embedding functionality, and i didn't like the jumpy interface either. So, finding no other site that I liked, I've made my own, TraXCatalog.net.

For the main functionality, there are thre major pages:

When my friend Radu did a bike trip over the Silk Road to Pamir and Tian Shan, I made an extension to the site to allow live tracking of his current position. Radu had with him a device that was logging gps points each half of hour to a SPOT server, but I didn't liked the support site SPOT had because it was loading very slow, it had an awkward interface and it only displayed the gps points from the last 7 days. Therefore, I've intercepted the points from the SPOT website, saved them on my database and used the TraXCatalong engine I already had to trace the complete path, as you can see it here: traxcatalog.net/radu.

For the future, I'm thinking to add functionality to create routes online. I'm also thinking to convert it to a Single Page App, just to see how that works :).



Technologies: C#, WPF, GoogleMaps API

Simply put, a GPS tracks creator and analyzer.

There are not many applications that allow you to create tracks/routes for GPS devices, especially for the GPS devices made for outdoor activities. I wanted some tool that I could use to create a track for my GPS for when I was hiking or biking. Clicking Google maps to create the list of points that make the track would be nice. But help from other maps, like OpenStreetMap and OpenCycleMap would be even nicer.

All these maps are combined in TraX. Plus the ability to create the tracks following the roads or bike paths by calling into the Google Maps API and asking for the route between two points, so that you have the certainty that you won't go straight through a building.

The second aspect is the analyzer. Once you did your track, you can open it TraX and you can edit or remove the points (to fix various GPS flaws, and boy there are a lot of them). The analyzer will also compute statistics like average and maximum speed, moving time, total time, total ascent and descent, etc.

The code used by the analyzer is actually the same code used by the TraXCatalog site to compute the same statistics, so there are no discrepancies between the two.

For the future, I'm thinking to add options to automatically load the tracks from a GPS when the device is connected to an USB port and to automatically upload it to dedicated sites such as traxcatalog.net and strava.com.

I'm not putting a download link yet because I still want to make a few adjustments before I make it publicly available, but stay tuned, it won't take long. ETA: september 2014


Technologies: C#, WPF

One of the major advantages of WPF over other UI technologies is its awesome support for completely restyling how an application looks. The disadvantage is that to completly re-sking an entire application you have to pretty much restyle every control in there, and there are about 40 controls to restyle...

I did the WpfThemes project as a side project to build the theme for TraX app. Athough I've spent more than a month on building the two themes, PanaDark and PanaWhite :-), the end result was quite satisfacting: not only that I've made TraX look great, but I also got a lot of experience on the internals of building WPF styles and how the WPF controls are designed.



Technologies: C#, WPF

The first app I did after I moved to Canada, in february 2013, in order to get used with the time difference between Montreal and back home in Bucharest. Mostly because I didn't liked the Windows clock, I wanted something more like a desktop widget with always on top functionality for my two 24-inch displays. And because when I can't find something I like, I make my own. And maybe because it was a -30° C weekend with no chance of going outside.

Another objective it was to look good. It was designed with "skinning" support, but oh well, I got other projects in my mind so I never had time to work on other skins. The default one is looking good enough for the designer in me.

The app lets you add as many clocks as you want for different time zones via the Options window. The right-click context menu offers the possibility to toggle the Always On Top functionality, maybe you want it, maybe you don't.



Pinguinii Maps

Technologies: HTML, Javascript

A simple touristic map browser I've made for myself for when I am going hiking. Because this should work even on mobile phones for when I'm in the mountains and I need to consult a map, it seemed logical to have it done in HTML and Javascript. Although I don't like JS, it is the language that is found on most of the devices nowadays, so it is a must to know it.

The maps are available at pinguinii.ro/maps.

The included maps are the ones that can be found on the internet with a simple Google search, but are there grouped together by area so that they are more easily accessible.


Technologies: PHP, HTML, Javascript

There was a time when I used to blog a lot about the places I visited. At that time I was using wordpress which sadly didn't have a convenient way to quickly insert in the post the 100 or so pictures from that place that I was already uploaded to Picasa.

So yeah, exactly, that was a challenge to write my own plugin. And I say a challenge because Wordpress is all about PHP. But hey, "learn a new language every year", they say, so I did what I had to do and got the plugin done.

There is a dedicated page: andreipana.net/picasaphotos from where you can download and use the plugin.


Technologies: C#, WPF

And because some people want to mark their photos with copyrights when they post them online, I made a program for that!

Although simple, I've added quite a few functions to it in order to make it possible to customize the watermark as much as possible: position, font, color, stroke, stroke color, stroke thickness, opacity, margins and even rotations are all fully customizable. WPF realy made it very easy for me to implement all this.

Plus, it supports batch file processing and everything is done in the background because a decent application should never block the UI.



Technologies: C#, WPF, Kinect, Facebook

A fun and challenging project I did for and with my friends at MindTreatStudios.

Slice a Lemon, Make a Ciuc Radler!

People were able to enjoy a Kinect game by slicing lemons, a game which was inspired by Fruit Ninja. The players’ shadows were reflected in a bottle full of Ciuc Premium beer, and the players were invited to slice lemons until they obtained the perfect percentage for a Ciuc Radler (63% lemonade and 37% beer).

Watch this video for a short demo!



Technologies: C#, WPF, GoogleMaps API

Back in 2011 mobile Internet was quite rare and expensive, especially when roaming. At that time I was traveling quite a lot and I needed a way to have some maps on my mobile devices I had then: a Kindle and a samsung smartphone.

So I had this idea to make a PC program that will automatically generate a pdf map of a certain area from Google Maps (and other maps providers) like a road atlas/map. This pdf I could open and browse on the phone and on the Kindle.

The program allows the user to select an area on the map, the zoom levels he wants to have in his map and then write a pdf file like this one (first page is white, should have had some sort of Contents. Pages after the second one stripped in order to keep the file size low).



Technologies: C#, WPF

At some point Yahoo Messenger became really stupid. It crashed a lot and used a lot of resources (embedded flash for avatars? No, thank you). So I tried to do my own Yahoo messenger, called Yeeha!.

Unfortunately for my cause the yahoo protocol was not publicly supported and documented at that time, so I had to do a lot of sniffing on the network (Wireshark really helped) to see exactly what the protocol looks like. The authentification was particulary ugly.

The result was quite satisfactory, I got a working Yeeha that I used for a couple of months. Unfortunately I couldn't keep up with all the modifications Yahoo was doing to the protocol, so Yeeha kind of died. It still connects now, but it crashes while exchanging some messages that are not supported. It seems that you can't foresee error handlers for everything :-)

Here is the part of the protocol that I studied and implemented, if anyone might be interested.



Technologies: C#, WinForms

I wanted at some point to see what folders I'm sharing from my PC in the local network, and didn't know a way to see them in Windows. So, a perfect oportunity to write one of those small utilities just to do that.

PS: In the mean time, here is the Windows way to see the shared folders:
Right click My Computer / This PC > Manage > Shared Files > Shares



Technologies: C#, WinForms

Ever wondered, when installing a program, why does it take so long to copy all the files? Or, what files does a program modify? I wanted to see what files exactly writes Visual Studio when it installs itself. So I made a program for that!




Technologies: C#, WinForms

A visual tool to help a designer create a list of points representing a path on which a magic wand slides to complete a mini game. I worked years ago on a game where some resources (these paths) were written by hand by level designers counting pixels on photoshop. So I thought that I could write a small tool to help them create that bloody path just by clicking on the mock screen. With re-adjustments possibilities. An one-hour-project :-)

I'm putting this trivial tool here to show that it's not important what it does, it is important that a programmer can help team members be more efficient in what they do, by writing these kind of small utilities.


PNG Chunk Viewer

Technologies: C#, WinForms

Back in the times when we ure using a lot of PNG files for images for J2ME games. In order to keep the size of the game low, we had to optimize pretty much everything, especially PNG files that had inside all kinds of useless chunkgs. So, I made myself several programs that dealt with viewing the PNG chunks and editing and removing them.


Technologies: C#, WinForms

There was a time when I was hiking a lot in the beautiful Carpathian Mountains, and usually after such a hiking trip I used to write a small trip journal on a mountaineering website, carpati.org. To add photos to the journals, the photos had to be exactly 500x375 pixels in size. So, I wrote this small program MultiPictureResizer to batch resize all the photos I wanted to add to a journal (sometimes, as many as 100 photos).

Yes, I know there probably were tons of programs that did exactly this task, but this one was mine! :-)




Technologies: C#, WinForms

Another project I've made to support the work for one of the EA's game. We wanted to implement in a J2ME game the lightning effect and because we were really constrained on the size of the resources, we tried to implement it procedural, basically only with setColor and drawLine primitives.

I ended up with several algorithms that had some input parameter that were supposed to be tuned by the designers. And the simplest way was to have those algorithms run on PC so that the designers can play with the input values and chose the values they liked most. Then those values were inserted (hardcoded) in the game engine.



Technologies: C#, WinForms

AniStudio was an application for creating modular animations. Back in the time of J2ME games with limited storage and RAM, the biggest challenge was to put as many graphic resources as possible in the game. It was impossible to store frame by frame animations, so animation frames were created from image modules drawn at different location (and eventually with different 90 degree rotation or mirroring).

The basic idea was to have an image like the one below in the left side and to achieve animations like the ones in the right side without duplicating bitmap pixels.

(Sorry for the magenta, but that was the color we used for transparency back then. Most of the devices didn't support real alpha channel. There were some hard times back then, but yet very challenging...)

AniStudio surely wasn't the first of its kind and I think that most major game studios at that time were using similar technology; this version I wrote it for myself, at the same time I did a (bit different) version for EA that eventually evolved (a lot) into something like this GameWizard.



Technologies: C#, WinForms

Also from the times of J2ME games when I had to optimize everything in order to have the package as small as possible (and we're talking about 64 KB - 220 KB for the whole game, both code and data!). This time a small utility to view the content of the java compiled .class files.

jvw (Java VieWer) was usefull to see exactly what methods remained in the class after obfuscation or to see the contents of the string pool or to see the size of the bytecode of a method because, yeah, we had devices that didn't supported methods with more bytecode than a certain limit.

Although it was about Java, I wrote this one in C# - I was learning C# at the time and I was very enthusiastic about it so I've read the class binaries directly, according to the Java specification in order to have the most control over what I was inspecting (as oposed to using Java + reflection in which case not all fields might have been returned).


J2ME Emulator

Technologies: Java, Eclipse SWT

Back in 2006 I was working on J2ME Java applications for mobile phones, making mobile games. One of the main problems at that time it was that there were a lot of J2ME devices out there, from a bunch of different manufacturers (Nokia, Motorola, Sony-Ericsson, Alcatel, Sagem, Siemens, just to name a few I still remember). And even though Java was supposed to be "write once, run everywhere" this was the last thing it was, because the J2ME specification was not always clear or because each phone manufacturer understood and implemented the specification a little bit different from the others. And every manufacturer had its own SDK with its own Emulator.

The emulators were very helpful because we didn't have to always download the application on the device to test the functionality, but there were so many emulators, at least one from each manufacturer, each with different capabilities.

So although it looked very complicated for me at that time, I started to make something like a super-emulator, that was able to do everything the others emulators did and much more. And after some failures with different methods (including trying to rewrite the KVM (the Java VM for mobiles) from scratch based on the specification), I finally found a way to get it working, and using only Java (no C code to recompile the KVM)

Adding customization to support variable keycodes for keys or things like this, to have the same support of all the other official emulators from the manufacturers was simple, but I then went a step further and added the memory viewer which displayed what was in the memory at some point, especially the images and sound objects which were particular large (and the J2ME memory particular small)

This was one of the applications I did that brought me a lot of satisfaction, especially when I got it running for the first time, after so many failed tries.

The screenshots on the right shows the J2ME Emulator running one of EA's games from back then, Fifa 2007.



Technologies: C#, WinForms, Java, J2ME

A lot of things were happening in 2005: I got my first color screen phone, I was doing more and more hiking trips in the Carpathians mountains, and to combine the pleasure with programming I wanted to make myself some kind of application that I can use to have hiking maps on my mobile phone.

The mobile phones at that time were incapable of loading / displaying a jpeg file that wa about 3000x3000 pixels in size, so MapPC was taking the jpeg file, split it in smaller tiles (like 96x64 pixels or so) and was generating a Java J2ME application (jar & jad file) that was ready to be transferred to the phone as regular Java app. This application was loading (and unloading, to save memory, the phones at that time were having about 500 KB of RAM) the tiles and was recombining them on the phone to display the originial map (with panning controls, zoom was so Science Fiction at that time).

I've also had to add some editing capabilities, because the symbols on the scanned maps were not always visible, or the maps were black and white and the color of the symbols was not clear. (Hiking trails in Carpathians are marked with red, yellow or blue symbols like triangle, circle, cross and vertical line). So those symbol buttons in the toolbar are exactly for this, to overwrite the jpeg with the right signs.

The application worked great at that time, especially when the battery didn't die exactly when I needed it the most to check the map, but became obsolete as soon as mobile phones became capable to display high resolution jpeg files (about 2008?).



Technologies: C

One of the programs I did that doesn't have a GUI :)

This one is very simple. I was trying (at some point) to have my own StarTrek Computer and the first step was to make it tell me the time. So that is what it does, it says the current time. In Romanian. And that is my little brother's voice.




Technologies: Java

One of the first Java projects I did. Switching from C/C++ to Java was a huge improvement in the way GUI were created in the early 2000s so I was one of the Java supporters back then.

While in the University, I was fascinating about how much you can find about a function when you plot it graphically. So logically, I had to do my own plotting application that I used to compare functions, solve equations, etc.