Delphi fail. .NET win.
Recently, several people sent me bug reports where my EnigmaVB unpacker failed to extract files. In all cases, the problem was caused by really large files, like 3.5GB in size. So, what's causing the problem?
EnigmaVB unpacker is a 32bit application written in Delphi. And Delphi streams are retarded. They look like they've been written in 1990s and were never updated. TMemoryStream uses a continuous memory range, so it can never support anything larger than 2GB. TFileStream internally uses longint, so it doesn't properly support files larger than 2GB. WTF?
So, I have two choices. I can either make a custom stream class in Delphi, or I can pick another framework and rewrite my tool to use that.
I'm not a programmer, I'm a reverser. I don't want to spend my time developing custom stream classes. I'd very much rather use this time breaking some code. So, say hello to .NET framework - my next version of EnigmaVB unpacker will be made in C#.. 🙂
Am I a programmer or a googler?
While researching all the Delphi limitations and possible workarounds, I ran into this great article by Scott Hanselman. Reading both the post and the comments made me think a lot.
Does using Google to solve your programming tasks makes you less of a programmer? I don't think so.
In fact, I'm just lazy. Most people are. Why should I spend 30 minutes remembering basic algorithms for converting string to hex, if Google query can solve it in 10 seconds? Why reinvent the wheel and write CRC calculation from scratch? I'll just open StackOverflow and have a solution that's already tried and tested. It doesn't mean I can't do those boring tasks - I just don't want to.
How about you? Would you be able to write some tools without using Google and StackOverflow?
Coding without google or visual studio auto complete function is like driving without power-assisted steering. It worked well back in the old days and still does toady, but it's uncomfortable, annoying and doesn't improve the experience of getting from a to b.
I share your point of view, i also use google to find solution to known 'problems'. 😀 If we should write each line of our code each project will take days sometimes. Welcome laziness but always knowing how it was done before copy. 😛
It really depends on the project. When I want to experiment with a datastructure to represent x86 instructions with wildcards for instance I don't look up any code from Google. However when there is a quick task to be done I sometimes make myself guilty of looking on Stackoverflow for some code I can quickly grab (especially things related to the .NET framework which I'm not so intimate with).
Using Google doesn't make you less of a programmer though! Manuals and technical questions about the language are pretty tedious to look up in a book by hand.
It was interesting though, when I started programming in Haskell the usual Stackoverflow search often didn't apply and it did feel good to know that the solution was fully yours 🙂
It is not black and white. Sometimes you may only get a partial solution to the problem you are trying to solve. Sometimes you may find something you do not know how to use. However, if you just blindly copy/paste it and/or hack it to get it working how is that any different than a skid? On the other side, how is it any different than using reusable libraries - such as the .NET Framework? I think the difference is when you understand what you are trying to do and understand what you are using and what it is capable of. If the understanding is there, then the laziness is justified - you know you could write whatever it is you need if it was not available.
I am getting out of memory error still, so how much longer until you fix this?
Considering that you didn't even bother to tell which tool and which version you're using... Very long. 🙂