Tuesday, June 30, 2009

BSD, Linux, OpenSolaris Filesystem Encryption - FSE

Similar to my DVD Catalog project ( :) ), I have been searching for a good (transparent) filesystem encryption for my open source operating system(s).

ZFS is a very good option but the encryption module is currently in beta. (And ofcourse, with the usual license problems)


So, I am planning to write a transparent filesystem encryption module for using with any exisiting filesystems and OSes (Unix-based).

== The Design ==

User view:
The user mounts a harddrive (say, /dev/sda1) as an encrypted drive (say, /dev/esda1). And will use any of the exisiting filesystems to format and mount this /dev/esda1 onto a mount-point.


Developer's view:

The module reads/writes from the actual harddrive (or another loopback FS) by encrypting/decrypting the data. For data I/O the module exports a device, say, /dev/esda1. Which is emulated as a harddisk for the existing filesystem modules.


This would be very similar to a loop-back filesystem with encrpytion.



== But, Before I start ==
Unlike DVD Catalog project, I would like to get options and opinions before starting this project.

1) Are there any exisiting projects like this or very similar to this?
2) Are there any other alternatives/file systems?
3) Are there any other better designs?

Sunday, June 21, 2009

Financial Statements Analysis of MindTree Limited.

Brief on MindTree
MindTree is a global IT Solutions Company specializing in IT Services, Product Engineering, Infrastructure Management and Technical Support (IMTS), Independent Testing and Knowledge Services that was started in 1999. (Source: http://en.wikipedia.org/wiki/MindTree)

MindTree's key development centers are in Bangalore, Chennai and Pune. It has offices in over 15 locations spread around the world. MindTree crossed USD 100 million in revenues in April 2006; the fastest Indian IT company to achieve the target.


Few Strategies (listed in Annual Report),
* New service offerings
* Leveraging existing client relationships
* Targeting large clients & expansion in non-US markets
* Innovations and new technologies
* Leverage both organic and in-organic growth
* Strengthen "MindTree" brand

A long list of good initiatives to defend (or attack) the recession. This could be the 2nd major recession MindTree is facing - the first one being the dotcom burst (~2001).


FSAS
MindTree's stock has been on a rise since the announcement of results. It was volatile till a few days back and has started tracking NSE/BSE index movements very closely recently.

This saturday & sunday I decided to analyze MindTree's Annual Report to know if I should invest now or wait. Here's the report: My website or docstoc or scribd

In brief

Current market price: 425
Target price: ~200
Trade Call: Sell
Investment Risk Level: High Risk
P/E: ~53
Gross margins: 32.54%
Net margins: 3.55%
ROE: 6%


For details refer the report.

Please let me know your opinion, suggestions, advices, ...in the comments section of this post. Thank you.

PS: If you want to re-publish the report contact me :)

Wednesday, June 10, 2009

DVD Catalog - A CD/DVD Management Software

I was looking for an open source CD/DVD Management software for a long time. Didn't really find one - either I was looking at wrong places or searching for wrong key worlds (I guess this should be evident from the way I have named my creation :P).

I also wanted to see how good/bad QT SDK/framework is - heard its like write once and compile/run everywhere types.

So, I combined these two wishes and this summer I finally decided that I would start this project (that would be some 2 or 3 weeks back) and put in a few days of effort on it. Since my initial experiences with SQLite3 were really good, I chose to use it for this project as well. Last weekend I got it working with basic features up and running (like index a directory and search the database).

Try it out @ http://code.google.com/p/dvd-catalog Just extract and run the dvd-catalog.exe file
I only have win32 (Windows 32bit/64bit environments) binaries. I will be adding the Linux binaries in a few days, but I sure need help for adding the OS X binaries - I don't have an Apple MAC to build it on.
You can also download the source code there - I have released them as GPLv3. Don't complain on the code quality - its learning qt types :)
There are, of course, NO 'security-layer' or 'sql sanity checks' done. Hopefully I will do a few data sanity checks, but security layer, I guess is not required - since this is supposed to be a "personal" CD/DVD Management software.

Do comment on the improvements, code, ideas, ...I will sure consider them for implementation/correction/...

I guess, I need a few more features like:
0. Few improvements - like commit() only after all the entries are added to the database. I guess even though I am actually doing this, I see commit happening after ever add of the file. This would be a high priority.
1. Adding a single line entry (will be useful to add DVD Movies) into the database
2. Changing ratings
3. Indexing only directories (i.e directory names and not files)
Further,
4. Viewing reviews from internet (say imdb or wikipedia or software/games reviews) for a particular file/file type.

Also, let me know if you want to contribute to this project - I can add you to the list.


Few Screenshots:

Monday, June 1, 2009

Logical AND & OR confusions

I have seen many people getting confused with logical AND and logical OR - especially when writing programs. This used to happen to me during my initial learning days with C programming.

Debug this:
if(string!=NULL || string != empty)
{
/* Use the string to do some work, say */
print(string);
}

The above condition will always execute - beware it might also cause an application crash.

What most programmers expect to do is:
if(string==NULL || string == empty)
{
/* Skip the operations */
}
else
{
/* Use the string to do some work, say */
print(string);
}

Which actually should have translated to:
if(!(string == NULL || string == empty))
{
/* Use the string to do some work, say */
print(string);
}

Which can be coded as:
if(string != NULL && string != empty)
{
/* Use the string to do some work, say */
print(string);
}

Note the logical AND.

If you think you get confused with AND/OR, don't worry you are not alone.

PS: This is similar to the rule ~(p or q) == (~p and ~q)