One of the foundations of Apple's QuickDraw, particularly the fact that it performs so well (and performed so well on the 6 MHz 128k Mac) is the patent for the Mac OS Region data structure and associated algorithms, Method and apparatus for image compression and manipulation, number 4,622,545.
At some point patents went from being valid for 17 years from when they were issued to 20 years from when they were filed. I think this falls under the 17 year case, and it was issued November 11, 1986. That means it will expire November 11, 2003.
That is great news for free software, because it means that you can do boolean calculations of graphical shapes (important to efficient screen updating) go vastly faster than, say, maintaining a list of rectangles.
It would, in general, be real useful for someone to keep an eye on the patent that are currently expiring and to make suggestions on which ones would be good candidates for free software. This is harder than you might think, not just because of the legalese but because patents usually don't say they are for software but are couched in terms of mechanical or electronic devices, so it's not even clear when a software patent exists.
Stroustrup has some things to say about C++ education. I think he mentioned it in his QA a while back here on slashdot in C++ Answers with Bjarne Stroustrup.
In general Stroustrup feels that a lot of the trouble people have with C++ is that it's not taught very well and he's making an effort to address that. One concern he has is that a common teaching approach is to teach C first and then "move up" to C++.
But this is a huge problem because you really don't want to do things the same way in C and C++ - for example, you learn char-array based strings in C and then have to forget them to use the string template in C++ - and often instructors don't bother to teach the different styles or worse don't know them themselves.
I didn't have too high a regard for C++ until I read the abovementioned slashdot Q&A but I decided then that it would be really worth my while to devote some serious effort to studying it. I did, mostly last spring and summer and the results immediately paid off, in terms of writing cleaner code, more efficient code, having fewer bugs and architecting things that I couldn't have hoped to have done before I'd put that effort into study.
Microsoft's.NET isn't just a threat to free software because people are going to write closed-source applications in it.
It's a threat because, by running applications off a web server, you don't have the binary to an application and so the GNU General Public License's requirement that the publisher distribute source does not apply.
This doesn't apply just to.NET but to all server-based computing. I'm particularly concerned with.NET because it threatens to make server-based applications commonplace.
I guess with.NET you'll download some client-side software, but it won't be able to run without the server side software, to which you won't be able to obtain source - even if the source was originally written for a Free Software project and licensed with the GPL.
And yes, the folks who replied to the article had some very good points about how copyright does not appear to hold any hope of solving this problem, even with my proposed revision of the GPL (which RMS says he's been considering).
It's a sticky problem and a potentially disastrous one, not just for free software but for all computer users because of the losses they will face as application service providers go out of business or change focus from time to time, taking their applications and source code with them.
Java isn't platform independent, it is a platform unto itself, and a proprietary one at that. Just try making use of OS-specific features from a Java program, or doing platform-appropriate things that weren't envisioned by the original designers of the Java platform.
For example, the javax.comm package for serial communications has an API for enumerating the names of the serial ports. On Windows, you get "COM1" and "COM2:" and you can present these in a UI like a popup menu for the user to select a port to use. On Unix, you get something like "/dev/ttya" and so on.
But on Macintosh, you get the words "printer" and "modem". There is no API for getting the icons for the printer and modem ports, because Java was designed by a bunch of textual unixheads from Sun.
If you want to see true platform independence, check out the ZooLib cross-platform application framework. ZooLib allows you to write a single set of C++ sources and compile them to native executables on Mac OS, Windows, BeOS and Posix flavors with XWindows such as Linux.
The platform-specific layer is small and well-architected so it's not a lot of work to bind it to a new platform like, say, QNX.
And you can do that, and sell the results as you like, because ZooLib is provided under the MIT License so you can use it for both open source and closed source projects. Put that in your "Sun Community License" and smoke it.
I am dismayed my the comments here that report that AP Computer Science does not teach much about classes or object-oriented programming. I think it is crucial to teach OOP. Consider this for a second:
Compare how frequently you have to design and implement classes in your own work to the frequency with which you need to design and implement algorithms. These days, all the algorithms and data structures that would be taught in an AP class are provided by libraries that you just use. I know the vast majority of code anyone writes just sort of does stuff, it can hardly be called an algorithm. But making good choices about program structure (and these days this means class structure) is crucial to having any hope of ever getting a program to work, let alone run efficiently.
I proposed to teach two classes, one on the fundamentals of object-oriented programming, and the other an OOP project - writing a program of some significant size (considering the experience level of the students).
My descriptions of the two classes are
given here. The links to the original course descriptions in that page seem to be dead now.
I felt that these two courses addressed two signicant flaws in most introductory programming education - one was an inordinate focus on the particulars of a language without concentrating on how to program well, and the other was that the exercises done in a course rarely took more than a week to do, and even if there was a term project, it usually was mixed in with other work, and so it wouldn't be of significant size.
This means that exercises in most introductory courses typically gloss over important issues that crop up in real software development, like robust error handling and dealing with the architecture of your program on a large scale.
These courses weren't meant to be that long so I really couldn't get that far into it but the point was that I would be neither teaching the language nor computer science (algorithms, data structures, etc.). Instead, I would be teaching what I could probably get flamed at for calling The Art of Software Engineering.
In the first course, I would concentrate on how to make good choices for what classes to use in your program and how they should relate to each other (when to use inheritance vs. composition, for example), basically how to acquire a good sense of aesthetics for the best way to divide your problem into maanageable parts. There are an infinitude of ways you can write a program, but a far lesser number of good ways to write a program, and this is not commonly taught.
I would use Java in the class, but cover the bare minimum of the language required to cover the conceptual material. Someone else was planning on teaching a course on Java itself.
I also felt that the project course would be of significant value in helping the students find real programming jobs. While they may have to expand on the projects after leaving the class, I knew that (at the time anyway), noone would hire a novice programmer until he'd shipped a product (oh how times have changed) - free software and shareware does count as a real product, but the important thing is that you have to have completed a program of some significant size.
Ironically, the courses were canceled after only two students signed up for them by the enrollment deadline.
Our general theory was that the students didn't percieve this classes as having an immediate payoff in a marketable job skill (SJSU Prof Dev was in good part a fundraising component of the regular University so the classes were frequently targeted towards marketable skills) - when really I felt it would do you more good than a class concentrating on Java or any particular language - it's not hard to pick up a language out of a book but what I meant to teach really would need personal interaction and discussion with an instructor and one's classmates.
Whatever the merits java has as a language, it is a proprietary language, and will be until Sun releases it to a vendor-neutral standards body like the ISO.
I won't even have any real confidence in its validity as a language until there are multiple competing, independently developed implementations.
While you can purchase Java implementations from lots of different vendors, almost all of them are derived from Sun's code - the virtual machine is ported, and the source code to the libraries is direct from Sun.
What I'm talking about is commercial quality (whether they're free or not), widely available and supported VM's, and runtime libraries that are written to a spec rather than being from a common codebase.
I've used the Xerces-C library (it's actually C++) in a consumer GUI product whose user documents were XML files, and I think it's just great - it builds on many platforms. A wrapper allows Xerces-C to be used from Perl. Xerces-J has a similar API (DOM and SAX) but is written in Java. They have stuff for XSLT, Scalable Vector Graphics, Soap and so on.
So you really don't need to buy into someone's proprietary platform, use the source luke.
I think actually the kernel is of very high quality, compared to competing operating systems like the windows kernel or the Mac OS system, but it does take a long time for the kernel to get the kinks worked out.
I realized when I got onto the Linux-Kernel mailing list to report a bug in 2.4.0-test a few months ago that people who were less hardcore developers would probably be put off by the process of reporting bugs to the kernel, and suggested this database to the kernel mailing list. It was generally well received.
In the long run, I'd like all of Free Software to be more rigorously tested for quality. This is just a start - but the database source, and parts of the database itself could be reused for other projects.
While it's probably the case that software today is too complex to get all the bugs out, the situation could be vastly better than it currently is. There is a lot of discussion of current software problems and what to do about them in Risks.
It is frequented by many esteemed experts in software architecture, reliability, security as well as just plain folks. The bug anecdotes reported there are often pretty funny but sometimes frightening and sobering too.
I think anyone who works with computers in any substantial way should read Risks.
It's important to understand that the IRS has a certain definition of what an employee is. And this definition applies no matter what contractual relationship may apply between the client and the contractor - even if (as a lot of consultants don't understand) the consultant is an incorporated company.
There isn't a firm rule to define when someone is an employee or not, but the general test (from IRS ruling 87-41) is that you're not if you satisfy most of The Twenty Factors. Here is a summary of them.
This basically means:
The contractor keeps his own hours
The contractor provides his own equipment and office space
The contractor takes on the financial risk
Whether the contractor is working, or could be working for more than one firm at a time.
Really, the 20 factors are not a bad way to do business if you really are an independent business as I am, but in no way do most contractor/client relationships satisfy them.
At the very least, recruiters and contract agencies take 30% of your pay - recruiters take 30% of your first years pay, agencies take it the whole time you're a contractor. But if they can get away with it, they will take far more.
And they're pushy and ignorant besides. How many of you have gotten a phone call from an agency who wanted to place you who clearly hadn't even read your resume, let alone understood it? The above two pages contain many horrifying anecdotes of recruiter and contract agency abuses, unethical practices and just plain stupidity.
It's usually in the contract that the client isn't told how much you make and isn't even allowed to ask. You can be sure that as your skills increased your agency charged more. They just kep the difference and you didn't see any of it. This is very common, especially with the less experienced contractors.
There was one poor guy on alt.computer.consultants that was making $30 an hour from his agency, but they were billing him to the client at $90 per hour!
I was told when I was a contractor at Apple that one of the reasons a lot of companies use contractors is that this allows them to create inflated statements of revenues vs. numbers of employees, or expenses for employees in statements to the stockholders and financial press.
Because contractor expenses count as expenses to vendors, while they are an expense, they make it appear as if your company is getting all this work done with far fewer employees than it really is. This is pretty significant as I understand that high-tech companies often employee as many as 40% of their staff as contractors.
If I were a stockholder in any high-tech company (I got out well before the bubble burst) I'd be enraged at this.
By the way, I want to say I wouldn't dream of just coming out of left field and trying to impose some kind of formal QA process on the kernel developers. I think the process under which the kernel is developed is just fine.
I've never been part of the kernel development effort except to do some testing and to report bugs, so it would be completely inappropriate for me to try to do something like that.
What I do want to do is make it easier for more users to participate in the testing process, in part so that a wider variety of configurations gets tested quicker, and so that novice users can be guided along in the steps needed to provide a meaningful bug report.
I've seen lots of reports saying "it doesn't work" or "this driver doesn't work" without really providing enough background info, and hopefully this would make it easier to capture and archive that.
Really all you'd need to know to participate in the use of this is to build your own kernel - all! - or hopefully to apply test patches. Then you'd fill out a web form.
Kernel developers who didn't want to participate wouldn't have to, or maybe we could post summary information in some helpful way to the linux-kernel list.
Michael D. Crawford GoingWare Inc
A proposed project to help QA the linux kernel
on
Linux 2.2.18 Released
·
· Score: 3
Want to help? Write crawford@goingware.com I know how to code in a variety of languages, but I don't know squat about designing a database schema.
I thought something like this would be helpful after I subscribed to the linux-kernel mailing list for a while to report a bug in 2.4.0 and work with the kernel developers to get it fixed. The bug got fixed, but I sure got a lot of mail and it was a little hard getting the fix nailed down.
Michael D. Crawford GoingWare Inc
The Programmer's Cheer?
on
IBMs CMOS 9S
·
· Score: 2
Shift to the Left!
Shift to the Right!
Pop Up!
Push Down!
Byte! Byte! Byte
One thing that really sucks about quicktime 4 for windows is that you have to download about four megabytes for each individual machine you want to install the damn thing on.
This sucks when you've got DSL at work and a 28.8 modem at home. A while back I downloaded the quicktime 4 for windows to a PC at work, and what you got was a little downloader stub app. You'd make your selection for installation options and then it would download the real thing.
The cygwin installer works this way but what you get there are tar.gz files that you can share on a network or burn on a CD, and you can update individual packages at your convenience. You can then choose to install from a local archive of these downloaded files.
But the Quicktime installer downloads this 4 megabyte file that allows one installation - right when you download - and then it's useless. Much to my disappointment, I found this out after I took it home and tried to install it on my PC at home. I ended up download 4 MB at 28.8.
So be very wary even of downloadable software - be sure that the "network installer" allows an install from a local hard drive or the install archive burned onto a CD - or later, it won't be a matter of an annoying wait for a slow download, but when the package isn't available anymore online you won't be able to install at all.
I should point out before you get to into it that it won't build out of the box with Microsoft Visual C++.
This is a known issue with some of the headers and templates and is expected to be fixed in the near future.
The reason this wasn't considered a priority in the past was that everyone was happy using Metrowerks Codewarrior on windows, in part because it has better ISO standard compliance and in part because you can share IDE project files between the Mac and Windows.
I was even cross-compiling in both directions at points, and when I got a new PC that was much faster than my old Mac, I did all my Mac builds under windows.
It will build with gcc (although there are parts of the API that aren't implemented under Linux yet), so it's not hardwired to a particular compiler.
If you have the cash, I encourage you to try out codewarrior, if you don't, work with the mailing list and we'll get you a visual C++ compatible version soon.
Also note that I accidentally wrote some code that compiled fine under windows but not mac on codewarrior:
class Foo{
public:
void Foo::MyMethod( int AnArg );
}
This is obviously illegal - under codewarrior for Mac, it complained that there was an illegal using qualifier or something like that.
When I brought this up with Metrowerks support, they said they had a "#pragma cpp_extensions on" on by default under the Windows compiler because otherwise a lot of Windows apps wouldn't compile.
And in fact when I tried to ensure the correctness of my own code by setting "#pragma cpp_extensions off" in my zconfig.h file it broke the compile in the Microsoft headers where they were included by ZooLib's windows platform implementation >:-/
There's very little traffic on the list yet because almost all of the people on it have been using ZooLib for a long time and don't need to ask questions (or they mail each other directly) - it's only recently been released as open source but it was a proprietary API for a long time.
But many of us are happy to answer questions, I know I am, and ZooLib author Andy Green is very helpful too. I try to field the questions as much as I can so he can concentrate on development of the library itself.
API docs are coming, they will start as guides to the sample code, and additional sample code with Howto's on the various features. A proper detailed API reference will probably be a while in coming but it's pretty easy to get around the source code in an IDE or class browser or maybe you can run doxygen on it - one thing I mean to do is process it with doxygen and upload the pages and a tarball to the ZooLib website.
And even if you don't plan to go cross-platform, it is in fact a nice API. I find it lovely to use. It makes multithreading your apps much easier for example, gives you nice high-level C++ class interfaces to TCP networking. If you don't plan to be cross-platform at all, you can use ZooLib without any proprocessor guards and freely intermix windows and ZooLib code.
Probably the hardest thing to figure out is the widget layout - the use of the ZPaneLocators. Widgets don't store their location in a member variable, whenever they need it they ask their pane locator where they are. Similarly buttons ask their pane locator for their highlight state.
You're free to store these things in member variables of the pane locator but you can also calculate it at runtime, and a common thing to do is to say "He's just below this pane" or "He's to the right of that pane" and recurse until you hit the top-left corner.
This makes adjustment for different text widths in localization or changing font size as a user preference automatic. If you change the width of the text in a button, just invalidate the window and everything will lay themselves out again.
If you really had a good reason to believe they had taken the source, all you would have to do is sue them. Then, during discovery, you would have the right to inspect the source code. They would be committing perjury if they gave you something other than the real source, and while I wouldn't put that beyond their scruples, it would be easy to detect because it wouldn't build to make the product they're selling.
The hard part would be to not get the case thrown out. You'd have to show a reasonable likelihood that they really were using the source - statements from turncoat employees would help there.
But there's no mistaking reverse engineering. An ex-employee from a company I used to work for wrote a really buggy product that I was later hired to fix. His employment at that company ended. A couple years later, his new employer shipped a product with somewhat similar functions that turned out to have some of the exact same bugs as the product he'd originally written for us. The bugs were obscure enough and particular enough they couldn't possibly have been an accident
We opened it up in ResEdit (a programmers tool for the MacOS, usually used to edit UI elements) and found text strings that had no purpose in this new program but happened to be identical to ones from his old product, the one I later fixed.
This is when I learned about discovery. I asked my boss how we could ever prove they had our source code and he said the court would order them to give it to us.
No lawsuit turned out from this particular case but it could well have. They got their comeuppance in the end anyway - because they hired this miserable joke of a programmer their product failed in the market. He nearly put the company I worked for out of business with what he did to our product.
In the case of something like the linux kernel you could show that large chunks of the MS-Unix kernel were binary identical the the stock linux kernel if it was built with Microsoft Visual C, for example. Or you could look for the names of entry points, the interfaces of some data structures other than POSIX standards and so on.
Basically you reverse engineer it to the point where you can convince a judge that it could be stolen linux, but you don't have to prove it really was - that's what the lawsuit is for, and for that discovery gets you everything you need.
That's why the DOJ got to comb through Microsoft's email archives. You'd get to do that too.
Of course, you'll have a big legal bill during the process and you'd damn well better not lose or you'll have to pay Microsoft's legal bill - including their expenses for cooperating with your discovery. You can bet they don't hire cheap lawyer's and then there'd be the administrative expenses too.
I sent the owner of nomayo.com a note telling him he's on slashdot, and he responded that he has in fact won the suit.
I encouraged him to come here and comment, as it would be of great interest to slashdot readers to hear from someone who won an actual court case defending their domain name.
Yes, you can run some Microsoft applications on the Mac, but even when Microsoft does make the effort to keep their Mac apps current with the windows versions, there are tons of API's available on Windows that are not available on the Mac that Windows apps take advantage of.
One thing you're probably happy about is that if you run Office on a Mac you're probably launching the app the first time when you actually double-click an app icon.
But my understanding is that when a Windows box with Office installs boots, a lot of office components are loaded at boot time. This makes the applications start up faster - at the expense of slowing your boot process, loading up your application memory with data, and loading up your windows kernel with resources like file descriptors, loaded DLL's and the like.
Not that the equivalent things couldn't be done on the Mac but I'm sure that the windows versions can do more than the Mac versions.
Oh, yeah, I've been meaning to point out for a long time that the trend towards running applications via a browser is basically killing what free software set out to do.
Sure, the web server developer gets to host his web application with apache and linux using free software.
Usually, the end user can access the web application for free, or at worst have some banner ads or be tracked by cookies.
But the end user doesn't have the web server software on their computer - to the extent end-users are doing their daily work over the web, they are using software that is generally closed-source and proprietary.
You will feel this the worst when your favorite dot-com goes out of business, taking its source code with it.
So, what I'd like to suggest is that someone draft some kind of "server GPL", that says that releasing some software in such a way that the GPL would then take effect, would be to allow the software to accept communications from a different computer, or to transmit them.
That way people could write free web applications and if a company used your web application and modified it, they'd have to provide source if they allowed anyone to access it over the web at all.
As it stands, they'd only have to provide source if they provided binaries of the web applications to people outside their company, which is not what happens when there is only one copy of the application executable itself, kept on a central server.
Microsoft is not so stupid with their.NET. When people get used to just downloading their apps in an instant, they won't want to take the trouble to actually install software they'd posses themselves, even if that would ultimately benefit them.
Remember, if you possess the original media your executable came on, you can still run the program when the original publisher goes out of business. That's not the case with web applications.
This reminds me that when I was at Apple someone remarked in a meeting that people from other companies often asked Apple employees why Apple never produced a PC clone that ran windows.
If their aim was to sell hardware, they could beat the hell out of any PC vendor selling windows boxes. Imagine something with the industrial design of an iMac or G4 cube running Microsoft software. It would be tremendously popular in the more image-conscious business environments.
Taken from a purely business perspective, it would make a lot of sense for Apple to sell Windows boxes - they could come bundled with a lot of software to integrate them with Macs, for example, like AppleTalk networking.
But this was never seriously considered for largely religious reasons. It was clear it would have caused an employee revolt.
At some point patents went from being valid for 17 years from when they were issued to 20 years from when they were filed. I think this falls under the 17 year case, and it was issued November 11, 1986. That means it will expire November 11, 2003.
That is great news for free software, because it means that you can do boolean calculations of graphical shapes (important to efficient screen updating) go vastly faster than, say, maintaining a list of rectangles.
It would, in general, be real useful for someone to keep an eye on the patent that are currently expiring and to make suggestions on which ones would be good candidates for free software. This is harder than you might think, not just because of the legalese but because patents usually don't say they are for software but are couched in terms of mechanical or electronic devices, so it's not even clear when a software patent exists.
Michael D. Crawford
GoingWare Inc
In general Stroustrup feels that a lot of the trouble people have with C++ is that it's not taught very well and he's making an effort to address that. One concern he has is that a common teaching approach is to teach C first and then "move up" to C++.
But this is a huge problem because you really don't want to do things the same way in C and C++ - for example, you learn char-array based strings in C and then have to forget them to use the string template in C++ - and often instructors don't bother to teach the different styles or worse don't know them themselves.
He discusses this in his paper Learning C++ as a New Language (PDF format) which you'll find on his papers page.
I didn't have too high a regard for C++ until I read the abovementioned slashdot Q&A but I decided then that it would be really worth my while to devote some serious effort to studying it. I did, mostly last spring and summer and the results immediately paid off, in terms of writing cleaner code, more efficient code, having fewer bugs and architecting things that I couldn't have hoped to have done before I'd put that effort into study.
I discuss that in Study Fundamentals Not APIs, Tools or OSes.
Michael D. Crawford
GoingWare Inc
It's a threat because, by running applications off a web server, you don't have the binary to an application and so the GNU General Public License's requirement that the publisher distribute source does not apply.
This doesn't apply just to .NET but to all server-based computing. I'm particularly concerned with .NET because it threatens to make server-based applications commonplace.
I guess with .NET you'll download some client-side software, but it won't be able to run without the server side software, to which you won't be able to obtain source - even if the source was originally written for a Free Software project and licensed with the GPL.
Please read my article The Web is the Ultimate Copy Protection on Advogato.
And yes, the folks who replied to the article had some very good points about how copyright does not appear to hold any hope of solving this problem, even with my proposed revision of the GPL (which RMS says he's been considering).
It's a sticky problem and a potentially disastrous one, not just for free software but for all computer users because of the losses they will face as application service providers go out of business or change focus from time to time, taking their applications and source code with them.
Michael D. Crawford
GoingWare Inc
Java isn't platform independent, it is a platform unto itself, and a proprietary one at that. Just try making use of OS-specific features from a Java program, or doing platform-appropriate things that weren't envisioned by the original designers of the Java platform.
For example, the javax.comm package for serial communications has an API for enumerating the names of the serial ports. On Windows, you get "COM1" and "COM2:" and you can present these in a UI like a popup menu for the user to select a port to use. On Unix, you get something like "/dev/ttya" and so on.
But on Macintosh, you get the words "printer" and "modem". There is no API for getting the icons for the printer and modem ports, because Java was designed by a bunch of textual unixheads from Sun.
If you want to see true platform independence, check out the ZooLib cross-platform application framework. ZooLib allows you to write a single set of C++ sources and compile them to native executables on Mac OS, Windows, BeOS and Posix flavors with XWindows such as Linux.
The platform-specific layer is small and well-architected so it's not a lot of work to bind it to a new platform like, say, QNX.
And you can do that, and sell the results as you like, because ZooLib is provided under the MIT License so you can use it for both open source and closed source projects. Put that in your "Sun Community License" and smoke it.
Please read about Why ZooLib is Good for the Community.
Michael D. Crawford
GoingWare Inc
Compare how frequently you have to design and implement classes in your own work to the frequency with which you need to design and implement algorithms. These days, all the algorithms and data structures that would be taught in an AP class are provided by libraries that you just use. I know the vast majority of code anyone writes just sort of does stuff, it can hardly be called an algorithm. But making good choices about program structure (and these days this means class structure) is crucial to having any hope of ever getting a program to work, let alone run efficiently.
A while back the San Jose State University Professional Development Center asked me to teach some programming classes.
I proposed to teach two classes, one on the fundamentals of object-oriented programming, and the other an OOP project - writing a program of some significant size (considering the experience level of the students).
My descriptions of the two classes are given here. The links to the original course descriptions in that page seem to be dead now.
I felt that these two courses addressed two signicant flaws in most introductory programming education - one was an inordinate focus on the particulars of a language without concentrating on how to program well, and the other was that the exercises done in a course rarely took more than a week to do, and even if there was a term project, it usually was mixed in with other work, and so it wouldn't be of significant size.
This means that exercises in most introductory courses typically gloss over important issues that crop up in real software development, like robust error handling and dealing with the architecture of your program on a large scale.
These courses weren't meant to be that long so I really couldn't get that far into it but the point was that I would be neither teaching the language nor computer science (algorithms, data structures, etc.). Instead, I would be teaching what I could probably get flamed at for calling The Art of Software Engineering.
In the first course, I would concentrate on how to make good choices for what classes to use in your program and how they should relate to each other (when to use inheritance vs. composition, for example), basically how to acquire a good sense of aesthetics for the best way to divide your problem into maanageable parts. There are an infinitude of ways you can write a program, but a far lesser number of good ways to write a program, and this is not commonly taught.
I would use Java in the class, but cover the bare minimum of the language required to cover the conceptual material. Someone else was planning on teaching a course on Java itself.
I also felt that the project course would be of significant value in helping the students find real programming jobs. While they may have to expand on the projects after leaving the class, I knew that (at the time anyway), noone would hire a novice programmer until he'd shipped a product (oh how times have changed) - free software and shareware does count as a real product, but the important thing is that you have to have completed a program of some significant size.
Ironically, the courses were canceled after only two students signed up for them by the enrollment deadline.
Our general theory was that the students didn't percieve this classes as having an immediate payoff in a marketable job skill (SJSU Prof Dev was in good part a fundraising component of the regular University so the classes were frequently targeted towards marketable skills) - when really I felt it would do you more good than a class concentrating on Java or any particular language - it's not hard to pick up a language out of a book but what I meant to teach really would need personal interaction and discussion with an instructor and one's classmates.
I'd still like to teach the classes. I am doing just that in one form by writing GoingWare's Bag of Programming Tips.
Michael D. Crawford
GoingWare Inc
I won't even have any real confidence in its validity as a language until there are multiple competing, independently developed implementations.
While you can purchase Java implementations from lots of different vendors, almost all of them are derived from Sun's code - the virtual machine is ported, and the source code to the libraries is direct from Sun.
What I'm talking about is commercial quality (whether they're free or not), widely available and supported VM's, and runtime libraries that are written to a spec rather than being from a common codebase.
You might be interested to read what Bjarne Stroustrup has to say about Java - that it is not platform-independent, but rather it is a proprietary platform unto itself.
I think it is completely inappropriate that the college board is requiring the study of a vendor-specific language for an exam. That just galls me.
Michael D. Crawford
GoingWare Inc
- http://xml.apache.org
I've used the Xerces-C library (it's actually C++) in a consumer GUI product whose user documents were XML files, and I think it's just great - it builds on many platforms. A wrapper allows Xerces-C to be used from Perl. Xerces-J has a similar API (DOM and SAX) but is written in Java. They have stuff for XSLT, Scalable Vector Graphics, Soap and so on.So you really don't need to buy into someone's proprietary platform, use the source luke.
Michael D. Crawford
GoingWare Inc
I think actually the kernel is of very high quality, compared to competing operating systems like the windows kernel or the Mac OS system, but it does take a long time for the kernel to get the kinks worked out.
I realized when I got onto the Linux-Kernel mailing list to report a bug in 2.4.0-test a few months ago that people who were less hardcore developers would probably be put off by the process of reporting bugs to the kernel, and suggested this database to the kernel mailing list. It was generally well received.
In the long run, I'd like all of Free Software to be more rigorously tested for quality. This is just a start - but the database source, and parts of the database itself could be reused for other projects.
If you'd like to participate, please email me at crawford@goingware.com
Michael D. Crawford
GoingWare Inc
While it's probably the case that software today is too complex to get all the bugs out, the situation could be vastly better than it currently is. There is a lot of discussion of current software problems and what to do about them in Risks.
It is frequented by many esteemed experts in software architecture, reliability, security as well as just plain folks. The bug anecdotes reported there are often pretty funny but sometimes frightening and sobering too.
I think anyone who works with computers in any substantial way should read Risks.
Michael D. Crawford
GoingWare Inc
There isn't a firm rule to define when someone is an employee or not, but the general test (from IRS ruling 87-41) is that you're not if you satisfy most of The Twenty Factors. Here is a summary of them.
This basically means:
- The contractor keeps his own hours
- The contractor provides his own equipment and office space
- The contractor takes on the financial risk
- Whether the contractor is working, or could be working for more than one firm at a time.
Really, the 20 factors are not a bad way to do business if you really are an independent business as I am, but in no way do most contractor/client relationships satisfy them.Michael D. Crawford
GoingWare Inc
Please read why I feel you shouldn't either:
- Important Notes to Recruiters and Contract Agencies
- Market Yourself - Tips for High-Tech Consultants
At the very least, recruiters and contract agencies take 30% of your pay - recruiters take 30% of your first years pay, agencies take it the whole time you're a contractor. But if they can get away with it, they will take far more.And they're pushy and ignorant besides. How many of you have gotten a phone call from an agency who wanted to place you who clearly hadn't even read your resume, let alone understood it? The above two pages contain many horrifying anecdotes of recruiter and contract agency abuses, unethical practices and just plain stupidity.
Michael D. Crawford
GoingWare Inc
There was one poor guy on alt.computer.consultants that was making $30 an hour from his agency, but they were billing him to the client at $90 per hour!
This is one of the instances of unethical agency practices that led me to write Market Yourself - Tips for High-Tech Consultants
Michael D. Crawford
GoingWare Inc
Because contractor expenses count as expenses to vendors, while they are an expense, they make it appear as if your company is getting all this work done with far fewer employees than it really is. This is pretty significant as I understand that high-tech companies often employee as many as 40% of their staff as contractors.
If I were a stockholder in any high-tech company (I got out well before the bubble burst) I'd be enraged at this.
Michael D. Crawford
GoingWare Inc
I've never been part of the kernel development effort except to do some testing and to report bugs, so it would be completely inappropriate for me to try to do something like that.
What I do want to do is make it easier for more users to participate in the testing process, in part so that a wider variety of configurations gets tested quicker, and so that novice users can be guided along in the steps needed to provide a meaningful bug report.
I've seen lots of reports saying "it doesn't work" or "this driver doesn't work" without really providing enough background info, and hopefully this would make it easier to capture and archive that.
Really all you'd need to know to participate in the use of this is to build your own kernel - all! - or hopefully to apply test patches. Then you'd fill out a web form.
Kernel developers who didn't want to participate wouldn't have to, or maybe we could post summary information in some helpful way to the linux-kernel list.
Michael D. Crawford
GoingWare Inc
Want to help? Write crawford@goingware.com I know how to code in a variety of languages, but I don't know squat about designing a database schema.
I thought something like this would be helpful after I subscribed to the linux-kernel mailing list for a while to report a bug in 2.4.0 and work with the kernel developers to get it fixed. The bug got fixed, but I sure got a lot of mail and it was a little hard getting the fix nailed down.
Michael D. Crawford
GoingWare Inc
Shift to the Right!
Pop Up!
Push Down!
Byte! Byte! Byte
Michael D. Crawford
GoingWare Inc
-
AltaVista'z Warez Search Engine
-
Google'z Warez Search Engine
I'm sure the basic principles applied above can be used to turn many of the available search engines into warez search enginez.31ee7e1y Yours,
Michael D. Crawford
GoingWare Inc
This sucks when you've got DSL at work and a 28.8 modem at home. A while back I downloaded the quicktime 4 for windows to a PC at work, and what you got was a little downloader stub app. You'd make your selection for installation options and then it would download the real thing.
The cygwin installer works this way but what you get there are tar.gz files that you can share on a network or burn on a CD, and you can update individual packages at your convenience. You can then choose to install from a local archive of these downloaded files.
But the Quicktime installer downloads this 4 megabyte file that allows one installation - right when you download - and then it's useless. Much to my disappointment, I found this out after I took it home and tried to install it on my PC at home. I ended up download 4 MB at 28.8.
So be very wary even of downloadable software - be sure that the "network installer" allows an install from a local hard drive or the install archive burned onto a CD - or later, it won't be a matter of an annoying wait for a slow download, but when the package isn't available anymore online you won't be able to install at all.
Michael D. Crawford
GoingWare Inc
This is a known issue with some of the headers and templates and is expected to be fixed in the near future.
The reason this wasn't considered a priority in the past was that everyone was happy using Metrowerks Codewarrior on windows, in part because it has better ISO standard compliance and in part because you can share IDE project files between the Mac and Windows.
I was even cross-compiling in both directions at points, and when I got a new PC that was much faster than my old Mac, I did all my Mac builds under windows.
It will build with gcc (although there are parts of the API that aren't implemented under Linux yet), so it's not hardwired to a particular compiler.
If you have the cash, I encourage you to try out codewarrior, if you don't, work with the mailing list and we'll get you a visual C++ compatible version soon.
Also note that I accidentally wrote some code that compiled fine under windows but not mac on codewarrior:
class Foo{
public:
void Foo::MyMethod( int AnArg );
}
This is obviously illegal - under codewarrior for Mac, it complained that there was an illegal using qualifier or something like that.
When I brought this up with Metrowerks support, they said they had a "#pragma cpp_extensions on" on by default under the Windows compiler because otherwise a lot of Windows apps wouldn't compile.
And in fact when I tried to ensure the correctness of my own code by setting "#pragma cpp_extensions off" in my zconfig.h file it broke the compile in the Microsoft headers where they were included by ZooLib's windows platform implementation >:-/
Michael D. Crawford
GoingWare Inc
There's very little traffic on the list yet because almost all of the people on it have been using ZooLib for a long time and don't need to ask questions (or they mail each other directly) - it's only recently been released as open source but it was a proprietary API for a long time.
But many of us are happy to answer questions, I know I am, and ZooLib author Andy Green is very helpful too. I try to field the questions as much as I can so he can concentrate on development of the library itself.
API docs are coming, they will start as guides to the sample code, and additional sample code with Howto's on the various features. A proper detailed API reference will probably be a while in coming but it's pretty easy to get around the source code in an IDE or class browser or maybe you can run doxygen on it - one thing I mean to do is process it with doxygen and upload the pages and a tarball to the ZooLib website.
And even if you don't plan to go cross-platform, it is in fact a nice API. I find it lovely to use. It makes multithreading your apps much easier for example, gives you nice high-level C++ class interfaces to TCP networking. If you don't plan to be cross-platform at all, you can use ZooLib without any proprocessor guards and freely intermix windows and ZooLib code.
Probably the hardest thing to figure out is the widget layout - the use of the ZPaneLocators. Widgets don't store their location in a member variable, whenever they need it they ask their pane locator where they are. Similarly buttons ask their pane locator for their highlight state.
You're free to store these things in member variables of the pane locator but you can also calculate it at runtime, and a common thing to do is to say "He's just below this pane" or "He's to the right of that pane" and recurse until you hit the top-left corner.
This makes adjustment for different text widths in localization or changing font size as a user preference automatic. If you change the width of the text in a button, just invalidate the window and everything will lay themselves out again.
Michael D. Crawford
GoingWare Inc
The hard part would be to not get the case thrown out. You'd have to show a reasonable likelihood that they really were using the source - statements from turncoat employees would help there.
But there's no mistaking reverse engineering. An ex-employee from a company I used to work for wrote a really buggy product that I was later hired to fix. His employment at that company ended. A couple years later, his new employer shipped a product with somewhat similar functions that turned out to have some of the exact same bugs as the product he'd originally written for us. The bugs were obscure enough and particular enough they couldn't possibly have been an accident
We opened it up in ResEdit (a programmers tool for the MacOS, usually used to edit UI elements) and found text strings that had no purpose in this new program but happened to be identical to ones from his old product, the one I later fixed.
This is when I learned about discovery. I asked my boss how we could ever prove they had our source code and he said the court would order them to give it to us.
No lawsuit turned out from this particular case but it could well have. They got their comeuppance in the end anyway - because they hired this miserable joke of a programmer their product failed in the market. He nearly put the company I worked for out of business with what he did to our product.
In the case of something like the linux kernel you could show that large chunks of the MS-Unix kernel were binary identical the the stock linux kernel if it was built with Microsoft Visual C, for example. Or you could look for the names of entry points, the interfaces of some data structures other than POSIX standards and so on.
Basically you reverse engineer it to the point where you can convince a judge that it could be stolen linux, but you don't have to prove it really was - that's what the lawsuit is for, and for that discovery gets you everything you need.
That's why the DOJ got to comb through Microsoft's email archives. You'd get to do that too.
Of course, you'll have a big legal bill during the process and you'd damn well better not lose or you'll have to pay Microsoft's legal bill - including their expenses for cooperating with your discovery. You can bet they don't hire cheap lawyer's and then there'd be the administrative expenses too.
Michael D. Crawford
GoingWare Inc
I encouraged him to come here and comment, as it would be of great interest to slashdot readers to hear from someone who won an actual court case defending their domain name.
Michael D. Crawford
GoingWare Inc
One thing you're probably happy about is that if you run Office on a Mac you're probably launching the app the first time when you actually double-click an app icon.
But my understanding is that when a Windows box with Office installs boots, a lot of office components are loaded at boot time. This makes the applications start up faster - at the expense of slowing your boot process, loading up your application memory with data, and loading up your windows kernel with resources like file descriptors, loaded DLL's and the like.
Not that the equivalent things couldn't be done on the Mac but I'm sure that the windows versions can do more than the Mac versions.
Michael D. Crawford
GoingWare Inc
Sure, the web server developer gets to host his web application with apache and linux using free software.
Usually, the end user can access the web application for free, or at worst have some banner ads or be tracked by cookies.
But the end user doesn't have the web server software on their computer - to the extent end-users are doing their daily work over the web, they are using software that is generally closed-source and proprietary.
You will feel this the worst when your favorite dot-com goes out of business, taking its source code with it.
So, what I'd like to suggest is that someone draft some kind of "server GPL", that says that releasing some software in such a way that the GPL would then take effect, would be to allow the software to accept communications from a different computer, or to transmit them.
That way people could write free web applications and if a company used your web application and modified it, they'd have to provide source if they allowed anyone to access it over the web at all.
As it stands, they'd only have to provide source if they provided binaries of the web applications to people outside their company, which is not what happens when there is only one copy of the application executable itself, kept on a central server.
Microsoft is not so stupid with their .NET. When people get used to just downloading their apps in an instant, they won't want to take the trouble to actually install software they'd posses themselves, even if that would ultimately benefit them.
Remember, if you possess the original media your executable came on, you can still run the program when the original publisher goes out of business. That's not the case with web applications.
Michael D. Crawford
GoingWare Inc
If their aim was to sell hardware, they could beat the hell out of any PC vendor selling windows boxes. Imagine something with the industrial design of an iMac or G4 cube running Microsoft software. It would be tremendously popular in the more image-conscious business environments.
Taken from a purely business perspective, it would make a lot of sense for Apple to sell Windows boxes - they could come bundled with a lot of software to integrate them with Macs, for example, like AppleTalk networking.
But this was never seriously considered for largely religious reasons. It was clear it would have caused an employee revolt.
Michael D. Crawford
GoingWare Inc