Domain: goingware.com
Stories and comments across the archive that link to goingware.com.
Comments · 613
-
I'm a Reverse EngineerI also posted this in the discussion at ZDNet, although it hasn't been posted by the moderators yet as I write this.
I'm a reverse engineer. The very first contract job I did when I started my new consulting business was to reverse engineer the file format for a project management database used by the motion picture industry.
My client, Graphical Planet, wanted to make a product that would interoperate with Movie Magic Scheduling. Only the Movie Magic publishers wouldn't tell them how, and in fact were quite unfriendly towards them.
We initially agreed that I would complete the reverse engineering in a week and be paid $1500.
It actually took me three weeks, and was some of the most difficult work I have done as a programmer - while it was interesting, it was mentally painful, like cracking an enemy code. Perhaps what made it worse was that I desperately needed the money and only would get paid if I succeeded.
In the end I was able to write up a detailed file format specification document, and I also wrote a C program that would dump the contents of a MM project file into a human-readable text file. I successfully tested it by dumping out the full project file from an actual full-length motion picture.
How did I do it? I created lots of little sample files, for example, my first document I added only the letter "A" in one field, then made a second, where I changed that to the letter "B". I made hex dumps of the files and then compared the hex dumps. A lot of the work went into trying to find the best kind of files to make for my testing.
I want to point out that, until the DMCA reverse engineering was always perfectly legal in the US, and in fact state trade secret protection laws specifically grant reverse engineering an exemption from trade secret protections.
Even now, most things are still legal to reverse engineer, and I think it is likely that the DMCA will be found unconstitutional - or some applications of it will be, for example the Content Scrambling System is clearly a violation of well-established antitrust laws.
One of the reasons that reverse engineering is legally protected, I understand, is that it is not the public's objective that novel inventions be kept secret.
What the government would prefer a company do if it wants to have a monopoly over an invention is to apply for a patent, because part of the patent application is a full disclosure of the invention (sufficiently detailed that some one expert in the art could reproduce it), and then the monopoly is granted for a limited time.
Twenty years may seem like forever in high-tech, but keep in mind that the monopoly does eventually come to an end. This is why we have generic drugs, for example, and also not that the patent on RSA public key cryptography, the basis of PGP encryption and the SSL or secure socket layer, used for https secure web pages, expired in September of this year.
-
This would have prevented some memorable emailsI guess this would have prevented me from writing my resignation letter from a company that moved from beautiful Scotts Valley to Silicon Valley in an ill-fated bid to attract more talent.
I used Eudora. Live Picture is just about done with its bankrupcy proceedings.
I'm afraid I didn't save the letter (which I think was one of the best things I ever wrote), but I remember saying that Live Picture was special because it provided quality technical employment in Santa Cruz County, but in Silicon Valley it would be just another software company in a sea of faceless companies stretching from horizon to horizon.
I copied the resignation widely throughout the company (including the president) three hours after the president announced plans for the move. Later that evening I began collecting URLs to list in the first version of the above-linked web page and a few days later quietly passed out the URLs to my fellow employees.
The president, (ahem) "resigned" after losing tens of millions of dollars.
Usually my very best emails are flames...
-
My own little bit of subversionHere's my own little bit of subversion. It's not subversive software, but it's a programmer speaking out to other programmers and against the interests of an entrenched industry: high-tech headhunters:
Market Yourself - Tips for High-Tech Consultants
Important Note to Recruiters and Contract Agencies
I get quite a few positive responses from other consultants from these pages - and rare responses from headhunters asking why I'm taking food from their children's mouths.
I don't have anything against recruiters who practice their business in an ethical way, but "ethical" no longer describes the standard practice of the headhunting business.
For example, one person who read my page wrote in to say that a recruiter had sent her to an employer's office for an interview, without the interview actually having been scheduled. She found out she was neither expected nor welcome after waiting in the reception area for 45 minutes. The recruiter had failed to secure an interview and hoped the employer would just feel sorry for the candidate and interview her anyway.
Of course, I have to say that I felt pretty secure in my career before posting these pages.
-
My own little bit of subversionHere's my own little bit of subversion. It's not subversive software, but it's a programmer speaking out to other programmers and against the interests of an entrenched industry: high-tech headhunters:
Market Yourself - Tips for High-Tech Consultants
Important Note to Recruiters and Contract Agencies
I get quite a few positive responses from other consultants from these pages - and rare responses from headhunters asking why I'm taking food from their children's mouths.
I don't have anything against recruiters who practice their business in an ethical way, but "ethical" no longer describes the standard practice of the headhunting business.
For example, one person who read my page wrote in to say that a recruiter had sent her to an employer's office for an interview, without the interview actually having been scheduled. She found out she was neither expected nor welcome after waiting in the reception area for 45 minutes. The recruiter had failed to secure an interview and hoped the employer would just feel sorry for the candidate and interview her anyway.
Of course, I have to say that I felt pretty secure in my career before posting these pages.
-
I archived #125 on my programming tips pageI have archived comment 125 on GoingWare Inc.'s Bag of Programming Tips as Study Fundamentals, Not APIs, Tools or OSes.
If you feel that the page is useful (and I hope it is), please pass the URL to your friends and colleagues and link to it from your own pages.
Other tips on the slowly-growing site are MacsBug Tips and Tricks and Market Yourself - Tips for High-Tech Consultants.
-
I archived #125 on my programming tips pageI have archived comment 125 on GoingWare Inc.'s Bag of Programming Tips as Study Fundamentals, Not APIs, Tools or OSes.
If you feel that the page is useful (and I hope it is), please pass the URL to your friends and colleagues and link to it from your own pages.
Other tips on the slowly-growing site are MacsBug Tips and Tricks and Market Yourself - Tips for High-Tech Consultants.
-
I archived #125 on my programming tips pageI have archived comment 125 on GoingWare Inc.'s Bag of Programming Tips as Study Fundamentals, Not APIs, Tools or OSes.
If you feel that the page is useful (and I hope it is), please pass the URL to your friends and colleagues and link to it from your own pages.
Other tips on the slowly-growing site are MacsBug Tips and Tricks and Market Yourself - Tips for High-Tech Consultants.
-
I archived #125 on my programming tips pageI have archived comment 125 on GoingWare Inc.'s Bag of Programming Tips as Study Fundamentals, Not APIs, Tools or OSes.
If you feel that the page is useful (and I hope it is), please pass the URL to your friends and colleagues and link to it from your own pages.
Other tips on the slowly-growing site are MacsBug Tips and Tricks and Market Yourself - Tips for High-Tech Consultants.
-
Study Fundamentals Not API's, Tools or OSesI heartily agree.
I'd further like to say that I think everyone should spend less time concentrating on learning specific API's in great detail, and instead focus on improving your core skills and fundamental understanding of programming.
I used to spend a lot of time learning API's (bought every volume of Inside Macintosh as they came out, and when I was just starting out and broke and hungry, used to read them in the bookstore before I could afford to buy them).
I prided myself on knowing all the little bugs and intricacies of the MacOS so I could just know to code around an OS bug without having to research why my code didn't work. I got so good that I was hired as an OS engineer at Apple where I concentrated on debugging the MacOS system software with MacsBug (a machine level debugger) - I had the MacOS source code at my disposal but that usually didn't help when I was visiting a tester's cubicle to diagnose a machine with a hard-to-reproduce crash.
Then I moved to the BeOS, shipped a product and wrote a lot of code but got fed up with their lack of commitment to their developers. And without getting paid to write BeOS code, I never could keep up with the BeOS API's I wanted to work with, like the new Media Kit (which I do know enough about to say it is pretty cool).
A couple years back I stopped spending much time learning and mostly just cranked out routine code. I felt I didn't want to learn anymore because, as I would sometimes say:
I feel that if I have to learn another API my head will surely explode.
Ever since I read C++ Answers from Bjarne Stroustrup I got the gumption to start learning again. What I decided to do was go back to learning the basics.I read Scott Meyers' Effective C++ and More Effective C++ and as I read through each item I inspected my program top to bottom and applied the advice to it (thus fixing a lot of bugs).
I also bought Bjarne Stroustrup's The C++ Programming Language: Special Edition (I recommend the special edition to professional programmers).
I started reading the newsgroups comp.lang.c++, comp.lang.c++.moderated and comp.std.c++ and posting questions there - in one case I found a construction on the very edge of the C++ standard and as a result of a compiler bug managed to instantiate an object of an abstract base class - its pure virtual function had a nil pointer in the vtbl and my program would crash when this function was called. An engineer from the compiler vendor read my post on the newsgroup, agreed that it was a bug that his product would compile my code, and logged a bug.
I didn't used to use the Standard Template Library very much at all. I had read too many mailing list and newsgroup postings from people whose code wouldn't compile when they changed platforms.
But I figured that by now compilers must have matured enough I could reasonably start trying out the STL. I bought STL Tutorial and Reference Guide by Musser and Stepanov and actually only read a little bit of it before I realized that the STL is actually really easy to use (the API is very simple and uniform), so if you know only a very little bit you can go a very long way.
In part because of challenging myself I became overwhelmed with programming stuckness as discussed in Overcomming Programmer's Block? (sic) and I suppose grew a little bit by taking a week off without pay to rest, contemplate, study and take a broader view of architectural issues.
One thing that helped quite a bit was learning about Extreme Programming.
These things have all had direct payoff in my code, both in making my code quicker to write, easier to debug, easier to make my classes more reusable within the one program I've been writing the last few months, and I'm pretty sure more likely to make some of the code I've written reusable in most any program in the future.
It's also made it a lot more pleasant.
But don't listen to the headhunters - what they're looking for is "skill sets" and industry buzzwords (COM, COM+, DCOM, TCP/IP, Visual C++, ASP, SQL, device drivers, CORBA, Unix internals, Java, Perl, PHP, JSP) - I get recruiter calls looking for all kinds of acronyms, most of which I don't mention anywhere on my resume.
Even I advise listing every skill keyword you can legimately claim on your online resume in Market Yourself - Tips for High-Tech Consultants - but while listing skillsets may be a valuable jobhunting tool in your resume, acquiring them should not be your focus.
BTW, when someone asks me whether they should learn Java or C++, I usually advise beginners to learn Java as it's easier to get something working reliably without crashing, but emphasize they should learn both languages as well as at least one kind of assembly code. I stress that it's important to learn both C++ and Java well enough to understand the strengths and weaknesses of each (pop quiz - why does Optimizeit claim to remove memory leaks from Java programs, when Java is a garbage collected language?).
Most new programmers these days are most concerned with which language will make them the most money the fastest. I tell them that they won't go anywhere until they can pick up any new programming language as a matter of course and have at least a couple under their belt.
I've got bad news for you neophytes - friends, just knowing a programming language doesn't win you very much in the work world, you have to understand the concepts and how to apply them, and you have to know how to apply them in a production environment, working in a business under pressure, shipping working products and dealing with people who don't understand anything of substance about computers.
Your focus should be on acquiring skills that will be applicable to any program you write. You should just learn enough of a skill or tool to get the job done and then leave it. Take with you what can be applied anywhere.
BTW - learning the fundamentals and not getting too specialized enables you to develop for any platform, as I do - you can see this from my homepage. (Perhaps one reason why I prefer understanding the fundamentals is that my degree is in Physics, and I've always wanted to understand things at a fundamental level - Quantum Mechanics, Particle Physics, Cosmology and so on.)
One final word of advice - read The Forum on Risks to the Public in Computers and Related Systems. It's often entertaining and funny, occassionally tragic, usually insightful and will make you a more responsible programmer and a wiser computer user. You'll certainly learn to avoid using computers for anything of real importance and take extra caution to protect yourself when you choose to do so.
-
Study Fundamentals Not API's, Tools or OSesI heartily agree.
I'd further like to say that I think everyone should spend less time concentrating on learning specific API's in great detail, and instead focus on improving your core skills and fundamental understanding of programming.
I used to spend a lot of time learning API's (bought every volume of Inside Macintosh as they came out, and when I was just starting out and broke and hungry, used to read them in the bookstore before I could afford to buy them).
I prided myself on knowing all the little bugs and intricacies of the MacOS so I could just know to code around an OS bug without having to research why my code didn't work. I got so good that I was hired as an OS engineer at Apple where I concentrated on debugging the MacOS system software with MacsBug (a machine level debugger) - I had the MacOS source code at my disposal but that usually didn't help when I was visiting a tester's cubicle to diagnose a machine with a hard-to-reproduce crash.
Then I moved to the BeOS, shipped a product and wrote a lot of code but got fed up with their lack of commitment to their developers. And without getting paid to write BeOS code, I never could keep up with the BeOS API's I wanted to work with, like the new Media Kit (which I do know enough about to say it is pretty cool).
A couple years back I stopped spending much time learning and mostly just cranked out routine code. I felt I didn't want to learn anymore because, as I would sometimes say:
I feel that if I have to learn another API my head will surely explode.
Ever since I read C++ Answers from Bjarne Stroustrup I got the gumption to start learning again. What I decided to do was go back to learning the basics.I read Scott Meyers' Effective C++ and More Effective C++ and as I read through each item I inspected my program top to bottom and applied the advice to it (thus fixing a lot of bugs).
I also bought Bjarne Stroustrup's The C++ Programming Language: Special Edition (I recommend the special edition to professional programmers).
I started reading the newsgroups comp.lang.c++, comp.lang.c++.moderated and comp.std.c++ and posting questions there - in one case I found a construction on the very edge of the C++ standard and as a result of a compiler bug managed to instantiate an object of an abstract base class - its pure virtual function had a nil pointer in the vtbl and my program would crash when this function was called. An engineer from the compiler vendor read my post on the newsgroup, agreed that it was a bug that his product would compile my code, and logged a bug.
I didn't used to use the Standard Template Library very much at all. I had read too many mailing list and newsgroup postings from people whose code wouldn't compile when they changed platforms.
But I figured that by now compilers must have matured enough I could reasonably start trying out the STL. I bought STL Tutorial and Reference Guide by Musser and Stepanov and actually only read a little bit of it before I realized that the STL is actually really easy to use (the API is very simple and uniform), so if you know only a very little bit you can go a very long way.
In part because of challenging myself I became overwhelmed with programming stuckness as discussed in Overcomming Programmer's Block? (sic) and I suppose grew a little bit by taking a week off without pay to rest, contemplate, study and take a broader view of architectural issues.
One thing that helped quite a bit was learning about Extreme Programming.
These things have all had direct payoff in my code, both in making my code quicker to write, easier to debug, easier to make my classes more reusable within the one program I've been writing the last few months, and I'm pretty sure more likely to make some of the code I've written reusable in most any program in the future.
It's also made it a lot more pleasant.
But don't listen to the headhunters - what they're looking for is "skill sets" and industry buzzwords (COM, COM+, DCOM, TCP/IP, Visual C++, ASP, SQL, device drivers, CORBA, Unix internals, Java, Perl, PHP, JSP) - I get recruiter calls looking for all kinds of acronyms, most of which I don't mention anywhere on my resume.
Even I advise listing every skill keyword you can legimately claim on your online resume in Market Yourself - Tips for High-Tech Consultants - but while listing skillsets may be a valuable jobhunting tool in your resume, acquiring them should not be your focus.
BTW, when someone asks me whether they should learn Java or C++, I usually advise beginners to learn Java as it's easier to get something working reliably without crashing, but emphasize they should learn both languages as well as at least one kind of assembly code. I stress that it's important to learn both C++ and Java well enough to understand the strengths and weaknesses of each (pop quiz - why does Optimizeit claim to remove memory leaks from Java programs, when Java is a garbage collected language?).
Most new programmers these days are most concerned with which language will make them the most money the fastest. I tell them that they won't go anywhere until they can pick up any new programming language as a matter of course and have at least a couple under their belt.
I've got bad news for you neophytes - friends, just knowing a programming language doesn't win you very much in the work world, you have to understand the concepts and how to apply them, and you have to know how to apply them in a production environment, working in a business under pressure, shipping working products and dealing with people who don't understand anything of substance about computers.
Your focus should be on acquiring skills that will be applicable to any program you write. You should just learn enough of a skill or tool to get the job done and then leave it. Take with you what can be applied anywhere.
BTW - learning the fundamentals and not getting too specialized enables you to develop for any platform, as I do - you can see this from my homepage. (Perhaps one reason why I prefer understanding the fundamentals is that my degree is in Physics, and I've always wanted to understand things at a fundamental level - Quantum Mechanics, Particle Physics, Cosmology and so on.)
One final word of advice - read The Forum on Risks to the Public in Computers and Related Systems. It's often entertaining and funny, occassionally tragic, usually insightful and will make you a more responsible programmer and a wiser computer user. You'll certainly learn to avoid using computers for anything of real importance and take extra caution to protect yourself when you choose to do so.
-
Study Fundamentals Not API's, Tools or OSesI heartily agree.
I'd further like to say that I think everyone should spend less time concentrating on learning specific API's in great detail, and instead focus on improving your core skills and fundamental understanding of programming.
I used to spend a lot of time learning API's (bought every volume of Inside Macintosh as they came out, and when I was just starting out and broke and hungry, used to read them in the bookstore before I could afford to buy them).
I prided myself on knowing all the little bugs and intricacies of the MacOS so I could just know to code around an OS bug without having to research why my code didn't work. I got so good that I was hired as an OS engineer at Apple where I concentrated on debugging the MacOS system software with MacsBug (a machine level debugger) - I had the MacOS source code at my disposal but that usually didn't help when I was visiting a tester's cubicle to diagnose a machine with a hard-to-reproduce crash.
Then I moved to the BeOS, shipped a product and wrote a lot of code but got fed up with their lack of commitment to their developers. And without getting paid to write BeOS code, I never could keep up with the BeOS API's I wanted to work with, like the new Media Kit (which I do know enough about to say it is pretty cool).
A couple years back I stopped spending much time learning and mostly just cranked out routine code. I felt I didn't want to learn anymore because, as I would sometimes say:
I feel that if I have to learn another API my head will surely explode.
Ever since I read C++ Answers from Bjarne Stroustrup I got the gumption to start learning again. What I decided to do was go back to learning the basics.I read Scott Meyers' Effective C++ and More Effective C++ and as I read through each item I inspected my program top to bottom and applied the advice to it (thus fixing a lot of bugs).
I also bought Bjarne Stroustrup's The C++ Programming Language: Special Edition (I recommend the special edition to professional programmers).
I started reading the newsgroups comp.lang.c++, comp.lang.c++.moderated and comp.std.c++ and posting questions there - in one case I found a construction on the very edge of the C++ standard and as a result of a compiler bug managed to instantiate an object of an abstract base class - its pure virtual function had a nil pointer in the vtbl and my program would crash when this function was called. An engineer from the compiler vendor read my post on the newsgroup, agreed that it was a bug that his product would compile my code, and logged a bug.
I didn't used to use the Standard Template Library very much at all. I had read too many mailing list and newsgroup postings from people whose code wouldn't compile when they changed platforms.
But I figured that by now compilers must have matured enough I could reasonably start trying out the STL. I bought STL Tutorial and Reference Guide by Musser and Stepanov and actually only read a little bit of it before I realized that the STL is actually really easy to use (the API is very simple and uniform), so if you know only a very little bit you can go a very long way.
In part because of challenging myself I became overwhelmed with programming stuckness as discussed in Overcomming Programmer's Block? (sic) and I suppose grew a little bit by taking a week off without pay to rest, contemplate, study and take a broader view of architectural issues.
One thing that helped quite a bit was learning about Extreme Programming.
These things have all had direct payoff in my code, both in making my code quicker to write, easier to debug, easier to make my classes more reusable within the one program I've been writing the last few months, and I'm pretty sure more likely to make some of the code I've written reusable in most any program in the future.
It's also made it a lot more pleasant.
But don't listen to the headhunters - what they're looking for is "skill sets" and industry buzzwords (COM, COM+, DCOM, TCP/IP, Visual C++, ASP, SQL, device drivers, CORBA, Unix internals, Java, Perl, PHP, JSP) - I get recruiter calls looking for all kinds of acronyms, most of which I don't mention anywhere on my resume.
Even I advise listing every skill keyword you can legimately claim on your online resume in Market Yourself - Tips for High-Tech Consultants - but while listing skillsets may be a valuable jobhunting tool in your resume, acquiring them should not be your focus.
BTW, when someone asks me whether they should learn Java or C++, I usually advise beginners to learn Java as it's easier to get something working reliably without crashing, but emphasize they should learn both languages as well as at least one kind of assembly code. I stress that it's important to learn both C++ and Java well enough to understand the strengths and weaknesses of each (pop quiz - why does Optimizeit claim to remove memory leaks from Java programs, when Java is a garbage collected language?).
Most new programmers these days are most concerned with which language will make them the most money the fastest. I tell them that they won't go anywhere until they can pick up any new programming language as a matter of course and have at least a couple under their belt.
I've got bad news for you neophytes - friends, just knowing a programming language doesn't win you very much in the work world, you have to understand the concepts and how to apply them, and you have to know how to apply them in a production environment, working in a business under pressure, shipping working products and dealing with people who don't understand anything of substance about computers.
Your focus should be on acquiring skills that will be applicable to any program you write. You should just learn enough of a skill or tool to get the job done and then leave it. Take with you what can be applied anywhere.
BTW - learning the fundamentals and not getting too specialized enables you to develop for any platform, as I do - you can see this from my homepage. (Perhaps one reason why I prefer understanding the fundamentals is that my degree is in Physics, and I've always wanted to understand things at a fundamental level - Quantum Mechanics, Particle Physics, Cosmology and so on.)
One final word of advice - read The Forum on Risks to the Public in Computers and Related Systems. It's often entertaining and funny, occassionally tragic, usually insightful and will make you a more responsible programmer and a wiser computer user. You'll certainly learn to avoid using computers for anything of real importance and take extra caution to protect yourself when you choose to do so.
-
School Should Require Code to Work AnywhereThe school should not only allow you to use a different environment - it should require it.
They should offer a choice of several development environments (on a Pentium box, you could use Codewarrior, Microsoft Visual C++, Borland, gcc under Windows with Cygwin or under Linux or BSD, or Solaris with the Sun C++ compiler).
The best thing would be to have machines that have multiple operating systems installed mounting your home directory off a server so you can reboot and try a different compiler.
Not only is it educational to compile under different environments, it helps to keep you from using compiler-specific features that lock your code into a specific platform (you use the pedantic option on gcc and don't use the gcc extensions, do you), but also building your code under multiple compilers will find bugs in syntactically incorrect code that won't compile in one compiler but will compile and run and do who-knows-what under another.
(This is one of the reasons Be, Inc. still supports the BeOS under PowerPC even though Pentium has an overwhelmingly larger customer base - it helps them to validate their code and keeps their code portable. They found lots of bugs when they moved from Codewarrior to gcc on their Pentium version, and so did I in my BeOS products.)
For example, I recently found that using auto_ptr< char > on a character array seems to work just fine under Codewarrior for Windows.
(I use it because I like the IDE's UI and it's great for cross-platform development - it also works with any text file format (MacOS CR, Unix LF, or or DOS CRLF) so you can easily share source files between any kind of machine, unlike gcc which only accepts Unix newlines).
It is not correct to use auto_ptr on an array because it deletes the pointer it holds with delete, rather than delete [] which is the required operator to delete arrays (this is needed so you can call the destructor separately on each element of the array; it doesn't hurt to fail to call char's destructor because it doesn't have one, but the memory allocation format for an array in C++ is different than in C because the number of elements has to be stored somewhere).
It is no real fault of Codewarrior that it works but I wouldn't expect my code to work if I moved it to a different platform - or worse, got into the habit of managing array pointers this way and maybe wrote a big library full of auto_ptr's of arrays. It would be perfectly within reason for a different development environment to cause my code to crash if I did this.
Take my word for it, I am a professional cross-platform developer with with extensive experience shipping on a variety of platforms including my current project which builds from the same C++ source base for MacOS and Windows.
(My friend Andy Green wrote the cross-platform application framework I'm using, which will be released under the BSD license soon. It also works under BeOS and XWindows/Posix, including Linux).
If you or your TA's wish to discuss this directly with me feel free to email me at crawford@goingware.com
-
School Should Require Code to Work AnywhereThe school should not only allow you to use a different environment - it should require it.
They should offer a choice of several development environments (on a Pentium box, you could use Codewarrior, Microsoft Visual C++, Borland, gcc under Windows with Cygwin or under Linux or BSD, or Solaris with the Sun C++ compiler).
The best thing would be to have machines that have multiple operating systems installed mounting your home directory off a server so you can reboot and try a different compiler.
Not only is it educational to compile under different environments, it helps to keep you from using compiler-specific features that lock your code into a specific platform (you use the pedantic option on gcc and don't use the gcc extensions, do you), but also building your code under multiple compilers will find bugs in syntactically incorrect code that won't compile in one compiler but will compile and run and do who-knows-what under another.
(This is one of the reasons Be, Inc. still supports the BeOS under PowerPC even though Pentium has an overwhelmingly larger customer base - it helps them to validate their code and keeps their code portable. They found lots of bugs when they moved from Codewarrior to gcc on their Pentium version, and so did I in my BeOS products.)
For example, I recently found that using auto_ptr< char > on a character array seems to work just fine under Codewarrior for Windows.
(I use it because I like the IDE's UI and it's great for cross-platform development - it also works with any text file format (MacOS CR, Unix LF, or or DOS CRLF) so you can easily share source files between any kind of machine, unlike gcc which only accepts Unix newlines).
It is not correct to use auto_ptr on an array because it deletes the pointer it holds with delete, rather than delete [] which is the required operator to delete arrays (this is needed so you can call the destructor separately on each element of the array; it doesn't hurt to fail to call char's destructor because it doesn't have one, but the memory allocation format for an array in C++ is different than in C because the number of elements has to be stored somewhere).
It is no real fault of Codewarrior that it works but I wouldn't expect my code to work if I moved it to a different platform - or worse, got into the habit of managing array pointers this way and maybe wrote a big library full of auto_ptr's of arrays. It would be perfectly within reason for a different development environment to cause my code to crash if I did this.
Take my word for it, I am a professional cross-platform developer with with extensive experience shipping on a variety of platforms including my current project which builds from the same C++ source base for MacOS and Windows.
(My friend Andy Green wrote the cross-platform application framework I'm using, which will be released under the BSD license soon. It also works under BeOS and XWindows/Posix, including Linux).
If you or your TA's wish to discuss this directly with me feel free to email me at crawford@goingware.com
-
School Should Require Code to Work AnywhereThe school should not only allow you to use a different environment - it should require it.
They should offer a choice of several development environments (on a Pentium box, you could use Codewarrior, Microsoft Visual C++, Borland, gcc under Windows with Cygwin or under Linux or BSD, or Solaris with the Sun C++ compiler).
The best thing would be to have machines that have multiple operating systems installed mounting your home directory off a server so you can reboot and try a different compiler.
Not only is it educational to compile under different environments, it helps to keep you from using compiler-specific features that lock your code into a specific platform (you use the pedantic option on gcc and don't use the gcc extensions, do you), but also building your code under multiple compilers will find bugs in syntactically incorrect code that won't compile in one compiler but will compile and run and do who-knows-what under another.
(This is one of the reasons Be, Inc. still supports the BeOS under PowerPC even though Pentium has an overwhelmingly larger customer base - it helps them to validate their code and keeps their code portable. They found lots of bugs when they moved from Codewarrior to gcc on their Pentium version, and so did I in my BeOS products.)
For example, I recently found that using auto_ptr< char > on a character array seems to work just fine under Codewarrior for Windows.
(I use it because I like the IDE's UI and it's great for cross-platform development - it also works with any text file format (MacOS CR, Unix LF, or or DOS CRLF) so you can easily share source files between any kind of machine, unlike gcc which only accepts Unix newlines).
It is not correct to use auto_ptr on an array because it deletes the pointer it holds with delete, rather than delete [] which is the required operator to delete arrays (this is needed so you can call the destructor separately on each element of the array; it doesn't hurt to fail to call char's destructor because it doesn't have one, but the memory allocation format for an array in C++ is different than in C because the number of elements has to be stored somewhere).
It is no real fault of Codewarrior that it works but I wouldn't expect my code to work if I moved it to a different platform - or worse, got into the habit of managing array pointers this way and maybe wrote a big library full of auto_ptr's of arrays. It would be perfectly within reason for a different development environment to cause my code to crash if I did this.
Take my word for it, I am a professional cross-platform developer with with extensive experience shipping on a variety of platforms including my current project which builds from the same C++ source base for MacOS and Windows.
(My friend Andy Green wrote the cross-platform application framework I'm using, which will be released under the BSD license soon. It also works under BeOS and XWindows/Posix, including Linux).
If you or your TA's wish to discuss this directly with me feel free to email me at crawford@goingware.com
-
Here's a clickable link to EFF DVD Legal FundIf you want to join the Electronic Frontier Foundation and support the side of truth and justice in the DVD case, click here:
https://www.eff.org/support/joineff.html
And if you want to read about why this matters, click here:
http://www.goingware.com/decss
It's not about watching movies on Linux anymore.
It's about your right to say what you want in a free society. Eric Corley is a member of the press, and 2600's web site is his publication. Judge Kaplan has just permanently enjoined Corley from practicing unrestrained journalism.
-
Free Speech for Programmers and New DeCSS MirrorGoingWare would like to take this opportunity to assert that program source code is constitutionally protected free speech.
One has a moral responsibility to disobey unjust laws
http://www.goingware.com/decss-- Dr. Martin Luther King Jr.
If you can't provide a mirror for DeCSS yourself, perhaps you could at least show your support by displaying or linking to the DeCSS Support Ribbon. You can display it on your page, served by my server, with the following line of HTML:
<img src="http://goingware.com/decss/DVDRibbon.gif" alt="DeCSS Support Ribbon" width="85" height="138">
Remember folks, this isn't just about being able to watch movies anywhere you want on any OS you want. It's about being free from official government repression for speaking your mind, and if this case stands our precious freedom will suffer greatly for it - not freedom to consume products, but freedom to live as people with human rights, safe from official retribution for holding an opinion.
While Jack Valenti and the MPAA may be violating antitrust law and established Supreme Court precedents of Fair Use, Judge Kaplan is the far worse offender for having violated his oath to uphold the Constitution of the United States of America.
Tilting at Windmills for a Better Tomorrow
-
Free Speech for Programmers and New DeCSS MirrorGoingWare would like to take this opportunity to assert that program source code is constitutionally protected free speech.
One has a moral responsibility to disobey unjust laws
http://www.goingware.com/decss-- Dr. Martin Luther King Jr.
If you can't provide a mirror for DeCSS yourself, perhaps you could at least show your support by displaying or linking to the DeCSS Support Ribbon. You can display it on your page, served by my server, with the following line of HTML:
<img src="http://goingware.com/decss/DVDRibbon.gif" alt="DeCSS Support Ribbon" width="85" height="138">
Remember folks, this isn't just about being able to watch movies anywhere you want on any OS you want. It's about being free from official government repression for speaking your mind, and if this case stands our precious freedom will suffer greatly for it - not freedom to consume products, but freedom to live as people with human rights, safe from official retribution for holding an opinion.
While Jack Valenti and the MPAA may be violating antitrust law and established Supreme Court precedents of Fair Use, Judge Kaplan is the far worse offender for having violated his oath to uphold the Constitution of the United States of America.
Tilting at Windmills for a Better Tomorrow
-
Free Speech for Programmers and New DeCSS MirrorGoingWare would like to take this opportunity to assert that program source code is constitutionally protected free speech.
One has a moral responsibility to disobey unjust laws
http://www.goingware.com/decss-- Dr. Martin Luther King Jr.
If you can't provide a mirror for DeCSS yourself, perhaps you could at least show your support by displaying or linking to the DeCSS Support Ribbon. You can display it on your page, served by my server, with the following line of HTML:
<img src="http://goingware.com/decss/DVDRibbon.gif" alt="DeCSS Support Ribbon" width="85" height="138">
Remember folks, this isn't just about being able to watch movies anywhere you want on any OS you want. It's about being free from official government repression for speaking your mind, and if this case stands our precious freedom will suffer greatly for it - not freedom to consume products, but freedom to live as people with human rights, safe from official retribution for holding an opinion.
While Jack Valenti and the MPAA may be violating antitrust law and established Supreme Court precedents of Fair Use, Judge Kaplan is the far worse offender for having violated his oath to uphold the Constitution of the United States of America.
Tilting at Windmills for a Better Tomorrow
-
Thanks for the MLK quote; My own soapbox speech"One has a moral responsibility to disobey unjust laws." -- Dr. Martin Luther King, Jr.
Thanks for the quote. I added it to the page and added a few words of my own on why I think this is important:
I want to make it clear that while I feel the Content Scrambling System is annoying and a violation of antitrust laws, and the Digital Millenium Copyright Act is a violation of established Supreme Court precedent of authorizing Fair Use, the reason I have provided this page in protest is specifically because Judge Kaplan's decission in the 2600 case is a violation of constitutional rights.
While the Motion Picture Association and Jack Valenti are at fault here, the greater fault lies with Judge Kaplan in failing in his sworn duty to uphold the United States Constitution.
Judge Kaplan's decision represents a far greater danger than the ability to view digital movies where you want on the operating system of your choice, or even to be able to share them over the Internet. It represents a danger to your security to rest safe in your bed at night, knowing that you are safe to say what you wish without fear of oppression by your government.
Judge Kaplan, if you are reading this, I want you to understand that America's founding fathers fought and died in bloody battles to put a stop to men like you.
-
Free Speech for Programmers and New DeCSS MirrorGoingWare is at last able to post on-topic by asserting that computer program source code is constitutionally protected free speech.
http://www.goingware.com/decss
When a law is unjust, it is just to disobey the law. Also, court judgements can only be made based on actual cases; the U.S. court system does not render "advisory opinions", so if you believe that your rights have been violated by Judge Kaplan's decision, it is your duty to mirror DeCSS too.
-
Free Speech for Programmers and New DeCSS MirrorGoingWare is at last able to post on-topic by asserting that computer program source code is constitutionally protected free speech.
http://www.goingware.com/decss
When a law is unjust, it is just to disobey the law. Also, court judgements can only be made based on actual cases; the U.S. court system does not render "advisory opinions", so if you believe that your rights have been violated by Judge Kaplan's decision, it is your duty to mirror DeCSS too.
-
My Page on Why You Should Use EncryptionI hasten to suggest you read my page on my you should use encryption.
Read the page, pass on the URL, and link to it from your own pages.
And yes I know there's a broken link on the page, I've got the correct one but haven't had a chance to update it yet.
-
Free Speech for Programmers and New DeCSS MirrorGoingWare interrupts our regularly scheduled broadcast to assert that computer program source code is constitutionally protected free speech.
http://www.goingware.com/decss
We now return you to your program.
-
Free Speech for Programmers and New DeCSS MirrorGoingWare interrupts our regularly scheduled broadcast to assert that computer program source code is constitutionally protected free speech.
http://www.goingware.com/decss
We now return you to your program.
-
Free Speech for Programmers and New DeCSS MirrorGoingWare interrupts our regularly scheduled broadcast to assert that computer program source code is constitutionally protected free speech.
http://www.goingware.com/decss
We now return you to your program.
-
Free Speech for Programmers and New DeCSS MirrorGoingWare interrupts our regularly scheduled broadcast to assert that computer program source code is constitutionally protected free speech.
http://www.goingware.com/decss
We now return you to your program.
-
Free Speech for Programmers and New DeCSS MirrorGoingWare interrupts our regularly scheduled broadcast to assert that computer program source code is constitutionally protected free speech.
http://www.goingware.com/decss
We now return you to your program.
-
Free Speech for Programmers and New DeCSS MirrorGoingWare interrupts our regularly scheduled broadcast to assert that computer program source code is constitutionally protected free speech.
http://www.goingware.com/decss
We now return you to your program.
-
Free Speech for Programmers and New DeCSS MirrorGoingWare interrupts our regularly scheduled broadcast to assert that computer program source code is constitutionally protected free speech.
http://www.goingware.com/decss
We now return you to your program.
-
Free Speech for Programmers and New DeCSS MirrorGoingWare interrupts our regularly scheduled broadcast to assert that computer program source code is constitutionally protected free speech.
http://www.goingware.com/decss
We now return you to your program.
-
Free Speech for Programmers and New DeCSS MirrorGoingWare interrupts our regularly scheduled broadcast to assert that computer program source code is constitutionally protected free speech.
http://www.goingware.com/decss
We now return you to your program.
-
Free Speech for Programmers and New DeCSS MirrorGoingWare interrupts our regularly scheduled broadcast to assert that computer program source code is constitutionally protected free speech.
http://www.goingware.com/decss
We now return you to your program.
-
Free Speech for Programmers and New DeCSS MirrorGoingWare interrupts our regularly scheduled broadcast to assert that computer program source code is constitutionally protected free speech.
http://www.goingware.com/decss
We now return you to your program.
-
Free Speech for Programmers and New DeCSS MirrorGoingWare interrupts our regularly scheduled broadcast to assert that computer program source code is constitutionally protected free speech.
http://www.goingware.com/decss
We now return you to your program.
-
Consultant Sez: Never Sign Without an AttorneyI am a software consultant, with thirteen years total experience as a working programmer and a little over two years working independently as a consultant (not through agencies).
You can read about my business on my homepage and some helpful information on the consulting business at Market Yourself - Tips for High-Tech Consultants.
I have this word of advice for everyone in the high-tech industries: find an attorney who practices business and intellectual property law. Do this right now, when you're not looking for a job. Most attorneys will spend a reasonable amount of time just chatting with you about stuff without charging you when you first meet them so you can evaluate whether to work with them.
When an employer or client gives you an NDA, tell them you'd like to have your attorney read it and advise you on whether to sign it. Don't even bother to read it, certainly don't read it while the interviewer is hovering over you.
Consider preparing your own NDA that the client or employer will sign, that you have your attorney draft ahead of time. That way you can be prepared with an NDA, and if they want you to sign one, say that you aren't comfortable doing so without legal advice, but if they'd like you have one handy. This is what I'm working on doing - with the help of an excellent attorney.
I may be belaboring an obvious point but most NDA's usually don't obligate the employer to keep your secrets secret. If they won't agree to protect your trade secrets, why should you agree to protect theirs?
It happens that I've signed a lot of NDA's and contracts over the years, but since I had some trouble with a client I've started discussing everything with an attorney up front. Nothing gets my signature unless my lawyer says it's OK with her. Just the conversations I've had with the attorneys I've discussed these things with have been well worth the money I've spent.
Most attorneys will only charge you by the minute for such matters, and it takes them less time to evaluate a contract than it would for you as a programmer to do so (how long would it take an attorney to evaluate your source code?). The attorney fees I've spent in the last year evaluating all the NDA's and contracts I've signed have come to maybe $400.
Considering that you could be taken for tens of thousands if you lose a lawsuit, or you could lose a job opportunity if you signed a non-compete or a potential employer feared you'd expose them to liability because you knew a competitor's trade secrets, isn't it worth it to get an attorney?
If, in the interview, they balk at you getting an attorney to sign an NDA, you should politely point out that it would have been appropriate for them to have sent you the NDA before the interview so you could have it checked out. Then offer to either leave right now and come back later, or keep the discussion limited to non-secret material.
Remember, the labor market is very tight for employers these days. The power is in the hands of the engineers. You don't have to put up with intimidation.
-
Consultant Sez: Never Sign Without an AttorneyI am a software consultant, with thirteen years total experience as a working programmer and a little over two years working independently as a consultant (not through agencies).
You can read about my business on my homepage and some helpful information on the consulting business at Market Yourself - Tips for High-Tech Consultants.
I have this word of advice for everyone in the high-tech industries: find an attorney who practices business and intellectual property law. Do this right now, when you're not looking for a job. Most attorneys will spend a reasonable amount of time just chatting with you about stuff without charging you when you first meet them so you can evaluate whether to work with them.
When an employer or client gives you an NDA, tell them you'd like to have your attorney read it and advise you on whether to sign it. Don't even bother to read it, certainly don't read it while the interviewer is hovering over you.
Consider preparing your own NDA that the client or employer will sign, that you have your attorney draft ahead of time. That way you can be prepared with an NDA, and if they want you to sign one, say that you aren't comfortable doing so without legal advice, but if they'd like you have one handy. This is what I'm working on doing - with the help of an excellent attorney.
I may be belaboring an obvious point but most NDA's usually don't obligate the employer to keep your secrets secret. If they won't agree to protect your trade secrets, why should you agree to protect theirs?
It happens that I've signed a lot of NDA's and contracts over the years, but since I had some trouble with a client I've started discussing everything with an attorney up front. Nothing gets my signature unless my lawyer says it's OK with her. Just the conversations I've had with the attorneys I've discussed these things with have been well worth the money I've spent.
Most attorneys will only charge you by the minute for such matters, and it takes them less time to evaluate a contract than it would for you as a programmer to do so (how long would it take an attorney to evaluate your source code?). The attorney fees I've spent in the last year evaluating all the NDA's and contracts I've signed have come to maybe $400.
Considering that you could be taken for tens of thousands if you lose a lawsuit, or you could lose a job opportunity if you signed a non-compete or a potential employer feared you'd expose them to liability because you knew a competitor's trade secrets, isn't it worth it to get an attorney?
If, in the interview, they balk at you getting an attorney to sign an NDA, you should politely point out that it would have been appropriate for them to have sent you the NDA before the interview so you could have it checked out. Then offer to either leave right now and come back later, or keep the discussion limited to non-secret material.
Remember, the labor market is very tight for employers these days. The power is in the hands of the engineers. You don't have to put up with intimidation.
-
Fixing Someone Else's Broken Code; ResourcesI've been working as a programmer for 13 years now, and for most of my career, the way I described it is this:
I've spent most of my career fixing somebody else's broken code.
This is not to say that my own has always been of the very highest quality, but in fact I decided early on to try to come to a fundamental understanding of what was wrong with software development, to get very good at debugging (I say that debugging is a specialty on my homepage) and to learn to write better code.
In my early years I was initially very shocked at what I'd discover in production use at companies. Over the years I just learned that that's standard practice, in commercial software, in-house software, and even in scientific software (where I have become convinced, because of my experiences with high-energy physics data analysis, that many scientific papers are published with erroneous measurements because of software bugs).
Early on I read that something like 90% of software development is spent doing maintenance programming. Some of this is doing legitimate upgrading, but a lot of it is just spent fixing bugs, and even a lot of time spent doing upgrades would be more productive if the code were of better quality.
After reading this figure and having so many experiences with software bugs, both other people's and my own, I decided very early on to get very good at debugging.
One of the first things I did was adopt the regular use of "lint" for checking my C code. I would integrate lint targets into my makefiles and after editing a source file I would type "make lint" before compiling to objects and lint would check all the files that were out of date with the object modules. Pretty quickly I got to where I could write code that was nearly always lint-clean - but the existing code I worked on would make lint scream with hundreds if not thousands of complaints, often serious things like variables being used before they are initialized.
One of the first solid clues I got about software quality came from Robert Ward's book "Debugging C" - now out of print, it predated the common use of source code debuggers and talked about how to write your own stack crawls and other tools.
Ward emphasized the use of the Scientific Method in debugging, and because I was trained in physics, this came very naturally to me; before that I'd mostly floundered and used printf a lot.
I've gotten very good at debugging and have even worked full-time as a debugger at Apple Computer where I was a "Debug Meister" and my business card gave my title as "Cybernetic Entomologist".
I can easily get highly paid consulting work doing debugging for companies desperate to ship a product (and have in the past) but I don't really like to do it for various reasons, some of the same reasons I quit my debugging job at Apple.
One is that if I only do debugging I don't have something to point to at the end of the day and say "I wrote that". I could say "that works because of me", but sadly there's usually lots of bugs left that I didn't have the time to find so I don't really feel proud of the result. The other problem is that the bugs are usually not there because of something interesting, it's not like the code is mostly good but there's some subtle flaws, rather the code is a heap of dung and I can go in with a pitchfork and do debugging wholesale until I get tired of it and the client or manager decides the rate new bugs are being found is low enough they can feel OK about shipping it.
I don't feel good about contributing to such shoddiness. If a company is not good enough to support quality in their corporate culture I don't want to come in and put on a band-aid for them. It would be an entirely different thing if a company hired me to restructure their development process so that quality was a goal that was achieved through direct application of process but gee whiz no one has ever asked me to do that for them.
I do have to say though that the best thing that ever happened to me is that I became a "technology prostitute" as the author of the original article puts it. One benefit of this is that the process is entirely of my own creation, and almost all of the work I've been given has been to write entirely new products from scratch, so I can engineer in quality from the beginning.
Here's a few recommendations I have. Get good tools. Besides a compiler, editor and debugger, you need a static code checker and you also need dynamic testers. The ones I know about are (I haven't used them all yet):
- PC-Lint static code checking for C and C++. It runs on Windows but Flexe-Lint comes as shrouded source code and is highly portable.
- Spotlight dynamic tester for Mac PowerPC - I use this every day and recommend it highly
- BoundsChecker dynamic tester for Windows
- Purify dynamic tester for Unix (but apparently not Linux) and Windows NT
- Optimizeit dynamic tester for Java - do you know many Java programs have memory leaks? Can you understand why? Not just Java but any garbage collected program.
Finally, to really come to understand the software quality problem in the industry and what you can do about it, read The Forum on Risks to the Public in Computers and Related Systems also available on the Usenet News as comp.risks. The book The Software Conspiracy exposes the complete disregard the commercial software industry has for serving the consumer by providing quality products - I haven't read it yet but it looks interesting.
A very interesting methodology that emphasizes personal responsibility and puts the fun back into programming as well as maintaining quality from the very start is Extreme Programming. I'm starting to adopt extreme programming (the the extent a one man operation can - I can't work in pairs
:-/ ) and find it a tremendous benefit. -
Not Watching TV Gives You a Better LifeI saw the link to the Kill Your TV Website a few comments back and after following it and reading some of the page I wrote the following email to a number of my friends. I urge you to check out the site too.
The Kill Your TV Website:
http://othello.localaccess.com/hardebeck/
No this is serious. He claims that Sesame Street may teach your kid to recognize letters and numbers, but it shortens their attention span.
It happens that, when I was a kid, I stopped watching television when my sister left for college. I had never really actively watched TV before, but would sit passively while she changed the channels. With my sister gone, I would at first just sit in silence in the empty house. But I started listening to music which, unlike TV, allows you to devote your attention to other things while you listen.
I read a lot, ground telescope mirrors, acted in the high school theater and eventually became the set director, started college at 16 while still attending high school, scored 890 out of a possible 900 on the SAT Math II achievement test and was accepted into CalTech, where I published in the astrophysical journal and did research on the 200" and 60" telescopes.
I still don't watch TV, and have a successful software consulting business.
Mike
Note - you can find refs to my papers in the "Publications" section of my resume. Abstracts are available online. I didn't say it in my original letter but the work that was published I did while employed as a research assistant the summer after my freshman year.
-
My Web Page: Why You Should Use EncryptionPlease read my web page on Why You Should Use Encryption.
Tilting at Windmills for a Better Tomorrow
-
I flunked "strcpy", got hired for tech supportAt my interview with the company that hired my for my second computer job, Microport Systems, company president Chuck Hickey (who had done a large part of the first port of AT&T Unix to the 286) asked me the following question:
"What is the most efficient implementation, written in C, of the standard library function strcpy?"
Well damn me, I wasn't able to answer this, and so I was put on technical support at six bucks an hour - graveyard shift, BTW, they offered 24 hour tech support.
If you want to see where I've come since check out my resume
-
Market Yourself - Tips for High-Tech ConsultantsSick of high-tech recruiters and contract agencies?
Please read Market Yourself - Tips for High-Tech Consultants.
I'm a consultant, and I see a lot of other consultants out there groping for a clue. I also have lots of friends wandering in the dark trying to build a career.
I've been working as a programmer for thirteen years, and I've been an independent consultant for two and a half years. I do not do business with recruiters - I find all my clients myself. The above page tells how I do it.
This is not spam. I'm serious!
-
Market Yourself - Tips for High-Tech ConsultantsSick of high-tech recruiters and contract agencies?
Please read Market Yourself - Tips for High-Tech Consultants.
I'm a consultant, and I see a lot of other consultants out there groping for a clue. I also have lots of friends wandering in the dark trying to build a career.
I've been working as a programmer for thirteen years, and I've been an independent consultant for two and a half years. I do not do business with recruiters - I find all my clients myself. The above page tells how I do it.
This is not spam. I'm serious!
-
Why You Should Use EncryptionPlease read my web page on Why You Should Use Encryption.
Tip: the Digital Telephony Act has been around for years mandating built-in wiretaps in phone switches, but Speak Freely is free, includes source, and provides your choice of strong encryption methods.
Tilting at Windmills for a Better Tomorrow
-
Encryption is faster than you thinkI've found that one a 450 MHz Pentium III laptop I can play MPG, QuickTime or ASF movies of a PGPDisk encrypted partition with no loss in performance.
I think this is with a 5000 RPM disk.
While on this topic, please read my page on Why You Should Use Encryption
While encryption is indeed computationally expensive, it is not nearly as computationally expensive as badly written GUI code, and that's what's usually running on modern computers. Encryption software is generally quite optimized, while the crud we call shrink-wrap software is a poor excuse for engineering.
I also refer you to the Risks Forum
-
Encryption is faster than you thinkI've found that one a 450 MHz Pentium III laptop I can play MPG, QuickTime or ASF movies of a PGPDisk encrypted partition with no loss in performance.
I think this is with a 5000 RPM disk.
While on this topic, please read my page on Why You Should Use Encryption
While encryption is indeed computationally expensive, it is not nearly as computationally expensive as badly written GUI code, and that's what's usually running on modern computers. Encryption software is generally quite optimized, while the crud we call shrink-wrap software is a poor excuse for engineering.
I also refer you to the Risks Forum
-
I work best with the net shut off - in a car!One of the side effects of moving up here to Newfoundland is that we drive long distances to get to my wife's parent's house, and we also made a trip (via the ferry) to Nova Scotia, which is a really long way.
I couldn't afford to not work for such long times so we bought an inverter at Canadian Tire and I plugged my laptop into the car cigarrette lighter.
And damned if I didn't get more work done on the road with my wife driving that at any other time.
I'm writing a cross-platform product right now and have a choice to program on a Mac desktop or my windows laptop (it also runs Slackware Linux and BeOS). Sometimes my wife borrows the laptop to browse the web and - zing! - I get a lot of work done.
The problem was that I'd leave elm open in a terminal window and a web page open on slashdot and hit reload whenever I was running a long compile or something.
So recently I made the choice to turn off my laptop when I've set into my work, or give it to my wife. It's greatly improved my productivity.
(I only paid for one computer on my cable modem, and haven't figured out IP Masquerading yet, so my mac can't hook to the internet. Modems are interchangeable but the DHCP for the cable modem is keyed off of your physical ethernet address so unless you cough up for the second connection or use masquerading you can't use a second machine).
-
The Author RepliesI apologize for not having been able to join into the discussion today but I'm afraid my new bride pointed out that all I'd done was work since we got married a week ago Saturday and we weren't going to get to take a honeymoon anytime soon and so we spent a bit of quality time together.
I don't think she would have understood if I told her I'd been featured on Slashdot and had to take breaks from her to go post...
I did read through some of the comments here earlier this evening and I must say that this has been an excellent discussion. The sheer number of comments posted shows I must have struck a chord with the community - and my experience with other programmers shows that this is a common problem with others.
I'll post tomorrow what the folks on comp.lang.c++ and comp.sys.mac.programmer.misc had to say but they were in general along the same lines as what was posted here:
- Take a break
- Get a life
- Do something fun that doesn't involve computers
- Engage in vigorous physical exercise
- associate with the attractive sex
- Step back from low-level coding and do other software-oriented things like design, discussions with a coworker or documentation
I did in particular step back to think about software from a different level than coding, but I didn't actually do design work. Instead, I just cracked open some good programming texts. If you haven't read much lately there's probably a lot of good stuff that will stimulate you and improve the effectiveness of your work - check the book reviews online at The Association of C and C++ Users (and consider joining it - I did, a couple months ago).
One thing I consider important in the reading I did was that I wasn't looking for solutions to the problem at hand. Rather, I was trying to get back to something I'd been missing for a long time and wanted to indulge in - the sheer joy of learning for its own sake.
It was the case that the books I was reading were pertinent to my work but I wasn't searching them for solutions. I was just reading and flipping through them as my curiousity led me. And when solutions to my problem would occur to me, I'd put them out of my mind until the time I'd decided ahead of time would be my time to resume work.
What actually got me going again was that I had such a flood of ideas and they had crystallized so clearly I was able to sit down and implement my solution in a day and it worked just fine - still does.
Something else that helped stimulate me was the website on Extreme Programming.
A lot of the approaches there really appeal to me. Particularly I like the ideas they have that could be generally expressed as "design by coding" and are mentioned I think by Stroustrup in the intro to More C++ Gems as "expressing designs in the code".
That is, rather than doing a bunch of up-front modeling using diagrams like OMT or UML or what have you, you just write code - but you are designing in the code, so they emphasize in extreme programming that you constantly rewrite the code as designs gel.
One thing that saddnes me though is that Extreme Programming also suggests programming in pairs. This is something I used to do with Dave Johnson when we were at Working Software together. We'd help each other through hard spots and just rap about politics and stuff and go have coffee or a beer and get a lot of work done.
Now I live at the End of the Internet and I'm working for myself as a one-man consultant shop. It has its advantages (I can work at home and set my own hours) but one big disadvantage is that I work very much alone and there's no one around to bounce ideas off of.
I have other programmer friends and I do call them up but they all have their own gigs - it's not the same.
On another important note, several people both here, privately via email and in the newsgroups raised the possibility of this being clinical depression.
Well that is something I was well aware of and had been considering. Depression is something I have been dealing with all my life, as you will see in another slashdot article I posted:
I didn't used to be (woefully so) but now I'm very introspective about my mental and emotional state. I have to be. I didn't used to be but now I just won't tolerate the depths of misery that I just thought were part of the normal human condition.
But I don't think that what was happening to me was the sort of depression that I usually consider. There are "endogenous" and "reactive" depressions. Endogenous depression just happens to you and is usually caused by chemical imbalances in the brain (shortages of serotonin or norepinephrine) and is what's usually experienced with Manic Depression, while reactive depression is (naturally) a reaction to external events, like a personal tragedy.
Life has been really hectic for me for a long time, with the turbulence of my consulting business, falling in love with a woman from another country, planning a wedding, moving to Canada, and just trying to keep it all together. Maybe if all that hadn't been going on, I wouldn't have gotten stuck. But basically, I just got stuck.
Robert Pirsig talks about stuckness and ways to overcome it extensively in Zen and the Art of Motorcycle Maintenance, which I recommend highly (and probably ought to reread). And I really was suffering the kind of stuckness he described, the stuckness that occurs when you just want to get your bike fixed and you break the head off a crucial screw...
(Robert Pirsig went nuts while a grad student in philosophy at the University of Chicago. He had shock treatment back when it wasn't very carefully administered and lost nearly all his memories. The book is about his motorcycle trip across to some of the places he used to live to visit old friends he hardly remembered, along with an amazingly enlightening discussion of what he'd been so obsessed about that it drove him crazy - what is Quality?)
Someone mentioned meditation in the discussion. I had found reading about Zen and doing meditation on my own was of profound help in overcoming my mental illness back in the really dark days. But as things got better and my career got in shape and I stopped seeking so much and concentrated on learning to program and making a place in the world for myself I drifted away from that, something that I think is really wrong.
During my time off my then-fiance lent me her copy of Chogram Trungpa's The Path is the Goal, A basic handbook of buddhist meditation. It is published by Shambhala Publications
I'm afraid I read a little bit of it then when my time off came to an end I set it aside and started thinking again.
One of the little traps our mind has for us is thinking. I like to think, and I'm particularly well-developed at it. But my wife tell me that we are not our thoughts, and actually our thoughts can lead us astray. And when I was getting so stuck on my programming problem I was thinking really hard and trying to solve my problem by thinking harder.
One thing you do in meditation is to stop thinking. Hardened programmers might find that a frightening concept. And you can't really try to stop thinking - you just sit, and look, but not too hard, and experience
You cannot experience your world as it really is and be thinking.
One thing that Pirsig discusses in his book is how to bring the wisdom attained at the rarified mountain peaks of meditation down to practical value in everyday experience. He uses fixing a motorcycle as an illustrative example but when I read the book I found that I was able to program better because I could "become one with the machine".
My wife doesn't really believe this is possible but I think it is, that one can meditate while carrying out an intellectual activity like computer programming. That's something that I seem to have lost long ago, that I had years ago when I was not nearly so knowledgeable but I did have the ability to really lose myself in the machine all day long without distraction - and without getting tired or worn out.
Don't forget:
Tilting at Windmills for a Better Tomorrow
-
Please Learn to Use EncryptionI don't have time tonight to write at my usual length, but this brings up a good opportunity to recommend that you read my web page on Why You Should Use Encryption.
I posted a lengthier discussion of this before with a link to the above page but it has fallen off my user info - it wasn't too long ago, maybe someone can find it in the archives and post a link to the archived slashdot discussion in a reply.
-
Read the Cluetrain ManifestoFor more discussion of the above topic, I refer you to The Cluetrain Manifesto
The basic thesis of the cluetrain manifesto is that carefully controlled corporate communications are basically hopeless in the age of the internet, because information is readily available to anyone and anyone can publish it.
For an example of this, see my own cluetraining on the subject of high-tech headhunters at GoingWare's Policy on Recruiters and Headhunters.
Another (old) example is an ironically named one about why I chose not to develop macintosh software anymore after being dicked around too many times by Apple Computer:
I'm worried about my future. That's why I'm a Be developer.
(For those of you who don't know, Be's history has been to screw its developers even harder than Apple.)
Vast numbers of people have their own web pages where they speak out about companies and business practices that they don't like. Do you have any examples? (let's not forget Mr. Sorehands).
Tilting at Windmills for a Better Tomorrow
-
Encrypt Casually and RegularlyIf you worry as I do that people snoop on the Internet, then you should use encryption. Don't just use encryption for important secret messages, use it all the time so that the snoopers won't be able to tell when you're up to something they should be paying attention to. Even if you have nothing to hide, generating encrypted traffic on the net improves its overall security because it makes it more difficult for crackers to focus on those who appear to have something going because they use encryption (even encryption is subject to traffic analysis).
Please read my page Why You Should Use Encryption.
If you get your mail from and put web pages on a hosting service, then at a minimum you should use one that provides secure shell (ssh) and secure copy (scp) access. One such hosting service that does is Seagull Networks. Does anyone know any others?
When you retrieve your email via POP or load a web page via FTP your password is being transmitted in the clear. You have no control over which routers and cables it passes through in the process, so you have no way of knowing if someone's running a sniffer on a compromised host. Usually you have no knowledge even of the route, unless you go to the trouble to run traceroute regularly.
You can download your email via an encrypted channel with ssh port forwarding if your mail host provides ssh. The instructions given are oriented to the BeOS but apply in general to any OS for which an SSH client exists.
If you run a website that uses passwords please consider allowing the users to enter their passwords via SSL (https).
If you use websites that require passwords, please use a different password for each site. At the very least, use a unique password for your important sites, like your email, web pages and financial sites. If you keep the passwords in a file (which you may have to do because there are so many sites that take passwords), encrypt the file.
Be aware that most sites that have passwords do not encrypt them, otherwise they wouldn't be able to send you your password reminder in clear text. I've even used sites that mailed out password reminders in the clear every couple months just to prompt me to use the service. Note that anyone at the site who has root access, anyone who compromises the site or anyone running a sniffer on or near the site will be able to catch your passwords.
Also I think it is very likely that many websites are provided for no other purpose than to collect passwords for later use by crackers - beware of that free trial and use a unique password if you must accept the offer!
Use the anonymizer or, if you have Windows 95 or 98, Freedom to protect your privacy while you web surf.
Finally, do you use a laptop computer? Do you have files on it that you don't wish to share with the random stranger who might steal it someday? How about your competitors? A thief won't likely be in the direct employ of your competitors but they may recognize the value of the information and sell it to them, or even post it on the net for fun.
And remember in this information age the information on our computers is more valuable than the hardware itself, and unlike car stereos can continue providing value to a thief because, once it is fenced, it is still available to be fenced again.
Depending on your OS, you should use PGPDisk or the Linux encrypting kernel on your laptop.
Consider encrypting important information on your desktop too. A friend of mine who is a software developer lost every machine in his company in a robbery - source code, strategic plans, and the customer database.
I know of two cases where laptops were stolen from intelligence agents, once during the Gulf war, and once from an MI5 agent while he'd set it between his legs at a train station. Good thing they used encryption!
Finally, read the Forum on Risks to the Public in Computers and Related Systems available on the Usenet News as comp.risks and on the web at http://catless.ncl.ac.uk/Risks
Tilting at Windmills for a Better Tomorrow