Ciubotaru - Software Developer Engineer - Dublin, Ireland

George Ciubotaru

Dublin, Ireland


Software Developer Engineer


More than 10 years experience using various technologies.

Work History

.NET Software Developer & SQL Engineer


From March 2010

Software Developer Engineer in Test

Microsoft Ireland

October 2008 - February 2010

Software Developer Engineer & Team Leader

Oce Software

April 2005 - October 2008

Software Developer Engineer

Bindkey Technologies

October 2004 - April 2005

Software Developer Engineer

Alcatel Romania

March 2002 - October 2004

software developer

WebSci Romania

October 2000 - March 2002


Mobile (phone) photography

With additional effects by Pixlr


LexicalUUIDType is used to validate and compare UUIDs. The compare part is done, as the name suggests, lexically (first most significant longs are compared and then the least significant longs). Cassandra uses java.util.UUID class that internally stores the value as two longs. The two longs will be serialized in big-endian order so the over all result will be in big-endian order (e.g. UUID "00010203-0405-0607-0809-0a0b0c0d0e0f" will be serialized to byte array [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]).

The corresponding .NET type is Guid. It internally uses 1 'int', 2 'shorts' & 8 'bytes' to store the whole 16 bytes (e.g. the UUID above will be stored into: int 0x00010203, shorts 0x0405 & 0x0607 and bytes 0x08 to 0x0f in this order). Guid.ToByteArry() method serializes the Guid by serializing each internal field individually in little-endian order which will produce a "messy" result (for the example above: [3, 2, 1, 0, 5, 4, 7, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16]).

byte[] value = guid.ToByteArray();
byte[] bytes = new byte[] { value[3], value[2], value[1], value[0], value[5], value[4], value[7], value[6], value[8], value[9], value[10], value[11], value[12], value[13], value[14], value[15] };


Internally Cassandra uses java.util.Date class and serializes 'the number of milliseconds since January 1, 1970, 00:00:00 GMT' returned by getTime() method. As in LongType case, using java.nio.ByteBuffer, the byte array is in big-endian order.

Here is the C# snippet:

TimeSpan timeSpan = dateTimeToSerialize - new DateTime(1970, 1, 1);
byte[] bytes = BitConverter.GetBytes((long)timeSpan.Ticks / 10000 );
if (BitConverter.IsLittleEndian) bytes = bytes.Reverse().ToArray();

Serialization to numeric types

Cassandra uses java.Math.BigInteger class for internal representation of IntegerType and toByteArray() method to serialize its value. Java docs for this method stipulate that it will return the byte array in big-endian order.

For the other numeric types (LongType, DoubleType, FloatType) Cassandra uses java.nio.ByteBuffer (putLong, putDouble & putFloat) to serialize the corresponding Java primitive types. These methods use default byte order which is big-endian.

On the other side, BitConverter.GetBytes returns the byte array in order defined by your machine’s architecture. Since all x86 machines are little-endian it is very likely the returned order is little-endian. But don’t take any chances and check it with BitConverter.IsLittleEndian.

byte[] bytes = BitConverter.GetBytes(intValue);
if (BitConverter.IsLittleEndian) bytes = bytes.Reverse().ToArray();

.NET types VS Cassandra types

At first glance the few build in Cassandra types map perfectly over similar .NET types (IntegerType - int, UTF8Type - string, DateType - DateTime, …).

An user will soon notice that after an 'int' is written into Cassandra through the Thrift .NET client (using BitConverter.GetBytes to serialize the 'int'), displaying the same 'int' through Cassandra CLI will result in an entirely different value. There is no mystery here: BitConverter.GetBytes serializes the 'int' differently than Cassandra does it for IntegerType. So we’ll just need to find how Cassandra serializes each internal type and reproduce the logic on the .NET client code.

I’ll try to describe in future posts the serialization format of Cassandra types and how to serialize .NET types into corresponding formats.

Last days of summer

Flash and a bit of luck

Step 3. Bring to live

A bit of Windows Live Movie Maker and here is the result.

Step 2. Post processing

There are lots of tools out there that would do the job of creating a short video from a series of photos but, since I mainly use Lightroom, I was looking for something to integrate with it. I found out that LR can actually do it itself (Slideshow screen) with a bit of help from some templates I've got from LRTimelapse is in fact a very good tool that uses LR metadata to prepare images for the timelapse video (effects like panning, zooming are easy to achieve).

Step 1. Setup

Getting ready for my first time lapse photography session. I'm planning to create a 5 seconds video with 20 FPS. So, with a 30 seconds interval I'll have to wait 50 minutes. Hopefully it won't rain.

Perspective distortion

Wide lens close to the subject (not very wide lens but still a nice effect).

Million dollar party...

... sorry... Million users party in pictures.

West Ireland

I have finally discovered Connemara. It's indeed a beautiful place and the"good" weather helped me to create some dramatic pictures.

Killiney shores

View towards Bray

The tropical island of Ireland ...

... seen from Dalkey.

Exposure bracketing

Glendalough in a new light.

1.4 aperture

50mm prime lens with 1.4 aperture = amazing depth of field

First 300mm shots

My 70-300mm zoom lens has just arrived and I've put it to test.


Please enter more detail


Please enter more detail


Pictures from Dublin and other places nearby.

Qualifications & Certifications

Computer Science

A.I. Cuza Iasi, Romania

Skillpages has been acquired by! is pioneering the way people find local services. Skillpages is the world’s premier directory of service providers.

Find out more

Are you sure that you want to leave?