Friday, February 23, 2007

PDF Merging and Splitting

Working with my collegues on iText and seeing an application that wrote multiple PDF pages and created one document out of it, an idea clicked to me for writing an application that would merge multiple PDFs into one or even Splitt the single PDF into multiple files at will.

Currently I am done with the merging part and now the app merges the selected PDF files to generate single PDF with all the pDFs merged.

I am onto the second part: Splitting. I foresee myself completing the basic part in a day or two, i.e. it will take a single PDF and splitt it into multiple files with one page each (for ex- a PDF file with 10 pages will result in 10 PDF files with single page each.)

Now I am looking to make it more generic like you provide the resulting file name, location and each page in each file and the files are created on that basis.

Really Looking forward to it.


So wait and watch..................

--Ashutosh

Wednesday, February 14, 2007

Year 2038 problem

The Year 2038 problem The Year 2000 problem is understood by most people these days because of the large amount of media attention it received. Most programs written in the C programming language are relatively immune to the Y2K problem, but suffer instead from the Year 2038 problem.
This problem arises because most C programs use a library of routines called the standard time library (time.h). This library establishes a standard 4-byte format for the storage of time values, and also provides a number of functions for converting, displaying and calculating time values.
The standard 4-byte format assumes that the beginning of time is January 1, 1970, at 12:00:00 a.m. This value is 0. Any time/date value is expressed as the number of seconds following that zero value. So the value 919642718 is 919,642,718 seconds past 12:00:00 a.m. on January 1, 1970, which is Sunday, February 21, 1999, at 16:18:38 Pacific time (U.S.). This is a convenient format because if you subtract any two values, what you get is a number of seconds that is the time difference between them. Then you can use other functions in the library to determine how many minutes/hours/days/months/years have passed between the two times. If you have read the Tech Touch on Bits and Bytes, you know that a signed 4-byte integer has a maximum value of 2,147,483,647, and this is where the Year 2038 problem comes from. The maximum value of time before it rolls over to a negative (and invalid) value is 2,147,483,647, which translates into January 19, 2038. On this date, any C programs that use the standard time library will start to have problems with date calculations. This problem is somewhat easier to fix than the Y2K problem on mainframes, fortunately. Well-written programs can simply be recompiled with a new version of the library that uses, for example, 8-byte values for the storage format. This is possible because the library encapsulates the whole time activity with its own time types and functions (unlike most mainframe programs, which did not standardize their date formats or calculations).
So the Year 2038 problem should not be nearly as hard to fix as the Y2K problem was. An alert reader was kind enough to point out that IBM PC hardware suffers from the Year 2116 problem. For a PC , the beginning of time starts at January 1, 1980, and increments by seconds in an unsigned 32-bit integer in a manner similar to UNIX time. By 2116, the integer overflows. Windows NT uses a 64-bit integer to track time. However, it uses 100 nanoseconds as its increment and the beginning of time is January 1, 1601, so NT suffers from the Year 2184 problem.


-- Ashutosh

Friday, February 9, 2007

Strange Maxlength behaviour

Hi,

Okay another interesting issue. Anyone ever wondered about the MaxLength property of a textbox in .NET.

Yeah by default, the MaxLength is 0 and 0 obviously in this case means INFINITE stating you can put any number of characters in the textbox.

Theoritically its perfect but practically speaking, it never takes characters more than 32K

WHY....??

Okay to the extent I got to know about it, here is the reason.

TEXTBOX ---------object
TEXTBOX.TEXT ----------string
STRING.LENGTH -------- integer / int32

SO basically its the limitation of String Class and its length property (which is of Int32 type)
that limits the length of a textbox to type (Int32) and hence the reason for limitation of textbox maxlength.


--Ashutosh

Monday, February 5, 2007

Creating a new form at runtime....

Hi all,

Yesterday while supporting user @ Experts-Exchange, I came across a question asking if I could create an instance of a new FORM at runtime and show it on the screen.

Well thinking at the first instance, looks quite straight forward. Theoritically its like creating a new instance of an object and using its methods and properties.

But practically its not as easy as with any other object. Theoritically the below code shows what exactly he wanted and its exactly what we can do in general coding with any other objects.

String strFormName = "Form1";
Form frmNew = (Form)(strFormName); //A new form with the name "Form1"
frmNew.Show();

So exploring through for the same at first hit it looked impossible and thats what I thought.
But then I was guided to an article on MSDN that explained using Activator.CreateInstance For all such tasks and it looked quite obvious.

Here's the code for it.

String strFormName = "Form1";
System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly();
Form frmNew = (Form)asm.CreateInstance(asm.Getname.name + "." + strFormname, true);
frmNew.Show();

Hope someday this would be of use to me as well ;-)

--Ashutosh