last updated:06 Aug 2003 15:00 UK time
Joel On Software Discussion Forum
JOS Statistics - Recent Comments
(Comments added for week ending Sun 02 Mar 2003) | View Other Weeks
Remote Desktop/Remote Assistant | Sun 02 Mar | Caleb Calpp
I regularly use Remote Desktop. My issue is that it blanks the screen of the host display. My uses include multimedia, so I need the host display (a 50 plasma) to remain active. tightVNC, etc is too slow, I want to use Remote Desktop. I know that Remote Assistance uses the same terminal services base as Remote Desktop and does NOT blank the host display. The problem is I cannot find a way to automate Remote Assistance invitation and granting of the Remote Assistance session. Does anyone know a workaround to allow the Remote Assistance session to be full implemented REMOTELY, without requiring being at the host pc??? Thanks --Caleb
Sun 02 Mar | RRKSS | Have you tried the Remote Desktop feature in Microsoft Netmeeting? Go to run and type 'conf' to start it up. Once you have gone through the wizard and started the actual program all you have to do is click 'Remote Desktop Sharing' under tools. I hope that helps
"Less than expert" Technical Professionals? | Sun 02 Mar | Philo
Im having growing unhappiness with the lack of technical expertise I see in the IT industry. As I advance in proficiency, I keep thinking that there is so much more I have to learn - I feel like a journeyman, thinking there are true masters out there. But increasingly Im thinking I *am* a master in a sea of journeymen... The most recent thing thats made me think this - I deal with an EDI document company. When we signed the contract with them, they guaranteed they could handle XML. Well, it turns out handle means barely cope with - they only handle it by writing it out as a flat file, which means through integration we kept having to harp on them about violating XML standards (and they still cant handle empty tag shorthand: ) Okay, so their salesmen were a mite overeager, fair enough. But even in EDI, where they are supposed to be experts, we keep having to teach them stuff. The latest is dealing with 997 acknowledgement documents, where it seems they have no concept of how they are supposed to work. Last week their senior mapper commented how cool some of the stuff were doing is, when all were doing is following the specification. And so it goes. DBAs that dont understand stored procedures; sysadmins who dont understand DNS caching; programmers who cant grasp recursion... Is it just me? Are my expectations too high? Philo
Sun 02 Mar | anonymous | I have definitely noticed this. I work with a bunch of Perl programmers who don't understand variable interpolation in double quoted strings. Not to mention all variables are global in all of our scripts because no one understands scoping. These practices are actually encouraged by the people in charge. They don't want anyone who never made it past page 10 of Learning Perl to worry about learning anything. I think the problem is too many people become technical professionals because of the money. I have yet to work with someone who does it for the money that is any good at it. I guess it doesn't hurt that most people have low expectations for software.
Sun 02 Mar | mackinac | >>> I think the problem is too many people become technical professionals because of the money. <<< They wouldn't be working at a technical job if someone hadn't decided to hire them. This thread sounds a lot like others we have had. The people who post to this site are technical professionals who get frustrated by seeing such things. But the people who make the decisions that create such a work environment are management people. It would be very interesting to get a few of them to tell us why they make the decisions they do, but I don't think we're going to hear from them.
Sun 02 Mar | IMO | You get what you pay for. Companies hire the anyone that will do the job for the least amount. These Technical Professionals are really just task doers. If you have competence and want to make money go contracting. If you have competence and want to do real interesting work try getting a research programmer position at a national lab or university.
Sun 02 Mar | The Real PC | What is a research programmer?
Sun 02 Mar | Patrik | >What is a research programmer? A programmer that works with a team of researchers who works on some unsolved cool problem. Think Palo Alto Research Labs or the likes of it... Thats my take :)
Sun 02 Mar | Matt H. | You get what you pay for. Companies hire the anyone that will do the job for the least amount This is -NOT- always true. Personally. I think a lot of it has to do with core competancies and insecurity. Formula for failure: If a company has insecure management ('B People'), they will hire people who are not as good as they are ('C People') in order to feel more secure. At this point, the company is just screwed. :-) Joel Spolsky wrote an essay on this, so it must be true. :-) Forumula for success: By the same token, if a company is founded by coders or the companies 'strategic edge' involves technology - and the management of those areas gets the best and the brightest - you might NOT have a problem, because they view Technology and as INVESTMENT, not a cost center. This is especially hard to do if you are coding internal apps. It's easier to do if you are selling the stuff, but mistakes are still common. My conclusions? In order to be recognized as exceptional, and get paid for it, you need a few conditions: (1) Be able to articulate the value of what you do, and why it's more than joe incompetant, (2) Have a management team that intutitively 'gets' technology and views it as an investment, (3) Have a work environment this has pride and recognition, instead of fear and insecurity. In any event, good luck. In my experience, birds of a feather flock together. Perhaps you've just been flying with the wrong flock ...
Sun 02 Mar | Matt H. | This is especially hard to do if you are coding internal apps. --- When i wrote this above, I ment it in the context of 'articulate the value of what you are doing' In other words, if what you do this year will sell for $1,000,000, it's pretty easy to understand the value of hiring the best and brightest. If you're doing internal apps, it's harder to 'prove' the 'worth' of hiring the best and paying them what they are worth. regards,
Sun 02 Mar | Bored Bystander | I think there are several factors in confluence: First, software has become a mass market commodity. So the hiring needs of businesses far exceed the gene pool's and the educational systems' ability to produce competent candidates for software development. It's one thing if a need for 10x the number of plumbers we currently have all of a suddenly became an issue for economic growth in the next decade. Instead, our economy in the 90's needed masses of people to do work that only a small and gifted percentile of the population is capable of doing competently and 'getting'. The ability to think and reason abstractly doesn't grow on trees. Secondly, like any hot growth industry, the computer industry has become a hotbed of inflated egos and a prevailing attitude that anyone who is any good acts like they're God. Dripping arrogance has become pretty much an expected mentality in this field. So you often can't distinguish the really good people at first glance from the ones that are only talking themselves up who can't perform. Third - the commodity nature of programming and the ego factor have created a living example of Gresham's Law - good currency chases out bad. By that I mean that it doesn't really matter how good you are, it's more a question whether you are well connected enough to be heard above 10 or 100 other people with the same nominal 'skills'. It doesn't matter if you can design and engineer effectively at a high level, and if you can adapt quickly, at least when it comes to convincing someone to hire you. No, hirability anymore comes down to a number of petty factors such as: not intimidating the hiring managers; pure personality match; having the right alphabet soup skills, the right language versions, etc; and being in the right age group so that you won't cost the employer too much in health insurance, time off for necessary family matters, etc. Except for tiny pockets of virtue, this industry excels at crapping on experienced people that know how to achieve results. It doesn't seem to make any sense on the surface, but look at how many programmers of age 45+ are around. If experience were valued, you wouldn't have the widespread habit of referring to anyone with years of experience as an old fogey loser who is tainted by experience with outdated technology. The demographics pretty much point to a meatgrinder that treats individuals like trash and wants only a PC-acceptable template person.
Sun 02 Mar | Bored Bystander | >> Gresham's Law - good currency chases out bad ACK, *I* should be chased out. I MEANT: Gresham's Law - bad currency chases out good. SORRY!
Sun 02 Mar | Walter Rumsby | If 'A's hire 'A's and 'B's hire 'C's, who hired the 'B's in the first place? :) An issue here is mentorship. I see people coming straight out of colleges and other training courses, etc being hired as programmers. Fine, no issue here, the issue is that some of these people are 'let loose' without any/enough guidance from somebody with enough experience (AND the skills to guide them) to teach them best practices, potholes to avoid, etc. These unchecked bad habits become standard practice, as these developers get 'more experience' (ie. they clock up more years), they get more respect/power/influence over projects - in situations like this 'years accrued' is not necessarily a clear measure of ability.
Writing Perfect Code? | Sun 02 Mar | anon
For many weeks now, I have been writing near-perfect code, the first time. What I mean by this is that I have been in the flow to such an extent for such a long time now that when I need to write function X or write query Y or build screen Z, Ive been able to do it almost effortlessly and with a seemingly impossibly-low error rate. The code just pours forth, fully-formed, along with some of the most rigorous unit tests Ive ever written that **invariably** beat that code to death without a single error. This is in huge contract to how I coded just six months ago or so, where (comparitively) I was stumbling and falling over myself to get even moderately complex modules built. It seemed that I was proceeding in a normal way then, on par with some of my sharpest coworkers. Ive started to worry quite a lot about this, mostly that the code that *seems* right, which sprang fully-formed from my fingertips, is actually riddled with fatal bugs that will rear up and devestate my companys reputation. But some of this perfect code has been in production for almost five months, being used by thousands every day without so much of a peep of complaint. Im wondering if Im experiencing delusions of grandeur, or if this is normal after one has gained a certain level of experience. FYI, I have about six years of relatively broad experience, and much of that was spent designing large systems as well as developing them. So, has anyone had similar experiences, or am I just crazy?
Sun 02 Mar | Also anon | When you have a solid grasp of what it is you need to write, it usually ends up being easy to code as you mentioned. OTOH when you don't have a good grasp of what needs to be done it is then a drudgery. This has happened to me many times. A good attitude and perseverance are more important than the fickle, 'The first time I code something I got it right.'
Sun 02 Mar | sgf | Whnever I code something and it compiles AND runs correctly the first time I get nervous. I know I must have missed something.....
Sun 02 Mar | Greg | Strange how that happens. I was able to do to something like this. I think what happened is that I was just aware of each function/method's inputs and outputs. My thinking was just simpler, as if I stripped out all those extraneous thoughts that lead to confusion. I can occasionally do this now in those little python utils I make for myself (right now I'm just studying) and the only time I'm tripped up is when I use one of those destructive functions that return nil. As you might be able to tell, I hate state destruction except as an optimization...
Why should Joel want your E-mail? | Sun 02 Mar | Vlad
Needless to say, that Joel is a crafty clever person. Somehow he wants all of our Emails to be registred in his database. Why?
Sun 02 Mar | Stephen Jones | So he can send you an email when he posts something interesting?
Sun 02 Mar | Eric Debois | ...so he can sell it to a spammer and make $100 and destroy his rep in one smooth move?
Sun 02 Mar | Joe Blandy | ... because there can never be enough conspiracy theories on the internet?
Sun 02 Mar | Li-fan Chen | Joel won't lose all of his reputations unless we (his readership) are really smart. Hypothetically speaking, by selling the addresses to a generic 'Evil List Reseller'.. Joel will get his 100? dollars, but he has a good chance we'll never trace it back to him. For example by not ID the list as 'interested in bug tracking software or software development software' or 'interested in Human Computer Interface or User Interface Designs' and by not making the mistake of sell them only closely related softwares--how can we tell the next optical mouse spam ad is made possible with Joel's help. By carefully spam us with some generic ads or two it will add some serious doubt. And most of us have too little time to dwell on any single spam to take the analysis that far. There are a few ways for you to trace a spam back to Joel should he ever decide to sell the list, here's one: 1. Use a dummy email address hosted on your SMTP server, it should never be used or seen by anyone, and it should be registered only at the mailing list JoelOnSoftware.com. If you start getting email on this dummy email address's inbox-Joel sold his soul to the devil. This dummy email address needs to point to a non-blocking, but non-replying, and perhaps auto emptying inbox and a report should be sent to the monitor on a monthly basis to indicate whether the list was sold or not. You can automate this and use it at more than one site by setting up a auto email name generator: two random letters to indicate first and middle name and concatted with a random known lastname or vise versa concatted to your email domain. So fcsmith@bigicecreamstore.com etsmith@bigicecreamstore.com An auto email name generator is not enough.. you have to then associate that with the list or site you are monitoring. One such site might be Joel on software. Make a web interface and you can start monitoring lists and sites offering any email subscriptions. If you dope the list on a regularly scheduled period, you can even find out when the list was stolen or sold. So fcssmith@bigicecreamstore.com was added to the list in October of last year But etsmith@bigicecreamstore.com was added in March of this year.. etsmith was not spammed although fcssmith was spammed, there fore, the list was sold/stolen before March 2003 but after October 2002... Some lists are carefully designed to lazily fight against this a bit.. but most are too busy spamming to notice. But one way you can be more anonymous is to use a few more domains or use a highly objectionable domain name. Like @eff.org. I think this is how major corporations ensure their carefully collection list of company to subscriber relationships aren't being stolen by internal staff. This is also how some anti-spam algorithms learn to differentiate a genuine spammer from a non spammer. It's like throwing thousands of little rubber duck into the ocean with radio and tracking them :-)
Sun 02 Mar | Li-fan Chen | As a follow up... a lot of mailing list cleaning involves getting rid of inactive subscribers. Spammers don't do this, they want to spam you as many times as possible, the cost is so little after all. But major corporates don't send email out the same way. They don't want to spam, they want to build a relationship. So they put a lot more effort into these emailings, using actual serious mailers and taking care of security, privacy and the personalization of the content. Each such email cost much much more, and the consequences of accidentally spamming due to a overzealous marketing drone is nothing short of a few major lawsuits and lots of lost of reputation. So what they do is clean lists often. The best way to clean a list and reduce cost is to get rid of non-interactive users. If you don't click on a HTML web email, you aren't being active. If you don't open a web email, you aren't being active. If your email server bounces for a significant number of time--you are being inactive. If you have asked to be on some big 'I don't need any spam anymore!!' clearing house--you are being inactive. Anyway, the point is.. the list cleaners will clean you off the list and you will no longer be getting anymore 'crap'--from those specific major companies anyway. So if you want your rubber ducky to keep floating.. you'll actually have to write a robot to open these messages the way a real person would.. even click on those tracked links the way a real person would.. and perhaps.. even see the crazy pop-up ads like a real person would. An API like Perl::LWP should help you pull this off.
Sun 02 Mar | Dennis Atkins | It proves nothing if you get spam at that joel-only address if that address looks anything like a name. Spammers now send to every possible letter permutation they can think up that might make sense. This is why my email addresses that are well guarded that look like: dennis@megalocorp.com get tons of spam, but b29o1h3n@megalocorp.com ...gets NO spam. [not real email addresses - for demonstration purposes only] On the other hand, I use the name trick to see which charities sell my address and phone number to con artists: 'Hello, is this Pheadukits Atkins? You have won a free time share condo stay in Barbados!' 'Sorry, there is no one my that name here.' (Note to self - never trust 'Feed the Kids Inc.' again.)
Sun 02 Mar | Vlad | Let's make thing clear at this point: I never suspected Joel into being a spammer. All I understood - Joel wants all of us to register with his mailing list. I think it's a real reason for asking us, to subscribe in order to get the last article. I would not believe an actual reason: 'an article is too hot, to publish it for the masses'. One way or another, sooner or later it will leak to the masses.
Sun 02 Mar | David Clayworth | Why don't we wait for this article? From the excerpt published, it looks as though Joel is about to say something on the nature of online community (which would of course have an effect on the online communicty he hosts, hence the puzzling reference to Heisenburg effects). Maybe its an experiment on the nature of community using email, compared with community by discussion board. Looking forward to that article.
Sun 02 Mar | Li-fan Chen | Dennis Atkins: awesome catch, it's true a SMTP visit can probably get away with sending a few bogus emails just to see which will actually make it through. If an SMTP server is too dumb it will actually reply back which bogus email is really real. A smart but cynical SMTP server should answer not so truthfully. -- David
Sun 02 Mar | Geoff Bennett | Maybe Joel is doing it to reduce bandwidth costs for his service provider? If he posts the article on the website, a bjillion people will bang away at it costing a gazzilion dollars a minute in bandwidth for all the page loads. You sign up for an email -- and not everyone will because it crosses some people's 'care factor' boundaries when they have to enter their email address, and the rest are just paranoid -- and instantly a very succinct and deliberate group of people will receive the same article. If they want someone else to see it, they will have to forward it on (not actually permitted, if you read the blurb Joel wrote), but this won't cost Joel's provider an off-white cent. Quite a simple and elegant solution, if you think about it. That, or Joel is doing a study on email address user names to see which ones are the weirdest.
Python with C or C++? | Sat 01 Mar | Brian Hall
No, not a language war - chill :D Rather, I have a question. I am presently taking up learning Python for my own edification (Im not a professional programmer, and dont plan on being one - though I might at some point be a project manager), and after I would like to learn C or C++ - however, I really dont understand at all how they are different. So as the value of a tool is relative to what you wish to use it for, here is what my desire to do is: I primarily want to learn Python for client-side programming, for use in quickly building a variety of applications (preferably that run fine on as many platforms as possible), but primarily for use with games. As such I would very much like to learn languages which are more suited for GUI client-side programming than Java is (I presently already know Java and PHP, and in Java I just find it...well, not really designed for what I want to do with it, as evidenced by the attrociousness of Swing/AWT), and be sufficiently speedy for such applications. C/C++ obviously suggests itself, but from what I have learned of Python one can merely do the majority of the work and prototyping there, then simply rewrite code which is not sufficiently speedy - or which Python doesnt/cant do as well as C/C++ - in C/C++ without much of a problem. So the only question is...I dont really understand what the difference is in C and C++. I know that both Python and PHP are written in C, and most games are written in C++, and most cross-platform programs it seems are written in C...but I just dont know why. Apparently a big part of C++s features are not multi-platform compatible (templates?)? Would someone care to enlighten me to the nuances, and the ways in which one or the other is lacking or outstanding? Is there any reason Id actually want to spend any time learning C instead of/along with C++? Also, have any of you done work using the C/C++ with Python combination? How did you like it, and do you think the project was better for having used both - aside from the natural problems of working with 2 different languages, anyway? How in general do you like working in a higher level language, and only dropping down to a lower level to do some things that arent done as well in the higher level language?
Sat 01 Mar | Bored Bystander | On the distinction between C and C++: a good highly technical overview is Stroustroup's Annotated C++ Reference Guide. C++ is C with object oriented features added - the whole notion of classes, for instance. A C++ class is actually derived (intellectually speaking) from the C 'struct' which is the record structure. If you know C++ you automatically know C, at least as far as nuts and bolts goes. The main difference between C++ and some other object oriented languages is that C++ is 'bound' at compile time. C++ was designed to have no appreciable overhead in terms of run time efficiency, beyond the extra indirection of virtual methods. You can't decide to call a method by a name only known at run time in C++, for instance. >> How in general do you like working in a higher level language, and only dropping down to a lower level to do some things that aren't done as well in the higher level language? I personally don't. Calling one language's procedures from another is tedious monkey work because you generally have to establish a calling prototype in the language you call from. This can add a lot of time and effort to a project if the quantity of such calls is widespread, unless you have automated tools to create the declarations or proxies in the calling language. This is why I have gravitated to Delphi. It is a true compiled language with the efficiency of C++ and allows you to create new components compatible with the Delphi forms designer in the same language that the applications are written in. With Delphi there is little hassle involved in writing extension components or inheriting and modifying the base behavior of existing classes. (I expect someone with a huge chip on their shoulder to come out of the woodwork and disparage each and every thing I've stated... talking about C++ and other languages is like that... let the flames begin... LOL)
Sat 01 Mar | | If you intend to code a game then you will want to learn C/C++. The reason(s) for this are: 1. DirectX and OpenGL, the two most popular game graphics platforms, are C/C++ libraries. 2. C/C++ are systems languages. The system you code your game on will likely have been written in C/C++ and assembly. Thus coding your game in the native environment will be easier. 3. Depending on your chosen game platform, you will most likely only have C/C++ as an option. Especially for console games. 4. IMO C/C++ are elegant languages and, when coding games, you'll need this elegance to work some of the problems you will encounter. (Don't take elegance to mean bad coding practices.) 5. Although possible, interfacing another language with native C/C++ code is a hassle if you're not familiar with things like calling conventions, stack frames, data type conversion etc. 6. As far as learning C versus C++, I would say get a good book on C++. As mentioned C++ includes C. No pun intended. Be aware though, learning C and C++ is (somtimes) easy on the surface, but knowing what is happening behind the scenes takes experience.
Sat 01 Mar | Dennis Atkins | Is jumping straight into C++ with the ARM really the way to go? Is there someone who actually started out programming this way? Seems tough - the ARM is a tough read. And C++ is full of ... subtleties. (Effective C++ by Meyers is where to get started finding out about these subtelties.) I use C and C++ (have never coded in C/C++ as that's not a language) a lot I see them as two very different things that require very different approaches, even though they share many things. Anyway the comments about libraries are true - most libraries are going to require access through C or C++. To learn C, I always recommend the K&R as it is a tutorial. But then don't miss 'C Traps and Pitfalls' and 'Deep C Secrets' to get the full mastery of C. Once you feel good with C, start in on C++ if you like. I suggest a wary approach, cautiously adopting just a little C++ at a time and adding to it. Designing your own template library, for example, is pretty hard core and should not be attempted right off. As is weaving in exceptions into everything you do.
Sat 01 Mar | JD | >> 'have never coded in C/C++ as that's not a language' Dennis, I'm sure an intelligent man such as yourself could deduce that the poster meant C and/or C++ and was using the / as shorthand notation. Then again some of the most intelligent men do lack common sense.
Sat 01 Mar | Dennis Atkins | JD, I believe it was Stroustroup himself who made the point that 'C/C++' is not a language in some recent articles he wrote on the work to reunify C & C++. Many people do believe that 'C/C++' is a language and list it on their resumes as such.
Sat 01 Mar | Dennis Atkins | And wouldja look at this I even found the dang quote thanks to the miracle of google: http://www.cuj.com/articles/2002/0208/0208c/0208c.htm?topic=reference&topic=refernece >Modern C [1, 2] and C++ [3] are sibling languages [4, 5] descended from Classic C [6]. In many people’s minds, they are (wrongly, but understandably) fused into the mythical C/C++ programming language. There is no C/C++ language, but there is a C/C++ community. In last month’s CUJ, I described some of the incompatibilities that complicate the work of developers within that C/C++ community. In this article, I’ll discuss some of the underlying myths that help perpetuate these incompatibilities. I’ll also show why more compatibility (ideally, full compatibility) is in the best interest of the C/C++ community. Next month, I’ll present some examples of how the incompatibilities in C and C++ might be resolved. Heh heh. It's an insider thing. You'd know about this if you were down with C++. :-P
Sat 01 Mar | Dennis Atkins | Oh and Brian, read that article for a great overview of some of the big issues.
Sat 01 Mar | JD | >> 'I believe it was Stroustroup himself who made the point that 'C/C++' is not a language in some recent articles he wrote on the work to reunify C & C++. Many people do believe that 'C/C++' is a language and list it on their resumes as such.' Stroustroup appears to be a nitpicker who needs a life. Anyone who lists 'C/C++' on their resume and believes that the term is a language, is a liar. Then again a lot of people seem to lie on their resumes now-a-days. A little common sense goes a long way. If a person can't look at 'C/C++' and read it as 'C and/or C++' then they must be a self-righteous perfectionist.
Sat 01 Mar | Bored Bystander | Yup, I missed a few things: DEFINITELY learn 'Modern' C at least. C is the lowest common denominator for almost all programming libraries and APIs. I agree and I didn't mention this and it didn't occur to me when I posted earlier. (I am assuming that Modern C means classic K&R C with optional, not mandatory function prototypes and a few other modern constructs? Classic K&R C was an almost typeless junk language... oh boy, let the flames begin NOW... heh) The ARM is a reference book. Using it to learn C++ would be like using a dictionary to learn English (well, almost.) I mentioned it as a 'root document' that, in theory, you could use as a reference to the scope and major features of the C++ language. I've read Scott Meyer's Effective C++ and it's a short, insightful, conversational book with a lot of great examples of OOP nuance applied to C++. I'm not certain that it's a good first book on C++ because it assumes that you kind of know the syntax and the reason for things in C++. Effective C++ is a great read for someone who understands C++ nuts and bolts and wants to understand why and where to use language features in real projects. Also agreed that bitching about C/C++ as an proper noun denoting a language is the height of anality. Anyone but a technical recruiter knows what the phrase is intended to mean.
Sat 01 Mar | Dennis Atkins | Stroustrop advises learning C++ first BUT learning the C-like part of C++ that is used for procedural programming: http://www.research.att.com/~bs/learn.html I think his advise is similar but better than mine to just learn C first. I also agree with what he is saying that tackling classes an inheritance after learning the procedural core makes sense. - I agree that Effective C++ is an intermediate level book, but once you know the procedural core and the basic syntax of classes and inheritence, you should get the book and start trying to understand it since it condenses the gist years of hard won best practices and outlines traps and pitfalls in C++ usage. If you think you are competant in C, Effective C++ is the standard by which to judge yourself. If you think you are an guru/expert, Sutter's Exceptional C++ books might be the standard to check. Many things in there are way too high level for me and essentially show that C++ is far too convoluted and complex and filled with bizarre unexpected behavior for mere mortals to master. It's the language we love to hate. - Yeah, Bjorne's being an anal blowhard. And yet, it's kind of a funny insider thing. I have noticed that after his article came out, I started to see 'C,C++' appear on resumes instead of 'C/C++'. These comma people are folks that had read the article and proved to keep up with all the subtleties of C++. But... like whatever, dudes!
Sat 01 Mar | Dennis Atkins | Bored, Right - when I said K&R I meant the 2nd ed., which is ANSI C, which differs from Standard C. I think the early C that is the essentially typeless language you are thinking of is B. Standard C has types. The latest and greatest now is C99, which is ANSI C with some useful extensions and a couple frivolous ones. One obvious and useful part of C99 is to admit that line-comments (//) are part of C since every modern compiler accepts them in C already.
Sun 02 Mar | Danil | In my experience, anybody with C/C++ on their resume doesn't know either (the code they generate cannot be compiled with a C compiler, but the code derives very little benefit from the overhead that C++ brings to the table). C++, in particular, is HARD. Best C++ intro book is Koenig _Accelerated C++_. It's probably the best starting point after you've been coding in python for a while. After that, if you still think C++ is a good idea, pick up Meyers I. There are efforts for easing the interaction between Python and C++; see the folks over at boost.org. I'm not aware of a similar effort for C. As a professional programmer, my advice... well, all learning is good, so if these big rocks look interesting, by all means go ahead. But I bet there are better uses for your time. Python rocks. Another idea: Pick up the Abrash Graphics Black Book. Because (1) if you really cared about speed, you'd write it in assembler anyway ;-) (2) it will teach you about a lot of optimizations available without changing your implementation language.
Sun 02 Mar | Bored Bystander | >> I think the early C that is the essentially typeless language you are thinking of is B. Standard C has types. C in the pre-function prototype days let you do weird things with no complaint, like use ints in place of pointers. Yes, K&R C had types so to speak but they were so non-enforced that you might as well have had no types, just int assumed for everything that wasn't a struct. BTW, is lint still around? Do people still use it?
Sun 02 Mar | | Lint is still around. It is available at Programmers Paradise I think. Remember the adds that would give a code example then they would ask you to figure out why the code broke? Do I use it? I would if I could.
Sun 02 Mar | Bic Pen | >> 'if you really cared about speed, you'd write it in assembler anyway ;-)' Not a true statement.
Sun 02 Mar | John Moore | Firstly, It's good to see more people take up a higher level (more productive) language. Secondly, C++ is extremely complex, to learn the entire language. In comparison, C is quite simple. I advise you learn C (everyone should know C), and only C++ if it is required.
Sun 02 Mar | Andrew Reid | People who put 'C/C++' on their resumes are probably doing it for the benefit of recruitment agents (who don't understand that knowledge of C++ implies knowledge of C).
Sun 02 Mar | Li-fan Chen | If you really want to produced games, with 2D it looks that there's few learning curve as patient as Flash 5 and 6. With a web service behind the Flash applet, you can get a lot of online gaming concepts implemented.
Sun 02 Mar | Li-fan Chen | Someone mentioned Koenig's book. 'Accelerated C++' is an excellent way to learn the subset language I think of as 'broken c++'.. (like broken english). Basically it will show you enough C++ to get around and do your work in most day to day small applications. From there you just have to figure out an environment like Visual C++ 6.0 or GNU C++ to get around. There will be days you wish you had a 12 years C vet around to help you around a serious problem.. but most of the time you'll make do with this and a few other books.
Sun 02 Mar | doobius | learn C then C++ and use this www.pygame.org python is a very popular language for game logic with C or C++ where speed is need for rendering etc. pyugame uses SDL , http://www.libsdl.org/index.php, which is written in C but works great with C++, just like python.
Not Programming | Sat 01 Mar | Justin
Quick poll: What is the single favourite humour site you visit regularly when youre supposed to be working? Mine is http://www.dilbert.com . As an aside if you also visit this, did you use the List Of The Day, before it was removed (I ask, because some of names here look spookily familiar)?
Sat 01 Mar | Prakash S | I get Calvin & Hobbes delivered to my inbox, other than that watching the markets is always a joke :-)
Sat 01 Mar | Patrik | Dilbert ...and if Im bored, I havent read all goodies at www.satirewire.com
Sat 01 Mar | Vincent | I don't visit often but http://www.despair.com/ is quite amusing.
Sat 01 Mar | Robert Chevallier | morning ritual at work: http://www.dilbert.com http://www.somethingpositive.net
Sat 01 Mar | Bella | www.theonion.com is the most clever humor you will ever encounter in your life.
Sat 01 Mar | Bella | http://www.theonion.com
Sat 01 Mar | anonymous | http://www.homestarrunner.com
Sat 01 Mar | Nick H | Gotta give a plug for Dave Barry's blog - http://davebarry.blogspot.com/
Sat 01 Mar | John McQuilling | sharktank at computerworld.com. Crazy things that have happened in the industry.
Sat 01 Mar | Hardware Guy | Three consistenty-funny sites: The Onion (mentioned above) Dave Barry's Blog (also mentioned above) Fanatical Apathy, which you can find at: http://felbers.net/mt/
Sat 01 Mar | Tim Sullivan | http://www.somethingpositive.net http://www.smallstoriesonline.com http://www.brunocomic.com http://www.penny-arcade.com That's my usual bunch. There are others (megatokyo, for instance) that I read on and off, but something positive is the main one I use for pure, dark laughter.
Sun 02 Mar | Tim Sullivan | Whoops, that should be: http://www.brunostrip.com
Sun 02 Mar | bored developer | www.fark.com The photoshop threads are very amusing.
Sun 02 Mar | Neil E | www.b3ta.com
Sun 02 Mar | David Clayworth | I thought there were no new Calvin and Hobbes strips for years? If that's not true, please, please, tell me where I can find them.
Sun 02 Mar | Ricardo | www.userfriendly.org
a third place | Sat 01 Mar | Victor Lombardi
As an information architect in New York, I was a little jealous of my colleagues in Silicon Valley that all seemed to know and hang out together. Whenever someone tried to start an IA gathering at a third place in NY it lost momentum quickly. Few companies in this economy are willing to host professional meetings, and there arent many cafes with space and quiet enough to have serious chats. I instead started an IA Salon - called a salon as we meet in someones home. Details: http://www.iawiki.net/IASalon Its been continuing nicely once per month for about 9 months now. So for us, the successful third place is our homes, but our homes shared with others.
Sat 01 Mar | Brian R. | Hate to rub it in, but that is one nice thing about California. I knew a group of about 15 people that play at a pizza place one night a week, when that closes, they go to the donut shop 100 ft. away. Never been to N.Y. Yeah, there is a lot of room out here. I live in Greater L.A. area.
Sat 01 Mar | Kevin Postlewaite | As someone who lives in the Bay Area (CA), I was surprised to see Joel mention it as a place supposedly particularly lacking in 'third places'. Yeah, there are a lot of people who moved out here after college (like me, e.g.). It turns out, though, that these are almost the exact people who have interests in common with me. There are tons of 'third places' out here. Personally, I regularly attend a gaming group that met multiple times a week and sometimes drew more than 20 people. And there are a lot of outdoors-y groups too. There aren't a lot of places with such a high density of smart, interesting people as the Bay Area.
Sat 01 Mar | John C. | I think the availability of potential 'third places' varies tremendously by neighborhood. And one of the things about mostly suburban areas is that, while third places may exist, it can be hard to find them unless you know exactly where to look. The best way to know where to look is to ask local experts, but if you're new to an area and have few friends, that can be tough, especially for people who lean toward introversion in the first place. I live in Seattle now, and I see a huge contrast between the availability of these kind of places in different areas. I live right in the city, and within walking distance there are a number of non-franchise coffee places that encourage prolonged stays, local pubs that offer regional microbrews, etc. Lots of options for third places that you can find just by walking around for a few minutes. But over on the Eastside, in Microsoft's neighborhood, it's a different story entirely. It's not really pedestrian-friendly, and you can get in your car and drive around for hours trying to find an interesting place to hang out. That's not to say that suitable third places don't exist at all, but I suspect they're either vastly fewer in number or just much harder to locate. I've found the Bay Area to have similar variation. In certain areas, like parts of SF itself, Berkeley, and so on, finding third places is no problem. In other places, like much of the Valley, they exist but you have to search around a bit. If your daily commute is from a gigantic planned housing development in San Jose, up 101, and along some arterial into a monotonous office park, you sure won't see a lot of potential third places along the way.
Sat 01 Mar | Alberto | It's a bit of a chicken and egg situation, have the 'third places' disappeared because nobody wanted them anymore, or did they disappear becuse as Joel says 'capalist society has eroded' them all? I think people are slowly turning back on to the knowledge that people generally have always needed other people to maintain a quality standard of life, meaning that interaction with others is a great source of pleasure and offers a feeling of belonging. (I think I need grammer lessons) The last 30 years of work has bought great social change, most of us are far richer than we would have been in previous lives, but it has come at a cost, maybe we're not prepared to sacrifice our sense of community afterall.
Sat 01 Mar | mackinac | >>> I think people are slowly turning back on to the knowledge that people generally have always needed other people to maintain a quality standard of life, meaning that interaction with others is a great source of pleasure and offers a feeling of belonging. <<< Or it can be a source of pain and offer a feeling of exclusion. I grew up in a house with a porch. People knew their neighbors, but I don't remember people stopping by to sit on the porch and talk. Third place interaction tended to be at places such as churches. Now I live in a big condo building. I know a few of my neighbors and am familiar enough with many of them to say hello when passing in the elevator or at the grocery store. But most of my third place interaction is at a couple of community organizations I belong to. And they are too far to walk to. Not much different from the good old days. On line communities based on maillists or discussion boards are a recent phenomenon, but one where I see significant advantages even if you don't have in person interaction. They give one more control over those interactions and offer the possibility of maximizing the pleasure/pain ratio. By increasing our area for potential interaction from our physical neighborhood to the entire on-line population we increase the possibility of finding others of common interest. By limiting interaction to text messages we can reduce the potential for exclusion from the group based on prejudices against the class of people we happen to belong to. I have noticed that some maillist or USENET online communities have evolved to the point where participants decide to meet in real life (e.g RABfests).
Sat 01 Mar | Dennis Atkins | There are places in the bay area where stuff is happening but they are not near downtown. Downtown is totally dead after 10pm unless dingy coffee shops and preteen transvestite hookers are your third place.
Sun 02 Mar | n | Right next door to me here in Cologne, some lisp guys are meeting once a month. (Perhaps to take back computing.) I think the dotcom implosion ensured that only the crazy ones stay in informatics. So meeting is more worthwhile now. Offtopic, to the original poster: don't you note that people have a hard time working with you when by extension they're just 'knowledge workers' to your Information Architect? I guess we don't have to veer offtopic though...
Sun 02 Mar | Victor | RE>Offtopic, to the original poster: don't you note that people have a hard time working with you when by extension they're just 'knowledge workers' to your Information Architect? Not sure what you mean. I actually started the group because the level of conversation in electronic forums was rather low, and I (and, as it turns out, we) wanted to pursue more in-depth issues. That also became a factor in who was invited to the salon. If that sounds - as I think you're implying - elitist, then maybe it is. But it's highly satisfying and doesn't keep us from sharing what we learn in other forums with other people, which we do. btw, Information Architecture is becoming a fairly well-established discipline, this isn't just me with a pretentious title :-) see http://www.aifia.org/
Sun 02 Mar | B# | I have to ask... What is Asilomar?
Sun 02 Mar | n | No, I wasn't implying you were elitist. Rather, I was thinking about some esteem problems I've observed, from east coast people who reacted to that term 'information architect.' No criticism intended. ;)
Handling Errors | Fri 28 Feb | RM
I have seen excellent books on Design Patterns, Debugging, Refactoring, Development Mythologies, User Interface Design, Team/Code Management. But I dont know any books about handling errors. I have done Google and Amazon search but no luck. Any recommendation ?
Fri 28 Feb | Go Linux Go! | What language? I know that there are general guidelines on handling errors, but any detailed text is going to use a specific language since error handling varies from language to language.
Sat 01 Mar | Go Linux Go! | FWIW, I did a search on Amazon for 'Exception Handling' and got 3 results. One is handling errors in ASP.NET, 1 in Java and one appears to be a collection of computer science notes on the topic.
Sat 01 Mar | Joel Spolsky | There's a whole O'Reilly book about developing error messages: http://www.oreilly.com/catalog/error/
Sat 01 Mar | Liron Levy | At the risk of starting a flaming war here are my guidelines: 1) Avoid exceptions like the plague - never throw them, only catch them (and translate to a decent error object). I know all OOP gurus will not like what I say, but I think the world would be a little better place without them :-) 2) Use a general result object and make every method return this object by default. 3) Every result object should contain the following fields: error code (used by the software to determine behavior), error string (used by humans to understand the failure), and extra data (e.g., Object in Java) that can contain additional information you want to pass with the result (like the result of a calculation). The point on exceptions needs a little more explanation: The problem with exceptions is that you cannot always expect them in code - in such a case they make the thread of execution terminate which makes your software extremely unreliable. In C++ you cannot even KNOW if you need to use a proper try/catch clause when calling a method. In Java you sometimes know (non-Runtime exceptions) and sometimes you don't. At least when using result objects you can ALWAYS check the result and the thread does not terminate if you don't. If you want some real examples - drop me an email and I'll send you an example. Good luck
Sat 01 Mar | Dennis Atkins | Bless you Levy! Listen up to this gentleman everyone! At last someone who understands!
Sat 01 Mar | Alyosha` | Liron: maybe it's my inexperience talking, but ... WTF? I love how Java handles exceptions (by putting the throwable exceptions in the method signature and kicking out compiler errors if they aren't handled). It actually forces you to consider the possible exceptional conditions. There's nothing about checking error codes by hand that encourages the programmer to (a) recognize that the function may fail and (b) do something intelligent with the failure. (It's true that subclasses of RuntimeException need not be handled, but everyone knows RuntimeException should be used sparingly and for unrecoverable exceptional conditions anyways). You'll be fighting an uphill battle trying to ensure that every function is checked for errors, and even if you were to manage that, nine times out of ten your error handling will be going to be no more sophisticated than to print the error message and terminate, which is what exceptions do by default anyways. After all, if the coder didn't expect the exception, what else is he going to do with it? If what you want to do is print the error message and continue on regardless of the consequences of the unforseen error, you might as well wrap your function up into one big try-catch block, than try to add error checking to each one of the fifty function calls. And in the case that the coder actually handled the error-checking intelligently, he must have already known what kinds of exceptional conditions could crop up, in which case your objection 'but you don't know what to expect' makes no sense. So what does your solution do besides create code bloat and inviting difficult to debug 'oops-I-forgot-the-error-checking' defects? I don't mean to start a flame war or anything, but I genuinely don't see any advantage of your method.
Sat 01 Mar | Dennis Atkins | If I had a dollar for every kiosk, billboard and website that unhelpfully tells the average customer that the computer has crashed on an unhandled Java exception, I could buy a lot of coffee. That's the deal. If this stuff is so great, how come the Big Guys can't get it right?
Sun 02 Mar | Alyosha` | That sort of comment is unverifiable/unfalsfiable. Do you have some quantifiable measurements of whether unhandled Java exceptions are more common than undetected errors in programs that manually check error codes? I'm certainly no researcher, but I really haven't seen many production-quality commercial applications throw Java exceptions. I've never seen one of these bombed kiosks or billboards you've mentioned (although I've seen lots of BSODs in airport terminals) ... Okay, I'll admit that I've seen a lot of unhandled Java exceptions in web applets, but then again Java applets aren't the highest quality code out there, either.
Sun 02 Mar | RM | Liron Levy: When I was doing my internship, I was once told by a senior developer that Exceptions are not always the best idea, (though they did not really have any alternative), I was never convinced until now. I thank you for your explanation. I thought of a similar idea as you suggested. Basically, every object knows how to handle and propagate errors. For example, Suppose Object A instantiates Object B,C,D. If B,C and D report errors to A, then A will translate these errors to an error in terms of its operations. (ie, if B reports DividedByZeroError, A might translate it into “OutOfBoundValueError”) And finally report it back to its predecessor. Recursively, objects at higher level will have better understanding of what went wrong beneath without too much detail. The main difference between yours and mine is that mine is done by having an Error-Handling method in each object, instead of every method returning “a general result”. But I am neither convinced of my own, simply because I am inexperienced and have not seen/read much about handling errors. One reason why I am looking for a good book about handling error in general. Anyway, I thank you everyone for your inputs. PS: When I say “Errors”, I meant all kind of errors; Run-Time, Application, Calculation, Fatal, UnHoly, System, Missing-XYZ, Incomplete, Math, Floating-Point etc.
Sun 02 Mar | n | Hmm, your description of 'result objects' is interesting, but I've never heard of them before and google turns up nothing. Is there a book which talks about this, or perhaps a language where this is assumed? By the way, in Java, using a runtime exception thoughtlessly is very bad form.
Sun 02 Mar | Walter Rumsby | I have to say 'WTF' too. If your code never throws Exceptions, only catches them, what is there for the code that uses your classes (and not standard/3rd party APIs) to catch? You suggest using a general result object and make every method return this. Hmm. Doesn't the make your API slightly less clear? I never like the idea of setters returning results. This result object you propose contains an error code (why not just use a specific type of Exception?), and error String (why not throw new XException( errorString );?) and an actual return value... maybe, f the method is ACTUALLY supposed to return something. This technique just seems to make the result of a method call a lot less clear - all your methods are returning ResultObject, and not the 'actual' return type (eg. you can easily tell from the method signature when you want to use public Date getDate() vs. public long getTime()). And what if you're implementing some language/standards defined interface that does not use the ResultObject idiom? Furthermore, the ResultObject framework may create hassles when integrating your code with another program (eg. using your code as a .jar to another program). Instead of using a language feature to convey error information, you're using your own solution with the associated overhead (extra lines of code, other developers needing to get up to speed, possibility of having to mix methods that return ResultObjects AND throw Exceptions).
Sun 02 Mar | Liron Levy | I was talking out of heavy experience working with exceptions. I'm really convinced they are bad (always). Some of you suggested that it is a 'bad' idea to throw runtime exceptions. Cool - but the JDK itself did that for me more times thn I care to remember ... If the guys at Sun did such a lousy job - I think it means something ... Another point - Most commercial libraries I happened to work with did not use exceptions at all (e.g., ILOG) just because of the problems involved. Someone here said that returning a result object is not a very 'Clear' way as this is not enforced by the software. My answer to this is simple - define coding guidelines and enforce THEM (you have to do this anyway). Good Luck
Sun 02 Mar | Liron Levy | For those who are interested I've pasted the code for the implementation of this idea: There are two files: NMEresult.java that contains the code for the result object, and NMEerrcode.java that contains the code for the error codes. [----------------------- NMEresult -----------------------] package nme.base; // Needed in order to allow instances of NMEresult to travel // process boundaries. import java.io.Serializable; /** * Defines the general result of performing NME requests. * It should be used by all NME system modules. The result * encapsulates an error indication and description in the * case the request performing was not successful or * the result data if the request has succeeded. * Note that the implementation is not synchronized. In most cases * the result object will be first fully constructed by one thread and after * that it will be used by another one. Anyway, if multiple threads access * a result concurrently and at least one of them modifies it, the * access must be synchronized externally. */ public class NMEresult implements Serializable { // ---------------------------------------------------------- // public enumerations // ---------------------------------------------------------- /** Error message for the case of illegal error code. */ public static final String ILLEGAL_CODE_ERR_MSG = 'The error cannot be resolved, the error code is illegal'; // ---------------------------------------------------------- // public methods // ---------------------------------------------------------- /** * Constructs a successful result object with neither associated * request identifier nor any result data. * * @see #NMEresult(int, Serializable) */ public NMEresult() { initialize(NMEerrcode.E_SUCCESS, null, null); } // NMEresult /** * Constructs a successful result object with given result data. * * @param extra_data the additional result data. The given * reference is stored, no cloning is performed. * @see #NMEresult(int, Serializable) */ public NMEresult(Serializable extra_data) { initialize(NMEerrcode.E_SUCCESS, null, extra_data); } // NMEresult /** * Constructs a result object with given error code and provided * error message. The extra data field is left unspecified. * * @param err_code the code of the error. * @param err_msg the problem description. If is null, * the standard description is used. */ public NMEresult(int err_code, String err_msg) { initialize(err_code, err_msg, null); } // NMEresult /** * Constructs an erroneous result object with given error code * and standard error description. The extra data field is left * unspecified. * * @param error_code the code of the error. * @see #NMEresult(int, String, int, Serializable) */ public NMEresult(int error_code) { initialize(error_code, null, null); } // NMEresult /** * Constructs an erroneous result object with given error code, * description and additional data. * * @param error_code the code of the error. * @param error_msg the problem description. If is null, * the standard description is used. * @param extra_data the additional result data. The given * reference is stored, no cloning is performed. * @see #NMEresult(int, String, int, Serializable) */ public NMEresult(int error_code, String error_msg, Serializable extra_data) { initialize(error_code, error_msg, extra_data); } // NMEresult /** * Checks if the given result is successful. * * @return true if the result is successful; * false otherwise. */ public boolean isSuccess() { return (m_ErrorCode == NMEerrcode.E_SUCCESS); } // isSuccess /** * Returns the code of the error associated with the result. * * @return the result error code. */ public int getErrorCode() { return m_ErrorCode; } // getErrorCode /** * Defines the error code and standard problem description for the result. * Use {@link #setErrorMsg} method later for redefining the * error description to non-standard. * * @param error_code the result error code. */ public void setErrorCode(int error_code) { // Set the error code. m_ErrorCode = error_code; // Set the error message, using the standard description. m_ErrorMsg = getStandardErrorDescr(m_ErrorCode); } // setErrorCode /** * Returns the description of the error associated with the result. * * @return the result error description. */ public String getErrorMsg() { // If the error message is set for the result, return it. if (m_ErrorMsg != null) return m_ErrorMsg; // The error message is not set, return the standard // description, according to the result error code. // We should not actually get here, because the error // message is always set according to the code. The case // is possible only if the message was explicitly set to null. return getStandardErrorDescr(m_ErrorCode); } // getErrorMsg /** * Defines the error message of the result. The message is set * exactly to the given string (even if it is null). * No changes are performed in order to make is suitable to the * result error code. * * @param error_msg the problem description. */ public void setErrorMsg(String error_msg) { m_ErrorMsg = error_msg; } // setErrorMsg /** * Assigns standard error description to the error * message of the result. */ public void setStandardErrorMsg() { m_ErrorMsg = getStandardErrorDescr(m_ErrorCode); } // setStandardErrorMsg /** * Appends given string to the currently defined error message of the * result. * * @param error_msg the string to be appended. */ public void appendErrorMsg(String error_msg) { if (error_msg != null) { StringBuffer new_description = new StringBuffer(); if (m_ErrorMsg != null) new_description.append(m_ErrorMsg + ', '); new_description.append(error_msg); m_ErrorMsg = new String(new_description); } // if } // appendErrorMsg /** * Returns the additional data associated with the result. * * @return the additional result data. */ public Serializable getExtraData() { return m_ExtraData; } // getExtraData /** * Defines the additional data associated with the result. * * @param extra_data the additional result data to be stored. */ public void setExtraData(Serializable extra_data) { m_ExtraData = extra_data; } // setExtraData /** * Generates a string representation of the result. It indicates * if the request has failed or succeeded and gives the error * description or resulting data representation respectively. * * @return the string representation of the result. */ public String toString() { // String representation parts. String header; String error_msg = null; // The flag shows if error information is needed. boolean add_error_info; // Temporary buffer for creating the resulting string. StringBuffer buf = new StringBuffer(); // Constract the header of the string and check if the // error info should be retrieved. if (m_ErrorCode == NMEerrcode.E_SUCCESS) { header = 'The request succeeded'; add_error_info = false; } else { header = 'The request failed'; add_error_info = true; error_msg = getErrorMsg(); } // else // Actually create the string. buf.append(header); if (add_error_info) { buf.append(': error code = ' + m_ErrorCode); buf.append(' [' + error_msg + ']'); } if (m_ExtraData != null) { buf.append(', result data = ' + m_ExtraData); } return (new String(buf)); } // toString // ---------------------------------------------------------- // private methods // ---------------------------------------------------------- /** * Initializes the request object with given values. * * @param error_code the code of the error. * @param error_msg the string that describes the problem. If is * null, the standard description is used. * @param extra_data some additional result data. The given * reference is stored, no cloning is performed. */ private void initialize(int error_code, String error_msg, Serializable extra_data) { m_ErrorCode = error_code; if (error_msg != null) { m_ErrorMsg = error_msg; } else { m_ErrorMsg = getStandardErrorDescr(m_ErrorCode); } m_ExtraData = extra_data; } // initialize /** * Returns the standard error description for the error with a given code. * * @param error_code the code of the error. * @return the standard description of the error. */ private String getStandardErrorDescr(int error_code) { String error_descr; // Compute the error range to which this error code belongs int err_range = error_code / 100; // Compute the index in the error range of the error code int err_index = error_code % 100; // Make sure that the description table can address this description try { error_descr = NMEerrcode.ALL_ERR_DESCRIPTIONS[err_range][err_index]; } catch (Exception e) { // The error code is illegal, return the appropriate // error message. error_descr = ILLEGAL_CODE_ERR_MSG; } return error_descr; } // getStandardErrorDescr // ---------------------------------------------------------- // private variables // ---------------------------------------------------------- /** The code of the error. */ private int m_ErrorCode; /** The error message with exact problem description. */ private String m_ErrorMsg; /** Some additional result data. */ private Serializable m_ExtraData; } // NMEresult [-------------------- END OF NMEresult -----------------------] [-------------------- START OF NMEerrcode ------------------] package nme.base; import com.outbackinc.services.protocol.snmp.*; /** * Defines global error codes and their standard descriptions for * all NME system modules. */ public class NMEerrcode { // ---------------------------------------------------------- // STANDARD ERROR CODES // ---------------------------------------------------------- /** Success. */ public static final int E_SUCCESS = 0; /** Indicates that the client is not permitted to invoke the request. */ public static final int E_PERMISSION_DENIED = 1; /** Indicates some unexpected software error occurred. */ public static final int E_INTERNAL_SOFTWARE_ERROR = 2; /** Indicates a timeout problem */ public static final int E_REQUEST_TIMEOUT = 3; /** Indicates that the software was requested to change into an illegal state */ public static final int E_ILLEGAL_STATE = 4; /** Indicates that there is security model failure. */ public static final int E_SECURITY_MODEL_FAILURE = 5; // ---------------------------------------------------------- // SNMP ACCESS MODULE ERROR CODES // ---------------------------------------------------------- /** Indicates a 'No Such Name' SNMP error */ public static final int E_SA_NO_SUCH_NAME = 100; /** Indicates a 'Authorization Error' SNMP error */ public static final int E_SA_AUTHORIZATION_ERROR = 101; /** Indicates a 'Unknown IP Address' SNMP error */ public static final int E_SA_UNKNOWN_IP_ADDRESS = 102; /** Indicates a 'General' SNMP error */ public static final int E_SA_GENERAL_ERROR = 103; /** Indicates a 'Bad Value' SNMP error */ public static final int E_SA_BAD_VALUE = 104; /** Indicates a 'No Access' SNMP error */ public static final int E_SA_NO_ACCESS = 105; /** Indicates a 'Inconsistent Name' SNMP error */ public static final int E_SA_INCONSISTENT_NAME = 106; /** Indicates a 'Incosistent Value' SNMP error */ public static final int E_SA_INCONSISTENT_VALUE = 107; /** Indicates a 'Resource Unavailable' SNMP error */ public static final int E_SA_RESOURCE_UNAVAILABLE = 108; /** Indicates a 'Not Writable' SNMP error */ public static final int E_SA_NOT_WRITABLE = 109; /** Indicates a 'Wrong Type' SNMP error */ public static final int E_SA_WRONG_TYPE = 110; /** Indicates a 'Wrong Length' SNMP error */ public static final int E_SA_WRONG_LENGTH = 111; /** Indicates a 'Wrong Encoding' SNMP error */ public static final int E_SA_WRONG_ENCODING = 112; /** Indicates a 'Wrong Value' SNMP error */ public static final int E_SA_WRONG_VALUE = 113; /** Indicates a 'No Creation' SNMP error */ public static final int E_SA_NO_CREATION = 114; /** Indicates a 'Too Big' SNMP error */ public static final int E_SA_TOO_BIG = 115; /** Indicates a 'Commit Failed' SNMP error */ public static final int E_SA_COMMIT_FAILED = 116; /** Indicates a 'Undo Failed' SNMP error */ public static final int E_SA_UNDO_FAILED = 117; /** Indicates a 'Unknown request or data type' SNMP error */ public static final int E_SA_UNSUPPORTED_TYPE = 118; /** Indicates that there is no data about the request. */ public static final int E_SA_NO_DATA = 119; // ---------------------------------------------------------- // DEVICE ACCESS MODULE ERROR CODES // ---------------------------------------------------------- /** Indicates that the operation has failed because the i in the device access data structure. */ public static final int E_DA_NOT_FOUND = 200; /** Indicates that the device is already defined with a specific type and cannot be changed. */ public static final int E_DA_REQ_DENIED = 201; /** Indicates that the operation failed to start because one of the IP addresses specified in the request cannot be found in the network. */ public static final int E_DA_UNKNOWN_DEVICE = 202; /** Indicates that the request has failed because the device that processed the request does not support one or more of the attributes in the request.*/ public static final int E_DA_NO_SUCH_ATTRIB = 203; /** Indicates that some general device error has occurred. Further information will be supplied in the result error string. */ public static final int E_DA_GENERAL_ERROR = 204; /** The type or instance of the management information is not accessible due to access control settings. */ public static final int E_DA_NO_ACCESS = 205; /** This error is returned if the request contained a value that has a different type then the one in the device itself. */ public static final int E_DA_WRONG_TYPE = 206; /** This error is returned if the value field that was specified in the request is illegal and should not be used. */ public static final int E_DA_WRONG_VALUE = 207; /** Indicates that the request has failed due to a failure to set one of the variable bindings and that the state of the agent is not affected by this request. */ public static final int E_DA_COMMIT_FAILED = 208; /** Indicates that the request has failed due to a failure to set one of the variable bindings and that the state of the agent could not be restored to its previous settings. */ public static final int E_DA_UNDO_FAILED = 209; // More error codes here ... /** Indicates Error code ranges */ public static final int STANDARD_ERRORS_RANGE = 0; public static final int SNMP_ACCESS_ERRORS_RANGE = 1; public static final int DEVICE_ACCESS_RANGE = 2 ; // More error ranges are welcome (100 error codes per range MAX !!) /** Standard error descriptions for all error codes (including success). */ public static final String STANDARD_ERR_DESCR[] = { 'Request succeeded', 'Client is not permitted to invoke the request', 'Unexpected software error', 'Request has timed out', 'Illegal state error', 'Security model failure' }; /** Snmp Access Module error messages */ public static final String SNMP_ACCESS_ERR_DESCR[] = { 'No such MIB name', 'Authorization error', 'Unknown IP address used', 'General error', 'Bad value', 'No access', 'Inconsistent name used', 'Inconsistent value used', 'Resource unavailable', 'Scalar is not writable', 'Wrong type used in request', 'Wrong length used in request', 'Wrong encoding error', 'Wrong value used in request', 'Object cannot be created', 'Response is too big', 'Snmp COMMIT has failed', 'Snmp UNDO has failed', 'Snmp received unsupported type', 'No data about the request' }; /** Device Access Module error messages */ public static final String DEVICE_ACCESS_ERR_DESCR[] = { 'device was not found', 'device is already defined', 'Unknown IP address used', 'No such attribute', 'General error', 'No Access error', 'Wrong type used in request', 'Wrong value used in request', 'Commit failed', 'Snmp UNDO has failed', }; /** * This table contains description tables for all error ranges. * Whenever a new error code is introduced, a corresponding * description string should be entered in its corresponding range * strings array */ public static final String ALL_ERR_DESCRIPTIONS[][] = { STANDARD_ERR_DESCR, SNMP_ACCESS_ERR_DESCR, DEVICE_ACCESS_ERR_DESCR // Add more array references here for each new module }; /** * This method converts jSnmp error codes to local error codes. * @param snmp_err_code jSnmp error code * @return Returns local error code that match the given jSnmp error code. */ public static int mapSnmpError(int snmp_err_code) { switch(snmp_err_code) { case SnmpConstants.SNMP_ERR_TIMEOUT: return E_REQUEST_TIMEOUT; case SnmpConstants.SNMP_ERR_SECURITY_EXCEPTION: return E_SECURITY_MODEL_FAILURE; case SnmpConstants.SNMP_ERR_NOSUCHNAME: return E_SA_NO_SUCH_NAME; case SnmpConstants.SNMP_ERR_AUTHORIZATIONERROR: return E_SA_AUTHORIZATION_ERROR; case SnmpConstants.SNMP_ERR_UNKNOWN_HOST: return E_SA_UNKNOWN_IP_ADDRESS; case SnmpConstants.SNMP_ERR_GENERAL: return E_SA_GENERAL_ERROR; case SnmpConstants.SNMP_ERR_BADVALUE: return E_SA_BAD_VALUE; case SnmpConstants.SNMP_ERR_NOACCESS: return E_SA_NO_ACCESS; case SnmpConstants.SNMP_ERR_INCONSISTENTNAME: return E_SA_INCONSISTENT_NAME; case SnmpConstants.SNMP_ERR_INCONSISTENTVALUE: return E_SA_INCONSISTENT_VALUE; case SnmpConstants.SNMP_ERR_RESOURCEUNAVAILABLE: return E_SA_RESOURCE_UNAVAILABLE; case SnmpConstants.SNMP_ERR_NOTWRITABLE: return E_SA_NOT_WRITABLE; case SnmpConstants.SNMP_ERR_WRONGTYPE: return E_SA_WRONG_TYPE; case SnmpConstants.SNMP_ERR_WRONGLENGTH: return E_SA_WRONG_LENGTH; case SnmpConstants.SNMP_ERR_WRONGENCODING: return E_SA_WRONG_ENCODING; case SnmpConstants.SNMP_ERR_WRONGVALUE: return E_SA_WRONG_VALUE; case SnmpConstants.SNMP_ERR_NOCREATION: return E_SA_NO_CREATION; case SnmpConstants.SNMP_ERR_TOOBIG: return E_SA_TOO_BIG; case SnmpConstants.SNMP_ERR_COMMITFAILED: return E_SA_COMMIT_FAILED; case SnmpConstants.SNMP_ERR_UNDOFAILED: return E_SA_UNDO_FAILED; case SnmpConstants.SNMP_ERR_UNSUPPORTED_TYPE: return E_SA_UNSUPPORTED_TYPE; case SnmpConstants.SNMP_ERR_NOSUCHINSTANCE: return E_SA_NO_SUCH_NAME; default: return E_SA_GENERAL_ERROR; } } } // NMEerrcode [----------------- END OF NMEerrcode ----------------------]
Sun 02 Mar | Alyosha` | To answer n's question, ResultObjects (and/or result error codes) are the mess that exceptions were designed to solve. As I mentioned before, the problem with checking for error codes after every operation is insane code bloat and impossible to track down bugs when you forget a error check. Liron: Actually I made a bit of a mistake when I said that RuntimeExceptions should be rare/unrecoverable events (I was thinking of Errors when I said that). RuntimeExceptions consist mainly of stack underflows, divide by zero, null pointer, class casting, and bounds checking type errors -- that is to say, programming errors which would hose a C++ program and should never occur in a properly debugged program. Failures of this catagory always indicate a defect in programming, a blatant and forseeable violation of the pre-condition design contract, and not an exceptional but otherwise legal condition that prevents an operation from completing. Maybe *YOUR* code is full of NPEs and array bounds exceptions, especially given strange inputs, but I wouldn't blame the language or libraries for that ... I've honestly never had the problems you have with Java's exception model, so I'm a bit boggled as to why they're so difficult for you. But, maybe it's because I haven't done as much hard-core programming as you. Regarding coding guidelines, I love practical suggestions for better code, but honestly, eliminating overlooked error checks by laying down the law in the form of coding guidelines is a lot like trying to eliminate teen pregnancy by preaching complete abstinence to schoolchildren. No, no, that's a bad analogy. Even as much pressure biology exerts on adolescents to have sex, it's still not anywhere near the pressure programmers have to skip error checks if they think they can get away with it. Exceptions make life so much easier.
Sun 02 Mar | Liron Levy | That's fine in theory ... In my experience - programmers need to handle every error condition. For this matter - using try/catch or if/else is the same thing actually. Good code is usually ugly in this respect (its littered with error handling clauses) ... Again - the THEORY says that you shouldn't throw runtime exceptions where non-runtime exceptions are enought. Practice says that you will use internal or external libraries that do just that. By explicitly returning a result object - you actually FORCE the programmer to consider the consequences of his/her behavior (by examining the documentation of the method). A code that throws an exception can be easily overlooked (especially true for C# and C++, less true but still a problem in Java) by the programmer because its prototype does not show anything special that need handling.
Sun 02 Mar | Liron Levy | Just a comment on what Alyosha said earlier: Failures of this catagory always indicate a defect in programming, a blatant and forseeable violation of the pre-condition design contract, and not an exceptional but otherwise legal condition that prevents an operation from completing. There is nothing stopping you from throwing RuntimeExceptions yourself and there are several JDK modules that do just that (e.g., when reading a corrupted JPG file ...). This caused our software to fail in a customer site and there was very little that testing could do to actually reveal this bug (the exceptions were thrown on a very specific case of corruption) in the first place.
Sun 02 Mar | RM | I am sure many of us are familiar with COM. Looking at how COM deals with errors, it uses HRESULT which is almost the same as Levy's model. Can this scheme be abused ? or strictly enforced? My experience says programmers are only checking and using S_OK and E_FAIL though it can offer much more. The problem is people are misusing and abusing the models. And the code is a mess (which is almost always the case for handling errors) With Regard to Exception, I agree with Levy because Exception (as the name implies ) should be reserved for the 'Exception' cases where the programmers don't have control over, such as OutOfMemoryException or NetworkConnectionException. This is where Levy is right about catch-exception but not throwing. Basically Exceptions should be exclusively reserved for Run-Time Errors only. Consider this. Suppose you have hundreds of objects, millions of lines of code, many are throwing their own exceptions, some are throwing the same. Once it is caught somewhere, Is it easy to trace back to find out who throws it. From my limited experience, it is almost impossible to tell why the error occurs. All I can tell is something unexpected happend but not why. How does the general result or HRESULT solve the problem? Maybe it does not but It is more predictable and easier to trace back to the origin than Exception. Because it does not suddenly jump to the 'Catch' clause, it is also easier to find the execution path where the problem occurs. Both Exceptions and Levy's model, have advantage and disadvantage. And yes, both can be abused and misused. Tha'ts why I am still in search of better techniques. Again, I am looking for the techniques that is independent of Programming Language.
Sun 02 Mar | Alyosha` | Agreed that every error condition must be handled, and that good error-handling code has some ugliness to it. That said, wrapping a try/catch around a block of exception-prone code is a whole lot less ugly than checking error codes at every method invocation. 'By explicitly returning a result object - you actually FORCE the programmer to consider the consequences of his/her behavior.' Not so. At most you mildly encourage the programmer to consider consequences of exceptional conditions, but there is nothing preventing the programmer from omitting the error test. Not like in Java, where checked exceptions Must Be Handled, Period. (It's too bad that C++ and C# don't have this nifty feature, but regardless, I'd still use exceptions on those platforms, if only for the benefit of writing my error handling code once instead of at every method invocation). * * * So the JDK bombed when you tried to get it to load a corrupted JPG? Sounds like a good old-fashioned library bug to me. It's not Sun's coding guidelines to throw unchecked exceptions in cases like that. Having never seen it before, I'd bet quarters to nickels it was array index out of bounds exception from a buffer overrun. Yeah, in theory there should never be bugs in your external libraries, but ... sometimes it happens ... You should have been glad to see the exception though; if it happened in a C++ library, it would have overrun the buffer silently and then only ten minutes later start coughing up blood. And while we're on the subject of theory vs. practice ... The THEORY says that you should check error results after calling a 'dangerous' method, the PRACTICE says that invariably you or your coworkers is going to forget that error check and it's gonna bite you in the ass, as your code fails silently and you have no idea what caused it. This cure is worse than the disease.
Sun 02 Mar | n | This is where macros would come in handy in Java. I'd often like to say: catch all unknown exceptions (except for threadinterrupted, rethrow it) and run some failure handler.
Sun 02 Mar | n | Hmm, actually macros aren't needed, this can be done with functions. I suspect exceptions are good for quickly building code, when you don't mind trashing the current context and going up to one that has enough information to handle the error and cleanup. But OTOH, when I have a stable design, result objects certainly look worth considering.
Sun 02 Mar | Andrew Reid | Liron wrote: 'In my experience - programmers need to handle every error condition. For this matter - using try/catch or if/else is the same thing actually.' Not really. with exceptions you can check for errors in only a few places. With error return codes you have to check the code on almost every line. For example try { foo1(); foo2(); foo3(); ... } catch() { // error handling } instead of if(foo1() == ERROR) { // error handling } if(foo2() == ERROR) { // error handling } if(foo3() == ERROR) { // error handling } ...
Sun 02 Mar | raindog | I worked on a huge system, written in very readble Perl (yes, that's possible). We used the following approach - every function that was supposed to return some result, returned 2 objects: result and an error object (if error occured). Note: in Perl, functions can return arbitrary number of objects. It seems to be cleaner than combining result and error in some artificial 'result object', which is not really a single object. So, our normal code looked like this: my ($result, $error) = foo(); if ($error) { # use $error->code and $error->description ... } In the foo() function, the results were returned as return (undef, $error); # if errors happened or return $some_result; # if everthing is OK. Note: there's no need to pass some fake NO_ERROR object or NULL. No error means no error, literally. Of course, this approach is possible only for languages that support multiple return values: Perl, Python, Ruby, etc.
Sun 02 Mar | Exceptional Coder :P | I think the idea of using a generic ResultObject to facilitate is a really bad one. One of the key features of structured exception handling mechanisms like the one supported by Java is that the exceptions have well defined type information associated with them. This provides several benefits. The compiler can help check things being primary among them. If a sub-procedure is altered to generate additional exceptions, the compiler will show you that you need to modify client procedures, for instance. Also, the type information is very useful in communicating the semantics of the exceptional condition, much moreso than some arbitrary integer constant. It's also useful, IMHO, to have language facilities for structuring the exception handling code, rather than putting a big switch statement in there, hopefully as a catchall. And finally, using scalar constants just begs for compatibility problems between libraries that may use the same numbers differently. Exceptions defined in namespaces do not suffer this shortcoming. The ResultObject scheme being discussed is similar to arguments I hear about using languages that don't force you to declare the types of your variables. This is great for slapping code together quickly, but in taking this route you take away one of your most powerful tools for ensuring correctness: the compiler's type checking mechanism. The main problem I see with exceptions comes from what appears to me to be programmer laziness. I can't even count the times I've seen someone stick a catch(Exception e) { /*do nothing*/ } into the code, just to shut the compiler up. It could be that the programmer is working on the mainline code and doesn't want to lose the train of thought by considering exceptional conditions, but that kind of code makes it into the shared code stream enough that I have my doubts. There are things about currently popular exception management approaches that bug me. The biggest of these is probably how they work in combination with inheritance. In most cases, though, I prefer them over alternatives like the one mentioned above by a wide margin. If one of my teammates used this approach, I'd expect a *very* good reason for it.
MS to open source for China | Fri 28 Feb | Dennis Atkins
Microsoft is going to let the CHinese government have tehir source code: http://story.news.yahoo.com/news?tmpl=story2&cid=568&e=15&u=/nm/20030228/bs_nm/tech_microsoft_china_dc Also, Microsoft is going to invest $750 million in China. Gates says, That actually has zero dollars of revenue associated with it because its a free thing, but Id say its a very important thing. Heh heh. Tech people are such pushovers. Man what a dumb move by MS. Obviously having the source code will give them a serious technical advantage. Say goodbye to your jobs Americans!
Fri 28 Feb | Simon Lucy | I imagine its the same as all other governments that have the Source Access licence. Basically you can go to some Microsoft facility, play with the source, run tests etc but you can't take it away with you. This is an example of 'opening the kimono' not releasing source.
Fri 28 Feb | Nat Ersoz | When someone from MSFT utters the words 'open the kimono', find the exit or grab the vaseline.
Fri 28 Feb | Simon Lucy | This, I presume, is from personal experience Nat?
Fri 28 Feb | Ran Whittle | So does this mean that the creators of the Code Red mess that we went through a while back will now be more likely to have access to Windows source code? I am not saying that the Chinese Govt. sponsored that attack, but I can't help but wonder about the security implications of this decision.
Fri 28 Feb | Nick H | It's probably not such a stupid idea. I think M$ faces some serious OS competition in China. Besides Linux, I've read that there's a government-backed effort to develop a Win98-equivalent OS. The link below goes into more detail. Security and M$ information gathering are the big concerns. http://biz.yahoo.com/ap/030228/microsoft_china_2.html
Fri 28 Feb | doobius | 'have their sorce code' 'controlled access to its source code' not the same thing and not open source. a desperate move to keep a fifith of the worlds population from growing up on Linux.
Fri 28 Feb | Nat Ersoz | CAll me 'Mazola Boy'. Mmmmmm. Butter.
Fri 28 Feb | Chris Tavares | That whole thing really strikes me as odd. The main reason for China wanting the source code to windows is to do a security audit - take out the NSA back doors, for instance. But there's no guarantee that the source they get to look at is the the source code to the actual bits that get shipped!
Fri 28 Feb | Go Linux Go! | 'Obviously having the source code will give them a serious technical advantage.' How do you figure that? What kind of advantage? I seriously doubt that there is some golden nugget of programming Zen that is only contained in the Windows source code. If you're referring to finding some 'undocumented' feature and using that, then I'd recommend you think that through again.
Fri 28 Feb | Jeff MacDonald | 'Tech people are such pushovers. Man what a dumb move by MS.' If you look back at the history of Microsoft thus far, they have made very few 'really stupid' decisions (please don't flood the board with examples of stupid things Microsoft has done - I can read the news, too - I'm speaking generally to prove a point). Sure, there are a million 'unpopular' decisions, but in the end those decisions ultimately benefited the company (try to separate 'benefiting the company' from 'benefiting the industry' and 'benefiting the user' - Microsoft is in business to make money for their shareholders, like it or not) . Do I care for all of Microsoft's business practices? No way. But despite how much hatred so many people have for the company, their decisions appear to be 'dumb moves' until that one day (months or years later) when the competition goes, 'Oh, THAT'S why they did that. Damn, we should have done that.' Make no mistake - Microsoft does EVERYTHING for a reason. Why they do things, however, is initially sometimes quite a mystery. At this point, all we have is a bunch of maybes and suspicions for why they're doing this. As time goes by, however, we're going to discover the bigger picture and be surprised we didn't see it sooner. -Jeff
Fri 28 Feb | Harold | >Obviously having the source code will give them a serious technical advantage. Say goodbye to your jobs Americans! They already have a serious technical advantage - a lot of very intelligent people. If we assume a Chinese population of 1.2 billion then I would estimate that they have about 2.4 million people with Mensa level IQs. I imagine a lot of these people will start coding for peanuts or fun and then we will have so much free software that no one will pay for it. Anyway how many people in China pay for software now ? Very few I would guess. I bet Microsoft sell more software to Iceland or Ireland than they do to China.
Fri 28 Feb | one programmer's opinion | 'Very few I would guess. I bet Microsoft sell more software to Iceland or Ireland than they do to China. ' Yup. The Chinese (government, businessmen, I.T. workers, etc.) are big time pirates. For example, many of the Computer Science students in China possess or have free access to just about any software product or I.T. related book they want or need. Note: I'm not saying that piracy is only going on in China!
Fri 28 Feb | Dennis Atkins | Right, that's what I was thinking -- it seems extremely unlikely that anyone in China is going to suddenly start buying MS products rather than pirating them, so opening the source code up doesn't provide much strategic advantage, which is what I assume they are seeking to gain. I think MS, intoxicated with the idea of 1 billion new customers is following the same path that a lot of other US companies trying to break into China followed, only to get double-crossed and triple-whammied once the Chinese had all the information they needed to start producing their own stuff. The latest versions of Windows are supposed to be much harder to pirate, requiring telephone calls and hardware checks, than older ones and MS may be getting close to the point where they are impossible to pirate -- unless you have the source code of course... then you can manufacture your own. I don't think the Chineses government has any interest in switching to Linux actually - but I do think they can use that story to their advantage to get access to the source code so they can make the copies they need. And of course allow their intelligence arm to prepare worms to unleash upon the Western capitalists Infidels!
Fri 28 Feb | american sceptic | the attitude of americans to china never ceases to bewilder me...with a population of 1.2 billion, huge over crowding problems and an iffy economy, china has had a good excuse for years to start a few foreign wars, but aside from a few border squabbles have not done so. America, OTOH, has been involved in a war every few years. truth is, Ive lost count of them all. And thats not counting the various countries they have been bombing, manipulating and otherwise badly treating. which is the country that has done most to ensure international peace? my vote goes to china for doing nothing whatsoever one way or the other....kind of sad really.
Fri 28 Feb | Go Linux Go! | must...resist..the urge...to flame...the naive simpleton who posted...
Fri 28 Feb | Bored Bystander | Uh, now let me get this straight. According to the article, the Chinese government is being given 'controlled' access to the source code for Windows and other Microsoft products. And we ALL know the very high, almost religious esteem in which China and other far east countries view intellectual property law. I'm sure that anyone who inspects or peruses this source code will have *NO* contact with a competing platform developer, right? LOL! Excuse me for the overtones of stereotype in the following comment, but how long before 'Yankee Dog Die'/'Red Dawn' 'Window 200x' comes out...? God, what a profoundly stupid move. Unless MS has decided to give away the desktop product market in those countries, and possibly the rest of the world, too...
Sat 01 Mar | one programmer's opinion | 'the attitude of americans to china never ceases to bewilder me...' Huh? I think you need to re-read the postings. The following is what we are discussing here: Microsoft (like many other American companies) wants to do business with the Chinese government and the rest of China. They have decided to give China their source code because they are well aware of the Chinese government's preference for Open Source solutions such as the Linux OS. Some of us don't think this move will help Microsoft increase their sales in that country. The latest statistic that I have read is that for every copy of Windows sold in China ten copies are acquired through piracy. Personally, I think the 10 to 1 ratio is too low (20 or 30 to 1 sounds about right to me).
Sat 01 Mar | Eat Mensans for breakfast | Harold, Sorry for the criticism my man, but your statement that 'If we assume a Chinese population of 1.2 billion then I would estimate that they have about 2.4 million people with Mensa level IQs.' is wrong. First of all, Mensa is for people with an IQ in the top 2% of the population. That would make 24 million members--not 2.4. Of course, the normative comparison to the U.S. is also worthless as these 24 million people might actually be much smarter (or much dumber) than an American Mensan. Also, what makes you think that software developers should automatically be grouped in with Mensans (an inference based upon your assumption that Chinese Mensans would take to writing code)? Having actually been in Mensa, I can tell you that IT types definitely abound, but so do librarians, prostitutes, farmers, and every other kind of person that you wouldn't normally think of as 'smart' (except many did have broken glasses and smelly T-shirts ala Meatballs).
Sat 01 Mar | Harold | Yes, you are right. It should be 24 million possible Mensa members in China. It was very late at night when I wrote that comment - that's my attempt at an excuse. This is a scary prospect for paid programmers. I take your point that many of these egg heads will not be interested in coding, but it will only take a small percentage of them to swamp the market with free stuff. >Of course, the normative comparison to the U.S. is also worthless as these 24 million people might actually be much smarter (or much dumber) than an American Mensan. I think it is safe to assume that the Chinese who score above the 98th pecentile on an IQ test are no less intelligent than the Americans or Brits who can do the same. I am not interested in starting a flame war about race and IQ but I have not come across any references showing that the Chinese score lower on intelligence than other races. You say you were in Mensa and you found many people there who you wouldn't call smart. Well my wife would get into Mensa very easily and she comes out with some very stupid comments. She has just told me that the Chinese are not very inventive !
Sat 01 Mar | Neil E | Hmm, american sceptic, you should try googling for 'tibet occupation' for starters.
Sat 01 Mar | Simon Lucy | This thread, along with several others recently, seems to be showing that the ability to read is now an optional skill.
Sat 01 Mar | american sceptic | 'Hmm, american sceptic, you should try googling for 'tibet occupation' for starters. ' ok...so thats *one* war since 1949...still looking good in comparison to america..
Sun 02 Mar | Go Linux Go! | ' ok...so thats *one* war since 1949...still looking good in comparison to america.. ' Did they teach history where you went to school? How about China's involvement in the Korean War? Yeah, China is a wonderful place. Such a democracy. Such freedoms. Just ask any Falun Gong member. Idiot.
Sun 02 Mar | Go Linux Go! | Ok, I apologize for the 'idiot' comment...
Sun 02 Mar | american patriot | 'Yeah, China is a wonderful place. Such a democracy. Such freedoms. Just ask any Falun Gong member.' actually I didn't mention freedoms at all, I was discussing wars.....and even given the korean war china is *still* doing an awful lot better than america.......
A New Kind of Science | Fri 28 Feb | Just me (Sir to you)
I know from past topics some of you like this kind of stuff, so I just wanted to let you know that Stephen Wolframs Stanford University talk in the Seminar on Computer Systems series is up on murl. http://murl.microsoft.com/LectureDetails.asp?1002
Fri 28 Feb | The Real PC | I think I have already asked if anyone here is interested in digital physics and no one answered. No one could see the connections between computer science and linguistics, either. People are not usually able to see connections between closely related fields, sadly enough. Donald Knuth mentioned DP in his lectures about God and computers. I have believed for a long time that our world is made out of information, rather than 'matter' (whatever that is). As far as I know the ideas of DP started with Ed Fredkin and cellular automata, and the 'life' game.
Fri 28 Feb | Just me (Sir to you) | History of cellular automata http://www.wolframscience.com/reference/notes/876b
Fri 28 Feb | Dimitri. | Interesting things, these theories. I think cs is giving a new way of looking on physics. Not necessarily that the universum really _is_ a computer, but that it can be viewed as a computer, and using computer thinking on its workings can yield valid and interesting results. Really, what this really means is that instead of using mathematics as an instrument, you use a computer model as an instrument. But, historically speaking, any fundamentally new way of seeing things in science takes a lot of time to be accepted.
Fri 28 Feb | Go Linux Go! | The reviews on Amazon.com for his book are amusing to read.
Fri 28 Feb | Brian Hall | I believe it was Skeptic magazine or something like that, and it did a feature on a presentation Wolfram gave to a panel/group of scientists. One of the points made against Wolfram was that, according to everything he has said, cellular automata would represent a 'new' kind of _computation_, not a 'new' kind of science. It is merely one more tool for science to use, and it doesn't really seem all that useful either. Ultimately it was the consensus that, while cellular automata could come to be a greatly useful computational tool in various fields of science, and possibly open up a field of study of its own, only time will tell just how useful it would be. No one, save Wolfram, seemed to think it would be an actual revolution in science - only a bit of an evolution, at best, if it amounted to anything at all. It was also noted that Wolfram just so happens to follow the exact formula of all sorts of scientists-gone-kooks in the past - working alone, self-publishing in a book rather than in peer-reviewed journals, one big huge book yet no articles (so far) have been published in peer reviewed journals, not acknowleding the work of other scientists, most of the footnotes refer to his own works and further comments, not to support for the things he says, and many grandious claims of how many practical and useful applications there are of various things, yet he presents nothing that is actually Direct and Specific. All bad signs. He surely has advanced the field of cellular automata in various ways. But that, it seems, is about it.
Fri 28 Feb | Simon Lucy | I wouldn't assume that no one could make the connection between linguistics and computing just because no one was interested in a thread that contained it. If you want to see an example of the Universe as an addressable store, see NULL-A by A.E Van Vogt.
Fri 28 Feb | doobius | 'Is the Universe a Computer' From the latest JOHO: http://www.hyperorg.com/backissues/joho-feb25-03.html#UAC
Fri 28 Feb | The Real PC | [I believe it was Skeptic magazine or something like that] The skeptic web sites I've seen are basically against any ideas different from the status quo. I am 100% for skepticism, but simply dismissing any idea different from what you already know is not skepticism, it's fundamentalism. I've seen articles in the skeptic's dictionary, for example, that reject research even without any evidence against it, because it doesn't fit their pre-conceived world view. I'm not defending Wolfram's book and didn't read it (who has time for that?). I have a vague concept of the implications of DP and CA, and it makes sense to me anyway. My point is this: be very skeptical of the so-called skeptics. DP says the universe is discrete, and that is a radically different perspective, and I think will turn out to be very important.
Sat 01 Mar | Brian Hall | I am 100% for skepticism, but simply dismissing any idea different from what you already know is not skepticism, it's fundamentalism. Oh I quite agree - to not be skeptical of skeptics would make one not much of a skeptic ;) The point was, however, that it was the panel/group at his presentation that was doing most of the questioning/debating and such. It was the skeptical magazine, or article - I just can't recall - that was relaying the information and commenting on it. Further, due to the way it was written it was not at all merely dismissing anything - it was, however, noting just how lacking in support many of the claims for a 'new kind of science' are. In short, the evidence does not support his conclusions and assertions. To put a fine point on it, 'They laughed at Einstein...but they also laughed at Boso the Clown.' The conclusion as a whole was that it is likely much less than the hype, and not a 'new kind of science', but surely some interesting things will come out of it - just nothing like Wolfram seems to think.
Sat 01 Mar | Brian Hall | Oh, and: I've seen articles in the skeptic's dictionary, for example, that reject research even without any evidence against it, because it doesn't fit their pre-conceived world view. This is new to me - do you have a more specific example? I have seen him - the author of the dictionary - be a bit free with logic and dismissal in his various email exchanges and such on the site, but beyond that I'm aware of nothing quite like what you are talking about.
Sat 01 Mar | The Real PC | http://skepdic.com/pear.html They accuse the researchers of cheating, etc., without a shred of evidence. I have seen this kind of illogical hysterical accusation lot. If the results contradict materialist assumptions, the research must be flawed. Many so-called skeptics cannot deal with the thought of materialism being obsolete. They are not skeptics they are narrow-minded defenders of a faith. And I do think DP is a new kind of science. Thinking of the universe as made of information (or relationships) is very different from the traditional approach. There is no ultimate particle; ultimately all matter is mental and the universe is just a big mind. DP does not necessarily lead to a religious outlook, but DP and religion (or mysticism, or whatever you want to call it) are compatible. I think that's why Knuth likes it. I read part of Fredkin's website and he seems to be an atheist, though. DP does not require faith in higher intelligence.
Sat 01 Mar | Alyosha` | That's a pretty harsh way to spin that article, PC. Given the choice between several mundane causes of an unexplained phenomenon, and one exotic cause of the same phenomenon, it's natural to suspect a mundane cause over the exotic one. In this case the mundane causes suggested are ones that have plauged scientific investigation since the dawn of time, let alone scientific investigation of THIS particular phenomenon: selection effects, drawing conclusions from marginal experimental results, human error, self deception, and yes ... even outright cheating. A result of one part in a thousand ... the miscatagorization of one test, or the rejection of one experiment in a thousand would be enough to produce an effect like this. Sounds pretty close to the natural human error rate, actually. * * * 'I have believed for a long time that our world is made out of information, rather than 'matter' (whatever that is).' As for myself, I've long believed that the world is made out of matter, rather than 'information' (whatever that is). Granted, it's not as sexy a worldview as idealistic monism ('all is mind'), but at least it squares with my general observations ... Namely, that information is what we call matter in organized form, that consciousness is an emergent property of matter organized in complex form. To say it is the other way around, that matter is information in the concrete form, is totally unconvincing to me and alien to my experience. Put simply, I've noticed something unusually strange about my universe: it takes a material brain to think. Never saw a rock or a puff of wind that was capable of such a thing. There's a fantastic correlation between the complexity of a brain (or computer) and its apparent ability to process information ... and I don't think that's a coincidence. Moreover, there's also the interesting phenomenon that if the material structure of a brain or computer is disturbed, its ability to process information is likewise significantly affected. So I can understand matter divorced from intelligence, but I cannot concieve of intelligence liberated from its material bonds. Maybe that says more about my lack of imagination, or my 'fundamentalist' materialism, but I doubt it ... * * * Now to touch briefly on the original topic of this thread ... So it appears that the universe and cellular atomata both display the property of complex structures arising from simple rules. Fascinating. So what new insight does this give us about the universe in which we live? (time passes) I'm .... still ... waiting ... Hrmmm, maybe the whole universe we know is a computer simulation. Maybe there's a horde of Cartesian Demons trying to decieve me about everything, maybe everything's a figment of my imagination. But, you know, I got my surrealism fix from watching the Matrix; it was good entertainment, but to seriously contemplate such a fundamentally unprovable and fantastic hypothesis is really a waste of brain cycles. I think some people have a fetish for being more fascinated with the analogy they've cleverly discovered between two seemingly unrelated items, than in investigating the unique and individual aspects of the things themselves.
Sun 02 Mar | The Real PC | Alyosha, In implying the PEAR researchers are making stupid mistakes or cheating, after 20 years of observing this kind of effect, skepdic is really grasping at straws. As for being a materialist, there's nothing wrong with that, as long as you are open-minded and willing to consider the evidence against it. Keep in mind you are observing only from a human, 4-D perspective. And don't assume everyone who has ever communicated with 'supernatural' beings is a lunatic, and don't assume every psychic researcher is a fraud or stupid. If you can form an objective and unbiased, and informed, opinion that reality starts with matter, not information, there's nothing wrong with that. (Except that it's bizarre to insist that there is any ultimate particle, but anyway). Regarding the Matrix: The philosophy behind the movie, like most science fiction, is materialist. Even though our world is a virtual reality, there is a material reality that generates it. But the idea that our reality is 'computer-generated' is, if you think DP may be valid, quite reasonable.
Sun 02 Mar | Alyosha` | Let me get this straight ... When myself, the skeptic's dictionary, and others suggest that the list of usual suspects may be responsible for the modest results of the micro-PK experiments, that's 'grasping at straws', but to attribute it to some ill-defined and completely mysterious 'power of the mind' which has no grounding in the laws of physics that we know of up until now, well, that's somehow not grasping at straws? I really wonder what your basis of comparison is.
Philosophy of long hours vs not | Wed 26 Feb | Mikayla
I would have to say there is something wrong with the theory of programmers getting bullied into working long hours. Its more complex than that. Honestly, many of us (especially when were young and have limited responsibilities) enjoy working long hours on occasion. However, we know (or quickly learn) we shouldnt do it for nothing. Also, that the people / companies who encourage us are worse than the ones that discourage us, and the ones that get more forceful than encourage are not worth any respect at all. They have less respect for me than I have for me, and I have to cut that off before it affects my perspective and Im lost in an endless downward spiral. (Im currently worried about having to quit my job, a state which many people are not ethical enough to sympathize with. I would say or privileged enough but my situation seems more due to discipline over the last five years and my priorities, not sheer luck.) Can anyone tell me why I have perfectly reasonable relationships with other humans, yet find myself acting obsessive-compulsive and codependent about companies and ideas? I get the impression Im not the only one.
Wed 26 Feb | Kevin | Do what you have to do. Life is too short to be unhappy.
Wed 26 Feb | Daniel Shchyokin | Not refering to anyone in particular, but coould there be such a thing as a code slut?
Wed 26 Feb | anon | Surrounded by thoughtlessness, it is easy to secondguess the obvious things which go without saying. Careful.
Wed 26 Feb | Ron Burk | > Can anyone tell me why I have perfectly > reasonable relationships with other > humans, yet find myself acting > obsessive-compulsive and codependent > about companies and ideas? Can't tell anything about you in particular, but it's worth noting in general the psychological research that indicates that people just out of college derive more of their self-esteem from their work and work relationships than from their intimate relationships. Only a fair number of years down the road does that balance tend to swing the other way. When your ego is tied strongly to your work, counter-productive behaviors are perhaps more likely.
Thu 27 Feb | one programmer's opinion | Mikayla wrote, 'I would have to say there is something wrong with the theory of programmers getting bullied into working long hours. It's more complex than that.' In most situations it is NOT more complex than that. All companies have a hierarchial power structure and in just about all of these organizations -- a programmer -- works at or close to the bottom of this power structure. You don't want to work long hours to help get a project done sooner? You don't want to come in on Saturday or the middle of the night to fix a production problem? Then don't do it. In many instances, your boss or his/her boss will simply find someone else who is willing to do so. Like you (I think) I wish things worked differently then they do, unfortunately, we live in a very imperfect world. This (having little power or control) is one reason why so many programmers seem to be interested in starting their own consulting business. Personally, I didn't catch the techie bug of loving what I do (coding, learning new technologies, losing track of time, etc.) until later on in my career when I moved off the mainframe. Of course, nowadays I have a whole slew of new things that I like to bitch about besides working too much.
Thu 27 Feb | Daniel Shchyokin | The problem with the current generation of techies (me included) lets say 22-30 is that we are so used to having our butts kissed that we have never learned to negotiate. I are either macho masochists- i.e. I code 14 hours a day and love it and anyone who doesn't is a loser, or have a woe is me attitude. I for one am learning though, for instance its 11:00 and I am at work because 'something came up' but when the manager asked me If I can stay late, my first words were not an angry 'no', or a 'ins not fair' (which is par for the course for me when I am tired), but a firm but polite 'If do this today, you won't need me for most of tommorrow, right?', and would't ya know it, I won't have to be there till 3:00 pm tommorrow. keep in mind: some managers don't realize you wan't to do anything other than code. some businesses are genuinely evil (I have worked for one) others just need you to be flexible some managers don't even realize the hours you are working, unless you tell them. keep your cool don't make every situation a battle of wills, make it a bargaining sessions. most managers and especially business types relate much better to that.
Thu 27 Feb | Dino | 'Can anyone tell me why I have perfectly reasonable relationships with other humans, yet find myself acting obsessive-compulsive and codependent about companies and ideas?' I guess you must find your own answers in this case. But from a pragmatical perspective, Kevin is right: life is to short not to have fun. Cheers Dino
Thu 27 Feb | Philip Janus | 'some managers don't even realize the hours you are working, unless you tell them. ' A lesson I learned the hard way. It's 3am, you've just finished a marathon coding session and checked everything into SourceSafe. What is the absolute most important thing you can possibly do before you shut down? Send your boss an email with the status. The contents of the email really don't matter - you just want to 'clock out' with a timestamp on the email. I once worked four 20-hour days in a row finishing an app for a demonstration. Who got the kudos? The guy who worked until 2am one night but sent an email to his boss when he was done. 'I got your email - what were you doing here at 2am? You're the *man*!' Philo
Thu 27 Feb | Philip Janus | And regarding working long hours, IMHO it's a combination of: 1) Pride in your work 2) Seeing work as a challenge 3) The need for approval 4) Enjoying your work I think if you don't have one of those factors, you'll clock out at 5. It's the true geeks that have the unfortunate confluence of factors that make us strive to kill ourselves in service to a goal. Philo
Thu 27 Feb | John Ridout | You mean you don't program your computer to send an email at 2am while you are asleep in bed?
Thu 27 Feb | Philip Janus | I was gonna make a comment about ethics but I figured 'nahhh... I don't need to....' [grin] Philo
Thu 27 Feb | Practical geezer | Philo, Though not having those motivations might lead one to leave at five, the argument is not reversible. In other words, leaving at five does not prove one is not motivated. Just thought I should mention it.
Thu 27 Feb | Ian Stallings | Philo, You should use your evil genius side and do what any self serving programmer would do, automate it. Have your app send out an email detailing what you've 'done' at 2am. I bet you could randomly generate your accomplishments and it would simply be glanced at. Maybe pull your accomplishments from a dictionary of tech words and marketing fluff ;-)
Thu 27 Feb | Rubin | Mikayla, If your self respect depends on how much other people respect you, then you already lost the battle. I learned after much grief and pain that I am more than another warm body in a software sweatshop, and I act accordingly. If there's nothing for me, I won't make sacrifices. By the way, there's no such a thing as a company or an organiztion, there are groups of people that have their own agendas. So you don't work overtime for your company, you work for your manager, or for for your manager's boss, or for a group of elderly stockholders in nice bungalos in Florida. Keep that in mind when you make your decisions.
Thu 27 Feb | Daniel Shchyokin | 'You should use your evil genius side and do what any self serving programmer would do, automate it' Do one better, deliberately find a company that monitors user activity remotely (scwab does this I believe), and use awt robot, or Visual test (comes with vs 6 I believe) to start randomly doing stuff between 5 & 9,10 pm (launch scripts, launch vs type stuff etc...)
Thu 27 Feb | Go Linux Go! | Hehehe..The discussions about sending emails reminded me of an Dilbert cartoon where Dilbert wants to send his boss a voice mail at 2:00 AM to let him know he is still working from home. So he starts to leave a message with the words 'It's 2:00 AM, I'm sitting here in my underwear' then decides that it sounds to weird. Instead of hitting the delete button, he accidentally sends the voice mail to the entire company directory. Ok, it was funnier in comic strip form.
Thu 27 Feb | Bored Bystander | A culture of long hours in a company indicates (in order of precedence): - No process. - A management that thinks that getting its pound of flesh and seeing obvious sacrifice means that it is getting 'real value'. - Stupidity at work on several levels. Anyone that cooperates with such a regime is basically giving positive feedback to incompetent and/or abusive management. Be like me. Resist. Live under a piece of cardboard. LOL Seriously, resist by working smarter and more productively than the fools that are hooked into the local overwork culture. If that doesn't work to your benefit (because, for instance, even if you produce, you are thought to be less morally upright than the posturer that runs his email script that fires off 'I was here at 2:17AM messages'), then find another job with more humane goals and leave. If nobody joins the borg collective, then there's no borg collective, right?...
Thu 27 Feb | Bella | > Seriously, resist by working smarter and more productively than the fools that are hooked into the local overwork culture. Even if your produce 2x more by 5pm than other people do by working until 10pm, you still can't just walk out the door at 5pm while the rest of the team stays. You should not be working on a team like that. If you don't like your hours, or they dont mesh with your teams culture, you are better off leaving. Everyone is better off that way, in fact.
Thu 27 Feb | Bored Bystander | >> Even if your produce 2x more by 5pm than other people do by working until 10pm, you still can't just walk out the door at 5pm while the rest of the team stays. You should not be working on a team like that. Absolutely agreed, and I have been persona non grata in those kinds of environments. The people slaving away at all hours think they're doing a necessary sacrifice and they will automatically resent anyone that doesn't bleed like they do. In fact, the management will teach their people this stuff more or less. A situation like that is a gross misfit of a qualified person in a sweat shop or a shop that lacks process. It's the reason I became a contractor. There's less risk in accepting the market risks than there is in trying to make my style fit a joint like that. Cash on the barrelhead, and nobody gets bent out of shape.
Thu 27 Feb | Philip Janus | Good points, all, Bored. Don't forget 'insufficient manpower and/or lack of priority management' - you can have all the process in the world, but if you continually bite off more than you can chew (or refuse to invest in the personnel assets to make it work) it doesn't help. Philo
Thu 27 Feb | Daniel Shchyokin | > Seriously, resist by working smarter and more productively than the fools that are hooked into the local overwork culture. The problem with that, is there are very often interdependencies, i.e. a phone call a 10:00 pm asking what you did with ...
Fri 28 Feb | Stephen Jones | >>>>> Even if your produce 2x more by 5pm than other people do by working until 10pm, you still can't just walk out the door at 5pm while the rest of the team stays. <<<<<< Yes you can and should (in fact if you're producing 2x the work you should produce 1.5x and leave at 3.30 Has it never occured to you Bella that everybody on that team is waiting for somebody to be the first to leave? Your attitude is that of 1980's Japan where an under-employed workforce put in the longest hours in the world because nobody wanted to be the odd-man-out.
Fri 28 Feb | Brent P. Newhall | Daniel Shchyokin wrote, 'there are very often interdependencies, i.e. a phone call a 10:00 pm asking what you did with ...' If those phone calls come often, then something fundamental is broken and needs to be resolved. Either the recipient of the phone calls is so irresponsible s/he keeps leaving important things undone and must be paged, or the project is so broken that it needs constant baby-sitting. Either situation must be resolved now. It's still no excuse for putting up with frequent 10:00 p.m. phone calls, or anything else that interferes with the rest of your life. Weren't you hired to work forty hours a week? (Obviously, this doesn't apply to someone hired to be round-the-clock tech support.)
Fri 28 Feb | Brian Hall | Can anyone tell me why I have perfectly reasonable relationships with other humans, yet find myself acting obsessive-compulsive and codependent about companies and ideas? I get the impression I'm not the only one. Mikayla I find it strange that I'm the first to say this, but here goes: This is actually not the least bit unusual, in all forms of life. I recall someone else saying on another forum, 'I use to have a really high and great respect for PhDs...until I worked with them more and got to know them personally.' I can't count how many times I've heard that about so many different things. Lawyers, politicians, investors, venture capitalists, CEOs, accountants, managers, companies - all these things I use to have quite a bit of excess fear and/or respect or disrespect for, but it has changed alot for one simple reason: I learned more about them, and have actually gone through enough knowledge and consideration of them to consider being one. And in all that, my assurance that they are people, plain and simple, will not be sufficient. Your problem is not an intellectual one, bit a kind of 'skill' one - you need to experience it first hand to alter your thoughts and behavior. So here is a practical and down to earth way of fixing any excess respect, dependence, or subordination you feel to managers, executives, or just 'companies' - learn more about them. Decide that - in theory - you want to be one (or start one, in the case of a company), and then go about learning what it takes to do that. Once you understand people better and could actually see yourself in that same situation, you can better think like they do, and then you'll be able to have a more reasonable relationship to them; if nothing else your opinion of them will be inline with reality, and thus you can more freely act to further your own rational self-interest. If all else fails, just imagine the sick sexual, illegal things they probably fantasize about in their free time. That works too.
Fri 28 Feb | Bored Bystander | >> Can anyone tell me why I have perfectly reasonable relationships with other humans, yet find myself acting obsessive-compulsive and codependent about companies and ideas? I get the impression I'm not the only one. So I'll be the second to talk about this. Dang! :-) I'll restrict my comments to the employee-employer relationship. I have found that most employers of technologists *want* us to personalize these technical jobs to a degree that's almost sick. Employers want us to believe that our worth as people is directly related to our level of performance in our job. Employers in IT want us to think that the damned job is our life. Many times working for certain places I've gotten vibes that amount to school children deciding as a gang that someone deserves to be picked on and others don't. Examples: the few DOS programmers left in the company shifting to Windows, or business analysts vs. coders, or application developers vs. the bitheads that write OS and driver layer stuff for a new product. The thing is, this kind of hostile, evil and infantile rivalry is often promoted by managements as a sort of sieve to filter out the 'weak' performers and to create an internal atmosphere of bullshit 'competition'. This is on top of the existing pressure to internalize the company's standards as some sort of referendum on our own worth as people. This mentality pervades the one sided 'employment contract' that most of us enter into, down to the stupid periodic personnel reviews that do nothing but slam someone who is a high achiever in their work because they don't meet a vapid Dale Carnegie standard for being a 'people person'. Lastly - if you want to be employed in the private sector, there is *NO WAY* to escape this kind of degrading manipulation. If you say 'yeah right' you'll 'hit the bricks, pal.' This whole scene is another of HR Block's 9,396,223,122 reasons to tell employers to get bent, stick it up their asses, and be a contractor.
Fri 28 Feb | Stephen Jones | The attitude Bored Bystander is referring to happens in all fields, not just technology. I suspect that IT companies have been able to get away with it for longer because they used to pay so much. The original posters 'obsessive-compulsive and codependent' attitude is more due to the fact that when one is a student one views one's worth by one's acheivments, and is interested in knowledge for its own sake. This attitude carries on to the workplace.
Fri 28 Feb | Brent P. Newhall | Bored Bystander wrote, 'Employers want us to believe that our worth as people is directly related to our level of performance in our job. Employers in IT want us to think that the damned job is our life.' *Some* employers. I've had employers in IT who did not have this perspective, and in fact, were strongly opposed to it. Everyone worked 40 hours, then went home, and management was perfectly happy.
Sat 01 Mar | Bored Bystander | Ok, I'll clarify. My home base and metro area isn't coastal nor tech belt. So programmers and 'deeper' technology people in my area - you know, the defenseless and sharp MENSA types that get the tar beat out of them on the public playground as children - tend to feel lucky to get *any* job above maintenance or QA, and employers won't pay much here because they don't have to. And so the employers here tend to foster little inbred cargo cults to justify the overwork & underpay. In response to the comment that the intensity was purchased with high salaries - NOPE. In the local area I've typically seen the poorest paid developers to be made or pressured to work the longest hours. The ones like me that draw a distinct line around our personal lives and commitments are paid more. I've seen, for instance, a place here that was a startup that hired a bunch of (unemployed) embedded people to do firmware for a RISC based board family that drove high speed ink jet printers. This place's culture was such that you came to work in the morning, and you were expected to work until the owner and his wife said you could leave, say 10-11 PM. They would call out for take out so nobody 'had to' leave. And they had futons and mattresses around the place to 'encourage' people to pull all nighters. Actually that was one of the jobs that my hapless pal 'R' (from the 'persecuted out of thread') had held in the early 90s. After a couple of weeks of this Jonestown like software cult, he just decided that he wasn't going to work there anymore, and he called them and told them so. They were actually amazed. Of course they promised him the moon if he would only donate the standard package (an eye, a kidney, and a testicle - LOL). I tend to think that I have witnessed more outright abuse than most IT people in other parts of the country...
Sun 02 Mar | Bella | Regarding all this talk about programmers being geeks as kids, and having low self-esteems as adults...I don't buy it. During the boom, programmers became pretty damn confident in their marketability, and were demanding top dollar, and didn't hesitate to walk out the door if conditions didn't satisfy them. Hell, do you remember the 'massages, foosball tables, and pets to work'? These are hardly a by-product of meek, docile, exploited drones. In fact, that indicated the rampant overblown self-aggrandizing. In a soft job market , workers in general may be taken advantage of, and given a bigger workload, not just programmers.
New Forum for New York City | Fri 28 Feb | Joel Spolsky
The Delphi forum was a complete ghost town, so I killed it. It has been reborn as the New York City Front Porch. If youre in or around the city feel free to join in. http://discuss.fogcreek.com/newyork
Fri 28 Feb | Prakash S | Joel, Just a thought, you might want to start a satellite Forum for our friends from UK (quite a few brits in this forum) What say Ged, Simon ?
Fri 28 Feb | Joel Spolsky | I'll give the NY forum a few weeks to settle in, and we'll see if it's possible to attract a critical mass... if that works, I'll be happy to add other cities.
Sat 01 Mar | Neil E | And me Prakash
Sat 01 Mar | Simon Lucy | Well as we're about to leave God's Own County (Worcestershire), and go up t'North West I dunno what city would coincide, probably London but I only go there if I have to. I wouldn't mind Liverpool :-)
Sat 01 Mar | Neil E | Britian, England and London are the same place, aren't they?
Sat 01 Mar | Simon Lucy | They're all in that great place, Erp
Sat 01 Mar | tapiwa | me in London, UK too
Sat 01 Mar | John Ridout | At last a forum in which everyone will understnad the rules of mornington cresent.
Sat 01 Mar | Robert Chevallier | I think it is strange to recreate a virtual third place thru geographical criteria. The excellent thing IMHO on the JOS forum is that it's attract people from all over the world. Joel, why specially New York ?
Sat 01 Mar | Prakash S | Robert, http://discuss.fogcreek.com/newyork/default.asp?cmd=show&ixPost=187 'Why a New York City forum? Well, I thought having a forum just for New Yorkers would allow some of us to get together and meet in real life, which makes the community many times stronger than a purely virtual community.'
Sat 01 Mar | The Real PC | Joel, How does one enter an e-mail address, in order to get into the NY forum?
Sat 01 Mar | reporting from Hyde Park, Austin | Great idea for the New York forum, Joel. If it works, please consider adding an Austin forum. That would be really cool. I suspect there are a lot of us from Austin on the board.
Interesting Blogs | Fri 28 Feb | SunnyAlways
I wanted to know which blogs you guys read habitually and find them interesting... I read 1. joelonsoftware 2. scottandrew 3. iunknown 4. groove what are some other good technical blogs ?
Fri 28 Feb | fool for python | two near the top of my reader: http://weblog.infoworld.com/udell/ http://diveintomark.org/
Fri 28 Feb | Andrew Burton | Here are a few I like: Dan Bricklin - http://danbricklin.com/log/ Hivelogic - http://www.hivelogic.com/ jwz (ex-hacker, current club owner) - http://www.livejournal.com/~jwz/ Ray Ozzie (if he'll ever update again) - http://www.ozzie.net/blog/ Then there's always mine, but that's not very intersting. ;)
Fri 28 Feb | one programmer's opinion | Well, I don't habitually read any of the blogs (except Joel's). However, I do have a list of list of .NET and Java developers blogs stored in an IE favorites folder. A recent topic that I found interesting was '101 reasons why Java is better than .NET'. The list itself wasn't all that interesting to read, but the back and forth debating and the comments it generated on several blogs were.
Fri 28 Feb | Prakash S | Other than Joel's , Chris Sells, Dave Winer (mostly to get links to other blogs:-) ), Paul Graham, Mark Cuban's occasional email responses, that covers it. There was a similar topic in this forum, you should search the forum.
Fri 28 Feb | Danil | Like Andrew, I kind of like my own (except for the software - gonna have to roll my own at some point). Real Live Preacher: http://blogs.salon.com/0001772/ Neil Gaiman: http://www.neilgaiman.com/journal/journal.asp Amish Tech Support: http://users2.ev1.net/~file13/blog/
Sat 01 Mar | blarg | http://www.lemonodor.com/ http://lambda.weblogs.com/ http://firingsquad.gamers.com/ http://www.kuro5hin.org/section/Diary http://www.advogato.org/recentlog.html I usually follow the links on these places, so on lemonodor I often check out 'play with the machine' and itymbi.
Utility functions? | Fri 28 Feb | Andrew Hurst
What do you do with the odd utility functions that undoubtedly appear in larger projects? Im thinking in an OO or encapsulation sense here. Functions that dont relate specifically to one class so there is no object that should know how to do this, but need to be included anyway. Functions that have no counterpart in the language libraries. An Example: You have a FooPrinter class, it prints out files of the format .foo. It is passed the output directory, and the file contents, and needs to know how to get rid of any directory separators on the end of the path so as not to end up with files of the form D:\Bing\Bong\\baz.foo when the file is printed. Assume no library functions to do this exist. Attack the idea, not the example, please (I know its lacking :). Anyway, lately Ive been putting these files into a Utilities class, or something similarly named. But I know this wont scale. The largest project Ive worked on so far is 20k LOC, and that method was starting to break down. So how do you manage this?
Fri 28 Feb | anon | I've often grouped sets of related utility functions into a class as static methods. e.g. StringUtils would have utilities dealing with Strings like static String [] split(String in, String delimiterr) { .... }
Fri 28 Feb | Mike Swieton | I'm not so sure it won't scale. I think good organization is really the key. For instance, the Java Arrays class, which implements many useful utility functions for doing array stuff (binary searches, contains, etc). Or the Java Math class. I like the way of dumping it into an appropriate class, one per category, all well documented.
Fri 28 Feb | RocketJeff | I assume that both of you are talking C++ or VB since in Java methods *have* to be a member of a class. anon's method seems to be based on the same model that Java uses. I'm mainly a C++ programmer, but I'm willing to steal good ideas from any language - and this is one of the idea's I've stolen. Create logically named classes and add your utility functions as static member functions. By separating them into classes based on their function, it makes reusing them much easier and also makes documenting a bit easier (as well as just finding the function when you're looking for a particular routine).
Fri 28 Feb | Nat Ersoz | Well, I was thinking of something along similar lines. But the fact of the matter is that I already have my (stubborn) mind made up regarding what I'll do about it... :) Anyhow, if I could broaden your topic to 'code reuse', and blabber a little more (hope you don't mind). I have a class which has been improved and tested along the way, that is a circular queue - its good in alot of generic stuff. Its 2 simple files: cq.c, cq.h. Do I try to integrate them into a larger library of generic stuff with a common include and /lib directory? Well, I decided, without a whole lot of thought, that big heirarchy is not better unless necessary. So I just kept cq.c, cq.h in the original spot they were created. New ojects that reference these get symbolic links to the originals. So far, no problem. The only wart on it is that your OS must support symlinks and so must your version control. Not a problem in my case. Anyway, I've noticed that I do not make an effort to reuse code in the strictest sense - with alot of heirarchy. Each device driver I've written recently has its own PCI probe function - each slightly different, either by necessity or by my not caring (does it matter?). The drivers get tested and debugged as a unit, not against a maintained library. My code reuse is mostly just cut/paste/modify. FWIW.
Fri 28 Feb | Andrew Hurst | Nat, I've been doing a lot of code re-use the way you mention lately (cut/paste/modify) and thats partly what brought this up. What if you find some bug in a part that you've cut and pasted? What if it happens to be in 50 parts of the codebase? It gets messy. I spent a few hours cleaning up something exactly like that the other day. Though on the other extreme, you set up each function to work as a library function as well, you either end up with a heck of a lot of swtiches to set how its processed (to handle the modify in cut/paste/modify) or a slew of different functions in the library each used by only one other function. Both of which don't sound very good in my opinion. Both extremes don't sound very exciting to me. Which is why I asked this question. I'm trying to find the safe middle ground :-)
Fri 28 Feb | robert | 'static String [] split(String in, String delimiterr) { .... } ' Why on earth isn't that a method on your string class? 'An Example: You have a FooPrinter class, it prints out files of the format .foo.' Often '-er' classes are poor design, where a function is masquerading as a class. I'd ask why your objects which encapsulates 'files of the format .foo' doesn't have a print method.
Fri 28 Feb | raindog | I think, the answer is in your question. You call them utility _functions_, right? So if your language supports functions, write them as functions. Only if it is a restricted OO-only language (like Java), you have to come up with a hack, using classes / static methods. However, using classes is just a hack, a workaround, because of language weakness (or lack of expresiveness). If you think of them as of functions, they should be just functions. If there's not a number of utility functions, organize them using modules or namespaces (whatever your language supports).
Fri 28 Feb | raindog | correction: s/there's not a number/there's a number/
Fri 28 Feb | raindog | Regarding reusablility: One of the most reusable libraries on the planet is CPAN, a huge Perl library, which is only partially object oriented. Generally speaking, the unit of reusable code is module, not class. While it's possible that 1 module = 1class, it's not necessary. A module can contain only procedural-style code, one class or a set of related classes (+ utility functions, if needed). Reusability is related to modular structure, not to the OO-ness of a language.
Sat 01 Mar | Go Linux Go! | 'I've been doing a lot of code re-use the way you mention lately (cut/paste/modify)' Ahhh..the ol' 'Clipboard Inheritance' design pattern...You should always be careful with this one. I've seen plenty of times where code was cut and pasted and then butchered to make work. The end result was an order of magnitude more complex than if they had just written what they needed from the ground up. Or just design the code into a class..or... Regarding the original question, I've always struggled with this too. My preference has been to either create a Utility class with static methods or include the functions as static methods in a particular class. It's always worked for me, but I always felt as if my design were flawed if I had to have a utility class.
Sat 01 Mar | Simon Lucy | Create a Utility class and you may solve a lot of problems, however you may also get a whole lot of others, serialisation, instantiation, mutual deadly embraces of semaphores. Utilities (if they really are utilities) are more a language extension than an operation on a class and there are far fewer real utilities than may be thought. For instance, a 'reverse string in place' function belongs in a String class (though an entire tome the size of a volume of the Encyclopedia Brittanica could be written on the grotesque examples of String classes there are), and not in a separate function. But a function returning the number of elapsed seconds this year? Should it be some orphan method in an orphan class about years? Hardly worth all the overhead; you want a function like that to almost operate as if it were inline code. If a language doesn't support user defined functions (that is context free procedural units), then you have to define them as methods somehow but in that case I'd assume that the language also hides all of the implementation mess that can arise.
Sat 01 Mar | Justin | I have always just put functions like these into library files and kept them in a common folder. I reference the files at project level, rather than sharing the source file. I'm sure there probably is a better way of doing this, but I've never bothered to look. There is something arguably more important than *how* this is done. That thing is documentation. In almost all of the large places where I have worked, the main problems faced by programmers were a) knowing that a function exists to achieve what they want and b) knowing how to use it. Every library system I've ever seen has had neither documentation nor examples (I'm talking about organic ones, not commercial ones). The other missing component which real libraries have is an search system. Yes, I know that if I put them in classes, I *could* create an ordered list of available functions and their arguments from the interface. This does not produce a list of e.g. How to solve problem X - available functions'. If it is too hard to find or maintain library functions, programmers will simply give up and write their own.
Porches and Schools | Fri 28 Feb | I want a big porch
Joel wrote Over the last 25 years, Americans belong to fewer organizations that meet, know our neighbors less, meet with friends less frequently, and even socialize with our families less often It is my opinion that the main causes for this are the almost extinction of large porches on homes, and the ever increasing shift to redistrict schools in order to make thier population more diversified. When I was a kid (Im 30 now) my elementary school was withing walking distance. Our house (in the suburbs of Buffalo NY), much like the rest on the block, had a large porch that you could sit on and enjoy the neighborhood and talk to your neighbors that happen to walk by. This setup has been since replaced by the modern suburb: Homes with decks in the backyard and schools where some children have to ride the bus 30 minutes to get to. Communities built around schools and organizations have been replaced by gated areas with homes. This reinforces the idea that isolation is ok and becomes the norm. Thus the cycle continues ......
Fri 28 Feb | | Agreed, I grew up on the west side of Buffalo (100+ year old homes), and we hung out on the porch everyday weather permitting. In North Buffalo now, and hardly any real porches exist anymore... It's sad, but what can you do...
Fri 28 Feb | Jim Dandy | I want a big porch too with a glass of Chianti.
Fri 28 Feb | X. J. Scott | I recall a study done some years back that suggested that the demise of the porch was due to the invention of the air conditioner... which makes sense to me. Anyway, so it's one example of technology driving people apart instead of bringing them together since porches were one thing that kept communities together. My own personal observation is that air conditioning also destroyed the practice of 'visiting' - where you walked to people's houses and then sat on their porches or in their parlors drinking lemonade for a spell before moving on to the next house. This was done in the summer when it was too hot to sit inside at night and going for a walk was the best relief from the heat if you could manage the skeeters.
Fri 28 Feb | KenB | I remember reading something similar in the middle-ages. Everyone used to gather together in the main hall in front of the fire and tell stories listen to musicians etc etc. Then they developed a method of sending the heat to individual rooms and there was no need to gather together anymore so it caused less friendliness & divisions. Same thing happened with TV. Families used to have 1 where they would watch together. Now the kids each have their own and everyone goes to their isolated rooms to watch. Interesting huh?
Fri 28 Feb | Joel Spolsky | Another example of the wealth effect is swimming pools... people used to socialize at the local swimming pool, now everybody wants their own. So you get a smaller swimming pool, there's nobody there to chat with, and the public swimming pools can't make enough money in membership fees so they close down.
Fri 28 Feb | Mike Swieton | I understand and agree with many of the sentiments here, but I'd like to throw this one out there: I don't like a large number of my neighbors. Many of the people that live around my home annoy me for one reason or another (not going to go into that though), or strike me as very very artificial. The public school system there was good as far as education went, but the students were generally pretty... superficial. To some extend, I think it is reasonable to suggest that the wealth of many of these families had to do with their attitudes (not to say that you can't be rich and nice, but that with spoiled teenage girls it appeared to be the exception rather than the rule.). These are sweeping generalizations, but still: I avoid people I dislike, and, rightly or wrongly, I am rather picky about people I want to be good friends with and see a lot.
Fri 28 Feb | Bored Bystander | There's a book about this: 'Bowling Alone' - about the death of community involvement in the US. (It was a big seller back in 2000. I found it at the unloved books store at the outlet mall for $6. A very good read.) I haven't gotten deeply into it yet but this degree of universal alienation and non community is acknowledged as a brewing social problem. I think the comments about wanting our 'own' whatever are spot on and are probably a big factor. We as a people seem to get trained in independence in everything as a sort of religion. I think product marketing has a lot to do with it. If resources that get people together like swimming pools and mass transit were universal, then a significant portion of the economy would simply have no reason to exist. So this isolation is a corner that our over merchandised economy has painted itself into. A second issue is a culture (cult?) of personal uniqueness and elitism, fed by high end product marketing. We all 'need' to be too special to belong to a group. The SNL parody of the Infiniti Q45 toilet seat is kind of an example of this.
Fri 28 Feb | X. J. Scott | But Mike, is it possible that you would be able to like your neighbors if you all relied upon each other more?
Fri 28 Feb | Shawn Leslie | Crazy, offtopic, and out there, but I have this nagging participle of knowledge that I'd like to settle once and for all, and this is a good time and place. I have heard from my friend (who in turn heard this while getting an economics degree) that the reason that front porches were no longer built is because of fears of drive-by-shootings. I do remember this fear being played out in popular culture -- see Back to the Future II. Because of this, the porches were moved to the back of the houses in the form of decks. Please tell me he's insane
Fri 28 Feb | Mike Swieton | X.J.: I'm not so sure. I think it's largely a case of I don't *have* to associate with these people, so I don't. Now, for instance, when I dislike coworkers, I deal with it. You don't bitch, you work with them, and whatever. I imagine a small, closely knit village would be similar. The other thing is this: while I would probably always dislike these people, they wouldn't be the same people if they'd grown up in that environment. I think we can agree that the social environment one is raised and lives in has an impact on attitudes and behavior. I think I'd maybe like them more then because they'd be different people.
Fri 28 Feb | I want a big porch | Drive By's: I'm not so sure since places that drive by's may most likely happen are areas that probably already have porches; not in the newly created suburbia -apw
Fri 28 Feb | John C. | Check out 'A Pattern Language: Towns, Buildings, Construction' by Christopher Alexander et al. It's a compilation of hundreds of recurring themes in architecture and design and the structure of public and private spaces, in effect an examination of how certain types of design are effective at fostering social interaction and human comfort and other types are not. It may well have helped inspire Gamma et al's Design Patterns book (I know that the authors cite A Pattern Language in the introductory chapter).
Fri 28 Feb | mackinac | >>> Crazy, offtopic, and out there, but I have this nagging participle of knowledge that I'd like to settle once and for all,<<< 'participle of knowledge' ??? Maybe we can start a thread on the effects of spell checkers on the quality of writing. >>> Please tell me he's insane <<< Heard it from a FOAF, huh? Insane, no. Gullible or slightly deluded, maybe. Or just pulling your leg. Decks were becoming popular in the '60's or even the '50's. When did drive by shootings become popular? ObBigPorch (660 ft of it): http://www.grandhotel.com
Fri 28 Feb | hippo-crates | I looked at new homes recently. The developer emphasized the front porches and the sense of neighbourhood in the portrayal of this subdivision. They are, understandably, harping on our sense of loss of community in order to sell homes. Aside from the fact that the porch is not large enough to allow one to comfortably recline in an Adirondack chair (forget about the romantic porch swing), this developer has forgotten one additional factor in this social crisis in which we find ourselves. In order for the porch to serve a social purpose someone must walk by it. Unfortunately the only place anyone walks nowadays (in suburbia) is on the treadmill at the local gym. Instead of walking down the street to the neighborhood bakery, and stopping for a chat with our neighbour who is lounging on the proch, we pack the kids in the car and drive over to the local big box mall. The designers of the urban sprawl have omitted the commercial side of the 'neighbourhood'. Okay, so i am a hypocrite. I have visited Home Depot more times than I care to mention, but I have little choice today. The hardware store down the street does not exist anymore. As much as I hate to present a problem without proposing any solution, this is it - a big part of the problem.
Fri 28 Feb | Stephen Jones | If I do decide to build a house in Sri Lanka I'm going to make sure it has a bloody big porch - but that'll simply be so that the inside doesn't look like a bomb hit it!
Fri 28 Feb | Sigh | Hey, glad this thread is on-topic.
Fri 28 Feb | Jim Dandy | Shawn Leslie: I read your post 3 times and I couldn't understand it. Are we speaking same language here?
Fri 28 Feb | Prakash S | How are things in big cities like NYC, Seattle, SFO?
Fri 28 Feb | Stephen Jones | ==='Hey, glad this thread is on-topic.'---- This is what happens when you go overboard with the metaphors. At least no one is asking about online swimming lessons, despite Joel's contribution to the fthread :) I'm suspicious about what Joel calls the 'wealth effect' - simply because all the statisitics say that most Americans are actually worse off than they were in 1970! I also suspect that this phenomenum ---'0ver the last 25 years, Americans 'belong to fewer organizations that meet, know our neighbors less, meet with friends less frequently, and even socialize with our families less often.' [2000]'----- has a lot more to do with Americans working longer hours than anything else. Harking back to a Golden Age has been going around for the whole of my lifetime, including the part of it that people are harking back to! I reckon it's a case of selective memory. If people are that keen about it I'm sure we can wifi a Brazilian favela or bombay slum so they can have all the social interaction they want and still do their jobs!
Fri 28 Feb | Shawn Leslie | Sigh: I knew the political implications of my post, but consequences be damned, I posted anyway. Although I doubt the topic of the 'impending email' will be porches and lemonade, I am moved enough to want to see the topic fully explored in this forum. Why am I moved? Most likely because I see the some aspect of this reclusive behaviour in my neighbourhood and in my past neighbourhood. Have you ever walked in suburbia on a Sunday night? There's a lot of blue, flickering lights. Particularily freaky is seeing two houses with the same TV program running -- the flashes are in sync with each other. I subsequently moved to the city center, and witnessed a Subway move into my neighbourhood. They moved into what was, most likely because the area was easlily accessable via bus routes, a popular local gathering spot for suburban kids. Eventually, the owner got tired of having kids 'hang out' in front of his store, so he put up signs which said that the area was to be for 'Subway Patrons' only. No more skateboarders, and no more socializing. Why do we have this FEAR of anything but sitting in front of the television / internet? Is it simply because it is easy and we are all lazy?
Sat 01 Mar | Heston Holtmann | Shawn… It is with great sorrow that ‘My’ answers to ‘your’ questions would be of no help. However, all of ‘Your’ answers to ‘your’ questions can be found through ‘your’ interpretation of the culmination of eloquently expressed thoughts of Bertrand Russell. The quotes alone are thought provoking (and funny), but one must read a significant portion of Russell to gain true insight! http://www.brainyquote.com/quotes/quotes/b/q135704.html http://www.brainyquote.com/quotes/quotes/b/q122262.html Good luck with 'your' quest for ?your truth?!
Sat 01 Mar | Heston Holtmann | Hint.. THE answer has NOTHING to do with 'porches' and EVERYTHING to do with 'schools' http://www.brainyquote.com/quotes/quotes/b/q141826.html
why are u doing this joel? | Fri 28 Feb | ubaid dhiyan
hi, question: joel talks about the need for making it easier for communities to grow and develop. but the article in question itself requires me to sign up to a mailing list, i almost have a phobia for those, even if it is from a sterilized place like joelonsoftware. the point im driving at is, why cant the article, which i really, really wanna read, be posted on the website like the regular ones? will someone please please tell me... my blog - http://xanga.com/ubaid
Fri 28 Feb | Bored Bystander | Joel, I bet you didn't realize that you were creating a chat group for anxious, codependent coders.... LOL
Fri 28 Feb | because it's free so he can do whatever he wants | ubaid, man, just calm down and sign up for the mailing list. you'll never get spammed, and it is really very easy to remove yourself from the list if you never want to be updated again. joel has many readers who post here - have you ever heard anyone complain about joel sending out incessant and annoying mail? we've already discussed the whole subscribers-only issue, and there's really no need to keep going since it's joel's material and he can do with it as he pleases. if you're unhappy with it then cancel your account and stop paying your membership fee (haha!).
Fri 28 Feb | Bored Bystander | But... but.. Joel is DOING WHAT HE WANTS TO DO WITH THIS BOARD! That is OUTRAGEOUS!!!! It became a public trust the nanosecond that someone who isn't with Fog Creek used it to post a message. Joel OWES us, dammit. He really does. He made our lives revolve around this message board. It's UNFAIR I tell you! Property rights are being exercized! :-)
Fri 28 Feb | Brent P. Newhall | LOL! Excellent post, Bored. And agreed. This board -- and all of Joel On Software -- is an experiment. If Joel can't experiment with things like e-mail notifications, JOS has lost its meaning. (Now...will this thread be deleted? Archive now! This thread may be valuable some day!)
Fri 28 Feb | Bored Bystander | Hey, I'm all for co-dependency. It makes for the best reading on a slow day when I don't really want to do the crap I need to do... And I just realized a golden opportunity: 12 step programs for BBS addicts. It's a wide open field.
Fri 28 Feb | Cletus | Quick, somebody get a patent on the 'JoelOnSoftware' board. :)
Sat 01 Mar | Raist3d | I think the original poster has a legitimate question. Why the sudden push to get everyone to the mailing list? - Raist PS: Yes, Joel can do whatever he wants, NO SH*T. Has nothing to do with the question or its legitimacy really.
Sat 01 Mar | Simon Lucy | He's probably doing it (whatever it is), for Fun and Profit.
Sat 01 Mar | ubaid dhiyan | i guess i'm getting taken all out of context here. i had already subscribed to the mailing list before my post. i was just wondering what the idea or reasoning behind the move was, that's all :)
Sat 01 Mar | n | You're not taken out of context, it's just that Joel explained why. The google search for 'heisenberg effects' has a good 1st link.
Sat 01 Mar | ubaid dhiyan | ! my bad.
The experiment | Fri 28 Feb | Just me (Sir to you)
This board is the only thing that ties all of us together. We are all going to get an email, and yet there are going to be strong barriers in place sop as to make discussion on this topic more difficult. The only thing that I can tentatively conclude from this is: - The mailing will be the start of an experiment - Input will be a differentiated mailing. Not all of us will get the same mail (otherwise it could just as well be (temporarily) posted) - Output will be our observable reactions (this board and private communications to FCS) - FCS will be the only ones in a position to carry out the analysis of the experiment - Hopefully they will communicate the results back to us and share their findings.
Fri 28 Feb | | 'This board is the only thing that ties all of us together' Watch the 'all', sunshine.
Fri 28 Feb | Simon Lucy | Well in the usual group dynamics if the cue ball is slammed into the pack of reds a core will tend to glue together. Then they might get picked off one at a time. Of course sliding in the 'don't pass this around' will mean that some will just have to pass it around, whatever 'it' is. I can't imagine anything Joel would want to do I'd care enough to do that about though. What does tend to happen though, if owners of mailing lists, discussion lists etc, change the rules or moderate fiercely, is that parallel groups form. They may die from lack of a real reason to hold together or they might have sufficient impetus to survive. www.wdguide.com is one of those. In lots of ways I quite like the silent but deadly method of moderating, but then I don't care enough about what I write on here to get upset.
Fri 28 Feb | Ged Byrne | I had similar ideas myself. I remember reading that Joel sends out different offer coupons to different people, and then records the take up for analysis. Perhaps something similar is happening here. Whatever's going on, its a long time since I had this much anticipation for an email.
Fri 28 Feb | Just me (Sir to you) | You mean you didn't receive the email yet? Just kidding, Ged :-).
Fri 28 Feb | Mike | Think back to the topic of the email. This board is the experiment. He is watching the opinions of what we 'think' he might do. He is gathering market info with out sending the emails. If you want to fool him. Shut up and quit talking about it.
Fri 28 Feb | sedwo | Oh great. Another 'reality' series, except this time we're the players, with no power to vote anyone off.
Fri 28 Feb | Dimitri. | 'Q: Where is Heisenberg's grave? A: Around here somewhere.' Yes, I find it interesting to see the Heisenberg effects that the email will stir. I also hope that I will get the email, even though my last attempt to registration didn't result in any actual letters received. The only reason I would not publish something on my site is that I would try to avoid making it 'persistent'. In the meaning that if someone (i.e. a client in Joel's case) would later visit the site, I wouldn't like them to be able to see it. I know that even if I would publish it and take it down later (breaking the unwritten rules of web publishing) it could still be availbale in google cash for example. Since many of Joel's articles are quite related to the business side, this kind of precaution may be needed for some sensitive articles. Btw, has it ever happened to you that while writing an email, or an article, or even in a live conversation, you know that it would be way better for the situation not to say what you are about to say, but at the same time, it fits so nice, and it's so smart and funny, that you absolutely _have_ to say it, with total disregard to the effects?
Fri 28 Feb | Just me (Sir to you) | If it is so sensitive why mail it out to 1.000 people? The only thing that makes sense is a none uniform message.
Fri 28 Feb | Nice | 'it could still be availbale in google cash for example' I think that you can put headers in your pages that instruct robots not to work on this page etc. Google bots would respect them, unless you paid them a _lot_ of cash The more I think about this, the sillier it is. There is absolutely no technical reason for publishing by email rather than on the site. Despite/because-of all the copywrite stuff about the email, the text will become as available as it is infamous. (So if it doesn't get republished, then that is because it isn't worth reading.) But it has helped swell the email subscription list. Maybe.
Fri 28 Feb | Just me (Sir to you) | It would of course have been nice to have seen the mail delivered before the close of the European business day.
Fri 28 Feb | Oh please. | Would you like that on a gold platter or a silver platter, sir?
Fri 28 Feb | runtime | Well, if Joel does send out different emails, then I'm sure people will post them here for comparison. Of course, he could then delete those posts, but that is a different on going discussion..
Fri 28 Feb | bot123 | Your the experiment. Your the only real person on this board.
Fri 28 Feb | Chris Tavares | Well, if you want to see if they're different, people could always post MD5 hashes of the email they got. Completely legal even under copyright, since you can't reconstruct the message from the hash, and a quick way to see if they're different.
Fri 28 Feb | anonymous | I feel bad for Joel. Some people are basically treating him as untrustworthy, ignoring his reasons for things, and assuming his life revolves around explaining some damn forum software he once wrote. I expected that other people would have interesting weblogs along similar lines, but this has not happened. Many have interesting insights, but are not willing to put in the effort this requires, or don't have a tolerance of flames. So this increases the audience past which this board was perhaps designed. (Notice how those who know better than Joel never do the work of implementing them on their own blogs, which would ease the load on JoS?) So definitely I'll stop posting, since I'm on enough boards that I am just too likely to be offtopic here, as I have been in the past. Too bad Joel started from a pretty smart guy with a blog to becoming in peoples' eyes a content-shovelling CEO of an insidious corp. Blah.
Fri 28 Feb | anonymous | And there are obvious ways to subvert any countermeasures Joel puts in his emails. So if one's going to be a jerk about Joel's simple wish, he can at least be an intelligent one, and stop completely dissing Joel on his own board as if he wasn't reading.
Fri 28 Feb | Brian Hall | Well of course the obvious thing to point out is that he could have never bothered to write it in the first place. Would you prefer it that way?
Sat 01 Mar | Matt Conrad | I suspect that once the email goes out these preparations will make more sense. I bet there is more going on here than Joel just trying to crank his email subscriber numbers.
how many people to interview | Thu 27 Feb | Samuel
For the people who have experience interviewing programmers, how many do you generally interview for one position? and if you have a coding test how much priority do you give to it in the hiring decision?
Thu 27 Feb | flamebait sr. | You want a few people with various goals. Bonus points if you can have the earlier interviewers give the later interviewers tips on what to double-check in the later interview. Coding problems also reveal personality, perserverence, and style. Don't treat them as a cut-and-dried sort of thing. But they should be at the same level as any other interview section.
Thu 27 Feb | Bella | If you know how to filter a resume, AND you know what you are looking for, you soould be able to do it in 3. People who interview 20 people are idiots who should be fired.
Fri 28 Feb | Practical geezer | 'People who interview 20 people are idiots who should be fired.' My, my, people management not your cup o' tea then? Say after me, 'People who interview 20 people need more guidance.' There, not even that difficult, is it?
Fri 28 Feb | Dino | Bella, sometimes candidates cannot support their own resumes in an interview. I found that especially at the junior/intermediate level. 2 -3 years ago, it would take me about 100 - 300 resumes and about 5-10 interviews to find the right person. If the first interviewee was really good and we had nothing schedulled for next day the candidate would get an offer by the end of the day. Else we would send him an offer by the end of next day. Secondly, the number of interviews depends on the head hunters the company uses. We used about 3-5 agents at time but for about 2 years we had one agent that basically brought 8 people in in 8 interviews. She did an excellent job. Also, a small company cannot afford bad people. It really needs people that can solve problems not create some instead. The end result was we were a good team of nice people and we had lots of fun working together. Opposite, large companies can afford larger people turnaround so they would hire anybody who went through a decent interview. Cheers, Dino
Fri 28 Feb | Anonymous Coward | 'People who interview 20 people are idiots who should be fired.' Done much hiring in the last 2 years? You'd be absolutely amazed at the number of people who exagerate -- no -- who downright, flat out, no shame, LIE on their resumes. In this job market *everybody* is inflating both their skill sets and their experience. Most of the time you can't tell that from a resume. A resume can say anything the author wants it to say, and you'll be none the wiser until you actually speak with the person. I'd say we average between 15 and 20 'interviews' before we actually make a decision. Most of those are short phone based interviews that we use as a 'bozo-filter' to filter out the above mentioned liars. On average probably 4 to 6 actually get called in for a real interview, after they've passed the 'bozo-filter'. If you can pick three resumes from a pile of 400 (which is typical these days) and even *one* turns out to be worth anything, then I'd say you need to switch to corporate HR or recruiting -- you'll make a fortune.
Fri 28 Feb | Samuel | If you are actually interviewing face to face how to tell if the person is a bozo or lier? Have them right code?
Fri 28 Feb | Brent P. Newhall | Interview until you've found the right person for the job, whether that takes one interview or a hundred. (At least, that's been my experience.)
Fri 28 Feb | Just me (Sir to you) | You can't keep looking for the perfect candidate. He might never show up and in the mean time your project is accumulating delays. Keep the search phase short but very intensive. Interview as many as you can afford. Go with the best candidate in the crop.
Fri 28 Feb | Go Linux Go! | ' Interview as many as you can afford. Go with the best candidate in the crop' This sounds a lot like the 'we don't have time to do a design' argument. As they say, 'if you don't have time to do it right, when will you have time to do it again?' Which does more damage? A delay in hiring the right person or hiring the wrong person and then watching them drag the entire team down? If you're looking to hire someone long term to be a part of a solid team then take the time to find the right person. Period. And Bella...oh nevermind...it's not even worth it.
Fri 28 Feb | Patrick Escarcega | The best practice I have used for hiring is: 1: post job 2: wait a week while resumes come in 3: identify people you're interested in and email a short non-technical questionnaire. 4: Pick 10-15 candidates from the responses, and technically vet them (usually a 10-30 min interview in person or on phone). 5: Interview about 4 individuals in detail
Fri 28 Feb | Bored Bystander | Many of us on the other side of the interview process have had our time wasted and our persons abused and insulted by prima donnas creating an image of a 'L33T' team too good for any human candidate, so they have cattle calls of candidates where nobody measures up and there is a sequence of uselessly graduated multiple interviews. What is called 'selectivity' often appears to be nothing more than an ego trip for the interviewers. Sometimes, interviewing as a candidate feels a lot like a frat hazing. The point is, there is a lot of merit in what Bella is saying. When I see companies interviewing a score of people I think that they basically don't know what they want. And remember, it's not a beauty contest. The candidate as much has to judge your operation as you have to judge whether they're for real. It's possible that a company brings in a candidate that is highly experienced, productive and serious, and expects a modicum of respect, but is treated like a pledge to 'Delta House' during the interview. The compatibility has to be mutual, and there's a lot of people on the street that are 'slumming' with companies that they really are better than, in order to make ends meet. FWIW. Use the phone to screen people. The people you physically bring in should practically be hireable on the spot but just need a more intensive verification of their personality and fit to the environment.
Fri 28 Feb | Bella | > Use the phone to screen people. I agree. As a job seeker, I would sometimes request this as a 1st interview to save time and effort. Nothing to lose, if they liked you, and you liked them, THEN you could come in. As a hiring mgr, however, phone interview doesn't save you anything, b/c they're the ones coming to you. I guess you can do some interviewing off hours, OTOH.
Fri 28 Feb | Bella | Resumes that sport the 'movie rental app' bullshit are still as transparent as ever. If you have resume filtering skills, you should be able to see thru most lies, or at least, know if the guy is what you want. (Experience in the same industry, etc.) If you are inviting people in who turn out to be liars, you are not reading B/W THE LINES. For your typical mid-level coder, I can practically say 'hire this guy site unseen' and it will work out. Of course, it may take 100 resumes before I come across one that is such a clear fit. but the point is, you should be able to see a dead-in fit a mile away, and only being those in.
Sat 01 Mar | Brent P. Newhall | In my experience, any cost overruns experience while waiting for the right person are more than worthwhile, compared to just hiring somebody who isn't best for the job. OTOH, I'm not sure what I think about hiring people for a specific job anyway. I'd rather have a team of great people who don't exactly fit specific perceived 'needs' than a bunch of decent employees who match a job description perfectly.
If not files & directories, then what? | Thu 27 Feb | Nat Ersoz
In a prior post, someone mentioned that they didnt like files & direcctories. If not files and directories, what would be the alternative? (Hopefully, not a super-registry).
Thu 27 Feb | R Chevallier | Idea:a dimensionnal model Ie: you get your object (data) thru querying in more than 1 dimension. It's just an extension of the actual model where there is a single dimension: the directory hierarchy Imagine a file belonging a the same time to multiple hierarchies, and some are automatically created from metadata (ex: creator, version, owner etc...) and other maybe done thru content parsing applied to ontologies. That would be fun
Thu 27 Feb | Nice | I am always confused by this kind of discussion. I can't see the fundemental difference between a registry and a filesystem. They are both hierarchical information stores. Some people think that you can do away with the hierarchy and find things by content or tags. Personally I organise my tasks by directory, and the structure keeps my work day structured. And not all registries are as problematic as the windows one - google skyos.
Thu 27 Feb | Patrik | Maybe a DB driven filesystem? :) ls or dir becomes SELECT FILE FROM FILESYSTEM WHERE FILENAME ='THISFILE' This has already been done. I think VMS had a filesystem that was really a relational database. I might be wrong on this one though.
Thu 27 Feb | Ian Stallings | One of the next versions of windows will feature a sql based file system supposedly. Pretty interesting if it ever goes through. It's been rumored for the 'next windows release' for the past 5 years.
Thu 27 Feb | Georg Cantor | Sets, subsets, and elements. Explicitly defined and implicitly defined via properties. Just like math class :P
Thu 27 Feb | Joel Spolsky | It's BeOS that had the file system that was a relational database. Every file could have arbitrary extra columns. Before you get all esoteric, usability research has constantly shown that most users don't understand folders within folders. Outlines and hierarchies are extremely logical to programmers but are not well grasped by the general public. If I had a buck for every programmer that got in trouble thinking user's love outlining and hierarchies...
Thu 27 Feb | Patrik | Joel, >most users don't understand folders within folders. Are there any usability research of how the general public understands a DB-driven filesystem? I mean, in such a filesystem you could do away with all hierarchies and just find your stuff using personal meaningful tags that you slap on the files. Think Post-It notes. The general public which makes up the female parts of my family would love the Post-IT-filesystem ;-)
Thu 27 Feb | B# | 'If I had a buck for every programmer that got in trouble thinking user's love outlining and hierarchies... ' Are you trying to tell us you don't? And while were on the topic... What is the most efficient (prevalent?) data structure or method used to represent hierarchical data? Root >> Filing Cabinets >> Folders >> Files The sinus meds have kicked in!
Thu 27 Feb | Dino | The file/directory structure uses a hierarchical model (tree). If links are allowed, then the underlying model is network (graph). Simple OSs would use even less than a tree, e.g. a list - a single root directory with files inside. OO and relational fall into the graph like category too. Alternatively we can use maps to build a library like file system: repository + catalog mappings. I guess the broader category here is 'hashing/mapping'. Associative networks are an extreme case of mappings, but the way they opperate makes them unsuitable OS like applications (just think some have non-deterministic behavior). Cheers Dino
Thu 27 Feb | Nat Ersoz | OK, simple example. I'm a programmer (common ground, right?), on a not-too-complex project In today's world, I have a group of C language files + headers, in a directory. There likely are some common project headers in a common directory somewhere. These are part of a larger project where my working directory is one level deep from the top level Makefile. Make is merely a synonym for 'dependency based rule thing'. Top +----- Common Headers +----- My working dir +----- Others... So, I'm a user. How does this simplify this user's life? Perhaps its too simple, so it doesn't? Anyhow, need some illustrative examples.
Thu 27 Feb | Karl | Really rich metadata. Filesize etc. could still be there as metadata, but also information about which category of data this file contains, which project it is associated with, who wrote it etc. etc. (There are probably better examples of metadata for files, I haven't thought much about this yet.). In other words, the 'filesystem' would be organized in terms of metadata, much more like a human's memory I suppose. The metadata could be automatically generated or manually entered by someone. I suppose a directory hierarchy could be implemented as metadata as well, so if you wanted directories you'd be free to use them. This would work well with a database-based filesystem as well I suppose. I'm just thinking out loud. =)
Thu 27 Feb | Brian B | A recent article on osnews.com touched on this topic and generated some interesting discussion as well. http://www.osnews.com/story.php?news_id=2762
Thu 27 Feb | Prakash S | DataCubes :-)
Thu 27 Feb | Passater | BeOS was not in any way relational. It just allowed extended attributes. I think before trying to come up with new design of file systems the problems with the current ones should be identified. Until then it is a pure speculation which will not lead to any good design. Personally I see nothing wrong with hierachical directories. Btw, if someone is confused by subfolders he might very well not use them.
Thu 27 Feb | Bill Tomlinson | What I'm hoping these future files systems do is build in flexibility to handle all the things that we might want in the future but can't think of now. What I mean by this is rather than saying: 'here's how we're going to organize files', instead build a system that makes it easy to overlay organizational structures on top of the files themselves. Then, if you want to look at your files in hierarchical folders you use the 'folder viewer'. If you want to look at your files as filtered attributes, use the 'attribute viewer'. If you want to look at your files as a related web of items, use the 'relationship viewer'. Etc, etc. And make it easy for programmers to create new 'viewers' (with flexible meta and meta-meta-data and lots of API hooks). What I'm getting at is that filesystem programmers should probably not try to guess what the next big thing will/should be and instead make a system that easily supports the innovations of the future. I'd like to see the filesystem of the future clearly separated between the underlying storage of data and meta-data and the views of that storage. Did that explaination make sense?
Thu 27 Feb | Philip Janus | I'm 95% happy with the way file storage works now. The other 5% is that I want symlinks, dammit! Philo
Thu 27 Feb | Sammy | Bill, I think that makes absolute sense and I wonder what innovations were not available because current filesystems weren't powerful enough to support elegant abstractions.
Thu 27 Feb | Georg Cantor | Bill makes an excellent point. There are two problems here. The first one is the internal structure of the system and the other is how this structure is presented to users/client systems. Using a set or relational model as the backbone of the system is useful internally, but definitely not something I'd expose raw to any but the most sophisticated of users.
Thu 27 Feb | Georg Cantor | Actually, I think one my biggest gripes about current file systems is that the presentation is basically identical to the implementation. They are tightly bound together and you have to jump through hoops to change either one independently of the other.
Thu 27 Feb | anon | Agreed with Karl about really rich metadata. So if a file is mis-filed you can still find it by doing a google-like search on it. Or if you had a file 3 years ago and all you can remember was it started with xyz. Etc.
Thu 27 Feb | Nat Ersoz | check it out: find / -type f -exec grep -lH xyz {} \; If its ascii, it'll find it. Just need a unicode grep, and I'm there.
Thu 27 Feb | mb | Yes, search is key. Which is quicker: using google to find a file in the universe of the internet, or using your filesystem to find a file on your local constrained machine? You can store all your files in Outlook today. (One of the many things it is designed to do.) Outlook has categories, sort by date/length/keyword. And by subject. And it has this weird journal thing which you have to remember to turn off (well, it's off by default now) which lets you search by when you looked at a file, not just when it was last saved. What I find interesting is that I sometimes use hierarchy (I have folders for each project and move mail there), but often resort to flat views (search sent or deleted items). This is just for mail, I never put documents there, but frankly most of my 'documents' are either mail messages or pointed to by mail messages.
Thu 27 Feb | Grep++ | What you've got there is basically a grep-based query language. A relational sort of file system would have exactly that sort of thing available, but hopefully much more powerful, because more (perhaps arbitrary) metadata would be available. A file system that supported inter-file relationships explicitly would be more powerful still.
Thu 27 Feb | satya | One problem with 'metadata' filesystem is how to specify the metadata. For example, if the data is organized by say, the Author name, then someone has to *first* provide that value. Which means that when a file is being saved, a whole bunch of extra information has to be provided, while today, with file system, you just select the directory (most probably the same one as before) and give a name to the file and you are done. Laziness always wins :-) For example, all office documents today already support a rich set of metadata (File->Properties), but how often do we use that ?
Thu 27 Feb | Doug Withau | I am glad others mentioned it; the BeOS file system was (is?) years ahead. Everything the hyped new MS file system will do I had while running BeOS. The metadata on every file was great. The files knew what program created them, when, their size, and anything else you wanted to throw in. There was no idiot mapping of files to programs using three character extensions. In fact the address book was a directory with each address stored as metadata and a 0 length file. The BeOS file system used 64 bit offsets, so files could be over a petabyte. It was also a journaling file system. That means you did not have to wait through a file system check if you kicked the plug out of the wall. It was actually hard to loose data. There was a sort of file manager that could index through all of the metadata. Doing a find took microseconds, no need for animations to tell users the computer is busy. I had all this in 1997/98 and I miss it.
Thu 27 Feb | Wayne | According to the self proclaimed 'genius' David Gelernter, TIME is the most basic dimension, therefore users will relate better to the computer if all of there stuff is organized by a stream of time. See more here: http://www.scopeware.com/ Personally, I hate it. I like files and folders. Screw the idiots that can't figure it out, I'm not catering to stupid people, I do programming for my own enjoyment.
Thu 27 Feb | Brent P. Newhall | Here are a few actual examples of using a BeOS-like database-driven file system. BeOS works very much like this (I've simplified the explanation a bit for clarity). I have all my MP3 files tagged and sitting in various folders on my hard drives. I want to listen to all my techno music (which may be actually sitting in the Anime, Fun Background Music, and other folders). I right-click on the desktop and select 'New Query'. A query window pops up. I make the following selections: File Type: mp3 Field: 'Genre' = 'techno' When I click the OK button, a new window pops up displaying all the MP3 files that match this crietria. Because all these files are stored as a database, the list is completely populated within several seconds. I save this query, naming it 'Techno Music'. I then remember that a friend e-mailed me some time in the past week with a request for help. I create another new query, that looks like this: File Type: e-mail Field1: 'From' contains 'george@stine', AND Field2: 'Date' is greater than 'one week ago' Boom; I see a list of all the e-mails I've received from my friend in the past week. The OS comes with a little daemon you can set up to download e-mail automatically in the background. I've set up a simple query that displays all the e-mail received in the past three days. I leave that open on my desktop, and I now have a complete e-mail solution. Double-clicking on any e-mail opens the e-mail, obvoiusly. If I accidentally close my Techno Music query window, I can always right-click on the desktop, select 'Saved Queries' and find it in the list.
Thu 27 Feb | The DA | Just to play devil's advocate for a second...what happens when the file you're looking for wasn't properly categorized? Let's say one day I want to throw a note about a project, write it up in notepad, and save it as a readme file in the project directory. How would that work in a database scenario? I might have a few hundred readme's lying on my harddrive. I do have a couple solutions in mind, but I'm curious how this BeOS would handle something like that.
Thu 27 Feb | Dino | Karl, The human memory is an associative one. Information is stored in the weights and thresholds of neural networks in ways we don't really understand or at least predict. As a plus, the brain is capable of changing semantics of symbols in the process of thinking - a very important process. For example when we read 'APPLE' after recognizing the letters A P L E and putting the together as APPLE our mind can replace the symbol with the apple as a concept - what an apple means to each one of us. Point is, this way of storing information is convenient only for 'brain like' computers and completely useless for 'computer like' computers. Maybe quantum computers will use this sort of memories, however a quantum database (and querying on such a database) quite different from our current database technologies. Cheers Dino
Thu 27 Feb | Stephen Jones | >>>> Before you get all esoteric, usability research has constantly shown that most users don't understand folders within folders. Outlines and hierarchies are extremely logical to programmers but are not well grasped by the general public.<<<<<< Alan Cooper made much of this in 'The lLunatics are Running the Asylum'. His example was of Mary leaving her computer for lunch with the 'My Documents' folder open. The syssadmin came round and did some routine mainenance and left the computer with the explorer window open at the C drive. Mary returned and panicked to find her documents gone. I've seen users (on a multi-user machine) actually end up with four My Documents folders and be overjoyed to find that they actually still had everything in place - normally in about three different versions. I discussed this once with one of the lecturers who do the 'Into to Computers' course at our technical college. We agreed that we could throw away the whole course but that one thing that really needed teaching was the concept of files and directories because few picked it up intuitively.
Thu 27 Feb | realist | All the above comments indicate that you techies have no role to play in any meaningful debate about the way forward.
Thu 27 Feb | Patrik | Realist, Taken by your contribution to this discussion, its obvious you do.
Thu 27 Feb | Nat Ersoz | MSFT has considerably poisoned the files/directories paradigm, both for developers and users: 1. Adopting backslash '\' instead of the historic forward slash '/' for directory delimiters. Very nice. The nice thing: it affects MSFT more than anyone else. 2. Changing the 'My Documents' location (ie the default location of a Word document) with each new version of Windows and sometimes Office. Its here, its there. Now go try to find 'My Documents' from the command line. Is it really the file/directory paradigm that is broken, or is it how its being used?
Thu 27 Feb | Adrian Gilby | Brent, thanks for your description of searching for things using BeOS. It's a real shame Windows doesn't do this as well. What happens if you want to classify music as belonging to multiple genres? For instance, 'Ghost In The Shell' might be 'Anime' and 'Techno'. Fatboy Slim might come under 'Norman Cook' and 'Dance' whereas Beats International might be under 'Norman Cook' and 'Funk'. Apologies if you don't recognise the music, but I'm sure you get the idea. I'm assuming that the database-driven filesystem is designed to solve just this sort of problem. But (and this is the main question) how do you move files between computers / over a network? Everyone will have a different way of categorising, therefore different metadata. How do you keep your classifications? How do you ensure that someone else's classification system doesn't have tags that clash with yours? One solution would be to have agreed metadata schemes for various types of structure (MP3 collection, sourcecode, etc). But then doesn't that become as restricting as the current filesystem designs?
Thu 27 Feb | Brian | >> Adopting backslash '\' instead of the historic forward slash '/' for directory delimiters. Very nice. The nice thing: it affects MSFT more than anyone else. That's such a non-issue... what difference does it make? And the win32 api lets you use either forward or back slashes.
Thu 27 Feb | realist | 'Folders', 'Directories', 'Files' are just words for an abstraction. 1000 years from now, assuming the existance of the human race, the same abstraction will be in place, it might be called something different, but it will be the same.
Thu 27 Feb | A Software Build Guy | Nat, The Backslash is a historic relic, From CPM (DOS is not UNIX based but CPM based), Also Note that the Internal Win32 Filesystem APIs can and do use the forward slash.
Thu 27 Feb | A Software Build Guy | 'They can and use the forward slash do delimit directories' is my complete statement
Thu 27 Feb | Chicken Sandwich | Nat, I don't know that the file/directory approach is broken. To me, it's just a little limiting. The file system presents a single major view of your information, but it would be nice to be able to maintain several views at once - several logical organizations built on top of a single physical data store. All the other stuff that has been mentioned is nice too (powerful queries, extensible metadata, etc), but for me it would be a huge win to even be able to construct several hierarchies without having to copy files. One thing that really bugs me, though, is using what essentially amounts to an address in places where one would normally want a name/identifier. What is commonly called a filename is actually a file address. If the file moves, that filename no longer represents the file. In some cases, this is a good thing, but there are many cases where it is not correct behavior. This would be like everyone referring to you by your street address instead of your name. It would be nice if each file had a permanent, unique identifier associated with it so that you could access the file no matter where it went. URLs exhibit the same problem, which is one reason people have to employ all the whacky mapping schemes or put real identifiers into the URL so they can be parsed out later.
Fri 28 Feb | mb | Interesting that BeOS is mentioned here but not the Mac. HFS had folders, but it also had metadata (filetype != filename, and a limited # of other attributes). Files were numbered (I think, I don't know the details), not named. So you could move or rename a file and many things still worked (including aliases). In OS X they broke much of this, since it's really Unix. Funny, the filesystem UI in OS X is much harder for me to use than either modern versions of Windows or ten year old versions of MacOS.
Fri 28 Feb | MattF | There's a good paper on this topic at http://www.reiserfs.org/whitepaper.html
Fri 28 Feb | Nice | \ vs / is a non-event except those poor people like me who use the commandline occasionally: * Try tab-complete with / * Try to convince some apps to tell the difference between / meaning root (of drive, after all, this is windows) instead of denoting a command switch (what happened to - and --?) If you are swapping machines constantly, the differences between unixes isn't very pronounced. Minor things. But the difference between windows and unix is crazy. I now have lots of one-line batchfiles to execute the dos equiv when I type unix commands like 'ls'. Back to database filesystems: ReiserFS is well worth a look. As is the AFS used by AtheOS. As is this discussion here: http://www.theregister.co.uk/content/4/24648.html
Fri 28 Feb | Just me (Sir to you) | The file/folders hierarchy was good for small sets of simple things, but it breaks down quite quickly. As others have said before, the limitation of having to define a single taxonomy for classifying all your information is inconvenient to put it mildly. For most users 'Start/Search' and 'Start/Documents' have long since replaced the manual browsing down the folders in Explorer. For received files, we just leave them in Outlook since it is far more flexible to find them that way. The file system as a DB is just a way of making these methods of access more universal. You look for that market report that contains the 2000 figures for the New York branch that edited by John and forwarded by you to the regional directors. We can imagine many user interfaces to this, but one could just be everything we have now, only “search files or folders” will be very much more powerful integrating all separate search facilities you have now in the different applications.
Fri 28 Feb | Just me (Sir to you) | Nice, in the light of research that shows most users fail to understand the folder within folder concept, the direction of the slash on the commandline certainly seems to qualify as a non-issue.
Fri 28 Feb | Ged Byrne | So far everybody has been concentrating on the implementation details. Can anybody think of what METAPHOR could replace folders and files? I think that people think spatially. Many effective memory mapping techniques involve placing items spatially. This is the problem with computer interfaces, they all exist on a little computer screen crowded on top of each other. It's all recursive, with things nested inside other things. For most users its just to confusing. I think the idea of different 'rooms' for activities is good. Within the room you have work surfaces and tools. There was a lot of ideas like this when VR was all the rage. I think this is the way forward for users. Obviously developers would demand a completely different view of everything.
Fri 28 Feb | Chicken Sandwich | I'd like to see a natural language interface. I don't usually want to view all my files and browse all over the place when I interact with the file system. I don't even really care where the stuff gets stored. It would be nice to have a list of recently used files and then a natural language query engine that could go retrieve stuff that I specify in my query. 'Find all the files used in version 3 of the gigatron project.' Even better if the system could interact with me to refine the search and perhaps learn some of my vocabulary. Someday :)
Fri 28 Feb | Albert D. Kallal | There are systems that don’t have a traditional folder (tree like structure), and you can still organize the files and data very well indeed. A great example of this is the Pick operating system. I have often mentioned this database system on this BBS. While the pick system now does run on Linux, Unix,, and also runs on windows NT, it for many years ran as a native OS. That os was NOT tree/folder based. In fact, any time you listed some files, you were in fact using the query processor to do so. There is no tree structure in that system. This course meant that you could use the same selection commands to select source code files and copy them as you could with records. So, for example, to copy some records between to databases you could go Select PersonalNames where City = “Calgary” >15 items selected copy PersonalNames (to: OldNames >15 records copied. For source code, then above same commands could be used, but source code in Pick DID NOT have field attributes defined (you could not define additional fields. The reason is that source code was in fact a record in a database like everything else. (the first line of code would be consider field1, etc). When you compiled the code (p-code it used), the compiled code was actually stored in the dictionary (field) def file. The system did not have a tree structured dir. However, it did go one level deep for files. As it turns out, that one level deep was rather just nice. A listfiles (equivalent of a dir in windows) from that system would look like: (I am actually running pick as I type this). Listfiles You get: http://www.attcanada.net/~kallal.msn/test/listf.gif I can also drill that ONE level down to any of the above files. So to list the HotelRates File. Listfiles dict HotelRates You get: http://www.attcanada.net/~kallal.msn/test/listfdict.gif That gives me the files for that database. Note that 3 items out 13 are displayed. The other items in that database are field defs. We can query that data to get those with: Listdict dict hotelrates You get: http://www.attcanada.net/~kallal.msn/test/ld.gif Note that every single one of the commands I am typing in are actually a shell command to a query processor. I could list/show what each command above actually gets translated into, but that is not needed. And, finally, here is a actually query on the data table: List hotelrates nameOfType You Get: http://www.attcanada.net/~kallal.msn/test/Ilist.gif The above shows just the first two records. Note that only TWO records are displayed, but each is multi-valued. In fact, the roomtype is actually a lookup join to lookup up table called roomtypes. Note how the one record has several values for each field. Thus, a very neat, and very different system. It is very much like going to a different planet. Each record in the system can in fact be a whole table. Hence, the multi-value, or multi-dimensional system it is so called. The tables can go ONLY one more dimension deep here. However, most developers avoid the 3rd dimension in pick (or jBase, or IBM’s UniVerse database…since those databses are all pick compatible, and the above commands will work in all of them). I think it is quite telling that we tend to avoid the 3rd dimension. Having developed software in a non tree like system is certainly a treat. I wish all of you could experience development in a non tree type system at least once in your computing carrier. I think it rounds out ones computing viewpoint, and gives one a different view on how to organize data and files. It is kind like a trip to Europe! It has been a great experience for me. However, I have to say, that most systems to day do present data as a tree type system, and that is totally just fine to me. Even if the data/files are all stored in a database, it will still most likely be presented to the user as tree like structure to browse. That seems to work the best right now. Remember, lets not confuse a general file search ability in os (which all systems should have), with the idea of a tree like dir structure. In searching, we don’t care about that tree structure. (so, BeOs, or pick is ok);. However, for ORGANIZING our own files, a tree structure is most certainly welcome. Good Searching is mutually exclusive concept from that of a tree structured dir being useful. You can have one, without the other. While new users have trouble with tree like structures, once learned, they use a tree structure very well indeed. Lets not shoot the trees because we don’t have good search abilities for our files. Trees are a great way to organize our files. Albert D. Kallal Edmonton, Alberta Canada Kallal@msn.com
Fri 28 Feb | Just me (Sir to you) | Ged, MS has hinted at this VR style interface before. Technically it is certainly feasible on todays machines, and I believe MSR has had some stuff on this. It is a nice addition to browsing, but it will not be a replacement for the unified searching that I think would be the most significant advance. To call that just an implementation does not do it justice. Think of it as the wizardly secratary sitting in your VR office world that will find all the stuff for you on the basis of your descriptions of any kind of attribute, content , relation or usage pattern or what ever else you fancy. Would you bother cleaning up your desk if it stuff was never in the way and retrieval was just a matter of 'ask and ye shall find'?
Fri 28 Feb | Stephen Jones | How well are all the non-directory file systems going to work in a multiple-user environment?
Fri 28 Feb | Practical geezer | 'How well are all the non-directory file systems going to work in a multiple-user environment?' There is no need not to have traditional file systems, as long as they are for the computer, not the human. The computer can easily manage all the intricacies of the file system. But, for retrieval, humans need something that more closely fits our mental models. Multiple-user issues are simply one more factor to be taken into consideration while designing a better human experience.
Fri 28 Feb | Brent P. Newhall | 'What happens if a file isn't categorized?' Well, it already has some metadata applied to it -- its name, its date of creation, its file type, etc. You can always search for all files with 'README' in the name field, with a file type of 'plain text'. Incidentally, BeOS stores the file's type as an attribute, using the MIME type standard. So, when you save a new file in a text editor, the editor will set the new file's type to 'text/plain'. This makes searching for files very easy. Also, BeOS assigns plain English labels to each MIME type, so for example, instead of searching for 'audio/x-mpeg', you can search for 'MP3 File'. 'What happens if you want to classify music in multiple categories?' Here's my solution; I don't know if it's the best: Let's say I have a techno piece from the anime series 'serial experiments lain.' I set its Genre attribute to 'techo,anime'. My query for techno music searches for all MP3 files where the Genre *includes* the text 'techno'. 'How do you resolve clashes when transferring files across a network?' In BeOS, if you're copying a file between BeOS systems, the attributes remain. If you're transferring to a non-BeOS system, the attributes are lost. I don't know of any simple solution to this. A standard would have to be written. IMHO, attributes are worth having even if they're not cross-platform. Incidentally, if you're interested in a modern alternative OS that has a BeOS-like file system, try Syllable (http://syllable.sourceforge.net/). I understand that ReiserFS for Linux has this capability, but I'm not familiar with its status.
Fri 28 Feb | valraven | What would be wrong with a single flat directory with a search engine? You could of course add categeries, like meta tags in html. These categories could be hierarchical.
Fri 28 Feb | Stephen Jones | ---'What would be wrong with a single flat directory with a search engine?'=== The nuimber of times you would want to save a file with the same name as another for one thing. At least with separate directories you can do that. Also, performance problems. The register article referred to further up which deals with the BeOS refers to that.
Fri 28 Feb | Brent P. Newhall | Stephen Jones raises a good point. Having no directories creates its own problems. One solution is to use both directories and queries; that's what BeOS does.
Fri 28 Feb | Adrian Gilby | Brent, I'm not surprised that the extended attributes are lost when copying to a different OS. I was more interested in how the metadata is 'merged' when copying between BeOS machines. For instance, my definition of 'genre' for MP3 files might be completely different to your definition. What happens when we transfer MP3 files to one another? MP3s are perhaps a trivial example but I'm sure there would be other more serious areas where problems would occur. What I'm trying to get across is that there's no accepted standard for how you classify your files, and therefore everyone's classification systems will be incompatible. Database-like 'any attributes you like' file storage surely needs to have some imposed metadata structure to avoid this problem?
Sat 01 Mar | Albert D. Kallal | ---'What would be wrong with a single flat directory with a search engine?'=== >>The nuimber of times you would want to save a file with the same name as another for one thing. At least with separate directories you can do that. No, there is no problem entering a person with the same name into a database twice. You folks are still thinking in terms of file names, and not a database driven system. If you have two names the same, be it a file name, or a persons name, a database handles this no problem. In fact, for tracking revisions, or a nested un-do/go back document system it can’t be beat. Why start numbering 10 revisions of the same document by tagging on a number at the end? Why number it Sales1, Sales2, Sales3 etc?? Why not just the documents with the SAME NAME all in order by last edited? A database system is MUCH BETTER in this regards. >>Also, performance problems. Well, for large numbers of data sets and files, a database is MUCH faster then searching a stupid dir based system. Just like a spreadsheet is fine for 5 to 10,000 items, after that a database runs absolute circles around a spreadsheet. There is no contest. In fact, most of the new high performance file systems are indexed, and are really a database now anyway. Throwing in a engine is natural progression of this. We can use a database now because we don’t have the restrictions on memory and resources that most “dir” based systems were developed under. A database is no good when you have a 16K Apple II, or a trs80 system. When you give that database engine enough memory and processing, it begins to easily win hands down as compared to a simple file based dir system on disk. With the average pc starting to push 100,000 files, a database engine is the ONLY WAY to go. The folks in Redmond have a very good grasp of this problem. The DIRection they are going make total sense. Do the other OS venders realize this? Does Sun see this? Will the open source community be caught of guard on this issue also? Albert D. Kallal Edmonton, Alberta Canada kallal@msn.com
Sat 01 Mar | Brent P. Newhall | With BeOS, lots of attributes are defined by the OS automatically. All MP3 files have attributes for Artist, Album, Title, Track, Year, Comment, Genre, Rating, etc. If you create or download a new MP3 file, those attributes are created on that file automatically (even if they're all blank to begin with). If I add an attribute named 'My Little Attriubte' to a file, I can copy it to other machines and that attribute will stay on the file and the OS on the other machine will see it and be able to manipulate it.
Final Builder PRO vs. Visual Build Professional? | Fri 21 Feb | Javier Jarava
Hi! In the place Im working at, were trying to move bit by bit from a cowboy / macho I_need-No-cvs development style to something a little more dull but (hopefully) more productive. We are past the get a SCM system stage, and wed like to -in gradual stages; we have to keep on developing the products- get some other software engineering best practices on board. We are looking into doing automated periodic builds. The product itself is hugely complicated (several Platforms - windows 9x, 2000, XP-, server and client components, and a few low level drivers just to make things fun), so making sure everything compiles properly, etc can be a plus. Up to now there were a few hand-rolled scripts for doing this, but weve started to look into automating (and easing) the process. From what Ive been able to read here, the two contenders for the place are Visual Build Pro and Final Builder. Ive shown Visual Build Pro to the lead developer today, and he seems to like it (love it would be a better term, probably ;) But before comitting ourselves (ie, $pending money), Id like to have your input on the strong and weak points of these tools (or any other you care to mention). Wed also like to integrate it with our installer generation routines (currently the installers are hand-generated using Installshield), so ideas for a better integration with Installshiled would be more than welcome. Thanks a lot.
Tue 25 Feb | Vincent Parrett(Atozed Software) | As the author of FinalBuilder I'd like to respond to Joe Paradise if I may : 1) I think you are mistaking variables for Macros. FinalBuilder variables are just that, they are set to an initial value at the start of the build and then can be modified during the build. 2) This is as designed, it makes it possible to pass values between the master script and the included script. There is a warning about this in the help file topic for the Include Project action. 3) There is a simple work around for this... keep a master copy to operate on at design time and dynamically set the path to the actual solution file at build time using either variables or script 4) Yes, we have bugs, just like every other bit of software written by humans. None of the bugs you reported were so serious as to make the product unusable. As for FinalBuilder being written for Delphi, that is simply not true. FinalBuilder was designed and developed as a generic build tool from the start, with initial support for Delphi and VB6, and as time has allowed we have added support for other products such as VS.NET (which was released after FinalBuilder) and Java. All of these additions to FinalBuilder have been made available as free updates. We also provide frequent updates with timely fixes to any bugs reported. FWIW, we have many users happily using FinalBuilder with VS.NET, they obviously do not find that the product is 'poorly architected' as seem to think. Regards Vincent Parrett Atozed Software
Tue 25 Feb | Tate | I'd put in my vote for FinalBuilder too - i've been using it for a long time now on heaps of projects and it's been awsome; infact 'invaluable' would be the word :) I did look at VisualBuild but much preferred the flexibilty of FinalBuilder (the excellent scripting support really lets you do just about anything). The other thing about FB which helped swayed me was the the support for 3rd party products is more complete - AtoZed seem to go out of their way to fully support each product. HTH, .t8
Tue 25 Feb | Chad Z. Hower | We have produced some VERY VERY complicated scripts with FinalBuilder. The scripts we automated used to take us 1+ days by hand, and often had mistakes during the process. With FinalBuilder our build process is easy and reliable. The biggest script we have consists of over 100 actions. At most we have ever found is minor bugs and they were fixed very quickly. Compared to our experience with the largest software company in the world (Microsoft) our experience has been very very good. In fact, as I remember many of the bugs were not in FB, but the tools it was calling and FB simply had to make work arounds.
Sat 01 Mar | Joe Paradise | Vincent, 1) No, I'm not confusing macros and variables. The scripts I wrote use 'project variables'. And they behave as I described. Variables composed of other variables are not evaluated properly if the sub-variable value is changed during the run. 2) Passing values between scripts is a nice feature. Having a value NOT modified by another script would also be nice. 3) Keep a master copy? And if my project file changes substantially, do I have to remember to update this copy? This 'workaround' strikes me as a hack. 4) None of the bugs were serious? The fact that FB doesn't stop when a VS.NET build fails is very serious. That bug alone cost me several hours when code changes to a support lib weren't compiled as expected. I'm currently maintaining build scripts for 10 different libraries. My goal was to define basic steps each VB.NET build script would follow. Specifics of each project, like the project name or code path, would be abstracted out to variables. That way, when a new project came along, any script would act as a template for the new script. Just change a few variables and you're set. This is possible with FinalBuilder, but I had to do A LOT of work to make sure the variables (especially compound ones) were correct and weren't changed when I ran a dependent script. Just my experiences with the product, YMMV.
Why are you still employed? | Fri 21 Feb | Li-fan Chen
I am sure people have asked this before many times. So heres the question again: What kind of company are you at and why are they (still?) making money? What is your feeling about the growth possibilities? What is it that they do or how they do it that allows them to survive the dot com (and keep you around)... Do you think they have a really good idea? Why? And how do you plan to take advantage or contribute a big part of that?
Tue 25 Feb | Norrick | I just got laid off. :(
Tue 25 Feb | KenB | After being laid off at the end of 2001 it took me awhile to find something (10 Months). The job I currently have just had layoffs (I survived), my project (VB.net & J2EE WebLogic) was transferred to Denver and now I am told my group will be working on legacy VB 6. So I put my resume out and I am inteviewing for a .net position which will be written from scratch for a financial company. Although the market in general is bad, there still are opportunities out there. I am in NY btw...
Fri 28 Feb | Ichabod Crane | I survived because I'm able to adapt and change and at the same time still produce good work. Almost everything I do is leading edge (right now it's natural speech recognition and vxml) and I really enjoy it (11 years with company). Also still here because the company is doing well. 2 years ago the stock price was at $31. Now it's at $118 (factoring out the 2 for 1 split last August) and we reported a record year last year.
Sat 01 Mar | The mad Hungarian | I was working as a contractor at the gov. agency. They announced that they were going to fire all the contractors who did not agree to come on board as FTE. (Offer not open to everyone - just the long term contractors that they liked.) They liked me and made a reasonable offer. The alternative was unemployment, so I took it. Only 9 months, 3 days to go until I finish my 1 yr. probation. Then I'm civil service. Almost impossible to fire me then.
anybody on this forum currently hiring? | Thu 20 Feb | PC
curious to see if any of the people who frequent the board are hiring, that is if the companies they work for are hiring?
Sat 01 Mar | Tom Dratler | Miami-Dade County is hiring. Just coming out of a long hiring freeze so the list of open positions keep changing: http://www.co.miami-dade.fl.us/jobs/pgeJobWelc.asp
Re: Newsletter | Fri 28 Feb | Andrew Burton
I hope this isnt considered trolling or such, but I am earnestly curious. I signed up for the mailing list earlier this week using my AOL (home) address, but I dont recall getting the confirmation email. I signed up today using my work address (where I control the email filtering, bwahaha). Have I missed anything yet?
Fri 28 Feb | Stephen Jones | No emails for the last three weeks or so. Joel says the big one comes on Monday.
Fri 28 Feb | Andrew Burton | Thanks!
Fri 28 Feb | Jim Dandy | Stephen, are you Joel's spokesperson? Let us know.
Fri 28 Feb | Prakash S | Check http://www.joelonsoftware.com
Fri 28 Feb | Stephen Jones | ---'Stephen, are you Joel's spokesperson? Let us know. '--- No, it's just that being nasty about Joel isn't a prerequisite for posting on the board.
Software Strategy: Maintaining Legacy Code? | Fri 28 Feb | X. J. Scott
Hey all, Let me ask for some advise on providing product support. One product I sell is a moderate sized mac application that is popular with my customers who are professionals and hobbiests in a niche market. Its bought by individuals and some consultants, but not companies. its basically shrink-wrap software. Most of the customers are interested in a OS X version so I am porting it. My question is should I start dropping support for older OSs and processors. For example, my program runs perfectly on all mac systems from System 7 through the latest 9.2.2. Also, I have both a PPC processor version and a 68k processor version. The latest revision of my compiler doesnt even support the 68k processor anymore. Should I drop it? Also, requiring System 8.1 and up or 8.6 and up (required by the newer Carbon API) would result in simpler code with fewer conditionals. Its a lot more work to make sure it compiles for every possible target. Technically, I can manage to create a single code base that will do everything, but itll be more of a mess. I do like that I will only have to fix problems in one spot and I do not at all like the idea of having totally different codebases, which if it comes down to that, Id rather freeze an old version and stop maintaining it in its own dead branch, but make available to users of really old systems, which seems to be one way other developers do it. I guess my main question is - is there any business advantage to maintaining support for the older systems? None of my customers that I know of have *only* the older systems. Some run on both old and new systems, and most have newer systems. One factor I think important is that it seems that folks with really old computers dont actually buy software; all of my new customers the last 12 months have had the latest and greatest. So is there any disadvantage to dropping support for old systems? Those of you who sell your products to many customers, what choices do you make?
Fri 28 Feb | Brent P. Newhall | I'd ask my customers. Shoot out a survey to your customers, asking how far back they need compatibility. If nobody wants System 7 support, you can confidentaly drop it from your considerations.
Fri 28 Feb | RocketJeff | >> One factor I think important is that it seems that folks with really old computers don't actually buy software; all of my new customers the last 12 months have had the latest and greatest. I think this should be one of your main consideration. Are you finding things that need to be fixed in the older versions or are you just providing upgrades? If they're paying for support/upgrades, you'll need to determine if it's worth the extra work for whatever income is coming in. If they aren't paying for support/upgrades, the decision is pretty easy - drop the 68K and really old operating systems. Both are old enough that your users shouldn't be expecting you to continue supporting their systems.
Biggest a-hole in IT | Fri 28 Feb | Jeff
Based on the theme of the least and most admirable people in IT, I propose a biggest a-hole in IT thread. My vote is for Larry Ellison.
Fri 28 Feb | Practical geezer | What does this kind of ad hominem attack help us? Or you for that matter? Should I now vote you the biggest, while I do not even know you and have only this minor digression from social courtesy to show for it? That would be disrespectful of me, so I won't. Please pay others the same kind of respect. If you think it matters, discuss it with your target, and make it constructive, but don't go around someones back slinging dirt.
Fri 28 Feb | Just me (Sir to you) | I wouldn't know. There are so many options, but Eric Raymond surely springs to mind. Then again. Scott McNeily must be in a class of his own, where a-hole does not realy quite capture the true flavor of the character.
Fri 28 Feb | Stephen Jones | Well said, Practical Geezer. This kind of thread is a troll that doesn't even have the virtue of provoking.
Fri 28 Feb | Just me (Sir to you) | Geezer and Stephen, I admire your character. We have just been f*ckd majorly in the butt once more by the political powerplays some of the individuals mentioned above represent, so given an opportunity to vent ...
Fri 28 Feb | Ged Byrne | Whats the difference between 'Biggest a-hole' and 'least admirable'?
Fri 28 Feb | Practical geezer | Thought as much. You seemed more reasonable from previous posts. I am sure that now that you have been able to count to ten, you agree that personal attacks don't get you anything, except some temporary relieve. When I get frustrated by a Microsoft product I too sometimes wish someone would hold Bill Gates personally responsible for the mess.
Fri 28 Feb | Practical geezer | 'Whats the difference between 'Biggest a-hole' and 'least admirable'?' Emotions?
Fri 28 Feb | RocketJeff | I'm just glad I changed my 'Full name' as soon as someone else started using it...
Fri 28 Feb | Character Judge | Maybe not the biggest, but a good candidate for the top 10: Kevin O'Connor, founder of Doubleclick. My axe is personal. I worked under him at the company he ran prior to Doubleclick. He was a smarmy, self righteous frat boy type and was also a terrible coder. The kind of jerk that would flip out a piece of code that would lock up and wouldn't bother to run it first. An arrogant a-hole, in other words. It stands to reason that one of the biggest jerks I've known would create one of the most annoying technologies on the internet, and would also try to sideline into developing intrusive dossiers on other people's personal details. All by selling pipe dreams on other people's money at inflated IPO prices, of course. Second prizes go to the self righteous pinheads that he surrounded himself with from his old company.
Fri 28 Feb | Li-fan Chen | It's threads like that that will inspire a troll-hostile code enhancements to this discussion forum...one would hope.
Fri 28 Feb | Just me (Sir to you) | Apart from the 'a-hole' thing this tread seems just like a normal continuation of the 'Most admirable ...' discussion. They could all be regrouped under 'Comments on well known characters in IT'. I admit that 'Most admirable ...' seems more civilized, but isn't it is basically the same troll for personal comments on public characters?
Fri 28 Feb | programmer | I don't find this thread offensive. As someone relatively new to IT, I find it helpful to hear people comment -- positively or negatively -- on the character of big names in the business. That said, why is Scott McNealy an a-hole? Someone earlier said that it doesn't quite capture the full flavor of his character. Would you care to elaborate? Just curious. I have little experience with Sun, except that I had an encounter with some Sun people a while back -- they were nice as could be, talked to me for an hour, dying to sell me some stuff, but when it came time to ask a favor of them, I couldn't get my calls returned.
Fri 28 Feb | doobius | anonymous-hole.... the biggest anonymous-hole in IT..... hmm...I know but I can't say...you know, Heisenberg and all that... how about a real topic dude?
Fri 28 Feb | Erik Lickerman | I would like to nominate myself. You people don't know me very well but I can be a tremendous asshole. I'm in IT and physically I am pretty large. On the principle that there is no such thing as bad publicity, I really think this could help my career and I demand your support.
Fri 28 Feb | ab | Shesh Practical Geezer, you're a bit thin-skinned! What does this kind of ad hominem attack help us? Or you for that matter? It helps vent and find out if other people agree with you. I don't see how this topic is any less of value then the least/most admirable IT topics. If you don't like the topic then don't read it--you can choose to disengage at any time. Should I now vote you the biggest, while I do not even know you and have only this minor digression from social courtesy to show for it? Your vote should be for someone significant. If you think it matters, discuss it with your target, and make it constructive, but don't go around someones back slinging dirt. Uh huh, I'm sure Jeff is goign to go call Larry Ellison right now. ab
Fri 28 Feb | Bored Bystander | Related question on this biggest a-hole topic: what are the criteria for deeming a person an a-hole? We've had these character assasination/buildup threads w/o anyone really laying down a definition to follow and everyone kind of freelancing and inventing their own definition. Is this a professional thing? That is, is the person an a-hole because they are pitching their company in a way that others just don't approve, or their company makes or uses a technology that others find disagreeable? Or is this a personal character thing - where we are inferring personal characteristics of lying, manipulation, heartlessness, outright cruelty, and arrogant misuse of the trust of others. Is arrogance in and of itself an a-hole metric? Warning: to someone who is unsuccessful and frustrated, everyone in a similar line of work with any self esteem whatsoever is an 'arrogant asshole'. The arrogance tag is very often accompanied by jealousy. I've been called or implied an asshole to my face by some programmers I've worked around who were too much born and bred losers to ever stick their neck out and bat for themselves. So I became a proxy for their personal cowardice and lack of character. So the labeler's personal motivations and position weigh heavily in any sort of judgement of credibility. For my money, the biggest pox on this industry at the face to face level is the sheer quantity of self justifying BS from people that claim that they're some sort of demi-god and that others are lesser than they in all dimensions. Also, wealthy does not necessarily equate to unduly arrogant and middle class and unknown doesn't automatically mean 'nice guy'. I've run into quite a few jerks and a-holes at the level of leaders and managers that really ought to have nails driven into their tires just because of what they are and what they do to others. FWIW...
Web Services | Fri 28 Feb | suhu
Hi, just need some info..I am just wondering how to explain in simple terms what webservices means to some executives in my office who dont have technical background. All info will be appeciated...thanks
Fri 28 Feb | Practical geezer | I have a technical background, but I don't really know what it means either. Actually, that's the point. It doesn't mean anything, unless you put it to use. So try to explain what you can use it for, and how it might be more appropriate for that use than other solutions. Executives, as do end-users, do not care about technology or its meaning. They care about the goals it lets them achieve...
Fri 28 Feb | Jan Derk | Web services = RPC using XML via HTTP
Fri 28 Feb | JWA | The most basic explaination for non-technical management is that web services allow computer programs to surf the web. They allow the programs to go to specific web servers and get information just like a person going to a specific web site and reading or downloading something. I've found that gets the ball rolling nicely. --Josh
Fri 28 Feb | Jeff | Tell them it's simply a buzzword for a program that exchanges data with other computer programs over the Web. Then give examples. A good example is the way a manufacter would use a Web Service to accept orders from wholesaler's computer systems. The wholesaler's computer program would automatically connect to (consume) the manufacter's Web Service each night to send their orders to the manufacter in a big xml flie. What are some other good simple examples?
Fri 28 Feb | Prakash S | As Jeff says a good example minus the techincal terms is the best way to describe it. You should start put by explaining the current system, its drawbacks; then proceed to explain with an example about web serivces. My fav is the one about a hotel and rent a car company. THen proceed to explain about XML, HTTP, WSDL, UDDI - this and where it would fir in with the explanation you gave
Fri 28 Feb | Practical geezer | Jan, That is a good summary for techies that understand RPC (assuming you mean Remote Procedure Call), XML, and HTTP. To an executive, or at least, an end-user, it means nothing. I usually choose not to understand it, if only to force you to explain it in terms of 'ends', not 'means'. I assume you would have said something similar to the posters after you, had I made that clear enough to begin with, assuming you respond to my response.
Fri 28 Feb | Frederic Faure | What about : a way for a program located on your PC to send a query to a web server, and receive an answer? As a practical example, querying Amazon for a particular book through its ISBN, and displaying it in a dedicated application.
Fri 28 Feb | Just me (Sir to you) | Just tell them this is the first time in history the whole industry agrees upon a way to let many computers work together. Bottom line is it will cost us less money to do it this way.
Fri 28 Feb | Practical geezer | 'What about : a way for a program located on your PC to send a query to a web server, and receive an answer?' Techno-speak. 'As a practical example, querying Amazon for a particular book through its ISBN, and displaying it in a dedicated application.' Now that's more like it. Now you have to explain why you can't do that without web services, or why web services are better than current technology. Put's things in perspective.
Fri 28 Feb | Jeff MacDonald | Use an example the audience can relate to. For executives, the 'Stock Quote' example has worked for me in the past - nearly all executives use their online brokerage account. Using this example, the benefits of 'real-time' data access across the net will be immediately understood my most Execs.
Fri 28 Feb | Li-fan Chen | It's a way to share information and services. It only works when everyone uses it. So a few tried. Saving was mostly lost trying to get everyone to stop meaning something different when they were say the same thing. This was key, the saving depended on the man power saved when everyone was saying the same thing and meant the same thing. The documentation of a web service, the real world agreement to bind oneself to the specification, and the on going effort to understand the specification and improve upon them when possible with the participation of all parties is more crucial than the transport protocols involved. -- Not a salesguy
Fri 28 Feb | Go Linux Go! | The stock quote example is a good one. I've shown how a user can use a stock retrieval web service to retrieve their stocks into Excel, and how they can use the same web service to update a list of stocks on a web page. Then show how they can use the same service to get their quotes on their cell phone. I always try to show the web service being used in a multiple ways, since if you just show it being used on way they fail to see how it is different from a 'regular' program.
Fri 28 Feb | cheapo | Expense a new PowerBook and start up Sherlock.
Fri 28 Feb | Steven E. Harris | I enjoyed these recent relevant posts by Michi Henning: http://groups.google.com/groups?threadm=Pine.LNX.4.44.0302192142000.5995-100000%40diadora.client.uq.net.au http://groups.google.com/groups?threadm=Pine.LNX.4.44.0302212024440.2431-100000%40diadora.client.uq.net.au
Fri 28 Feb | Marc | The best explanation I've heard was breaking up Web Services into two items; XML and then Web Services. Think of XML like an Excel spread sheet. It holds lists of data. And much like Excel, it can contain multiple 'sheets' with different data in them. And also like Excel, you can link data in one sheet to another. NOTE: When I witnessed this explanation, the IT guy actually opened up Excel and gave an example. Because it was so simple (list of prices on one sheet, list of quantities and the calculated total (sheet 1 price * QTY) on the second sheet. The executives instantly understood this because most of them have had some experience in Excel (although two of them said, 'I didn't know I could do that in Excel, cool'). A Web Service is just like a Web Server. The only difference is a Web Service sends a web page while a Web Service sends an XML file. Hope this helps. I will say that this can get confusing, even if you know what you're talking about.
Fri 28 Feb | Herbert Sitz | Someone said: 'Web services = RPC using XML via HTTP' In the Delphi world at least, I know there's a lot of stuff going on with n-tier development and putting services on internet servers, but which has nothing to do with XML and isn't necessarily transmitted via HTTP. For example, see RemObjects at http://www.remobjects.com, kbmMW at http://www.components4developers.com , Rinse at http://www.dimeric.com/DSWeb/Products.dsp . I assume there's equivalent work going on for .NET, Java, and other languages by developers who feel the standardized XML or SOAP RPC's are too cumbersome, restrictive, or slow. Is there any reason that these proprietary methods of implementing remote procedure calls shouldn't also be called 'web services'?
Unit testing and project velocity | Thu 27 Feb | T.S.
I first started doing unit testing about 7 months ago. Ive gotten into the habit of writing unit tests for almost everything I have coded. In general, I really like the idea and the benefits that unit testing provides (decoupled design, knowledge that a change didnt break any other part of the system, etc). However, over the past month or so Ive done a few various things without writing unit tests and I have noticed how much faster I work this way. I would estimate that I spend at least twice as long on a task if I write unit tests for it. According to http://www.extremeprogramming.org/rules/testfirst.html - The combined time it takes to create a unit test and create some code to make it pass is about the same as just coding it up straight away. This hasnt been my experience. Has anyone else successfully added unit testing to their process without slowing down the project velocity? If so, Im curious to see if anyone has any suggestions on how to prevent unit testing from taking so much extra time. Thanks!
Thu 27 Feb | Joel Spolsky | If the code is straight up symbolic processing, the kinds of things people do with smalltalk, it's not so hard to write tests... just create a few input strings and compare them to the output strings. The trouble is when you're testing a GUI, or a web page, or any kind of complicated system involving multiple moving parts. Then test driven development is just too expensive and impractical, and I wouldn't bother with it. (That's what my essay is about in this month's STQE magazine. Sorry, not available online, and I don't think the printed version has come out yet).
Thu 27 Feb | Lazy Coder | The numbers you use for time depend heavily on what you are including in that time. If you are talking about the first version of code to go out the door, writing it straight up is probably faster, maybe even significantly so. The time savings will be most apparent, though, when you start factoring in other things that are required to make the code production worthy. In manufacturing, each step has four time components: queue, setup, process, and wait. Typing the code is analogous to the process step. Writing unit tests first helps to minimize the others, especially as you factor in rework. For example, it's probably faster to write 10 units tests at once than to catch ten bugs after the code is developed and do the associated debugging, because you only have to do the setup once in the first case, but ten times in the second case.
Thu 27 Feb | Go Linux Go! | My experience has been along the lines of TS. Writing unit tests takes more time, I don't care what the XP folks say. However....Having unit tests have saved my butt on many occassions. On a current project written in C#, I'm using NUnit to run my unit test for each class. After modifying some code, it turns out I had introduced a bug via a 'ripple effect'. Because I routinely run NUnit on all of my unit test, I caught this bug the same day and changed the offending code. Without NUnit, it might have been weeks before this glitch became obvious and it would have taken a lot more time to fix it.
Thu 27 Feb | Chris Tavares | Writing tests plus writing code will obviously take more time than just writing code. However, writing tests + writing code will take less time then writing code + debugging code. And then when you get into version 2, you get a whole new kind of speedup, since you're not afraid of breaking stuff on the way since you've got your tests. You need to take the whole picture into account.
Thu 27 Feb | realist | I've gotten into the habit of writing a test module as an internal part of any application I'm developing. I usually use a command line switch to trigger it. As I build functions I add a test for it to my application test module. This really works well for me and has nipped many a potential problem in the bud. I hate, yes hate, overly formalised unit test procedures, they are not worth the time investment. Typically they are a big bang for a big buck, whereas my way is a large bang for a small buck.
Thu 27 Feb | flamebait sr. | I've found that if you write a *really good* set of unit tests for your core set of data structures and algorythms, it will save you huge amounts of debugging time later on. I'd bet it's of much more limited usefulness for stuff where the interaction is more open-ended.
Thu 27 Feb | Danil | Also, don't lose track of the fact that the TDD crowd is using UnitTests as part of their design effort, so be sure to include your time sketching class heirarchies and so on. Also, the payoff depends a lot on how much time is spent refactoring - the TDD crowd spend very little time adding code compared to the amount of time they spend cleaning things up.
Fri 28 Feb | jim rigney | Joel Spolsky said: '...just create a few input strings and compare them to the output strings.' I think this is a naive view of how this kind of testing is supposed to work. Ideally, if you are using objects, you are not testing the result of calling a function. Instead you are testing the dynamics of the object that a method is bound to. This is done by creating a set of post conditions for each command (state changing method/subroutine) that makes some assertion about the value of every query (result returning method/function) visible on the object's public interface. This will capture, and test, much of the dynamics of the object and ensure that the object's state changes as expected. Also, if you are careful about writing specification, you can often translate specifications directly into tests, so there is the added comfort of having an automated compliance test against your specs. This notion is really just an adaptation of the techniques of Design by Contract to an environment that doesn't support it directly. If you study those techniques, you will see that writing good tests can be a powerful way to ensure quality and fidelity to your specifications under many circumstances. It's also a great way to uncover leaks in your abstractions. As far as not using it for GUIs and the like, it probably isn't a reasonable approach yet. But there's nothing wrong with testing the state model that the GUI is viewing properly. This leaves a small amount of untested rendering code and whatever crazy scripting code you've inserted into the rendition. At the end of the day, the decision of what and whether to test should be based on the economics of the situation. If the product is a one-shot that won't be supported, testing is probably overkill. If you plan to evolve the thing over many releases and provide robust field support for those releases, it might be a very attractive risk hedge. If tight compliance to your specs is a requirement, it might be worth investing the extra time to build a robust test suite that captures system semantics. If the specs are kind of loose, then basic tests might be your best bet.
Fri 28 Feb | Go Linux Go! | Regarding testing GUI's, I just noticed that someone has extended NUnit to work with ASP.NET. I haven't tried this yet, but it looks like an easy way to check the outputs of areas on the screen. http://nunitasp.sourceforge.net/
Fri 28 Feb | anonymous | Joel Spolsky said: '...just create a few input strings and compare them to the output strings.' Jim -- Sorry, but I think Joel gets to the essence of unit testing here in a useful way, more useful for most of us than the academic-gobbledygook-speak in your own explanation. (Even though yours also may be true.) The only thing I might change about Joel's is that you aren't just creating input and comparing output strings, but whatever datatypes are used by the object methods you're testing. And he doesn't point out what specific cases you'd want to 'create a few input strings' for. But other than that, I can't see how what he's saying is much different from -- except for being clearer than -- what you say: 'This is done by creating a set of post conditions for each command (state changing method/subroutine) that makes some assertion about the value of every query (result returning method/function) visible on the object's public interface.' Joel's description tells you how to test the 'dynamics' of an object as well as yours, although perhaps not how to 'capture the dynamics', whatever that means.
Fri 28 Feb | Ian Stallings | Unit testing has never been the end to QA, it simply is a means to test the functionality of your code and make sure it does what you think it should do. It will save you time because you eliminate some of the potential bugs up front, instead of down the line in QA or even worse, after release. GUIs are powered the same way that command line applications are, there is really no difference in testing the core functionailty of your app by calling the classes that power the GUI, whatever that may be. This can at least ensure you that your core classes are working, especially when you make a change. Personally I cannot write perfect code. If you can find some other way for me to ensure that my code is working as I intended I am all for it. I don't like to spend hours tracking down bugs because I changed something in one class and the effects rippled throughout my code. Does anyone have a better suggestion to lower the chance of bugs appearing?
Fri 28 Feb | Joel Spolsky | I don't really agree that GUI development is just a 'thin layer of pretty stuff' on top of functionality. In my app, CityDesk, the functionality accounts for maybe 10% of the code; the other 90% consists of creating an elegant and usable user interface. Example: we have a big pile of code that insures that when you switch between WYSIWYG and Source/HTML view, the cursor or selection position is preserved. This is fairly gnarly code to implement, but testing it with any kind of automated framework would have to happen at the GUI level. It's ALL gui. So in CityDesk if we did extensive TDD or unit testing, it would only cover maybe 10-15% of the lines of code.
Fri 28 Feb | T.S. | As a follow up question, how do you decide how thorough a unit test should be? Creating tests for every possible combination of inputs and every single error condition takes a very long time. How do you decide where to draw the line?
Fri 28 Feb | jim rigney | anonymous, Thanks for the input. I think you're right that I wasn't very clear; I probably shouldn't write stuff like that so late at night :) I still stick with my assertion, though. Pumping data into a function and testing the return values is only the most basic use for unit tests. The amount of information you get back is a minimum. What I was trying to say was that unit testing is a much more powerful tool than the naive view lets on, and I tried, apparently unsuccessfully, to illustrate the point by talking about post-conditions and all the associated 'academic-gobbledygook-speak.' Sorry that I couldn't have been clearer. I think I'll avoid taking another crack at it here, but maybe I'll post something a little more clear later. The main message, though, was that the decision to develop unit tests should be made rationally, based on your best understanding of your situation. Making blanket statements on either extreme is no substitute for understanding the constraints and requirements of your problem.
Fri 28 Feb | Go Linux Go! | Joel beat me to it, but I agree that a GUI is more than just a thin layer. In my current project, most of the code is wrapped up in classes and has a whole suit of unit tests run against it. I then have an ASP.NET GUI that makes calls to the classes. While most of the logic are in the classes, there is still some 'GUI logic' that can't be wrapped up into the class. When we find a bug, most of the time it's in the logic of the GUI and this area is a whole lot harder to test.
Fri 28 Feb | Ian Stallings | Thats exactly why I said 'This can at least ensure you that your core classes are working, especially when you make a change. ' I simply meant that you can test the underlying layer, as you already do.
Fri 28 Feb | robert | 'Example: we have a big pile of code that insures that when you switch between WYSIWYG and Source/HTML view, the cursor or selection position is preserved.' I think what you're telling us is that your state data is not sufficiently decoupled from 'the GUI stuff' for it to be testable. That's usually indicative of deeper design problems - which may, in fact, be foisted upon you by limitations or poor design of the GUI libraries you are using. Your test for cursor position and selection should be trivial. Your state for cursor position and selection should simply be invariant after your view change. Oh, what's that? The data to describe 'the same' cursor position and selection is a function of viewing mode? That's a design problem. This is a pretty universal correlation - difficult to test systems are often poorly designed systems.
Fri 28 Feb | Ian Stallings | Unit testing is no substitute for good a QA process and plain old common sense.
Fri 28 Feb | Scot (the first) | I agree on the granularity @ which unit testing is helpful. But there is another option. In my current project I will be using an MVC layer which is itself unit tested. Then I'll use httpunit or jwebunit to automate the acceptance tests. This use of httpunit or jwebunit would also work with any system, whether or not it was written in Java, I might add.
Fri 28 Feb | jim rigney | T.S. This book is one of the best I've found at answering questions like the one you raise without getting into a lot of mathematics: http://www.amazon.com/exec/obidos/asin/0471358460 The author has another book called 'Lessons Learned in Software Testing' that is also very good, though it is probably targeting a different audience.
No forwarding? | Thu 27 Feb | Ranajit Ray
Joel wrote: <> Copyright on email is a rather flimsy concept at best -- what do you intend to do, sue to collect those who violate your copyright by forwarding your email? (Im not trying to be offensive, Im just sick and tired of 18-line disclaimers attached to emails that say things like thou shalt not forward this or thou shall offer the writer your firstborn; and curious as to why Joel suddenly felt the need to add exclusive benefits to email subscribers.)
Thu 27 Feb | flamebait sr. | It's signifigantly less hazy for cases like these, I'd say. Stupid stuff like deep linking and other sorts of things are hazy. Stealing email with an explicit copyright attached to it is about the same as stealing the content of a webpage. Clear cut reasons to get a takedown request put through.
Thu 27 Feb | Wayne Venables | Thankfully, fair use allows us to comment on the email and quote small sections of it for discussion. I'm just waiting to receive the email so that we can have a lively meta-discussion on it. I understand Joel's position more than most; I designed the forums for our website (http://www.coffeegeek.com/forums). We desided to build (rather than buy/use open source) because it's part of our content management software and we wanted to sell it with that package. Of course, we got alot of flack from our users because our forums don't work exactly like what they are used to.
Thu 27 Feb |    | << Of course, we got alot of flack from our users because our forums don't work exactly like what they are used to. >> Wayne, I don't think it's limited to only what users are used to. Some things are just usability annoyances: You have to scroll to the bottom of the thread list to find the link to start a new thread. That's easily fixable. You have to manually scroll to the bottom of a discussion thread - which can get tedious, add a simple anchor to the bottom of the ASP page and a link to it at the top, fixed. Yeah, I can hit 'end' to get to the bottom, but I'm using my mouse and I have to take my hand away from the keyboard. Most of the issues are minor, but you add them up and the interface stinks =) This may be ok for X number of users, but as JoS's readerbase (?) has increased, it quickly is on its way to becoming inadequate.
Thu 27 Feb |    | make that: '...but I'm using my mouse and I have to take my hand away from the mouse. '
Thu 27 Feb | Joel Spolsky | Given a pretty long essay, there are a lot of opportunities to make small variations. For example, 'it's' vs. 'it is'. With n possible binary variations, you get 2^n versions of the essay. There are about 18000 people who will get it emailed to them, so it would only take 15 spots with two variations. Now everybody could get a unique essay, without knowing it, and if I were to find the essay reposted on the net somewhere, it would be a simple matter to figure out who was violating the copyright (or at least, their email address).
Thu 27 Feb | Joel Spolsky | And dear blank person, did you ever consider that I might WANT it to be hard to reply to a post before you read all the replies that are already there?
Thu 27 Feb | Stephen Jones | The copyright on an email is exaclty the same as that of a written letter you have been sent. That gets rid of most of the 'if you've got this email by mistake, destroy it immediately before you readi it' which for some reason is put at the bottom and not the top of the emails. If you've got the email by mistake the writer has no right to privacy. This is certainly true of the US where it is part of criminal jurisprudence, dealing mainly with the admissablity of mislaid emails or hard drives handed in to have data recovered from them. The matter is covered in considerable detail on the CIA web site. So with a straightforward missive you can do what you feel like with impunity. Now what happens if Norman Mailer sends you his latest novel by email. You obviously have the same rights with the email that you would have if he sent you the book. However with a paper copy it's simple - you can pass it on to somebody else. But with an emaiil? If you print it out are you making another copy, and therefore have to delete it from your hard drive, or would that only apply if you sent either the electronic copy or paper copy to somebody else, in which case you would presumably have to ensure that nieither stayed in your possession? And when does a missive become an article, and thus subject to copyright? All good fun, and of course irrelevant since telling people not to forward something is the surest way of ensuring widespread distribution. The final question being whether Joel is an optimist or a cynic. And, unfortunately, I don't think either of us are going to be in a position of having our emails passed around the net, with or without our consent
Thu 27 Feb | Stephen Jones | >>>>>>did you ever consider that I might WANT it to be hard to reply to a post before you read all the replies that are already there? <<<<< Joel, you're not reading what he's saying. He said 'You have to scroll to the bottom of the THREAD LIST to find the link to START A NEW THREAD. ' It is true that his request for a link to the bottom of the thread would allow somebody to post a reply before they had read the other posts, but that is an unlikely eventuality. The much more likely scenario is that the person has already scrolled down that list a dozen times before on order to read the new posts. Scrolling manually can be a real nuisance. I was on a fortnight's holiday last week, and I forgot to back the wheel mouse with the laptop. Not being able to use the middle wheel to scroll or open in a new tab became such a nusance that after an hour I logged off the internet and took a half-hour taxi ride to the nearest computer shop to get a mouse with a wheel.
Thu 27 Feb | HeyCoolAid! | Poor Joel... While reading through some of the latest threads, it started to feel like walking in to a cranky nursery school (must be nap time?). Anyone who knows what it's like to moderate a discussion group (like me) can certainly feel for you. I bought your book last year, read it, enjoyed it, and found it a valuable addition to my referece shelf. I've also greatly enjoyed the articles on this site. So here's my opinion... write your article, send it out, and if people want to whine about it then screw 'em. You can't please everyone.
Thu 27 Feb | Ed the Millwright | It's an issue of respect. When I put a copyright on an email, mark it confidential and write 'please do not forward', I expect the recipient to respect my wishes. Is it easy to legally enforce? No. Will I sue them for forwarding it? Unlikely. But if someone violates the trust, they are a wanker who goes on my shit list. It's as simple as that.
Thu 27 Feb | Stephen Jones | >>>>>> When I put a copyright on an email, mark it confidential and write 'please do not forward', I expect the recipient to respect my wishes.<<<<< You're confusing two things here; confidentiality and copyright. Copyright is intended to protect the moral and financial rights of the author of an original creative work which will be disseminated. Confidentiality is an attempt to ensure that something isn't disseminated. If you tell someone a secret and ask them not to pass it on, then you are quite right to put them on your 'shit list' if they let you down, whether you do it by email, phone, letter or charades. Mind you from my experience of human behaviour you're going to have a pretty long list.
Thu 27 Feb | Ed the Millwright | 'You have to scroll to the bottom of the THREAD LIST to find the link to START A NEW THREAD.' Which is the logical way to do it. What is more common: 1. User A wants to see the latest topics. 2. User B wants to start a new topic. I claim that #1 is 1000 times more common than #2. Therefore, I, the conscientious HF engineer, given the choice (required due to limited screen real estate) between making #1 the easiest thing to do and #2 the easiest to do, choose task #1 to be the easiest because it is most common. On the other hand, if I was a Linux UI designer or a sadist living under a repressive totalitarian government, I would choose the opposite - make it harder to do the most common thing.
Thu 27 Feb | Ed the Millwright | 'You're confusing two things here; confidentiality and copyright. ' - SJ Did you actually read what Joel asked? 'Once again -- the essay will not appear on the web and will be copyright so I'll ask you not to forward the email around' -- Joel
Thu 27 Feb | Stephen Jones | Dear Ed, You're going overboard. Putting the link to post a new thread at the top as well as at the bottom, as nearly every other forum does, would not mean the person would have to scroll to read the messages. It would merely mean that he would have to scroll if he wanted to read message 41 (on my browser anyway). There is also spare real estate at the side if necessary.
Thu 27 Feb | Stephen Jones | >>>>>Did you actually read what Joel asked?<<<< I was replying to you not Joel. You said, ' When I put a copyright on an email, mark it confidential and write 'please do not forward'' Joel was claiming copyrignt, not confidentialiality. And you can't jist 'put copyright' on an emaiil. The email has to belong to a genre that is copyrightable. For example neither this, nor your last post, are copyrightable, although if the whole thread formed part of some king of post-modenr novel than the author of it all would be able to claim copyright.
Thu 27 Feb | MaisOui | In Canada, anything you write automatically has implicit and automatic copyright rights - including emails :) Under my personal code of ethics, you shouldn't as a rule forward emails that you didn't write without permission anyway, although messages sent to an email list and/or messages sent in a corporate context *by their nature* are generally considered to be more public than private email. However, it is perfectly legal and legit to comment on documents - so long as the entire document is not reproduced, unless said document is covered by another mechanism such as trade secrecy. And honestly, Joel - subtle variations aren't really going to be a huge deterrent - if I wanted to forward it around to someone (who?) I'd run it through a script to edit those kinds of things first, especially since you've now pointed out that you're thinking about doing variations. If I was releasing a document I was not anxious for users to forward around - I wouldn't remind my users about copyright (presumably all of your articles are copyrighted anyway, Joel, so emphasizing here just sounds odd), but would tell them it is confidential. And if I was really serious about it, I wouldn't distribute the document by email in the first place - I'd make it harder than clicking 'forward' -and tell users go to a secure website which displays the image as several pictures (more difficult to copy). Finally, if I was really really worried about users disclosing the contents of the email, I'd get everyone that signs up for it to explicitly agree to a non-disclosure via a clickthough (somewhat hazy legally) and/or via an email stating their agreement (valid in Canada, but not necessarily everywhere else). If you really wanted to control this - I guess you could have us all return a signed fax...
Thu 27 Feb | John C. | Stephen: Your notion of copyright is incorrect, at least under U.S. law. Copyright automatically applies to any tangible work of original authorship (construed liberally). It generally doesn't matter whether you even assert copyright or not. In the case of posts to this thread: If it's original, and you wrote it, and it's published in a print or electronic medium -- which this most certainly is -- then it's automatically copyrighted. See http://www.copyright.gov/circs/circ1.html for details.
Thu 27 Feb | mb | It's not just US law--that's the Berne Convention I believe. To simplify interntional rules on copyright, all signatories have a copyright of at least N years requiring no registration or even indication of copyright.
Fri 28 Feb | Prakash S | I wish everyone just stuck to the Honour Code! SIGH!
Fri 28 Feb | Ranajit Ray | I was the original poster, and I'd like to clarify again, it wasn't a particularly 'cranky' question. As somone mentioned, email *is* implicitly copyrighted, but the value attached to it is rather low (i.e. any damages a court awards would be rather low), since it is often arrives unsolicited and because of other reasons that are better covered elsewhere on the web (IANAL). Now, mind you, I agree with a good deal of what Joel says, but this 'no forwarding' thing reminded me of the folk who sent out CueCats and then started getting antsy when people started disassembling their product. Finally, to ensure people don't distribute your content, there are two ways: legal measures like copyright, which don't work well with low-value things like email, and the honor system (this isn't, after all, Slashdot -- I think most readers would not forward if Joel asked them not to). On the other hand, when you *mix* the two, i.e., point out the copyrighted nature of the article *and then* 'ask' not to forward, my natural reaction is: why the strong-arm tactics?
Fri 28 Feb | Joel Spolsky | why? heisenberg effects! didn't I already mention that?
Fri 28 Feb | Practical geezer | Joel, Don't lose your shirt :-) To you, heisenberg effects have a meaning in this context. To most others, it doesn't. It is just some general term that could mean anything as long as it isn't explained in your context. So bear with the impatient and at least acknowledge that you created a mystery that attracts those questions, even when you've already explained that things will become clear when the essay arrives.
Fri 28 Feb | Ranajit Ray | > why? heisenberg effects! didn't I already mention that? Joel, I got the bit about Heisenberg effects; but I would've thought the *best* way to avoid them would be to direct as little attention to this post as possible. Asking people 'not to forward' (that too with a -- IMHO -- heavy handed 'respect my copyright' line) may just cause the opposite effect. Again, perhaps I over-reacted: it *is* your site and obviously you can write as you see fit; it's just that the tone of the last paragraph did not in my mind match the good-natured person who (presumably) wrote 'Alligators: enter via NYC sewers' in http://www.fogcreek.com/fog0000000046.html .
Fri 28 Feb | | 'why? heisenberg effects!' You claimed this before. However telling only those on the email list will also introduce these effects, because many of those receiving it will be posters to the forum. Which is precisely the reason you have people asking why you are not only only sending it out by email and actively encouraging people to receive it (you know, by having that extra 'Subscribe Here!' bit in the announcement). Wonder whethere this will get removed...
Fri 28 Feb | Stephen Jones | >>>>>Copyright automatically applies to any tangible work of original authorship (construed liberally)<<<<<<<< Agreed; now the operatiuve word here is 'work'. Everything that is communicated is not a 'work'. If George W. Bush wirtes 'I'm stoned on smack/Let's bomb Iraq' then it would be copyright if he meant it as a poem, but not if they were official instructions to the armed forces. Equally if Joel writes an article about his discussion forums and the reasons that have led him to change it he could reasonably claim that it is a 'work'. However if he simply states new instructions as to its use then copyright does not apply. I won't know what on earth Joel means by 'Heisenberg effects' until after I've read the mail, though the phrase does sound a mite pretentious, but claiming copyright seems a totally inappropriate way of preventing the ideas being disseminated since they are not covered by copyright. Had a copyright law been in existence in Shakespeare's day then 'To be or not to be' would have been copyright, but suicide wouldn't.
Fri 28 Feb | Nice | 'Given a pretty long essay, there are a lot of opportunities to make small variations. For example, 'it's' vs. 'it is'. With n possible binary variations, you get 2^n versions of the essay. There are about 18000 people who will get it emailed to them, so it would only take 15 spots with two variations.' :-) Now we have _another_ reason for wanting to compare emails why why why?
ms sql server vs oracle sql server | Thu 27 Feb | m . basit munir
i want complete info about this topic
Thu 27 Feb | JP | You'd better start looking for it then....
Thu 27 Feb | Justin | I'm also looking for this. Specifically the implementation differences between the Data Definition Language (e.g. create table, table properties) and Data Manipulation Language (SQL command syntax). I also need date formats. See previous thread about Database Platform Independence.
Thu 27 Feb | Just me (Sir to you) | http://www.microsoft.com/sql/techinfo/deployment/2000/MigrateOracle.asp
Thu 27 Feb | Go Linux Go! | Good luck. It's difficult to get a non-biased opinion on this. It's almost a religion with some folks. A better way of approaching this might be to state your requirements here. There are plenty of educated folks on JOS that could probably help you if they knew what the requirements for your project are. But there is no way anyone can say which is better without knowing what is needed.
Thu 27 Feb | Philip Janus | My review of Oracle 8i: http://www.epinions.com/content_18895179396 HTH, Philo
Thu 27 Feb | KenB | Microsoft tools vs. Sun, Oracle, IBM I noticed that your review basically was saying that when you used SQL Server things were much more user friendly for you than Oracle. I have worked with both SQL Server, Oracle & DB2 as well as VB, ASP, Vb.net & Java, Weblogic & Dynamo - Windows & Unix I have found the same true that Microsoft seems to know how to make developers lives a little bit easier, using GUI tools. This is clearly seen from SQL vs. Oracle or DB2 & Visual Studio vs. sun's command line Java Tools (although I like & use Eclipse a lot now). Why does Sun, Oracle, IBM & UNIX - care so little about making nice tools for developers. Why do they favor command line driven tools which are so archaic? Is it for job security & so you have to hire their consultants????? I thought GUI techniques (XEROX) were supposed to be the next evolution after command line driven computers? Any comments?
Thu 27 Feb | Patrik | >Why does Sun, Oracle, IBM & UNIX - care so little about >making nice tools for developers. I don't know, but one guess would be that both IBM DB2 and Oracles databases are mature products. I mean Oralces DB has been around since 1979, and I would guess IBM DB2 is of the same age. Back in -79, command line interfaces were all the rage :-) Another thing is that both DB2 and Oracle are multi platform, but MSSQL Server is Windows only. All multi platform tools suffer in usablility, since widgets have different capabilities on different platforms. MS can disregard this and do all nifty Windows-only tricks in the GUI. Java tools are maybe as good as it gets when doing multiplatform GUIS, but Java suffers from poor widget implementations on some platforms, which leads to it not behaving like we are all used to.
Thu 27 Feb | Nice | Philo, MySQL has a neat FULLTEXT index. Not sure about fuzzy, but might be of interest to you. My impressions of SQL Server and Oracle are the same as everyone else. TOAD is all that makes Oracle friendly. If you actually have to get your hands dirty in installing/administering it, be prepared to loath it. SQL Server by comparision is a charm. But I remember when it was textbased and only run on OS/2.. This doesn't mean that SQL Server is a superior engine underneath, it just has more shined bodywork.
Thu 27 Feb | Just me (Sir to you) | Patrick, The SQL Server lineage goes all the way back to 1987 with the Sybase DataServer product (first released on Sun Unix). It was not called SQL Sever until 1989 when the 1.0 release for OS/2. While not 79, command line was still quite common in 87 as well. Several third party GUI tools handle both Oracle and SQL Server very well.
Thu 27 Feb | Go Linux Go! | I'll second the notion to check out MySQL. MySQL isn't for everyone but it is a solid database system that has proven it can scale quite well. With the MySQL Control Center, you have a nifty GUI that is quite similiar to MS-SQL's Enterprise Manager. Since it runs on on Windows and a large variety of Unix systems, you aren't tied into just Windows. MySQL does lack stored procedures which can quite be quite unsettling since most developers hate putting a ton of SQL logic into their applications. (Although stored procs are in the hopper for future releases.)
Thu 27 Feb | Philip Janus | 'This doesn't mean that SQL Server is a superior engine underneath, it just has more shined bodywork. ' Well, I believe that for 95% of databases, SQL Server is more than adequate. And as I alluded to in my review, the other 5% of projects shouldn't be undertaken by people who are reading epinions to choose a database (they should be undertaken by people who have implemented similar projects on several platforms and can identify the pros and cons of each). As for 'shined bodywork' - IMHO Sql Server is easier to install and maintain. That makes TCO cheaper. If they perform equally well, and the backend is transparent to your user, what's left? ;-) Philo
Thu 27 Feb | Philip Janus | 'MySQL does lack stored procedures' Heh. Something always kills MySQL from the running. Last time I got it out of a requirements document it was by telling the mortgage company that wanted to use it 'MySQL doesn't have transactions' (at the time it didn't). Now it doesn't have SP's. I'm sorry, but that, once again, takes it out of the race. Inline queries aren't just about happy developers - it's about security, scalability, and maintainability. Philo
Thu 27 Feb | Patrik | Sir, I know that MS SQL Server is based on Sybase. However I did not know that the first version was for OS/2. But I guess all but the Windows versions of SQL Server has now been discontinued, which gives MS the upper hand because they can write their tools for a single platform. Agreed, I wouldnt cope without third party products in my daily work. Being stuck in SQL*Plus would certainly be a bad joke in my book :)
Thu 27 Feb | Just me (Sir to you) | SQL Server has long since gone the road of reusing everything in the base platform it can get away with. This is a deliberate choice by the SS team to avoid duplicate efforts. Porting it now to a widly different platform would be a very “interesting” exercise.
Thu 27 Feb | Go Linux Go! | Philo, I'll agree that not having SP is a major problem. However, I've seen several shops that are quite happy to use MySQL because it saved them hundreds of thousands of dollars in licensing to Oracle. In most of these cases, they implemented all of their database code in database access layer classes so it wasn't too terribly tough to maintain. Some shops just refuse to run Windows so that puts MS-SQL out of the running. In these cases, it often means that Oracle is the only contender. Once the IT manager gets over the Oracle sticker shock, the begin to look again at MySQL. I actually consider myself a MS SQL Server guy. I've been using it since they split from Sybase so I feel very comfortable with it and it's my RDBMS of choice in a Windows environment. But MySQL has a special place in my heart because of it's amazing power for a simple, cross platform and free RDBMS. As I mentioned in a previous post, MySQL isn't for everyone, but if your budget is tight and platform independence is required then it's at least worth taking a look at.
Thu 27 Feb | Just me (Sir to you) | 'If you're reading this opinion, don't buy Oracle.' Nice bit of honesty there Philo. I think you also describe quite well why all 'job security' minded DBA's prefer Oracle ;-).
Thu 27 Feb | Just me (Sir to you) | GLG, here is a good reference for Oracle on Windows: http://www.idg.net/ic_1186278_9677_1-5044.html
Thu 27 Feb | Go Linux Go! | Hehehe..you must have me confused with the rabid Anti-MS crowd. Lots of companies moving from Unix to Windows. Doesn't bother me one whit. But there are lots of companies that are getting tired of shoveling money to Redmond, too. And for those companies, using MS-SQL isn't an option. That leaves Oracle and DB/2. Neither are very cheap.
Thu 27 Feb | AEB | For all of you that are dismissing Oracle because of the lack of gui tools (which has improved with the 8i releases that include the java based mgmt tools. It is true that you probably need a tool like SQLNavigator or Toad as a good query tool and stored procedure editor) try the following in SQL Server. In one SQL Query window run this... BEGIN TRAN INSERT INTO mytable( mycolumn) VALUES ( 'somevalue') WAITFOR DELAY '00:00:30' COMMIT In another SQL Query window, run this.... SELECT count(*) from mytable The second query will not return the result until the first one commits. What's up with that? In fact, if someone has a transaction open that is updating any row in the table, a select * will be blocked by the transaction unless you use dirty reads or WITH (readpast). This usually only comes up during long-running transactions, which is a scenario I have to deal with - I have an invoice that has almost a hundred thousand line items (telecom). I don't want to partially load it - it has to be the whole thing or nothing. But then that forces me to use dirty reads for the rest of the system. And oh, Oracle does not have this problem.
Thu 27 Feb | Stephen Jones | >>>>That leaves Oracle and DB/2. Neither are very cheap. <<<<<<< Actually I seem to remember seeing IBM Linux single processor servers with DB2 included for sale for around $5,000, hardware and software included. Single processor licenses for MSSQL were about $6,000 last time I looked, and then you'd have to add the cost of the W2000 server license and the hardware. The costs are still peanuts compared to what you would be paying the developer, even if he was doing an Access project for SQL server, which is about as fast as you can get in development short of writing for Access itself. Either way you seem to be paying a lot of money fro Oracle when either DB2 or MS SQL server will do the trick for all but multi-million dollar projects. As someone obliged to use Oracle as an end user at work I can only say that I have never seen such a horrible user interface; moreover it took the DBA about over twenty minutes simply to install the app on each client machine.
Thu 27 Feb | Philip Janus | 'And oh, Oracle does not have this problem.' As I pointed out - if you know of a specific reason to use Oracle, you won't be looking for help with the decision. But if you're surfing the web trying to decide, then you're probably in a position where just getting Oracle installed will eat half your project time and budget. Philo
Thu 27 Feb | Ian Stallings | I used to loathe Oracle with my limited experience but after getting my hands dirty with it I found some things I really enjoyed using as a developer that I would like to see in other packages such as SQL server. I no longer fear either one and given the choice I would choose Oracle over SQL server ONLY if I did not have to be the installer and administrator. Working within Government you tend to find a pro Oracle crowd because of it's ability to move to higher performance platforms with more CPUs. I tend to use SQL server in my .Net development because it meshes so well with ADO. Some of the types in Oracle do not play nice with ADO, such as a cursor type. I can work around it, and have, but given the choice I would vote for SQL server when developing in .Net. In Java it's a different story, Oracle is usually the go to DB.
Thu 27 Feb | RocketJeff | >> And for those companies, using MS-SQL isn't an option. That leaves Oracle and DB/2. Neither are very cheap. If MySQL doesn't meet your needs, try PostgreSQL or SAP DB. Both are OpenSource and don't have license fees but do ahve paid support available. http://www.postgresql.org/ and http://www.sapdb.org/
Thu 27 Feb | one programmer's opinion | As others have alluded to (but never actually wrote) the decision on which DB product to purchase and use depends on the work environment. For example, large organizations typically have a 'bake off' where representatives from Microsoft, Oracle, etc. come in and pitch their product to a group of individuals. After the 'bake off' has ended, a committee sits around and weighs through all the pros and cons of each product before making its final decision on which one will become the 'official' database of choice for the company. In most cases, Oracle usually wins because of 'multi-platform' considerations. Note: SQL Server can still be found in large organizations, however, in most situations it is only being used at the departmental level. In other words, some 'big huncho' in the marketing department for example gave a project team the backing and approval to use something other than Oracle.
Thu 27 Feb | John Topley | The present versions of SQL Server are unrelated to the Sybase original.
Thu 27 Feb | Chas | > MySQL does lack stored procedures BTW, mysql does have stored procs now, but (my god why?) it supports them in perl, not typical transact-sql. Quite the pyhrric victory, but it should be said. Postgres should get a mention as well...support for 'normal' stored procs, quite good speed, and installation and administration is almost as easy as mysql.
Thu 27 Feb | Matthew | Justin wrote: >> I also need date formats. For SQL Server, use YYYYMMDD (this is documented in the help files). Or use any format you like, and run it through CONVERT. Even better, use parameterised queries (if using ADO) - http://www.vb-faq.com/vb_commandments.asp (XV). Seeya
Thu 27 Feb | Go Linux Go! | 'BTW, mysql does have stored procs now, but (my god why?) it supports them in perl, not typical transact-sql. Quite the pyhrric victory, but it should be said.' Ahh..Learn something new every day. Given a choice between writing my stored procs in Perl, or keeping my db code wrapped up in a C++ class....I'll take the C++ class.
Thu 27 Feb | Sorry | try the following in SQL Server. In one SQL Query window run this... ... I was wondering if someone was going to mention the locking differences. SQL Server uses 'pessimistic' locking were as Oracle uses 'optimistic' locking. SQL Server books online has good information about the differences. The locking differences are the biggest difference between the databases. Jeff
Thu 27 Feb | AEB | Yeah, whereas in Oracle ....'Both exclusive and share locks always allow queries on the locked resource, but prohibit other activity on the resource (such as updates and deletes). ' SQL Server doesn't allow queries (unless dirty read) on exclusive locked data - which to me makes no sense. On the other hand, I like the DTS tools that come with SQL Server and I prefer stored procedure programming with T-SQL. Java has better support for Oracle, DB2 compared to SQL Server but .NET's ADO.NET works best with SQL Server. Keep in mind, even with SQL Server, once you start needing clustering and fail-over, expect to pay up for Enterprise Edition....20k per cpu. I've used both extensively, could go either way - depends on what the client needs (price vs. platform independence, etc.)
Thu 27 Feb | Philip Janus | 'After the 'bake off' has ended, a committee sits around and weighs through all the pros and cons of each product before making its final decision on which one will become the 'official' database of choice for the company. In most cases, Oracle usually wins because of 'multi-platform' considerations. ' Heh. Again - if you need help deciding, then IMHO the cheapest solution is SQL Server. And I have never, ever, ever understood the 'multi platform' argument, either for Oracle or Java - do companies really run around changing their platforms every few years? 'And just in case Sun gets a better salesman next year, let's hedge our bets on this Windows thing' Philo
Thu 27 Feb | AEB | I think the 'multi platform' refers to the fact that the customer already has an investment in Sun/HPUX/AIX that they want to leverage - i.e. they don't want to add another Windows server. But, yes, I know one customer that have switched from HP-UX to AIX and another one that went from SUN to HP-UX.
Thu 27 Feb | Wayne Earl | Choice of database boils down mostly to application needs and platform. SQL Server is great for Microsoft environments. Oracle is available for Windows, but is immature on that platform (I don't know of any large scale implementations of Oracle on Windows, but that doesn't mean that they don't exist). MySQL is great for a fast website database, but tends to corrupt data under heavy loads, and is HORRIBLE under Windows. Postgresql is a real solid open source db that's good for application development in smaller companies that can't afford the licenseing costs of Oracle or SQL server. Each db has it's own strengths and weaknessess, though I wouldn't put MySQL in the same class as SQL Server or Oracle - though it is faster, it is less robust. Each db has it's own set of problems and work arounds. When choosing between Oracle or SQL Server, I would more focus on the underlying platform and application requirements.
Thu 27 Feb | Philip Janus | 'I think the 'multi platform' refers to the fact that the customer already has an investment in Sun/HPUX/AIX that they want to leverage - i.e. they don't want to add another Windows server.' Ah, the old 'sunk cost' fallacy. IMHO, the analysis *should* be: a) Cost of maintaining the existing installation vs b) Cost of buying and maintaining a Windows installation Where both take into account hardware, licensing, support costs and development costs. 'We've already spent [x]' is crying over spilt milk. Philo
Thu 27 Feb | RocketJeff | It's not just hardware costs - it's also the sys admin and support staff. If you already have people that know Solaris/HP-UX/AIX why would you add a Window's server that you're at a minimum going to have to add training costs for or even have to hire additional staff. Hardware is usualy the lesser expense - it's the people costs when adding new environments that gets expensive. And I think we've all seen recently just how much trouble a badly maintained MS-SQL Server can get you...
Fri 28 Feb | one programmer's opinion | Hi Philip Janus, RocketJeff and AEB did a good job of covering some of the reasons Oracle gets selected in large corporations. Philip Janus wrote, 'Again - if you need help deciding, then IMHO the cheapest solution is SQL Server.' Again as RocketJeff mentioned hardware costs and the cost of the database product itself is typically not the biggest factors for companies with deep pockets. The salespeople are not only there to sell their product but to answer specific questions company interviewers may have. Philip Janus wrote, 'And I have never, ever, ever understood the 'multi platform' argument, either for Oracle or Java - do companies really run around changing their platforms every few years?' My gut says no, but I don't think anyone can answer this question with certainty. Anyway, the situation I described (committee decision making process) is what went on inside a lot of large corporations during the early to mid 1990s. Btw, during this time period SQL Server was considered by many to be a very weak product. I am sure that the decision making process is a lot less formal at smaller companies. Philip Janus wrote, 'And just in case Sun gets a better salesman next year, let's hedge our bets on this Windows thing' The people making 'enterprise I.T. decisions' are normally senior I.T. employees (DBAs, tech leaders, managers, etc.) and most of them have heard enough sales pitches during their careers that they are rarely swayed by smooth talking salespeople.
Fri 28 Feb | Just me (Sir to you) | Wayne: 'I don't know of any large scale implementations of Oracle on Windows, but that doesn't mean that they don't exist' Your wish is my command :-) [Fortis Health consolidating on Windows (3 x Unisys ES7000)] 70000 ... Best of all, the migration from Unix on the IBM mainframe to Windows has gone without a hitch, said Jones. 'Windows has gotten so robust as to cut out low-end Unix, and not so low-end. We've moved, for example, from Oracle over Unix to Oracle over Windows without a problem.' http://www.idg.net/ic_1186278_9677_1-5044.html
Fri 28 Feb | Nice | Despite cutting my teeth on big MS SQL databases, and having spent far too long writing whole dynamic websites in pl/sql (yuck!) and having to get quite a bit into assisting the dbas (and I'm an everyday coder normally), despite all this exposure to them, I can't say I like either of them better than the other. I can't say I like either of them. I can see that MS SQL Server is easier to install and administer. I can also see that Oracle shines when you need that 10th disk array. For small databases, or even just prototyping systems, Access or MySQL always seems adequate. What I have never seen is Postgres nor DB2. I'd like to, to widen my ability to make informed decisions. I think that the job of installing is not too important. A day or three, so what. Get someone who knows what they are doing to do it. I think that the most important thing is choosing the right tool for the right job. I don't think that listening to anyone else's opinions matter; I think to make an informed decision you need to have _played_ with both. And stored procedures are a real pain in the neck. Almost all databases can be queried with proper safe lowest-common-denominator SQL and you'll stay portable that way. For example, I usually develop against Access but deploy against Oracle. Or whatever. Well Philo, you surely have strong opinions. A favourite product. Myself, I am not so sure. I choose on a job by job basis. And one day I might broaden my experience and play with DB2 or Postgres too. Widen my options.
Fri 28 Feb | Mike | <> Wrong Books online gives us: Microsoft® SQL Server™ supports a wide range of optimistic and pessimistic concurrency control mechanisms. Users specify the type of concurrency control by specifying: A transaction isolation level for a connection. Concurrency options on cursors. These attributes can be defined using either Transact-SQL statements or through the properties and attributes of the database APIs such as ADO, OLE DB, and ODBC. See Also
Fri 28 Feb | Go Linux Go! | 'Philip Janus wrote, 'And I have never, ever, ever understood the 'multi platform' argument, either for Oracle or Java - do companies really run around changing their platforms every few years?' Most don't, but that isn't the point. I've been in a lot of shops where they just want the safety net of knowing that if they decide to dump Windows or Unix then they won't have to purchase a new RDBMS. I've also been in hetergenous shops that simply want the knowledege that *if they ever need to* they can move all their databases to 'that' Windows server. (Or the other way around) Does the switch happen that often? Not in my experience, but I know a lot of IT managers that just want that little safety net.
Fri 28 Feb | Just me (Sir to you) | An article that discusses some of these issues of portability is http://www.neward.net/ted/weblog/index.jsp?date=20030228#1046426990527
Fri 28 Feb | drazen | Oracle is available for Windows, but is immature on that platform (I don't know of any large scale implementations of Oracle on Windows, but that doesn't mean that they don't exist). LOL And no large scale implementations can not possibly be linked to the fact that big enterprises still see MSWIN2000 as a toy? :>
Fri 28 Feb | Philo | 'The people making 'enterprise I.T. decisions' are normally senior I.T. employees (DBAs, tech leaders, managers, etc.) and most of them have heard enough sales pitches during their careers that they are rarely swayed by smooth talking salespeople.' Wow. Where have you been working, because I wanna go! In my experience, 'enterprise IT *recommendations*' are normally made by senior IT Employees. 'Enterprise IT *decisions*' are made by management, who may or may not have any IT background at all. And yes, they are very, very easily swayed by a good salesman with a slick presentation and their own personal FUD collection. Put it this way - check out my 'Universal Business Adapter' thread. Someone has already made a significant investment in that product, and presented the website as justification for their decision. Philo
Fri 28 Feb | Jeff | Books online gives us: Microsoft® SQL Server™ supports a wide range of optimistic and pessimistic concurrency control mechanisms. Users specify the type of concurrency control by specifying: Mike, If you want to work around pestimistic locking, there's a number of ways to get SQL Server to do dirty-reads. However this will not give you the same behavior as Oracle. Oracle uses the roll-back segment to prevent dirty-reads and prevent 'readers' from locking tables from 'writers'. For example, at 12:00pm user1 starts a 60 minute query to build a report. At 12:15pm user2 updates one of the records user1 will read at 12:30. In SQL Server, under default behavior, user2 will block until user1's query finished. In Oracle, under default behavior, user2 will not block. When user1's query gets to the row user2 updated, Oracle will get the values at that row prior to the update from the roll-back segement. In SQL Server if you lowered the isolation level to do dirty-reads, you would get the values that user2 updated in users1's query. This isn't isolated according to the ACID properties. Am I still wrong? Jeff
Fri 28 Feb | Brent P. Newhall | Philo wrote, 'And I have never, ever, ever understood the 'multi platform' argument, either for Oracle or Java - do companies really run around changing their platforms every few years?' In the situations I've been in, the argument has not been for changing platforms; the argument has been in running and supporting many platforms simultaneously. Example: In my last company, we were writing an enterprise-level client/server application to be used by developers at large companies. The customers would run their own servers. Problem: Some shops run Windows, some run Solaris, some run plain Unix, etc. Result: We had to pick a database that we knew we could implement on a lot of platforms, and a development platform that we knew we could implement on a lot of platforms. Thus, we actually went with an Oracle database and Java clients. Without multi-platform, we never could have developed that application.
What to do on comments from users? | Thu 27 Feb | mb
What is a good policy to deal with usability and bug comments from users? Should you issue the generic postcard response (your issue is appreciated. we will look into it when it falls out of the round file.)? Post the issues publically so others can see them (me too)? Keep it totally quiet? Discuss future plans? (We plan to fix the top 5 most reported usability issues?) Claim perfection? (this software has no bugs or usability problems, never mind what you just saw and the hair you just ripped out?) This seems to be a damned if you do or damned if you dont issue; if youre quiet, but produce regular and good updates, people will be happy. If you have full and honest discussion, people will be happy but the trolls will come. In both cases, expectations may be raised too high (releases every 6 weeks means a 3 month lag is unbearable; response to some but not all comments angers and frustrates people). I havent had to deal directly with a large audience for software bugs before, so I cant really say whats worked for me. What plans have worked for you, general forum people? What about Fog Creek, which promotes both good usability, sells bug tracking/customer issue tracking software, and runs message boards?
Thu 27 Feb | Simon Lucy | If you give users an interface that lets them describe their problem, or their suggestion easily, without making them jump through so many hoops they give it up in disgust, and they can see the status of that issue and others, then users will appreciate it and you will get higher quality reports. Bugzilla would not be a good choice for a non-developer audience. FogBugz might well be. The combination of collecting data silently (but in a known and approved way), and a context free descriptive form I think would be the best solution.
Thu 27 Feb | dtr | It is usually difficult to deal with bug reporters. Some of them are professional: they send you a clean report with all the steps to reproduce a bug. But the problem is with the wide majority of people that 'believe' they found a bug. If you are too open to users' feedback, average users will see bugs everywhere. Some of them will even credit each Windows misbehavior to your software although it is unrelated. My advice, after more than 2 years of software support, is to never make public the bug reports. Try as much as possible to restrict their submission. For example, let them require a subscription to a betatesting program. Besides, let each user feel that its feedback was important for you: reply by a standardized email customized with their name. But never give the information about the ETA of a new release.
Thu 27 Feb | Gwyn | Ah. The difference between a reported bug and a bug... or in ITIL terms, the difference between an incident, a problem, and a known error. An incident is a case where 'the product does not appear to be behaving as I expect it should' A problem, which may be identified from one or more related incidents is a case where 'there really is a problem, the root cause of which is unknown' A known error, which may be the root cause of one or more problems is a case where 'a failing CI (part of the system) has been identified' So, Only the reporter should be able to see incidents that he has submitted (for tracking). I would suggest that definitely known errors, and probably problems, should be publicly available. And how is an error fixed? Why, via. a (company internal) change request of course. Oh, and if the users want enhancements then these are change requests too and the user community should probably have visibility to the requests that other users have raised, as they can add weight to a particular requirement which may help you focus your development effort. 'Proper' incident/problem/error/change management cannot be trivialised to 'bug tracking' and nor is it easy to try and manage it all via a lightweight bug tracking tool, e.g. FogBugz; you inevitably end up with customisation and compromise which has a cost associated with it.
Thu 27 Feb | Philip Janus | I would only add that if you have a support website (and IMHO you should), then have a FAQ/KB section where you document the major bugs - either 'this is by design, here's how you deal with it' or 'this is a known bug, here's the workaround' or 'this is a known bug' KEEP IT UPDATED this kind of thing keeps your users confident that you're listening to them and paying attention to your product. This encourages them to spend money on you... Philo
Thu 27 Feb | Adam | I think it depends on what your product is. Where I work we sell a java library, so all of our users are programmers. We have email and phone support that you must have support contract to use. We do not send out a form letter. A real person works with the customer to resolve their problem. If it is not a problem, we update documentation and FAQs so we don't get the problem again. If it is a bug, we fix it and release a patch. We typically release a new version quarterly and release patches more frequently depending on how serious/how many bugs we have. If it is a new feature, we tell them we will think about it. If more than 1 customer asks for a feature it will bubble its way up our future feature list. When we decided to implement a requested feature we typically try to contact the customers who requested it. This type of setup may not work for shrink wrap/non-developer customers, but for our customers and us it has worked really well.
Thu 27 Feb | Philip Janus | I already hate your product. :-) I buy your product and install it. I find a bug. Nothing in the FAQ (it's a bug, and my impression was that you don't put bugs in the FAQ), I can't call support because I didn't pay for it. How do I find out if it's a bug or a feature? Do you know about it? When will it be fixed? Whether I get a refund or not, I can't see buying from that company again... Philo
Thu 27 Feb | Adam | Phillip, You make some good points. Somethings I did not mention 1. We have a 30 day trail period. This includes support. 2. First year support is included with purchase. Would the above allow you to condier doing business with us? ;)
Thu 27 Feb | Thats the way the money goes | We put all the errors we know about onto our website, immediately. Immediately may mean later that week if the error is a small one. Why do this? New customers know *exactly* what they're getting, and can see that there's a pattern of things being fixed in a timely manner. This makes for fewer support calls, less refunds and happier customers. One company I know of and no longer deal with has a page saying ''The know issues lists archive issues which have been reported' on their website. In actual fact this is really a list of what got fixed in the /last/ version of their software, not the refund-worthy problems in the current release!
Thu 27 Feb | Joel Spolsky | To address the original question -- I have found that for every given possible improvement in our product, we hear about it from dozens of customers, each of whom feels that they have just discovered America. I can't tell you how many emails I've gotten suggesting that CityDesk have a feature to insert tables. OK, message received! Given that I hear this every other day, but the customer who has taken the time to tell me about it thinks it's quite new and important, there is a fundamental imbalance there, and it becomes hard for me to say graciously, 'thank you for your 7 page letter explaining how tables should be implemented.' Another risk, albeit minor, is that someone will suggest a feature that was obvious and that you already knew about, and then try to sue you when you implement it. So you have to be very clear in replying to people that you already know about that idea. (99% of the time, you do.)
Thu 27 Feb | Konrad | Offtopic, but it's amazing to think that individuals would suggest a feature and then sue you when you implemented it. Absolutely amazing.
Thu 27 Feb | Joel Spolsky | Weird people with funny delusions of grandeur have been known to propose various semi-obvious ideas that they think they invented to large companies, and then spend the rest of their lives suing the large company, usually acting as their own attorney, in various inconvenient and ridiculous jurisdictions. It got bad enough that a lot of large companies simply refuse to listen to customers' product ideas in order to protect themselves. (Car companies are famous for this, after they finally lost the lawsuit by the guy who claims to have invented intermittent windshield wipers.) IBM for example has a policy that if you want to present a new product idea to IBM, you have to present it first to a retired ex-IBM employee. Only if that ex-employee judges it valuable somebody inside the company will take a look.
Fri 28 Feb | Prakash S | Joel, What's Microsoft's policy on this?
Fri 28 Feb | mb | If you had a list of 'upcoming features', you might not hear about it from so many customers. But is that over-promising? Or leaking info to your competitors? Open source projects are often cool, so long as they're below critical mass and have an active mailing list and archive. Sometimes you can propose a solution when you report a problem. And the to do list is often public and in fact a request for outside help. But for closed source teams, it seems there are two responses here: keep the 'wish list' up to date and public, and hope for 'me too' responses. And send a form reply, 'your message has been received and will be considered'. Between the two lies danger and reality. Prakash: Microsoft has a defined 'mswish' program. I don't know exactly how it works, but it ideas do get disseminated internally. They also have relationships with consultants and good customers (e.g. large corps) which provide feedback. MSWish: http://register.microsoft.com/mswish/suggestion.asp . First line: 'By offering suggestions through this page, you give Microsoft full permission to use them freely.'
Fri 28 Feb | Just me (Sir to you) | Adam, Like Philo I am also very wary of software that seems to generate a substantial percentage of its revenue from 'support' or 'consultancy' by the company that publishes it. If you simply have a revenue stream from selling the software, it s absolutely clear that making your product better is good for you in every respect. Trow generous servings support and consultancy into the mix and suddenly the brew gets more murky. 'Sure we might loose some sales by not directly fixing this installer issue, but it is more than compensated for by the additional S&C revenue. Let's just wait a few weeks and cash in on the calls in the mean time.' It is a dangerous play, but it is clear your optimal revenue point no longer coincides with your optimal product point.
Software Patents | Tue 25 Feb | anonymous
How are all the small companies out there dealing with software patents? It seems to me that pretty much all software written probably infringes on one or more patents. Of course many of these patents are completely ridiculous, but the patent office cant possibly check for all prior art (and many times it doesnt seem like they even do a basic check). If everyone checked for patents for all software that was written I imagine software would take several times longer than it already does to develop and much of it wouldnt be written. Not to mention the additional costs that would probably be involved in legal staff. How can this system continue? Does the average small software company get contacted very often about patent infringement?
Wed 26 Feb | Go Linux Go! | 'Does the average small software company get contacted very often about patent infringement?' Only the ones that can't afford a good lawyer. It's a disgusting practice: Step 1: Patent something with full knowledge that to contest it will take buckets of cash. Step 2: Find small companies that have a little bit of money, but not enough to fight you in court. Threaten with litigation until they agree to license. Step 3: Rinse. Repeat.
Wed 26 Feb | Even More Anonymous | We don't worry about them. My company is medium sized, and not producing web products, and our only concession to software patents is not to infringe on the obvious ones, like GIF. We've never been contacted by anyone. Assuming that you really are inventing stuff, the only suggestion I would have is to document your ideas so that you have some evidence to show you thought of it yourself, and what date you did that. Maybe if you were inspired by something you saw, make a note of that too. Of course the ultimate way not to infringe on a software patent is not to sell your software in the US.
Wed 26 Feb | George McBay | When it comes to patents, it makes absolutely zero difference if you thought of something yourself or not. That's part of what is so horrible about them. Even if the algorithm being patented is so obvious a freshman CS student might discover it as an answer to a homework question, if it is patented you cannot use that method without a license. Period. Ignorance of the patent won't save you. Having come up with the answer on your own won't save you. You can try to get the patent voided, but that will cost you a boatload of money and only has a chance in hell of working if you can show concrete evidence that the method was in use by someone else before the patent was granted (prior art).
Wed 26 Feb | Erik Lickerman | Actually 'Obviousness' make an invention un-patentable so in the case George proposes, the patent could be invalidated without demonstrating that someone had done it before. Also, many patents are poorly done and easy to work around. The classic example these days is the one click ordering from Amazon. It was written in such a way that you get around it by having two clicks.
Thu 27 Feb | Nick H | What's really cheesing me off these days is all the ridiculous patents being granted. I just came across one on Fark.com today - Amazon now has a patent on product related discussion boards: http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=/netahtml/srchnum.htm&r=1&f=G&l=50&s1=6,525,747.WKU.&OS=PN/6,525,747&RS=PN/6,525,747
Thu 27 Feb | Go Linux Go! | Regarding patents and Amazon, go read http://www.userfriendly.org today. Kinda funny...
Thu 27 Feb | Bored Bystander | Yes, blackmail over software patents that concern widely known and applied technologies is ongoing. The following article describes a company that is going after smaller companies that sell merchandise over the internet: http://www.informationweek.com/story/IWK20021020S0002
Thu 27 Feb | Harvey Motulsky | Two interesting articles on the costs and benefits (if any) software patents: http://news.ft.com/servlet/ContentServer?pagename=FT.com/StoryFT/FullStory&c=StoryFT&cid=1045510979794
Fri 28 Feb | David Clayworth | Hmm. If the patents on E-commerce hold up, then the logical approach is for everyone to move their E-commerce sites outside the US. I think I might buy some shares in Canadian ISPs.
Fri 28 Feb | David Clayworth | I'm sure I've posted this before, but has anyone noticed that one of the organisations that 'use graphical and textual information on a video screen for purposes of making a sale' is the US Patent Office! http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=/netahtml/srchnum.htm&r=1&f=G&l=50&s1=%275,576,951%27.WKU.&OS=PN/5,576,951&RS=PN/5,576,951
Bothersome holdovers from back in the day | Tue 25 Feb | JSR $FFD2
Im wondering what are some of the more bothersome aspects of your job or of computing in general that are there primarily because theyve always been there? One of my favorites is stack based programming. By this, I mean that most programming systems in common use assume that you call a function, it does something, and then it returns to the caller. This means that the structure of the system is captured statically in the sequence of functions that get called. This seems like a great way to describe certain kinds of computing, but doesnt seem to be the best way to structure most coarse grained systems at all. To me, it seems like a system that supported asynchronous message passing as its primitive means for communicating among objects, possibly using stack based communication by default inside the object, would be a much more robust solution. Ive seen several systems over the years that more or less built on a model like this, web services being the most recent attempt. It seems to me that the main reason we dont have more choices like this (or rete-programming or whatever) is that stacks started out as the method of choice and now they are whats familiar, so they shape how you decompose a problem. Thoughts?
Tue 25 Feb | Alyosha` | Sequential programming is the simplest solution and is optimal when you're computing along in a linear fashion and you need the result of one step of the calculation in order to perform the next one -- which is what people want to do 99 times out of ten. There are a few domains where this concept doesn't apply, however -- I/O is one, distributed computing another ... here are situations in which asynchronous computing can reap huge performance gains by exploiting the parallelism of certain operations. On the flip side of the coin, though, asynchronous programming is a mess. Complexity doubles because every asynch method call requires a callback, and every guarantee you had about the order in which operations are completed, or even that operations are completed at all, goes out the window. And you still have to deal with error conditions ... Now, if I had to worry about all these caveats while working on a straightforward sequential-execution program, I think I'd go insane. Right tool for the right job ... SYS 828
Tue 25 Feb | JSR $FFD2 | I'm not sure we're thinking of asynchronous programming in the same way. What I'm talking about is sending a request off and just going on my merry way, not waiting for a call back. Components like this would wait for one or more inputs to appear, pull it off, transform it, and then shove it onto the outputs, probably with queues at both ends (or some kind of standard synchronization signal) to buffer things. Electrical engineers use this sort of thing to process complex signals nicely.
Tue 25 Feb | Doug Withau | Here is an event based programming method. I have never used it, but it is very interesting. http://www.quantum-leaps.com/index.htm Some people are out there trying new things. The stack comes from the hardware up. In the modern OOP world, when do you really worry about the stack?
Tue 25 Feb | Bored Bystander | >> Components like this would wait for one or more inputs to appear, pull it off, transform it, and then shove it onto the outputs, probably with queues at both ends (or some kind of standard synchronization signal) to buffer things. I'm pretty sure that Objective-C defines method calls in this matter. So there's at least one language out there that doesn't depend on the stack for everything. Also, aren't some languages designed around the concept of coroutines - tasks with simple, fixed rendevous points and no time slicing? But... where I have heartburn with proposing asynchronous calling as a standard programming technique is the fact that synchronization of concurrent threads and queues provide a multiplicity of additional ways for software to malfunction due to marginal design. Timeouts, deadlocks, and overrunning message queues would have to be 'designed around' and anticipated all the time. And frankly, I find that the programming skill needed to accommodate asynchronous, message based programming just doesnt' grow on trees. Most programmers have enough trouble with *one* thing at a time. I think there's a very good reason why single threaded, synchronous, stack oriented programming is the predominant flavor of programming in the world - it's general purpose enough to solve most problems, the concurrency support can be added as needed, all programmers understand it, and it's not finicky.
Tue 25 Feb | Brent P. Newhall | In terms of general bothersome holdovers from the elder days of IT, my favorite would be: All software projects get behind schedule and features must be crammed in by weary developers working late into the night as the deadline looms. I wish the IT industry would quit accepting this. It might have been true when large-scale software development was new, but we've had decades to recognize the problems and fix them.
Wed 26 Feb | xil | > I'm pretty sure that Objective-C defines method calls in this matter. Sorry, this just isn't true. Objective-C method calls are not really all that different from C function calls; there's dynamic lookup of the function that eventually gets called, but parameters are still passed using the same old calling convention that C uses. Sorry to burst your bubble.
Wed 26 Feb | Poke 53280,0 | If you're into Java, here's a source forge project building concepts like the ones mentioned in Java: http://sourceforge.net/projects/flow-based-pgmg One of my least favorite holdovers is the function call notation used in most of the popular languages. I'd prefer a much clearer (to me anyhow) notation like the one in Smalltalk. Reads more like natural language and it's easier to see what each parameter is for.
Wed 26 Feb | Simon Lucy | It does sound like you'd rather do Smalltalk than procedural systems. You could write a message passing object system in any procedural language if you wanted, a good string processing language, like Perl would make it a bit easier, C++ has too much junk overloading it. I think Smalltalk had its 25th birthday recently.
Wed 26 Feb | Neil E | HTML forms! I've heard the arguments for thin clients, but this is riduculous. Okay, you can use scripting to validate the fields, but scripting might be switched off. You could do the form in an applet, but the Java or .Net runtimes might not be installed. Nope, all we have is maximum length. I'm sure that computing resources weren't so tight back in the day that browsers (I'm talking ncsa mosaic vintage here) couldn't have implemented a regular expression engine a nice simple 'mask=' attribute on the input field.
Wed 26 Feb | Nat Ersoz | I really don't know why anyone would have a problem with the stack frame. You could always opt to write code without it (globals only). Now that would be disgusting. But you wanna talk about stupid holdovers: 1. PASCAL stack frames in a C language API. 2. The keywords far and near and their derivatives. 3. typedef DWORD, UNIT, ULONG, UINT32, LPARAM, WPARAM - all meaning the same thing, signifying nothing. 4. typedef's which obfuscate pointers: LPVOID, LPSTR, ... 5. typedef struct , What do people have against struct XXX ? 6. IO Ports. 7. The EGA/VGA register set. 8. Using the BIOS for anything other than a bootloader. 9. Using #define IN, OUT when you really mean const/non-const. Just a few off the top o' my head.
Wed 26 Feb | Alyosha` | In total agreement about HTML/CGI being the standard for thin client access on the web. I liked HTML back when it was simple, and rendered the same on everyone's browser. The first perversion was when the browsers started diverging in the extensions to HTML supported, and 'best viewed with IE at 800x600 resolution' became a common sight. And then over the years a virtual tower of Babel was been built on top of HTML -- CGI made it a two-way information exchange, CSS tried to add fully-featured publishing layout, JScript turned web browsers interpreters of a second-rate language. And all the plugins that are considered 'necessary' ... Flash, Java, Acrobat Reader ... These days I've seen all the whizzy HTML/scripting stuff that ASP.Net does to make HTML elements on the client appear as if they were on the server programmatically, and I become more and more convinced that web development is no more than a huge kludge on top of a broken metaphor. I have a sneaky suspicion that web development will soon collapse under its own weight, and that five years from now people will be surfing the web with Citrix clients.
Wed 26 Feb | JSR $FFD2 | Well said, and the sooner, the better
Wed 26 Feb | Down with file extensions | One of my favorites is embedding metadata in names, especially filenames and program identifiers. Changing the name of something shouldn't change its identity or alter its behavior or other unrelated properties. File extensions are archaic.
Wed 26 Feb | Thats the way the money goes | Files and directories. Fixed field structures in databases.
Wed 26 Feb | Tom Fairlie | FWIW, my bother is how everyone pads their schedules at each step along the way rather than at the end. Read Joel's column on this here (http://www.joelonsoftware.com/news/20021119.html). When I worked at AT&T (pre-Lucent), we had a huge engineering force that continually delievered projects late to our customers. They wanted a turnaround of less than 2 months and we could never beat 6. Then one day a director implemented a new scheduling system. The process didn't change all that much, but the completion dates for each step were calculated to be half of what they used to be. Of course, everyone b*tched about these ridiculous dates (I was a little upset too), but after about a month or so of complaining, we found that we were able to do the same job in half the time without extra hours or less quality. Sure, people were pissed, but the experiment worked. Ever since that experience, I try to make dates as tight as possible and manage the risk with padding at the end.
Fri 28 Feb | Brent P. Newhall | Tom: I'm surprised. I'd expect the engineers to become gradually more demoralized as they were repeatedly faced with impossible schedules.
Fri 28 Feb | David Clayworth | Interesting post Tom. I'd really be interested to know why this shortening of the deadlines achieved the result it did. I've seen plenty of cases where unrealistic deadlines had the opposite effect - things either took much longer or the quality dropped so low that it had to be redone. The best explanation I can think of is that developers were 'gold plating' their work, in the sense of adding features that weren't strictly necessary, or using the time to investigate algorithmically nice solutions, and that the reduced timescales got everybody focussing on what was important. Is it also possible that there was work that needed to be done that was not really in the schedules, and that putting the padding at the end allowed time to do it?
Most Admirable Person in IT | Mon 24 Feb | Sweetness and Light
OK, to expand on the the least Admirable person in IT below, who are the most admirable? Forget technical prowess or allegiance to whatever technology, corporation, school of thought, etc - who seems to have had a significant impact while keeping their heart in the right place? Im afraid well get fewer responses than the earlier post, but they may be more useful. My candidate is Tim Berners-Lee.
Mon 24 Feb | Bored Bystander | Now we're getting somewhere: A few candidates. The Woz (as though he were an inanimate object :-) ). UC's Professor Norm Matloff. Jerry Weinberg, the 'IT consultant's consultant' - he's kind of the alternate universe Jonathan Goodyear (Jerry even has a beard but happens to be the 'good' consultant, not the evil one! :-) ) Larry Wall, inventor of Perl. Hewlett and Packard, the founders of HP (do engineers and not CS people count? ;-) ) I'll add more as they come to mind.
Tue 25 Feb | 0.02cents | Elvis Costello!
Tue 25 Feb | Alyosha` | Second vote for Larry Wall. You read his state of the onion speeches, he's funny, he's a genius, and yet he's still down to earth, hasn't let success go to his head ... Okay, okay, I admit perl has quite possibly the wonkiest OO support I've ever seen in a language, and okay, maybe I don't agree with his religious beliefs much either, but he's still obviously a very bright guy.
Tue 25 Feb | Bored Bystander | >> Second vote for Larry Wall. >> ... okay, maybe I don't agree with his religious beliefs much either Actually, that's mostly why I named him (flame away, someone. :-) ) Atheism and agnosticism (and perhaps Trekkism ;-) ) are the politically correct state religions of most IT people and codeheads. Darwin fish on programmer's trunk lids are a dreary dime a dozen. So it's refreshing to hear someone who is an intense coder who also has a spiritual life that he acknowledges publicly and places in context to his achievements.
Tue 25 Feb | Simon Lucy | I've never quite understood what religious beliefs or the lack of them have to do with the ability to work. Mind, Larry Wall would be reasonably high on a list of reasonably good people in a world of a reasonably large number of reasonably good people. Other than that my compulsive disorders don't include compiling lists.
Tue 25 Feb | raindog | Me too: Larry Wall
Tue 25 Feb | Just me (Sir to you) | Bill Gates. No contest.
Tue 25 Feb | Nice | Knuth, Trovalds, me?
Tue 25 Feb | Matthew Lock | I'll vote for Larry too. What a genius to say 'The chief virtures of a programmer are laziness, impatience and hubris' As for OO support in Perl, I would say that Cpan.org (a mega library of reusable Perl modules) is what OO is really all about.
Tue 25 Feb | Scott Stonehouse | I'll second the vote for Jerry Weinberg. If only we all had that kind of common sense. Add Anders Heljsberg to the list.
Tue 25 Feb | Patrik | An old 'idol' in the computer field with me was Peter Norton, he wrote some cool stuff back in the day. As for most admirable, I dont know. I'll also give a second vote for Anders Heljsberg.
Tue 25 Feb | me too'er | Larry Wall
Tue 25 Feb | The Real PC | [it's refreshing to hear someone who is an intense coder who also has a spiritual life that he acknowledges publicly] Yes, Larry Wall, my hero. I wish he would write a book about his ideas and experiences.
Tue 25 Feb | Neil E | I'm surprised no-one's mentioned Richard Stallman.
Tue 25 Feb | Just me (Sir to you) | I did mentioned him, in the 'least admirable person in IT' tread ;-).
Tue 25 Feb | Robert Moir | David Cutler Anders Heljsberg Bill Gates Linus Torvalds Steve Jobs
Tue 25 Feb | Li-fan Chen | My mother, she advocated moderation in computing. Her ability to see the future is amazing.
Tue 25 Feb | Anonymous Coward | Come on, one cool hack does not make admirable. Try: Donald Knuth Edsgar Dijkstra Niklaus Wirth Adm. Grace Hopper John von Neuman Alan Turing Alonzo Church Dennis Ritchie Marvin Minsky John McCarthy
Tue 25 Feb | Just me (Sir to you) | +1 for Alan Turing
Tue 25 Feb | Ros | Larry Wall for me too.
Tue 25 Feb | fool for python | Guido, of course ;-) oh, and that Knuth guy too.
Tue 25 Feb | Tj | Stallman certainly fits as a very principled person, especially since people love to hate him. Some obscure ones: Doug McIlroy - software 'engineering' http://www.cs.ncl.ac.uk/old/people/brian.randell/home.formal/NATO/index.html Eugenia Loli-Queru - osnews.com, an interesting and influential site for people like me who find OSes boring Grace Hopper - first compiler, the A-O; she took years to push 'programming languages' as a user-friendly interface
Tue 25 Feb | Brent P. Newhall | Seymour Cray. A genius who pushed forward high-end computing for decades, and by all accounts, the nicest guy you'd ever want to meet. I do admire Bill Gates. He's got his priorities straight, and he doesn't power trip. I also admire Larry Wall.
Tue 25 Feb | Cletus | My vote goes to: Anders Hejlsberg - father of Turbo Pascal, Delphi & C#
Tue 25 Feb | Cletus | One more vote: Alan Kay - Father of Smalltalk and Object Oriented Programming
Tue 25 Feb | Mike Swieton | If we're going back that far, why not Turing/von Neumann? I'll second Knuth, and EWD and friends. Also: not quite IT, but he was software dev.: Seumas McNally.
Tue 25 Feb | Philippe Back | Steve Mc Connell
Tue 25 Feb | Nice | slight modification to my votes: turing, wirth, knuth, tovalds, me
Tue 25 Feb | Sven | Tony Hoare, for CSP Kernighan and Ritchie, for 'The C Programming Language' Rob Pike, for describing the likes of C++ as 'a vile tar baby of gotchas and mysteries'. Whoever it was that described UML as 'industrial strength hand-waving' and 'the computer science equivalent of an elephant dump'.
Wed 26 Feb | Billy Basic | John Kemeny and Thomas Kurtz, original designers of Basic in 1964. They invented a simple elegant language which was corrupted by later versions. Their book 'back to basic' is a real gem.
Wed 26 Feb | Ian Stallings | I always admired Donald Knuth after I listened to his 'God and Computers' lectures. A very down to earth person, even if his head is in the clouds.
Wed 26 Feb | web service admin/developer | Gosling Tim Berners Lee Jamie Zawinski for making programmers seem like rock stars!
Wed 26 Feb | Rasmus | My vote goes to Alan Turing. But since it seems like you have more than one vote on this issue, Tim Berners Lee could get one too. Bill Gates and Steve Jobs are also obvious in this category. And so many others...
Wed 26 Feb | Mike Swieton | I must disagree with the Gates nomination... True, he helped the industry along, but I his genius has always leaned the way of business and marketing rather than technology. I won't debate Microsoft's tactics, but I'll concede his effectiveness in leading MS. But I really can't say he's done much to push technology. I won't place him in the same category as Tom Knoll (Adobe), or Ray Tomlinson (email).
Thu 27 Feb | Go Linux Go! | No mention of Fred Brooks, the author of 'The Mythical Man Month'? Off the top of my head I think of Knuth, 'K&R', Torvalds and even Booch with his silly little diagrams.
Thu 27 Feb | Go Linux Go! | Hmmm..Does Gates qualify? While his contributions in a pure technical sense are pretty small, his business and marketing acumen have been the catalyst for change that can hardly be measured. Love or hate Microsoft, there is no doubt that they have literally changed the world. And without Bill Gates leading it, it's doubtful MS would have become what it is today.
Thu 27 Feb | Kyralessa | Tim O'Reilly. It's so nice to be able to pick up a book and know that it's not going to have 2-inch margins, 18-point type, and six blank pages at the end of every chapter just so it takes up three inches of thickness on the shelf. It's good, in other words, to know that someone out there still has the goal of educating people on subjects, not just making a quick buck. (Runner up: Sybex, on the virtue of their Access Developer's Handbooks.)
Fri 28 Feb | Just me (Sir to you) | On the subject of Gates: How many other successful CEO's of big software companies do you know that have the technical skills to actually take part in architectural meetings and even code reviews? Even just combing al these skills in one person for me qualifies as admirable in every sense of the word. What does he do when being CEO becomes just a life of waffeling with legal to shake of the parasites? He goes back to what he likes best: designing future tech for his company. Oh and as a sidekick he also uses his wealth to make the world a better place, and studies science for fun. Admirable in my book? You betcha!
Big Macs, Naked Chefs, GM, Aztec, and Microsoft | Mon 24 Feb | Albert D. Kallal
I was answering a question here about the palm and documents to go. I made a comment about something being dead obvious. The response got me thinking as to why, or how does a company make a mistake when it is so obvious. The comment was: ========================================= What is obviously needed may be dead obvious to you, but not necessarily to the folks at Microsoft. This is not a dig at Microsoft, or you. ==================================== My thougts are not in any way directed to the above poster, but it did get me thinking.... Hence, my thougts: Actually, in my case, it IS a dig at Microsoft. There is NO excuse for a company that DOES NOT do what is obviously correct. My comments about corporate culture is exactly on this point. A good company run with a strong engineering culture virtually ALWAYS does much better then does a company run by committee/marketing people. A well run company will do what is obviously correct. A great example of this committee stuff is General Motors. I am sure you have seen the Aztec vehicle. When it came out it was the most ugly vehicle I had ever seen. The problem is NOT the Aztec, but the fact the product actually GOT TO MARKET!!! Anyone with a brain could see instant failure. I certainly did! Thankfully, the market also agrees with me, even if people don’t!!! Of course the market studies right now show that the Aztec has the highest customer satisfaction of any GM vehicle sold. I would think it has to have the highest customer satisfaction if you did actually get a customer to buy one! It would really have to be blind love! Of course now the problem is not that the vehicle is so ugly, but the fact that they only sold 10,000 units. GM is now desperately trying to figure out what to do with this flop. Companys like Honda that have a very strong engineering presence in the management and marketing side that don’t allow stupidity like the Aztecs to happen. You get fired long before something like that happens!! That is why Honda can come out with a top selling car in the US year after year. GM easily has the engineering resources that Honda has, but just can’t get the product mix correct in the car market. This is due to design by committee, not enginerring issues. Now, lets get back to why this is such a big deal for Microsoft. Companies that are smart dont make obvious mistakes. Only companies that are run by committee and marketing departments do.!!! Joel has a great article on the substitution of talent in place of capable people. That article: Big Macs vs. The Naked Chef http://www.joelonsoftware.com/articles/fog0000000024.html I want to be clear here about my comments on Microsoft. I still consider MS a very good company. They are first rate. They also convert code into dollars. Just because you don’t think Macdonalds makes the best burgers is not reason to wine! However MS is showing signs of making mistakes due to design by committee. This is not the best, and I wish for better. Now, lets take Joel’s above example, and I’lll explain what it means from a product point of view. MacDonald’s, the most successful fast good company in the US decided to expand their market into one of the most lucrative areas of the U.S. food market. The mere announcement of Macdonald’s expanding into other areas of the fast food business sent shock waves throughout the industry. Of course, I am talking about the huge market for pizza in the USA. After Macdonald’s announced they would be getting into the pizza business, executives at Pizza Hut, and Domino’s Pizza started building bomb shelters. They also no doubt installed windows in their offices that could open, so the day when Macdonald’s moved into the pizza business they would be able to jump out of their office windows and ot suffer much humiliation. That new oven Macdonald’s was working was going to reduce the 20+ minutes time to cook a pizza down 4 minutes flat. Again, executives in at Dominos and pizza hut began to build more bomb shelters and pull kids out of college as they know soon they would not have their jobs, and could not afford school for their children. It was not going to be war, but how much of a defeat, or loss that Pizza Hut and Dominos was going to concede to the mighty invincible Macdonald’s. Not only was Macdonald’s building a new super Duper oven to kill the competition, but hired to one of the worlds best cooks. The number of cheeses they were testing was just about every possible cheese that existed. McDonalds was spending more on finding cheese than the competition does actually purchasing cheese!! Again, Macdonald’s was striking fear into the competitors hearts, very much like the terminator T-2000 units does when he starts chasing you. Nothing will stop this machine! Of course, the real problem with all the high-technology, high-tech ovens, super marketing, top-flight cook, the end result was a dismal failure. The result was at best a quick snack pizza thing. Not much better than a cheap frozen super market pizza. (in fact those were better!). The goals, and dreams and execution of that pizza was very poor. If you think much about this, Macdonald’s really did blow a golden opportunity. So poor is the pizza, that most outfits stopped selling it. Despite the best people, and first-rate technology, despite the fact that they even conquered things that the industry thought impossible such as reducing wait times to below 5 minutes, the end was poor. One year later no one I know when they are going out to buy a pizza thinks of Macdonald’s. Fact is, Macdonald’s stopped selling the larger 12’ take out pizza’s. The same failure applies to the GM Aztec. In both of the above cases, I could easily saved those companies those dollars, and told them via a common sense they were doing the wrong thing. They did not need to blindly follow the committees stuff. Without people with a strong conviction, and good taste in designs, then the only substitution is to do it by committee. I didnt need a committee to tell me that these products would be incredible flops. The first time I saw either, it took about 5 secons of my time to figure this out. It is easy to hire people that dont know better. It is hard to hire people that do know better! I recall a good article when Ford is gambling a lot of companies future on the new Ford Taurus. Feedback was showing that many drivers who tested the car said that the steering wheel feel was too heavy. The head engineer stood up and said forget it, I am not changing this. The steering feel and effort is a integral part of this product, it is the way it should be. In the long run consumers will like it more. Not only did consumers like the steering feel more, but all the magazines that reviewed the car commented how solid and taunt the steering felt. In other words, people who really know about cars also took notice. That engineer stood up, and made the right decision despite the marketing feed back saying other wise. The whole auto industry changed as a result of this. The whole industry started to increase steering effort. There is a number of mistakes that MS made in word XP for office. They are dead obvious to me, and they dead wrong. These mistakes are minor, and are no doubt results of design by committee. Theyre not going to hurt, make, or break the product here. However, word 2000, and word 97 does not have these obvious mistakes in them. As mentioned, it will not kill the product, but it does signal the start of design by committee. When a company starts making obvious design mistakes…you darn rights I notice. By they way, McDonalds had the pizza failure. Microsoft right now is dealing with the x-box. Will they continue to fight for this video market?, or let it go? Will they continue to pour money into x-box? For how long? Be it going after the large pizza market, or the now huge market of video games (larger then Hollywood now it is!!)., it is most certainly a big deal that a company makes obvious mistakes. (and I am not saying/hinting that x-box is a mistake). So, is Microsoft making obvious mistakes to me? Yes, as a matter fact they are, and to be honest, the solution is to hire more people like me, or start allowing those people to stand up and say no when they should. Albert D. Kallal Edmonton, Alberta Canada Kallal@nsn.com
Mon 24 Feb | Prakash S | I read this joke somewhere: A committee decides to design a horse, they talk about it, decide, confront each others feature request, etc.... The end result: A CAMEL :-) ---------------------------------------- Hey Albert, >Microsoft right now is dealing with the x-box. Will they >continue to fight for this video market?, or let it go? Will >they continue to pour money into x-box? I entirely disagree with you on this. Microsoft keeps losing more and more money on the X-Box, which is actually a good thing. Now before you start calling me a freakin idiot, (Oh! you already did - never mind!) let me explain: Microsoft loses around $ 100 for every box they sell. It is obvious that they are losing more because they are selling more. The advantage Microsoft has by selling so many X-Box's is that they are pretty much installing a huge platform base (Advantage no 1.), which they can use in the future for whatever they want. My guess is most people who buy an X-Box already have a PC that runs Windows at home. (Advantage no 2) These 2 advantages coupled together, can be used to great benefits for Microsoft.(I am very sure at the moment) My guess is Microsoft is going in this direction. Hats off to Steve Ballmer on this great strategy.
Mon 24 Feb | Prakash S | These 2 advantages coupled together, can be used to great benefits for Microsoft.(I am very sure at the moment) Should Read: These 2 advantages coupled together, can be used to great benefits for Microsoft.(I am NOT very sure at the moment)
Mon 24 Feb | Matthew Lock | One pet theory I have about why PocketPCs don't handle MS Office documents as well as Palms is that MS has a dilema with it's Windows XP Tablet thingy. This is if PocketPCs handled Office perfectly it would cut into the market of their Tablet PC. This is what prevented IBM from introducing the first 386 based PC in the eighties. The 386 would directly compete in performance with the power of their larger computers at the time. So Compaq was left to introduce the first 386.
Mon 24 Feb | Nat Ersoz | If you ask me (and I realize no one did), MSFT made some good decisions and some not-as-good decisions when tackling the X-box market. If you haven't already done so, read about the Beauty Contest on salon.com (before salon goes kaput): http://archive.salon.com/tech/books/2002/04/25/opening_the_xbox_excerpt/ The software decisions, IMO, were many of the right ones: 1. Use embedded NT. NT is MSFT's closest thing to a deterministic OS (as opposed to WinCE) and offers fewer bugs and better performance. 2. Concentrate on games, and don't get distracted (yet). It is MSFT's knee-jerk reaction to pile everything into the release possible. By defending their core market (games) the X-box team did not allow Office to get included in the build. Not so good decisions: 1. They don't have an ASIC design team, and perhaps never will. Their competition does. So while MSFT negotiates with NVDA, INTL, for pricing, Sony is vertically integrates their part into a fanless single chip solution. 2. The higher end graphics, which costs money, is spent on NTSC television which is limited to at best 640x480 interlaced resolution. It just doesn't pay off. To their credit, there are alot of gamers in the US who think that the Xbox is da-bomb. The question is, however, are these the same gamers that would rather play on a PC? A customizeable keyboard/mouse combination will fragulate a gamepad system any day. 'Game of the year' games are Return To Castle Wolfenstein, Unreal Tournament, Doom, etc. Which really are best on a PC, and a PC based player will solidly trounce the gamepad. There are no shortage of free (as in beer) servers for GOTY games, so why pay subscription prices for a 'zone'? Ok, I'm rambling... Nevertheless, alot of gamers like the Xbox, so iit contradicts the Aztec failure model. Sales are very good in the US - fair to poor elsewhere. BUT... MSFT has to find new revenue. Its profits are based on 2 products: WinNT/XP and Office. That's it. Everything else is a loss right now. The Cell phone and embedded space strategy makes *lots* of sense. They have to broaden their markets. One day the desktop market will fail to deliver profits and they had better have made new gains elsewhere to continue growth. The new MSN advertising campaign is excellent. I would guess (without any real knowledge) that they are attracting AOL subscribers en mass. The AOL consumer wants 1. Friendly 2. Cheap MSN is advertising both, and providing a convincing story about sheilding you from the worst of the web. Meanwhile, AOL flounders and serves pop-ups. I'll guess that in 2-3 years, AOL won't be losing any more money because they won't exist. Just one person's opinion. And yes, MSFT does suffer from design by comittee in the worst sense - but not on Xbox, IMO.
Tue 25 Feb | No offense ... | Interesting thread … Is X-Box a mistake? I’m have an interest in whether it’s worthwhile to learn about and develop for this platform. X-Box is doing well in North America, but is hurting worldwide. Sony’s PS2 is still king. And if we are going to talk about GM & Microsoft, Sony is a pretty amazing company in it's own right.. Their products are overpriced, but I’m typing this while looking at my Sony monitor and listening to my Sony TV. Whereas Microsoft suffers a public image problem, Sony became and continues to be powerful through deliberate and clever brand name association and by being synonymous with quality. Well anyways … Microsoft created an overpowered, too-expensive box with not enough marquee titles when it was released. And now Microsoft has to sell them at a loss just to compete with Sony for market share. HOWEVER … Others have mentioned this before: one of the things Microsoft is great at is evangelizing their platforms. They are doing the same thing with X-Box as they have historically done, and IMHO they are successfully muscling into the entertainment market. Although my only experience is with PC-based DX, developers seem to like the X-Box. (any X-Box developers here care to comment?) More great titles are filling the shelves, and the X-Box install base continues to grow. Gee, we’ve seen this pattern before. I don’t know how true it is or how this statistic was arrived at, but I’ve heard that an X-Box owner must purchase 7 titles for Microsoft to break even. But that hardly sound unreasonable to me, everyone who owns one of these things seems to love it. I could be wrong, but I just don’t see X-Box going away. BTW … I hadn’t even heard of the Aztec. So I looked it up on Google … EEEEWWWW!!! I think I’ll keep my pick-up.
Tue 25 Feb | AR | There's a theory that the humble games console will eventually morph into a set-top, internet-enabled consumer appliance that people will use for many tasks that are currently the domain of the PC. Microsoft probably thinks the chance of a slice of this potentially huge business is worth losing millions on the X-box for a few years.
Tue 25 Feb | Nat Ersoz | 'There's a theory that the humble games console will eventually morph into a set-top, internet-enabled consumer appliance...' Yes, BUT. Right now they compete against Sony and Nintendo. The day they become a consumer device manufacturer they compete against Philips, Matsuhita, Toshiba, Thomson, Hitachi, ... All large volume CE manufacturers accustomed to surviving/thriving in a low margin vertically integrated world. Also, these companies hold some of the largest patent portfolios known to man. Is MSFT ready for that? Instead of partners buying into the software platform, they now have competitors using VxWorks or Linux. MSFT has to be sure that they're sure when they're ready to pull that trigger.
Tue 25 Feb | Albert D. Kallal | The x-box thing is the most interesting business battle I have ever witnessed. If you are a business student, and looking to write a paper, this is the baby to write about. This is the most interesting business venture I have seen in my life time. The reason why it is so interesting is that Microsoft is VERY GOOD at what they do. They are a formable company. So is Sony! That is why this is so interesting. Two very good companies are going at each other as best they can! WordPerfect and Lotus was eaten for breakfast by MS. Of course, those companies made those obvious mistakes! Sony is not one of those lousily run companies. There is no hint that this battle is over. I would rather study this battle then watch TV. If I could just spend full time writing a book on this..I would!! Stay tuned, but lets hope the decisions by committee does not hurt this war! Albert D. Kallal Edmonton, Alberta Canada kallal@msn.com
Tue 25 Feb | AR | 'Is MSFT ready for that? ' The money isn't in selling the hardware. The money's in controlling the platform and charging transaction costs on everything the user does on the net.
Tue 25 Feb | Just me (Sir to you) | Let's be clear about this. From MS not to buikd a hardware platform would be 'a big mistake'. Every other competitor to them on major fronts owns a hardware platform (Apple, Sun, IBM, Sony, ...), and can use it at will in a very competitive battle. (The following part is speculation gatered from sprockets here and there, so please correct this if you have better info. As I gather most contracts with Sony in this respect are NDA'ed) Look at the game console market. Sony owns this space. There is no 'open standards' there. Sony is the only company for the box, and Sony decides what can run on it and what can't, and at what price it can be sold. Imagine a world where their is only one PC maker, Microsoft. They release one new model every 5 years. To be allowed to produce software for it you have to have an Official (costly) Microsoft Developer Licence. You write your software and submit it for review to Microsoft. they tell you what goes and doesn't, set the price for you, and then you pay a stiff royalty for every copy you sell to Microsoft. Oh, and in that scenario Microsoft would be absolutely free of any 'monopoly' troubles.
Tue 25 Feb | Random | 'A customizeable keyboard/mouse combination will fragulate a gamepad system any day. ' Of course, you are aware that gamepads exist for the PC too? We use a normal PC instead of a PS2 or an X-Box (it's behind the TV). It lets us record / pause (a la TIVO, but with more control), play normal PC games (wireless keyboard / mouse), play PC versions of games for gaming consoles (using our gamepads), surf the web, and use the TV as a slideshow for our digital pictures. We also (more importantly) maintain a remote session to it from various (much slower) consoles scattered through the house, which allows us to actually do real work on it (there's a limit to how much you can do at TV resolution). I have no idea why I'd ever want to buy an X-Box or PS2, other than it is cheaper hardware. But in my case, we needed the computer anyway, so it's a moot point.
Tue 25 Feb | Nat Ersoz | Albert is right: it is the most interesting business conflict (war) to watch at the moment and for some time to come. A clash of technically competent titans who have their heads screwed on frontwards. Fascinating. I read somewhere that in 2002 game revenues outstripped Hollywood's film revenues. With acceleration.
Tue 25 Feb | doobius | Microsoft ARE very good at what they do. Chevy and Hundai are very good at what they do and they sell tons o' cars.
Tue 25 Feb | Brent P. Newhall | As the one who originally posted the 'it may be obvious to you, but not to the folks at Microsoft' statement, I'll take this opportunity to clarify. :-) My intent there was merely to point out that we each have different goals, pressures, and information sources. What's obviously good for Microsoft? We can decide based on the information we have. But the VP in charge of new product development at Microsoft has a completely different set of inputs and pressures to perform, and thus may make wildly different decisions than we do. And this doesn't mean that the Microsoft VP is stupid or that his/her behavior is inexcusable. It may result in a fiasco, but it wasn't necessarily due to raw stupidity. By the way, I'm glad that my comment sparked some discussion. It was intended to provide a different perspective, nothing more. I hope you take no offense.
Tue 25 Feb | David Clayworth | Why do we think that a strong engineering presence at board level would have stopped the Aztec? Are engineers more qualified than others to pronounce a car ugly?
Tue 25 Feb | Aztec == Element | The Honda Element is just as ugly as the Aztec. It is pretty much the same car in concept, design, implementation and marketing.
Tue 25 Feb | MS + Nintendo > Sony | Nintendo will soon stop making boxes and become primarily a software company (they have maybe 1 more set top box, though hand held could last quite a bit longer). Microsoft will partner with Nintendo and crush Sony in the video game market. Sony is a hardware company and video games are software. The software company will win in time.
Tue 25 Feb | Prakash S | 'I read somewhere that in 2002 game revenues outstripped Hollywood's film revenues. With acceleration. ' - Nat you are right about that. Not sure where I read it, but Hollywood made around $8 billion whereas the gaming industry made $11 billion.
Tue 25 Feb | Prakash S | Does anyone know if MSFT is venturing into online game models like EA or Sony?
Tue 25 Feb |   | >A good company run with a strong engineering culture >virtually ALWAYS does much better then does a company >run by committee/marketing people. god what a load of BS. that may be your experience, but it sure as hell isn't mine nor the vast majority of the fortune 2000.
Tue 25 Feb | X. J. Scott | Albert, Your article was insightful, but also really hilarious! Great examples you come up with, love the bit about installing windows and pulling kids out of college. You should take this on the road as stand-up comedy, or get yourself a syndicated column as you have a real knack for this stuff. I can't think of any other IT articles I find as good+humorous.
Tue 25 Feb | Brian Hall | The money isn't in selling the hardware. The money's in controlling the platform and charging transaction costs on everything the user does on the net. Why on earth would consumers want a POS like that? That sounds dangerously close to the fax machine faux paux at FedEx ( :D ). It would be attempting to sell a good as a service - the internet and software is so useful that people would largely just assume buy the stuff as a product, not as a service (regardless of how much Microsoft wants it to be otherwise - specialized software services have a good chance, but Microsoft isn't presently suited for such activity). Further, services are an ongoing committment, and from a company with such a bad rep for consistent reliability over time, and little to no trust at all? Eck. Would suck to be the guys held responsible for the outcome of THAT sort of strategy. All of this greatly reeks of a lack of focus on...ready for it...the CONSUMER. Inspire developers? Since when do developers need 'inspiration'? Internet appliances that do pretty much 'exactly what a computer does...just, you know, not all of it, and some stuff computers don't do that you probably don't care about anyway'. Why on earth would I want that? And for that matter, why on earth would they want to re-invent the wheel (the wheel being the PC and the laptop, only in a stripped-down version) like that? It seems like they are looking for a way to make money first, then trying to find a way to get people to buy it. But, maybe that's just me.
Tue 25 Feb | Philip Janus | 'Nintendo will soon stop making boxes and become primarily a software company (they have maybe 1 more set top box, though hand held could last quite a bit longer). Microsoft will partner with Nintendo and crush Sony in the video game market. Sony is a hardware company and video games are software. The software company will win in time. ' Nope. Manufacturing the hardware is exactly *why* Sony and Nintendo are kicking MS's ass. I read an article a while ago but can't find it now - the flaw in Microsoft's plan is they bought into the 'sell the platform at a loss and reap the rewards on teh software' concept. The problem is that Sony and Nintendo don't sell their platforms at a loss. What they do is sell at a very, very narrow margin (which they can do, being manufacturer and retailer), and then as they improve/optimize the hardware, they use those savings to reduce the cost of the platform. But it's always profitable. One example was that Sony folded the CPU and graphics chips together, saving manufacturing costs. There's no way Microsoft will ever get Intel and nVidia to agree on *that* plan. So I wouldn't expect to see Sony or Nintendo getting out of the hardware market anytime soon - it's not a burden, it's the key to their success. Philo
Tue 25 Feb | RocketJeff | Sony is making money on PS2's, but I'm not too sure about Nintendo and their Game Cube. Sales have been slugish (far below predictions) so they can't spread out the R&D costs as well and they probably aren't getting the quantity breaks on components. 'Gord' did an excellent analysis of the Game Cube (even though it is a bit old now): http://www.actsofgord.com/Proclamations/chapter01.html The next chapter discusses the 'consoles have always been sold below cost' myth. BTW: http://www.actsofgord.com/ is an excellent way to waste an afternoon. Just make sure you're not drinking a carbonated beverage (or milk...) when you read it, it *will* be coming out your nose...
Tue 25 Feb | Bill Carlson | Very enjoyable read, Albert. Your posts are always an asset to this forum. I would argue that at least some of the flops you mentioned were not the result of incompetance, but were the result of democracy thriving over dictatorship. Brains and vision are not enough to realize an idea. No one would've imagined an Aztek (I hope). Actualizing an intact vision requires power and control. Absent this, you have compromise. Companies are hesitant to centralize power in the hands of one person for fear that the lack of checks and balances will invite danger. I believe the converse danger of compromise is understated in most cases. Fundamentally (and as an engineer, it pains me to say this), marketing should hold the upper hand in decision making. Because, really, mass market products are not _usually_ about relationships and customer happiness, they're about getting the sale now, so we can all get paid. However, this does not excuse focus group myopia, featuritis, and other ailments of 'marketing folks'. One can overengineer a product for marketing merits just as easily as it can be overengineered for technical merits. What's the answer? Someone needs absolute veto power. No compromise idea that is obviously bad to all should be allowed to see the light of day. Can one person be trusted to see all sides? Sure. It happens every day. CEOs do it. Sole proprietors. People controling their own personal lives. Obviously, only the highest level of competancy and common sense is acceptible to decide 'make or break' product direction for a Fortune 500 company, but people that are able to do this are out there. Hire them and realize that an 80/20 success ratio with someone to blame is better than a 50/50 ratio with no one to blame.
Wed 26 Feb | Just me (Sir to you) | According to this article http://sega.gamerweb.com/features/ps2market.asp Sony does not only make no profits on the PS2, but have a worse break-even point than most of their competitors: In 'game sales needed to break even on the hardware' PS2: 14 PSX: 9 Dreamcast (Japan) 6 Dreamcast (US) 5 I am no expert in these matters, and the source of the above article certainly means these figures should be scrutinized. I believe I once heard that the number for the XBox is 4. Anyoe have more info on this?
Wed 26 Feb | RocketJeff | >>According to this article http://sega.gamerweb.com/features/ps2market.asp Sony does not only make no profits on the PS2, but have a worse break-even point than most of their competitors: Of course, that article was dated Oct 26, 2000 (it's a little out of date). It also seemed to be a shill-piece for the Dreamcast (besides the fact that it's on a site dedicated to Sega products). Sega's Dreamcast is no longer being produced (although they're still at Best Buy for $50 on clearance...) and was the main reason for Sega getting out of the hardware business. If you look at *current* analysis of the PS2, Sony has easily recouped its development cost and has made it very cheap to produce. Even with its $100 price drop last year, most people think that - at worst - they're breaking even on the hardware.
Wed 26 Feb | Just me (Sir to you) | RocketJeff, could you provide a reference for that?
Wed 26 Feb | RocketJeff | From http://news.cnet.com/investor/brokeragecenter/newsitem-broker/0-9910-1082-9936518-0.html (05/21/02 - about a week or two after Sony dropped the PS2 price to $199): >> We believe that Sony is still breakeven on its PS2 hardware even with the price cuts, while Nintendo and Microsoft are taking deeper losses in order to catch up to the market leader. Sony PS2 has an installed base of 30 million units, while Xbox & GameCube have installed bases of approximately 4 million each. Of course, if they're breaking even at $199, they were making a pretty decent profit at $299 (even with the distributors/retailers taking their cut).
Wed 26 Feb | Just me (Sir to you) | Thanks RJ, In the mean time I quickly went over the financials and this seems to confirm your research. In 2001 Sony lost 51.1 Billion Yen in the Game segment, this was offset by a profit of 82.9 Billion Yen in 2002 in that same segment. Primary reason given here is the significant reduction in production cost for the PS2 platform. http://secfilings.nasdaq.com/filingFrameset.asp?FileName=0000950109%2D02%2D003508%2Etxt&FilePath=%5C2002%5C06%5C28%5C&CoName=SONY+CORP&FormType=20%2DF&RcvdDate=6%2F28%2F2002&pdf=
Wed 26 Feb | Slava | Good post, Albert! Although I disagree with some of its points, I like your style:) As for the MS vs Sony battle...I think that MS could easily win this battle using IBM PC vs Apple strategy. IBM PC platform won because it is open platform. If MS will make X-Box 2 an open game console platform, Sony's PS will die fast. MS will benefit from selling software for such open platform-based game consoles - and Sony couldn't go this way, they don't know how to write and sell software.
Wed 26 Feb | Just me (Sir to you) | Slava, but doesn't MS already have an open gaming platform: Windows?
Wed 26 Feb | Slava | Well, Windows is *software* platform. If MS will create a market for some Console Windows OS, they will benefit from this console OS sales and from game titles sales (MS sells games for Windows, so they will sell games for Console Windows). And of course they will sell Official (costly) Game Development Kits for this new platform:)
Wed 26 Feb | Slava | Should be: New *hardware* plus software platform.
Wed 26 Feb | Chris Tavares | Yeah, but if you have to use the official, expensive, game development kit, it's not really open, is it?
Wed 26 Feb | Slava | Well, look at the WinCE market. Everyone can build and ship WinCE or Pocket PC computers, right? But the CPU will be Intel, and the OS will be WinCE (Pocket PC). So it isn't *really* open, but it is open enough to make different manufacturers start producing and shipping WinCE/PocketPC-compatible devices. And every device purchased adds $$ to Bill's billions (hint: royalties). So the same goes to game consoles market: If Bill&Co will create a Xbox-compatible consoles market, and all these consoles will run ConsoleWindows, every XBox-compatible console purchased will make Bill&Co richer. And (as an addition) MS will be able to sell Official Game Dev.Kits, because they will knew the OS and the platform better then anyone else.
Thu 27 Feb | Just me (Sir to you) | So you p[ropose basically a new PC form factor for 'Windows Game Edition' (WGE). I think they are already pursuing this strategy with the Windows Media Center Edition. The problem for the 'WGE' strategy is that I do not see what is in there for the hardware partners, if the whole of the competition dumps their hardware at a loss and recupes in software royalties.
Thu 27 Feb | Slava | Why do you need to dump hardware at a loss?? Ok, let's go further: we have $199 Sony PS, and we have, say, $400 X-box2 compatible system. Xbox2 system is definitely faster, it has some limited upgradability (CPU, memory, integrated audio/video chip, may be HD or DVD drive), more games are available for the platform -for what reason you would prefer Sony in this situation? The key point here is using as many PC market parts as possible: CPUs, HDs, memory blocks - because all these parts are produced in very large numbers (read: cheeeeap parts!). Compare this to limited number of custom chips needed for PS (smaller parties -higher price).
Thu 27 Feb | Just me (Sir to you) | Doesn't the current XBox already use mostly PC parts. If as with the PS2 you are looking at production runs of maybe 50 million units, the volume advantage of the COTS PC parts dwindels considerably.
Thu 27 Feb | RocketJeff | >>Ok, let's go further: we have $199 Sony PS, and we have, say, $400 X-box2 compatible system. >>Xbox2 system is definitely faster, it has some limited upgradability (CPU, memory, integrated audio/video chip, may be HD or DVD drive), more games are available for the platform -for what reason you would prefer Sony in this situation? Because it's only $199 and does everything I want it to - it plays games (& DVD's) on my TV set. If I wanted an upgradable/expandable gaming system I'd buy a real PC. The PS2 will still have an installed base of 30 million - companies will still be writing new games for it long after the PS3 is released (heck, companies are still writing games for the PS1). In fact, in your scenario, every game released for the X-compatable system will probably be released for the PS2 also. In the current games market, there are plenty of 'exclusive' games for each platform because the console manufactures pay for this - there wouldn't be anyone with the financial incentive to do this for your X-compatable system.
Thu 27 Feb | Slava | >>In fact, in your scenario, every game released for the X-compatable system will probably be released for the PS2 also.<< Nope. MS will have a set of tools that will allow PC game makers easily port PC games to WGE:) (many game titles), and it will be much harder to port PC games to PSX (not many game titles then). Or these games will be released for PSX, but with a lag. They already use this strategy against Palm, and it looks like Palm will perish sooner or later (probably later, because they've also 'opened' their platform). And, hey!, look, the price difference exist on this market too, but it doesn't stop customers buying Pocket PCs.
Thu 27 Feb | Stephen Jones | >>>>>And, hey!, look, the price difference exist on this market too, but it doesn't stop customers buying Pocket PCs. <<<<<<< Actually it's not the customers that buy the Pocket PC's , it's their companies. Individuals who have to foot the bill buy Palms. The same used to happen with laptops. Most were bought on expense accounts and were basically the overpriced executive toy wiith DVD players instead of CD/RW's and impractical keyboards. It was only when a significant number of purchasers were using thier own money that the price came down, CD/RW's became standard, and laptops started to be a pleasure to use.
Fri 28 Feb | Prakash S | > Individuals who have to foot the bill buy Palms. I paid for my pocket pc.
Fri 28 Feb | Just me (Sir to you) | 'It was only when a significant number of purchasers were using thier own money that the price came down' Or maybe it was only when the price came down that private persons became interested in buying.
Fri 28 Feb | Stephen Jones | Chicken and egg. But the trend with laptops now is towards usability as oipposed to high profile gadgetery. I have an HP Omnibook 6200 and it is the first laptop I enjoy working with. I still use the desktop in term time but spend three times as long with the computer on vacation as I used to.
Experience with CVS Dude? | Mon 24 Feb | Go Linux Go!
Ive got some friends that are needing a place to stuff their code so everyone can access it and they dont have their own public server to run CVS on. I came across this site, http://cvsdude.kicks-ass.org but I was curious if anyone had heard anything about them? The site claims to be a free place for folks to host their projects without opening up their code to the public. (Like SourceForge) Seems a little too good to be true, but....
Mon 24 Feb | robert | What are the requirements here? They need a server so that 'everyone can access it' but can't use sourceforge because it 'opens it up to the public.' Huh? It's not clear what they're trying to accomplish, so it's hard to give a suggestion.
Mon 24 Feb | Joe Blandy | I think he means 'open' in the 'open source' sense. Can't use sourceforge for closed projects.
Mon 24 Feb | Go Linux Go! | Sorry, I just figured everyone was familiar with SourceForge. SourceForge is a great place to host your Open Source software. However, you have no way of restricting anyone from downloading your source code. When you create your project, you agree to make it available under various licenses. With cvsdude.org, you create a project but you control who can download your source and you don't have to agree to make the software available via a GPL type license. Just wondering if anyone else is using them.
Mon 24 Feb | flamebait sr. | I'd give it a 50/50 change of long survival. Most free services dissapear for a few definable reasons, most of them having to do with being too popular. No company with a real product is going to want to take their chances with a service that might dissapear tomorrow. So the real companies who would potentially hammer it will probably not bother using it but spend the few thousand on a good linux box with CVS. Savanah and Sourceforge already do what most folks want anyway in the open source community, plus they provide a certain measure of advertising. Mostly the audience is folks who are just getting started on some closed-source project, and a good chunk of these folks won't get anywhere or put appreciable loads on the server. So as long as the site doesn't attract content that annoys somebody with lots of money for lawyers or get too popular, it might stick around...
Mon 24 Feb | Philip Janus | Why are you using source code control? I'm thinking half the reason is to protect your source code. So to do that you're giving the source code to someone you've never met and with whom you have no contract. Color me cynical, but... Philo
Mon 24 Feb | robert | 'Sorry, I just figured everyone was familiar with SourceForge.' I am quite familiar with sourceforge. What I'm not familar with is what you're trying to accomplish. But you gave a slightly better description this time. I have not used 'CVS Dude' but it doesn't give the impression of being professional or reliable - if for no other reason, the free dynamic IP domain is a tip that they have no budget and are probably just some guy or guys doing this for kicks. I wouldn't expect it to stay around long term. Why doesn't one of the parties involved run an sshd and host the repository?
Mon 24 Feb | Go Linux Go! | Thanks for the replies. The reason they aren't hosting it themselves is neither of these guys have their own dedicated server with an Internet connection and I'm not gonna let them use mine. :') Basically, they are looking some place to keep their stuff so everyone around the country can access it. Best I can tell, they aren't designing super secret stuff, they just don't want to make it available under GPL. Anyway, thanks for the replies.
Tue 25 Feb | Jan Derk | Is it me going too paranoid or does this topic look a lot like spam?
Tue 25 Feb | Go Linux Go! | Jan, I think you're just paranoid. I was asking a question if anyone has used these guys. Why you think that looks like spam is beyond me. Unless you think I'm somehow associated with them. Which I am not. But hey, if ya wanna be cynical and paranoid, be my guest.
Thu 27 Feb | Mark Bathie | Hi, I am the administrator and designer of CVSDude. I, along with other developers were once looking for a service like what we now offer and could not find anything on the net that we wanted. SourceForge wants you to jump through too many hoops and you can only host open source and others can download your code. CVSDude is a hassle free service that allows you to get started and keep going with your project. Obviously if you have your own server accessable 24x7, running CVS then you don't need CVSDude. At the moment there have been a few donations for our upgraded service. So we will be looking at moving to a bigger pipe and moving away from the Dynamic IP in the future as well as SSH access and horde/chora access (Graphical web CVS viewer). All CVSDude admins/developers have been working in the IT industry for years and we all have more than enough experience (especially Linux) to deal with the service (in case anyone was wondering). So it's up to you, if you like the service than great. If you don't then there is always SourceForge, etc. Mark.
Fri 28 Feb | Scott Bradley | I been a user of cvsdude for a number of months now and I can definitely recommend it. If you need a cvs repository you can access from any cvs client and need to control individual developer's access then its perfect. There was an opportunity that my friend and I saw in the market. Unfortuntately he had a contract in Dublin and I was in London. We were familiar with Sourceforge but needed retain our own ip. We found cvsdude, setup an account, downloaded eclipse and off we went. No hassles and only started paying once we got off the ground! Since then I've also set up a cvsdude account for company I am now working for. Developers are very expensive in London and not neccessarily the most technically competent. Therefore we outsource non-essential aspects of our software to developers from other countries. Using sites such as www.rentacoder.com we locate a developer, give him a specification, access to our source tree and work closely with them at each stage of development and testing. Once he's finished we restrict his access. The total cost of us developing components doing this is a fraction of the cost of us trying to do this with developers from the uk. Well done guys and keep up the good work ;-) Scott.
Favorite telnet client for Win32 | Sat 22 Feb | Jeff
Whats the best telnet client for Win32?
Mon 24 Feb | JD | Putty all the way!!!!!!!!! JD
Mon 24 Feb | Nice | 'There's no excuse (or good reason) to be using telnet in the year 2003. Unencrypted network logins suck.' Not all information is sensitive. Not all information is on a breachable network. Telnet isn't just about remote logins; it is an effective tool for developers creating trivial tcp-based protocols. And most of the telnet clients mentioned in this thread support secure logins (ssh etc).
Tue 25 Feb | Kyle Cordes | [but WinCVS needs a COMMAND LINE ssh] Another poster pointed out plink. Plink, the command-line SSH client in the PuTTY distribution, works very well for CVS / WinCVS over SSH.
Fri 28 Feb | Just me (Sir to you) | Vincent, have a look at https://sourceforge.net/docman/display_doc.php?docid=766&group_id=1 for a detailed explanation of using WinCVS with Putty and Plink.
FTP Relay? | Fri 21 Feb | Philip Janus
Ive got a 3-tier system on a standard dual firewall network: Internet |FW| Web Server |FW| DB & App Servers The application server works with files transferred in and out from other systems on the internet (similar to biztalk) So the question - how should the files be moved from the net to the app server? Whats the best practice in this situation? The most obvious solution for me is to have an FTP Relay system running on the web server, but googling ftp relay produces an amazing lack of hits, which makes me think not many people are doing this. My suspicion is that most people just open Port 21 all the way through the DMZ, but that defeats the purpose of having a DMZ, doesnt it? What say ye? Philo
Fri 28 Feb | | Philo - I'm curious, what did you eventually do?
Worst interviewer ever | Mon 17 Feb | Better than being unemployed...
Last Friday, I was unfortunate enough to be interviewed by probably the most unprofessional interviewer I have ever seen. Amongst some of his atonishing mistakes were : * Asked me if I was married - this is illegal (unless the job description has a good explicit reason not to hire married people, and I cant think of one... ) * Didnt have my CV to hand, and hadnt read one word of it anyway * Interrupted me mid sentence * Swore (counted two f**ks) * Held the interview in his main office without diverting calls, but instead interrupting the interview to book a holiday in Cyprus * When asked about the companys history, talked about recent redundancies and 30% reduced turnover * When claiming to be a techie, used phrases like that new fangled object oriented stuff * When asked What are your favourite computing / IT books (a question I always drop in to interviews, just out of interest), he said he hadnt read any apart from The Road Ahead by Bill Gates I got the interview over with as quickly as I could and fled full speed away from the place. Anybody got any worse war stories?
Thu 27 Feb | Tim Lesher | Well, I don't have a worse overall interviewer, but I did have one worst experience after getting an offer. I landed a full-time position through a recruiter. When it came down to salary negotiation, the principal said, 'Well, your salary will be $X, but the offer letter will actually only say $ 2/3 X.' When I asked why, he replied that recruiters were too damned expensive (their fees in the US are usually based on a percentage of a successful candidate's starting salary). I fled. If a person is willing to do that to a recruiter, what are they willing to do to their other business partners or employees, I wondered. Well, it turned out I did the right thing. A year later, the company was out of business. Seems the other principal (not the one that interviewed me) got into a fistfight with a customer, at the customer's site. He beat the customer pretty badly, and spent a few days in jail. Their client pool pretty much dried up after that.
Fri 28 Feb | Samuel | He beat a customer? never heard of that in all my years in IT....where was this place anyway?
Drawing roadmap diagrams | Thu 27 Feb | Beka Pantone
Im not much of a diagram tool nut, so when it comes to documenting the SCM strategy for a project, I end up using the same notation explained in this book: http://www.amazon.com/exec/obidos/tg/detail/-/0201741172/qid=1046364367/sr=8-1/ref=sr_8_1/002-1672843-1368813?v=glance&s=books&n=507846 Which is good enough, but leaves non-techies scratching their heads untill you explain. However I like this other diagram better, I think it does convey more information in one simple and attractive view. And it will be more visually appealing to the Powerpoint-mongers in the company: http://www.mozilla.org/roadmap/branching-2002-12-26.png ( from http://www.mozilla.org/roadmap.html ) Does anybody here know how the mozilla roadmap diagrams are made? Or perhaps some Visio/Dia templates that can do a similar job? I understand this could be easily made using a vector drawing program, but I really stink at drawing. Any ideas?
Thu 27 Feb | S | It doesn't look like it was made with Visio but you can use Visio to draw time-line diagrams. Haven't used Visio for that purpose yet so I can't tell you how good it is. Quickly looking at it, it does look to have all the right stuff (except maybe how the Mozilla diagram showed the branches)
Thu 27 Feb | Tom Fairlie | I don't know, but it looks to me as if the Mozilla diagram was put together manually by drawing tools rather than automatically using a project management or other drawing program. I've many many custom diagrams like this over the years to impress executives and this smells like something that a creative type made rather than a Project or casual PowerPoint user. YMMV
SourceForge like service for commercial code? | Wed 26 Feb | Mitch & Murray (from downtown)
I am assuming most readers here know what SourceForge is. What I am looking for is a bidness that offers a similar service, but for commercial projects, with access restricted by username/password. Yes, I know VA Software (or whatever they are called this week) offers a commercial version of their code, but our requirements do not involve a dedicated server and expensive. Rather we would like to simply purchase space on a system with the following ready to go services: (1) Access to our own area (for lack of a better word) by username/password. We will issue these for our customers. (2) ftp or http download services so our customers can grab the latest version of our stuff. (3) Announcement/news area. (4) Forum area to discuss user issues. (5) Bug database - users can submit and review current bugs. SourceForge has all this, but (run from the VA servers at least) there is no restriction on access, so not appropriate for commercial projects. Naturally we are willing to pay for all this, but not *too* much. Any suggestions?
Thu 27 Feb | Always Be Closing | I'll trade you three URL's for the Gold Leads!!!
Thu 27 Feb | Nice | would you trust your (proprietary) code to a third-party providing a communial service that is potentially also used by your competitors? How closely would you study the T&C?
Thu 27 Feb | Simon Lucy | Talk to www.mozdev.org for a commercial build of their hosting platform.
Thu 27 Feb | | 'Any suggestions?' Well, you seem to think there is a market for it, otherwise you can't expect anyone to provide the service for you, right? And you haven't been able to find anywhere? Three possibilities that I see - its there and you haven't found it; no, or insufficient, market exists; or there is an untapped market which is just waiting for someone to provide the service. Where you take this ball is of course up to you... BTW, you might look at www.collab.net This doesn't seem to be really what they do, but that's not to say that they could not provide it (no, I don't work for them).
Thu 27 Feb | Ged Byrne | Take a look at vBulletin from Jelsoft (www.vBulletin.org) . This will give you user services for controlling access, publishing news and forums. You can also get extensions for Download area and bug databases. Its all based on PHP and MySQL so you can get it hosted inexpensively. Most of Sourceforge's features revolve around collaborative development based around CVS. For making services available to you customers you only need to have a content management system. Sourceforge is overkill.
Thu 27 Feb | interested | Ya know I've been thinking about providing this dort of service for a few years now. But wan't sure of the viablility of it. Anyone think this is a channel worth pursuing ?
Thu 27 Feb | Joel Spolsky | I don't think a commercial service like this would have legs. By which I mean, it would get some users, but it would keep hitting up against the barrier that any team larger than 3 or 4 people would have their own servers and want to do things their own way. We've occasionally thought about offering a hosted version of FogBUGZ but the people who inquire about it never want more than one or two licenses. The truth is that any development team that can't get organized enough to have one always-one server is probably just a couple of kids in a dorm room, or a single programmer working full time for Microsoft during the day and coding at night, with starry-eyed dreams of making his own software company, but without the confidence to drop his day job. (Hint: these kinds of startups have about a 1 in 10000 chance of going anywhere.) In any case, a market exists for this, but it's not a market with very deep pockets, so it's hardly worth the effort.
Thu 27 Feb |    | << a single programmer working full time for Microsoft during the day and coding at night, with starry-eyed dreams of making his own software company, but without the confidence to drop his day job. (Hint: these kinds of startups have about a 1 in 10000 chance of going anywhere.) >> This is semi-off-topic, but where'd you get this 1 in 10,000 number from? And I don't believe it's about confidence, it's mostly about economics. You must eat, sleep & live to build your product.
Thu 27 Feb | Beka Pantone | Some ex-VA Software dude grabbed the latest official open source release of SourceForge and has been hacking away for some time; creating something called gForge. It basically is SourceForge but it saves you from the painful process of configuring SourceForge in your environment, and it has some extra features that make it worth a try. http://gforge.org/ They do not offer hosting, which was the original question. But it is an atractive alternative, I think.
Thu 27 Feb | pb | You're basically describing VA Software's commercial product: http://vasoftware.com/
Thu 27 Feb | R Chevallier | At one point Borland offered such service. It was called Teamsource DSP. You may want to check with them if it's still available.
Thu 27 Feb | Sammy | From reading kuro5hin.org, it seems that this place is highly rated for having root on your own virtual bsd/linux machine, at about 70$/mo. http://www.johncompanies.com/ It doesn't solve the problem of installing and maintaining sourceforge/gforge/gnu-savannah, but normal dedicated hosting runs you like 200$/mo from a place like site5.com. HTH.
Thu 27 Feb | | You can buy a computer for $200 now and load up some free unix. With that everything you want is freely available: forums, CVS, mailing lists, bug trackers, databases.
Thu 27 Feb | Nat Ersoz | We're getting a SourceForge demo in here next week. I'll do a write-up afterwards. I'm a perforce fan, however, they are screwing with the licesning terms - to get new seats, we have to put the server on maintenance (screw that), so its likely that we're going to migrate to CVS in the future (yuck, CVS dirs gratuitously lyingall over the place, and inserting $$$ inot C header files - I hate that). Nat
Thu 27 Feb | Mitch & Murray (from downtown) | Nat - if you do a writeup, I'd be most interesting in the pricing for their licenses. I had no luck getting that out of them when I approached them a while back - had to get the full court press demo running (which we declined) before the price of the ticket would be revealed. I noted in VA Software's most recent 10-Q filing they are reporting only $600K in revenue from software - which would be SourceForge. At $200K sales a month and guessing this thing is probably pretty expensive they must only be selling a few licenses a month. To the guy at the top of the thread that was after the good leads - these of course are the Glengarry leads. All I can say is 'A.I.D.A.!'
Thu 27 Feb | | Those other leads are weak. Looks like I'll be hitting the bricks....
MSDN fonts... | Wed 26 Feb | N Cook
Hi all, I dont know if this is the best place, but I need to vent. Ive spent the last 11 hours trying to figure something out, with almost all the time spent on the MSDN website. Am I just stupid, or browser-impaired, or going blind, or is it possible that the font that the MSDN folks use is the worst possible font (and size) that could possibly be used, other than wingbats? Its just unreadable. I guess Im just confused, since surely millions use that site regularly, and I cant be the only one having this problem. Anyone have any advice for fixing the problem locally?
Wed 26 Feb | N Cook | I forgot to mention, I meant the font used for the in-line code samples.
Wed 26 Feb | Nick B. | While we are complaining, what happened to Andale Mono?? It's no longer a free downloadable font! It used to be my favorite font for code.
Wed 26 Feb | N Cook | Yes, I did mean 'wingdings' instead of 'wingbats'. I told you my brain was fried ;-) Funny how code fonts are so important. Drives me up the wall when my guys show me something in proportionate fonts. Maybe my fuse is just too short, eh? ;-)
Wed 26 Feb | Nat Ersoz | Perhaps you might find them here: http://sourceforge.net/projects/corefonts/
Thu 27 Feb | Troy King | The EULA on my Andale Mono installer says it can be redistributed. Should I put it on a web site?
Thu 27 Feb | Mike | Andale mono rocks. Why? Because you can tell the difference between an f'ing 'O' and a '0' easily.
Thu 27 Feb | Troy King | And an ell and a one, and brackets and braces, and so on. It is an excellent programmer's font.
Thu 27 Feb | mb | I don't remember major problems with MSDN fonts. But many computer people care about how to write. Knuth wrote his own typesetting system, and Dijkstra was famous for his use of the fountain pen. Or maybe they're just two unusual cases.
Thu 27 Feb | mb | Oh yeah, how to fix it locally. Use the CSS stuff... I don't know the details, but I believe Opera and/or Mozilla and/or IE let you add your own CSS. Figure out the class of the code samples and add your own font settings and use important! or something with the selector. In IE, the place to look is Tools: Options: Acessibility.
Thu 27 Feb | mb | Triple post, yeah! Here's what to do: Look at the source to find the class. For example, I went to the 'Using Window Classes' example from the CreateWindow API. It looks like the code example uses class clsCode along with some autohilite something (presumably jscript? it's kind of cool, I didn't investigate.) Then create your file, let's say override.css. Put in the following: .clsCode { background-color: blue !important; font-family: 'lucida console' !important; } Then in tools:options:accessibility, say 'Format Documents using my style sheet', and point it to override.css. Suddenly the code sample will have an unreadable blue background and be in the Lucide Console typeface.
Thu 27 Feb | Simon Lucy | Andale was distributed with IE 4 as Monotype originally and its 'probably' still distributable in that form.
Thu 27 Feb | Simon Lucy | I found a copy at http://www.zeuscat.com/andrew/software/corefonts I have no idea whether this breaches any licence.
Thu 27 Feb | Ian Stallings | I tried to use a 'cleaner' font like Verdana in my IDE but I found that a Serif font like Courier is simply easier to read at smaller sizes
Thu 27 Feb | Mike | Simon. That web font pack... MS retroactively changed the policy. They got pissed the Linux users were downloading it to get decent fonts on their linux boxes. Kind of funny. Here is the MS page that used to have them. http://www.microsoft.com/typography/fontpack/default.htm
Thu 27 Feb | pUnk | Try this: http://www.tobias-jung.de/seekingprofont/.
Code Question Sorta | Wed 26 Feb | Clock
In C++, what is the order of evaluation of the following expression? And what does the modulus accomplish? (Hour and Minute can be 0 - 24. The expression is used to determine the degree of the hour hand of a clock given an Hour and Minute in UTC (GMT) time.) degree = (Hour * 30) % 360 + Minute / 2; I am thinking it is: 1. (Hour * 30) 2. Minute / 2 3. (#1) % (360) 4. (#3) + (#2) Its really the % that confuses me. I dont understand why its needed.
Wed 26 Feb | petrov | On page 53 of my copy of K&R, it states that modulus has the same precedence as * and /, and it associates left to right. So your example function evaluates as: degree = ((Hour * 30) % 360) + (Minute / 2); as you suspected. why don't you just use parentheses if you have doubts about the order? --sam
Wed 26 Feb | Gordo | Modulus is equivalent to multiplication and division in the order of operations. It is present to keep the result of the function from being greater than a complete rotation of the circle (360 degrees). Example: 20 hours, 30 minutes Degree = ( 20 * 30 ) % 360 + 30 / 2 Degree = (600) % 360 + 15 Degree = 240 + 15 Degree = 255 Without the modulus, the result would be 615 degrees.
Wed 26 Feb | Adrian Gilby | You said that hour can be from 0-24 -- did you mean 0 - 23? Anyway, I'd guess that the % is only there to make sure that degrees never goes above 360. Perhaps the hour-hand-plotting code only handles degrees from 0-360, or is less accurate with higher figures? Your analysis of the operator precedence seems correct, since 'multiplicative' operators (*, /, %) are higher than 'arithmetic operators' (-, +). Quick search on google threw up this link: http://www-agrw.informatik.uni-kl.de/~jmayer/c-operator-precedence.html
Wed 26 Feb | Adrian Gilby | Wow, two other people replied to this while I was writing my response.
Wed 26 Feb | Clock | Thanks guys. It now makes sense to me. The actual line of code is from 'Programming Windows Fifth Edition' by Charles Petzold. It is in the chapter on Timers. The analog clock program.
Wed 26 Feb | Neil Butterworth | 'In C++, what is the order of evaluation of the following expression?' C++, like C, generally leaves the order of evaluation of expressions to the compiler, so the answer to your question is 'It depends on your compiler's implementation of the language.' Please notw that order of evaluation and precedence have _nothing_ to do with one another. Given the expression: a + b * c a C++ compiler is free to evaluate (i.e. determine the values of) a, b and c in any order it chooses. However, the final value of the expression must be: (value of b multiplied by value of c) plus value of a This is a common source of misunderstanding for C++ and C newbies.
Wed 26 Feb | Nick H | 'Programming Windows Fifth Edition' by Charles Petzold is all C, no C++.
Wed 26 Feb | Clock | >> 'Programming Windows Fifth Edition' by Charles Petzold is all C, no C++. While that is a true statement, my code is C++. I never said that Mr. Petzolds code was C++. I merely stated that is where I got the source line from. If you look on page 348 you will see it. My source code file has an extension of .cpp and his end with .c. Isn't the file extenion one way the compiler determines if the code is C versus C++. Of course, some compilers may have flags for this.
Wed 26 Feb | Clock | Flags = (Command Line) Options or Pragma
Wed 26 Feb | realist | When I was a kid in school about 7 or 8 years old we got taught 'BODMAS' which stood for: Brackets Order (I think) Division Multiplication Addition Subtraction meaning that expressions in brackets are evaluated first, then divisions, multiplications, additions and finally subtractions. Which I think is pretty well how most compilers behave.
Wed 26 Feb | realist | So I get 1. (Hour * 30) 2. Minute / 2 3. (#1) % (360) 4. (#3) + (#2) as well
Wed 26 Feb | Ed the Millwright | Neil, Do you ever get the feeling you are talking to a brick wall? I agree with you on this. There are no guarantees whatsoever which of the operands will be evaluated first. Which order the operators are applied relative to each other is more deterministic. In the -given- expression it would be first the * then the % then the / and the + last.
Wed 26 Feb | Ed the Millwright | In case I wasn't clear, all the rest of you are wrong. (puts on language lawyer hat) Page 238 of the K&R and section 17.2 of the ARM both indicate that *, / and % have the same precedence level. (takes off language lawyer hat)
Wed 26 Feb | Ed the Millwright | Actually Neil, Gordo and sam all got it right.
Thu 27 Feb | masken | My 0.02$ for what it's worth: If you're ever in doubt (as you obviously were in this case) use an extra set (or two) of parantheses!!! It not only works, it also improves readability and maintainability of your code!
Thu 27 Feb | simplify | Isnt this just clearer (( hour * 60 + minute ) / 2) % 360
Thu 27 Feb | simplify | not to mention it actually keeps the range from 0-359, versus the original which does not.
Thu 27 Feb | simplify | whoops actually -> clearly....
Thu 27 Feb | realist | WHo cares anyway?
Administering Many FTP Accounts Remotely? | Wed 26 Feb | Bored Bystander
Here is the situation. My client has the need to administer many FTP accounts, one created for each of the clients users with its own private login. I estimate that we will eventually want to administer several thousand such accounts. Each account will be lightly used; not many logins per day or even total by the remote user, and the file space used per account will be on the order of 5 megabytes or less, probably a lot less. I am steering the client toward a commercial web hosting account hosted by an outside company. The client doesnt really have the internal expertise to run their own server. 1) I would like to understand how my client, which is a Windows shop, can administer the creation of many FTP accounts remotely, in a painless way, without having to learn Windows or Linux server administration. Ideally, Id like the client to have a point and click GUI that displays all the FTP accounts along with private user name and password, and allows them to view the last login by the user, and the file space used. Creation of FTP accounts on a Windows host is a point and click operation, isnt it? And on a Linux host its a command line command such as useradd. I dont quite see how either could be administered remotely. My thought is that Im going to have to bite the bullet and write a Windows based client program that gives them a database view of the FTP account space and allows them to administer it remotely. 2) My client will have a system running on their site that connects at intervals to the remote FTP host and uploads new data being sent to its customers, and downloads data coming in from customers. If we have many private FTP accounts, we need a way to identify which accounts (directories) have gotten new files uploaded since the last time we checked. It will be impractical to scan several thousand directories. I am thinking that downloading and parsing the FTP log on the server would be the solution to this. Thanks for any help. (one thing - PLEASE dont debate the initial assumptions, such as suggesting that we have one public FTP account for mass use, or that the client run the server in - house. I have selected these features because I know the clients environment and preferences.)
Wed 26 Feb | simpleton | Number 1) You can do it with HTML and some weblanguage. Check the registry for the data...no database is necessary. Number 2) Check directory size or last modified date instead of downloading a logfile and parsing it.
Wed 26 Feb | Mike | You need MagicalFTP Maintainer 2003xp available from VaporWare People admin Linux and Windows remotely all the time, takes more knowledge than a desktop 'power user' though. You will likely have to build a custom app. Web app preferably.
Wed 26 Feb | Bella | Creating a new login (and FTP acct) can be done on the cmdline. So just make a simple webpage interface to do the C.R.U.D.. Maybe even allow upload of a file, to batch create lots of new accts. This is a 1/2 day project.
Thu 27 Feb | mb | Lots of web hosting companies use 'control panels', I guess ensim and (cpanel?) are two big players. You can get a 'reseller' account yourself with a shared web hosting company, then sell an account off to your client. If you have thousands of users, however, administering anything by hand is going to be a nightmare. Why use FTP? Here's a demo of administering users: http://www.ensim.com/products/webppliance/demos/demodemo/custom_ensim_siteadmin.htm
Thu 27 Feb | Just me (Sir to you) | 'Creation of FTP accounts on a Windows host is a point and click operation, isn't it? ' Contrary to popular belief almost anything can be done programmatically on Windows (especially after W2K). I'd say that the widespread acceptance of COM automation and the WSH even gives Windows a more capable commandline than Unix STDIO model systems.
Thu 27 Feb | Mike | WSH is pretty capable, the thing I like better about unix scritping is that as I use a shell, I am automatically learning how to write shell scripts. With WSH, I have to use this.dothat.onfile type crap. It works, it is just easier on *nix.
Yahoo Stores rewritten from Lisp to C++ and Perl | Wed 26 Feb | runtime
Paul Graham likes to brag about the efficiency of Lisp programmers. His online store software was written in Lisp and then sold to Yahoo as Yahoo Stores. Fearing Lisp, Yahoos programmers have rewritten Yahoo Stores in C++ and Perl. http://www.ai.mit.edu/~gregs/ll1-discuss-archive-html/msg02367.html In Paul Grahams words: (a) The reason they rewrote it was entirely that the current engineers didnt understand Lisp and were too afraid to learn it. (b) The resulting program is a new worlds record case of Greenspuns Tenth Rule. The Yahoo Store Editor called compile at runtime on s-expressions made on the fly. To translate this into C++ they literally had to write a Lisp interpreter. (c) Even then, they had to drop some features (involving advanced uses of closures).
Wed 26 Feb | Edoc | Software = programmers + code + users In Yahoo Stores, the key ingredients were Paul Graham + LISP. When Paul & team were no longer involved, it made sense for management to explore the most effective replacement combo. It's not a loss/victory for anyone involved. The proof of the pudding will be in the tasing. Personally, I'd take Paul + LISP as the engine any day over alternatives, but I'd be equally alarmed if Paul departs for greener pastures. If this topic is simply a language troll, I can play that. Switching to C++ and Perl would be like rewriting the code from scratch, so I think it would be very high risk. Especially from a design perspective-- those langs put the hog in orthogonal.
Wed 26 Feb | Recovering Lisper | I maintained Lisp code for a fairly large simulation system back in the late 80's. I don't know how cleanly Paul and associates wrote their code, but some of the stuff I had to maintain was too awful for words. The hackerbastuds that wrote the original system had code writing code writing code, with the end result that I had no way to know what effect a given function would really have on the system without actually running the bloody thing many times and watching what happened. I still wake up panting and sweating in the middle of the night over it. In the words of Allen Hollub, '...an unholy mess....' I'm sure it's possible to write robust, clean code in Lisp, but there is an enormous potential there for abuse. Unfortunately, the authors of my simulation system capitalized it on vigorously, probably because it was just so easy. Or maybe I was just a dumb-dumb,I don't know. Either way, though, that experience has made me wary of large Lisp systems, and at least in that instance, I think the TCO numbers would have benefitted from a rewrite into something more predictable and straightforward. I will say, though, that I do miss some of the features I enjoyed with Lisp, real closures not least among them. When you need 'em, you *really* need 'em. Maybe if Lisp.NET meterializes, you could use that stuff exactly where you need it, and stick to something a little less abuse-prone for everything else.
Wed 26 Feb | Mike | I underthand that people theem to like it better now. That it ith written in thee pluth pluth inthtead of lithp.
Wed 26 Feb | Andrew Burton | As JAPH (and a webdesigner who has used Yahoo!Store for the past two years) who likes to tinker with CLISP/Scheme for fun and education, I have to say I take offense at Graham when he says, 'The reason they rewrote it was entirely that the current engineers didn't understand Lisp and were too afraid to learn it.' Not 'offense' since I'm not a offended, but my brain is tired. What word means that I think a lot less of him because he's shown himself to be little more than a Lisp fanatic? Anywhen... Am I crazy to think that if Lisp were a key feature to running an online site, like Yahoo!Store, they'd have hired Lisp hackers instead of porting it over. (Geez, obviously it was cheaper to port it, or they would have hired Lisp hackers.) Maybe he was being tongue-in-cheek, maybe (okay, definitely) I'm Perl biased, or maybe I'm just punchy right now; but saying that Yahoo! had to port this because their coders were afraid to learn Lisp sounds awfully... Dumb? This is one reason I really, really appreciate Joel. It's also one thing I like to say I've really, really learned from reading his articles. You use the most cost-effective(1) tool for the job. If Lisp got Viaweb off the ground and put them ahead of the game, then that was the right tool for the job. If Perl and C++ are the most cost-effective tools, then the same rule applies. I don't think fear was what kept them from learning/implementing Lisp, it was (I feel) the concept return on investment(2) that helped make the decision. On the upshot, I guess this explains what that new store interface thing was all about. :) --- 1. My brain is very weary, so I'm mangling terms. By 'cost-effective' I mean to include such variables as: what makes the customer happy, what runs the best, what can be developed in the least amount of time. Whatever could be used to streamline the project and increase shareholder wealth(3). 2. Return on investment in the sense that they'd make/save more money by porting the code over to Perl and C++ than they would training their coders to use/write Lisp. Sounds reasonable to me anyway. 3. Yahoo! is a public stock, which means they do have shareholders. If they have any managers their with Business Administration degrees, and if their schools were anything like mine, then the first lesson that had beaten into their skulls was: 'Increase Shareholder Wealth.' :)
Wed 26 Feb | rwh | 'This is one reason I really, really appreciate Joel. It's also one thing I like to say I've really, really learned from reading his articles.' Isn't one of his articles all about the boneheadedness of rewriting working code from scratch? 'Am I crazy to think that if Lisp were a key feature to running an online site, like Yahoo!Store, they'd have hired Lisp hackers instead of porting it over.' In a follow-up message, Graham wrote the following: 'A friend of mine (who's probably on this list, actually) went to interview there in about 2000. He said they told him they didn't need Lisp hackers, because they were going to port the Store Editor to C++. Why? Because they didn't think they'd be able to find Lisp hackers.' So running down the cost-effective list: 'Making the customer happy...' Graham comments again: 'The feature they had to take out because of closures is actually a fairly important one, so I suspect many users never will upgrade.' 'Runs the best...' Up in the air at this point. 'Developed in the least amount of time...' Two-and-a-half years vs. a system that's already running. Regarding the return on investment, there seem to be three possible equations: Incremental costs of hiring new CL programmers as existing ones leave (counting Graham et al. as working for Yahoo for a while). There would be N on staff, doing upgrades. Incremental costs of hiring new non-CL programmers as replacements, and training them in CL (even if they're already in-house, they count; there will be missing slots to fill). How much *does* it cost to train people to write Common Lisp? Assume that there would be P on staff, more than N to allow for more mentoring. Incremental costs of hiring new Perl/C++ programmers to spend 2.5 years to duplicate (most of) the functionality. Assume that there would be Q on staff. Graham and others would probably assert that N < P < Q. So what ends up costing more?
Wed 26 Feb | mackinac | >>> (a) The reason they rewrote it was entirely that the current engineers didn't understand Lisp and were too afraid to learn it. <<< I can't imagine the engineers being 'afraid to learn it'. More likely they'd jump at the chance to learn it. This sounds more like management being afraid of the risks of maintaining a language that was unfamiliar to them.
Wed 26 Feb | Ken Dyck | 'Maybe if Lisp.NET meterializes, you could use that stuff exactly where you need it, and stick to something a little less abuse-prone for everything else. ' It may have already materialized. Check out DotLisp ( http://www.richhickey.com/dotlisp.htm )
Thu 27 Feb | Andrew Burton | rwh, maybe I'm missing something in your post, but I have to ask: If Yahoo! was porting to Perl/C++ because they didn't think they could find Lisp programmers, then how is it considered cheaper for them to keep hiring Lisp programmers that they can't find? To borrow your quote, Paul Graham did say, 'Why? Because they didn't think they'd be able to find Lisp hackers.' If Yahoo! thought that they wouldn't be able to find Lisp programmers -- and, yeah, that does sound stupid, I grant you that -- then rewriting from scratch in Perl/C++ was their best viable option if they wanted to be able to keep running and upgrading Yahoo!Stores five or ten years from now. I agree with you and Joel, it's generally a bad idea to start from scratch. However, if you're working from the belief that 'Lisp hackers died out twenty years ago when a huge asteroid his the Internet,' then you're left with two options (as I see it): 1. Teach your programmers to program in Lisp, starting them off in a new language that is as different from C as Mandarin is from English. 2. Get your programmers to start working on the project, from scratch, in a language they're already familiar with so that it will be serviceable in five or ten years. I do want to clear up one thing. My post probably sounded like I was trying to defend Yahoo!'s decision, but I'm not. My main point was that I think rewriting the code in Perl/C++ was a managerial decision based on their own projections (erroneous or otherwise); it wasn't because their Perl/C++ hackers were scared of a new language.
Thu 27 Feb | R Chevallier | Recovering Lisper wrote: 'The hackerbastuds that wrote the original system had code writing code writing code, with the end result that I had no way to know what effect a given function would really have on the system without actually running the bloody thing many times and watching what happened. ' Strange. According to what I understood from Paul Graham's articles, it's specifically this capacity of Lisp macro to create program writing program (the Lisp macro) which is particularly interesting. It is in your opinion this particular program which was badly designed, or the general dark side of this feature appearing during maintenance?
Thu 27 Feb | Recovering Lisper | The program-that-writes-programs capability of Lisp is very interesting and extremely powerful. Unfortunately, it is also very easy to abuse. Without this capability, I can easily look inside a function and get a pretty good idea about what the function is doing and how it is altering the state of the system. When I allow the function to write other functions, though, it's hard to determine the effects of calling the function without looking at the details of the other functions that are being generated on the fly. Another problem is with encapsulation. If I make a change local to a C function, it's usually safe to assume that the effects of that change will be local. With the code generation approach, though, the change may affect the functions which are generated and functions which those generate, and so on. Trying to puzzle that kind of thing out is really hard on the molars. Certainly, a lot of the problems I had stemmed from extremely poor documentation on the part of the original developers. There's a strong case to be made that I should never have to look inside a function to be able to understand its observable effects on the system. In my case, though, this wasn't close to being true. Even more problematic, though, is knowing how to safely evolve a function like this. Documentation might help with this, but only marginally. Changing behavior virtually requires you to look inside the system you are changing. Finally, these folks apparently got off on using this kind of approach whenever they could. They employed this technique in lots of places where a simpler solution would have worked just as well, IMHO. The technique is very analogous to the use of indirection - there is definitely such a thing as overdoing it. Like Spiderman says, '...with great power, comes great responsibility....' These folks were just plain irresponsible. Could be that proper controls (reviews, standards, whatever) might help to diminish this problem, but the potential is definitely there.
Thu 27 Feb | rwh | Ahh... That description takes me back to the days of flame wars over C++ operator overloading. I'll agree with Andrew Burton that Yahoo's decision was a reasonable response to a perceived crisis.
Thu 27 Feb | anon | How is this any worse than C++'s template metaprogramming? (Or those crazy text macros.) Thing is though that companies that don't specialize in software will to some extent rely on lingua francas. Lisp is not one.
Thu 27 Feb | xyz | I've never been to it, but I'm guessing something called 'Yahoo stores' could have been written in any damn language. What complicated stuff does it need to do, show me a list of products?
Thu 27 Feb | Brent P. Newhall | This isn't necessarily different than C++'s template feature. Note how often people use C++ templates in real life. They've caused so much confusion and madness that people still put on rubber gloves before using them.
Thu 27 Feb | Charlotte C. | Hello! Templates and lisps ability to create and redefine functions at run time are not the same thing at all.
Thu 27 Feb | Sammy | Macros are not about creating functions at runtime, as I understand. It does it at compiletime. In fact, you can use the functions macroexpand and macroexpand-1 to see what macros turn into. I really like common lisp because there are all sorts of utils built into the standard that really soften the corners. Like the disassemble function, which you pass a function to and it prints out the function's assembly code. Really nice when you're perturbing a function to optimize, and you just ask a lisp listener what it disassembles to. I can only wonder how a lisp person views how painful programming in C++ or Perl is... ;P
Thu 27 Feb | Sammy | OIC. Recovering Lisper was probably not talking about macros. Must be tired.
HTML -> TIFF generation | Wed 26 Feb | Better than being unemployed...
Im doing some research at the moment to see if its possible to take an HTML document and produce a rendered file, ideally as a TIFF. Are there any third party libraries that cater for this? I can think of some hacks (such as grabbing a device context in IE) but I dont really want to go down that route.
Wed 26 Feb | Just me (Sir to you) | I have not tried this myself, but http://www.americansys.com/psd.htm?From=Main should be able to do the job. From the feature list: - Capture active window - Support for GIF and TIFF formats - Auto Scroll. Allows you to capture the an entire web page or other document when much of it is not visible.
Wed 26 Feb | KenB | If you mean you want to do a screen capture of an HTML page in a browser then check out SnagIt: http://www.techsmith.com/defaultflash.asp It has a scroll feature so you grab the entire page even if it is off the screen. We used it for bug screen shots to include in our bug tracking database since 'print screen & paste' only gets the visible part of the browser window. If you mean you want to do this at runtime in code then this won't help you...
Wed 26 Feb | Eric Debois | I know little about these things, but why not take a look at an open web rendering engine like mozilla. If its anything like game code, there must be a point where the page becomes nothing more than a load of RGB-triplets to be shipped of to the video mem. Attach tiff headers an write them to disk. Im just speculating...
Wed 26 Feb | Better than being unemployed... | Thanks guys, but I'm afraid my problem is that I want to do this at runtime on a server that can process lots of HTML documents in the background.
Wed 26 Feb | Just me (Sir to you) | Combine the above with something like http://www.pitrinec.com/toolsworks.htm could still save you boatloads of time. Yes, it's dirty. Yes, it's a hack, but hey, I guess this is not the real focus of your research, just the data collection part, so why not get it done in a day and spent time on the real meat instead?
Wed 26 Feb | Slava | More details pls, I'll ask some Russian h*ckers, oh, sorry, programmers:) This case looks like interesting one:)
Wed 26 Feb | google | >> I'm doing some research at the moment << No you're not. Because I just looked on google and got the answer in 2 seconds.
Wed 26 Feb | Slava | Ok, that's their answer. 'Don't spend too much time. Use IE API or Gecko rendering engine'. Another idea for context switching: 'Use rendering engine to print something to Postscript device or custom device (yours)'
Wed 26 Feb | Better than being unemployed... | Okay, my best description of the problem is as follows. We've currently got a product that takes in document data from a variety of bespoke databases (accounts packages seem to be popular), apply a styling template to it, and output some HTML. This is then uploaded or emailed out to an appropriate recipient. A suitable application of this would be to send out a load of outstanding invoice reminders at the end of each month. What we want to do is apply an extra stage in this process, so that instead of sending out HTML, we send it out rendered as a TIFF (or PDF, but the prefers TIFF for reasons I can't quite fathom at the moment). The document server (which does the meat of this process) runs as an NT/2000/XP service in the background with no user interaction. Therefore any rendering has got to be done at runtime, and anything that involves any UI has got to be ruled out. A COM component is great. A Win32 library is still good enough. As long as it's thread safe. Any other information, let me know...
Wed 26 Feb | Joel Spolsky | I would use the IE control. Load the page, then print to a PostScript printer to get PDF. I assume going from PDF to TIFF is fairly easy. There's no reason you can't do this from a service. I know, there's no place for the gui to show up when you are running as a service, but it doesn't matter -- you can still instantiate the IE control, load a web page, and print it.
Wed 26 Feb | Slava | something from Google: > Does Image Magick support HTML-to-TIFF conversion? Yes - though we use some helper apps (html2ps and ghostscript).< I don't know what's this Image Magick, but it seems like html to postscript and then to tiff idea has a growing support:)
Wed 26 Feb | Just me (Sir to you) | You could also use a TIFF printer driver to print directly to TIFF http://www.informatik.com/tiffwork.html
Wed 26 Feb | na | around a year ago there was a link on gotdotnet.com site with source code. you entered a url and it returned a gif of that page. cannot find it right now
Wed 26 Feb | Chris Tavares | The printer driver is actually the best idea of the bunch. Then your app doesn't need to know anything about TIFF - it just prints. Same as if you wanted PDF.
Wed 26 Feb | Nitin | Install a dummy postscript printer driver. Print the image to a temporary PS file using IE or Gecko. Use ghostscript to convert PS into either TIFF or PDF. You can do all that on server side. Ghostscript also comes as Library. The TIFF printer driver mentioned in other reply looks interesting too.
Thu 27 Feb | Malcolm | Most electronic faxing software uses print drivers that generate tiff files, so you might see whether you can re-purpose a library intended for faxing. Also, I know that Adobe offers a similar driver as part of a 'print to your local printshop' feature. It, of course, generates PDFs. I don't have any more details on it, though.
Thu 27 Feb | Yury | Slava, Image Magik is a set of tools and libraries to deal with images. Shipped with most of linux distributions. With ImageMagik you can convert, resize and recolor all images in dir just in one command line.
Thu 27 Feb | Tony E | Acrobat will export PDF to TIFF and import HTML to PDF, I am pretty sure under programmer control. However why are you wasting time on this when there is off the shelf software which does this sort of thing. Have a look at Accelio, FormScape, StreamServe, Optio, etc
Thu 27 Feb | Better than being unemployed... | Okay. I must be missing something here because so many people have recommended print drivers. I've been burned by print drivers in the past, causing some severe bugs that have made customers very unhappy. This is how I understand it... When you're doing batch processing, at the time of sending off the input file, you need to have some idea of where the output file is going to be, so you can tie the two together. This is particularly true if you've got a multithreaded server that processes many files at a time. Most print drivers allow you to specify an output filename after you've sent something to be printed. Great. But you need some way of knowing exactly where the print job came from in the first place. Otherwise you'll just blindly write an output file, tell the server that you _think_ this is the file they just sent to be processed, but you can't be 100% sure. This is not a contrived scenario. We used a fax printer driver with a similar mechanism, then got a complaint from a customer that all the faxes were going to the wrong place because they started accidentally printing to the fax printer driver from Word, and the server made some false assumptions about where the resulting temporary files were supposed to go. What am I doing wrong here?
Thu 27 Feb | Just me (Sir to you) | Naming the file with a GUID would ty all the processess together wouldn't it?
Thu 27 Feb | Better than being unemployed... | I'm not sure what you mean. The input file or the output file? I'd say you need to name both with the same unique name. And that's what I can't figure out - how do you guarantee that when you've potentially got 5 print jobs happening simultaneously?
Thu 27 Feb | Just me (Sir to you) | I am assuming you can already differentiate your input files (if you can not then you can do it artificially by using some singleton naming process, e.g. DB autoID, or again a GUID). If you then have one structure (DB table for instance) that maps the unique input name on the unique output name, you are set. The number of treads doing this in parrallell is irrelevant. The GUID generator garanties no name clashes will ever occur.
Thu 27 Feb | Just me (Sir to you) | Btbu, Maybe I should explain GUID. A GUID is a Globally Unique IDentifier. It is usually (at least partly) implemeted through a random number generator. The idea is to generate a very large (e.g.128 bit) number so that the chances that that number would ever be generated again become 0 for all practical cases. This ensures that multiple identy issuing processess can generate unique identities without ever having to coordinate.
Thu 27 Feb | Better than being unemployed... | Hmm. Let me try and explain my problem from another angle. A print queue is, in effect, not thread safe. Suppose I have three files, let's call them 001.html, 002.html and 003.html. I want to generate 001.tiff, 002.tiff and 003.tiff respectively. Send off 001.html to the print queue. Then send 002.html to the print queue. Before we get a chance to send 003.html, however, rogue_app.exe decides to send its own print job to the print queue at the same time without telling us. Just after this happens, we send 003.html to the print queue. So we now have four items in the print queue. The first print job finishes. Well that'll be 001.tiff. Then the second one finishes. That's 002.tiff. Then the third print job finishes. Hmm, that's _not_ 003.tiff, but how do we know this?
Thu 27 Feb | Just me (Sir to you) | Because the submitting process generated a GUID for 003.html (e.g. 878FA78499377202873AAAB7982C8321), stores in the DB the tuple (003, 878FA78499377202873AAAB7982C8321) and tells the printer driver to print to 878FA78499377202873AAAB7982C8321.tiff The receiving process that picks up 878FA78499377202873AAAB7982C8321.tiff finds by looking in the DB that it is ascociated with 003.html. The rogue process, or any other tread for that matter, has 0 chance of having by coincidence picked the same name since that is in the nature of the GUID.
Thu 27 Feb | Better than being unemployed... | Aha, got it. All well and good, except.. 1) I can't tell the printer driver what output file I want to generate in advance. 2) When I get notified that a TIFF file should be generated, I don't get told which print job generated it. Looks like I need a better printer driver...
Thu 27 Feb | Tony E | If you want to control the naming of print files have a look at a product called Print Distributor at www.frogmorecs.com , the file name could be derived from the document name.
Heisenberg effects | Wed 26 Feb | Ben
Looks like Joel is going to post an entry about this message board, but it wont go on his site, just out as email - http://www.joelonsoftware.com/news/20030225.html Why? because its full of Heisenberg effects. What the hell are Heisenberg effects I asked myself. And google answered - The Heisenberg effect is the act of observing the system causes the system to change - http://www.iunknown.com/Weblog/fog0000000056.html
Wed 26 Feb | Simon Lucy | Or as we joyfully pronounce it, a Heisenbug.
Wed 26 Feb | Just me (Sir to you) | I also wondered about this. In absense of clear info one starts to speculate. There does seem to be a hidden identification field in the form he uses: 'INPUT type=hidden value=XXXXXXXXXXXXXXXXXX name=slid' (I replaced the actual value with XXX here) This could be used to map the subscribers email adress to the visitors IP, board-name,... who knows what. Since this would be out of line with Joel's previous behavior I do not think he would try to pull a stunt like this though. What's up Joel? Please tell us more.
Wed 26 Feb | Neil E | All I can see is sUniquePost - I'm guessing that's to stop multiple being posted if you happen to hit refresh after adding your message.
Wed 26 Feb | Just me (Sir to you) | Neil, I was refering to the email subscription form on http://www.joelonsoftware.com
Wed 26 Feb | Tom Seddon | Is this being sent on the same mail list that we signed up to to receive news of each new bit of writing? Or do I need to sign up again?
Wed 26 Feb | Duncan Smart | A conspiracy!!! 'There does seem to be a hidden identification field in the form he uses: ... This could be used to map the subscribers email adress to the visitors IP, board-name,... who knows what.' ... or not. Look at the
's action - it's going to 'whatcounts.com' - it's probably Joel's customer id with them.
Wed 26 Feb | Just me (Sir to you) | Duncan, You are right. You caught me with my pants down. Thanks for the clarification. Applogies to the FCS team for speculation. The strangeness and vagueness of the article had aroused my suspicion, so when I looked at this field I jumped the gun instead of checking two bits beyond my noses' lenght.
Wed 26 Feb | Heisenberg effects indeed. | How is emailing out the information going to prevent 'Heisenberg effects'? I suspect that regular readers/posters will mostly sign up to receive the email. So how is that different from posting it? Prevents the non regulars (not the bulk of posters, thus not the ones mainly responsible for the 'conversation') from knowing the rationale behind the forum design? How will that help anything? Assuming that anyone who reads the email finally has nothing more to complain about with respect to the forum design (and assuming the current formula remains the same), it's unlikely that future regulars won't have the same questions, and post the same boring whines we've been reading for months and months. And instead of being able to post a link to the article, we'll have to say: 'Joel sent out an email about that, but we can't tell you what he said because it's copyrighted'?... It's more likely that various different regulars will either post the email verbatim (getting the thread deleted, but probably not before a number of people have read it), or post their interpretations of the email. Call me paranoid, but I agree that the explanation for requiring an email address to receive the article comes across so oddly that I have trouble accepting that there isn't something more behind the request (irrational as that is). If FCS hadn't been deleting random threads recently for no apparent reason (PC/real PC, I feel your pain) - I would perhaps be more trustful. It doesn't help that the dynamics of this board remind me strongly of Intuit's message boards some years ago (high quality conversation was eventually killed off by Intuit moderators, who also randomly deleted threads and messages, but also edited messages - sometimes changing the meaning completely). I'm hoping that JoS doesn't go there.
Wed 26 Feb | Nice | well I just signed up with a junk email address just to see if I get _any_ spam. And the advice to let '*@whatcounts.com' through seems like asking for junk (I recall that whatcounts has been accused of being spam-friendly before, on this board. If you can't find those threads, maybe there is a conspiracy...) The whole thing strikes me as silly. I can only conclude that there must be _something_ extra in asking for the signup. Possibly Joel simply wants to get a larger mailing-list population because most online visitors come and go and can't be accurately counted? Maybe the article is really about the ease of getting email addresses? And maybe the whole thing is a publicity stunt to get people interest in 'what we will tell you but you can't tell anyone else.. coming soon!' Ah well, least it gives us all something to talk about ;-)
Wed 26 Feb | atom | I have never received any junk email from signing up for notifications for JoS before, so I definitely do not think this is anything to be concerned about. Also, if you have already signed up, you do not need to again, as it states in his message that you can sign up at the bottom of every page.... meaning it is the same as the regular email signup. I for one find this rather interesting.... but I will refrain from the speculation as to what it is about. It should hopefully all be clear once he sends out the article as to his motivations for not posting it on the site.
Wed 26 Feb | Bored Bystander | It's probably something about 'board policy'. If he posted it here or on this site it would immediately trigger a bunch of messages debating the policy, since content on a web page can be linked. He's probably just trying to minimize the amount of crap, er, stuff that gets posted about it. Or maybe not, but in light of several threads about registering user names that have just vanished, I'd bet proverbial good money that's what it is about. A close runner up is some statement about technical board features in general.
Wed 26 Feb | MaisOui | 'If he posted it here or on this site it would immediately trigger a bunch of messages debating the policy' Personally, I think that whether he posts it or emails it, it will trigger a bunch of messages debating the policy regardless.
Wed 26 Feb | Tim Lesher | My cynicism is acting up, but it's leading me to a different conclusion. :-) First of all, I assume that when he refers to Heisenburg effects, he's talking about 'making news' vs. 'reporting new'. At some point, the information in the article will be internalized by the web participants, who will change their behavior, rendering the article incorrect. Emailing it and posting a note of how to get it doesn't solve the problem; it only adds a layer of indirection. Personally, I think it's either: 1. By posting it, it will become permanent and referenceable in the future, and will become a visibly incorrect portion of the site. 2. He just wants to up the percentage of web participants on his email list. Personally, I think it's #2... not that there's anything wrong with that.
Wed 26 Feb | Nathan | i'm looking forward to this article coming out. the increase in deletions of posts is beginning to mess stuff up, like this link didn't show me any new replies had been posted in this thread, but when i went to add my own reply, i saw that there was indeed a new post. odd. i, too, miss the (2) french threads. i am interested in looking for employment in europe, and would love to relearn the language i learned years ago in high school. i wish i had copied those links before they were deleted.
Wed 26 Feb | GiorgioG | It's been great, but seeing as how Joel has decided to artificially keep this forum 'on-topic', or is using us as guinea pigs, there's no point in sticking around. So long...and good luck to all.
Wed 26 Feb | Just me (Sir to you) | OK, I signed up on the basis of trust. We'll see how it goes from here.
Wed 26 Feb | Bored Bystander | I don't have a problem with any self interest shown to date in running this board. This is one of the very best technology employment boards I've run into. Striking a good balance between technical content and 'deep thoughts' about life and career is incredibly elusive and yet it exists here. I think that the few threads that have disappeared didn't contribute anything meaningful and were probably removed because they would make someone (not necessarily Joel) uncomfortable. One that comes to mind was someone talking about 'funny' (entertaining) user names. That one vanished, probably because it would drive off anyone mentioned. And no, not mindless sycophancy, because if I thought that the JOS administration was heavy handededly one sided or narcissistic, I'd leave skid marks. I am coming to think that good BBS moderation is like 4 star restaurant service: it's so swift and efficient and consistent that you aren't aware that it happens. That is the case here. Compare to an chain restaurant type place where the server either gets in your face every three minutes, or disappears 1/2 hour after you wanted the check. That's how most BBSs are at either extreme.
Wed 26 Feb | MaisOui | '...that the few threads that have disappeared didn't contribute anything meaningful and were probably removed because they would make someone (not necessarily Joel) uncomfortable' FWIW, I've noticed dozens of disappearing threads in the last couple of days, so 'few' is understating it a bit. I can understand why some of them disappear. But I admit to being at a loss as to why the second french thread disappeared - the one asking about learning terminology for software development in French. Given that this is a board about software development, and given that Joel has an interest in languages (as evidenced by needed to scroll past half a million language links to access this board) - I'm somewhat confused as to what was 'not meaningful' / potentially not 'comfortable' about the thread. (On that note, if someone would repost the links, I'd like to copy them down this time before they are deleted)
Wed 26 Feb | Bored Bystander | What is the big deal about threads disappearing? I honestly haven't noticed and I visit here too often. If a thread doesn't last long enough for more than one or two people to notice, my opinion is that it didn't last long enough to contain anything that substantial. If someone posts a topic and it disappears, then they re-post and it disappears again, my opinion is that this indicates that this is *not* the place to discuss that topic. Instead find another board. There's no money in running BBSs. Nobody here is going to pay. So the only reason to run a BBS is self interest. Anyone donating their time and effort to run anything basically owns that resource and can do with it as they wish. If the board owner is relatively gracious about quibbles over board policy, then that earns him high marks in my book. He doesn't have to listen, respond, or even allow the discussion to occur. We're visitors and houseguests using a free resource that none of us would ever pay for. For some reason this simple fact escapes everyone complaining.
Wed 26 Feb | Joel me fait chier | Except Joel does not run this site only out of the goodness of his heart. See that banner at the top 'Fog Creek Software'? He has created a small community that happens to be the target of his company's software. It's called marketing.
Wed 26 Feb | | Monkey hand! Monkey hand! Five fingers on your hand like a monkey! Monkey hand! (belaboring the obvious)
Wed 26 Feb | Heisenberg effects indeed | Based on my experience on the Intuit board, I'd say that the trouble with random deletions (particularly if there is no explanation as to why a certain topic got deleted as opposed to a different one) is that eventually users get fed up. If you post a question / comment / whatever, and it is immediately deleted, you're not as likely to post next time, especially if you have no idea *why* it was deleted. If you respond to a thread (and many of the deleted threads had several responses) and it is subsequently deleted, you become less willing to spend time responding to a thread, on the chance that it will get deleted. If we use the french threads as an example - each of the thread had a slightly different topic: #1 asked about learning French in general #2 wanted to know why #1 got deleted #3 asked about learning french software terminology So, possibly #1 was offtopic (although more interesting than the endless threads about interviews), and #2 was just noise. But I agree to confusion about #3. Esp. since we've had discussions about languages in general before, about learning in general, and even about learning language. We've also had many, many threads about doing software development outside of the US context - so one about software development in another language shouldn't be a stretch. So perhaps it is just 'French' that was objected to? I don't know - but I can tell you that I'm not likely to want to post to most threads unless they've been around for at least three or four business hours (seems to be the only consistent criteria I can get for determining whether a thread is going to get deleted or not). Maybe curbing conversation is the goal - Whatever. I don't particularly care, although it's sad. There are other message boards.
Wed 26 Feb | Bored Bystander | One possibility is that the threads about French were deleted because they attracted flames (Iraq war & France's position on the war in particular being a current topic.) And if the engine used for the forum lacks the ability to remove individual responses readily, the threads themselves just got whacked. Just a guess, I didn't see the threads and I have no idea what's under the hood. On the usefulness of a board vs the incentive to post: the 'Realrates' contractor message board suffered a major meltdown last year because the admin didnt' want any traffic about politics or H1B visas to continue, and so all casual (non career) discussions were prohibited. There was an immediate diaspora of 95% of the participants to another board created by one of the former users, after a major flame war in which the admin participated noticibly and insulted most of the users who differed with the stated policy. The point is, on a scale of arbitrary fascism from 0 to 10, 10 being Stalinesque, the Realrates forum actions ranked at 9.5 and the seeming JOS forum policy ranks (in my opinion) at about 1. There's ALWAYS going to be a real human behind the scenes of a BBS who 'wants' the BBS to be run a certain way. The government has not gotten into running BBSs as a form of social entitlement, last time I checked.
Wed 26 Feb | lone sunman | I think the people who see this bbs as some big marketing ploy by fcs are only partially right. There's always that aspect, but it's an interesting thing in its own right. It's a HARD problem, facilitating useful and meaningful discussions. Make some wrong choices, the discussions start becoming a series of in-jokes and bbs politics. Sometimes, you have to accept that people will say, 'I don't like how discussions are manipulated here!' and leave.
Wed 26 Feb | MaisOui | The threads themselves were pretty straightforward. The first one had a bunch of advice about how to learn french (given mostly in french, admittedly - maybe the moderator has to delete what they don't understand?). The third one had a number of links pointing to lists of french terminology for software development and there was some commentary on that. Nothing about the war. Since the repost of the french links (thanks!) is now gone (possibly due to the Amazon link?), but this thread is still here, the engine obviously has the ability to remove individual responses readily... So neither of those theories make any sense. My feeling is that there are some moderators that tolerate less than JoS, so yes, you're right in saying it could be worse - but also that the tolerance level has dropped for some reason.
Wed 26 Feb | Nothing to see here, move along | It's pretty obvious he is going to talk about both the board's UI design and his moderation policy. No big deal.
Wed 26 Feb | Benji Smith | While all of this speculating is fun, I would be careful not to get my panties in a wad over it. Apparently Joel is going to tell us about the board's policies in his article this Friday. After reading that article, it may be appropriate to make a judgement, but, at this point, we're all just jumping to conclusions.
Wed 26 Feb | Jim Dandy | Perhaps Joel is losing it?
Wed 26 Feb | Jim Dandy | He's selling the list big time. NO DOUBT! He has to make some money out of us. We all know how he looooooves money. right?
Wed 26 Feb | programmer | Since people have been asking, pretty constantly, for an explanation of the moderation policy for this board, I think it is high time Joel explained it. My belief has been that it is just plain inconsiderate for Joel and/or his lackeys to delete people's posts without good reason, and without explanation. By and large, those of us who contribute here are professionals, and if we write something and post it here, we are taking time out of our day to do so. This seemingly arbitrary silencing of certain people is creepy and wrong. It suggests an extremely childish, 'This is my board and I pick and choose who gets to play here' mentality. So I am glad he is finally choosing to explain, after people have repeatedly requested it. But it would be 'too easy' for him to just explain it on the board. He'd be 'giving in.' So he has to do it in a quirky and strange way (requiring subscription to receive an e-mail) so we can all be puzzled and think he has some important reason for doing so.
Wed 26 Feb | Prakash S | > If you post a question / comment / whatever, and it is >immediately deleted, you're not as likely to post next time, >especially if you have no idea *why* it was deleted. I disagree with you on this. I posted a topic with reference to job openings in South India, a while back. I got an email from Joel which said that my topic would not be of interest to most people (which I agree). My point being if you put an email id with your post, you ca get your *explanation*.
Wed 26 Feb | Stephen Jones | There is a policy of deleting threads that nobody replies to after a couple of days. That seems reasonable enough. There is also a policy of deleting 'off-topic' or possbly contentious threads, though this is not consistent. This policy is debateable but understandabke. But messages are also disappearing for no reason whatsoever. I suspect a bug in the software rather than anytihing else, (unless they're trying out a new random number generating algorithm and we're the guinea pigs), but the fact that no explanation is ever sent for the deleted posts stops one from reporting the bugs.
Wed 26 Feb | apw | programmer said 'My belief has been that it is just plain inconsiderate for Joel and/or his lackeys to delete people's posts without good reason, and without explanation.' -AND- 'It suggests an extremely childish, 'This is my board and I pick and choose who gets to play here' mentality.'' Well it is his board isn't it??? If this (deleting topics) is the hot button of the day, then I'd say its a pretty good day -apw '...I didn't even have to use my A.K....'
Wed 26 Feb | Prakash S | FWIW: http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=88 http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=89
Wed 26 Feb | Joel Spolsky | Actually the policy is that off topic posts are removed. Off topic INCLUDES learning french, I'm sorry, this is not a BBS about learning french. It also includes meta-discussion -- discussion about the board itself -- including this thread, which I should have removed a long time ago. Why? Because people come to Joel on Software to discuss software development, not to discuss learning french, and not to discuss the Joel on Software forum itself. Sometimes we delete typographical errors, e.g. where someone types the first half of their post and posts it by mistake, and it is immediately followed by the full post. Also I've been known to delete massively ad-hominem personal attacks against other people, especially participants, although I try to use a higher standard with regard to posts about myself, e.g., I'll tolerate a certain amount of ad hominem attacks against myself if there's even a modicum of useful argument somewhere in the post, rather than just pure venom without useful non-personal arguments. There are two people (both Fog Creek employees) who have the ability to remove posts. That's all. There are no bugs in the forum. Discussing the forum itself, as I said, is only of interest to a tiny fraction of the people here, and it usually signifies the beginning of the end of a community that has grown too large, and I hope that doesn't happen here.
Wed 26 Feb | Paul B | 'One possibility is that the threads about French.... And if the engine used for the forum lacks the ability to remove individual responses readily, the threads themselves just got whacked.' No, I've seen individual responses deleted, and the response count was not properly updated.
Wed 26 Feb | CreepingOutOnTipToes | ... it got awfully quiet in here. Are those crickets I hear in the background?
Wed 26 Feb | Jim Dandy | I still he will sell the list!!
Wed 26 Feb | Stephen Jones | People wouldn't think there were bugs if they had been informed of the deletions in the first place, or if the policy was clearly stated. It is normal to create another seperate forum to discuss forum topics when the forum reaches a certain size; that way you have the best of both worlds. Instead of deleting the 'meta-threads' you just move them.
Wed 26 Feb | Stephen Jones | >>>>>I still he will sell the list!! Jim Dandy Wednesday, February 26, 2003 <<<<<< What makes you think anybody would pay for you anyway? I've been on the emailing list much longer than I've been aware of these forums, and I can assure you all you get is a monthly link when Joel feels he's published an interesting article.
Wed 26 Feb | Prakash S | Hear Hear!
Wed 26 Feb | Herbert Sitz | Joel said, 'Discussing the forum itself, as I said, is only of interest to a tiny fraction of the people here, and it usually signifies the beginning of the end of a community that has grown too large, and I hope that doesn't happen here. ' And he may be right. But isn't that just one more good reason to implement a registration system? Keep the casual lookers, passers-by, and general riff-raff off the board. I like it the way it is and don't want it to change. I'm afraid the current board's popularity may do it in, and it seems like a registration system would be one good way to stem the tide.
Wed 26 Feb | Entropy | Joel Writes... << ...Because people come to Joel on Software to discuss software development, not to discuss learning french, and not to discuss the Joel on Software forum itself. >> Well apparently software developers eat, drink, sleep & crap software development. What's so wrong with someone asking about learning french? Ever consider that some people here might want to learn french in order to be SOFTWARE DEVELOPERS in france or wherever they choose. Entropy exists in all systems. You can try to contain it, but not without some opposing force. And here we are. Some readers/posters are discontent. Do something to fix it. Companies, organizations, people & systems must be adaptable & flexible, because as much as we like this forum and your articles, it's mutually beneficial. Don't forget that. And may I add, it's amazing that there are so few of us that care about the forum itself, that we have had countless threads on it.
Wed 26 Feb | realist | I'm only doing this so that Joel has to delete it. Joel is an idiot.
Wed 26 Feb | MaisOui | Assuming that the message labelled 'Joel Spolsky' was actually written by Joel and not by some random mischief maker: 'Off topic INCLUDES learning french' Okay, so general questions about learning french are offtopic (that explains why the first thread got deleted). However - given that it is a forum about software development - why is it inappropriate to ask about where to get software development terminology for a different language? Why'd the third post about french get deleted? Seems a bit strange that threads about going for interviews (somewhat more peripherally associated with software development, in my opinion) are not considered off topic, even when they are *not* at all related to the 'Guerilla Guide to Interviewing' (on topic). What about threads related to references, job openings, and unemployment? Or the 'How did you find this board' topic, which if it isn't a meta discussion, I don't know what is? '...including this thread, which I should have removed a long time ago' But, I thought: 'The purpose of this discussion board is to provide a place for Joel on Software readers to chat about topics that I posted' Joel Spolsky Oct 2001. Isn't this thread about a topic you posted? 'There are no bugs in the forum.' Always a dangerous statement :) Personally, I think the fact that the number of posts listed on the index page doesn't match the actual number of posts is a strange feature, as is that message about access violations and other database related issues. As a user, I would tend to call those bugs rather than features. '[Discussing the forum] usually signifies the beginning of the end of a community that has grown too large, and I hope that doesn't happen here.' Or it could signify some problems with the usability of the forum - as large numbers of different posters have been consistently commenting... I for one would never comment on the forum if it didn't have a number of things that drive me crazy, coupled with my knowledge that *you* think it is rational to determine what makes a good day etc - ie usability - and then figure out how to fix it. Joel, given that there are design elements that drive me crazy, other than going away quietly, other than complaining, and other than copying your content to my own site where I can play with it to my heart's content (strongly considered) - what do you want me to do?
Wed 26 Feb | Marc | > But, I thought: > 'The purpose of this discussion board is to provide > a place for Joel on Software readers to chat about > topics that I posted' Joel Spolsky Oct 2001. > Isn't this thread about a topic you posted? I think that is why it was not deleted. Were it not for his 'coming-soon' post, I don't think it would be on topic.
Wed 26 Feb | Chicken Fried Piece of Crap | Don't you people see the utter futility of these posts? Joel creates a forum as a gesture of goodwill, and people are attracted to it because of his reputation. People start using it. People then start demanding he do this, that and the other thing, start hassling him and stating innuendo about his motives, and endlessly debate the most proper way that he should go about doing things. It's as though some of you think that he's made an iron clad guarantee that he will do anything to make every single faction completely happy, or that he's created some implicit contract with each of you that you demand that he honor. This goes to show that NO good deed goes unpunished. This forum is a freebie. Its use is a *gift*. Grow up and accept this unequivocal fact. Get a life! Move on! Nothing to see here.
Wed 26 Feb | 7FFEFEC0 | Joel said 'Discussing the forum itself, as I said, is only of interest to a tiny fraction of the people here ...' At 49 replies and counting (if you trust the reply count!), this makes it the 5th most popular topic of those currently available on the forum. I'm predicting it'll hit #1.
Wed 26 Feb | Hey Chicken! | Actually, the various posts / complaints have built up over time. They started out with things like x is hard to use (eg if you visit the forum from multiple computers, finding the spot you left off is a big pain - adding a date to the list of topics would really be a help here). The response was something along the lines of 'the forum is carefully designed; everything is perfect'. But - this is coming from a guy who wrote an entire book on usability, and about how: 'The more you feel that you can control your environment, and that the things you do are actually working, the happier you are.' Except that a large number of people (take a count of the number of threads and screen names - Joel could do better and look at IP addresses) - are stating that not only can't we control our environment, but things aren't working for us. I don't think that the majority of people would have posted about our frustrations (due to 'Learned Helplessness'), except that Joel's published opinions seem to indicate that he'd at least be willing to listen. So far, I've not had even the smallest sense of - 'yah, that's a problem, but I won't fix it because I [fill in the blank - eg don't have time]' - instead it's 'I thought about everything carefully, and it's right'. It becomes a bit of a credibility issue - don't you think? That's why he's getting a hard time, IMO - not because of the forum design per say.
Wed 26 Feb | Jim Dandy | Stephen Jones: You're way too green man! who pays for our email list?? are you really a software professional?
Wed 26 Feb |   | << It becomes a bit of a credibility issue - don't you think? That's why he's getting a hard time, IMO - not because of the forum design per say. >> Agreed - I think on the whole it's more of an ego-tripping thing (granted, it's difficult for some to know/believe/admit that they might be ego tripping)...Moi? the guy that wrote a book on UI design, write something that has some serious usability issues? Nah - they must all be on crack.
Thu 27 Feb | Stephen Jones | 'The purpose of this discussion board is to provide > a place for Joel on Software readers to chat about > topics that I posted'' One of the reasons there has been a lower tnan normal proportion of posts dealing with software devellopment per se lately is that Joel's own articles have really been avoiding the subject since December (and please note that the thread on microphones and sound was exactly what I've been looking for for ages). Most sites have a webmaster address you can send comments about the organization of the site to. All that's needed is to have those comments posted on a small and separate forum, and the rest of the board can be kept clean.
Thu 27 Feb | Ed the Millwright | The forum is carefully designed; everything is perfect. I like it just the way it is. Why should he change it when it works great for me?
Thu 27 Feb | Scot (the first) | i enjoy using this forum more than any other. keep up the good work joel!
Thu 27 Feb | Nikola | You are asked to subscribe to the same mailing list used to notify about Fog Creek development. That's the reason the article will not be posted on the site.
Thu 27 Feb | Just me (Sir to you) | First of all a big thank you to Joel for breaking his radio silence on the issue of moderation. While not vital info it does help to put out some speculation that inevitably arises in the absence of communication. As Joel has referred to 'Heisenberg effects' in his latest mini article, I think we can rest assured that whatever it is this board will no longer be the same after Friday. This is not a bad thing. I have always found the ideas behind the design of this board, especially the graceful degradation, to be spot on. No positioning help beyond 'tread has not changed since last access (I know, only when you read on 1 machine), keeping up a long tread becomes progressively more difficult, keeping an older tread active becomes progressively harder were all excellent implementations of the underlying principle. Unfortunately in its current form I believe the current implementation has been stretched to its limits. Looking at the statistics on http://www.usabilitymustdie.com/jos/WW_MonthlyStats.html you can see that in the course of one year we have doubled in size. This also means that what used to be in the 'hard' parts of the graceful degradation curves, we now reach fairly quickly due to the increased traffic. It is also not so easy to see how just 'fiddling with some parameters' could solve the problems. There are no real parameters for most of the stuff, since it is all grounded in the natural dynamics of the mechanisms. We have limited attention span and memory. We do not like scrolling. Finding a point in a long list with no explicit clues becomes very tedious as the list grows beyond a few dozen entries. All the regulatory implementations of this board are based on these 'natural' tendencies. There is no simple knob we can turn up a few clicks on any of this to adjust. This unfortunately also means that there is in this format a maximum amount of activity that can be dealt with. We have reached this maximum. It will be very interesting to see whether FCS will be able to bring on a new system that is as brilliant as the current one was for the phase we are now ending.
Thu 27 Feb | tapiwa | Yo Joel, thanks for the post on moderation policy. If you had posted this ages ago, you would have had fewer meta-discussions as you call them. Like someone else noted, the biggest irritation is not that an individual post or entire thread gets killed. No. The problem is that it gets killed for no apparent reason. Let me site an example. In this thread http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=28267&ixReplies=14 (discussing T1 pricing) my post gave details of what we were paying in the UK. My post was zapped, despite the fact there had been at least one response to it. I then posted a response, complete with a link to a scanned invoice from our provider validating my claims. Again, I asked for an explanation on what the moderation policy was, and still no response. Joel, some threads die a natural death (3 responses). Others are alive and go all the way to 60 responses and maybe spawn child threads. That is how YOUR community decides what it wants and does not want to discuss. I think the noise to signal ratio is pretty low. Hell, this is the only site I link to from my site .. http://www.tapiwa.com As someone said, the problem with random, or seemingly random deletions, with no explanation on moderation policy, is that one is less inclined to spend time making a coherent response if one is not sure whether the thread/post will still exist in an hour's time. You are implicitly discouraging intelligent discourse. We are not making demands. Yes, these are your boards, but the community out there is what adds value to them. Do not unnecessarily antagonize them. Just one more piece of advice, these meta-discussions you so detest would seem less abominable if you looked at them as FEEDBACK.
Thu 27 Feb | Hey Chicken! | Ah Ed. Why should the forum change when it works great for you? Because many, if not all of the changes requested would have no impact on you whatsoever, while improving the experience for the rest of the users. How would a date/time of last change on the forum list make your experience worse? How would preventing other people from using Fog Creek nicknames spoil your day? What about allowing (not forcing) regular users to register an account, whereby other users could not use their screen name? This would mean that we could finally have some confidence in who is posting what. The only impact on you would be if you routinely impersonate others. If Joel allowed users to register an account, what about then allowing them to hide topics *not of interest* - to reduce scrolling. Again, no impact on you - you don't have to register, and if you did, you wouldn't have to use that feature. What if registered users could set the list of responses to scroll the other way (newest first) if that was their preference? [There are all kinds of things that could be done with registration, but I'm trying to keep my suggestions modest] What if the search/archive were improved such that it were possible to find threads that had previously been asked? Less repetition, I guess? What if there was a clear moderation policy, posted somewhere? You wouldn't have to read it, but some of us would appreciate it. What about if there was a separate forum on the side for comments about the forum - to keep them out of the software development forum. If Joel had registration, this could even be hidden from the riff raff, since regular users are most likely to post here. Of course, a feedback form that Joel visibly responded to would go a long way in quelling comments and possibly make such a forum unneccessary. The presence of the feedback form wouldn't change your user experience, would it Ed? Really though, attitudes like yours ('it works fine for me so it must be perfect') are *exactly* why average joe user is so frustrated with software in general.
Thu 27 Feb | Just me (Sir to you) | Chicken, since the dynamics of this board are 'compiled into' its user interface, changing the UI for you does most cetrainly impact my experience. This software is shared by the group. It facilitates certain dynamics, and makes other things more difficult. Your usage and mine interact, they are not separable.
Thu 27 Feb | Hey Chicken! | 'Your usage and mine interact, they are not separable [sic]' Actually, that's a myth. To some extent we already have different usage - the user interface that I am using here is quite different from the one I use on my other computer - different browser, operating system etc. Accessing this site via a text only browser is quite different from using it via IE, as is having it read to you. Yet - although I have used all of these mechanisms - I bet you haven't noticed a difference in my posts from user interface to user interface. If I were able to sort threads in reverse order, even if you didn't - it simply wouldn't impact you. How do I know that? Because I've done several usability studies on collaboration systems where users can interface with the same interface or different interfaces. It doesn't have an impact (and actually, most people simply assume that others have the same interface as they do. The interface becomes a non-issue - and ultimately, isn't that the point? When I'm contributing to a list - why should the interface intrude on my consciousness at all?) But my saying that isn't likely to get you to change your opinion. Probably you wouldn't believe me even if I shared my research results with you (sorry, can't do that). So, we'll agree to disagree. But - I think that there are enough people who agree with me when I say that using the forum causes a whole bunch of minor annoyances that add up. The annoyance factor is not just one user. It's not just ten users. And it's not a learning curve. This is clearly demonstrated by the high number people and posts on the topic. Long term, that is not sustainable, and the reason it is not sustainable is articulated much better by Joel himself in his book. And really, based on your previous post, I think what you are worried about is the long threads should die out naturally, and the only way to make that happen is to make it hard. The thing is, long threads die naturally anyway. They get boring, and people stop posting on them. But if it's hard to read them, what happens isn't that there are fewer overall posts - just that there are more threads (look at the number of threads about GPA in the last little while). People don't stop posting about a topic because it gets too hard to scroll to the bottom of the page. They stop because they get sick of the topic. So the current mechanism doesn't actually work.
Thu 27 Feb | Practical geezer | I am guessing that Sir is referring to changes that would affect the way people respond to topics. If a new option would allow you to easily quote others, chances are posts start showing up endlessly quoting someone quoting someone. That would impact someone elses experience. However, Hey Chicken is right in asserting that there can be many improvements that truly do not affect anyone else should they chose not to use it. Besides, the potential of abuse should not be the sole motivation for not creating something useful.
Thu 27 Feb | Just me (Sir to you) | If the intended dynamics of the board are gently enforced into the system through a technical implementation. If you meddle with the implementation, you also meddle with the dynamics. If I go to a discussion board where 99% of the users are participating through a treaded reader, and I see it through a flat sequential reader, I am not going to find this a pleasant experience.
Thu 27 Feb | Just me (Sir to you) | Practical Geezer, There can be many improvements and I am sure we will see some of these tested out in the (near?) future. I found the implementation of this discussion board one of the best I ever came across. It has served its purpose very well, but it is starting to show its cracks, not because of 'errors', but because the dynamics of a community the size we are now are very different from the much smaller community that was before. P.S. To all, my appologies for the many typos and language mistakes I make here. English is not my first language, and I do not have the patience to use a spelling and grammar checker on every post. I spend way too much time on this already.
Thu 27 Feb | Sammy | I am unhappy posting here, since it'll be used as Evidence that this is an important subject. ;) When the reality seems that long meandering threads are the absolute worst. This board is optimized for the early part of the learning curve, and is designed *not* to scale. Computers scale too well for human communication!
Thu 27 Feb | Mark Morgan | What I wonder is if Joel's post was deliberately provocative and the Heisenberg Effect is the effect of his post on this discussion.
Thu 27 Feb | apw | Hey Chicken said 'The thing is, long threads die naturally anyway. They get boring, and people stop posting on them. ' Most likely true, but another reason threads die is that they get pushed down the list. A forum I regularly visit (a car owners forum) the topic order constantly changes based on age of messages posted to a topic. I can post a topic, the topic makes its way down the list, someone responds, presto... my topic is at the top of the list, until the next topic or message is posted. -apw
Thu 27 Feb | Giorgio Pallocca | 'What I wonder is if Joel's post was deliberately provocative and the Heisenberg Effect is the effect of his post on this discussion.' It seems to me quite obvious ...
Thu 27 Feb | MaisOui | I was bored by this topic, but something about the second last post piqued by curiosity. At this other site where posts with activities get pushed to the top - how long does it take for a topic to die?
Thu 27 Feb | Stephen Jones | Having posts pushed to the top when somebody posts is a lousy idea. Posts should be allowed to die. Apart from anything else a thread scrolling off the screen allows one to retire gracefully from a flame war without loss of face. Allowing the reader to choose how things are displayed ia a reasonable idea, but it requries a lot of work, and I doubt if it is really worth it for a single forum.
Thu 27 Feb | Mark Morgan | MaiOuis, I run a site where the most recent activity in the discussion floats to the top of the list. In my experience topics with broad interest can become immortal.
How to get a part-time job? | Tue 25 Feb | Thanks
This has to be the worst economy Ive ever seen. (Although I am not old enough to remember the last recession. ) My situation is that I am out of college with 4 months of experience under my belt and have been looking for a programming position (and other part-time) work for a year.) Anyway, Ive been applying for computer programming positions all over the place and have followed the advice of the Parachute book. The fact is companies just arent hiring (that and they definitely dont hire me:) ). I mean gas prices here are $1.75. Sheesh. Cant even get in the car and go somewhere without digging deep in the pocketbook. So Im stuck looking for work outside of the computer industry. Now when I apply to these positions such as Drill Bit Packager and Subway C