Recent Articles

C#: Convert Byte to SByte »

Here is a simple way to convert SByte to Byte in C#. E.g. if you want to convert the value of 129 from data type Byte to –127 in SByte

   1: byte byteValue = 129;

   2: sbyte sb = unchecked((sbyte)byteValue);

   3: Console.WriteLine(sb);

Open Source Digital Asset Management »

Razuna is a software solution (some call it digital asset management, media asset management, digital library, media management, etc.) that delivers and makes management of your digital assets a simple task!

By using Razuna you get the benefit of it being free and open source and supported by a professional company.

With Razuna, your information can be collected, consolidated, verified, filtered, mined and always be available and secure. Razuna does all this while requiring less hardware and fewer administrators, for the lowest overall cost of ownership. A powerful solution like Razuna will achieve significant efficiency gains as well as consistency throughout the organization.

Since Razuna is based on open standards (J2EE/CFML/SQL/XML) you can rest assured that Razuna can scale with your business. For international organizations that hold already thousands of assets, Razuna can take up on your existing assets with powerful import and export tools.

Open Source SMPP Library for Java, .NET, ERLANG »

This is a sequel to my previous article on SMPP Library. Here are additional free and open source solutions.


smppapi is an Java implementation of the Short Message Peer to Peer (SMPP) protocol. SMPP is used by applications to communicate with Service Centres to send and receive short messages to & from mobile devices.

The current implementation (0.3.x) supports versions 3.3 and 3.4 of the specification. Work has begun on implementing version 5.0 of the specification.

The smppapi supports communication over the TCP/IP protocol but is extensible, allowing other network implementations to be added.

The smppapi is released under the Lesser GPL.


Easy SMPP is a SMPP protocol library for fast and easy SMSC(Short Message Service Centre) client development even for non-telecom guys. Easy to use classes covers all needed functionality for SMS applications developers and Content Providers. Written for .NET 2.0 in C#.


RoaminSMPP is a SMPP library written in C#. Intended to be fully SMPP v3.4 compliant and extensible for future versions of the spec.


smppclient is a SMPP v 3.4 protocol implementation written in Java. High configurable, with comprehensive documentation and very easy to use. Look at Wiki for examples.


This is another SMPP library that can be downloaded here.


OSERL (Open SMPP Erlang Library) is an erlang implementation of the Short Message Peer to Peer protocol.

Short Message Peer to Peer (SMPP) protocol is an open, industry standard designed to provide a flexible data communications interface for the transfer of short message data between External Short Message Entities (ESME), Routing Entities (RE) and Message Centers (MC). OSERL is an open source library that comprises the entire specification of the recently released SMPP version 5.0 (February 20th, 2003). Moreover, thanks to an appropriated design, any future and previous version of the protocol are also directly supported by OSERL.

C# Parser Framework »

Sprache is a small library for constructing parsers directly in C# code.

It isn’t an "industrial strength" framework – it fits somewhere in between regular expressions and a full-blown toolset like ANTLR.

Unlike most parser-building frameworks, you use Sprache directly from your program code, and don’t need to set up any build-time code generation tasks.

A simple parser might parse a sequence of characters:

   1: // Parse any number of capital 'A's in a row

   2: var parseA = Parse.Char('A').AtLeastOnce();

Sprache provides a number of built-in functions that can make bigger parsers from smaller ones, often callable via Linq query comprehensions:

   1: Parser<string> identifier =

   2:             from leading in Parse.Whitespace.Many()

   3:             from first in Parse.Letter.Once()

   4:             from rest in Parse.LetterOrDigit.Many()

   5:             from trailing in Parse.Whitespace.Many()

   6:             select new string(first.Concat(rest).ToArray());


   8: var id = identifier.Parse(" abc123  ");


  10: Assert.AreEqual("abc123", id);

Viewing Outlook Msg File OLE Type Attachment »

This is a bit tricky to view OLE type of attachment in Outlook .msg file. You need to use MsWord library in order to extract the attachment.

Here is the code snippet that does the trick.

   1: for(int loop = 1 ; loop < (mItem.Attachments.Count+1) ;  loop++){             

   2:       attachment = mItem.Attachments[loop];

   3:       if(attachment.Type == Outlook.OlAttachmentType.olOLE){

   4:           Object missing = Type.Missing;

   5:           mItem.SaveAs("C:\\temp\tmp.rtf",Outlook.OlSaveAsType.olRTF);

   6:           wordApp = new MsWord.Application();

   7:           doc = (MsWord.Document)wordApp.Documents.Open(ref filepath,ref missing,ref openRead,ref missing,ref missing,ref missing,ref missing,ref missing,ref missing,ref missing,ref missing,ref visible,ref missing,ref missing,ref missing,ref missing);

   8:           doc.InlineShapes[loop].Select();

   9:           doc.ActiveWindow.Selection.CopyAsPicture();

  10:           bm =(Bitmap)Clipboard.GetDataObject().GetData(typeof(Bitmap));

  11:           bm.Save("C:\\temp\bitmap.bmp");

  12:       }

  13: }

.NET Slide Control »

SlideControl is a .NET container control that manages presentation slides and offers a pleasing slide-effect when switching between slides. SlideControl has a built-in backtracking-stack that remembers slides visited and unrolls these actions on demand.

SlideControl is built with simplicity in mind:

SlickInterface.SlideControl is a container control that is placed on your Form and allows the addition of slides. A slide is a class that inherits from SlickInterface.Slide. Since SlickInterface.Slide itself is a UserControl you can use the designer to change its appearance.

Once the SlickInterface.SlideControl is in place and slides have been designed, they are added to the control

Open Source BTS For Telecommunication »

OpenBTS is an open-source Unix application that uses the Universal Software Radio Peripheral (USRP) to present a GSM air interface ("Um") to standard GSM handset and uses the Asterisk software PBX to connect calls. The combination of the ubiquitous GSM air interface with VoIP backhaul could form the basis of a new type of cellular network that could be deployed and operated at substantially lower cost than existing technologies in greenfields in the developing world.

In plain language, we are working on a new kind of cellular network that can be installed and operated at about 1/10 the cost of current technologies, but that will still be compatible with most of the handsets that are already in the market. This technology can also be used in private network applications (wireless PBX, rapid deployment, etc.) at much lower cost and complexity than conventional cellular.


Open Source Assembler »

The Netwide Assembler, NASM, is an 80×86 and x86-64 assembler designed for portability and modularity. It supports a range of object file formats, including Linux and *BSD a.out, ELF, COFF, Mach-O, Microsoft 16-bit OBJ, Win32 and Win64. It will also output plain binary files. Its syntax is designed to be simple and easy to understand, similar to Intel’s but less complex. It supports all currently known x86 architectural extensions, and has strong support for macros.

The Netwide Assembler grew out of an idea on comp.lang.asm.x86 (or possibly alt.lang.asm – I forget which), which was essentially that there didn’t seem to be a good free x86-series assembler around, and that maybe someone ought to write one.

  • a86 is good, but not free, and in particular you don’t get any 32-bit capability until you pay. It’s DOS only, too.
  • gas is free, and ports over to DOS and Unix, but it’s not very good, since it’s designed to be a back end to gcc, which always feeds it correct code. So its error checking is minimal. Also, its syntax is horrible, from the point of view of anyone trying to actually write anything in it. Plus you can’t write 16-bit code in it (properly.)
  • as86 is specific to Minix and Linux, and (my version at least) doesn’t seem to have much (or any) documentation.
  • MASM isn’t very good, and it’s (was) expensive, and it runs only under DOS.
  • TASM is better, but still strives for MASM compatibility, which means millions of directives and tons of red tape. And its syntax is essentially MASM’s, with the contradictions and quirks that entails (although it sorts out some of those by means of Ideal mode.) It’s expensive too. And it’s DOS-only.

Bless is Another Useful Hex Editor »

Bless is a high quality, full featured hex editor.

It is written in mono/Gtk# and its primary platform is GNU/Linux. However it should be able to run without problems on every platform that mono and Gtk# run.

Main Features

Bless currently provides the following features:

  • Efficient editing of large data files and block devices.
  • Multilevel undo – redo operations.
  • Customizable data views.
  • Fast data rendering on screen.
  • Multiple tabs.
  • Fast find and replace operations.
  • A data conversion table.
  • Advanced copy/paste capabilities.
  • Highlighting of selection pattern matches in the file.
  • Plugin based architecture.
  • Export of data to text and html (others with plugins).
  • Bitwise operations on data.
  • A comprehensive user manual.

To build and run the latest version of Bless you need:


Open Source Financial Technical Analysis Library »

TA-Lib is widely used by trading software developers requiring to perform technical analysis of financial market data.

  • Includes 200 indicators such as ADX, MACD, RSI, Stochastic, Bollinger Bands etc…
  • Candlestick pattern recognition
  • Open-source API for C/C++, Java, Perl, Python and 100% Managed .NET

TA-Lib is available under a BSD License allowing it to be integrated in your own open-source or commercial application.

There is also very useful technical analysis documentation and forums for traders

Plugins for HTML and CSS hi-speed coding »

zen-coding contains a set of plugins for HTML and CSS hi-speed coding.

There are two branches of Zen Coding plugins:

Zen HTML and Zen CSS are the separate plugins for TextMate and NetBeans. They are using template logic, provided by applications and based on Zen HTML Elements and Zen CSS properties documentation.

Zen Coding is the all-in-one plugin, created and supported by Sergey Chikuyonok for Aptana, TextMate, Coda and Espresso. It is based on JavaScript (for Aptana) or Python (the rest of all) script and using more advanced Zen HTML Selectors logic for building HTML.

Open Source WYSIWYG Editor »

openWYSIWYG  is a free cross-browser WYSIWYG editor that’s packed with every rich-text editing feature you need to make your content management system that much better.

Setting up openWYSIWYG is so easy, you can quickly turn any <textarea> into a powerful WYSIWYG editor with just a few simple lines of code.

Packed with every rich text editing feature you need, openWYSIWYG gives you total control over formatting your text. The ultimate <textarea> replacement for your content management system.


DENIM: Web Site and UI Design Tool »

DENIM is a system that helps web site designers in the early stages of design. DENIM supports sketching input, allows design at different refinement levels, and unifies the levels through zooming.


Version Aware Java Serialization »

cedarsoft Serialization offers version aware serialization of java object trees with maximum control. Its goal is to provide some simple classes (very small framework) that enables rapid development of versioned serialization.

cedarsoft Serialization contains a plain interface that is implemented in several ways. The most commonly used backend implementation is based on Stax. This offers high performance serialization to XML. While offering maximum control to the developer the base classes contain most of the boiler plate code and offer a nice way to reuse the serializers.

There exist several backends that can be used. The most commonly used backend is Stax/Stax-Mate.

   1: <?xml version="1.0" encoding="UTF-8"?>

   2: <?format 2.0.1?>

   3: <businessObject>

   4:   <name>theName</name>

   5:   ...

   6: </businessObject>

JD – Another Good Java Decompiler »

The “Java Decompiler project” aims to develop tools in order to decompile and analyze Java 5 “byte code” and the later versions.

JD-Core is a freeware library that reconstructs Java source code from one or more “.class” files. JD-Core may be used to recover lost source code and explore the source of Java runtime libraries. New features of Java 5, such as annotations, generics or type “enum”, are supported. JD-GUI and JD-Eclipse include JD-Core library.

JD-GUI is a standalone graphical utility that displays Java source codes of “.class” files. You can browse the reconstructed source code with the JD-GUI for instant access to methods and fields.

JD-Eclipse is a plug-in for the Eclipse platform. It allows you to display all the Java sources during your debugging process, even if you do not have them all.

JD-Core, JD-GUI and JD-Eclipse are free for non-commercial use. This means that JD-Core, JD-GUI and JD-Eclipse shall not be included or embedded into commercial software products. Nevertheless, these projects may be freely used for personal needs in a commercial or non-commercial environments.


  • JD-Core and JD-GUI are written in C++. This allows an extremely fast decompilation and a display.
  • JD-Core does not require the Java runtime environment for its functioning, therefore no special setup is required.
  • JD-Core works with most current compilers including the following:
    • jdk1.1.8
    • jdk1.3.1
    • jdk1.4.2
    • jdk1.5.0
    • jdk1.6.0
    • jikes-1.22
    • harmony-jdk-r533500
    • Eclipse Java Compiler v_677_R32x, 3.2.1 release
    • jrockit90_150_06
  • JD-Core supports the following new features of Java 5:
    • Annotations
    • Generics
    • Type “enum”
  • JD-GUI supports Drag and Drop.
  • JD-GUI supports JAR files.
  • JD-GUI displays color coded Java source code.
  • JD-GUI allows you to browse the “class” files hierarchy.
  • JD-GUI displays “log” files, and allow you to decompile “class” files appearing in Java stack t

Merge .NET Assemblies into Single Assembly »

ILMerge is a utility for merging multiple .NET assemblies into a single .NET assembly. It works on executables and DLLs alike and comes with several options for controlling the processing and format of the output. See the accompanying documentation for details.

ILMerge is a utility that can be used to merge multiple .NET assemblies into a single assembly. ILMerge takes a set of input assemblies and merges them into one target assembly. The first assembly in the list of input assemblies is the primary assembly. When the primary assembly is an executable, then the target assembly is created as an executable with the same entry point as the primary assembly. Also, if the primary assembly has a strong name, and a .snk file is provided, then the target assembly is re-signed with the specified key so that it also has a strong name.

ILMerge is packaged as a console application. But all of its functionality is also available programmatically.

There are several options that control the behavior of ILMerge. See the documentation that comes with the tool for details.

ILMerge runs in the v2.0 .NET Runtime, but it is also able to merge v1 or v1.1 assemblies. However it can merge PDB files only for v2 assemblies.
Currently, ILMerge works only on Windows-based platforms. It does not yet support Rotor or Mono.

Open Source DNS Benchmark Tool »

namebench hunts down the fastest DNS servers available for your computer to use. namebench runs a fair and thorough benchmark using your web browser history, tcpdump output, or standardized datasets in order to provide an individualized recommendation. namebench is completely free and does not modify your system in any way. This project began as a 20% project at Google.

namebench runs on Mac OS X, Windows, and UNIX, and is available with a graphical user interface as well as a command-line interface.

namebench was written using open-source tools and libraries such as Python, Tkinter, PyObjC, dnspython, jinja2 and graphy.


GSM Sniffer »

AirProbe is the new home of the former GSM-Sniffer project. The goal is to build an air-interface analysis tool for the GSM (and possible later 3G) mobile phone standard. The prime motivation is to learn the details of the technology, help people who develop other open GSM technology (like OpenBTS, OpenMoko?, BS11/OpenBSC and others) and demonstrate the insecurity of the current standard.

AirProbe is divided into three main subprojects: Acquisition, Demodulation and Analysis.

Acquisition The Acquisition module is hardware dependent and contains everything that has to do with receiving and digitizing the air interface. This is the part that needs to be rewritten for different receiver hardware, so it should be kept small and limited to the necessary functions. Most parts should be inherited from GNURadio, to keep workload limited.

DeModulation The Demodulation module contains all necessary code to make bits out of the signal captured by Acquisition. It is in principle hardware independent, but should be open to use DSPs is desired.

Analysis This module contains all the protocol parsing and decoding. Wireshark can be used to handle parts of the visualisation and UI tasks. An important part of the Analysis module is non-realtime A5 DeCryption based on a generic fast CPU. Realtime or near-realtime A5 dercyption is not a goal of the project. For purposes of protocol analysis and demonstration of insecurities, non-realtime decryption is sufficient.

Gsmdecode is used to decode the gsm messages from the gammu trace log and a Nokia DCT3 mobile phone. Nokia used a simple remote logging facility for debugging their DCT3 firmwares remotely, but apparently forgot to remove this when going into production. So you can enable it back with a special software described below.

Create CSS Sprite Easily »

Background images make pages look good, but also make them slower. Each background image is an extra HTTP request. There’s a fix: combine background images into a CSS sprite. But creating sprites is hard, requiring arcane knowledge and lots of trial and error. SpriteMe removes the hassles with the click of a button.

Try the SpriteMe demo to see how SpriteMe:

  • finds background images
  • groups images into sprites
  • generates the sprite
  • recomputes CSS background-positions
  • injects the sprite into the current page

Open Source Atom Implementation »

The goal of the Apache Abdera project is to build a functionally-complete, high-performance implementation of the IETF Atom Syndication Format (RFC 4287) and Atom Publishing Protocol (RFC 5023) specifications.

Abdera is composed of a number of individual modules:

  • Core: Provides the core interfaces used throughout Abdera:
    • Feed Object Model – A set of Java interfaces and abstract classes modeled after the various document and element types defined by the Atom specifications.
    • Parser and Factory interfaces – Interfaces that provide the mechanisms for creating and consuming Atom documents.
    • ExtensionFactory – The primary means by which extensions to the Atom format are integrated into Abdera. Extension Factories are used by both the Parser and Factory.
    • Writer – The means by which Feed Object Model objects are serialized into XML or other formats
    • ParseFilter – Provides a means of filtering the stream of parse events
    • Converter – Base interfaces and utilities for converting objects into Feed Object Model objects
    • XPath – Base interface for navigating the Feed Object Model using XPath
  • Dependencies: Contains all of the other jars and code Abdera depends on
  • Parser: Provide an implementation of the Feed Object Model based on the Apache Axiom project
  • Protocol: Provides the base interfaces and utility classes used for the RFC 5023 (Atompub) implementation
  • Server: Provides framework code used to build Atompub servers
  • Client: Provides an Atompub client implementation that is based on the Apache Commons HTTP Client.
  • Spring: Extends the Server module by adding support for the Spring framework
  • Security: Provides support for XML Digital Signatures and XML Encryption
  • Extensions: Provides support for a number of standard and non-standard extensions to the Atom format
    • Atom Threading Extensions
    • Atom License Extension
    • Atompub Feature Discovery
    • Atom Bidi Attribute
    • Feed Paging and Archiving
    • GeoRSS
    • Simple Sharing Extensions
    • MediaRSS
    • OpenSearch
    • GData and WSSE Autbentication
  • Examples: Provides a number of examples