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


Monday, January 29, 2007

Hi all,

Here is a small doc for all who always wanted to know the Keyboard shortcuts for the general tasks in VS.NET IDE like commenting a code block, switching between the different views etc.

Download the doc from THIS link.


--Ashutosh

Wednesday, January 10, 2007

A new Task

Okay so I have been assigned first task at EITS and I am already feeling the difference between the level of working here and in Avinex.

I have been assigned the task to look at the prospects of implementing ECLIPSE IDE for Report development.

All these days, I have known ECLIPSE as an IDE for development of classes and writing code in JAVA. Just a user friendly interface for writing code and nothing much. But here while exploring, I realized its actually a lot more than that BUT SADLY FOR JAVA DEVELOPERS.

Apart from a mere few plugins for development with C/C++ and C# there is not much of a support in ECLIPSE for other languages. Still looking into the report designer for ECLIPSE.

The report designer has an Easy to use GUI for Rapid development of Reports and quick visualization of the same.

Best part is that the underlying code is all XML for this report and hence a universal structure. But the problem is the schema it uses for interpreting all HTML and SCRIPTING involved.

It literally dumps all the HTML and all expressions and evaluations that we add to the reports into this XML and then it basically kinda executes this XML while showing the report.

I am still looking at the prospects of using it in my Framework project, but at the moment there looks nothing much in it.


-- Ashutosh

Friday, December 29, 2006

strReverse in C#

Just came across this small piece of code while I was looking out to reverse a string in C# and soon discovered there was nothing like strReverse (in VB) in C#.

So obviously needed to look for an alternate. Got quite a few of them but this one looked quite nifty and sleek. Take a look
private string StringReverse(string ToReverse)

{

Array arr = ToReverse.ToCharArray();

Array.Reverse( arr );// reverse the string

char[] c = (char[])arr;

byte[] b = System.Text.Encoding.Default.GetBytes(c);

return System.Text.Encoding.Default.GetString(b);

}


-- Ashutosh

Wednesday, December 6, 2006

My Links

HI,


Posting after a long time. Got a bit busy with my new house. The construction has started and am really looking forward to it.


BTW. This post wasn't meant for this, but I came across quite a few interesting topics
within these days and decided to post them as a seperate post so that it could be expanded more and more to encorporate new links as and when they are found. Here are a few to start off:---------


1. Introduction to Object Oriented Programming - I

2.
Introduction to Object Oriented Programming - II

3.
Introduction to Object Oriented Programming - III

4.
Introduction to Object Oriented Programming - IV

5.
Introduction to Object Oriented Programming - V

6.
Introduction to Object Oriented Programming - VI

7. Overview of Garbage Collection and IDisposable

8. Convert VB.NET Code to C# and Vice Versa

9. Best Practices For .NET Performance

10. Unions in C#


I would like people to post comments here regarding the links and would be thankful to people if they feel they could contribute to the same and provide me the links for such interesting articles.


-- Ashutosh




Tuesday, December 5, 2006

A new beginning

Hi All,

Today I had a new beginning in my life when I stepped out of Avinex Software Pvt. Ltd. and stepped into eXtensible IT Solutions. Yes I switched my Job.

Well not so obviously, the key factor behind this change was not monetory. Yes believe me.....
I always wanted to grow. Grow in terms of technology, in terms of responsibility and also financially.

At Avinex, I had a few concerns of mine. Ever since I started programming in VB6.0, I wanted to take a dip into the world of C++ programming as well and with the advent of .NET, C# became my new affair.

Suddenly got the opportunity of being a part of a team which was bewing created for development of a product which was supposed to be working as a Middle Tier for a multi ties application AND THAT TOO IN C#. I saw this opportunity as a big one in terms of gaining a good knowledge of OO concepts as well as C#. So grabbed it with both hands.

Secondly at Avinex, I was suddenly finding myself looking straight into a glass ceiling where I could see opportunities of growth but which really were not there. This was getting on me.

And last but not the least, a raise of almost 10 grands a month is never like refusing.

Anyways thats an old story now.

The latest is that I am into eXtensible and am looking forward to a great time over there.


Cheers
--Ashutosh

Wednesday, November 22, 2006

A new experience

Today while flirting with ListBoxes and comboboxes, I figured out a strange fact (possibly a bug) with the ListBoxes (infact all List Controls).

Whenever you try to add any attribute to any listitem at runtime using
ListItem.Attributes.Add("onclick","alert('I m a listitem')")
It does add the attribute to the listitem but never really renders the same.

Eg - In case you add an attribute to the listitem above, when you check the page source, you will see something like this:
< option onclick="alert('i m a listitem')" > ListItem </option >
So the attribute has been added but when you click on this listitem, the alert will never come up.

Why Attributes Cannot Be Applied to ListItems of a List Control
Unfortunately none of the list controls render their items' attributes. This is clearly a known bug, as there are plenty of discussions on this topic on the newsgroups. If you use Reflector to poke around the source code of the list controls you'll find that they simply omit any sort of writing of the Attributes. Part of this is probably due to the fact that the ListItem class, which is the class that represents each instance of a list control prior to being rendered. The Attributes
collection is defined in the System.Web.UI.WebControls.WebControl class and automatically is persisted to view state, so that it's values persist across postbacks. Part of the problem lies in that the ListItem class does not derive from WebControl. Furthermore, while it does have an Attributes property, the values are NOT persisted to view state.

More On This And a possible Solution to this BUG on 4GuysFromRolla



BTW : - I am almost done with my CodeConvertor utility and will post the same as soon as it is complete.


-- Ashutosh
PS- Hah it took me quite some time to put the line

< option onclick="alert('i m a listitem')" > ListItem </option >
the way it looks now as the site blocks all HTML tags....;-)

Monday, November 13, 2006

Web Config Editor

Okay, so finally I finished with my web.config editor application. Removed a few shortcomings from it like. Now you have a flexibility of importing / exporting the encryption key within the application and also you can create a new key to encrypt.

Every time a new key is created, the older one gets replaced in the web.config as well.

Still looking for some host. Will try it at geocities.

The whole source code is in VB.NET and is available for download at geocities following THIS link.

You can download and play with it the way you want. And please let me know if you get to improve on the same.


-- Ashutosh