My Projects
This is an arguably succinct and non-exhaustive summary of software-related projects that I worked on so far. For simplicity sake, this page will also serve as a Downloads/Release page: if you’re using one of my libraries / applications, you can check this page for updates and release notes.
What is included: about each and every piece of written code or drawn pixels that I thought is well enough written for others to be able to use it.
What isn’t included:
- software that I produced while working for miscellaneous software companies, but I cannot (re)publish it for legal reasons;
- code of currently online applications that I build for actual or former customers; that would potentially attract wannabe cyber criminals in finding and exploiting flaws.
That being said, the list follows.
BooKMark
This is a revamp of a sample AIR 1 application I produced while working for Adobe. The original app was named BkMark and is still available on Adobe’s sample application’s page. Because the application’s license (Adobe AIR SDK license) allows it, and because BkMark’s development staled the moment it left the building, I thought I’d give it the chance to a new life.
None of the new features I have in store for it are there yet, but the current set of features includes:
- choose your favorite web page URL; this will be loaded when you run the application (e.g., by double clicking on its desktop shortcut)
- choose an alternate name to be displayed for the web page window
- set window’s position and size, with support for multiple monitors; once these are filled, any change made by moving or resizing the web page window will be remembered
- have your chosen web page automatically load when your system starts
BookMark is released under the Creative Commons Attribution Share Alike license, third version. Please email me bugs/features request. Current version is 1.00 alpha, released on 2009/12/24.
Download: installation file (*.air), source code (*.zip), AIR platform
DiaryNotes
Similar to BookMark, this is a revamp of a sample AIR 1 application that I produced while working for Adobe. The original application, named dAIRNotes, is still available on Adobe’s sample application’s page. Similar to BookMark, no new feature has been put into this program since I left my hands off it either; therefore, since the application’s license (Adobe AIR SDK license) allows one to re-release it, and since I have the vision of a full blown diary keeper application, I decided to bring (back) DiaryNotes to life.
Its current set of features includes:
- create a public or private account into the application
- choose a public account to let other users anonymously read your entries (they need not know your password)
- your credentials are stored on disk in encrypted form; encryption is bound to a particular application installation
- write your diary notes using an integrated rich text editor
- browse your entries – or other’s, by means of the public feature – using a built-in clickable callendar
DiaryNotes is released under the Creative Commons Attribution Share Alike license, third version. Please email me bugs/features request. Current version is 1.00 alpha, released on 2009/12/24.
Download: installation file (*.air), source code (*.zip), AIR platform
ReVersionR
This application came up as the only way to put an end to some significant hours of frustration. While developing a Flex application for a customer, a seemingly insurmountable problem arose: between releases, parts of the application’s SWF modules were loading from users’ local cache. Of course, this made everything crash, which made hundreds of angry users mail my customer, which in turn made him mail/phone me (in pretty much the same mood).
My first approach was to issue HTTP no-cache headers, as well as adding no-cache meta tags to my main (and only) HTML file. The second was to, naively, place each new release under its own subfolder, as this would result in different URLs for SWF modules, from one application version to another. Nothing helped. While meditating on how insanely aggressive a cache policy browsers have for SWF files (read: banging my head against the wall and cursing, and pulling my hair out and more cursing) , a solution eventually emerged: brute force.
And this is exactly what the ReVersionR application does: walks a Flex project folders tree and adds a version suffix to all source files that are responsible for producing SWF files – of course, it also changes files content to suit the new names, or nothing would compile any longer.
This is the current version’s set of features:
- automatically backs up your FLEX project folder
- lets you define a version stamp to look after and one to insert; both are optional, this allowing you to remove any versioning, should you need to
- lets you choose the file extensions to modify
- extensively reports changes as they’re being made, in a log window; also counts the current time in/out and overall progress
- lets you stop the process midway; can restore the original project folder for you, with just one click
- lets you save the log to a file, for later reference
ReVersionR is released under the Creative Commons Attribution Share Alike license, third version. Please email me bugs/features request. Current version is 1.00 alpha, released on 2009/12/23.
Download: installation file (*.air), source code (*.zip), AIR platform
RichTextEditor
This application came into being while working on a FLEX project for a customer.
Flash (and therefore Flex) only knows real basic HTML formatting: in fact, Flash player only supports some sort of a 3.1-like HTML syntax, which sets it miles behind the oldest browser around; however, even the most rude text formatting can make a Flex web application’s UI look decent – and I needed just that.
So, as I was getting deeper and deeper in weaving tons of non-standard HTML-like tags, for all my Label or Text components, I started to feel the urge for a visual text editor. And since Adobe didn’t see fit to include one in their Flex Builder’s visual editor, I set off to make one myself. (Later on, the same FLEX web application needed a visual text editor for a bulk mail sender module; this drew more attention / coding to the RichTextEditor project).
Currently, the RichTextEditor’s set of features include:
- desktop, as well as web operation: the essential editing features are grouped under a
RTEditorKernelclass, which is loosely coupled to all desktop-related logic - standard open/save/save as functionality, with safety notification on losing/overwriting unsaved content
- visual or markup content editing
- all text editing tools available in Flash/Flex, with improvements for setting fonts family and applying links
- undo/redo support, detecting when / whether the content of the document has been modified or restored relatively to last saved version
- support for inserting place holders; for instance, this could be used for personalizing an e-mail template with users names from a database
- opening custom
*.fhtmlfiles by double clicking them (fhtml stands for flash HTML)
RichTextEditor is released under the Creative Commons Attribution Share Alike license, third version. Please email me bugs/features request. Current version is 1.01 alpha, released on 2009/12/23.
Download: installation file (*.air), source code (*.zip), AIR platform
ParamsProxy
ParamsProxy is not a standalone application, rather a PHP library. The need for it emerged while I was working on a customer’s web application project.
Nowadays, it became quite customary to code PHP in an OOP style, using classes to encapsulate and build upon existing functionality – although PHP is not, in itself, an OOP language. However, while this made PHP modules creation both smooth and efficient a process, configuring these modules remained as awkward as before. Usually, one has to edit the very code that gets executed, this leading to trouble, especially when that one has little to no PHP programming skills.
So here is ParamsProxy to fill that gap: it binds – or proxies – virtually any PHP class to an XML file. To configure – or set parameters to – that class, one only has to alter the XML file.
Current version’s set of features include:
- built-in protection against reading the configuration file from the web: execution drops if the XML file is located anywhere under the
DocumentRootfolder - built-in protection against reading the configuration file via PHP includes: execution drops if the XML file is located anywhere under the
includesfolder - redundantly binding of the configuration file to the PHP class that is to be configured, by both location on disk and file content
- easy, one-time setup for an unlimited number of classes to be configured
- built-in support for sending the correct type to the class: values to be defined in the XML file can be strings, integers, floats, booleans and single layered arrays – and the target class will receive them correctly
The ParamsProxy library is also featured in the PHP Classes Repository, where it was Innovation Award Nominee in June 2009, and gained the 4th place, the same month.
ParamsProxy is released under the Creative Commons Attribution Share Alike license, third version. Please email me bugs/features request. Current version is 1.5 alpha, released on 2009/12/26.
Download: library and demo (*.zip)
DbProxy
DbProxy is not a standalone application, rather a PHP library. The need for it emerged while I was working on a customer’s web application project.
The DbProxy library is an advanced SQL query aggregator. It is built on top of ParamsProxy and makes clever use of the overloading feature of PHP5, thus providing you a completely transparent database communication mechanism. Essentially, you place SQL templates in external XML files, one file for each class that needs database access. Every such SQL template becomes a stub, a virtual PHP class method that you can invoke and pass arguments to. The arguments you invoke a stub with fill its associated SQL template. The resulting query is executed on the database. Once this query has produced a result, this result is parsed and then passed back to the originating stub, as its return value.
Current version’s set of features include:
- built-in protection against SQL injections: all data traffic between the PHP client an the MySQL server is encoded/decoded in background
- selective encoding: numeric values are sent in clear to the database, thus making numeric SQL operations in queries (such as
a > b) possible - built-in protection against accessing the queries XML file from the web (inherited from ParamsProxy)
- configurable, built-in cast of the query result, e.g.: you may specify that you need boolean output from a
SELECTquery; if there are no rows returned, you will receivefalsein your PHP code - provides total separation of database scripting (SQL code) and application logic (PHP code) tiers, allowing you to maintain each of them more easily
The DbProxy library is also featured in the PHP Classes Repository.
DbProxy is released under the Creative Commons Attribution Share Alike license, third version. Please email me bugs/features request. Current version is 1.5 alpha, released on 2009/12/26.
Download: library and demo (*.zip)
Authenticator
Authenticator is not a standalone application, rather a PHP library. The need for it emerged while I was working on a customer’s web application project.
The Authenticator is a self-contained module that provides all operations commonly needed in multi-user online environments, namely users registration, login and credentials management. Most typically, you will integrate users registration in administrator control panels, credentials management in users profile pages and login functionality in all protected areas across your entire web application. This module leverages the ParamsProxy and DbProxy libraries, thus inheriting the flexibility and safety they provide.
Current version’s set of features include:
- three levels built-in users hierarchy model: regular users, administrators and master; the regular users can be given whatever role names: this allows you to write custom code to further hierarchize them
- open or closed registration; both support an optional challenge phrase (a.k.a security question)
- credentials management operations: recovery or reset forgotten password, change existing one
- continuous authentication: the module will exchange the current session id for a new one
- built-in hack prevention system: bans an IP that made too many failed authentication attempts; terminates a session if the originating IP changes from one HTTP request to another; terminates a session after a period of inactivity; terminates session when a real, but obsolete session id is used (complements the continuous authentication feature)
- comprehensive error reporting
The Authenticator library is also featured in the PHP Classes Repository.
Authenticator is released under the Creative Commons Attribution Share Alike license, third version. Please email me bugs/features request. Current version is 1.5 alpha, released on 2010/01/07.
Download: library and demo (*.zip)
Logger
Logger is not a standalone application, rather a PHP library. The need for it emerged while I was working on a customer’s web application project.
The Logger records onto your harddisk values sent by your running PHP program. It keeps its data in one or several log files outside the web server’s reach, which makes it suitable for logging sensitive data. You’ll typically use Logger as a debugger tool, when step debugging isn’t applicable/available. The class can also be used in production, as a simple journaling solution. The library leverages ParamsProxy, which provides it both flexibility and safety.
Current version’s set of features include:
- built-in disk cost control – you may decide how much of your harddisk space the Logger is allowed to eat; you may setup a maximum log file quota and an action to take when over quota occurs: make volumes or overwrite
- built-in serialization of complex input data, via
var_dump() - built-in optional wrapping of log file content
- configurable output using templates – separate templates for log file header and entries
- built-in protection against accessing the log files from the web (inherited from ParamsProxy)
The Logger library is also featured in the PHP Classes Repository.
Logger is released under the Creative Commons Attribution Share Alike license, third version. Please email me bugs/features request. Current version is 1.5 alpha, released on 2010/01/09.
Download: library and demo (*.zip)
Cherry
This is not an application, nor library, merely a skin to use in your Flex/AIR projects. It came into being while I was working on a FLEX project for a customer.
The Cherry skin features an overall, monochrome, gray tint with sour cherry accents, color inversion – white text on a dark gray background – for form elements, and thin, white outlined icons. These give it an elegant, classy look, which makes is suitable for a broad range of web/desktop applications.
Cherry is released under the Creative Commons Attribution Share Alike license, third version. Please email me bugs/features request. Current version is 1.5 alpha, released on 2009/12/23.
Download: source code (*.zip)
