last updated:06 Aug 2003 14:35 UK time
Joel On Software Discussion Forum
JOS Statistics - Recent Comments
(Comments added for week ending Sun 18 May 2003) | View Other Weeks
where did all the software jobs go? | Sun 18 May | Bagpuss
Ive been unemployed for almost a whole year now. Pretty much after a few months I gave up on the usual job agency route of getting a job. It seems as there are only two private companies in the whole of London seemingly wanting to hire software developers. These two companies have a recruitment process that goes on year round! So I decided to apply direct for standard (I mean non-research) software development jobs at universities and local governments. Ive got nowhere. Local governments dont reply. From tens of university applications, Ive only got three interviews. At all of them not one real technical question has been asked. My first interview lasted only a matter of minutes. All they did was take my photograph, say they couldnt answer any questions about the project until the second interview and that I should leave then and there. I didnt get the job or a second interview there. At my next interview I was told they didnt see people as academically well qualified as myself (I got As at Advanced level when I was 18 years old - over a decade ago now) and that I could do all the work in 1 day. I didnt get that job either. At my third interview (at a former polytechnic/college that gained university status after a change in UK law) one of the interviewers was bordering on rude and made fun of me when I said I was reading technical books and writing software in the spare time I had. What is going on? Where did all the jobs go? When will they come back?
Sun 18 May | S.C. | I heard that around 80% of jobs are not even advertised. That was in Toronto, I guess the figure is more or less the same in other countries. An applicant gets the job thru his people network. There are many people in the industry who are not even up to their job but hold a position (and sometimes get good pay). How good you did in school means almost nothing, esp, in a job market like this.
Sun 18 May | Joel Spolsky | Here's one hypothesis... packaged software is getting better and better and so there's less of a market for custom software, which puts programmers out of work. For example packaged CRM and HR software as a category didn't even exist 5 years ago, big companies had to write their own, now it's readily available off-the-shelf. Hypothesis two: the trend of outsourcing to India is peaking. I personally don't think this will last, for reasons too complicated to go into here, but that puts pressure on software jobs outside India. Hypothesis three: spending for IT goes in waves. It's at the bottom of a cycle now, recovering from an orgy of Y2K and Internet spending which was perceived by Upper Management as being a waste of money. So now IT is starved for resources. Even a 5-15% reduction in IT budgets basically means a 100% reduction in new hires -- all the brunt of this downtrend is being borne by new hires and consulting firms. On the other hand I'm starting to see signs that this wave is turning around and there will be a burst of pent up demand in the next year or so.
Sun 18 May | Bagpuss | I didn't bring up how well I did in school at the interview. The Human Resource woman did. The other interviewer said I could do all the work in 1 day. I got the impression they were saying I wasn't suitable for the job or they thought the job was really a bit low. I was miffed slightly because if they thought I wasn't suitable for the job they shouldn't have interviewed me.
Sun 18 May | Matthew Lock | I agree with Joel's Hypothesis three. IT booms seem to be driven by innovations, followed by a bust. I wonder if it will just continue to peak and bust every 5 years or so?
Longhorn | Sun 18 May | Dave B.
>>The individual windows in Longhorn will be semi-translucent, making it possible to discern the contents of one window hidden behind another. From - http://story.news.yahoo.com/news?tmpl=story&u=/nm/20030518/tc_nm/column_pluggedin_dc_2 - If you have ever played the MMORPG Everquest you know that the windows can be set to a transparent state and when the mouse is moved over the window is becomes opaque. Does anyone like this? I sure dont. I think its annoying and turn it off all the time. Anyway, Longhorn looks like a cool operating system thats borrowed much from other places. (i.e. BEOS, Linux, even games). It also appears to be a monopolistic venture. How will Linux catch up to Palladium. Microsoft owns you.
Sun 18 May | www.marktaw.com | It'll be interesting to see the adoption rates between the population at large, corporations, hackers, and programmers. Windows XP was controversial enough with it's 'must contact the mothership' thing, Longhorn will have DRM built right in.
Sun 18 May | Not Telling | Baking DRM into the OS isnt going to be a big deal at all. It'll just mean that there will be a market for DRM protected media. Its not going to stop people ripping CDs, movies etc and distributing them in non-DRM formats. So unless MS is going to somehow lock out MP3 (and other formats) from Longhorn, I dont see anything to worry about.
Sun 18 May | somebody | Translucent windows have been a feature in Windows since Windows 2000. And, sorry, but I'm not seeing any borrowed features from BeOS, Linux, or games. Could you elaborate please?
Sun 18 May | Dave B. | I'm simply saying that I don't believe Longhorn is all original. Not everything has been designed from the 'ground up' so to speak. And the feature set that it's adding has possibly borrowed from ideas and concepts that have existed in other software. I mean you don't really believe that the guys at MS come up with everything original? You don't think they borrowed some ideas from say, the BeOS file system, and incorporated them into their own? Maybe they did, maybe they didn't. I wonder what it's like to work at MS... Their website shows some pretty nice looking campuses.
Adding favorites URL to a web site | Sun 18 May | Snacky
Is there a way to select a URL on IE and then add the link to the favorites but also update your favorites sites list on a Web Site Is there a freeware or an IE plug in which does publish newly added items to a web site ?
Sun 18 May | www.marktaw.com | I use Blogger for this. Add a 'BlogThis!' link to your Links section and click it to add that page to you Blogger thingy.
POLL : How Many Of You Guys Are Video Gamers | Sun 18 May | Snacky
1/ Do you play video games 2/ Do you work or have you worked in the video game industry --------------------------
Sun 18 May | Gwyn | 1. rarely (flight sim occasionally) 2. no
Sun 18 May | tapiwa | I stopped really playing video games about five years ago. Not sure why, but I just lost interest. Nothing really exciting out there. Fancy graphics, awesome sound, but no real gameplay. I suppose I am waiting for the next SimCity (classic), or tetris. Something in their simplicity that was fun. Once in a while I play Age of Empires, but that's it. Even the Sims did not do it for me.
Sun 18 May | B# | Does chess count? When I'm really stressed I'll play golf.
Sun 18 May | Giorgio Pallocca | I'm a player (Baldur's Gate / Morrowind / NWN / Warcraft III) etc.
Sun 18 May | Tom Vu | leisure suit larry
Sun 18 May | GiorgioG | Age Of Mythology/Warcraft3
Sun 18 May | Dave B. | 1. Yes (Mostly MMORPGS, UO, Everquest, Wow and a few others like Baldurs Gate and Wolfenstein) 2. Nope ( But maybe someday )
Sun 18 May | Dimitri. | you mean like, kicking some allied ass in day of defeat? Of course. The important thing here is discipline. One hour, no more. Otherwise it is just a waste of time. Btw, can't wait to get my hands on GTA3:Vice City.
Sun 18 May | Tj | 2) Yes, I worked there for a short while. 1) No, because what you normally do in life has interesting and tedious parts, like most games. And most games lack the ability to abstract away boring parts. For example, take sid meier's alpha centauri. There are really routine parts that you should be able to script away. But nope, 90% of the time you're clicking away to get to the interesting 10%. The prebuilt AIs are worthless. (Though smacktalking with friends in games like mariokart or virtua fighter 2 is great.) Plus, many interfaces are intentionally painful, like emacs without remappable keybindings, so a precondition to success is being good at some interface you can't change.
Sun 18 May | X. J. Scott | 1. Interesting -- I don't have much interest in games either, unless I have taken a break from developing. I play a game about once a year or so on average -- last year, after about three years of no games, I got Riven and Exile and enjoyed them both at a leisurely pace. These are old cames of course, I tend to stay way behind the curve. Anyway, the thing about this is I think that development satisfies the same needs as gaming would, but the problem solving in development is more interesting and also when I am done with something I have really accomplished something rather than finished some game and feeling frazzled and worn and wondering where all the time went. So both activities require problem solving, but development is more satisfying overall. 2. I was going to say no but then I realized the answer is yes actually since I have designed gaming hardware and drivers. I just haven't designed games themselves.
Sun 18 May | Tim Sullivan | 1) Not as much as I used to. I play some ShadowBane, and was a StarCraft JUNKIE for 2 solid years (on the phone with 2 friends for hours every night) I'm eagerly awaiting Duke Nukem Forever, though. 2) Not professionaly; some hobby experience.
Sun 18 May | Dirk | 1) Not really 2) Yes Sounds strange, but i am more fascinated by the technology behind games than on the game play side. So I play games sometimes but I spent the last 8 years doing them for a living....
Sun 18 May | Alyosha` | No. No.
Sun 18 May | sgf | Not since the arcade version of Space Invaders was hot stuff. Guess I'm ancient, huh? :)
Sun 18 May | Edoc | 1. Not really. I don't have time for lengthy shoot 'em ups or mystery/mud stuff. While some of the games are fun, it adds up to a big chunck of time down the drain. If I do play a game, it's a simple arcade type that you can learn in 2 minutes and play during a 5 minute break. 2. Nope.
Sun 18 May | Prakash S | was big on Need For Speed, lost interest in Games a few years back. Not yet to answer the second question.
Sun 18 May | www.marktaw.com | 1) yes, but very few games interest me lately. I recently played Baldur's Gate (for the PS2) and Zone of Enders. Oh and The Two Towers game. Fun hack and slash games. I didn't like Max Payne much. My girlfriend and I like the Silent Hill series a lot. She's a bit of a Tomb Raider fan, but they got boring for her. I played the Metal Gear duo and enjoyed them. I'm gonna play The Matrix game next. I miss good adventure games... You know, like Zork and such. That was a good Genre that seems to only exist in either Military (Metal Gear, Syphon Filter) Ninja (Tenchu, etc.) and Horror (Silent Hill, Resident Evil).
Sun 18 May | www.marktaw.com | 2) No, buy my buddy is the webmaster for Gotham Games.
Sun 18 May | The Real PC | [the problem solving in development is more interesting and also when I am done with something I have really accomplished something] I feel the same way. For some reason I don't play any kind of games, video or not. I think of life as being a game, and I would rather spend my energy on that, because you can actually win something. No, I never developed games.
Sun 18 May | www.marktaw.com | Sounds like James P Carse's book Finite and Infinite Games.
Sun 18 May | Alex Moffat | 1. I used to play PC games but since I kicked the windows habit I've gone to playing PS2 games, and I'm enjoying it (and it saves money on video card upgrades:). I know, Sony ain't saints either. I find the PS2 nice as it's a break from sitting in front of the PC, which PC gaming isn't. I was never a big multiplayer fan so I don't miss that aspect. I'm just looking for quick, easy to get started with, and fun games. I'm really a really 'casual' gamer. 2. Never worked in the games industry. Few jobs for programmers, more jobs for content and level creation. Also, too many last minute crunches.
Sun 18 May | LesC | (1) Does free cell count (?) (2) no
Sun 18 May | Allagash | 1) Yes. My wife and I are playing through Zelda. She likes the 'chat with villagers' parts and I like the 'throw bombs at the big lizard' parts. 2) Yup, computer games. Surprising similar to my last job doing banking software, probably because everyone acts very professionally at both places. The big differences are games don't require much of an audit trail and phrases like 'this is similar to Conan the Barbarian's universe' don't tend to come up in meetings about banking software. Plus, programming games is much more interesting to me.
Sun 18 May | Steve H | 1) Unreal Tournament 2003. I 'binge and purge', ie. I won't play at all for weeks at a time, then I'll play obsessively for a few days. It usually starts when I tell myself I need to take a break from coding and it ends when I realize how much time I've wasted! 2) no.
Filtering Mechanism in Access 2000 | Sun 18 May | mark
Hi Guys, Im wondering if someone can help me on this. I have an access database that has a text field named Description I want to do a vb module in access (or anything else) that would act like a filtering mechanism. Ok here is the problem.. A description field would have something like this PIPE, 6, Sch. XS, BE, SEAMLESS, ASME B36.10, Charpy per ASME B31.3, Section 323.3 at -45°C, NACE MR-01-75 Now I need to divide the output into 4 parts called Pipes, consumables, Valves and instruments (this might mean 5 tables, one for unsuccessful ones). For example, the above has Pipe, I need to be able to extract PIPE (as well as its accompanying fields in the record) and display it seperately from fields that would have terms like valves, instruments and consumables. But there is another problem, sometimes they do not appear as pipes, (yet must come under pipes) For example ELBOW, 2, 90°, LR, Sch.XXS, BW, ASME 16.9, Charpy per ASME B31.3, Section 323.3 at -45°C, NACE MR-01-75 Now elbow is a name of a pipe that must be grouped/categorised with pipes. Other terms come under Pipe, eg Flange, Bend, Reducer, TEE etc.. The same applies for Consumables that has a sub-term like gasket. Another dilemma that has been puzzling me, in valves you have some items called Valve instrument, now this must come under valves and not instrument. Help on this would be greatly greatly appreciated, thankyou in advance. Mark ps I can send the current access database to show how far Ive gotten with it.
Sun 18 May | Albert D. Kallal | If your data text block is ALWAYS divided into 8 fields, then this is a reasonably workable problem. This is really a parsing problem. You would first break out the text block into 8 separate fields. That is a easy 5 minute job. (every programmer I know has some “delimiter” routines to pluck out the “n” value from a delimited list). If by some strange event you as a developer don’t have some delimiter code hanging around, then you can use the built in vb split command if you want also. (access 97 does not have that, but access 2000 and beyond does). However, if the “,” that separates the data is not organized, then your problem is GIGO The above problem here is the oldest term in our industry: GIGO GIGO is a term used when one person in a company calls a pipe a pipe, and another person calls a pipe a thing a ma do. You are wasting everyone’s time until a common language, and a common definition of what means what is defined here. A ugly block of text in a field does not represent any kind of organized data processing at all. By the way, that term GIGO was invented at least 40 years ago in our industry: GIGO is a term for Garbage In = Garbage Out. If you have not control on how that “text” block is being created, then you need to get control over that. Of course, as mentioned, if the 8 fields (separated by a comma) is consistent, then I don’t see the much of the problem here. If the data is consistant, then you can spend some time massaging the data into something more worth while. A few hours later, your data will be normalized. Often, when one tries to computerize a process in a company, if that process is not defined at all well, then the result of computerizing the process is not at all going to be well at all either. If you cannot ensure a consistent naming convention for that ugly block of text, and further you can’t assume the number of fields separated by “,” (comma), then I am at a complete loss here. You can, and should certainly create a table of synonyms , so that you can break out this data into a proper normalized data table. So, perhaps creating a simple table of categories so that Name Category ELBOW Pipe Pipe Pipe Flange Pipe So, you certainly can build a above table to “translate” what those names are “supposed” to be, but human will have to do that. With the above type table, it then it is easy to start normalizing your data. And, with normalized data, you defiantly should NOT have 5 different tables, but one table, and a extra field that tells you if it is a valve, consumable or a instrument. You might want to stop all code and data design here, and sit down before you start working in ms-access. I would read a few articles on data normalizing. Here is are few: ACC2000: Understanding Relational Database Design' Document Available in Download Center http://support.microsoft.com/default.aspx?scid=kb;EN-US;234208 ACC2000: Database Normalization Basics http://support.microsoft.com/default.aspx?scid=kb;en-us;209534 There are also a ton of ms-access newsgroups out there, and for most questions on ms-access, you will find those groups your best bet. And don't forget : www.mvps.org/access The above has a ton of useful code examples. Albert D. Kallal (Microsoft MVP [ms-access]) Edmonton, Alberta Canada kallal@msn.com http://www.attcanada.net/~kallal.msn
Sun 18 May | Pained | No offense Mark, but isn't this the Excel to Access conversion that folks helped you with a few threads earlier. In fact I believe some of them actually gave you a working program for conversion. Now I'm not trying to be rude here, but How in the hell did you get a job where you don't know what you're doing? I mean WTF? Some folks on this board don't even have jobs and you come to us with data normalization questions and how to do this and that? The fact is your problems are somewhat simplistic and even a recent college graduate should be able to figure it out. I'm not so sure I could swallow helping you for free. How does $150/hr sound?
Sun 18 May | mark | To Pained, No offence taken. I think I've asked this question out of despair. Just been under alot of pressure. I'm experimenting with queries at the moment. My position isnt actually db developer its web designer, as they db guy has left and there trying to find a replacement. Although i do have a basic access skills. And I'm reading up in my spare time on databases, as much as I can. And I'm currently on probabation, so they pay me peanuts. I might as well be working for free, it's just the experience I'm after.
Sun 18 May | mark | And honestly, if you do not want to help, then I wont be offended, it's a forum. Its a choice one makes to help one another or not, without neccesarily having to understand the circumstances behind the question. It is not like I'm asking for my work to be done, trust me, what I'm asking is a small part of my work.
Sun 18 May | mark | Dear Albert Thank you very much for your detailed help. Its just when i was given this project I assumed I can start from scratch, but its importation process that has thrown me off course, and its only now that I'm gathering pace. I do undersrtand the basics of the normalisation process, and I'm working on it now. Also, I've decided I'll use append queries, and run them via asp.
Sun 18 May | Stephen Jones | Dear Mark, Pained is evidently annoyed over something. I looked at your spreadsheet and the data was in a mess that stopped it from being converted easily. You're really in a mess here because you have been given a messy rewrite job when you would have enough on your plate designing something outside your real field of experience from scratch. As Albert says, what you need to do now is to sit down and design the database as if you didn't actually have any data there at all. When you are sure of the basic design, then you can go around moving the data into the correct place in the tables. One thing you ought to do is to stop thinking about an automated solution and start thinkiing about what the data really means. When you have decided that you will probably find that you can do the job piecemeal.
Sun 18 May | mark | Dear Stephen, You do have a valid point. Its very frustrating, I know the objectives of what i have to do. But its not like i was given something to start from scratch, hence the need i sought for automated solutions to actually bring the data into the right place so i can fulfil my objectives. It's all too unprecedented. But I'll spend the day doing just that. Thankyou for your kind response Regards Mark
Sun 18 May | Dave B. | Hi Mark, Wow, what a mess eh? Well take comfort in the fact that this sort of thing happens in IT departments all over the world. Anyway. If I were you, I would start from scratch. Take a couple printouts of the spreadsheets and identify the entities or objects that you find. For example, when I look at your spreadsheet I see the following entities: 1. A Project 2. A List of parts used to build the project 3. A Description and Specification of each part Now for each of those entities you need to ask a question? How is each entity related? (If at all) For example a project contains a list of parts. Can it contain more than one lists of parts? Looking at your spreadsheet I see 'Fabrication Materials' and 'Erection Materials'. If both of these are lists of parts then you could say that a project contains two lists of parts, one list contains the Fabrication materials and the other list contains the Erection materials. Now what is the difference between Fabrication and Erection materials? Fabrication materials are the individual parts that are assembled and held or 'glued' together by the Erection materials. (For all I know :-) Sooooooo... What can we gather from all this mumbo jumbo? We have to make precise statements about the nature of each entity we just defined. 1 Project can contain 1 or more Parts Lists 1 Parts List can contain many different Parts 1 Part can be classified according to its category Just remember keep asking questions. 'If I could ask Project Number 1 how many Parts Lists it contains it would tell me that it can contain zero, one or many different parts lists.' In doing so you establish relationships among the entities. The entities become tables in your database and the questions answer the type of relationship they share. As for parsing the description you could use the 'split' function and split the string on the ',' or you could simply write a little parsing routine that accumulates the letters of the current string until it hits the comma. Hope this all helps you and I sympathize with you as to what you are trying to do.
Sun 18 May | David Roper | Mark, You appear to be in a real dilemma and not getting much support. If I read your situation correctly, the basic problem you seem to have is that you need first to create a sensible database structure with which to work, which you don't have experience in doing, and then to load it from an existing database. Depending upon the consistency with which items have been described in your existing database, the latter may be very difficult to do. The former, however, is a very well researched area. To start with take a look at ISO 15926. This is part of the ISO STEP (standard for the exchange of product data) series and is a complete data model and reference data set for describing all forms of process equipment. If you google for it you'll find quite a lot of detail. It may not solve you problem, but even if you only spend a morning getting an overview you'll probably end up with a clearer picture of how to describe equipment and components. David
Hardware book? | Sat 17 May | Wrong end of the screwdriver
After 7 years of producing increasingly useful software that runs on PCs, the fact that I dont have a clue about the parts, functions, circuitry, etc of these machines is becoming a liability for me. My mother knows as much about this stuff as I do. But I can read. Looking at Amazon, an OReilly book, _PC Hardware in a Nutshell_ seems like a good start. Any other suggestions? I do not want to become an expert, just gain a little vocabulary and hardware common sense. What books fit my situation?
Sun 18 May | Stephen Jones | It might sound like overkill, but Scott Mueller's 'Upgrading and Repairing PCs' is in a league of its own. The amazon linik is http://www.amazon.com/exec/obidos/ASIN/0789727455/qid=1053232296/sr=2-1/ref=sr_2_1/002-5732513-0201657 It's the only book that sets out to explain the 'why', and I actually use it for bedtime reading. Also they give all the earlier editions on CD. When the guy starts explaining how you burn the EPROM chip in order to make your Camaro go faster then you have to pay attention! The 14th edition has just come out. Go to the books web site http://www.upgradingandrepairingpcs.com There are video previws and plenty of other stuff to convince you. Now an interesting little piece of trivia comes in here. The first thirteen editions of the book were called 'Upgrading and Repairing PC's' note the apostrophe. However for the 14th Edition it appears Pearson has updated its style book (mistakenly in my opinion) and the title now is 'Upgrading and Repairing PCs' without the apostrophe. The result is that if you type 'Pc's' in the Amazon search the latest edition you get is the 13th edition, and you will quite possibly find it is out of print. And type in 'Scott Mueller + PC' in the singular in the Amazon search box and you don't get any entries at all. I suspect that Pearson and Scott Mueller will lose sales because of this, and it is a very clear example of how even the smallest detail can have a disproportionate effect.
Sun 18 May | Lydbury | Mistakenly, as in you believe we should be writing CD's?
Sun 18 May | Stephen Jones | Correct. PC's, CD's, and the roaring 20's. Unfortunately the tide has gone out on this one and left me somewhat stranded.
Sun 18 May | Stephen Jones | Actually I've just checked my copy of the book and it appears that Pearson and Que always used the form PCs without the apostrophe. So the apostrophe must have slipped in to the Amazon site unobtrusively! Time to go with the flow and ditch the apostrophe, I suppose. 'Farewell black spot, thou had'st served me well!'
Sun 18 May | Gwyn | Interesting. Are you sure about that use of the apostrophe? Usually when you pluralise something you simply add an 's'. no apostrophe. I've often wondered if I am correct as a lot of people seem to do as you suggest.
Sun 18 May | A writer | (Regarding the apostrophe usage, not the original topic...) From - The Columbia Guide to Standard American English (1993) http://www.bartleby.com/68/50/4650.html PLURALS OF LETTERS AND NUMBERS [and abbreviations and acronyms]: usually add -s: [for example] two Xs, Ph.D.s, MIAs, 1990s, the ’20s. Use an apostrophe only when you need it to prevent confusion: [for example] Mississippi has four i’s. He got A’s in both courses.
Sun 18 May | Stephen Jones | I'm old fashioned. To quote 'A University Grammar of English' by Quirk and Greenbaum Section 4.36 b) ' Nouns of unusual form sometimes pluralize in 's: letter names: 'dot your i's' numerals: ' in the 1890's (or, increasingly, 1890s) abbreviations: two MP's (or, increasingly, MP's) The rub lies in that 'increasingly' because the grammar was written in 1973, and 'increasingly' seems to have become 'almost universally'. I suppose with the problems that can happen with internet searches if I use the minority form, I will have to change over. It does show that Amazon search is defective however, because, although there might be few people like me left that spell it the old way, there are a load of young people who use the apostrophe out of ignorance instead of conservatism.
Sun 18 May | Anonymous Coward | Mueller is good but not 'in a league of his own'. 'The Complete PC Upgrade and Maintenance Guide: (With CD-ROM)' by Mark Minasi is as good. http://www.amazon.com/exec/obidos/tg/detail/-/0782140750/qid=1053279074/sr=1-11/ref=sr_1_11/002-8030492-5469609?v=glance&s=books
Sun 18 May | Stephen Jones | I've got Minasi's book on Windows 2000 Professional. Yes it's good; very good. So I suspect the hardware book will be too.
A way to bypass the user/password dialog in IE? | Sat 17 May | Dario Vasconcelos
In order to integrate an existing application into a new one, Im thinking I could display the old one inside an iFrame in the new applications page. My only problem is that the existing application uses HTTP Basic Authentication (you know, the kind that opens a user/password dialog). That is, i need to do single sign-on to the old app. Ive done several tests building an authentication proxy in Java but I was wondering if any of you guys know of a way to bypass the browsers login dialog by programatically sending it the users credentials. I guess an ActiveX could do the trick (I have to worry only about IE). Would it be too hard to write?
Sun 18 May | Chris Blaise | Do you mean specifying the URL like: http://user:pass@site.com ?
Sun 18 May | tapiwa | maybe I am missing the point, but why not just remove the HTTP authentication. On apache, it is normally just a question of deleting one or two files (.htaccess and .htpassword). Remove that, and replace with whatever authenticatin you use in the 'parent' app.
How was the "Paper Prototyping" book selected? | Sat 17 May | Mitch & Murray (from downtown)
I am old enough to know that things do not happen for no reason. Attention Mister Joel: How did you run across the Paper Prototyping book? Did a PR outfit drop you a freebie copy? Did you find the book yourself, buried in the stacks at the local B&N? Something else? Simple questions, but fair ones I think.
Sat 17 May | somebody | Maybe he saw the review on http://www.useit.com ?
Sun 18 May | | I'm not too young to not yet remember when there wasn't a time that didn't not indicate that we don't want what we didn't know we couldn't have.
Sun 18 May | Simon Lucy | Ummm that overflowed my negative modifier stack.
Sun 18 May | UI Designer | Jacob Nielson highly recommended it in a recent Alertbox newsletter (but he also wrote the Foreward - big surprise) However, it is indeed well written. I bought a copy a couple of weeks ago and have liked it so far.
Sun 18 May | | foreword?
Sun 18 May | Clutch Cargo | Good Lord. Who cares how the book was found? If a PR frim sent a copy does that make it a bad book somehow?
Working for a non-software company | Sat 17 May | sooner
Ive only worked in small (< 100 ppl) companies & startups. Software companies all of them. Ive been offered a job by a fortune 500 company, but their business isnt software. Ive heard horrible things about beauracracy and being treated like a step child because you werent part of the profit center. Anybody have experience working for big non-software companies? Good, bad, or indifferent welcome.
Sat 17 May | GiorgioG | Hope you like lots and lots and lots of process. Had to talk to 5 people (and took a week to get done) to get an ODBC connection set up on a development server at a fortune 500 company - a client of ours. Then again, you'll have plenty of time to do just about anything. So take the good with the bad I guess.
Sun 18 May | Tom Vu | If you're contracting then working for a fortune 500 non-software company is a dream come true. It's not days that go by without doing anything; it's not weeks; it's months. The work is always trivial. Bueracracy and politcs (and irrationality) are also the norm. These large companies exist on inertia. They employ people that want 'stable' environments. IMO, it is everything a contractor would want and everything a smart programmer would not want. Although, if you are doing some kind of networking/router/firewall administration then a large evironment would be good.
Sun 18 May | sooner | This is an FTE job. I'm afraid that they will bring in contractors to do any 'real' work.
Sun 18 May | Tom Vu | This is an FTE job. I'm afraid that they will bring in contractors to do any 'real' work. Yes, they will. In-house programmers do nothing but maintenance (if that). You will become labeled as someone that can only do xyz. It's all CYA; managers and inhouse people do not want to be responsible for anything. Try an experiment... take the job and hardly ever show up; see how long you stay there for.
Sun 18 May | Philo | 'IMO, it is everything a contractor would want and everything a smart programmer would not want. ' HEY! The two are not mutually exclusive, buddy! [grin] Philo
Sun 18 May | Tom Vu | HEY! The two are not mutually exclusive, buddy! [grin] I was implying that a contractor (because he is hourly) would want bureaucracy. On the other hand, a smart employee would hate a slow moving bureaucratic environment...eventually quit and become a contractor.
Sun 18 May | Bagpuss | I worked in an IT department of an established company for just over a year. Not only did they not know what they wanted done but they didn't know what technology/programming languages to use. A double whammy. One team ended up using over the top technologies and taking over 6 months to write software that couldn't even do what Oracle's SQLPlus provides as built-in functionality. It was scary to watch.
Sun 18 May | Himanshu Nath | I agree with all the above. There are plenty of horror stories. Like taking 6 months to come up with requirements for a project that could be written, tested, and deployed in one month. However... at least one non-software company seems to 'get it' and are doing interesting things with real-time OLAP--Walmart. My 2 cents.
Sun 18 May | anonQAguy | My observations, based on experience, both as employee and contractor, pretty much echo what you've heard here. Plus, there have been threads on this at JoS already, but might be hard to find them. One observation another poster made in one of those previous threads which I thought was quite 'on point', was that you're likely to find yourself as a bastard step-child whenever you're not engaged in an activity the organization considers 'core'. Then, there are examples, such as what one poster cited in this thread, of big, non-IT organizations that nevertheless realize the value IT brings to their bottom line and does in fact consider it to be effectively 'core', or close to it. Apparently life is better in those, though I've never worked in that particular environment. Another observation I particularly agree with is the one made regarding the desire for stability over other things--that does seem to be the culture at such big, non-IT companies. Also, it's next to impossible to improve things at such a company -- the entrenched attitudes and inertia of the staff, along with the turf battles among the VPs, plus the accountant/business school mindset of the executive level management generally gets in the way of any real, meaningful improvements. Unless, of course, you just happen to find a VP or higher level executive who just 'gets it' regarding how organizations ought to operate, especially with respect to IT related issues. Then, you might be ok. In today's job market though, if you need the job, go ahead with it, just don't have any grandiose expectations. My recommendation would be to do the best you reasonably can in the situation, choose your battles carefully, don't expend too much personal political capital -- it's too easy for them to dump you if you make any waves, no matter how objectively correct your positions might be. Be prepared to do what most other folks in such situations do -- we used to call it 'so your 8 and skate', meaning come in, do your 8 hours and skate out at the end of the day. Use the relatively slow pace of things in personal study and improvement until circumstances improve and you can move on to more challenging things. Of course, once you get into it, you might find you like the slower pace of life, the stability, etc. There's a lot to be said for work not taking over your life, getting home at reasonable hours, being able to spend time with your family, whatever. OK, so maybe you're only doing maintenance on something, maybe a system you're working on takes several times as long as it should to get done because of office politics. Enjoy the opportunity to collect a paycheck with less stress than you would otherwise have. Do some freelance work on the side perhaps. Good luck with it,
Does anyone know how to access printer defaults? | Sat 17 May | JWA
Hi All, Ive been having a really hard time with this and I thought Id see if anyone here is familiar with this. Im working on an app that prints forms to a roll-fed printer. I need to be able to set the page length programmatically, but I cannot access it no matter what I try. The app is in .NET, but Ive also been trying through VB6. In .NET, enumerating through the printer sizes it shows the various widths supported by the printer with the height set to the current setting in the Printer Preferences. (This can be set in the print driver manually with no problems; Im just trying to access this setting to automate it.) For each size, the .Kind returns Custom, but when trying to set the .Height, it returns an error saying that the height can only be changed on sizes with a kind of Custom. Ive been through numerous Google searches but only found others with the same issue and no answers. On MSDN they have two code samples that should work for this, but neither actually works. When printing from them they send the print but the page height is unaffected. I assume that Ill have to programmatically access that page height setting from within the drivers preferences and basically change the default setting before printing. For this application that would be fine. Ive determined that I apparently need to work with the DEVMODE in the driver. I have documentation of the structure, but no documentation of how to actually use this in .NET or VB6 to access the property and change it. Does anyone here have any experience with this? Id appreciate any tips, pointers, etc. Are there any components that might allow me to do this? A managed .NET wrapper would be perfect, but I cant find one. This is driving me crazy. Thanks, --Josh
Sun 18 May | ZiggaDigga | Man this sounds familiar, basically what I struggled with last week. We finally decided to set up a custom form since the printers that were printing the labels would only be using that form size and went with that. In VB 6 you SHOULD be able to just use Printer.Height =
, but of course that doesn't seem to work right depending on the print driver. I really don't think Microsoft is to blame for this, but the print driver writers, since it seems that some print drivers work well with this and some don't...
Sun 18 May | JWA | Hi ZiggaDigga, Would you mind sharing the method you used to add the custom form that actually worked? I've tried a number of ways, but I can't seem to get that to work either. Regards, Josh
Sun 18 May | ZiggaDigga | What I did was go to to the printers folder on the workstation or server. Click File > Server Properties It shoud open up to the Forms tab. Just click the Create new form box, setup the size and margins, give it a name and save it. After that you will need to set the printer up to use the new form. Note, that some printer drivers do not play well custom form sizes, so this may not work for you. Luckily I was working on a little one off custom deal for a long time client, so they can deal with quirkiness...
A positive experience | Sat 17 May | The Real PC
I would like to describe a positive experience I had at work recently. I was asked to make a web portal demo, which my manager wanted to show the non-IT managers of the organization. I didnt know anything about web portals so it wasnt that easy. Last week he showed it to them and he told me they all liked it. Soon after that an office worker, who had been at the meeting where the demo was shown, told me she really liked my program. I realized my manager had actually given me credit and mentioned my name at the meeting! In previous IT jobs I seldom or never felt anything I did was appreciated. It makes me feel great, and I wonder if other companies do this.
Sat 17 May | Philo | Congrats, PC! Sounds like it's ended up being a pretty good week. :-) Philo
Sun 18 May | John C. Hillyer II | This is my first visit to briefly comment about what I've experienced in business software development, as an architect and coder. I've not experienced this scenario precisely, but it is representative of most of what the coder will experience in their peasant employment: Q '[traded that leisure day to work] [boss], this meets 14 out of 10 of your requirements, was completed in 60% of budget, and is 2x as sharp as anything ever done, like it?' A 'Yes, it's great, now when do you think R, S, and T can be done (, and expect a functional demo a week before your deadline.)'
User Selectected Interface | Sat 17 May | Joe Nieters
One of the things I have noticed while supporting end users is that there seems to be a few (perhaps many) different user types regarding desktop layout preferences. For instance, some users tend to keep their desktop simple, plain and organize program objects into deeper menu structures. Another group of users may choose bright colors, a variety of fonts and will place a thousand program icons directly on the desktop. At first I thought that there was no particular pattern or predictability to the preferences. Now I am beginning to sense that these groups are predictable and can be identified and categorized. This leads me to think that it might make sense to consider designing user interfaces that can be selected at runtime to match the preferences of the user type and that go beyond font and color selection to include menu organization, prompt text content, the ratio of graphics to text, etc. Perhaps an application should ask a few questions of the user and then adjust its interface to match the users type?
Sat 17 May | Joe Nieters | My 'ect' key must have bounced!
Sat 17 May | Mike Swieton | I always liked customizable user interfaces, myself. However, I am not sure about the approach of 'asking questions and ajusting to the user'. I don't want software to adjust to me: if you have N different skins, I want to look at them all and just pick one myself. Maybe I just fall into a particular 'user type', but I'd rather see what tunables are available and manipulate them directly. Or at least be able to. I disagree with the school of thought that 'the program knows best'. It may, but it also may not, and I want to be able to override any decision it makes on my behalf.
Sat 17 May | Joe Nieters | Perhaps a configuration wizard that lets the user select from a variety of options for each of the customizable program sections?
Sat 17 May | B# | I deeply resent when software Reacts to me. I don't want menu items to hide\show based on experience. If I want them turned off, I'll turn 'em off, thank you. I also become frustrated when there are things I can't control... Shoot for (not at ) the green-horn but allow the geek to do what he wants. Damn users!
Sat 17 May | Joe Nieters | I am not so much interested in turning features on or off but more with arrangement and presentation.
Sat 17 May | S. Tanna | Writing the documentation could be fun :-) 'Click the X option on the File menu (or it might be on the Edit or View menu on your system, or perhaps not a menu, but be visible as a glowing green goblin icon)
Sun 18 May | . | I think that's a great idea, but it all hinges on being able to assess preferences reasonably well.
Asymetrix Toolbook... | Sat 17 May | Somebody loved it...
was a great environment for teaching programmers beginners and designers. Its good enough for all kinds of Hypercard/Flash/Director types of apps.
Sun 18 May | Karel | cut my teeth on that one too... Wrote like a pseudo gis scenario builder in it (v1.5) User would modify land uses (forestry, agriculture, indsutrial,...) graphically, then run engine and look at the impact spatially (quality, amount of run-off) Would not have dreamt of using vb for the task at the time Still pop into the toolbook list just to see how it goes. Amazing how many of the orig dev ended up at MS!!!
Matrix Reloaded - only read after you see it | Sat 17 May | Nat Ersoz
I loved it. At first I was getting ready for dissappoitment... Too many special effects and trying to make lovers out of Neo and Trinity. I get the poit, but Neo/Trinity are better in black, not naked and intimate. But just after the Club Zion scene (and I get the point which was trying to be made, people are passionate, rash, emotional, ... - revel in it - but it was too contrived, IMO) , the whole thing takes off. I loved the French speaking you come to me without why schtick. And meeting the architect - it was like 2001 in reverse. You could almost hear tick tock in the background. Very elegant arguments for predetermination based on physical effects and rebuttals. Constant conspiracy theories bubble up - who is playing whom? A complete mind wrap. It moved so fast toward the end, I wasnt even sure which door he chose. Gonner have to see it again. That was too cool. We only do what we are meant to do. Ho-my....
Sat 17 May | Alyosha` | I saw it today. I thought it started out pretty horribly. The dream sequence at the beginning of the movie, ripped from context, seemed pretty pointless. There was a Jar-Jar added to it, in the form of Neo's flunky. In fact the dialog at the beginning of the movie was just crap, and the fight scenes -- well, we've seen the special effects before, so now it's getting a bit boring and repetative. Really, they could have cut the first twenty minutes of the movie, with no real loss. But you're right, right after the club zion / temple scene (probably ripped from the movie Blade, somehow), things began to pick up ... the movie got back into deep philosophical territory, toying around with free will / determinism, and they actually managed to come up with a decent plot, for a sequel. At the end of the first movie, I thought it was all a wrap, Neo would just continue to kick butt, but actually it's a bit more complicated than that. Keanu Reeves as superman is sort of lame, tho. The keymaker, on the other hand, rocked. The whole doors thing was a great invention that wasn't in the first movie. I liked the Trinity / Neo as lovers thing, if only for the fact that Hollywood considers a relationship consummated when the guy finally gets the girl, it's nice to see what happens six months down the road. It was a bit sappy in its whole, 'I'd rather destroy all of humanity than lose you' message, but oh well. The bathroom scene was pretty funny.
Sat 17 May | Eric Debois | I liked it. If i understood the last minutes correctly, Neo is a thrown exception, caught for the sixth time in that room with the architect. Or am I reading to much into it?
Sat 17 May | Herbert Sitz | Eric -- That sounds good to me! The big thing that's bugging me is the role of the Oracle, who it now seems may be operating for the machines in tandem with the architect. Is the Oracle, now understood, simply part of the exception handling system designed to make sure Neo is caught and handled properly? It seems as though all of the rule-breakers naturally come to her and she's in a perfect position to route the mature ones to the Architect. Thus, the profundity of the Merovingian's, 'You don't know the Why.' Neo and Morpheus think it's to get the key to the source mainframe so they can destroy the machines, but really it's to get the key to the source mainframe so Neo can be used to reboot the whole system for another go-round. Also, what of the Oracle's 'intuition'? Since the Oracle is really a program I don't see how her intuition could be the same as human intuition. She's still bound by rules. (Okay, maybe human intuition is, too, in the real world; but I don't think it's supposed to be thought of that way within the movie-world of the Matrix.) So aren't her predictions only 'usually' correct -- or only 'almost always' correct? I think the Oracle may just be amazingly good at predicting the future, so that she convinces humans that she actually knows it. But I doubt whether she can fully account for human choice. So the machines' exception handling system may be foiled by human free will. If so, then one big theme in the final part with be a total mindshift for Morpheus, who will have to abandon his firm belief that everything is predetermined. Humans have true freedom of will -- a freedom that is incompatible with predetermination and beyond the predictive power of machines. And they will somehow use this to defeat the machines. I was disappointed by some parts of the film, namely the human party scene, the overdone and repetitive martial arts scenes (and why is Neo now not as powerful against the agents as he was at the end of the Matrix 1, at the same time as Morpheus and Trinity more powerful against them?), and the long drawn out car chase scene. The highway chase scene, especially, is somewhat generic and could almost be part of any other big special-effects action picture. There's enough else in the move that's humanly interesting and intellectually interesting that I think the movie would've been better if they skipped some of the big-scale special effects stuff. Though I guess maybe that stuff will appeal to a big part of the move-going population, judging by the popularity of other big special-effects movies that don't have the redeeming qualities of the Matrix.
Sat 17 May | Herbert Sitz | Another interesting question: Will some of the human free-will that helps them defeat the machines in Matrix 3 end up coming from Mr. Smith himself?
Sat 17 May | Anonymous Coward | Why was neo able to stop the sentinels coming at him. Is it because Everything is a simulation?
Sat 17 May | Herbert Sitz | Hehe. Either that or Neo has become another Luke Skywalker: 'May the Force be with you!'
Sat 17 May | GiorgioG | The Matrix is running itself in a VMWare in a recursive fashion. =)
Sat 17 May | www.marktaw.com | I enjoyed the matrix, but the plot was too full of holes for me. None of the characters changed much from the beginning to the end. None of them faced heavy decisions 'your choices are already made.' They basically ran around doing what they were told to do. The main obstacles they faced? Fighting people.
Sat 17 May | Ken Klose | Too many scenes just seemed to drag on longer than they should. Trinity falling out the window, Club Zion, the highway chase, Neo fighting Agent Smiths, the conversation with the Architect. Each could have been cut in half time-wise, retained the same plot content, and made the movie flow much better. I think since the first Matrix was such a success, the studio gave the Wachowski's a little too much creative freedom and they ran amok. It coulda been a GREAT movie, as it was it good. Can't wait to see the next one though. Is the real world a simulation, or does Neo's powers extend into the real world? What's Agent Smith going to do now that HE's in the real world?
Sat 17 May | www.marktaw.com | Well, so far all we know is Neo had some sort of power over the machines in the real world. If the Machines are run by the same construct that runs The Matrix, then whatever power that allows him to control things in The Matrix may allow him to control the Machines. I don't think those scenes were too long... I think they were too pointless. They added what they had to the plot and then continued on. Did anyone else get the feeling around 2/3 of the way into the movie that they were summarizing and getting ready to end it? I had that feeling over and over again. When Morpheus was giving his speech, didn't it feel like they were doing flash-fowards to the next movie?
Sat 17 May | Alyosha` | Re: Neo destroying the sentinels in 'real life'. Neo got lucky. It was the other ship that EMP'd the other sentinels at the precise second Neo was doing his handwavy magic. His coma is probably due to an electric shock discharged from the sentinel as it was shorting out. The other idea is cooler, though ... the 'real world' is itself a matrix simulation. Perhaps the next movie they'll 'wake up' out of real life and find themselves in another matrix simulation. Maybe it's matrixes all the way up.
Sun 18 May | www.marktaw.com | Why not... The Architect said they had to have a choice... He didn't say that the choice itself couldn't be a lie.
Sun 18 May | jcm | Regarding the 'why' of the frenchman: In rural french-speaking canada, 50 years ago, they were used to say that 'why' was the question of the devil. I found the merovingian a very credible 'satan'.
Sun 18 May | www.marktaw.com | While I enjoyed the ramblings of the Frenchman and his wife, their little domestic squabble, his blaseness bugged me. The blase attitude of a lot of people in the movie bugged me. What was his reason for not giving up the Keymaker? If a character doesn't have a reason they're willing to fight for, the plot comes to a standstill... I don't believe his reason was that strong.
Sun 18 May | Brad Wilson (dotnetguy.techieswithcats.com) | Well, one could argue that the Frenchman didn't want to give up the keymaket, because he knew that would mean Neo would get to see The Architect, which means the system would be rebooted. I'm guessing he worked pretty hard to get where he was, and didn't want to see it erased in a three finger salute. :-p
Sun 18 May | www.marktaw.com | One could argue that sure... but... should we really be faced with having to figure out what a minor character's motives are for a scene that lasts a half hour? Remember, the lobby fight scene and highway chase scene are a direct result of this conflict. The Frenchman / Keymaker usher in the final conflict with the Architect. Basically, everything between the Maitre D' bringing them to the table and Morpheus' speech are the domain of the Frenchman. I wrote a little essay about the movie on my personal site. http://www.marktaw.com/reviews/TheMatrixReloaded.html
Sun 18 May | Jim Rankin | '(and why is Neo now not as powerful against the agents as he was at the end of the Matrix 1, at the same time as Morpheus and Trinity more powerful against them?)' When Neo first fights Agents in Reloaded, after the first couple blows he says 'Upgrades'. Not sure that Morpheus and Trinity are more powerful. Specific example?
Sun 18 May | Jim Rankin | There are at least two things that lend themselves to the idea that the main characters are still in the (or a) Matrix at the end of the movie: 1) Neo stops the machines; 2) Smith has 'possessed' the guy who sabotages the human attack on the machines (does it really make sense that Smith could upload his program into human neurons)? In any case, I believe the answer to the most important question is: why do the machines REALLY need the humans? For as much thought as the Wachowskis put into these movies, surely they didn't really think that the human battery thing would get past their intended geeky audience as being a viable explanation for the matrix. So assuming that's the case, the answer to why the matrix exists should unravel the other mysteries as well.
Sun 18 May | anonQAguy | 'throwing an exception' -- nice way to put it, but I don't think it's quite what's going on. They said the original matrices were perfect, but the human mind couldn't accept the idea of a perfect life, so the architect had to make it deliberately imperfect, and give them at least an illusion of choice, else the human mind would not survive. Personally, I don't ascribe to any religious belief structure, though I've had more than a little 'religious schooling', thanks to various flavors of religious private schools in the USA years ago, where academic classes on religion were required course work. That said, this whole idea of having to provide some choice to the human mind smacks totally to me of the stories about the tree of knowledge in the garden of eden. Do we take a bite from the fruit of the tree of knowledge and learn about truth and reality, or do we remain happy, compliant sheep, ignorant and completely subservient to the total control of a dominant power (the matrix/architect in the movie)? Interesting philosophical questions. Personally, I liked a lot of the formula action-flick scenes, despite their flaws and all. I thought the Neo/superman allusion was funny. Hey, it's entertainment, and I was entertained. The philosophical considerations, however, are the real 'hook' for me in the story -- are we going to find that there are n-levels of artificially-generated reality, all nested within each other? Cool stuff, IMO. Hmmm. Now that I read what I wrote, I think I convinced myself that the 'exception throwing' idea may be just the right expression after all--if the architect had to at least allow the illusion of choice, but he still had to maintain some degree of control (via the Oracle, for example), then he's got all the choices 'handled'. He's got all the things Neo can do scripted out already. So yes, Neo can throw an exception, but what Neo realized was that the architect's got all the exceptions handled already. What I took from the story was that Neo realized what he's got to do is to find a way to throw a completely 'un-handled' exception -- something neither the architect nor the matrix are equipped to deal with. When Neo can do that, perhaps he can crash the system and break out of the layers of simulation and into reality--get outside the system he's been in. He'll have taken a bite of the apple, and will have found a way out of the 'garden' of stasis, ignorance, and control. Well, right now, the matrix or whatever, is telling me to get back to work, so cheers all,
Sun 18 May | Jim Rankin | Also, what are the conflicts between the machines? In the first movie, Smith expresses his loathing for the job he has to do. Specifically, how it forces him to interact with humans. Now that he is free of that burden, what does he want to do to the programs that forced him into that role for who knows how long? Do the programs of a higher authority know what happened to Smith? Are they trying to stop him? How about the Architect and the Oracle? Seems likely that they're using Neo each in their own way to get one up on the other. As to the general complaint about the lack of overt conflicts in the plot: that in itself is an overriding theme. The persistent feeling of the characters that there are no choices available to them. With so many open questions, the Wachowskis have definitely painted themselves into a corner. Either Revolutions will brilliantly wrap up all the loose ends, or it will show that they really just got in over their heads.
Preventing illegal use of my application. How? | Fri 16 May | Sergio
Im about to deploy a new application that generates management decision-support results, using a somewhat complex algorithm that must be used only by licenced users. This algorithm is one of my clients main assets, and he has been developing and inproving it for many years. So, I need to be sure that anyone that has not paid for the software will not be able to get results from the application, or at least make it very difficult. I know that this has been always a problem for every developer and application vendor, and that there is no definitive solution, but in this case there is the oportunity to use any procedure, not matter how cumbersome to the user, to help avoid missuse. Although the app is a VB6 .exe windows application, everything concerning the sensitive algorithm is encapsulated inside an activex .dll (VB6 dll). I first thought of licensing the component using typical ActiveX licencing, but that does not prevent a licenced user from giving the application and licence key to someone else. Neither would do CD-Key protection. I was thinking about some manual challenge-response process that would be performed at installation time. The installer would generate some hash of machine specific values, like machine name, IP address, operating system version, or anything that would help identify the specific installation. The user would have to copy and send that challenge string to my customer. He would generate a response using the challenge message and some private key encryption and/or signing algorithm, and then will send the response to the user. The application would not provide results until the response registration message was registered and validated with a public key. That would be needed in every installation, but that is not a problem since every licenced user does not need to install it on more than one machine (it is not a daily use application). This is the only way that I have thought that might do the trick. But Im not very sure about it. I have no experience implementing such encryption and security features, and wanted to see if you had any recomentatios or resources on the subject. Is there any good commercial solution ready that will work with VB ? Is ActiveX licencing useful for this ? Should I use windows CryptoAPI? The range of operating systems I need to support is Win98/ME, 2000, XP. Thank you very much for your time..
Fri 16 May | Li-fan Chen | You might try making that crucial function a SOAP over SSL operation. But you'll probably have to pass your working values by value (instead of by reference) (YMMV). Is this too much trouble? It might be, but it will protect it from illegal use for as long as you like.
Fri 16 May | | Sergio, your thinking is correct. The approach is to generate some identifier specific to the machine, then have the customer send that 'serial number' to you, for which your company generates a key. This approach doesn't inconvenience honest customers, and prevents easy transfer of licencing keys to other computers. These schemes can of course be broken if someone is keen enough, but they're reasonable for commercial operation.
Fri 16 May | S. Tanna | Try reading shareware authors messages boards on how they do this - and extra security they use if their app is on the Internet as a download (the moment these are released, they are under attack from crackers) Some tips from this environment - Don't put a clear text message in the binary saying something like 'Thanks for entering the password' (or put dummy ones in, which aren't connected to the real one which doesn't appear in the binary) - Spread the password check code all over your app and make the logic dependent on it. If the code says something like if ( bPasswordEntered) { ...do this...} the assembler it generates is easy to hack - Don't write key check code in a language which is easy to disassemble like Java or C#. - If you use C you might consider putting some dummy inline assembler which has the op code (but not the parameter bytes) for some instruction. Jump over this in your C code. It wil have no effect on the runtime, but might throw off their disassembler. - Maybe make a whole bunch of possible passwords to test against, for each machine id. Only one of which is valid. The others are radically different (some can't be entered by accident), but don't have the same effect as the one true password. This makes it harder for a hacker to figure out which one their key-generator will generate - When making passwords or hashes for this, use logic that can not easily be reversed. For example // easy to reverse // get X from user (a number they enter) x++ ; x=x*2; x^=0xFFFF ; if ( x == 0x1357 ) { AfxMessageBox( 'Thank you entering password' ; } looking at this, I know x needs to end up at 0x1357. Therefore hacker would work back thru the steps from the disassembly. Before it was 0x1357 it was 0xECA8 Before it was 0xECA8 it was 0x7654 Before it was 0x7654 it was 0x7653 Irrevisible logic is one where it is real tough or time-consuming to work backwards, consider for example (this is stupid example, but illustrates the point) - it would take a lot of time to work out what you enter to end up with x == 0x1357 // Hard to reverse // get X from user (a number they enter) label0 : if ( ( x & 0x000F ) > 8 ) goto label1; if ( ( x & 0x00F0 ) > 0x80 ) goto label2; if ( ( x & 0x0F00 ) > 0x800 ) goto label3; if ( ( x & 0xF000 ) > 0x8000 ) goto label4; goto done ; label1: x^= 0x5A5A ; goto label0 ; label2: x^= 0xA5A5 ; goto label0 ; ..etc.. done: if ( x == 0x1357 ) { AfxMessageBox( 'Thank you entering password' ; } I do not have any experience of using commercial products (except dongles) for this type of thing. The concern I have read on shareware boards, is these products could be under attack from more crackers... as compared to people who are only interested in your program would go after your specific scheme.
Sat 17 May | | Personally, I think trying to beat every possible attack is a misuse of resources, unless you're protecting missile intercept vectors or something. For commercial software, the aim is to ensure customers know you expect payment, that they have a legal obligation to do this, and that they can't casually use the software without paying you. People in companies know it's not worthwhile for them to misuse significant software. For small, low-priced applications, again, most people don't mind paying for something useful.
Sat 17 May | S. Tanna | Well, I sell shareware Usually within 48 hours of releasing any new product on any big shareware site, some guy in China or Russia has released a crack or key code generator. Fortunately these guys don't seem to test their stuff. Using the above type of ideas - none of these cracks work. That doesn't mean people don't try. We get emails and calls every day, not to mention posts on our discussion board, from people who are trying them (we have methods to tell based on what they tell us), and this includes even big US fortune 500 companies, and even in one case a newspaper... In some cases they are blatant, they will openly admit to using a crack, sometimes saying something like 'I was only trying it', or 'people do it all the time'... and guess what, they often pay when they can't make the crack work. Our sales TRIPLED when we tightened up the system (originally it was simple and was broken). Admittedly some of this was because the software got better at the same time (so more legit users), but undoubtedly some was due to the cracks not working any more.
Sat 17 May | somebody | I won't name any names, but based on some very bad first hand experience, I'd recommend being VERY cautious when looking at 3rd party solutions. If you decide to go that way, do not assume that the 3rd party component is well tested and compatible with a variety of software and hardware configurations. You will need to do a full battery of testing on a wide variety of machines yourself. Make sure you spend plenty of time on the phone with tech support before you spend money because they might decide to ignore you afterwards. Also, be willing to spend some time looking for related cracks on the net and trying to crack it yourself. Some of the components available are VERY easy to crack. Keep in mind that this is a critical component given that anything wrong with it might prevent customers who paid money for your product from using the product and they will get (justifiably) VERY upset about this. If you decide to do it yourself, keep in mind that most of these systems (including, as far as I can tell, the one you described) come down to eventually to one point in the application where you do the test and check if it passed. It's trivial for someone who wishes to crack your scheme, no matter how fancy your encrypted challenge & response mechanism is, to locate this point and simply NOP over it. Your fancy encryption system never comes into play because someone changed the code to jump over it. It can be more effective to sprinkle simple checks throughout the app rather than have one solid test in one location.
Sat 17 May | S. Tanna | > It can be more effective to sprinkle simple checks throughout the app rather than have one solid test in one location. I agree it. Additionally I would make some vital part of your application dependent on the check occuring - i.e. so if the check is NOPed out, so essentially variables don't get initialized or something.
Sat 17 May | Philo | Incidentally, I'd strongly recommend setting up an automated key generator. It will make your clients much happier when they have to reformat a wayward system at 2am on a Sunday. Philo
Sat 17 May | Sergio | Thank you very much to all of you. Ok, so I will try to avoid using 3rd party solutions. That's for sure. Unfortunately, I cannot setup server-side logic. As some of you suggested, I could have put the key functions as a remote service and that would've eliminated part of the risk. I can't automate the key generation for the same reason. Maybe for a future version. It's sad to say, but I wasn't given budget enough to go through all posible security risks. I might not take care of hacking/cracking scenarios this time, but would like to address at least the illegal user to user distribution problem. Another more specific question: What do you think is the more likely machine specific info that I can expect to succesfuly get in every machine? I just know that some of them have network acess and others don't (some might not have even a lan adapter), so MAC address might not be the best choice.
Sat 17 May | Peter Ibbotson | If you can use the mac address, it's relatively painful to get at you need to use the SNMP dll to get at it. The winsock FAQ has more info on this. Personally I did using a mix of IPX/Netbios and the SNMP dll to make it work on all systems. Once upon a time you could get a GUID and the MAC address would be in it, however that changed with Win2K (I bugged it at the time) for privacy reasons. Personally I would be tempted use that as part of a key, for non networked system you could use the SID instead but this vulnerable to image copies of disks. I would also suggest that you degrade the system somehow, possibly with a timer function i.e. it works but moans for a week , then goes readonly for a month, then dies. For most folks forcing them to have a NIC wouldn't be to big a hardship.
Sat 17 May | | S Tanna, thanks for that info, especially your own experiences as to the effectiveness of tightening up security.
Sat 17 May | Brad Wilson (dotnetguy.techieswithcats.com) | Here's the reality: you can't prevent anybody from hacking your code if you give them the code. The sooner you accept the fact, that happier you'll be that you're not wasting ridiculous amounts of time on solutions that will be beaten. If you feel you absolutely MUST be up some line of defense, then you owe it to yourself to use a third party solution (unless, of course, your time is valueless).
Sat 17 May | David Roper | If it is a commercial product, try using FlexLM
Sat 17 May | Li-fan Chen | If you find out that you weren't given the budget to implement all the security you desire, then at least consider at least getting a metrics system in place so you can tell when legitimate or illegal use is taking place. Ex: Always send the license key (original or copied from the net or generated by a generator) to a server (along with the unique system or network signature). If it's possible to crack your software so that it works without any use of license key registration.. have it request a patch (it could be a dummy patch) from your website after a random number of days or hours. This again reports more unreported cases (and might give you a chance to patch the software so that it fixes the vulnerability) Give a report on how much the company is losing by not spending more on security. It might give you more budget should the company decide the commercial software has a future worth protecting.
Sat 17 May | S. Tanna | My personal experience is the opposite A few days spent on security, probably had more effect on product sales than years spent on improving the product. In other words, from coding time to revenue, it has had the by far the best ratio. While obviously not unbreakable, it sets a higher bar for attempted crackers. It is the difference between locking your door, and merely putting a sign saying do not enter. 3rd party solutions are all well and good, but there could be the risk of somebody developing a universal hack for all products that use a particular third party solution.
Sat 17 May | www.marktaw.com | Here are a few of my observations. I'm a non-programmer, but a software user. 1. Check out CollakeSoftware.com - you can add the .dll to the .exe and then compress the whole thing. That's an extra step for any hacker. I don't know if it's a big one, but it's there. 2. What about those programs that allow you to download the installer and then the installer goes out and downloads the components you want. I've seen this from Windows and Netscape and a few other places. 3. Keep changing the way you protect the software and releasing new dot versions. This way the hacker sites fall out of date on a regular basis. They'd have to bundle your app in with their hack to make it usable.
Sat 17 May | JWA | Hi Guys, On a related note, has anyone here had any experience with Xheo.Licensing (http://www.xheo.com/Products/Licensing/)? It's a third-party .NET licensing component. The features list looks great. It supports activation, time-limiting, etc. I've read all of the reccomendations against FlexLM, so I've been keeping my eye out for a better option. This looks like it might be promising, but I haven't spent any time with it yet. Unless anyone has had any bad experiences with it I thiunk I might throw it into my next beta juist to check it out. --Josh
Sat 17 May | | Brad Wilson, I don't understand what you're saying when you say that providing 'code' automatically exposes it to be being 'hacked.' That's quite obvious. We're talking about providing executables. It's not accurate to describe that as 'code.' Code refers to source code. Is that what you meant?
Sat 17 May | | I should add too that I disagree with your claim. Registration systems prevent casual misuse, and good ones prevent even elaborate attacks.
Sat 17 May | S. Tanna | I believe SoftIce is the tool of choice for a lot of folks breaking these systems I read a tutorial on some crack site, to learn how they did it, so I could make my systems harder to crack. What softice does is allow them to break point the program while it is running and step thru the disassembly. They then figure out the algorithm for how passwords are generated or patch the executable. Go back to my original ideas, and you'll see most of them are designed to stop (or make it tougher) for this kind of attack. First look at naive example: // easy to reverse // get X from user (a number they enter) x++ ; x=x*2; x^=0xFFFF ; if ( x == 0x1357 ) { AfxMessageBox( 'Thank you entering password' ; } A cracker would look at the disassembly find the message string, work out how to trigger it (x==0x1357) amd then work back to figure out what X to enter. or... a cracker would find a jump-not-equal instructions for x==0x1357 and patch it to a jump-equal. THen any passwords except the real one, now works, by changing a single byte in youre executable. Explaining my earlier suggestions - Don't put a clear text message in the binary saying something like 'Thanks for entering the password' Why: They search the binary for this message, then work back through your program to see how it is triggered. - Spread the password check code all over your app and make the logic dependent on it. Why: Otherwise they only have to patch a single byte/block of code. By making your application logic dependent on it, you also mean that a less than careful patch would break the app. - Don't write key check code in a language which is easy to disassemble like Java or C#. Why: Obvious decompilers. For C or C++ they get back only x86 if they disassemble (which is more work to understand.especially without symbolic names). Whereas for Java or C# they can get back something close to the original code including symbolic names, etc. - If you use C you might consider putting some dummy inline assembler which has the op code (but not the parameter bytes) for some instruction. Jump over this in your C code. It will have no effect on the runtime, but might throw off their disassembler. Why: It will throw off their disassembler. They have to start re-disassembling after each affected jump rather than disassemble the whole thing. You could make macros which did this which you pepper the relevant code with, and eat up tons of their time at trivial effort to you. - Maybe make a whole bunch of possible passwords to test against, for each machine id. Only one of which is valid. The others are radically different (some can't be entered by accident), but don't have the same effect as the one true password. Why: If they figure out the algorithm to generate passwords, it makes harder for them if they have figured out the algorithm for the one true password, or for one of the dummy passwords. Also if they have to figure out a whole bunch of systems, and then work out which is correct, they are going to need a lot more time and effort to break it. - When making passwords or hashes for this, use logic that can not easily be reversed. Why: Remember I said how they would try to work back from the part of code which says 'Thanks for entering the password'. This makes it very hard to work backwards.
Sat 17 May | somebody | >> We're talking about providing executables. It's not accurate to describe that as 'code.' Code refers to source code. Is that what you meant? << Executables contain the program as machine code. There are other programs (disassemblers) that'll convert this machine code into slightly more readable assembly code. It is, without a doubt, accurate to describe an executable as code. How else would the processor know what to do? It's trivial for someone who knows what they're doing and who has the right tools to view the executable as code and to modify it to skip checks.
Sun 18 May | | Of course executables contain machine code, but that is not normally what is meant when people refer to 'code.' Anyway, this is a side issue. Sorry I raised it.
Sun 18 May | WW | One of the most tried tricks in our case is the “not-hands-on manager” type: “We have discovered your product on the internet. Please send a pdf manual or help file to commence evaluation immediately, we are running out of time….” = “I am running your cracked product, help is nowhere to be found, send me some documentation please.”
Sun 18 May | somebody | How do you determine that they're not asking for the manual to legitimately evaluate the product?
Sun 18 May | andrew m | There is only one gauranteed way to prevent piracy: Don't release any software. If that won't work for you, just accept that no matter how many thousands of dollars you spend on programmer wages while implementing your ultimate security system, someone will crack it in a weekend, if not sooner. All the excellent advice on how to prevent it taking 5 minutes rather than a weekend still won't keep your code from being broken. If you must have a registration key to stop casual hackers (not a bad idea) then focus more on making it reliable and easy to use for your customers. Losing a sale to piracy is bad. Permanently driving a customer away from your business with a faulty protection system is worse.
Sun 18 May | Chris Tavares | If you really want to node-lock your software (let it only run on one machine) then rather than some sort of software solution, I'd suggest using a dongle. A dongle is a little piece of hardware that stores your registration key and does the encryption for you. If the dongle is installed, the software runs. If it's not, the software won't run. Easy for you, and the user's got some flexibility, since if they want to move the software to another machine all they need to do is move the dongle. The downsides are extra cost (you have to pay for the hardware), no download sales (since you need to ship hardware), and depending on the dongle hardware, potential driver issues (fear the parallel port dongle!). And the final concern is that, of course, the protection WILL get broken, regardless of what you do or what you use.
Sun 18 May | Alex | Dongle are probably the 'best.' That being said, I haven't seen a single security feature that couldn't be cracked eventually. Code is code. And it doesn't get more complicated then assembly which, while tedious, is not all that hard. All you need is soft ice and IDA. It's worth nothing that if you do due dilligence to make it reasonnably hard to do without circumventing the dongle/check, you've got DMCA protection on top of the stardard copyright law. Licenses are best enforced by lawyers.
Sun 18 May | . | > If that won't work for you, just accept that no matter how many thousands of dollars you spend on programmer wages while implementing your ultimate security system, someone will crack it in a weekend ... But protecting your work will more than pay for itself by the revenue you earn. For some reason you're comparing the cost of protection against the boolean of whether a scheme might be broken. It's not as simple as that. Bank security systems could be broken if someone wanted to apply the resources. That doesn't stop them protecting their transfers. Making applications good is all very well, but a protected good application will generate a lot more revenue than something anyone can rip off.
RUP (Rational Unified Process) | Fri 16 May | Snacky
Has anyone have implemented project using RUP with and without the Rational ToolSet Can you effectively use RUP with the Rational ToolSet ?
Fri 16 May | Snacky | Sorry, my question was : Can you effectively use RUP WITHOUT the Rational ToolSet ? Joel : An EDIT Feature will be nice ;-)
Fri 16 May | i-ching | I've used RUP on a few projects - they work well for me. It's usefulness depends on the size of your project and the understanding of RUP amongst your team.
Fri 16 May | Ethan Herdrick | This is a very heavy methodology. Avoid it!
Fri 16 May | anonQAguy | With respect, Ethan, two points: 1) Beware damning a methodology in general, as one can normally find situations in which it would apply. This is as inappropriate as claiming that methology XYZ works equally well in all situations. As so many have said in similar threads here, basically it's 'use the right tool for the job', to which I would add the qualifier, 'and that is appropriate to your constraints.' 2) I did a consulting gig a few years ago where I implemented RUP for a new shop that didn't have any process, saw they needed one, and through a series of events I won't go into we ended up choosing RUP. As I read the documentation -- no mean feat, certainly, as there's a lot of it -- I saw that Rational themselves strongly recommends to anyone using RUP that they tailor its processes and artifacts to suit local conditions, at the shop or potentially at the project level, so you can keep it 'heavy' or make it as light as you want. Unless they've changed their stance in the last few years, they (Rational) took the position that (my words) 'here's RUP, the whole enchilada -- take from it what works for you, because the entire thing is probably more than you need for every cases.' So yes, RUP is heavy, if you use it as-is out of the box. Fine, take it and tailor it, with Rational's blessing. And for the record, I've never worked for Rational -- they offer similar services to what I did for my client, but I was totally independent at the time, so I'm not talking as a current or former Rational representative. In response to the main post, I would say that I kind of think of RUP as the top-level, or perhaps 'super-class' of development methodologies. I haven't heard or seen anything in FDD or XP or anything else that isn't subsumed within RUP. Hell, even waterfall's buried in there if you'd want to do it. So I think of the various methodologies one hears about as being special cases of RUP having been tailored down in one way or another. Regarding using their tools or not, Rational has done a lot to tie RUP as a process and their tools together as tightly as they can. Whether they've been successful or not is a different topic, but I don't see anything in the basic process of RUP that would force you to use their tools. It's been a couple of years since I spent any time reading RUP or Rational's documentation, so my exposure to it is dated a bit, but I think it likely one would find some implementation procedures, or their details at least, not to apply well if using RUP without their tools. At the higher levels, though, their general principles seem to apply pretty well irrespective of the tool used. Cheers,
Sat 17 May | Clutch Cargo | For a company that spouts methodology Rational's tools are crap. Rose in particular was horrific. I hope that their software isn't an example of what their methodology can produce.
Sun 18 May | Arron Bates | The problem with *any* methodology is getting it in motion. Once its going, any methodology is better than none. However, out of all of them, XP's the easiest to start. RUP is heavy, but it is very complete. It becomes more relevant the larger the team and the cycles become. Regarding Rational's tools... I haven't used Rose all that much, but ClearCase is the finest version control system I've ever used (CVS, PVCS, VSS, StarTeam and ClearCase). It's truly awesome, even if a couple of their dialogs are a little slow when used on larger projects (as in 'are you sure it hasn't crashed!?' kind of slow. my only gripe, but it's for truly large projects only with hundreds of baselines). But as I said, any methodology is better than none. All players on the team need to know what the game rules are...
Missing C feature? | Fri 16 May | S. Tanna
1. I can (a) Make a function whose parameters I figure out at compile type (normal function definition) (b) Make a function whose parameters I figure out at compile type (variable arguments function) 2. I can (a) Call a function whose address I know at compile time (normal call) (b) Call a function whose address I know at run time (function pointer) 3. I can (a) Call a function whose parameters I know at compile time (normal call) BUT...unless I am mistaken (b) I do NOT think you can call a function whose parameters I figure out at run time. Am I mistaken? If not mistaken, C is supposed to be (almost) a high-level assembler, so would you agree this is a missing feature? If you do not 3b is ever conceivable, here is an example how it might be used: I write a program which lets users interactively test some API by typing in function names and parameters. If it was say the Windows API I could use GetProcAddress to find the function to jump to, but there doesnt seem to be a C-way to pass the parameters in, if they are determined at runtime (consider if you wanted to write a scripting language with a way to call external DLL functions like VB does). Likewise if it was some other library, I would be able to make a table mapping strings of function names to function addresses, but still couldnt pass parameters in.
Fri 16 May | Nat Ersoz | I propose 3b is already implemented widely as the lowly printf() function. The parameter list is variable in length and all arguments following are determined at run-time. n'est pas?
Fri 16 May | Nat Ersoz | The reason you cannot perform simialr operations with the Windows API is that the function calls are declared __stdapi (PASCAL calling) rather than __stddecl (C calling convention), and PASCAL doesn't support variable argument lists. Variable argument lists would be a requirement, since different types would have different widths which would have to be deteremined by the 'standardised' first argument (in the printf case, the format specifier - which though usually a string literal can itself be dynamic) . MSFT saw PASCAL calling convention as being faster, and heck Apple was using it - so why not? Given that the MSFT paradigm is highly optimized for speed and minimum size, they chose PASCAL calling convention giving up the ability to make C style calls in their API.
Fri 16 May | S. Tanna | You both misunderstand printf is 1(b) not 3(b)... a function which determines what its parameters are at run time. As an illustration. Try making a program which - Asks out how many integer to input (ok) - Inputs them all into an array (ok) - Generates the format string like '%d %d %d...etc' (ok) - Make a **single** call to printf passing the format string and all the array arguments in this call, (I don't believe you can do this) i.e. at runtime it has to decide whether to do (and no including every possible variation is not allowed) printf( '%d', x[0] ) ; or printf( '%d %d', x[0], x[1] ) ; or printf( '%d %d %d', x[0], x[1], x[2] ) ; or etc. As for PASCAL vs C calling convention.... under pascal calling convention it is not possible to do 1(b) [well in assembler I think you could do pascal-like which did], but it's not the issue. Under both C and Pascal calling conventions, C language does not allow 3(b). Off topic: I understand MS chose Pascal for Windows, because it fit on one less floppy (smaller code), which is adds up to big bucks when you're distributing millions of copies.
Fri 16 May | Simon Lucy | They also, if dusty memory serves (and I'm sure someone will be along to embarrass me if it doesn't), that they also lost the ability to reference the stack using the BP.
Fri 16 May | S. Tanna | Ha :-) I would say High Level Assembler which uses a different model than accessing registers directly = part of the machine-independent model, good, makes code more portable High Level Assembler which excludes a whole class of problem types without additional low level assembler help = missing feature (?)
Fri 16 May | Simon Lucy | No you can do it, you can pass the format in a string which you build on the fly and pass the array. You might run out of stack and into data if the array was too big. The format string defines how the data is addressed as a set of parameters. Not to be recommended but it can be done.
Fri 16 May | S. Tanna | I get the idea, could you give me an example or a link? What if the types of potential parameters are not all the same (e.g. some ints, floats, strings, etc.) - presumably you build a memory block with them in order?
Fri 16 May | Simon Lucy | Yes, you can build a struct to handle them if its mixed content, or if you really want to be ugly you can use casts and pointer arithmetic into a byte aligned array. C gives you a completely planar view of memory, you can mix types and whatever you like, but once you do that you have to manage all the details, such as byte alignments and the rest of it.
Fri 16 May | Joe AA. | I saw something like this once... but that's been a while ago. Once the parameters were determined at runtime, a routine was used to build a stack frame with the correct parameters (don't forget to allow room for a possible return value) and it then invoked the function. I think it was in an old magazine... something like Windows Developer's Journal? It could handle both C and Pascal calling conventions, you just needed to tell it which type of stack frame to build. Sorry, that's where the memory goes bye-bye
Fri 16 May | Nat Ersoz | I see what you mean now. You need to use va_start, va_list, va_end macros to accomplish this. It has been a __long__ time since I've used these, but they _might_ get teh job done.
Fri 16 May | Simon Lucy | Well va_ macros would be the modern effete way of doing it, but us muscular, non dish washing guys would just contatenate them all in a memblock using casting and pointer arithmetic. And I have done this kind of thing in memory managers and (oh god) games that have some kind of opcode multiparameter junk. Its been too long, someone throw me a contract to write an asynchronous shared memory manager...
Fri 16 May | Nat Ersoz | Here is a good example of va_ macro usage. Its simple but non-trivial: http://www.opengroup.org/onlinepubs/007904975/basedefs/stdarg.h.html The refering page is the Single Unix Specification: http://www.unix-systems.org/single_unix_specification/ search for stdarg.h Feeling light in my loafers referencing va_ macros....
Fri 16 May | Nat Ersoz | So, yes - it can be done in an ANSI portable manner.
Fri 16 May | S. Tanna | opengroup example is 1(b), not 3(b) 1(b) The function definiton is variable arguments. i.e. function determines its arguments at runtime 3(b) would be when the CALLER determines the number of arguments at runtime. The function definition may or may not take variable arguments at runtime.
Fri 16 May | Nat Ersoz | OK, you're right... still trying...
Fri 16 May | Chris Tavares | Just as a slightly more concrete example of what the original poster is asking for: Imagine you're writing an interpreter for a scripting language of some sort. One of your requirements is that you be able to call some reasonable subset of C functions (in a DLL, for example) directly from the script. So, at run time, you need to turn: Call dll.function a, b, c into a stack frame, and then execute the code in the dll in question. *That's* a function call with parameters determined at runtime. And yes, Windows Developer Journal did have an article some years back with a library that did exactly this. However, there were lots of low level stack munging stuff that wouldn't be even slightly portable.
Fri 16 May | Dan Shappir | You can't do 3(b) in C because C does not have run-time introspection and reflection capabilities. In languages such as Java and C# the compiled program contains, besides the code and data, the description its various constructs such as structures and function signatures as metadata. This allows you to perform run-time discovery of the 'shape' of these constructs and perform operations on them, such as 3(b). In languages such as Java this is handled by a special API while with other languages such as JavaScript run-time introspection is integrated into the language itself. C, being a low-level language, a high-level assembly if you wish, does not place such metadata in the compiler output. Interestingly C++ can provide some run-time type information using typeid operator and the type_info structure. However, this information and what you can do with it is rather limited. Also, many compilers, e.g. VC++, turn off this feature by default.
Fri 16 May | S. Tanna | Chris' explanation is correct example of the type of problem. Comments onDan's comments: Seems to be addressing a different issue: If I have to figure out parameter types from their content, it's very tough in C/C++ [unless you make some convention for it which is not part of the language per-se]. This is one reason why variable arguments functions (1b) needs an extra hint/cue, like the formatting string. In the case of 1(b) the hint/cue is usually the first paraemeter of the function. In the case of 3(b) - if the function is a variable arguments then a hint/cue (like 1st parameter) would be needed. If however the function were not variable arguments, no hint/cue is need in the function itself, just in the caller - (like parsing the script to put it in Chris' example). In fact in either case, the question is not about passing the hint/cue, but how to assembly the stack frame in the caller.
Fri 16 May |     | I don't really see it as a missing feature since we can loop over arrays. my_printf (formatString, intArray);
Fri 16 May | S. Tanna | What if my_printf could be any one of 1,000 different functions, each with different parameters, and not within your control.
Fri 16 May |     | then I'd write my_my_printf() to do the looping, or else I'd get a different library.
Fri 16 May | S. Tanna | Read Chris Tavares post about 6 or 7 ago, beginning 'Just as a slightly more concrete example of what the original poster is asking for:'.... then you'll see why this is not a solution.
Fri 16 May |     | but I don't know your exact situation so I'm not trying to tell you that that's best for you.
Fri 16 May | X. J. Scott | OK, so here is a starting point. We have filled out the GenericFunctionDescription structure, describing the number and type and value of all the arguments. Then we call this routine. The question is whether MIRACLE_STACK_MANGLER can be constructed. I'd say it can but would be implementation dependend on go off looking in std_arg.h to get some clues about how to manipulate the stack as needed. #define STACK_BUFFER_SIZE 1024 // increase if needed void GenericFunction(void *theFunction, GenericFunctionDescription *theDescription_p, void *ReturnValue_out) { char StackBuffer[STACK_BUFFER_SIZE]; MIRACLE_STACK_MANGLER(theDescription_p, STACK_BUFFER_SIZE); // work the magic *ReturnValue_out = theFunction(); // this function has invisible arguments return; }
Fri 16 May | George McBay | To answer the original question: No I wouldn't agree this is a missing feature in C as it is way too processor and OS dependent and thus can't be properly standardized in a portable manner. If you absolutely need to do something like this, either use inline assembly or a runtime assembler like SoftWire (http://softwire.sourceforge.net/). Of course you'll then be x86 (or whatever processor you're coding for) specific, but you have to be in any situation, which is why it doesn't belong in standard C.
Fri 16 May | Brad Wilson (dotnetguy.techieswithcats.com) | I agree that it's not in C, but I disagree that it would never belong in C. Why shouldn't C get reflection down the line if it's a highly requested feature?
Fri 16 May | Chris Tavares | Reflection requires that the runtime system keep track of type information at runtime. C isn't a strongly typed language, so you can't rely on the compiler for runtime type info. C is all about not having a runtime. The guiding language design feature has always been 'to the metal.' Unless the underlying CPU features reflection natively, I don't think you'll find this in C.
Fri 16 May | Brad Wilson (dotnetguy.techieswithcats.com) | By my estimation, reflection should require no more runtime than RTTI in C++ does. The specification doesn't set out how memory must be laid out, so there's nothing stopping adding meta-data information that could be read by the runtime library. Now, I'm not saying it's a great idea, just not an impossible one.
Fri 16 May | Chris Tavares | Yeah, but C++ has a built in place to stick extra data in a class (the vtable). C doesn't. Note that C++ RTTI only works for classes that have at least one virtual function. And RTTI doesn't help when you're trying to figure out if an arbitrary void * points to an int, a float, or a string.
Fri 16 May | . | I think I must be missing the relevance of the question. Why not use the suggestions that people have already given? ie: If you are programming in C, and using it as 'high-level assembly' then just drop in some real, in-line assembly? Look up in your compiler's manual how parameters are passed (e.g.: first four params under word size in R1-4, then pushed onto stack from left to right) . Or if you *must* do this in pure C, then you should probably pass two parameters; a description of args and then a void pointer to a memory block of them. Adding special syntax for that kind of function call seems needless (and varargs is pretty ugly already). It doesn't feel C-ish. Are you sure you are approaching the problem in a C-ish way?
Fri 16 May | S. Tanna | XJ Scott's answer is I think along the right lines, but I do not think it would work as I suspect the compiler would add code so that the stack will get cleaned up between MIRACLE_STACK_MANGLER and the *ReturnValue_out = theFunction(); I think the way to do would be something like ..etc. stackframe_t x = MIRACLE_STACK_MANGLER(theDescription_p, STACK_BUFFER_SIZE); // work the magic *ReturnValue_out = theFunction(x); ...etc.. Now stackframe_t would need to be a new type which is variable size, including possibly 0 (function with no arguments) I do not agree it does not belong in C. I can envisage that C could (but sadly does not include a set of functions or macros - which are sort of like reverse_va_start, reverse_va_arg, reverse_va_end (the opposite of va_start etc), so my final code, if C had this facility would be something like ...etc... // x is final stack data to pass, might be 0 or more bytes - it's what to push on the stack // ref is a handle or something to the particular stack frame I am preparing stackframe_h ref = reverse_va_start() ; while (...some condition I write meaning I have another argument...) { ...etc... reverse_va_next( ref, arg, sizeof arg ) ; // arg might be any type } stackframe_t x = reverse_va_end(ref) ; ReturnValue_out = theFunction(x); As for reflection, I see this is an entirely unrelated issue, and personally I strongly believe it does not belong in C, whose goals including getting you close to the underlying machine.
Fri 16 May | S. Tanna | Oh by the way, I know this could be coded in assembler... I am just trying to figure out if there is a C way to do it. Consider it a puzzle, rather than a real programming exercise.
Fri 16 May | S. Tanna | ... although at some point in future, I expect to need to write code which can call (almost any) DLL, kind of like the example given in Chris Tavares' post.
Fri 16 May | Neil Butterworth | 'I am just trying to figure out if there is a C way to do it.' Assuming you mean - Is there a way to do this using ISO Standard C then the answer is 'No'. If you mean - Can I do it non-portably using my specific C implementation then the answer is 'Possibly' But I'm interested in why you are asking this question here? Why not ask it in the comp.lang.c of comp.std.c Usenet newsgroups?
Fri 16 May | X. J. Scott | You know, there is setjmp that saves the stack and register context, and longjump that restores it. They use a implementation-dependent data structure to store the info. I see that for the 86 here we have (Copyright (c) 1985-1993 Microsoft) typedef struct __JUMP_BUFFER { unsigned long Ebp; unsigned long Ebx; unsigned long Edi; unsigned long Esi; unsigned long Esp; unsigned long Eip; unsigned long Registration; unsigned long TryLevel; unsigned long Cookie; unsigned long UnwindFunc; unsigned long UnwindData[6]; } _JUMP_BUFFER; ...so maybe you could use those to grab ahold of the stack state, mess with it with wild abandon, and then safely clean up afterwards...
Fri 16 May | Don't make things harder than they need to be | Chances are it's not that there's been a missing C feature these past 35 years. Chances are you have a poorly written dll, or you don't know how to design your code properly. Either make your function take varargs, or have the library writer make their function take varargs. Then when you have a dynamic number of params to pass, there's no problem. That's it. That's all there is too it.
Fri 16 May | S. Tanna | 'Don't make things harder than they need to be': With all due respect, I don't think you understand the problem. The puzzle is basically how to make an API calculator, one which allows any function, with any number and types of parameters, to be called. The names/addresses of the functions (and therefore what parameters they take) are determined at runtime. Redesigning the functions that you are calling, is not really an option if the API calculator is supposed to work against an existing C API, such as the Windows API, functions in a DLL, or anything else. Changing topic, I do spend spare brain power on thinking about 'missing features' in programming tools, especially missing stuff in C/C++... I was just wondering whether this really was a missing feature in C [I have found a few over the years]. I have always thought it was. For me real project, when I get round to it, I expect that I will just code the thing in assembler, so I am not that desparate for a C solution - just curious if there was one. If this entire discussion is felt to be off-topic by this community, I don't mind ending it.
Fri 16 May | Don't make things harder than they need to be | In that case, you know the function signature already, so you should know what number of arguments to expect.
Fri 16 May | Brad Wilson (dotnetguy.techieswithcats.com) | Alright, I think the conversion is over done. He wants reflection. There is no reflection in C. That's pretty much the end of the story, as far as 'solving' this problem goes.
Sat 17 May | S. Tanna | 'Don't make things harder than they need to be'. Sorry, no that is not the case Suppose I write a scripting language that allows any DLL function to be called Later, Person X writes a DLL contain some C APIs Later, Person Y writes a script declaring the DLLs (including Person X's DLL) he wishes to call, what parameters he takes. At the time I create my scripting language, I have no knowledge of what person X or Y will do in future. In other words, at runtime I would need to call the function with the correct parameters. -- And to repeat, my previous comment, no this is NOT a reflection problem. It would be a reflection problem if I needed to examine types and determine what they were (like writing say a printf type function which didn't take a format specifier). However for this problem, even if I could examine types of variables at runtime, it would be no help resolving it. AFAIK any language which requires the caller specify parameter types to a function at compile time, regardless of whether it had reflection or not, would still have this problem.
Sat 17 May | Nat Ersoz | This is one of the more interesting topics generated here, period. I appreiciate it. One question, I'm sure S.T. has already considered, but I'lll mention it anyway... So, you've got your hinter, first arg, and the rest are variable TBD args. So a person pushes all TBD args into an array (on the stack, OK, but not required). And then the called function parses them out of the array, as determined by the hinter. ex: void caller1( void ) { char *fmt = '%d%d%d'; int args[] = { 1, 2, 3 }; callee( fmt, args ); } void caller2( void ) { char *fmt = '%c%f'; void *args; args = malloc( sizeof(char) + sizeof(float) ); callee( fmt, args ); free( args ); } void callee( const char *fmt, void *ptr ) { while( fmt ) { fmt++; // skip '%' switch( *fmt++ ) { case 'c': parse_char( ptr ); ((char*)ptr) ++; break; case 'd': parse_char( ptr ); ((int*)ptr) ++; break; case 'f': parse_char( ptr ); ((float*)ptr) ++; break; } } Very ugly, but doesn't this do functionally the same thing as dynamic parameter lists? Not that I'd want to.... Thanks,
Sat 17 May | Stephen Martin | I looked into this a quite few years ago and found that it couldn't be done without using inline assembly. I was creating a component that would allow me to call arbitrary function pointers from VB given the function address and a list of parameters and parameter info. I couldn't find any way to do it without manually manipulating the stack and registers with assembly. So, I just did it in VB using a buffer that I filled with the machine code and CallWindowProc to jump to my first instruction. If anybody can think of a way to do it without the assembly I'd like to hear about it.
Sat 17 May | Don't make things harder than they need to be | But for you to call the dll, you have to know how to load it, and for you to load it, you have to know it's signature.
Sat 17 May | Stephen Martin | DLLs don't have signatures. All you need to load a DLL is its name (and path, if necessary). All you need to get a function pointer to an exported function is the name of the function. All of the above can be supplied at run-time along with the list of parameters and info needed by the function. But you can't call that arbitrary function without using assembly. That's the whole point of this thread.
Sat 17 May | Brad Wilson (dotnetguy.techieswithcats.com) | It's not even about calling it. It's about discovering the signature. Since the function signatures in C contain no hint about the parameters (unlike mangled names in C++), it's impossible for him to know what to pass, regardless of whether he can write the code to actually pass it or not. Cart before the horse. (And, sure, you say this 'isn't a reflection problem'. Okay, whatever makes you happy. In C# or Java, you could do it with reflection, but hey, this isn't a reflection problem, right?)
Sat 17 May | Brad Wilson (dotnetguy.techieswithcats.com) | And, to clarify your misconception, .NET does not require compile time knowledge of the function AT ALL. VB.NET can call late bound methods on classes that it has no knowledge of at compile time. There's no syntactic support in C# for doing it (just means you have to build the infrastructure yourself). It's quite trivial to take the name of a method as a string, and print out the precise signature using reflection. It's also quite trivial to call said method with reflection as. All without any compile time knowledge.
Sat 17 May | Stephen Martin | The original poster is talking about making a call to a function, the parameters of which are unknown until runtime. There is no requirement to _discover_ the parameters at runtime. We are all aware that that is impossible without some form of meta-data. In my case after having written many C wrappers to enable VB programs to call function pointers returned by APIs, dynamically bind to DLLs based on OS/API version, call cdecl exported functions, etc. I decided to write a component that would be a wrapper for any such call, without the need to write a separate wrapper for each new call. So, when my component was compiled it had no knowledge of the functions it would call. When its clients were compiled they knew what functions needed to be called (by name or address), what their parameters were and what the calling convention was; this information was passed to my component which would then make the call using dynamically created machine code. Another example might be a test harness for a C style API under development where the test harness could be written with no prior knowledge of the API. The tests could be written in some text format (maybe XML to be trendy) that the harness would then interpret to dynamically generate the test calls. I'm well aware of what can be done with VB.NET, C#, reflection and late binding but we're not talking about .NET. And I'm not even sure who has the 'misconception' here since I can't find any reference to .NET in this thread.
Sat 17 May | Don't make things harder than they need to be | Misspoke. To load the lib you just need the name. But to call a function you need the sig. The point is: Somewhere along the chain, SOMEBODY knows the signature. USE it.
Sat 17 May | S. Tanna | Brad and don't make it harder have it back to front. Like Stephen says (read his last post carefully), there is no requirement to discover the parameters at runtime, just to generate them. To build on a previous example, I gave: Suppose I write a scripting language that allows any DLL function to be called Later, Person X writes a DLL contain some C APIs Later, Person Y writes a script declaring the DLLs (including Person X's DLL) he wishes to call, what parameters he takes. At the time I create my scripting language, I have no knowledge of what person X or Y will do in future. In other words, at runtime I would need to call the function with the correct parameters In this example: I do NOT need to discover the parameters by looking at the function - because person Y's script specify them. I simple parse person Y's script. This is where the meta-data comes from -- Stephen - I have a half solution in C, which could even be half-portable (does that make it a quarter solution :-)).
Sat 17 May | S. Tanna | Assume a 'classic' C compiler that passes parameters on the stack, and allocates automatic locals on the same stack (this would not work if the compiler uses registering passing calling conventions) PART 1 Think about a function, like say // does haven't to be ints, just an example void funcX( int i0, int i1, int i2 ) { ...etc.. At the start of func, the stack is going to look like i0 i1 i2 (return-address) <--- if cdecl or similar or i2 i1 i0 (return-address) <--- if pascal or similar 2. Think about this code { func_ptr = ...some method of getting a pointer to the function... int x[1024] ; // must be last automatic before function call *func_ptr() ; } Immediately before the call to func_ptr, the stack contains x[0] x[1] x[2] x[3]... x[1022] x[1023] or x[1023] x[1022] x[1021] x[1020] ... x[1] x[0] Depending on which way the stack goes So inside the function we are going to have a stack which looks like x[0] x[1] x[2] x[3]... x[1022] x[1023] (return address) or x[1023] x[1022] x[1021] x[1020] ... x[1] x[0] (return address) Now suppose func_ptr actually pointed to funcX When funcX is called it's going to get i0, i1, i2 from the x[]'s that are on the stack. There are 4 possible variations, depending on which way the stack grows and whether the compiler does parameters left to right (cdecl) or right to left (pascal). These are 1. i0 = x[0], i1 = x[1], i2 = x[2] ; // if cdecl-like and stack grows up 2. i2 = x[0], i1 = x[1], i0 = x[2] ; // if pascal-like and stack grows up 3. i0 = x[1023], i1 = x[1022], i2 = x[1021] ; // if cdecl-like and stack grows down 4. i2 = x[1023], i1 = x[1022], i0 = x[1021] ; // if pascal-like and stack grows down Conclusion Part 1: if we were to fill out x[] appropriate before jumping to the function pointer, we'd create the stack frame with the correct parameters PART 2 So, to sum up so far we need to know: - whether it's cdecl or pascal-like functions - we need to know whether the stack grows up or down We can find this out by creating an x with 4 elements containing 1, 2, 3, 4, and calling an internal test function which takes 3 parameters. Depending on whether we get 1, 2, 3 3, 2, 1 2,3,4 4,3,2 We can figure it out and a set a global or something Conclusion Part 2: everything so far is portable [but you have to write code to investigate and do the setup at runtime], assuming no registering parameter passing PART 3 What about types other than int? This is actually fairly easily. Instead of making x and array of ints make them chars (or in Visual C there is an _alloca runtime function) Now use memset and sizeof to copy the parameters into the x array, in the right order Now it is conceivable (but unlikely) that the byte-order (MSB, LSB etc) might be reversed in the stack, as compared to the internal memory layout. We could solve this by using another runtime investigation function similar to part 2 PART 4 So it all works? There is one big flaw Think about the original fragment { func_ptr = ...some method of getting a pointer to the function... int x[1024] ; // must be last automatic before function call *func_ptr() ; } When we meet the }, x gets out of scope, and the compiler will generate code to clear 1024 ints of the stack Now if the called function also clears its parameters off the stack, we end up clearing too much off the stack, and blow up the app In Win32, If I remember correctly (could be make to front) - I believe the cdecl makes the caller responsible for clearing the stack... So there would be no problem in this case - But in pascal the function the called function is responsible for clearing the stack... so in this case, the app is always blown up I don't have a solution for this one...
Sat 17 May | S. Tanna | It just realized it might be possible to do the called functions cleaned up the stack (pascal I think) in Visual C++ I don't think there is an opposite of _alloca So you _alloca for in the caller for a function like this, and the called functions eats the allocated stack space.
Sat 17 May | Don't make things harder than they need to be | Sorry dude, sounds like an unnecessary layer. I'll leave you guys alone.
Sat 17 May | X. J. Scott | S. Tanna, I thought about the called-function-clearing-the-stack problem and that's part of why I turned you on to setjmp and longjmp. They save the register state and the stack location. Use setjmp to save the stack and register context. When your return from your generic function call, use longjmp to restore the stack state perfectly. Voila! 100% portable implementation of just what you wanted. We're done here folks, nothing to see, move along. Nat, Agreed this is one of the most fun threads we've had.
Sun 18 May | somebody | If anyone is curious, I gave these ideas a shot and it seems to work well. There's one minor annoyance with Visual C++. When you make a debug build, Visual C++ inserts a stack check after a function call. With the stdcall convention, the callee clears the stack. The debug stack check catches that the stack hasn't been restored to what it expects (since this doesn't take place until the longjmp on the next line of code) and throws up an error dialog. You can click 'Ignore' to continue but I imagine this would get extremely annoying if you wanted to use this method extensively.
Sun 18 May | Dan Maas | Wow, a zillion replies and nobody mentioned libffi!? http://sources.redhat.com/libffi/ 'The libffi library provides a portable, high level programming interface to various calling conventions. This allows a programmer to call any function specified by a call interface description at run-time. ' This does exactly what you need. It of course requires some assembly-code munging, but it's been ported to many platforms and adheres to a common interface. There is nothing magic to this; it's just a manual way of setting up a call frame. (I'm not familiar with the implementation; I'd guess the x86 is trivial, but more complex arches like IA-64 are probably 'interesting') You might say that this was an omission in the standard C library - it already had stdarg.h, why not include something like libffi? Probably just an oversight on the part of the creators - IDLs and run-time binding weren't hot topics back in the early days of C.
Worst engineering mistake you've ever made? | Fri 16 May | Oops
The thread about looking back on old code and being embarrassed got me thinking...does anyone have any memories of their worst engineering mistakes? The worst mistake I made was many years ago while writing an application at my first company. Part of my programs function was to generate a unique ID that was used to name files in a globally available directory. However, my unique ID algorithm wasnt so unique, and it turned out that different workstations (and even the same workstation!) could generate identical IDs. Since my code further assumed that the ID would always be unique, no checks were in place when using the ID as a filename, so I ended up bashing over previously existing output files. The worst part? This problem wasnt discovered until my code was in production at a major bank. Ouch!!! Anyone else have any scary memories like this?
Fri 16 May | Paulo Caetano | If only it was just memories :) Imagine an app with the following flow: 1. User inserts records in system A (sysA) 2. Hours later, process runs and transfers said records to system B (sysB) During the time between these two steps, the user can safely alter the data, because it's still in its original system, and there is even an app option for this. Enter the shot in the foot :) In the new version, the steps 1 and 2 are immediate, unless sysB is unvailable, in which case the record is stored in sysA and sent later by a batch process. When I wrote the specs for this new version, I completely forgot that the app option to alter the data would become virtually obsolete, since the normal state of affairs would be for records to go to sysB as soon as they're entered. So, the first version of my spec went on and on about the importance of this option, because it allowed the users to alter the data before they were published to sysB, etc. And then, one of the client depts sent me a mail asking the obvious - how are we going to alter the record before if goes to sysB? Isn't it supposed to go to sysB right after we insert it into sysA? duh! :) -- 'Suravye ninto manshima taishite (Peace favor your sword)' (Shienaran salute) 'Life is a dream from which we all must wake before we can dream again' (Amys, Aiel Wise One)
Fri 16 May | John Fletcher | Slightly off-tangent but as I just done this - literally - in the last 10 minutes I thought I'd share it... USB pens - arrgghhh. No, I really mean Arrrggggggggghhhh. Trying to push my pen into the USB slot with my thumb. Slipped. Thumb forced against the metal keyring prongy bit. Large piece of metal inserted in thumb. Extreme pain. Trip to engineers room to get pliers to remove the 4 mm piece of metal (still attached to the pen) from me thumb. Ouch. Lots of blood. White-faced engineers. All patched up now and feeling kinda stoopid!
Fri 16 May | DrAwesome | Okay, what the is a USB pen and what part of your USB port features a sharp piece of metal?
Fri 16 May | John Fletcher | The USB pen is a strangely named device that is basically a memory card which can be plugged into a USB interface - you can use it just like a removable hard drive. Very handy for transporting data around instead of on loads of floppy disks. The pen (daft name, but I never invented and named the thing), has a small metal keyring-type clip. That's the piece I managed to embed into my thumb (gives a whole new meaning to the embedded device development I'm doing!). Check out www.usbee.co.uk to see what one looks like (the pen, not my damaged thumb).
Fri 16 May | Ian Stallings | Usually I build my personal machine but my latest one will likely be the last one built by me. While building it I took the heatsink off the processor because the machine was booting up but no screen no beep no nothing. I thought the processor wasn't seated properly so I reseated it and hit the on button. Immediately smoke rose from the processor area and I had a toasted chip. I still keep it around just to remind me and chuckle a little.
Fri 16 May | Tj | I built something for one of those Linux companies. Tested, worked fine, then as the ceo and his buddies came over, insanity struck and for some very very very stupid reason I decided, 'Hey this piece of code annoys me,' and I changed it. Inserting a div by zero error. My fingers refuse to go on.
Fri 16 May | Albert D. Kallal | I wrote a document system written in Word that interfaces to a legacy billing system. A bug in my design meant that when saving the document, the document could get filed under the wrong person. No big deal, right? Wong!!!! The problem was that those documents were diagnose info at a medical center, and the billing system was a patient billing system. The end result of this was diagnose information being filed under the wrong patient. We did catch the error after the first week of the system running live. Needless to say, every singe diagnoses had to be re-checked. Fortunately, due to the work flow process, this did not result in any patient receiving incorrect diagnosis information. You can see however this is about the worst possible horror story one could have occur in software. The real story here is anytime you deal with a data system, ask your self what are the consequences if that data is filed under the wrong person? Sending the wrong payroll check to someone can be really embarrassing, but the wrong patient diagnose is the stuff of lawsuits. Albert D. Kallal Edmonton, Alberta Canada kallal@msn.com http://www.attcanada.net/~kallal.msn
Fri 16 May | Fred | You ran a modern processor without any cooling? No, you shouldn't be building your own machines.
Fri 16 May | Ian Stallings | [You ran a modern processor without any cooling? No, you shouldn't be building your own machines. ] It's called a 'mistake'. I know you are likely infallable but I, a human, make mistakes. I've been building my own computers now for 12+ years. So take that mr. party pooper!
Fri 16 May | Mark Hoffman | While I've made plenty of design mistakes, my biggest embarassment came when I left some debugging code into my application while it was being demonstrated to a potential client. I had a long night debugging, wasn't in the best of moods and I put in a rather nasty debugging statement. So during the demo, up pops this message box with a less than pleasant debugging message. Ooops.
Fri 16 May | David Clayworth | The very first PC application I shipped (this was in 1985) consisted of three main programs and ten support utilities. I finished, made ten copies on floppy disks and shipped to ten customers. Three months later I discovered that the entire functionality of all the support utilities, as shipped, was to print hexadecimal error messages. However we still found out before our customers.
Fri 16 May | S. Tanna | When I was at university... in the summer I used to work at a software company I (and everybody else) hated our boss [who hadn't written any code for about the last 5 years, but had in the company's early days, (**really** horrid code still in the app), but was now mostly focused on fussing us about stuff, often wierd stuff] In our source file comment, I wrote 'I HATE ....name....' , copied about 100 times. When I came back next year, he had got a once every 5 year urge to edit code, decided to work on my app, and discovered the comment.
Fri 16 May | anon to protect the guilty | I was working on a system as a contractor to automatically send email to users subscribed to a particular ticket (for a helpdesk system). An incorrect loop in the code coupled with a system capable of sending live messages meant that we not only bombarded the recipient with hundreds of copies of confidential information, but as luck would have it, said recipient happened to be an ex-client of the software owner on glacial terms. Needless to say, the client was not pleased. I don't know how the ex-client took it, because although I called them and contritely apologized to their automated answering system (stressing that it was my fault, as per client's request), I never heard back. Guess who now treats auto-emailing with kid gloves?
Fri 16 May | Leonardo Herrera | I had an app in the early days of Windows 95 that liked to exchange it's icon with the Recycle Bin. My friends still likes to bug me about it, heh.
Fri 16 May | Paul Sharples | I used to work for a chip design company. One project I did involved tuning a critical path through the cpu microcode ROM. The chip used 4 non-overlapping clock signals (phi1 - phi4), each of which was active for 25% of the clock cycle. Back in the day, we offered this chip at speeds up to 30 MHz, though yields at the highest speed could have been better. The ROM timing was divided into two halves: a precharge half and an evaluation half. The redesign involved retiming the ROM so that it began to evaluate on the falling edge of phi2 instead of the rising edge of phi3; this was worth a few nanoseconds and the increased yields more than made up for the engineering and manufacturing effort. Well, it did after rev. 2. The first rev exhibited much lower yields than expected. In fact, the first set of reticles had to be trashed because it turned out that I'd wired phi3 to the 'evaluate' clock input instead of phi2, giving the whole rom only 25% of the clock cycle in which to evaluate (instead of 50%). At the time, a full set of reticles cost around £20k but the real costs came because there was something like a 30-day lead time between ordering the new reticles and getting samples back from the fab. An why wasn't this caught in simulation? Because we didn't have static path analysers and all timing simulations had to be done with SPICE. Now, even today, there probably isn't a machine in existence with the capacity to perform an analogue simulation of an entire chip in a reasonable timeframe. We created a detailed timing model of a single slice through the rom and used that to thrash out the circuitry, but at the chip level we were left with logic simulation only. I.e., we could prove that the rom evaluated correctly but couldn't infer a damn thing about the timings. You see? Even today, I'm still trying to rationalise my way out of it. Oh, the shame...
Fri 16 May | B# | Not strictly pertinent but 10 minutes into a demo I was criminally ill-prepared for I experienced an unprecedented case of flop-sweat. I'm talkin' Singing in the Rain, to steal a line. I don't suffer in general but now I worry more about that than the software. Anyhow, at one point I leaned back on my chair and rested my head against the wall. When I righted my chair I had left a 6' diameter wet mark on the forest green wall in front of 100 giggling on-lookers including the CEO, Canadian President, American President... Oh, and the demo dumped at least 10 times. I tend to be anal about preparation since, go figger. I'm coming off as a boob, aren't I?
Fri 16 May | Dan Shappir | Recently I wrote an application which I was determined would contain the least number of bugs possible before going to QA. This was because I was also using this application to demonstrate the benefits of Defensive Programming to my co-workers. I was indeed mostly successful in that QA has managed to locate about 10 bugs in this entire application. Unfortunately, one of these bugs ... I had also given this application to two of my co-workers to play with. I jokingly told them: 'don't worry, it won't format your HD'. It didn't. Unfortunately it did try to recursively delete every folder under their C: drive. They were not amused. All the other 9 bugs were minor, and all of them were fixed, but one of the two still won't run this app ...
Fri 16 May | Steve Wheeler | A long time ago (back in the 80's), I worked on a pneumatically-controlled bench press machine. The 'weight' could be applied in either the up or down direction, so that you could do lat pull-downs as well as military and bench presses. The force output was controlled by an 8-bit DAC. I found out the hard way that I hadn't put checks for wraparound in the right place when I decreased the weight past zero and the carriage flew up the track. One of the physical stops at the end of the track broke off and embedded itself in the ceiling. Luckily, that was one of the first 'does the hardware work' versions of the code, and not anything being shown to the customer, let alone a shipping version.
Fri 16 May | Thomas | Fun thread. Thanks for starting it. I wrote a driver utility for Windows 3.1 which once made its way into PC Magazine, and not in a good way. It showed up in a section called 'User Interface Bloopers' or something. Anyway, what I had done was code up a little dialog box with an error message and 'OK' button. Problem was that pressing OK didn't disappear the window... instead, it caused another one to appear. The shame of my bug showing up in a magazine with a circulation of... well, a lot... was tremendous. That is, by far, my worst ever engineering mistake. -Thomas
Fri 16 May | Philo | My current one, that I have to fix this weekend - in a management interface on a web app I have a treeview that allows access to all the files received by the application. Being a DHTML treeview, the whole thing loads before it's sent over the wire. All of it. 200 documents/day for the three months it's been running... [well it seemed like a good idea at the time] Philo
Fri 16 May | Brian | I wouldn't say that forgetting to override Object.equals() is my worst engineering mistake, but the result was that objects weren't being pulled out of an email queue. So, there was a Thread on an otherwise lightly loaded dual processor server that was dedicated to spamming a test email account on our production mail server. I forgot how long it took before anyone noticed that it was on its knees...
Fri 16 May | Dan Shappir | Philo, I once worked on a web application that also used the tree paradigm. In the design it was assumed that the customer would never have more than a hundred or so branches. Turns out so of our customers intended to use the app in ways we hadn't foreseen (think thousands of branches). When management asked if we could speed up the tree processing to accommodate my answer was: 'why do you think Yahoo doesn't use a tree control for its directory?' BTW we were able to speed up tree generation considerably in the following way: the original impl. built a huge string that contained all the tree nodes. Turns out the string concatenation operations were killing us. We changed the app so that instead data for each node was written out distinctly.
Fri 16 May | Spaghetti Rustler | Back in the days of 'super-mini' computers, I was the jack-of-all-trades: sysadmin, sysop, programmer, and tape monkey. One of my jobs as tape monkey was to do the daily and weekly backup to tape, which took about 15 minutes per day, and three hours on the weekend. These backups were very important to the company, as all of our Accounting data was stored on them. After about six months of religiously backing up, we installed the latest-and-greatest version of the OS. This involved - I know this may be hard to believe - doing a full backup to tape, formatting the hard drives, installing the new OS, and restoring from tape. Well, this whole process took me all weekend, and it wasn't until Sunday evening that I discovered something horrible: Not one of my backup tapes were any good. It turns out that the old version of the OS had a tiny bug: it wouldn't correctly save ISAM files that spanned more than two tapes. Guess what kind of files our Accounting application used? By the grace of Codd I was able to find a set of tapes I had made a month earlier using a Beta version of a totally different tape-backup utility, and those tapes were good. (Otherwise, I think I'd have been out of a job.) The only problem was, the Accounting department had to re-key in an entire month's worth of data. Some of them wouldn't talk to me for years...
Fri 16 May | Alyosha` | When management asked if we could speed up the tree processing to accommodate my answer was: 'why do you think Yahoo doesn't use a tree control for its directory?' ... probably for the same reason Microsoft uses it on the MSDN library -- because its obnoxious to navigate and slow. =-)
Sat 17 May | tapiwa | format c: This was for a computer that ran the embroidery machine in my mom's protective clothing factory. No computer no embroidery. No embroidery no deliveries. That entire line was down for a few days while we waited for new disks to arrive. The machine had been supplied ready installed, and they did not provide the software disks. I don't think it ever quite crossed their minds that someone would really format the hard drive :( Nothing like that 'Insert system disk in drive and press any key to continue' screen to make you sweat blood.
Sun 18 May | Name withheld to preserve career | Not really a mistake that I made, more a question of utter stupidity. I once had a complete mental blockage and posted to a Delphi newsgroup asking if there was a simple way to determine if a number was negative or not!
Sun 18 May | Too ashamed to own up... | Spot the deliberate mistake :) // move files for( file in lostafiles) { CopyFile(file, here, there); Delete(file); } I don't really need to check the return code from CopyFile, do I? What do you mean the destination hard disk is full? Oh.
I'm an idiot | Thu 15 May | B#
Ever look at code you wrote several years ago and wince in pain? I just found some that was so bad I had to look away.
Thu 15 May | Mike Gamerland | Take heart, hopefully we all improve with time. Would it not be more frightening if you looked at code you wrote years ago and said 'I did it better then.'
Thu 15 May | S. Tanna | Sometimes I look back at stuff, and think - it's not quite as bad as I thought it was I don't have any of the early Windows programs that I wrote in C, but I know I would wince in pain if I saw them. Even then, it was a giant step backwards both in methodology and the quality of the Code (following the Petzold model) as compared to roll-your-own GUI programs that I did in Turbo Pascal/DOS.
Thu 15 May | Mitch & Murray (from downtown) | Looking back at your old code and realizing how much you've learned since then, and how much your development skills have improved, is not completely a bad thing I think. 'Revel in your time, Roy. A light that burns twice as bright burns half as long. And your light has burn oh so bright, Roy'. - Eldon Tyrell, 'Blade Runner'.
Fri 16 May | Mike Swieton | And on the rather depressing other hand, I am almost afraid to look back, and see that I've not improved. Seeing better code then doesn't scare me; that only means I let myself get lazy. But if I've learned nothing, I've gone nowhere, and much time was wasted.
Fri 16 May | ScottyBee | Looking back at old code and wincing is something I've become used to, and like everyone else says, it's good to know you've learnt a thing or two. What bothers me is when I look back at code that I've recently written (say in the past few months) and still have to wince, because I've been forced to deliver something in an unrealistic time frame by managers who have no idea about writing software. I feel constantly trapped between getting my arse kicked for not meeting a deadline and producing the quality of solution I know I am capable of.
Fri 16 May | Canuck | Funny thing ... A former employer recently contacted me to extend a solution I had written for them a few years ago. I agreed and they sent the source code over to me. It really didn't take long at all to figure out why none of the developers there wanted the project ... yikes! It was awful.
Fri 16 May | . | I am generally proud of my earlier work. However there was that time ten years ago when a product went out the door - the first I had written in C - that had an embarrassing liaison with a null pointer. Ouch.
Fri 16 May | Alyosha` | I'm actually a bit humble when it comes to the code I write now. Recently I shipped this comment as the header of one method (a string-parsing function which wraps lines to the screen width). // // I apologize for the following code. It kind of grew on me. //
Fri 16 May | Dustin Alexander | I have the unfortunate tendency to capture my unrealized dreams in the most appallingly binary formats. Given time constraints, these inevitably end up as fragments of the real thing, which leaves code that is good 'in theory', but hard to maintain. Always fun for the maintainer to dig through half finished implementations. Although, I guess an argument could be made that in some ways all implementations are only half finished. (Especially in the minds of their creators).
Fri 16 May | Mark Hoffman | While there are plenty times when I do wince at my older code, has any else had the experience of looking back at previous code and thought 'Wow. I did that? Cool.'
Fri 16 May | B# | Yes and no... Usually by the time I look back on something it is so ingrained as to be rendered mundane. But point taken.
Fri 16 May | Martha | Unfortunately, my 'Wow! I did that?' reactions are to code that I now have to figure out all over again, because I need to update it. I always think I over-comment things, until I have to revisit my code. :/ But mostly, my reaction to my old stuff is something along the lines of 'aaagghkkkk... please don't torture me like this...'.
Sun 18 May | valraven | I have wondered when looking back at old code if i am really doing better now, or i am just doing it differently and that i just think it is better.
Most satisifying software you've used? | Thu 15 May | Mitch & Murray (from downtown)
A good deal of the conversation here discusses bad software, bad specifications, bad project managers, and bad co-workers. There is certainly no shortage of bad around, especially lately. I am curious what software youve used over the years that struck you as satisfying - done right - worked well - made you say I wish I had written that. Utilities, compilers, whole operating systems, end-user applications, anything is game. Share with us what it was and why you liked it so much.
Thu 15 May | Mac | winamp 2.x emacs vim IE SecureCRT
Thu 15 May | Tim Evans | - PuTTY. - Glade, the GUI design tool for GTK+. - Python. - The Joel on Software Forum :-)
Thu 15 May | HeWhoMustBeConfused | Back in the days of MS-DOS there was an early integrated office package named Enable. Word processor, spreadsheet, and most importantly, a database product compatible with dBase file structures. Everything worked, and there was a cross-module scripting language which could create complete applications, similar in concept to VBA. They never managed the transition to a GUI environment, and the product eventually died. Oh well ... I guess Office would have killed it anyway.
Thu 15 May | Rob | IntelliJ IDEA.
Thu 15 May | B# | Generic CADD v6.0 In the days of DOS Shell and Edlin this was a tool without peer. AutoDesk eventually bought and tanked it after it won 3 or 4 product of the year awards.
Thu 15 May | Mike Gamerland | In no particular order: Tera-Term Pro WordStar, Office97, OpenOffice 1.1+ Doom, Quake 2, Unreal, WarCraft, Total Annihilation, Command & Conquer C++, Java, Perl, ksh
Thu 15 May | Matthew Lock | Octamed on the Amiga
Thu 15 May | Cletus | Borland Delphi Gel Editpad Pro Snappy Fax MS Excel Opera 6.0, IE, Outlook Commandos,The Sims
Thu 15 May | Cletus | I'd also like to add: HomeSite, TopStyle
Thu 15 May | - | xtree gold (about v2.5 for dos) windows explorer (keeps getting better, search keeps getting worse) edit.exe (seriously, and I don't mean edit.com/qbasic.exe) MSVC editor emeditor winzip cubic player winamp qpeg (dos image viewer) winxp picture and fax viewer opera
Thu 15 May | Mitch & Murray (from downtown) | Interesting how many DOS apps have been mentioned already. Forgot to add mine when I began: VMS when running on the original VAX hardware Brief editor on DOS Borland Turbo C on DOS Generic Cadd on DOS (good call by the earlier poster) Quake I using OpenGL MS Flight Simulator 2002 Honorable Mentions: Borland Delphi Symantec Ghost Microsoft MSDN VMWare SlickEdit Grand Prix Legends
Thu 15 May | - | There was a need for cool DOS utilities, because it didn't do... much.
Thu 15 May | realist | I second Brief editor on DOS
Thu 15 May | HeWhoMustBeConfused | I think the reason for fond memories of DOS software is that it actually changed the way in which we could work. Windows software rarely added/adds anything other than flashy special effects to getting the job done. Think about it. Is the CONTENT produced in MS-Word any better than that of WordStar? It may look better, but often the improved appearance of documents has been at a considerable cost in time.
Thu 15 May | Nat Ersoz | 3rd - Brief editor, DOS The first real editor for the PC. Often emulated. Emacs ranks up there too.
Thu 15 May | Nat Ersoz | Duke Nuken, 3D. By far my favorite game of all time, multiplayer mode. Quake I with Painkeep mods follows.
Thu 15 May | The voice of rationality | The phone book on my cell phone. Really. It has a simple job to do, and it does it in a simple but very usable fashion. It stores home/work/mobile numbers under the same name. (unlike my wife's phone, which requires separate entries). It takes first and last name, sorting by last name. Displays the caller's name when I dial, and let's me choose an alternate number when the first one doesn't work. I've heard it also syncs with the computer, although I've never done that. The phone book is the primary reason I've stayed with my carrier for the last few years. (For the record, it's a Sprint Touchpoint 2200).
Fri 16 May | S. Tanna | The original Turbo Pascal 2002 FIFA World Cup on PS2 Almost Balance Of Power (read the book too!)
Fri 16 May | anonymous | Opera Miranda ICQ Quake 1, 2 & 3
Fri 16 May | Mike Swieton | The QuakeC compiler (used to generate the bytecode used by Quake for almost all game logic). I learned more from messing with that game than from any other single thing.
Fri 16 May | X. J. Scott | Photoshop Metasynth Cubase Turbo Pascal emacs NI FM7 Appleworks Painter Myst CodeWright JoS forum Window Monkey PixelSpy iCab Max MS developer's CD documentation search facility and database google
Fri 16 May | Christopher Wells | GML+Xedit on a mainframe - edit on a green-screen terminal, print as beautifully-formatted documents Brief - fingers got used to key combinations Softice/DOS - debug interrupt-driven software Win 3.1 - prettier than DOS MSVC - an IDE; no more editing make files Win32 - didn't keep crashing Softice/NT - worked as advertised, unlike WinDbg pcAnywhere - easier than travelling by airplane debit cards and telephones - ubiquitous and reliable telco software - 'alarms' (a soft assert) make it possible to debug what's happening in the field compuserve, nntp, JoS - a soft-real-time party
Fri 16 May | Giovanni Corriga | VisualWorks Smalltalk 5.4i
Fri 16 May | Dan | Borland Delphi (with GExperts plug-in) Allaire HomeSite Python Windows Commander Netcaptor MyIE2 DOS Navigator (a powerful DOS shell) Advanced Uninstaller Pro
Fri 16 May | YF | Sibelius 2 Borland Delphi
Fri 16 May | raindog | TurboPascal XTreeGold perl ruby MindManager
Fri 16 May | | Surely the discussion on JOS is about the process of producing software, and flaws in that, rather than about products as such?
Fri 16 May | Stephen Jones | Tabbed browsing inNetscape 7.0
Fri 16 May | Ricardo Mahntoban | As long as we're getting into real games (somebody mentioned Balance of Power): Ancient Art of War M.U.L.E. (The one where you program a robot who goes out and fights according to a 'program'. Why doesn't that exist today???) Ultima IV -- THE BEST GAME OF ALL TIME, PERIOD!!! YEAH! Half-Life (Where have you people been???) --- Other cats: Literary Machine/TheBrain/Some personal KM software I haven't found yet. MMJukebox
Fri 16 May | Panna | Python Scite Opera 7 Emule Photoshop Video Lan Client Return to castle wolfenstein
Fri 16 May | Just me (Sir to you) | Current: Windows 2000 Excell VS.NET - C# SQL Server 2000 TextPad Terminal Services Client ieHTTPHeaders IE6 - JOS NewsGator Blasts from the past (vague memories of true goodness): Lucid Common Lisp Think Pascal MacDraw
Fri 16 May | Ged Byrne | The most satisfying software I ever used was Visual Dialogscript. It's a scripting language that is just so beautifully formed. The languge was simple, it had just 24 variables available, from %A to %Z, and only a string datatype, but that didn't matter. It no structured statements. No subs, no functions, just goto. That didn't matter either. Visual Dialogscript just worked. I could throw together a script to be used by non technical colleagues in 5 minutes and those scripts would never, ever come back to bite me. They compiled to an .exe with a bound runtime weighing in at less than 200k, and you sent them by email and the person used them without any trouble at all. The colleague would then have some complex task simplified to a touch button and they would use it without ever having to come back to me. I was doing some complex stuff as well. I remember on one occasssion I needed a mass of data from a dos database that didn't provide an export feature and used a propriatry file format. I wrote a screen scraper and had all of the data safely in Access before lunch. The program was just simple elegance. A software house bought the rights and extended it to be more like a real scripting language. They ruined it. I still search for something else like it.
Fri 16 May | Nekto | tcsh+grep+sed+tr+head+less+ls .. screen ssh rtin pine FAR ( www.rarsoft.com ) - resembles but better then NortonCommander and it is for win* putty winamp 2.x WindowMaker + dokings joe Gestues for Mozilla Tabs for Mozilla Typeahead for Mozilla DOM Inspector for Mozilla ircII+venom.irc ATnotes - stiky notes for win*
Fri 16 May | Gordon Hartley | Amiga: - Directory Opus - PPMore Windows: - Winamp 2.x - Cygwin environment FreeBSD: - It's ports system. Programming Languages: - Ruby I like emacs, but its still too quirky to be considered 'most' satisfying.
Fri 16 May | Rhys Keepence | OS X - a useable gui that runs on BSD (the ability to drop to a shell window is just way cool) Cygwin - Most things I can do at least twice as fast in a bash shell than I can in explorer and whatever. Vim (,gvim, etc) - For me, its faster than any text editor, because it's completely keyboard driven. Has a long learning curve and requires a shift in thinking. But for me, dd is faster than [home] [shift+end] [ctrl+x], :g/ /s// /g is faster than [ctrl+r], [tab] etc etc.... and having 9 clipboard things for cutting and pasting from is awesome. IntelliJ IDEA - This IDE freekin rocks. You don't notice just how great it is until you've used it for at least a month - up front it seems simple, but it is increadibly powerful. And the best part - its cheap and has a sensible licencing model (per user - doesn't matter how many machines you own - this is the way software should be.) LCD Monitors (the reason I went to laptops years ago) Microsoft Entourage - Exactly what Outlook should be!
Fri 16 May | Gordon Hartley | Oops - missed Norton Utilities (DOS era).
Fri 16 May | Rhys Keepence | RE: LCD monitors... Guess the moron who got carried away and forgot the subject line :)
Fri 16 May | Paulo Caetano | Delphi Norton Utilities (DOS) Clipper 5 (DOS) MS Access Opera Winamp Winzip Myst/Riven Civilization Wolfenstein/Doom/Hexen ZX Spectrum Emulators (ZX32/Spectaculator) I'm, sure there are others, but these were the ones that came immediately to mind.
Fri 16 May | Simon Lucy | Pmate my favouritest editor and I only stopped using it because it lost the plot when higher resolution happened and it didn't really understand paths. I can still remember the macro language. Search. A utility that came out of Victor and let you do with a DOS file system what you'd normally do with the usual Unix suspects. Mind I had the usual suspects running on DOS as well from some internal MS source. InfoModeler. ORM modelling, liberated my data designing. Pueblo. Cool MUD client.
Fri 16 May | Paulo Caetano | Damn! Forgot Wilbur, a personal search engine. It's been a real time-saver.
Fri 16 May | Rahoul Baruah | Delphi OSX
Fri 16 May | | The Hobbit (game on the Spectrum, years ago) - great UI for its day. JED (text editor) - does everything it says on the box, and then some. Other than that the best software runs on a computer which is switched off.
Fri 16 May | Taffy | xtree pro turbo pascal norton utilities
Fri 16 May | tapiwa | Norton Utilities(DOS) pkzip/pkunzip SimCity classic GP classic GW Basic Football Manager (BBC micro) Capitalism
Fri 16 May | Bryan Shaw | Format c: :)))
Fri 16 May | GelRocks | Gel - http://www.gexperts.com Ultraedit Mozilla Firebird
Fri 16 May | Stress | Descent
Fri 16 May | anon | Quicken Winamp 2.x Cygwin JCreator
Fri 16 May | Clutch Cargo | Brief Visual Studio .NET Civilization Wizardry (AppleII)
Fri 16 May | Just me (Sir to you) | Manic Miner (ZX Spectrum)
Fri 16 May | Li-fan Chen | * SQL Server 7.0/2000, EditPlus, Terminal Server, VMWare, etc etc. * Netscape 4.5, back when the alternative really sucked (FTP and console apps for example). Low level stuff: * The MP3 Codec and the various nice rippers, players for it, thank you everyone for using it instead of 40 different formats! * JPEG, my modem, daytimer, hard drive thank you. * Memory protection: the only reason why anyone still bother to continue to buy a Mac after the System 6-9. * Open source stuff, after it takes you through hell and 500,000 lines of C and you learn from it. * Other hard working low level sh*t of that general nature.
Fri 16 May | moses whitecotton | Tivo
Fri 16 May | Just me (Sir to you) | >Netscape 4.5 Now here is one I never would have thought to make it on any of these lists. Realy surprised.
Fri 16 May | Jordan Lev | Tetris The greatest game of all time! Why? Because of its simplicity. It is exactly what it needs to be -- no more, no less. I have a feeling that the reason so many old DOS programs have come up on people's lists here is for the same reason (simplicity). When you don't have much to work with, it forces you to *really* consider what's essential and what should be left out. More is definitely NOT better-- extra things just get in the way, and add to the signal-to-noise ratio.
Fri 16 May | Beka Pantone | Symbian OS Opera Aurora (DOS editor) Ralph Brown's DOS interruption list Watcom's C/C++ compiler for DOS. BeOS & BeIDE Flash MX Python NASM OpenGL Perforce
Fri 16 May | Beka Pantone | Forgot Norton Navigator for DOS. :)
Fri 16 May | treefrog | In no particular order - Ruby - gcc - valgrind - linux OK, so it is linux /unix centric, but frankly it all started one bad day when I got pissed off with yet another button telling me something I couldn't care less about, and demanding that I OK'ed it before it did anything else. That said, Visual Studio.net is an awesome package!
Fri 16 May | Tim Sullivan | 1) Borland Delphi. It just felt right to me, immediately. 2) Help and Manual. It worked, out of the box, exactly how I expected it to. 3) ICQ. Early incarnations of it were just amazing, and it created (or, at least, popularized) a new way of communication. 4) Windows 2000. More taste. Less filling.
Fri 16 May | anonymous | Mac OS X and many of the 'i' applications are truly a joy to use. Safari is also shaping up to be a great browser. After suffering through the worlds of MS DOS and Windows for so long, it's such a pleasure to work with software (and hardware for that matter) that is designed as well as some of the Apple products.
Fri 16 May | Jonathan | XCOM Mechwarrior 1, 2, & 2: Mercenaries Wing Commander 1 & 2 Lode Runner Wings of Fury Settlers 2 Demos (Future Crew?) Halo C# Perl Web-based email Streets & Trips Terminal Services WinZip Winamp 2.x My Timex watch - it looks the same as the one I had 10+ years ago, but it works /so/ much better.. it's hard to describe. I was learning new functionality within the watch for several weeks.
Fri 16 May | Stephen Jones | ---'Now here is one I never would have thought to make it on any of these lists. Realy surprised. '--- As he's talking about Netscape 4.5 as being the only alternative to FTP I rather think he has got his versions mixed up. Presumably he started with Netscape 2.0, which was pretty well the only player on the block, and got as far as Netscape 4.5 before he found out about Internet Explorer!
Fri 16 May | Chi Lambda | No particular order: - Edit Plus: http://www.editplus.com/ - Windows Commander: http://www.ghisler.com/ - Mozilla: http://www.mozilla.org/ - IrfanView: http://www.irfanview.com/
Fri 16 May | Yanwoo | Windows XP
Fri 16 May | Brent P. Newhall | BeOS -- a fabulous operating system MacOS X -- the OS itself. Not as perfect as BeOS, but nothing else is PalmOS' bundled applications (address book, date book, etc.) have struck me as very well-designed.
Fri 16 May | eclectic_echidna | * Wildcat! * Empire * Kingdom of Kroz * VNC * GREP * SlickEdit (Non-Visual Version)
Fri 16 May | Philippe Back | IDEAJ WBS Chart Pro Pert Chart Expert 2xExplorer TCL WinMerge WinCVS iGrafx Flowcharter Cygwin BlitzBasic 3D Adobe Illustrator 10
Fri 16 May | Steven E. Harris | Current Tools: Gnus XEmacs Cygwin Debian GNU/Linux Internet Explorer 6 Agent Quicken Some Old Games: Raid on Bungling Bay (C64) Gunship (C64)
Fri 16 May | Hardware Guy | Original Turbo Pascal Python UltraEdit Synplify FPGA logic synthesis (it's a hardware thing)
Fri 16 May | Steve Wheeler | Game: Ricochet on the Apple ][ Language: Forth Application: Lotus Improv Utility: Gawk
Fri 16 May | anonymous | Galactic Civilizations
Fri 16 May | Albert D. Kallal | UCSD Pascal system on a AppleII+. Incredible, but that was the first high quality IDE I ever used on a pc. Just fabulous. It was slick, and even had type-ahead (that was a big deal back then!). Albert D. Kallal Edmonton, Alberta Canada kallal@msn.com http://www.attcanada.net/~kallal.msn
Fri 16 May | Martha | (Speaking of UCSD, the Fortune program on the Unix terminals was fun. So was asking the command prompt, 'Why?') I've really seriously considered this question, and the only answer I've come up with is Google. Eh.
Fri 16 May | Tj | Winamp 2, the only program that's never made me unhappy. google search programs I write I wish dr. scheme could make this list.
Fri 16 May | Herbert Sitz | I see Mitch & Murray (topic starter) lists the racing simulation (notice I didn't same 'game') Grand Prix Legends. This is really an amazing program. It came out in 1998 and is still arguable the best sim out there for car racing. Papyrus (the same company that made Grand Prix Legends) has concentrated on their Nascar Racing series since then, but really hasn't improved much on the physics model much other than to add modeling of tire wear and aerodynamic downforce, the latter of which wasn't really discovered in car racing until the 1970's. For a game to last 5 years and still be a candidate for 'best of breed' is absolutely amazing. In part this is due to GPL having an amazing physics engine, in part because the multi-player internet play was ahead of its time and still has been equalled only by the same company's NASCAR series, and in part it's because the GPL game community has continually provided graphics updates, new tracks, etc. You can see evidence of the still-thriving community at this gpl link page: http://hotgrids.racesimcentral.com/ If Doom was the groundbreaker for first-person shooters, then Grand Prix Legends is its counterpart for racing sims, and GPL is every bit as impressive although it's never gotten much public notice.
Sat 17 May | Todd Rosenberg | Norton Utilities (DOS) Windows XP Clarion Setupbuilder FTP Explorer
Sat 17 May | Karl Perry | The best piece of software I ever used was Partition Magic by Powerquest. In 15 minutes it re-partitioned my hard disk 'on the fly,' something that previously had taken days due to the software reloads required. It's an amazing product. Interesting the number of posts mentioning Delphi and TP. I'm learning Visual Studio .Net now and its interface sucks compared with Delphi.
Sat 17 May | TheWeasel | Most - Turbo Pascal Delphi 3 VMWare Groove Least - MS Word Quicken/Quickbooks
Sun 18 May | Walter Rumsby | IDEA TextPad TopStyle HomeSite Enterprise Architect
Sun 18 May | Bob | Windows Server 2003 Enterprise (I'd call it Windows Server 2003 Luxirius)
Sun 18 May | Nekto | Imho Winamp 2.x is the best here ;) Could any one calculate top 10? >Netscape 4.5 I whould tell you, that Netscape _Communicator_ 4.* as whole is really great software. I am web developer, network admin and IT manager. We still usign it (as mail and web client) and have no problem with viruses for 4 years. It is not the _web_ client solely, so I will not compare it to IE. Personaly me have used it up untill Mozilla 1.0 (or M19?). Just 2 examples. It is great for computer classes, where anyone could use any computer and get all his mail&settings. It is cool tool for CD presentations (it could run directly from CD without installation and you will not have version incompatibility). ;-)
Sun 18 May | Innocent Bystander | Word Perfect 5.1 - I build a complete database application with menues (press '1' for search, press '2' for edit record, etc..) for a customer in '93. Still remember a lot of the shor cuts...
Access vs. MSDE | Thu 15 May | Just me (Sir to you)
Ever try to build an installer that (1) checks to see if SQL Server or MSDE is already installed, and if its not (2) installs MSDE, and (3) doesnt install MSDE with sa and no password (which is the default) leaving you open to a known security vulnerability, and works on Windows 98, Windows ME, Windows XP, and Windows 2000? Now, if a dev wants to ship an Access database with his new .NET application then its, uh let me see, just copy the .mdb file. In other words, Access supports Xcopy Deployment as long as the Access runtime is installed (how .NET of it, and its not even a .NET server). Good points! http://radio.weblogs.com/0117167/2003/05/15.html#a298
Thu 15 May | jake | Access - rope for the masse. From the article 'Also, why isn't MSDE as ubiquitous as IE' Well after the little slammer fiasco, we better be damn glad it wasn't. IIS was more ubiquitous and look how many idiots still have nimda laden systems and don't know it. Every thing does not need to be a wizard. Man up and learn to develop or get out of the business. Way to many amatuer desktop app people in this industry. I for one will be glad when we move beyond the quagmire of the desktop. A 'desktop' should consist of a monitor, mouse, keyboard and a tiny box of some sort with a network connection and NO HARDDRIVE, NO FLOPPY, NO CDROM.
Thu 15 May |     | young grasshopper, you'll just be changing the quagmire of the desktop for the quagmire of the network
Thu 15 May | Albert D. Kallal | It is interesting, but the question of where does one put some data on a computer constantly comes up. If we have a good nice central data processing center with all the bells and whistles then we don’t need local data storage. My oh my, how times have changed right back to the good old days of the mainframe!. If we have a good support team, good sql-server management, good everything, then I also agree that the desktop should not have any local data storage. The problem is now lets send out our 15 salesman on a road trip. If the sales force can always assume that they ALWAYS will be able to connect to the company server, then we really don’t need a local database on each notebook, do we? It even means that for Excel and other parts of office to store data, we again don’t need some local data engine either (and that engine is usually JET, and not the MSDE). Just for sake of clarity here, “JET” is the most common data engine used with products like ms-access, but you can also choose to use the MDSE engine, which is a stripped down version of sql-server). JET is a file based engine, and is NOT client-server. Both do support ODBC however! Often a large number of us choose JET, since it does support “xcopy” development, where deploying of the data is simply a file copy. With MDSE, this is generally not so simple. The problem here is that we can really can NOT make the assumption that the sales force will always have a live connection to the company data center. I am actually dealing with a possible job right now with the above exact issue. We can easily integrate much of the office suite into the companies data base and server structure that they have. It is a d3 database (www.rainingdata.com), and we need to automate some of the sales force stuff. The fact of it not being sql-server is no big deal here. The problem is how do we allow local, non net connected sales people to take and process orders on their notebooks? It is very possible that simple paper forms will be a superior technology to the notebooks unless we can solve this problem. They have the paper now, and each sales person also has the notebook. So, do we allow local data storage on the each of the notebooks to take orders? The ideal view is that the orders are entered into the computer, and WHEN the salesman has a chance, they connect, and up load the data. However, if we allow this, then we need a data engine and data on the each PC. Further, or worse, if we allow notebooks to take orders in this fashion, we also now need a running application on each notebook. (and that REALLY is a big deal). Now, what data engine do we use here? If we can assume that the sales force can use paper forms, and then connect to the central system to enter that order, then we don’t need an application, or any local storage on the notebooks. Further, most if not all of the orders taken WILL initially be done on paper. This process will occur EVEN when a notebook is close by anyway. Given this, I am leaning towards NO data on the notebooks. We are looking at Terminal Services right now. However, the REAL ideal here is that while at your desk connected, you get all your current clients that you have to visit, and get all the previous history information on that client. You then load up the notebook and hit the road. You take orders, and then eventually connect, and the data is synchronized. (using database replication comes to mind here real quick). Hence, this problem is VERY simple if we can assume that everyone is always connected. Until that day comes, then we still have needs for a data engine on each PC. Albert D. Kallal Edmonton, Alberta Canada kallal@msn.com http://www.attcanada.net/~kallal.msn
Thu 15 May | Frederic Faure | Lotus Notes? :-)
Thu 15 May | Eric Budd | MSDE is harder to install than a jet database, but the installation of a named instance is very easy with Install Shield 8. (And yes, you can set the SA password). JET is fine for small, simple applications. But, if you application needs to scale from between 1 to 100 users, MSDE is a much better choice. For the clients with 1-10 users, MSDE is fine. For clients with many users, simply install the database on SQL Server. No muss, no fuss, ONE codebase. Also, JET on a network with multiple users can do very bad things depending on the Microsoft Server settings or the Novell client software in use. MSDE databases just run. Just my $.02 (but based on moving a large application (install base 500+ customers) from JET to MSDE.
Thu 15 May | Herbert Sitz | I've never done it, but I seriously doubt whether MSDE could scale to anything close to 100 users, given the built in performance-degradation that occurs as the number of connections rises above 5. If you have to scale with MSDE, at some point -- and before you have many users -- you're going to have to move to SQL Server. That move is simple, since MSDE is essentially a crippled version of SQL Server. The only difficult thing will be paying for the SQL Server licenses. And that's exactly how Microsoft wants it. As far as I'm concerned, the main advantage MSDE has over Jet is not scalability. It's reliability. And possibly speed, depending on how the database app is constructed. (But in most cases I think you'd be able to build a similar app that uses Jet and is just as fast.)
Thu 15 May | Herbert Sitz | Eric -- OK, I can see now that you weren't suggesting that MSDE could be used with 100 users. So my previous post can be taken as just a clarification that when you start with MSDE you're going to need to purchase SQL Server licenses if you want to scale up beyond a small user base.
Thu 15 May | Eric Budd | I didn't say that MSDE could handle 100+ users, only that the same code base with SQL Server could. Another thing we have found is that using ADO.Net which uses a disconnected model, MSDE works fine with 10+ users depending on what they are doing (and the machine MSDE is running on). In most client/server based applications users spend most of their time looking at the data on the screen and only a small fraction of the time interacting with the database. Any yes, MSDE is MUCH more stable than JET and provides better backup options.
Thu 15 May | Dave B. | I believe the MSDE Deployment Toolkit comes with a VB 6.0 project called 'SqlAppSetupWiz.vbp' that illustrates how to install SQL Server or MSDE solutions. I have never used it, but it might help some folks who are looking to deploy an application that uses these DBMS's. There is also an article entitled 'Deploying Database Solutions' in the SQL Server 7 technical Articles - help, which is a good read if you need to create a setup program.
Thu 15 May | Herbert Sitz | Hmm, is using MSDE with disconnected recordsets not in violation of the MSDE license? I know they prohibit use of MSDE on webservers for a similar reason (viz., that stateless apps can scale remarkably well while using very few connections). If MS hasn't prohibited use of MSDE with disconnected recordsets yet, I wouldn't be suprised if they modified the license in the future. Of course that might not matter, because I don't think many people care about complying with the MSDE license and I don't think Microsoft has been very active in publicizing or enforcing the terms.
Thu 15 May | pietro | Albert Wouldn't MSMQ be the solution you're looking for in this case?
Thu 15 May | Eric Budd | It would be very hard for Microsoft to say we couldn't use their data engine (MSDE) with their latest and greatest data access method (ADO.Net) in a client/server environment. You could also use disconnected ADO recordsets or event (yuck) RDO.
Thu 15 May | Herbert Sitz | Eric -- You're right, of course. And rechecking the latest info on MSDE 2k, I see that you can even use it for web apps. http://www.microsoft.com/sql/techinfo/development/2000/MSDE2000.asp I'm not sure how I got idea that you couldn't use it for web apps. I'm sure I read that at one point while checking out licensing for the original MSDE. In any case, you're absolutely right that MSDE should scale very well when using stateless connections. I bet you could server close to 100 users in many circumstances that way (even though I realize you weren't suggesting that in your original message).
Thu 15 May | Brad Wilson (dotnetguy.techieswithcats.com) | MSDE is actually a great option for an ASP-model business that's in startup phase: run it until you have enough clients that you get contention, then you have revenue so you can seamlessly upgrade to the full (and very expensive) version of SQL Server.
Fri 16 May | A Software Build Guy | TO Jake, Server Centric has been done for some time as proven by http://www.wyse.com/products/winterm/index.htm and http://www.sun.com/products/sunray/sunray100/index.html and http://h18004.www1.hp.com/products/thinclients/ No harddrive, no floppy, Not many Users. I will leave it to the read to figure out why...
Fri 16 May | Simon Lucy | The phrase 'seamlessly upgrade' gives me the heeby geebies.
Fri 16 May | Albert D. Kallal | >Albert >Wouldn't MSMQ be the solution you're looking for in this case? A message based system is possible, but on the notebook side we still need some type of data application to run. You can’t un-leash a sales force with a data entry screen that does verify the types of product ordered. Stuff like combo boxes that look up pricing also do double duty since users then can’t enter the wrong product info. All of the process of designing a good application means that the data entry system needs a database behind those forms. In fact, I don’t know of any business application that can function without some data store during data entry. Hence, we thus still need a local data engine. So, while we could consider a messaging system for the transfer, the real problem is that we need a application to run on the notebooks to create that order before it is sent. So, the sending of the order via MSMQ, or some other means is not the problem. The software to create the order on the notebook is the problem. Simple put, if we can assume a connection to the server, then we don’t need any software to be written for, or installed on the local pc. Albert D. Kallal Edmonton, Alberta Canada kallal@msn.com http://www.attcanada.net/~kallal.msn
Fri 16 May | Stephen Jones | Albert, Ask the salesmen what they want. You may find that they copy the data from the paper forms in their lost moments in the car park or coffee shop or whatever. They won't be able to do that if they need a connection. Also find out why they still enter on paper when they have a notebook. It might be to do with the size of the notebook, and they would want to enter the data directly when they find themselves with a tablet PC.
Fri 16 May | Eric Budd | 'The phrase 'seamlessly upgrade' gives me the heeby geebies. ' This is not a problem. Backup the database from MSDE. Restore it on SQL Server. Configure user counts with the server and the database. Easy as 1,2,3....
Fri 16 May | Brad Wilson (dotnetguy.techieswithcats.com) | Heck, you don't even have to do that. The file format is the same. Detach from MSDE, uninstall MSDE, install SQL Server, attach.
Fri 16 May | Simon Lucy | Ahhh yes. The squirrelly mess that can lie behind the words 'Install'. Imagine. You've shipped your software, you got the installation right for the MSDE, they use it happily for some time, perhaps some considerable time. Now they need to scale up and want to use your SQL Server version. You're nice to them, you don't even charge for this extra scaling except maybe in per seat licences. But they have to install SQL Server, oh actually first they have to install Win2K Server, then SQL Server (and not leave sa with a blank password). Then they get this icon on the taskbar, oh and all these new utilities, look what does this do? And they manage to connect the old MSDE file to the SQL Server and then they can really play. Once you step beyond the MSDE application you've also stepped outside the shrink wrap boundary which lets you isolate yourself from the shenanigans that users can get themelves into quite blamelessly. That's what gives me the heeby jeebies. I know its easy to do, for me; making it easy for an unknown user in a far away land is a differently shaped egg.
Fri 16 May | Brad Wilson (dotnetguy.techieswithcats.com) | Actually, if you were talking about my points, I did mention I was speaking specifically about 'ASP-model businesses' (i.e., you host the service, and a monthly service fee is paid). I was not talking about shrink wrap software. Of course, I think it's naive to call ANY server software 'shrink wrap'.
Sun 18 May | Geoff Bennett | On MSDE limitations: Something to be aware of: MSDE's limit is concurrent queries, not connections. You can have as many connections as you want to the system. The only performance govenor is in the query engine. Once you hit five concurrent queries, the system throttles back performance. On MSDE installation: I use MSDE for one of the products my company makes. Initially, it was a headache, until I understood the options involved. It's very easy to launch the MSI from a command line (as part of an install script, for example) and pass across options including the instance name, SA password etc. Using any standard windows installer creation tool (ORCA, Wise, Installshield etc) you can even add a custom action that embeds the installation into your applications install, progress bar and all. It looks very slick.
DOUBLE STANDARDS | Wed 14 May | Ms. Hypocrite
Business Week: Well, lets start with the simple hypocrisy. If you want to complain about corporations, I want to see your stock portfolio and mutual funds. If you want to complain about immigration, I want to see your family tree. If you want to complain about the government, I want to know what youve done as an activist. And for tech workers in particular, if youre going to complain about being rendered obsolete by your employers, Id like to know what you said to all the American workers who complained about losing their jobs to automation. ... http://www.businessweek.com/smallbiz/content/may2003/sb20030512_8534.htm
Wed 14 May | one programmer's opinion | I didn't read the article. What point are you trying to make? Are you trying to say that you believe that most techies love to complain and aren't willing to do anything else beyond complaining?
Wed 14 May | trollbooth | I hate complaining about complaining.
Wed 14 May | Erik Lickerman | trollbooth: very post-modern.
Wed 14 May | Mike Gamerland | He pulled a paragraph from the article. 'I'd like to know what you said to all the American workers who complained about losing their jobs to automation' The same thing I say today, it is not a double standard to say we made a mistake and should not continue. Is it because it is 'my job.' Not really. To be honest off-sourcing has had little impact on my business for a variety of reasons, most having to do with language and time zones. However, it is misleading to imply that India or Costa Rica or any such country is competing on an even basis. Consider India, where a middle class worker lives on $10/day US. Now is it there fault they can live so cheap? Not really, but there is also little I can do except move to India. But their immigration laws would prevent me. Unfortunately, the writer has a simplistic view on the situation. If I did not complain about the company employing overseas workers, how can I now complain its impact on my job? I can because one is of awareness and one is of intent. Here is my solution. If you are going to employ overseas workers, feel free. However, you must pay them the prevailing US wage. Regardless of how we want to look at it, an American worker cannot live on $10/day. So the solution is to pay everyone the same. If I lose a contract, or position, or account to an off shore company because they had the expertise, people, or experience, I am ok with that. Competition is why I started my company. If however, I lose because I cannot possibly employ US workers and bid competitively, then the process is corrupt. As corrupt as moving textiles to Mexico where we have a country of near slave wages, no environmental controls, and no labor laws. It would be similar to having to compete with prisoners because they only get paid $.10/hour while incarcerated. But, I am sure that will be happening soon too.
Wed 14 May | sleepy | Mike, if we paid them the same, would we be competing on an even level, with our far better client proximities, infrastructure and energy prices? Are you willing to make a complicated equation taking into account all these things, so we can pay them fairly? And what if the equation prices everything just about the same as now?
Wed 14 May | one programmer's opinion | I just did a Google search and found that this person has written several articles on this topic. When I have time, I plan on reading them and perhaps commenting on them. Below, is the Google search I used to find his articles. http://www.google.com/search?hl=en&lr=&ie=UTF-8&oe=UTF-8&q=%22KENTON%27S+CORNER%22+By+Christopher+Kenton+site%3Awww.businessweek.com
Wed 14 May | FullNameRequired | 'Competition is why I started my company' So get ready to compete :) its not your place to chose the arena of competition, it is the place of your competitors and yourself to find an 'edge' Programmers in india have an edge when it comes to cost, all else being equal (experience, skill etc etc) a programmer based in india has an edge over a programmer based in america. Welcome to the global economy :) Placing tariffs etc are not a solution, they are a short term advantage which in the long term will only delay the process, not stop it. Why? Because its very easy for a company to become international these days. So if american companies are not allowed to outsource their work while based in america they will shift overseas and outsource their work from there. So now we have lost the programming jobs *and* various management and admin jobs. Solution? refuse to allow companies that are not based in america and bound by our laws to sell anything at all here. Problem? competition drops, prices in america increase, america becomes its own little sandbox, outside countries refuse to allow american companies to sell to them in retaliation, american companies are selling to americans who are working for american companies, inflation slowly spirals out of control and the economy crashes. The basic problem is that in a capitalist country, an economy which is not growing, is dying. In a closed system there are fundamentally 2 ways to 'grow', increase efficiency or increase the size of the market.
Wed 14 May | Dennis Atkins | 'I'd like to know what you told all the factory workers' Actually I do remember what we told them. We told them that there was nothing to worry about because we were replacing their boring lowpay drudgery work with exciting high-pay knowledge worker jobs that would be a promising long term career they could really use to make something of themselves. Anyone remember telling them something differently?
Wed 14 May | T. Norman | One really has to wonder how sustainable the outsourcing of everything can be. Low-paying manufacturing jobs got replaced by equal or better paying service and knowledge jobs. The problem now is that there is no indication of anything equal or better that will replace the jobs being lost in this latest wave of outsourcing. With fewer people left in the country who are employed and with decent wages, who will buy the products and services so these corporations can make profits? It is a tragedy of the commons. Each individual corporation sees that they can cut costs by outsourcing whatever they can. But when all of them do it, they end up with an impoverished and underemployed customer base who can't afford their products in sufficient quantities to create sustainable profits. Another problem is that freedom of movement of goods without free movement of labor isn't really a free market. One of the main reasons why Indian and Chinese salaries are so low is that they aren't free to work in any country they want. (Yes, some of them do get visas to go to higher paying countries like England or the USA, but that's only a minority of the millions who would like to leave.) The lack of freedom of movement of labor means that many foreign salaries are held artifically low. If they could work anywhere they wanted, their local companies would have to pay them higher to stop them from leaving, and they would often become too expensive to use cheapness as a selling point - they'd have to compete on actual merit.
Wed 14 May | Daniel Shchyokin | competition drops, prices in america increase, america becomes its own little sandbox, outside countries refuse to allow american companies to sell to them in retaliation, american companies are selling to americans who are working for american companies, inflation slowly spirals out of control and the economy crashes. ummm.... that is bad analysis, there is plenty of competition within america itself.
Wed 14 May | FullNameRequired | 'ummm.... that is bad analysis, there is plenty of competition within america itself. ' LOL no shit? Im a computer programmer....you expect me to be able to come up with a _good_ economic analysis? But my (badly made) point was that america operating as a private sandbox is an unsustainable economic model. People crying out for legislation to stop outsourcing are behaving similarly to the RIAA (and other luddites) IMO, they are blindly trying to use legislation to stop a natural evolution because it appears to be working against them. Regardless of the rights & wrongs of outsourcing its going to become more and more common, and any attempts to made it a less good way of doing things are going to fail and/or cause undesirable sideeffects. The trick is to take advantages of the opportunities offered, rather than fighting to keep things as they were. For instance, you can now hire a computer programmer to create that killer application youve been thinking about for less than $10/hour :) Dont fight the river, go with it. You may not end up where you thought you wanted to be, but you will likely find yourself somewhere interesting.
Wed 14 May | analyst | Kenton provides a good analysis. However pointing to other problems in earlier times does not negate the current problem nor the possibility of fixing. Nor are the victims of the current problems the ones responsible for those earlier problems. Kenton's analysis of failures in suggestions put to him by critics is interesting, but fails to take account of underlying truths and possibilities in those suggestions. For example, it is naive to call for trade barriers, but that's not what's needed. All that's needed is enforcement of the country's traditional immigration schemes, instead of the current arrangements, which give special concessions to corporates.
Wed 14 May | Mike Gamerland | Well, it appears some have taken me to task so let me run down the points: - 'Am I willing to entertain a complicated equation?' Bring it on. Consider the cost equation of a developer in Los Angeles supporting a company in Buffalo and a developer in India doing the same. I am not concerned that the price will be the same because, it will not be. The largest cost in an outsourcing agreement is people. - 'So get ready to compete. its not your place to chose the arena of competition, it is the place of your competitors and yourself to find an 'edge' and Welcome to the global economy.' Bring it on. Yours was actually a response I predicted to my partner. That a some point 'global economy' would be tossed out there as an 'ends justifies the means' assault on common sense. Competition is not an arbitrary existence. I do not get to burn down your business, threaten your family or kill your customers. It is naive to assume that you can excuse away variances in life with 'welcome to the global economy', and 'then compete'. This is not medieval England where we invoke 'Droit de seigneur' on a population merely because we can. Using your logic I should be making deals with China's gulags, ensure that Mexico removes any form of pollution legislation and create an environment of indentured servitude for my employees. Then when I have pounded them into a barren life of slavery I can be thankful that I was able to compete. What a pathetic existence. - T.Norman is correct. History has shown that what we end up with is 'an impoverished and underemployed customer base who can't afford their products in sufficient quantities to create sustainable profits.' Henry Ford and Milton Hershey knew this and paid workers accordingly. And, as anti-union as people are today, they forget that many companies paid the white-collar worker consummate with the union to ensure an executive union never formed. - 'For instance, you can now hire a computer programmer to create that killer application you've been thinking about for less than $10/hour :)' Incorrect, I can do it for $10/day and by doing so I ensure the economy which sustains my existence begins to fail. An analogy: I go to the local hardware store when I need something, in most cases. Why? Because I want him to be there. But couldn't I save $.20 on a bolt going to a large home center? Yes. But as a human being, citizen and local businessman, I see the bigger picture. It is a cooperative pact with my fellows to ensure that we continue to provide success for each other. Supporting predatory capitalism is fatalistic in that I win you lose and in the end we all do. This was summarized elegantly by 'analyst' with:All that's needed is enforcement of the country's traditional immigration schemes, instead of the current arrangements, which give special concessions to corporates. Competition is a beautiful thing. To assume, 'anything is fair to meet the bottom line' is chaos not competition, and again a pathetic existence.
Wed 14 May | analyst | Mike, you touch on one of the most powerful points in this debate: the argument that 1. globalisation in this sense is inevitable and that 2. therefore we must accede to it. If we lived by that credo, we would allow all our forests to be cut down because it's profitable, and our seaside areas to be devasted by high-rise developments because it's profitable. It seems to have become a popualr argument of business managements that offshoring is inevitable, so get used to it. What they're really saying is that it's profitable for them, and they want to continue doing it. That's no argument for inevitability at all. Another interesting aspect is that this debate is often framed as a competition between programmers of different countries. It's not. It's between greedy entrepreneurs and professional people.
Thu 15 May | FullNameRequired | 'That a some point 'global economy' would be tossed out there as an 'ends justifies the means' assault on common sense. ' ?? I wasn't justifying anything. Im a contract developer competing for work, and my business faces the same threat you do. The global economy is not, IMO, necessarily something to be welcomed. But it *is* something to be accepted. Screaming and whinging about how unfair it is that someone else can live more cheaply than you is the most pointless exercise I can imagine. 'It is naive to assume that you can excuse away variances in life with 'welcome to the global economy' variances in life exist. America consumes something like 40% of the resources used each year. If the rest of the world had the same lifestyle we do, the thing wouldn't last another decade. India, China, Pakistan, Argentina, etc etc, these countries are *not* the exception, they are the rule. America is the exception. *and* america is living an unsustainable lifestyle. 'Incorrect, I can do it for $10/day and by doing so I ensure the economy which sustains my existence begins to fail' No, the economy merely changes. In a world where programmers can be hired for <$10 an hour, those who wish to earn more than that must change jobs. Bottom line is that if I can create an application that sells for $1 and is paid for and used by 0.00001% of people who own a computer I will be outrageously, stupidly rich for life. IMO this means that there is no lack of opportunity out there for those who are 'ready to compete' :) 'It is a cooperative pact with my fellows to ensure that we continue to provide success for each other' by which you mean 'we give charity to each other' Purchasing an item off someone for more than that item if worth is not 'providing success for each other' it is 'pointlessly wasting money'. Looked at another way, the money you could have saved by buying that item more cheaply could have been donated to save the whales, cure cancer or done something equally useful. Jobs change, opportunities change, lifestyles change and people change. America is not going to be able to sustain its current lifestyle except at the cost of lifestyles of people in other countries. Is that what you mean by 'ensuring success for each other'? 'To assume, 'anything is fair to meet the bottom line' is chaos not competition' There is a biiiig step between competing on price and assuming 'anything is fair to meet the bottom line'. To say 'Its not fair to compete with me in that area because I cant win' is childish.
Thu 15 May | Alyosha` | Good points being made by analyst and Mike Gamerland, and applicable elsewhere in the protectionist vs. free market debate, but seeing as programmers don't tend to emit toxic wastes on beaches or cut down trees, and as far as I know there's not many programmers for hire in China's gulags, I don't really the objection to offshoring tech jobs. There's nothing inherently immoral with incorporation, or making a profit, or looking out for one's own enlightened self-interest; none of these necessarily infringe on the rights of others. To co-opt Mike's analogy, offshoring development work to other countries benefits THEIR economies, increases THEIR consumer base, and in the very long run, benefits all of humanity indirectly as citizens of other countries are now wealthy enough to purchase our goods and services from US (provided, of course, that our products are even worth being bought when compared with the world market). If it's true that American goods and services are overvalued, then self-interest would demand protectionist policies, but it's morally bankrupt and moreover senseless to prevent inevitable trend of competing against the rest of the world on a level playing field, to discriminate against foreign workers merely on the basis that they live outside our borders.
Thu 15 May | FullNameRequired | 'If we lived by that credo, we would allow all our forests to be cut down because it's profitable, and our seaside areas to be devasted by high-rise developments because it's profitable.' what a load of old bollocks :) There is no reason that the world economy requires that. Greedy, stupid companies require that. My point is that we should pick the battles. Stopping a company from hacking down trees which can never be replaced is one thing, whinging about companies hiring people who live outside america is another. 'It seems to have become a popualr argument of business managements that offshoring is inevitable, so get used to it. ' As I said earlier, Im a contract developer who writes software for a living. Potentially my livelihood is under threat as much as yours is. Is it possible that offshoring is inevitable, and that is why everyone keeps saying it is? Its inevitable because its cheaper and provides for greater profit. (exactly as you suggested). Will offshoring mean the end of the economy? I doubt it. 'Another interesting aspect is that this debate is often framed as a competition between programmers of different countries. It's not. It's between greedy entrepreneurs and professional people.' LOL The programming professionals who are screaming in pain because other programming professionals are charging less than they are could also be accused of greed IMO. Those living offshore who are doing this work are programming professionals with a lower standard of living than you. This is not (necessarily) because they are oppressed working crushed under the iron hooves of a vicious and immoral corporate ruler. It is because they have lower expectations. They dont expect to be able to live in a fancy apartment with silk sheets and a $4000 television and sound equipment. They can live eat well for $20USD/week. Its fine to feel threatened...perfectly reasonable in fact (I know I do). But its hypocritical to pretend to be outraged on their behalf, they need the work and can afford to charge less. We need the work too, and have to charge more because of where we live. Whats the solution? watch the market, work smarter and know when to switch careers :)
Thu 15 May | Mike Gamerland | Actually you were justifying it. You want to claim that Americans cannot compete with India, China, etc. because the market has changed. Or as you said 'To say 'Its not fair to compete with me in that area because I cant win' is childish. ' I agree. However, to presume you can do nothing about it so you may as well be as parasitic as a competitor is, well pathetic. This is the mentality of 'Bob robs banks, I only embezzle so its not as bad.' As for America consuming 40% of the resources each year, what is the point? That we utilize resources because we are a more advanced nation. Instead of trying to push us back to the stone age, I prefer to look at other countries as needing help being brought into today. As for Americans living an 'unsustainable lifestyle', it sounds like you are not begrudging success. As for providing charity, it is not charity to use a local resource. It follows the same premise of Ford and Hershey that a man (or woman) working is a country's best asset. If they cannot afford the goods and services they produce, it will not be long before no one can afford anything and what good is that? While it may be personally beneficial to have a tunnelled view of the world, it does not benefit us as a country or society. I do not wring my hands over global competition, I see it as competition. But I also expect it to conform to the norms of competition. One of those norms is to prevent slave labor. Not only because it is bad for the slaves, it is bad for business and society. As for whether it is a 'biiig step' from assuming anything is fair to competing on price, we need only look at one of the biggest examples gone astray--- Enron. In the win at any cost, the lied, colluded, created a false energy crisis in California, embezzled and broke several laws. Hearing them discuss it, they were just competing in the tough energy market. It wasn't a big step at all, that's the problem, it is a bunch of tiny steps. Heck, look at Microsoft, to this day they don't think they did or are doing anything wrong. Tiny steps to stay competitive. Suffice it to say, I believe we will just have to agree to disagree.
Thu 15 May | FullNameRequired | Hi Mike, 'Suffice it to say, I believe we will just have to agree to disagree.' I did get carried away there, throwing moderately insulting terms around ;( my apologies for that. If its any excuse Ive just spent 4 hours explaining to a client why adding features w,x,y and z to a database 2 days before it goes live is actually *not* a brilliant idea.
Thu 15 May | Chi Lambda | The Smoot-Hawley Tariff Act of June 1930 raised U.S. tariffs to historically high levels and made a recession into 'The Great Depression.' '[While] the tariff might not have caused the Depression, it certainly did not make it any better. It provoked a storm of foreign retaliatory measures and came to stand as a symbol of the 'beggar-thy-neighbor' policies (policies designed to improve one's own lot at the expense of that of others) of the 1930s. Such policies contributed to a drastic decline in international trade. For example, U.S. imports from Europe declined from a 1929 high of $1,334 million to just $390 million in 1932, while U.S. exports to Europe fell from $2,341 million in 1929 to $784 million in 1932. Overall, world trade declined by some 66% between 1929 and 1934. More generally, Smoot-Hawley did nothing to foster trust and cooperation among nations in either the political or economic realm during a perilous era in international relations.' http://www.state.gov/r/pa/ho/time/id/17606.htm Those who forget history will be condemed to repeat it.
Thu 15 May | analyst | There's a persistent theme in this debate that suddenly global competition has caught up to programmers, who must meekly say OK, and accept massive pay cuts and unemployment. Have any of you proponents of that view asked why this change mostly affects programmers, and not other occupations in our modern economy? India has stacks of managers, journalists, teachers, doctors, lawyers and chief executives. Why is it that global competition reduces our pay, but magically causes the pay of senior executives to increase? The reason basically comes down to the fact that most programmers accept it. Nothing more than that.
Thu 15 May | analyst | Chi Lambda, trade tariffs are not something being proposed by me or by other thinkers on this subject. Fair, free competition within the economy as it exists is all we want. Offshoring is largely facilitated by the visa rackets that grew in the late 90's, and is of course a close sibling of the H1-B racket. The provision of these special provisions for business effectively represent a tariff for business to protect them against having to compete in the economy for programmers. The results of this virtual tariff were the dot com boom, since it gave all sorts of dead beats an easy access to programmers. The virtual tariff continues to distort company prospects, while enriching CEO's in the short term, and will eventually cause more serious problems.
Thu 15 May | analyst | Full Name .. it's not actually programmers in other countries who are charging less, it's entrepreneurs from those countries, and also from America. That's my point. Those entrepreneurs charge 10 percent less in America, then pay hardly anything to their staff, and pocket small fortunes. It's like the drug business.
Thu 15 May | David Basil Wildgoose | I have no problem with competing with fellow programmers anywhere in the world. But only if that competition is fair. Here in the UK, contract programmers are subject to tax law IR35 levied on 'disguised employees' whose rules makes them the most heavily taxed section of the population. But if we haven't any work, despite paying double employment taxes we suddenly become 'self-employed' and ineligible for social security benefits. Meanwhile, foreign IT workers have until very recently had an automatic right of entry to compete with us. In short, I have no problems with fair competition - with the emphasis on FAIR.
Thu 15 May | Just me (Sir to you) | 'But it seems to me an all-too-convenient catharsis to shake our fists at Enron and Worldcom, while we continue gorging ourselves on an orgy of products and petty entertainments, and doing so with no regard for the consequences of our short-term self-gratification -- until, of course, we have to pay the bill. Our culture is a mirror image of the greed at the top, and we worship it too much to ever examine ourselves and our complicity in the system. The main difference I see between us and the CEOs we've come to hate is one of scale and opportunity. ' Hey I like this character already.
Thu 15 May | Just me (Sir to you) | T. Norman seems to hit the nails on the head. Ultra capitalism can never prevent a 'tragedy of the commons scenario', as that requires the sort term relinquishing of individual profit for the benefit of the whole. Game theory shows that to prevent the decline of the commons you need a rather sofisticated social organisation that is in direct conflict with the 'individualism' preached in our 'free' society. Another point which I also have argued before, and that T. puts very well is that H1B is advantages to the american programmer, since at least it places the 'cheap' workers in conditions that require a higher wage demand for those making the move, and creates a better negotiation position for those staying at home.
Thu 15 May | | As I have posted here before, it is amazing how Americans are all in favour of capitalism and free trade until it burns them at which point they cry 'Unfair!'. Oh dear. How sad. Never mind.
Thu 15 May | Ling | When I wake up in the morning, I listen to BBC radio, over the weekends I even watch the CNN. I board a Japanese taxi that fuels in a BP (British) petrol Station. When I arrive at work, I use a HP laptop - and you guessed right Microsoft software. I have not been complaining. My compatriots produce coffee and tea and sell it at throw-away prices. Farmers have to compete against highly subsidised US/European produce. Still Not complaining. I have a world class qualification in software development. I'm employed in Nairobi and earn about $ 1,000 a month working for an offshore company. Still not complaining. What makes me rather unhappy is the fact that we have huge trade imbalances that are not addressed by the current WTO agreements. Setting up a software development house is not a very capital intensive undertaking especially in city like Nairobi or Bombay. Countries with lower costs of living can certainly produce software at lower costs than Western countries. Sorry to all the programmers out there in the west, you cannot change this fact. You can deny me H1B visa to US, but can you stop me from getting contracts from US companies?
Thu 15 May | T. Norman | If they're gonna globalize the goods, they should also globalize the labor. Indians, Chinese, etc. should be free to work in any country that allows the mass importation of their products, and citizens of the countries who buy their products should be free to live and work in India or China. Tariffs hurt trade by making prices artificially high, but restrictions on the movement of labor makes the price of labor artificially low by taking advantage of a captive workforce. In most cases, other countries can produce goods cheaper than the US not because they are more efficient on an output produced per person per day basis, but only because they can get more output produced per dollar as a result of a low paid captive workforce.
Thu 15 May | Chris Nahr | So do all you programmers who complain about cheap programming jobs in India also take care to buy only expensive home-made goods such as clothes, or do you rely on cheap Chinese or Mexican products whenever it doesn't affect you directly?
Thu 15 May | Larry | The desire by companies to get the most value out of the cheapest product means that India and alike will only remain favoured countries for outsourcing of software for 'x' years. Here in the UK, companies are outsourcing call centres to India, away from the previously cheap North of England/Scotland base. ex-Textile workers, ex-miners and ex-shipbuilders provided a low cost workforce for these places, but now have become too costly, and so the companies are now moving on. In this case 'x' = 10~15. The same will happen to some software markets, and you just have to accept the fact that is how captalisim works. It sucks unless your a stock market analyst or a CEO, when it really works (until you get caught).
Thu 15 May | Joe AA. | 'In short, I have no problems with fair competition - with the emphasis on FAIR. ' Fair competition is an oxymoron that only pertains to board and card games... and some sports. Get over it.
Thu 15 May | Ling | Hi Norman, It seems that you are of the opinion that offshore development offices are 'slaving' sweat shops just bent on exploiting the poor labourers. While this may be true of companies that manufacture shoes, clothes e.t.c. It is not necessarily true for companies that deal with software. Most companies pay just as well as the indegenous companies if not slightly higher. Infact, the mere existence of off-shore companies causes the average salaries to rise (law of demand and supply remember). Regarding efficiency, you can reproduce exactly the same results in Argentina, India, China and even US provided you provide the same environment, training and resources to the developers. Now you have another problem in your hands, the developers in these nations are not only cheaper than in the West, but they are just as efficient as any programmer can be.
Thu 15 May | Tj | About the article: I've thought about this a lot and am actually happy there's such a worldwide infusion of programmers. It reduces the prices one can charge, but things keep pointing to a golden age of computing. So many old intro books are being released for free, like Hoare's CSP, and the list is stretching on... It's not hard to meet someone who knows formerly arcane topics. I'd like to be convinced this is a terrible threat, but mainly I don't see how we expect other nations to be reliable software consumers without many of them being employed by the software industry.
Thu 15 May | Dimitri. | Welcome to the wonderful world of globalisation. The arguments are both pro and con. Pro is the following: obscenely rich people (by world standards) in obscenely rich countries like the US and Europe will get less money, while poor people in the thirld world will get more. That's the good. For those people getting 300$ extra per month will have a totally different value then it would have for the average western worker. So, with globalisation, it may be possible eventually to distribute the riches better and to lift the rest of the word to higher standards of living. Con: the problem is that the countries where companies choose to work are in a very weak position against the companies. They cannot ask for better working conditions, better environmental control, and so on, because for them, the money involved is huge, and if they start making noises, the companies will go somewhere else. No labor unions. No protection. Hence the deforrestation. It's not happening because the companies are stupid, but because they can. They would love to do it in the US as well, but there they can't. Another problem with this may be (I don't know if it is so) that maybe the world economy is not yet capable of sustaining a high level of life for _all_ its population. Look at it this way: the western world has a very high standard of living, and the rest of the world contributes to it in no small measure. If we want to have the same standard of living all over the world, who will make the cheap sneakers? Until recently, west has been protected from this by crass protectionist policies. These start solwly to go away. How will it be? Will we all settle for a lower standard, with the advantage that it is shared by the rest of the world? (the advantage would then be that you could travel mostly anywhere without fear of something going 'bang') Interesting and important quetions. Now what about some coffee? Ah, and about 'why does it happen with programmers and not with lawyers/journalists/etc'. That's a stupid question. Programming is least dependent of context, that's why it happens. Indian law is different from us law. Journalism?! You have to be there, you know. And so on.
Thu 15 May | T. Norman | 'Environment, training and resources' are big ingredients in what creates efficiency! So saying that they could be just as efficient if they had those things, is like saying that if I had the genetics, training and determination of Michael Jordan I would be a world-famous basketball player. How much cheaper would the developer in Argentina or Kenya or China be if they could freely work in any country in the world? Yes, they would be somewhat cheaper, but if they were truly providing equal or better value for equal time, it would be irrational of them to continue to accept drastically lower salaries than Americans. If they lacked the 'environment, training and resources' to produce as efficiently as Americans, their lower salary would be primarily from their lower efficiency and not the result of being part of a captive workforce.
Thu 15 May | Just me (Sir to you) | 'the world economy is not yet capable of sustaining a high level of life for _all_ its population' Can it ever be? Suppose you reach this point at some point in time, what would keep the world population from expanding? Worldwide enforced restricted reproduction rights?
Thu 15 May | David Basil Wildgoose | 'Fair competition is an oxymoron' - actually, no, not in this context. 'Fair' means working to the same rules. I accept that this isn't currently possible when competing against programmers in a different country, my objection is when the rules are stacked against me when competing as a native in my *own* country. Of course, there have also been many good points about fair trade in general, and this is something I support wholeheartedly. If we in the developed nations dropped our unfair trade barriers against the developing nations in many of their principal exports then the whole world would be better off. Agriculture is a case in point. We would have cheaper food, (no more European Common Agricultural Policy and the U.S. equivalents), and they would have more monies to spend on health, education and the like. Britons know this to be true, we experienced it when the Corn Laws were abolished in the nineteenth century. Now we just need everyone else to learn the lessons of history. The problem is that there are Double Standards right across the board.
Thu 15 May | Just me (Sir to you) | 'it would be irrational of them to continue to accept drastically lower salaries than Americans' Why? There is no restriction on the movement of programmers inside the US borders, and yet there are substantial differences in the averge wages for developers between New York and Alabama. This supposed 'free flow' has not evened out these differences. Now I am not saying that there will not be a substantial movement, but there is more to the economy than just the IT sector, and the geography of this sector is embedded in the rest of the geo-economic landscape. The way we are going is that with the new technologies, it becomes more and more feasible in IT to 'delocalise' your geographical presence. The nescessary technical infrastructure for a lone IT consultant riding his horse in Tenessee to offer development consultancy services to a NYC firm are improving in quality every day. If this is more true for IT than for other economic sectors, than that Tenessee consultant can afford to charge less than the average NYC consultant, and still have a living standard that is substantialy better than the NYC would have had on the higher hourly rate. Given the same resultant abilities, it therefore would be more interesting for a company to off-source this type of work to average lower wage regions, and the deveopers there would be substantialy better of than there more expensive location resident competition. It is not the salaries evening out, but the living standards. Since one dollar buys you more living standards in some regions than others, while costing the same to the person having to pay for that dollar, it should therefore rationaly follow that relocatable IT services (such as large parts of development) will flow to 'cheap' regions, or if you prefer too look at the other side of the same equation, that providing relocatable IT services in 'expensive' geographical locations will only offer a comparably lower living standard.
Thu 15 May | T. Norman | 'There is no restriction on the movement of programmers inside the US borders, and yet there are substantial differences in the averge wages for developers between New York and Alabama.' There are differences in developer salaries within the US, but not *drastic* differences of 5X and 10X as is the case when you compare US programmers to those in India and China. If foreign programmers are free to work anywhere, AND are capable of providing the same value as American programmers, they won't continue to accept just 10-20% of what American programmers make.
Thu 15 May | Just me (Sir to you) | Well, a quick scan of http://www.homefair.com/homefair/servlet/ActionServlet?pid=199 already reveals factor 3 differences for living expenses between American cities.
Thu 15 May | T. Norman | A localized difference in the cost of living or the cost of production does not necessarily translate into a comparable difference in wages. Somewhere like New York may be 3X as expensive as Kentucky, but that doesn't translate into salaries being 3X as high.
Thu 15 May | Ling | Let's think of labour as a commodity, even if it's just for a minute. We are all selling this commodity in a free market where any entrepreneur can buy as many units as he wants and he can buy from anybody he wants. Let us suppose further that I can produce the labour at a fraction of your cost (say 25%) and that it's of good enough quality to satisfy the entrepreneur. What motivation would I have in charging the same amount as you are charging? If I charged as much as you do, I would not be able to compete with you because you are in a more favourable geographic location (assuming the entrepreneur is American). He would also favour you because you are of the same nationality. However, when he sees the economic sense in buying from me, it won't matter. I will win hands down.
Thu 15 May | Yanwoo | This topic has certainly fired up a few bellies. Personally, I'm a capitalist - not an 'American capitalist' who supports the value of the individual, when it's just themselves, or supports free markets only when they win in the short term - but one who fundamentally believes in the power and right of the individual, every individual across the globe, and believes in free markets. What I'm hearing from some people in this newsgroup is just moaning - people who didn't see this threat early enough and are now running scared from the competition. I say bring it on. If you can't take the heat, get out of the kitchen. Whether it's fair or not is irrelevant, what's relevant is that we, as the techie industry, has not built on all the experience and knowledge we have to protect ourselves against this threat in the only way we can - by differentiating ourselves and making ourselves better. Bottom line - after 40 yrs or so of IT projects the majority of large IT projects are either deemed a failure or are canned. That's rubbish and all of our faults. Up until now we've been allowed to get away with that because we've all been rubbish. Maybe that's about to change as we face down this competition - it can only be good for the techie industry as a whole. So lets focus on our strengths, differentiate ourselves and find a new way in the world where we can be successful and where we can be outsourced. Alternatively you can all stay on here moaning how unfair it all is and how wonderful you all are. Life changes all the time, we all have to grow and adapt to the new challenges - you can't fight globalization (not that I would want to - it'll enrich all our lives in the long run if you can see past the end of your noses) so lets tackle it head on and stop running scared.
Thu 15 May | Yanwoo | Correction (and quite an important one!!): >>and where we can NOT be outsourced.
Thu 15 May | tapiwa | these are old debates..... a lot of folk here need to read http://bastiat.org/en/protectionism.html This was published in 1847, is very short (about 5 minutes reading), and begins ... Paul: My dear colleagues, every day large quantities of wood enter Paris, and as a result large sums of money leave the city. At this rate we shall all be ruined in three years, and then what will become of the poor? [Cheers.] Let us ban all foreign wood. It is not on my behalf that I am speaking, because all the wood I own would not make one toothpick. Hence, I am completely free from any personal interests in regard to this question. [Hear! Hear!] But Peter here has a grove of trees and will guarantee to supply fuel for our fellow citizens, who will no longer be dependent upon charcoal sellers of the Yonne.7 Has it ever occurred to you that we run the danger of dying of cold if the owners of the foreign forests took it into their heads not to deliver wood to Paris any longer? Therefore, let us ban their wood. By this means we shall prevent the draining away of our money, create a domestic woodcutting industry and open to our workers a new source of employment and income. [Applause] John: I support this proposal by the distinguished previous speaker, who is so humanitarian, and, as he himself said, so completely disinterested. It is high time we put a stop to this brazen laissez passer, which has brought unbridled competition into our market, so that there is not one province whose situation is at all advantageous for the production of any commodity whatsoever that does not flood us with it, undersell us, and destroy Parisian industry. It is the duty of the government to equalize the conditions of production by the imposition of judiciously selected duties, to admit only goods that cost more outside Paris than they do within the city, and in this way to extricate us from an unequal contest. How, for instance, can we be expected to produce milk and butter in Paris in competition with Brittany and Normandy? Just remember, gentlemen, that it costs the Bretons less for their land, their fodder, and their labor. Is it not only common sense to equalize opportunities by a protective town tariff: I demand that the duty on milk and butter be raised to 1000%, and higher if need be. Breakfast may cost the people a little more on that account, but how their wages will go up as well! We shall see barns and dairies rising, creameries multiply, new industries established. It is not that I stand to profit in the least from the adoption of my proposal. I am not a cowherd, nor do I wish to be one. My only desire is to be helpful to the toiling masses. [Cheers and applause.] I totally recommend it, and another essay http://bastiat.org/en/petition.html (1845) to all.
Thu 15 May | Phibian | Someone asked why there aren't a whole slew of off-shore lawyers and doctors from India. I forget what the other examples are, but these are primarily service industries where you expect to be able to go and visit your service provider. This is especially true in the case of doctors. Remote diagnosis is still a second choice and requires expensive equipment. So you can't simply outsource your medical treatment to India. Furthermore, in the case of lawyers, the rules are different. Living in Ontario, I wouldn't hire a BC lawyer to represent me unless the case was in BC or at a federal level. In terms of why we don't have an influx of doctors and lawyers coming to North America a la H1B or whatever, actually it is my understanding that we do. However, their credentials are often not recognized, and many end up underemployed. (This whole policy is actually under debate in Canada right now, with a few of the federal election campaigns talking about it, since we have such a doctor shortage) Actually, this whole thread reminds me of an interesting conversation I once had with a guy from Namibia who thought I should be hiring his employees (who were part of some special program to get out of poverty). Anyway, my point was that there are lots of people here in Canada that I could hire and since those people were physically here it would be easier to work with them. I also mentioned how I didn't feel right about paying so much less to his employees since I would be taking advantage of them. I was pretty smug and felt very morally superior about the whole thing. He told me that here in Canada, we don't understand how lucky we really are. Forget about all the 'starving kids in ', and just think about the difference in technology access. For instance, at the time, I had more bandwidth going to my house than the entire country, and their internet connections were often interrupted by people stealing the copper in the lines to make things with to sell. He said that there are many countries with far fewer resources than we have, and it seemed to him that it is far from being greedy and opportunistic to give struggling countries a chance. He couldn't understand why someone would claim moral superiority over an essentially selfish and discriminatory act. Then I asked: 'what about the fact that it is so much cheaper? Isn't it immoral to take away some one else's ability to compete here?' I've never forgotten his response. He said that there is nothing immoral about paying someone a living wage, even if that amount would not be a living wage in a different country. After all, if you were to pay full pop, you would be instantly elevating the offshore employee to great riches, possibly even millionaire status. That has its own set of ethical implications... Furthermore, some projects actually need face-time (as we've all discussed here). So the difference in salaries is really a premium for the convenience of having someone on site, same time zone, same cultural background etc etc. The real problem is that there are only so many jobs in technology to go around (if that bothers you, get out there and innovate!). The question is: is it morally right to hoard all those jobs within your country? Should your country of origin really have anything to do with the opportunities you can access throughout life? (We've asked this question before in the form of 'Should your gender/race/religion/etc really have anything to do with opportunities available'...). This conversation really opened my eyes. I'm still uncomfortable with the whole thing, but I'm very aware that the whole issue is not nearly as black and white as the participants on this thread are making it out to be.
Thu 15 May | Yanwoo | Brillant tapiwa. Great story. It's got me thinking, over in the UK our car industry has died - there are now no mainstream car manufacturers who are British owned. Why? we couldn't compete - we weren't good enough. What's happened? some short term pain in job losses, we still have a reasonable of foreign car makers on our shores, we've realised that this is just something we couldn't do as well as others so we either had to fight and get better or pull out. We pulled out. What's the long term consequence? We're not stuck doing something we weren't very good at, we still have cars and slowly prices are coming down to match other parts of the world and we're free to focus more on stuff that we can compete in. No great shakes. The world moves on and deals with the changes - it's just some individuals in this forum that can't see the bigger long term picture.
Thu 15 May | Yanwoo | Good points, well made, Phibian. I was reading the other day, during the May day riots, how perhaps some of these protestors were mis-guided protesting against capiatlism. As you said, one of the points of the article was that although the wages and conditions in western companies based in developing world countries are poor by our standards - by there standards they are often very good. So many of us have this western arrogance and enforce our views and paradigms of the world on others. Who are we to decide for them?? In summary, the article's conclusion was that the best way for any country to reduce poverty is to embrace capitalism. Something like 40 years ago South Korea GDPs was half the of Namibia, but since it embraced capiatlism it's GDP has been doubling every 11 years or so. I don't think any statistics are needed to compare the levels of poverty in South Korea as against Namibia now do we?! There are lots of examples where capitalism has been embraced and GDP has gone through the roof - and there are many more (unfortunately) which are ruled by dictators or communist states where this is not the case. Even China is now beginnging to adopt certain elements of the free market - and they have already reaped some of the rewards. But hey lets protest against one of the best ways to reduce poverty. Genius.
Thu 15 May | Just me (Sir to you) | 'What's happened? some short term pain in job losses, we still have a reasonable of foreign car makers on our shores' I am sure the people who lost those jobs were just as upbeat about it as you. BTW: Get ready to have the rest of your car production delocated any day now, unless you are prepaired to lay-out another round of billions in subsidies from taxpayers money for keeping them onboard for another term.
Thu 15 May | T. Norman | 'What motivation would I have in charging the same amount as you are charging? If I charged as much as you do, I would not be able to compete with you because you are in a more favourable geographic location (assuming the entrepreneur is American).' You would charge up the value that your clients place on your services. That value may be diminished by your distance, so your price will be lower by some factor to compensate, but not significantly lower than that. If distance does not diminish the value of what you produce, clients would be willing to close to what they would pay for local production. If the value *is* decreased significantly by the distance, clients will be receiving less value for their money, in which case they aren't really gaining much by sending work thousands of miles away even though it is 'cheaper'. But the glitch here is that foreign programmer salaries are held artificially low because they are a captive workforce. If they are providing equal value after accounting for distance, they couldn't be held to such low salaries if they were legally as free to move around the world as the software they produced.
Thu 15 May | David Basil Wildgoose | ...but the reason they can't move around the world freely is down to social security. In the developed world it is unacceptable to see people starving in the street. We have social security systems intended to prevent that. But if we allow free entry to all people, then people will come, and some will fail, thus making use of social security. And of course, many others may come solely to take advantage of (relatively) generous welfare. At what point does the system break down? And how can we have a system that is fair to *all* people? After all, there's only ONE human race.
Thu 15 May | anonymous | Hi T. Norman, you mention captive programmers... does that mean the INS should be a lot more open to immigrants?
Thu 15 May | David Clayworth | There are also examples where countries have adopted capitalist policies and come out of it very badly. Argentina is a case in point.
Thu 15 May | T. Norman | If only the US opened its borders and did it suddenly, there would be definite social problems. But if every country in the world did it, and did so gradually, it's not so likely that everybody would flood into the US.
Thu 15 May | David Clayworth | I'd like to come back to the original question about hypocrisy. I put it to you that if you support a policy that has bad effects on people because you think a better good is coming out of it, and then change your mind when those bad effects start to be on you, you are hypocritical. It actually doesn't matter whether you were right or wrong about the policy originally, you are still hypocritical, one way or the other. What are the consequences of this? Well, you owe the people who had the bad effects originally a big, big apology. Second you have to start asking yourself 'Am I the kind of person who only notices the downside when it affects me?'. If the answer is yes, then do something about it, very quickly. Third you have to look very closely at any policies you currently agree with that have a downside for other people, and ask youself if you would continue to support them if you were the one being affected.
Thu 15 May | sedwo | David, You articulate the very nature of the fact perfectly and I couldn't have put it better my self. This is an extremely complex equation to life in the working world and I doubt that there is a fair solution to pleasing everyone. With the pace of technology shrinking our world and bringing everything closer, quicker, and smarter; it is inevitable that society and business will be forced to adapt to these drastic changes. Being selfish and hypocritical is just part of humanity. Our survival instincts kick in when being threatened and it is our will to protect our own self interests and well being. Everyone would do the same things given equal opportunities. And ultimate power corrupts ultimately. In the end, those who fail to adapt and resist the change, are most likely to be destroyed. And once again, the fittest survive. Life's tough. Deal with it.
Thu 15 May | tapiwa | David, very valid points... great stuff. Yanwoo, I would call the folk you described 'fair weather capitalists' one more thing I recommend, is that people read 'The Law' by Frederic Bastiat .... http://bastiat.org/en/the_law.html Basically talks about the extent to which the law is used to plunder... 'Now, legal plunder can be committed in an infinite number of ways. Thus we have an infinite number of plans for organizing it: tariffs, protection, benefits, subsidies, encouragements, progressive taxation, public schools, guaranteed jobs, guaranteed profits, minimum wages, a right to relief, a right to the tools of labor, free credit, and so on, and so on. All these plans as a whole — with their common aim of legal plunder — constitute socialism. '
Thu 15 May | Paulo Caetano | > All these plans as a whole — with their common aim of > legal plunder — constitute socialism. The alternative being...? It's a moot discussion. Both capitalism and socialism have positive points. And they share the same problem - human nature. Both are abusable. And if tomorrow someone comes up with the wave of the future, whateverism, the problem will remain. The problem is not in the system (capitalism, socialism, whatever-ism) specification, but rather in how we implement it. So far, capitalism has scaled better than the rest; however, the number of users (that's us) keep growing. On a final note, if we can all agree that 'going global' is a good thing, and that some unpleasant side effects are unavoidable, then we should all agree also that some of the 'plans' mentioned above (namely, protection, benefits, subsidies, encouragements, progressive taxation, public schools, minimum wages, a right to relief, a right to the tools of labor) are a good thing, and that some unpleasant side effects (aka, abuse) are unavoidable. -- 'Suravye ninto manshima taishite (Peace favor your sword)' (Shienaran salute) 'Life is a dream from which we all must wake before we can dream again' (Amys, Aiel Wise One)
Thu 15 May | tapiwa | Paulo, more Bastiat. from the same text. 'But when the law, by means of its necessary agent, force, imposes upon men a regulation of labor, a method or a subject of education, a religious faith or creed — then the law is no longer negative; it acts positively upon people. It substitutes the will of the legislator for their own wills; the initiative of the legislator for their own initiatives. When this happens, the people no longer need to discuss, to compare, to plan ahead; the law does all this for them. Intelligence becomes a useless prop for the people; they cease to be men; they lose their personality, their liberty, their property. '
Thu 15 May | tapiwa | Paulo, more in response to your question 'Present-day writers — especially those of the socialist school of thought — base their various theories upon one common hypothesis: They divide mankind into two parts. People in general — with the exception of the writer himself — form the first group. The writer, all alone, forms the second and most important group. Surely this is the weirdest and most conceited notion that ever entered a human brain! .... They have thought that persons, under the impulse of these two gifts (the principle of action in a man's heart, and a principle of discernment in his intellect), and , would fatally tend to ruin themselves. They assume that if the legislators left persons free to follow their own inclinations, they would arrive at atheism instead of religion, ignorance instead of knowledge, poverty instead of production and exchange. According to these writers, it is indeed fortunate that Heaven has bestowed upon certain men — governors and legislators — the exact opposite inclinations, not only for their own sake but also for the sake of the rest of the world! While mankind tends toward evil, the legislators yearn for good; while mankind advances toward darkness, the legislators aspire for enlightenment; while mankind is drawn toward vice, the legislators are attracted toward virtue. Since they have decided that this is the true state of affairs, they then demand the use of force [police] in order to substitute their own inclinations for those of the human race. ' I really recommend that you read the entire text, whether you agree with the man or not. http://bastiat.org/en/the_law.html
Thu 15 May | Paulo Caetano | > I really recommend that you read the entire text, whether > you agree with the man or not. I will, but my point was not to assume that legislators or rulers are wiser than the rest of the population. Nor do I place myself as the only-enlightened owner of the truth :) My point was that I see nothing wrong in the principle behind minimum wage, or progressive taxation, or public schools, nor in many of the socialist principles that are present in various legislations, esp. in Europe. IOW: - I like the fact that wellfare will pay me something when I get sick, and have to stay home for, say, 2 weeks. I hate it that dishonest people get declarations from dishonest doctors, and abuse this privilege. - I like the fact that the state provides an education for a symbolic fee. I hate the fact that the state has to support students who fail several years in a row, and make no attempts at improving. - I like the fact that a woman is allowed several months at home after giving birth, to spend with her newborn. And, actually, I've never seen reports of this one being abused. If we eliminate the socialist component from these legislatures, we'l be handing a well-deserved punishment to some (not all) of the system parasites, but we will also be unfairly punishing those that actually need a push. And those that, thanks to that push, actually improve their lives. Finally, this paragraph: 'While mankind tends toward evil, the legislators yearn for good; while mankind advances toward darkness, the legislators aspire for enlightenment; while mankind is drawn toward vice, the legislators are attracted toward virtue. ' shows why I believe we will never have a good political/economic system - the legislators (aka, those in power) are just like every other human being. And every system has the premiss that some positions should be occupied by extraordinary human beings, capable of putting the interests of the system (and, therefore, of society) before their own greed. This will never happen. Mankind is drawn toward vice, and so are the legislators - after all, they're only human ;) 'Suravye ninto manshima taishite (Peace favor your sword)' (Shienaran salute) 'Life is a dream from which we all must wake before we can dream again' (Amys, Aiel Wise One)
Thu 15 May | tapiwa | Paulo, yet some more Bastiat .... 'You say: 'There are persons who lack education,' and you turn to the law. But the law is not, in itself, a torch of learning which shines its light abroad. The law extends over a society where some persons have knowledge and others do not; where some citizens need to learn, and others can teach. In this matter of education, the law has only two alternatives: It can permit this transaction of teaching-and-learning to operate freely and without the use of force, or it can force human wills in this matter by taking from some of them enough to pay the teachers who are appointed by government to instruct others, without charge. But in this second case, the law commits legal plunder by violating liberty and property...... It would seem that socialists, however self-complacent, could not avoid seeing this monstrous legal plunder that results from such systems and such efforts. But what do the socialists do? They cleverly disguise this legal plunder from others - and even from themselves - under the seductive names of fraternity, unity, organization, and association. ... because we ask so little from the law - only justice - the socialists thereby assume that we reject fraternity, unity, organization, and association. The socialists brand us with the name individualist. But we assure the socialists that we repudiate only forced organization, not natural organization .... Socialism, like the ancient ideas from which it springs, confuses the distinction between government and society. As a result of this, every time we object to a thing being done by government, the socialists conclude that we object to its being done at all. We disapprove of state education. Then the socialists say that we are opposed to any education. We object to a state religion. Then the socialists say that we want no religion at all. We object to a state-enforced equality. Then they say that we are against equality. And so on, and so on. It is as if the socialists were to accuse us of not wanting persons to eat because we do not want the state to raise grain. '
Thu 15 May | And the horse you rode in on | tapiwa, do you actually have a brain of your own, or are you only capable of regurgitating what someone else says? Black Adder: 'Try to have an independent thought. I think thinking is so important. What do you think Baldrick?' Baldrick: 'I think thinking is so important, my lord!'
Fri 16 May | Baldrick | Horse, the answer is no - we've been here before. Ask him to think his arguments through and he'll just ignore you. In that sense, I'm sure he's Bella in disguise.
Fri 16 May | Paulo Caetano | > You say: 'There are persons who lack education,' and > you turn to the law. But the law is not, in itself, a torch of > learning which shines its light abroad (...)' Let's analyze the two principles in conflict here: 1. Everyone is entitled to a minimal education, in order to provide the basis for his self-support. The state shall provide it for those whose families cannot afford it. 2. The state is not responsible for its citizens' education. Education is a private matter of each family. Those who cannot afford it must go without it, or hope that some private individual or organization provides it for them. Sorry, but I will never agree with the second. You mention 'natural organization'. Does that mean it's OK to leave the sick and the old to die, because they can't pull their own weight anymore? That's a pattern in nature. I just don't happen to agree with it. > '(...)We disapprove of state education. Then the socialists > say that we are opposed to any education. (...)' Apparently, what you're suggesting is that there is no need for state-funded education, because we, society, as whole will provide for those in need. Unfortunately, history shows we have a miserable track record in this area. I don't defend state control. But I approve of state support to those who need it. And this is where the system shows its weakness - it's easily exploitable by those that don't actually need it. Still, that happens with other systems. Capitalism is a good thing - individual initiative, competition making sure the best one wins and everyone benefits, etc. Well, guess what? The system shows its weakness - it's easily exploitable by those that reach a place of power. Also, for the record, I believe the best we can have is a balance between capitalism and socialism (as economic systems), under democracy (as political system). Unfortunately, IMHO,the best we've been able to make, so far, is a mockery of it all. On a side note, in my previous post I mentioned the 'wisdom and enlightnment of the rulers'. Apparently, someone made a study about the workload of those elected for parlament in each EU country. I'm 'proud' to announce that my country, Portugal, has the lowest average of the lot. Our 'deputados' (what's the english word for the people elected for parlament?) work, on average, 87 days per year. -- 'Suravye ninto manshima taishite (Peace favor your sword)' (Shienaran salute) 'Life is a dream from which we all must wake before we can dream again' (Amys, Aiel Wise One)
Fri 16 May | Stephen Jones | Paulo, I am not sure of the dates but I doubt Bastiat was not saying that the state should not provide education for those that could not get it any other way. He was saying that he was opposed to compulsory state education. The question was a matter of fierce debate in 19th century France. Now I am all in favour of reusing code, but shouldn't we only be doing it where it is needed in the target program? Tapiwa's literary equivalent of 'rape and paste' is resulting in a bloated and sluggish line of argument.
Fri 16 May | Paulo Caetano | > I am not sure of the dates but I doubt Bastiat was not > saying that the state should not provide education for > those that could not get it any other way. He was saying > that he was opposed to compulsory state education. The > question was a matter of fierce debate in 19th century > France. Oops. My bad, then. I haven't read the text, yet. I'm hoping to do it over the weekend. I think I understand why the debate should be fierce - on the one hand, one wants to respect the individual's right not to have an education; OTOH, one wonders what reason there could be for such a decision. Add to that the fact that it's usually the parents deciding about their children education (as opposed to the individual deciding his own fate), and you have a pretty complex issue. Never really thought about it. So, to clarify my position - I approve of state support and regulation, to prevent the support from being abused. I don't aprove of state enforcement, although I admit there are some cases where I can't present a reasonable argument either way - e.g., should the parents be allowed to decide that their children will not go to any school, public or otherwise, therefore potentially jeopardizing the kids' chance to earn a living? Naturally, there's no objection about the parents saying 'My kids will not go to public school, I'll put them in a private school'. -- 'Suravye ninto manshima taishite (Peace favor your sword)' (Shienaran salute) 'Life is a dream from which we all must wake before we can dream again' (Amys, Aiel Wise One)
Fri 16 May | Simon Lucy | Hmmm confusing society and government. Its in society's interest that every member is educated to the level that they can manage and that that education is fair and well organised. It also happens to coincide with the individual's interest. Modern Government is for the provision of managing resources it should not be about preserving the powers of the few or the economically advantaged. Having a well educated populace in a society where resources are controlled using the currency of taxation according to income and consumption it is as much to the advantage of those that are rich as it is to those that are materially poor. Having a poor or restricted education system competing with an indepentant education system perpetuates a class system. Having an education system which doesn't educate fairly and to the best of its resources cripples that society from developing. If you want a selfish proto-capitalist reason for educating everyone then consider that the higher the proportion of educated and employed members of society the lower the proportion of tax that the higher earning members will pay (under current systems).
Fri 16 May | Simon Lucy | Two other things popped up at me. 1. The British Car Industry failed because it wasn't good enough. To a degree this was true, though the reasons for the failure were more about management and investment than they were people going on strike. By and large the strikes of the 60's and 70's were all of the 'compensate us for a crap working environment and for lousy targets'. The Japanese imports were actually just as bad as the local cars at the equivalent model level. We ended up with too much choice and the local management failed partly because of anti-competitive practices in the way cars were supplied (still are). 2. The Southern Korean economy blossomed because it embraced capitalism. Well kind of, but its a very particular form of capitalism. Much as Japanese post war rebuilding was around the same mercantile families as before the war, so Korea built its economy around the chaebol families. There are a great many other companies around them but they are all enmeshed in a subordinate web. Korean capitalism has been less about competition than price rigging between the chaebol. That has changed over time and things are less certain now (jailing members of the families in the numerous political funding scandals of the 90's for example). Samsung stepped out of line when it began selling RAM cheap at the beginning of the 90's the other families refused to talk and cooperate for a while after that. There ain't no one system of anything.
Fri 16 May | Stephen Jones | The reasons for the collapse of the British car industry are various, but I can tell you that 'not good enough' was the reason for the collapse of the British Motorcycle industry. This 'not good enough' was not the result of workers or management not caring; it was the result of them not caring about the right things. First of all the market; the motorcycle was in the 50's the skilled working classes mode of transportation; they were ton up boys as teenagers, had the girlfriend/wife as pillion later on, and then got a sidecar for the kids. Increased prosperity by the 60's meant that many of them could afford cars. So the old market was dying but the market that replaced it was that of young kids and students. And they either were into bikes and wanted the fastest which were Japanese two-strokes, or weren't into bikes and just wanted cheap transport, which they got initially from Italian scooters and later from Japanese small bikes. Now the Britiish motorcycle industry turned up their nose at this market. They remarked that the scooters were toys and that the Japanese two-strokes were as stable as a jelly on meths. And the only bikes in the running in racing were British or Italian. True, but they failed twice over. The kid on a provisional license didn't care how fast the machines that won the TT were; he could only drive a machine up to 250 c.c. and the British machines at that category were only fit for mowing the lawn. The secretary going to the office, or the student going to college did not want to spend three evenings a week taking the engine apart in the back yard. He just wanted to go from A to B with no problem, and that was precisely what the Honda 50, Honda 90, and Honda 175CT allowed him to do. And the reputation that Honda built up from that meant that people started to buy the larger Hondas when they came out because they wouldn't be in the worshop five months a year, as the last Triumph Bonnevilles and Norton's were after they increased the bore to try and get more speed than the design was capable of. (One good thing incidentally about the implosion of the British motorcycle industry in the mid- 70's was that the redundant designers were all snapped up by Japanese firms so that in a few years the Jap bikes were handling as well as the British bikes ever did). To sum this up more generally, the Japanese succeed because they build what the customer wants, the Germans succeed because the customer wants what they build, and the British failed because they built what the engineers or directors wanted.
Fri 16 May | tapiwa | ::the Apology:: Stephen:: 'am not sure of the dates but I doubt Bastiat was not saying that the state should not provide education for those that could not get it any other way.' That is exactly what he was saying. He was totally opposed to the state provision of anything, including education. Before you accuse me of 'rape and paste', I suggest that you read a couple of works by Bastiat. Horse:: 'do you actually have a brain of your own, or are you only capable of regurgitating what someone else says?' I do have a brain of my own. I could have summed up the arguments in my own words. Hell, I would have approached the debate from a different angle. One thing I wanted to highlight though, was the fact that this really is an old discussion. Folk have been arguing for and against protectionism for centuries. The texts I quoted were written over 150 years ago. Even then, industries argued for protection, using the same arguments that Techies are using today.... labour cheaper in XYZ country. Not fair. Can't compete. Impose tarriffs for the good of the country. YEAH RIGHT! Baldrick:: 'Ask him to think his arguments through and he'll just ignore you. ' So far, all of you have attacked my posts, not my logic. Please show some error in my assumptions or the logic leading me to the conclusions I make. Paulo:: Everyone is entitled to a minimal education, in order to provide the basis for his self-support. The state shall provide it for those whose families cannot afford it. Two questions arise here. 1. What is minimal education? Who determines what it is. 3rd Grade? 7th Grade? High school diploma? University? 2. Where is the state going to get the money to pay for this? Taxes? This is the state taking my money, via taxes, at gunpoint, and deciding what is in the best interests of society. What gives them that right. Paulo:: 'Does that mean it's OK to leave the sick and the old to die, because they can't pull their own weight anymore?' Not at all. There are those who are more compassionate than others. They will take care of the elderly. I was born in Africa. I still have elderly family there. With no STATE social service, they are still taken care of. Have faith in the power of the extended family, and in man's compassion. Simon:: 'If you want a selfish proto-capitalist reason for educating everyone then consider that the higher the proportion of educated and employed members of society the lower the proportion of tax that the higher earning members will pay' I am not convinced that there is a link between the number of taxpayers, their incomes, and the overall tax burden. Your assumption is that it costs X to run government, where X is a fixed number. I would argue that Govt tends to expand to fill the available tax resources, and then some. Taxes today are higher, both in $$ amount, but also proportionately than they were 50 years ago, despite a widening tax base, and higher incomes. I am personally convinced that education is a good thing. However, it is not the only thing. Zimbabwe has the most educated population in Africa, but look at them now. Having said that, companies have been investing in education programs in Africa for years, and funding scholarships to study abroad, because (1)they see the value of an educated population and (2)those benefits accrue directly to them via increase productivity etc. Just don't make me pay for it (via taxes) if I don't see the value in it. Tapiwa's argument in a nutshell..... If we as individuals decide to specialize and trade our speciality for all the other goods we need, what right has government to impose a tax on our transacting with individuals who live in a different geographic region? Taxes or tarriffs of any sort, is basically the government telling society that they can take societies money, and spend it better on society than society can spend it on itself. Now I have a problem with this. I think I alone know what is best for me. Sometimes I learn the hard way, but the feedback is immediate, and so is my ability to change. Forcing people to pay for my next Big Idea as a politician is wrong. No industry has a right to survival. No firm has a right to eternal profit. Each must earn their keep by providing value to customers. We cannot have some politician deciding what industries should be supported against foreign or indeed Technical competition. Just imagine how different the world would be if congress had passed a law, adding a tax on cars, to create a fairer competition with the horse buggy industry. Hell, decree that no car can have an engine greater than 8h.p. Why?? To protect the jobs of all those involved in the buggy making, and horse maintenance industry.
Fri 16 May | Simon Lucy | Ummm well tapiwa you seem to proving the point that if there's an alternate view you'll ignore it anyway. The US tax system is probably unique and probably the strangest that's ever existed and I admit it wasn't the US system of which I was thinking. The US system suffers from having a multiply tiered tax system with a proportionately low means of controlling those that create the taxes. Its a federal system which sets one state up against another and its a system which outwardly revolts against 'socialism' (though not one tenth of one percent of the population could give a definition of it), yet maintains a last resource welfare system which is more expensive and less effective than any 'socialised' alternative. Tax is not about the 'government' knowing more than you about spending your own money. The government is not separate to you, you are part of it. If you don't feel that you belong to society then you naturally enough are able to leave it, not contributing to it if you remain though seems churlish.
Fri 16 May | Paulo Caetano | > Two questions arise here. > 1. What is minimal education? Who determines what it is. > 3rd Grade? 7th Grade? High school diploma? University? I guess a good indicator would be to look at the job market's most common requirements, and then start working from there. > 2. Where is the state going to get the money to pay for > this? Taxes? This is the state taking my money, via taxes, > at gunpoint, and deciding what is in the best interests of > society. What gives them that right. I believe Simon's last paragraph sums up my opinion quite nicely :) > Have faith in the power of the extended family, and in > man's compassion. Maybe this is one of the main differences between us - I have very little faith in man's compassion. In Portugal, we have quite a few villages with less than 10-20 people, all of them elderly, most of them with extremely low income. The younger ones left for other places, and often other countries. A few years ago, the public bus company (picture a state-run Greyhound) went private. A few months later, the first thing the new owners did was shut down the unprofitable routes. Perfect business sense, naturally. Of course, now some of these villages are truly isolated, with no means of transport other than calling a taxi, which is prohibitively expensive for the majority. What is the solution here? I don't know. But I do know that I wouldn't mind if some of my taxes would go to make sure these people could have some decent mobility. Mind you, the train company, which is still state-owned, has been doing exactly the same thing, with the same disregard for people's needs. So much for the state's social awareness. > No industry has a right to survival. No firm has a right to > eternal profit. Another portuguese example. The state builds bridges, and highways. However, the state does not wish to manage them, preferring to make deals with private companies, who are then responsible for said management (e.g., repairs), and receive the income from tolls. However, all the contracts include a minimum traffic clause. IOW, if the bridge/highway doesn't have minimum traffic of x cars per year, the state pays the difference. I don't know how it happens in other countries, but this is common practice in Portugal. And is seen a normal procedure. Well, if this is a normal procedure, and if it's a sensible measure, then I'd like some of that guaranteed minimum profit, too, if you don't mind. My point is the guaranteed eternal profit won't go away, because the states and some corporations have an extremely cozy relationship. And you can liberalize as much as you want - nothing will make this relationship go. -- 'Suravye ninto manshima taishite (Peace favor your sword)' (Shienaran salute) 'Life is a dream from which we all must wake before we can dream again' (Amys, Aiel Wise One)
Fri 16 May | Just me (Sir to you) | Think of a society as a superorganism that regulates the individuals to collectively transcend the local optimum of individual maximisation. Just as your body is composed of individual cells, the collective is capable of more than the constituants. How does your unbound capitalist anarchy prevent a total pilage and burn decline of the commons scenario?
Fri 16 May | Baldrick | 'churlish' is the right word. Just like a particularly precocious spoilt child: 'Waah, why can't I have sweets, I want sweets, what gives you the right to tell me not to eat sweets? It's not fair! The big boys say I should be allowed more sweets!' 'Waah, I don't like paying tax. What gives you the right to take my money. It's not fair! Bastiat says I can have more sweets!' Grow up already.
Fri 16 May | tapiwa | 'My point is the guaranteed eternal profit won't go away, because the states and some corporations have an extremely cozy relationship. ' -- We can't give up the fight. Many things/ideas that seemed insurmountable have now been condemned to the anals of history. 'Just like a particularly precocious spoilt child: ' -- Baldrik, what is your attitude towards drugs. And pornography? Do you think some middle aged white men in a house on a hill should determine for you and the other 250m Americans what you can and cannot smoke/drink?? 'Think of a society as a superorganism that regulates the individuals to collectively transcend the local optimum of individual maximisation. ' -- how big is this society?? Is it just me, myself and I? Is it the good old US of A? Is it the entire planet? In this said superorganism, who is supposed to be the brain? Dubya?? 'The government is not separate to you, you are part of it. ' -- What is the government? How many folk here truly identify with their governments. Government is the great fiction through which everybody endeavors to live at the expense of everybody else. 'If you don't feel that you belong to society then you naturally enough are able to leave it,' -- I can't leave. Immigration policies serve governments. You can either put up with their shit, or put up with their shit. Why do you think it was so difficult to travel outside the Soviet Union during the height of communism? I personally that the one way to get rid of despotic regimes is to allow free movement of capital, Human Capital. Don't give countries a monopoly on their citizens. -- I can't refuse to pay taxes and forfeit state privileges. They do me in for tax evasion. The IRS has so much power it is scary. The US and UK are always putting pressure on tax havens to shut down, or make it more difficult for folk to 'not pay taxes'. 'job market's most common requirements' -- you have got to do better than this. This is so vague, as to allow any interpretation. I could get into power and decree, that as long as one can talk, then one is educated enough. Next dude would decree that every man woman and child shall earn a Phd..... Back to the original question... If we are all part of one society, why should we need protection from programmers in India or China? Does our society only extend as far as the continental US? Why?
Fri 16 May | David Clayworth | Of course you can leave, tapiwa. If you can get a job, immigrating to Canada is easy. I'd be very surprised if Saudi, India, Korea, most of Latin America or Africa turned away a computer prefessional with a job. How about the Caymens? Indonesia? Or a hundred other places where professionals are in demand? Or is it possible that our current from of government is the worst, except for all the others?
Fri 16 May | Stephen Jones | Tapiwa, The reason I am acccusing you of rape and paste, is that your wholesale quotes from Bastiat actually obscure what your argument is. Indeed I think you are trying to argue at least three different propositions. Arguing against tariffs as a protectionist measure you then go on to argue against them as a fiscal measure, which is a very different matter. You can be quite against protectionism but in favour of indirect taxation on consumer goods. You can even be in favour of import tariffs when they are a way of stopping much needed foreign exchange from leaving the country. This, and not the protection of the Bangladeshi computer industry, was the reason P. J. O'Rourke had so much trouble bringing in his laptop to Bangla Desh a few years back. Now the passion behind your attack against taxationt reminds me of your passion against lawyers in an earlier post. Could it be that you lost your hundred grand in lawyers fees fighting the Inland Revenue?
Fri 16 May | Baldrick | tapiwa, to answer your question, I think pornography is great. It seems like a lot of the population here (the UK, since you ask) think so too, because about three years ago US-style 'hardcore' - as certified R18 over here - was legalised in licensed outlets. Why? Well, maybe it was popular opinion - that society thing, deciding what is acceptable. You see, those nasty men who conspire to stop you doing just what you want occasionally let you, as 'tapiwa the one conspired against by the evils of tax and government', do what you want to. So grow up. Maybe when they make sugar-free health giving sweets, us grownups will let you have some.
Fri 16 May | Alyosha` | Stephen Jones is right when he points out that tapiwa is arguing three different propositions. I agree with his first proposition -- that tariffs are a bad idea -- but for completely different reasons. Tapiwa (as far as I can tell) argues that tariffs are bad because taxation in general is an evil -- as he says, 'This is the state taking my money, via taxes, at gunpoint, and deciding what is in the best interests of society. What gives them that right?' This is the second proposition -- the libertarian, minarchist, or anarchist position, that taxation is theft. I disagree with this proposition. The third proposition is related to the second, moving from property to human liberty -- hence the question about drugs, pornography, and other paternalistic regulations governments tend to impose on their citizens. But this is only related tangentally, so I'll ignore it. Back to the second proposition -- so, what gives government the right of taxation? Forgive me for a moment if I bring up a FOURTH point -- and that is that the world's best minds have yet to agree where 'rights' ultimately arise. Liberal philosophers of several centuries ago stated that rights stem from the fact of being a human; before them the clerics and the Church argued that man's rights are given by God himself. Nihilists will say that rights are a fiction, and socialists would say that rights are granted by government according to the will and consent of the majority of the governed. Seeing as the greatest minds cannot agree on this more basic question, I doubt I could convince a devoted libertarian or anarchist of the legitimacy of taxation, but I'll try. One might say that because I earned a dollar today, this dollar entire belongs to me and no one else. But this is naive. After all, who coins money in the first place? Government does. Who regulates the production of new currency? Government does. Who ensures that the dollar today will be worth the same tomorrow? Government does. Who provides the infrastructure to enforce legal contracts made between private parties, so that trade can continue in a fair and equitable manner? Government does. Who has the authority to regulate powerful corporations so that they cannot overrun the rights of the private individual? Once again, government does. The very fact that there exists an economic system that allows you to earn a dollar in the first place, is due to government. I would much rather earn a dollar and keep 60 cents of it than earn a nickel and keep all of it. Without [good] government this is exactly what will happen. Another function of government is to distribute the cost of items which everyone benefits from but no one actually 'buys'. Even if you don't have kids, it makes sense for you to contribute to the education of your neighbor's children, that in the future a more well-educated populace will be more law-abiding, more industrious and provide a better economy which will in the long run be to your benefit. Similarly with gas taxes, which fund roads and public transportation, and income taxes which fund the common defense from foreign aggressors. It is churlish -- as others have pointed out -- to refuse to pay for these simply because, 'I never consented to it, don't ask me to pay for it'. And what about welfare? 'Have faith in man's compassion'. I got a good chuckle out of that one, tapiwa. Those that are compassionate are already compassionate. Those that aren't compassionate are demanding that the State stop robbing them of their hard-earned money and spending it on someone else's geriatric grandma. I swear there must be a huge delusion that as soon as Big Government stops making us take care of the elderly and sick, there will suddenly be a lot more money available for taking care of the elderly and sick. I do not claim that our current government is perfect, and there isn't waste and misspent dollars -- but I will never say that the government has no right taxing me.
Sat 17 May | tapiwa | Stephen... I agree with you, this discussion has ended up with me arguing on many fronts. Having said that, the central argument remains. Govt, and by extention, the law, is just the 'collective organisation of the individual's right to defence'. This being defence of the the self, and one's property. My problem is when this collective, which we have empowered with the use of violence (police/prisons/fines etc) begins to make other decisions on our behalf. - Why should govt decide who trades or does not? (licences) - Why should govt decide who receives free money? (welfare) - Why should govt decide what forms of entertainment we should be allowed? (censorship) - Why should govt decide which countries we can buy our goods (protectionism and tarriffs) - Why should govt decide which industries survive despite their cost being greater than their benefit to society? (subsidies) ... I could go on. You call me a libertarian anarchist. You do not have faith in man's ability to organize himself without coercion. Yet you profess the utmost faith in a bunch of men's ability to make all these far reaching decisions for you. I would rather take my chances with the neighbours than with the govt. We all have different values and morals. Plato argued for all kids to be raised by the state, and their career paths decided for them. We laugh at this, but we ourselves are not too far off. In the UK, they lock up parents of truant kids! In some societies, the youngest child is obligated to never leave, but stay at home and look after the parents. We say this is barbaric, or uncultured, but then complain about the lonely elderly in our communities. In some societies, kids are given alcohol from an early age. (red wine anyone). In the US, you are not trusted to drink until you are 21. You can vote for a govt though. And you can die for your country. You are even allowed to drive, but no, you can't drink. A friend of mine listed what the 'basics' of any household should be. ('twas a discussion about what at a minimum, the govt should provide single mothers with in a council flat). Amongst the things which she listed, were a microwave, and a radio(tuner). I have neither. Not because I can't afford them, but because I have no need for them. That is my biggest fear regarding big govt. They really do not know best. I am not convinced they have my interests at heart either. Govt for example, decides that marriage is a good thing, so they tax married couples less. They decide that kids are a good thing, so you get child tax credits. They also decide that buying KFC is good, as long as you eat it at home, so KFC pays no VAT on takeaway (basic foodstuff), but as soon as you eat it on the premises it becomes a luxury, so KFC must pay VAT. Govt also decides that Castro is a bad person, so you are not allowed to smoke Cuban cigars. They also decide that there are too many cabs in pick-a-city, and so you can't just buy a cab and start working. You need a licence, join the queue. Essentially, all I am saying is that we all have different ideas on what constitutes an ideal society. - Does the fact that the majority think it is one way give us the right to impose that will on all. (moral legislation) - Furthermore, does our desire for the next-big-art-fad give us a right to get the entire populace to pay for a museum via taxes? (pork barrelling) - Does our desire for guaranteed employment and profits give us the right to demand that the rest pay for it? (tarriffs and subsidies). I am not convinced this is so. So no, I do not support protectionsm. And no, I am not a fair weather capitalist. No I do not trust the govt. Yes I do have faith in man. The govt after all is composed of men. The fact that they have this govt moniker, does not give them some wisdom beyond all others. If you do not trust man, how then can you not only make an exception with these legislators, but also empower them to use physical violence to enforce their decisions?
Sat 17 May | Stephen Jones | Tapiwa, Very clear and much better without the long passages from Bastiat. What people disagree with is your initial premise: ---'This being defence of the the self, and one's property.' ---- You are presuming that property is a right prior to social organization and its extensions, government and law, and this is very far from being universally agreed. You may have heard that Americans have a constituional right to 'the pursuit of happiness'. It is often said that this is an early example of American hedonism but in fact the inclusion was the result of a long debate: a debate over whether private property should be a constitutional right. This was strongly opposed in many quarters and the 'pursuit of happiness' was included as a compromise, on the grounds that the destitute are not normally very happy. To take a more modern example in the Spanish Constituion of 1978 the right to propery is dependent on its social purpose. Now there is one other thing I would like to say and that is that by presenting an extreme view you are alienating many potential supporters. There is an old saying that politics is like a train; some people may want to get off earlier in the journey than you do, but you don't charter separate trains if you are all going in the same direction. Plenty of us are of the opinion that government restirictions are often unjustified, and that regulation all to often has exactly the opposite effect to the intended, but do not share your eighteenth century view of the sanctity of property and the evil of governance.
Sat 17 May | T. Norman | Suppose we dismantle government and revoke all laws. You think you'll have any more freedom in the long run? Sooner or later, a group will sieze power and impose themselves as a government. And they will extract taxes from you, in the form of labor, goods or cash, whether you like it or not. If a government does not use tools of enforcement such as prisons and police, it very soon will no longer exist, and will be replaced by someone else who will sieze power and enforce their wills in perhaps more vicious ways. Government and taxation is an inescapable condition of human society, whether you are in a billion-person nation or a tiny Pacific island. Even a 50-person tribe living in the Amazon jungle will have established its own rules of behavior, taxation, and punishment. Government is inevitable, so our only option is to do what we can to establish the best government available, including aiming to select those who do have better wisdom than the common man to serve in governmental positions. Unfortunately, one of the reasons why we still get morons in government is that there are many morons voting them into power.
Sat 17 May | tapiwa | T. Norman don't get me wrong. I am not advocating for the dismantlement of this institution called govt. I agree, you probably need someone to enforce contracts, prevent/punish theft/injury to property and the self. I am however saying that I am opposed to the tendency of special interest groups to use this instrument of the law to support their pet cause, or to protect their industry or even to impose their sense of morality and their values on the rest of the population. The very same folk, the sunshine capitalists, who argue for tarriffs, or controls to the numbers of HB1 visas, are the first to rally for the call to fight against Communism. Ironic huh? This is where the the whole double standards thread came. ps. they are probably ranting on a made in Taiwan laptop, and drive a car that burn arab or nigerian fuel. Their clothes were probably made in Malaysia. They reap the benefits of trade, but when it seems to threaten their little niche, they want to turn to the law for protection. I think this is a natural human tendency, and the only way to prevent it is to limit the extent to which the law can be applied. Today we said everyone with a gun should register it. Tomorrow some senator wants to limit the availabilty of digital tools that allow you to crack protection. The day after that, they will say you need a special permit to own a computer that can generate code. All in the name of protecting us from ourselves.
Sat 17 May | Baldrick | Not being funny tapiwa, but you have just backtracked quite a bit in that post. You'd make a great politicain - I'd go so far as to say you're the next Tony.
Sat 17 May | tapiwa | baldrik explain. Not sure where I am supposed to have backtracked. I am still against paying taxes to support the single mothers, or the elderly or any other 'poor' part of society. I am still opposed to govt education and govt health services. I am still opposed to favoured industries. I still believe that man is born with his rights, and they are not a result of a generous govt. I could go on ...
Sat 17 May | tapiwa | 'A wise and frugal government, which shall restrain men from injuring one another, which shall leave them otherwise free to regulate their own pursuits of industry and improvement, and shall not take from the mouth of labor the bread it has earned. This is the sum of good government, and this is necessary to close the circle of our felicity.' -- Thomas Jefferson, 1801 'A democracy cannot exist as a permanent form of government. It can only exist until the voters discover that they can vote themselves money from the Public Treasury. From that moment on, the majority always votes for the candidate promising the most benefits from the Public Treasury with the result that a democracy always collapses over loose fiscal policy always followed by dictatorship.' -- Alexander Fraser Tyler The Decline and Fall of the Athenian Republic
Sat 17 May | Alyosha` | Tapiwa, I can't figure out if you have faith in the common man or not. You say you do, but then you quote such cynical passages which indicate that the common man, if left to his own devices, will eventually vote more and more money for himself out of the public treasury ... As Churchill said, democracy is the absolute worst form of government -- with the possible exception of all the other forms of government that have ever been tried. To answer your question, tapiwa -- no, I don't have much faith in the common man. I believe leadership is necessary in government. Not everyone can be a good, wise, and just leader. There is still a lot of common ground between us -- although I hardly see providing for the general welfare (as in supporting the elderly, disabled, and impoverished) or the education of the populace as an 'unnecessary' part of government -- I too oppose wasteful spending when it occurs. In general, though, the US does pretty well -- it has one of the lowest tax rates of any industrialized nation expressed as a percentage of its GDP. But ask me some time about Sound Transit here in Seattle, or the waste that occurs in the defense sector, or the national deficit, or the fiscal irresponsibility of the tax-cut-and-spend 'conservatives' of the current administration, and you'll hear an earful from me.
Sat 17 May | Stephen Jones | Are you sure about the low tax rate in the US? I thought this was only because a large a proportion of tax came from State taxes and tney were not taken into the equation. If you reckon that health care has to be paid for separately in the States, whereas in most of the industrial nations it is free, then I am not at all sure that the US is a low tax economy.
Sat 17 May | Alyosha` | That's correct ... I was referring just to taxation on the federal level. Here in Washington, we don't have a state income tax although we have a fairly high (by US standards) sales tax to make up for it. In Oregon the situation is reversed -- no sales tax, but an income tax. Sales and state income taxes are usually a fraction of the federal income tax paid each year by the average citizen, however. The US is a low-tax country in part because it doesn't have a universal health care system, although Social Security and Medicare consume about two-fifths of the US federal budget between them (another fifth goes to the military, a third is split among a whole list of discretionary programs, and about 10% to pay down the interest on the debt).
Sat 17 May | Baldrick | tapiwa, I gather you still have a right to get cancer. Because you can. Don't expect us to help you.
Sun 18 May | Simon Lucy | Actually, Alyosha, I think you'll find the US has one of the highest personal tax regimes in the industrialised world, depends a little on the State, but on average its higher than even somewhere like Germany. As for inalienable human rights. It is one of the ironies that people claim that any human being has a set of rights that they inherit simply because they are born. There's a lot of pushing and tugging because one set of individuals in this or that country is perceived by some in another as having those rights trammeled or suppressed. In truth though we have whatever rights we have by virtue of the society we live within. There is a set of Human Rights codified but of all the signatories only Sweden and Denmark (I think) actually accept the entire screed without exception. Even such constitutions as the US has, defined its rights in terms of a citizenship evidenced by property and in the first place gender. There is no absolute set of rights to which anyone could lay claim.
Sun 18 May | T. Norman | What Stephen was pointing out is that Americans pay so much for health care, that it is an illusion that Americans pay lower taxes than other developed countries. A good health plan in America for a single person typically costs about $5000/year. Normally employers pay most of that cost, not including it in your salary -- 80% seems to be a common proportion. So let's take somebody with a salary listed as $40K. Employer pays $4000 and the person pays $1000 for the health plan. So effectively they have a $44K compensation package (assuming no other benefits and bonuses), with $39K left after paying for health care, from which state and federal taxes will be deducted. The health care amounts to 5/44 = 11.4% of their compensation. Add that to what they pay in federal and state tax, and they may be paying as high a percentage as they do in European countries with nationalized health care. The difference being that in America if you're unemployed or your employer doesn't provide health benefits, you're screwed. This is not to say that a nationalized health care system is better ... I am just making a pure dollars and cents comparison regarding taxation.
Sun 18 May | T. Norman | 'It is one of the ironies that people claim that any human being has a set of rights that they inherit simply because they are born.' I don't find it ironic that there are rights that are endowed upon birth. Certainly being born is sufficient to have the right not to have your eyes gouged out, and the right not to be raped. The debate comes from some rights that are granted by the state but are spoken of as natural rights.
Sun 18 May | tapiwa | T. Norman:: 'Tapiwa, I can't figure out if you have faith in the common man or not. You say you do, but then you quote such cynical passages which indicate that the common man, if left to his own devices, will eventually vote more and more money for himself out of the public treasury ...' I am with you on this one. There is a tendency in man to better himself at the expense of others, if he can get away with it. Nations do the same too. So we have the law says you cannot steal from T. Norman. If you do, then we shall throw you in prison. Armed with these instruments of violence though, the legislators go on to 'steal' from you and I, to pay for the latest pork barrell project in pick-a-state. The very instrument that is supposed to protect me from fellow man is used by other men to 'steal' from me, or by the same men to impose their moral values on me. What recourse do I have? 'Sometimes it is said that man cannot be trusted with the government of himself. Can he, then, be trusted with the government of others? Or have we found angels in the forms of kings to govern him? Let history answer this question.' -- Thomas Jefferson, First Inaugural Address 'People who relieve others of their money with guns are called robbers. It does not alter the immorality of the act when the income transfer is carried out by government.' -- Cal Thomas 'If evangelical Christians demand that Playboy magazines be removed from store shelves, that is not censorship. Others are free to demand, just as forcefully that Playboy be kept on the shelves. And merchants can reject the evangelical's demands. But when a government sends in police to close down bookstores, arrest musicians, artists and photographers, burn video tapes, or shut down computer networks, that is censorship.' -- Jarret B Wolstein
Sun 18 May | T. Norman | Tapiwa: It wasn't me who said that part about 'you quote such cynical passages,' it was Alyosha...
Sun 18 May | tapiwa | T. Norman. My bad. I apologize. Should double check my sources :)
Prince2 Tools | Wed 14 May | Simon Lucy
Ive googled and spelunked around, has anyone a favourite/ useful/good set of or a single toolkit for managing Prince2 projects?
Wed 14 May | The PM Formerly Known As Prince | Ha, ha, ha, ha, ha.... Sob ...... If anyone can substantively demonstrate that there are enough successful Prince2 projects to justify writing tools, why, I might even be tempted to do it myself.
Wed 14 May | Joel Spolsky | I've never heard of Prince2... what is it and what is your opinion of it?
Wed 14 May | A Software Build Guy | Joel, It appears to be a project process used by UK and European governments http://www.prince2.com/whatisp2.html#process
Thu 15 May | James | There used to be a Prince2 toolkit called 'Launchpad' written by a company called Spoce - can be found at www.spoce.com (actually still is - I've just looked) It's a set of templated project forms to be used when running a Prince2 project. Prince is the UK Govt's defacto project management methodology - stands for Projects IN Controlled Environments and is used mainly in the public sector. It has an offical website http://www.prince2.org.uk/ I've used it many times and it's basically outlines a common sense approach to project management. I've never however seen it work on anything under about a £10Million pound project as anyone trying to apply it to smaller jobs tends to lose the will to live very quickly.....
Thu 15 May | Simon Lucy | I'm asking because I've been approached with a proposal to develop them and up to now I've always associated Prince2 with large scale projects and either government or government associated projects. I've noticed though that it is increasingly appearing in job requirements.
Thu 15 May | Joe AA. | Oh wonderful... yet another template based brain dead mythology for project development.
Thu 15 May | Gwyn | 'I've never heard of Prince 2' - Joel Spolsky Wow!
Thu 15 May | Taffy | I worked in an organisation in the UK which tried to get all project managers qualified in Prince2. This organisation even created a department called Prince. Most of us attended the course and some of us even passed the tests but Prince never really caught on. I think that was more to do with the commitment of the people who had been sent on the course. The Prince department was renamed and after that it became known as the department “formerly known as Prince”. It is a very thorough project management methodology but it seems to be best suited for large projects. I think there was a Prince2 package called Princess, but I have never seen it. I have often thought that a Prince2 groupware or workflow system would be a nice project.
Thu 15 May | Yanwoo | Prince 2 is a fantastic theory - but that's pretty much all it is. In reality it's very rarely the right methodology to choose IMHO. There is sooooo much overhead associated with using it, even implemented partially, with a paper trail that could account for a small rainforest. On the very biggest project there may be a justification to use it - but even on these projects it's success rate is limited (but maybe that's because it's mostly used in the Public Sector . . .). Increasingly, it's rigid framework is less applicable to modern business (IT) projects.
Thu 15 May | Craig | When is someone going to release 'the project management methodology formerly known as Prince?'
Thu 15 May | Stephen Jones | Prince2 was adopted by the UK government in 1989. Is the fact that it has not succeeded in getting a large IT project completed on time or in budget since then just a coincidence?
Sun 18 May | Nev | The most useful part of Prince2 is the product breakdown structure that focuses the PM on deliverables rather than the activities that go to make up the deliverables. Very useful for helping participants to focus on outcomes. We all know how much some IT folks love to focus on the means rather than the ends. The other benefit is that helps to stop/rectify unsuccessful projects early in the life cycle. The use of an accountable project board helps shift accountability back towards management rather than the hapless PM who often takes the blame for senior management ineptitude. By the way, how many of you critics have delivered large projects on time and to budget. If you have, was it coincidence or did your PM use some type of methodology. Maybe, it was something like PRINCE2 and you didn't know it - it's basically a collection of best practices that have been proved to work in the real world - not just the Public Service in the UK. Just don't use it out of the box without tailoring. Such mindless activity guarantees huge paper trails and project failure. Tailor it to the circumstances intelligently and it will HELP make your project work.
UI Mockups | Wed 14 May | Jason
Any suggestions on tools to do UI mockups with? Im mostly interested in doing static drawings, not interactive mockups. Visio seems to be the tool of choice around here, but I dont find it very easy to work with.
Wed 14 May | Simon Lucy | Ummm You can build the real thing as fast as creating mockups, even if there isn't anything behind the controls.
Wed 14 May | Just me (Sir to you) | Photoshop? We have covered this before: For developers there are a lot of sound reasons not to make your screen mockups look too much like the finished product. A lot of the non-developer crowd will think that when you show them a 'lifelike' UI mockup from Visio, the app is nearly done. Photshop gives you the opportunity to make these babies look like what they truly are: sketches.
Wed 14 May | B# | I have to agree. It has the advantage of being done when approved. Years ago I tried visio and hated it... but that's me.
Wed 14 May | tapiwa | A bit off topic. Beware of showing 'the real thing' UI mockups even with not active controls. A lot of users and PHBs associate this with time to completion.... 'he already has the program. Just needs to get a couple more functions working in the background. Another week or so, and we will be ready to ship!!'. Extremely aggressive deadline anyone? I would do rough sketches on paper. If you do have the real thing, capture the screen, and use photoshop waterpaint/crayon/etc filters to make it look less real, and more like the rough sketch that it really is.
Wed 14 May | tapiwa | Sir... this is quite freaky. When I started typing, your post was not there. When I posted, it was, and very similar train of thought. I wonder whether this is a case of great minds think alike or fools seldom differ.
Wed 14 May | Just me (Sir to you) | Probably the latter ;-). BTW: does anyone have the perfect filter series for this?
Wed 14 May | Spam | This was on slashdot recently: http://developers.slashdot.org/developers/03/05/12/2142221.shtml?tid=185 It's more for web developers, but I imagine it could be easily used for apps as well. It's used to quickly mock up an interface on a pen-based system.
Wed 14 May | Danil | http://www.useit.com/alertbox/20030414.html 'With a paper prototype, you can user test early design ideas at an extremely low cost. Doing so lets you fix usability problems before you waste money implementing something that doesn't work.' -- Jacob Nielsen
Wed 14 May | j. | If your using the QT toolkit, go with QT designer.
Wed 14 May | Mike Gamerland | I agree with the folks who say stay away from the 'real ui.' While it is tempting, and in many cases not nearly as time consuming, it has several of drawbacks. However, if you address the drawbacks up front, you may find it easier in the long run. - It appears near completion so if they accept it, they can have it by Friday. Right? While annoying, you can explain this a merely 'graphics' at the start and control this idea. - People hate to ask you to change things you have completed. I know we all know users who have no problem with 'just do it again' but in a UI presentation, everyone should feel that asking you to change anything is not only accepted by expected. - People expect it to work. At a demo to a client, things were going great. So great they let her drive. She then put in bad data and the application did not edit for it. She then put in good data and the application did not process it. They then spent half the meeting discussing why the application was not working, when in fact there was none. Again, set expectations at the start of the meeting and you can use crayons. Don't and anything short of a production system will reflect poorly on the team. It's not reasonable, or fair, but it is life. And that beats the alternative.
Wed 14 May | Martha | I have found that a combination of Photoshop and Powerpoint work really well. I use Photoshop to get the window look and feel in the background. Then I use Powerpoint to fill in the content from screen to screen. Powerpoint is good for editing text quickly. Much quicker than remaking another screenshot in Photoshop. Also, Powerpoint gives a slight illusion of 'movement'. You can show where the user clicks, add notes, etc. My boss used a 100+ .ppt to 'demo' a project to his bosses. He was able to show the workflow design, which was all he needed at that point in the design process.
Wed 14 May | nobody you know | MS Excel. No form components just using cell-borders, text, background color. And text boxes for comments ('Here pops up employee search dialog')
Wed 14 May | Brent P. Newhall | Microsoft Word's drawing tools are adequate to this job, too. I love the idea of using PowerPoint, though; having a little animation to illustrate 'what will happen' can be remarkably useful.
Wed 14 May | one programmer's opinion | 'Any suggestions on tools to do UI mockups with? I'm mostly interested in doing static drawings, not interactive mockups.' My recommendation is: If you are looking for someone to provide you with a long and comprehensive list of software products that you can use to accomplish this task (static drawings) then I suggest you ask your question at the technical writing forum (techwhirl). Question: Why are you only interested in doing static drawings? Who is going to be the audience for your UI mockups? My advise is: the UI Mockup approach you take should be driven by the circumstances you find yourself in. For example: If I am doing an enhancement to an existing program, I normally do a 'this is how the real thing will look' UI mockup so the end user can provide me with feedback. Normally, I use a screen capturing program for this type of work and send the animated program to a specific end user via the company's email system. If the UI mockups are part of the discovery process (something that will be part of a project proposal or something that will be included in a detailed requirements document), I only provide screenshots with written commentary. If I (or someone else I was working with) was doing some type of formal presentation (i.e. for high level management), I would use Powerpoint.
Wed 14 May | Spaghetti Rustler | I have to second the 'crayons' idea. I've been in too many situations like people have already described, where you can't get the idea across that IT'S NOT A REAL PROGRAM. To the vast majority of people, if it looks like a program, it's a program. The two possible responses are (a) Why doesn't it work?, and (b) Look practically finished - when will it be ready? Tomorrow? If I were presenting to users or to my boss, I'd use actual crayons (my house is knee-deep in them). For executives, I'd use PowerPoint, and make it look like it was drawn in crayon. I'm not kidding. It's the only way to make them engage their brains - you have to slap non-technical people with a wet mackeral when you're making a subtle point to them. Actually, I was being sarcastic, but it may *be* a subtle point. To us, it's a no-brainer that a mock-up is just a pretty face with zero brains behind it. But what metaphor could the non-technical user be given to make this distinction clear? I suppose if they're literate enough, 'Potemkin village' might work. Maybe a 'prop' for the theatrical? A 'poser' for the young? A 'Milli-Vanilli' for the middle-aged?
Wed 14 May | Lee | I mostly do Web pages and I've found that Photoshop works best for me. If you link the layers correctly, its easy to move stuff around/change colors etc. In fact, I've pulled people into my office and tweaked stuff while they were standing over my shoulder. I must report though, that someone called complaining that the buttons didn't work on the jpg. I wish I was making that up.
Wed 14 May | andrew m | Small point: is it legal to kill grossly incompetent managers? And if not, why not? Seriously, any manager who can't understand the difference between a mock-up at the start of a project and a nearly finished product is not competent to manage a software project. They don't have to be able to do the code themselves, they just have to be able to understand what 'mock-up' actually means. As you can't legally kill them, the best bet is to replace them - either by owning the company so you can fire them or by moving to a company which actually hires competent people. I've heard rumours that such companies exist.
Wed 14 May | Mike Swieton | Andrew: I think it's similar to the case of the Canadian Geese that live by my house. Years ago they got on the endangered species list (or something, you can't kill them anyway), and never got off again. So they keep multiplying and multiplying and leaving ever-growing piles of sh*t in the community park. 8-} j/k!
Wed 14 May | T. Norman | If you use the same actual tool to produce the screens, so that it almost looks like the finished product even though it doesn't do anything, some people will believe the real thing is almost done. Any software project manager who believes that should be fired. But very often, the managers who see it are the sponsors of the project from the business side, and they may not have a clue about what it takes to develop software. So if you show them some actual VB or Delphi forms with fields and buttons (even though they don't function), they can't understand why the project is going to take six more months and cost them $2 million out of their budget. Unless they want and need an interactive prototype, if there are nontechnical managers looking at it who have the power to affect the success or failure or budget of the project, it can be dangerous to show them something that resembles the finished product. I use PowerPoint -- arranging lines, arrows, rectangles and words on a plain white background.
Wed 14 May | anonQAguy | Well, I've used powerpoint for this and it's worked ok. Used visio much more extensively for this purpose and it's a much better tool -- you can not only do page mockups but also site diagrams which often get quite large and they come out nicely on an E-size plotter. Never tried to do anything in PP that was big enough for a plotter. Anyway, my 'druthers would be to use a drawing tool like Dia that saves its file as a plain text file (it's xml), because then you can do diffs on it from the source control repository rather than trying to tell from one version of the binary *vsd file to another what changes were made. Would make change management easier for such artifacts. Of course, with VBA under both PP and Visio, I suppose one could write an exporter that could dump a drawing out to some structured text-based format for either of them. So far, though, I haven't had much luck getting good results with Dia, plus our UI folks aren't *nix - literate, so sticking them on a redhat box would vapor-lock them. Not trying to criticize here, but for the size systems we build, and the way we are with our clients, it would be completely unmanagable to think of doing pen & paper mockups. building them, maintaining them, and ensuring some degree of consistency across the mockups would just not be possible for us. Not sure how folks could ever make that happen successfully for non-trivial systems/sites.
Wed 14 May | Philo | Have you guys ever had a basement finished? The 'it looks done, why isn't it?' psychology is much deeper than you would expect. When we had our basement finished, the framing was done in a day. The wiring took two more days, then the drywall was up 48 hours after that. It then took two weeks before the job was done (tape drywall, fill, sand, paint, fill, sand, paint, sand, paint, sand, paint, lay padding, tape, lay carpet, install fixtures...) When that drywall was up you couldn't help but feel the contractor was 'almost done', yet timewise he was only 25% finished. Ditto on interfaces - I've seen a coworker design a UI mockup, and even knowing how much work there was to be done kept feeling like 'hey, we're well on our way', which is BS. If you're talking early 'use the interface to drive the design' type mockups, then I say whiteboard or easel and markers. You can really get what you need out of that, nobody objects to erasing large sections of design, and dammit, it FEELS like you're just starting. Now if you've got the data and business layers working and you need to fine-tune or tweak the UI, then go with photoshop, visio, powerpoint, etc. But I'm now firmly convinced that CAD tools shouldn't be anywhere near a UI design during the design phase. Philo
Wed 14 May | www.marktaw.com | I believe the idea of not showing a mockup that looks functional to the client was the subject of a JOS posting (q.v.). How about a grayed out version for things that don't work yet, gradually coloring them in as the start to work. As far as mockup tools... what are you doing the project in? What about sketches on a piece of paper, or Photoshop drawings?
Thu 15 May | Alyosha` | I haven't had any horrible experiences with showing demos, but maybe I just haven't been around the block enough. People seem to understand and believe me when I show them a demo and enumerate the items that have yet to be completed, concluding with a THERE IS STILL MUCH WORK LEFT TO DO message in upper-caps so they're sure to read it. Actually, why isn't it possible to leverage the visiblity of the UI more? When the project is behind and the developers are demoralized because of a lack of visible progress, why not spend more time on the UI initially to give people the subliminal impression that more work is being done than actually completed?
Thu 15 May | Just me (Sir to you) | I have tried the 'be very clear at the start of the meeting that this is just a mock-up' thing and enhanced it with repeting that 1.000 times throughout the meeting. It does not work. People see what to them looks like an almost finished product, and that is what they react to. I have not tried the 'grayed out' strategy that was mentioned. Could be another way of trying, but it runs the risk of reducing the expectation schedule to whatever was the surface area in the user interface. Suppose you have a wizard style impementation of some very hary batch processing type of system. You have 20 screens of setting up the parameters, which you do in implementation in a day or two, and then just that 'finish' button is grayed out. How are you going to explain that 'ungraying' this will now take another 6 months?
Thu 15 May | Larry | The best user driven UIs I've designed were done on a whiteboard with me starting the process, and drawing the page as I saw fit. The users then stood in turn, modified the page, argued their points of view and then agreed an acceptable solution. I copied the design to paper, and we moved onto the next page. The project sponser could flex their muscles in deciding the final layout, everybody had their say, and I had something that had a fighting chance of being accepted first time round.
Thu 15 May | Dimitri. | Creating the mockup directly in the IDE can be MUCH faster then in power point. Otoh, the client will probably then say 'ok, so... tomorrow?' So here comes the grand sollution: make it in the IDE. Then take a screen capture. And then open it in Photoshop!!! I hope you appreciate the beauty of this idea. Have never done it myself, but it sounds as it could work. Applying 'emboss edges' and 'rough crayons' or something like this, you've got yourself a piece of art!!! I wish it would be possible to add images to this thing...
Thu 15 May | UI Designer | If you are trying to produce Design Comps then use something like Photoshop or Fireworks to produce a variety of screenshots. If you are trying to produce Wireframes then use something like Dreamweaver or Frontpage. Don't forget to use lots of 'Lorem ipsum...' text to simulate content or, as has already been pointed out, the people you show it to will think it's practically done. If you bring in some users at the earliest stage possible (and you should) it will be a combined effort to produce paper prototypes using yellow post-it stickies, paper and pencil. You will then find that you will generate Storyboards which also perform basic usability testing.
Thu 15 May | Philo | Dmitri - still looks like it's done. Whiteboard. Whiteboard whiteboard whiteboard. Just try it sometime - whiteboard the UI with the users/customers. BTW, I'm currently suffering on a web portal job where the client okayed the design which had been done in Photoshop. We went through a period at the six week point where the client was *pissed* that it was taking so long. Why? Because 'you've got the designs done - don't you just have to hook them up?' BTW, one thing Camel had that was nice - printing whiteboards. Thought they were a silly affectation at first, but got really, really attached to them. Philo
Fri 16 May | www.marktaw.com | Ding Ding Ding.. Sounds like we have a winner. Whiteboards are EXCELLENT mockup tools. More people should use it. Whiteboards should replace Powerpoint as the communication medium of choice durin presentations. Of course, someone will read that and try (and fail) to create a software package that emulates whiteboards, but what can you do?
Fri 16 May | Simon Lucy | Dmitri, I've done the Photoshop (actually mostly just window capture) the UI done in whatever the UI was going to be. I stick by that because using any other method makes assumptions about what the widget set is capable of or reasonable to do on the particular platform. Yes I use whiteboards, I have one on an easel I take in the car if I have to. Whiteboarding though has to be recorded, good if you can print the board (that is so cool), even more so if the whiteboard is an actual screen and pen interface (that is even cooler). But the thing I wrap around me using the actual UI to present proposals is that I never prototype. Prototypes are evil unless they are little balsa wood models. Its the prototyping that gives rise to the 'oh its nearly finished' as well as giving rise to the 'oh its a prototype lets make it do this, or this, or this'. One client I had, prototyped for around a year. So, no prototypes everything is real.
Fri 16 May | UI Designer | I've just started evaluating the DENIM product from the Berkeley UI Research people and so far it looks quite promising. I use it with a Wacom tablet but it just occured to me that it could be used in a meeting room with a PC Projector to simulate the whiteboard and have changes be made easily. I'll have to try that out and see how it goes...
Sun 18 May | tapiwa | We have a smartboard thingie which you use with a projector. Connects to the PC. You write doodle on the board, and it automatically captures on you PC. Really cheap too, a tad under £1000. Strongly recommend. http://www.smarttech.com/products/smartboard/index.asp
Linus on Open Source documentation | Fri 09 May | John Wilson (www.jowilson.org)
In a recent LKML thread, Linus Torvalds gave some of his thoughts on documenting code in Open Source projects: Some people care about documentation, some people dont. Thats a fact, and spouting platitudes about improving their work just doesnt _matter_. The whole open source idea is that people do what they care about and what they are good at, and exactly because they arent forced to deal with issues they dont have a heart for they take more pride and interest in the stuff they _do_ do. Personally, I dont write documentation. I dont much even write comments in my code. My personal feeling is that as long as functions are small and readable (and logical), and global variables have good names, thats all I need to do. Others - who do care about comments and docs - can do that part. And you know what? That _lack_ of comments and documantation improves my work. Not because documentation is bad, but because I DO NOT CARE. So I concentrate on the stuff I do care about. Comments? Is this true in the non-open source world as well (or even true at all?) My first thought was that leaving out documentation may improve the coders work, but it probably leaves more work for the maintenance programmer or other coders on the team.
Mon 12 May | Marc | My first interview question is 'Do you consider the code to be the documentation'? I'm finding that 70% of my interviews are only one question long....
Mon 12 May | Ian Stallings | The equivalent would be saying 'the engine is the documentation' to a mechanic. Sure he can figure it out but wouldn't it be wiser to give him some documentation? 'That _lack_ of comments and documentation improves my work.' Uh, that's because you wrote it.
Mon 12 May | Brent P. Newhall | Ian: Which, I think, is exactly the point. Linus is writing about a specific situation: open-source code that he wrote and is intimately familiar with. It's not fair to assume he believes the same thing about all code in all situations. Are comments useful? Yes. Can comments be overused to the point where they obfuscate development? Yes. The sweet spot is to develop only as many comments as you need. The perennial difficulty lies in figuring out exactly what that is. Are you developing code that only you will ever touch? Then maybe you don't need any comments. Are you working on a massively distributed system that will be 'thrown over the wall' to maintenance programmers in six months? Then you'd better comment at least the tricky stuff. Are you writing an API? They you'd better comment every function. Are you in a different situation? Then your answer will be different.
Tue 13 May | Mr Bloh | You sirs, are all morons. Comments never help.
Tue 13 May | Marc | And if Linus gets hit by a bus this morning? The only code only you will ever touch is the code that only you will ever run.
Tue 13 May | Ian Stallings | It's just that Linus serves as one of a 'Guru to Open Source development and others in the same field take his comments as if they were spoken by god himself. So they see him saying comments are useless in his particular case, kernel development, and do the same across every application. Look inside any open source application and you'll find a //HACK //KLUDGE of //TODOs and lack of anything useful. Although this is a broad swipe my point is this - wouldn't comments be more useful to Open Source then any other kind of software? I mean you know someone will read it right? Why be lazy? Are comments really getting in the way so much that you can justify leaving thousands (or millions in the case of Linux) without any reference but the code? It just seems very short sighted. I know it could be justified but I just choose to disagree.
Tue 13 May | anonymous emacser | I just took Linus' thoughts to heart, and developed a few emacs utils for a Windows-using friend of mine.who wants a little more power early on in the learning curve. I decided not to document as much as I normally do. I felt a lot freer to change code and add features because there's one less thing to sync with. I did annotate code that newbies might not understand, and felt I had time to write other (non-code) documentation. I'm glad he wrote this because documentation isn't a cut & dried case. People rarely talk about programming in the small, as opposed to sweeping strategy.
Tue 13 May | Brent P. Newhall | Regarding the 'If Linus gets hit by a bus' argument: Does all software have to be that robust? Do you think that that thought never crossed Linus' mind? What if he's willing to accept that risk? Or: If someone paid you to write a macro in fifteen minutes, and you wouldn't have time to develop it *and* comment it, would you refuse the job?
Wed 14 May | Marc | What if HE is willing to take that risk? Screw him! I'm the one taking the risk! He gets hit by a bus and suddenly this OS (that I likely bet a lot of my company on) is lost. Of course, this is always a risk with Open Source (that the key figure will leave and the project will die). It is one of the main reasons I avoid it under most circumstances. I don't trust in a groups passion for the product (open source) nearly as much as I trust a groups passion for financial gain (commercial software).
Sun 18 May | Nev | [You sirs, are all morons. Comments never help. ] This one certainly doesn't......
Cover Fire | Fri 16 May | Mike.
Think how much better software would be if we ignored Microsoft for 5 years and quit worrying about what they were doing
Fri 16 May | Brad Wilson (dotnetguy.techieswithcats.com) | I try not to dwell on the negatives in life. :-p
Sat 17 May | Stephen Jones | Quit worrying about what? As developers quit worrying about new platforms? As consumers or governments quit worrying about monmopolistic practises? As companies quiet worrying about how large the next bill is going to be?
music 2 | Fri 16 May | The Real PC
Bob Noxious asked me if his music was still bothering me and I said no, I got ear plugs. Ever since then I havent heard any music -- he must have turned it way down, or off. So it looks like he is a kind and compassionate person after all. Now I feel guilty for having been angry. Well at least now I have ear plugs in case I ever need them. If anyone has a noise problem at work, you can get some really nice ear plugs now days.
Fri 16 May | Simon Lucy | He _wants_ you to feel guilty. You can buy him a doughnut, he sounds a doughnut sort of person.
Fri 16 May | Nat Ersoz | Passive/Aggressive - what the psicko's call it, right?
Sat 17 May | FullNameRequired | ask him if he reads JoS :)
Sat 17 May | moses whitecotton | Nice time for a preemptive strike. You can now destroy all noise producers without the change of being blamed, After all the problem has gone away.
ICQ in one week? | Fri 16 May | MR
I would not normally post such message here, but I just want to get some opinions from here. I am a recent CS grad and have been looking for work for awhile. Last night I received a reply. Basically, it asks me to complete an ICQ-like program within a week, before considering for an interview. It is not that I am complaining about the impossible project, it is about legitimacy. Before applying for the job, I visited their web site (using the domain name from the email address). After receiving the reply, I noticed the replied message has different domain name than the one I sent my resume to. So I checked their new web site. On the new page, the funny thing is that one and only one client of theirs is actually the web site I visited before applying for the job. (Client and the original have different domains but essential goto the same site) And there are many other inconsistencies that I won’t mention here. In conclusion, it does not look very legit to me. I am wondering if this is a norm in the industry. Would I look naïve and show desperation? if I try to complete the project and test myself to see how far I can go. Or how should I tell them that I am no longer interested in the position? TIA
Fri 16 May | S. Tanna | Do WHOIS on the domains. Does the same person own both? It seems a bit much for anybody to expect a whole week's work for 'free'.
Fri 16 May | Daniel Shchyokin | I have been asked code questions, but never submitted a working app. You have a right to be suspicious Here are some ideas: ask to see a demo of their product, they do have a product right? Tell them you will demo the app on your laptop, and give them code upon payment for your first week (if it really is just a test, they won't need the code right?). If it is not just a test, then ask for payment not a contract not a promise, but a check, don't let them get away with b.s about paying net 30. ask the hiring manager technical questions, if he doesn't know anything, ask to talk to the person who will be evaluating your work. maybe put a license in the app too (at least if you don't get paid)
Fri 16 May | Application Specialist | Would you ask a plumber to do all your plumbing before hiring him ? Asking to develop a specific application before the interview is something I have never heard of. I suggest you question them more before you put too much effort in it. Or make an empty user interface in Visual-basic. BTW I did an ICQ-like program in VB, 5 years ago, it took us a month and we were 2 working full-time on it and one on-and-off. We had to make a custom ActiveX control to replicate the behavior of the ICQ buddy list. The fun was in debugging the communication protocol sending each other files and messages. Our client used it to communicate documents automatically between different process.
Fri 16 May | Sergio | Well, I suggest you should try to complete the project if it's attractive to you. Sounds a lot more interesting than most of the work you will be doing everyday if you get the job. Regarding the company, perhaps it's just a small company or startup and they don't have a lot of clients already. Or they might have clients but not have updated their website.. happens very often with small companies that keep their developers busy with real projects and no one 'maintains' the website. My first job was in a small place (6 programmers) and we all only maintained a single website. I don't regret having worked there for a year and a half. I learned a lot, bacause I had to maintain, design, develop, test, lead and in general, perform any role there was needed. I felt like my work was productive and meant something because they needed every single skill I had. That is not the way it happens at big companies. I suggest you try to ask your interviewer about the company's main activities and interesting projects they have done. Only your good judgement can help you decide, but I would suggest that you should not refuse the offer just because it is a small company.
Fri 16 May | Sergio | If they asked for a you are right, sounds strange and is not common. But if they asked for a they might just be a little desperate for someone that can get things done.
Fri 16 May | Christopher Wells | > I am wondering if this is a norm in the industry. There are no 'norms' as far as I know. In my last job, I was hired to do tech support; when I arrived, I found there was no product and no customers, and that the previous programmer had quit, leaving behind him a deliberately corrupted set of source code (which I fixed, in order to keep the company in business and to become their new chief programmer). There are problably as many stories as there are people. I'd agree with not giving them source code until they've paid for it. If it were a company that I want to work for, then I might be willing to put a week into pursuing it. If it is a legitimate test, another problem is that (as with the 'MS tests' discussed earlier) you don't know what they're testing for, what the 'right' answer is. Are you allowed to reuse existing Open Source stuff? Would a 50%-complete solution get you the interview you want?
Fri 16 May | anonymous | First of all, I think the test is hardly impossible. I imagine he wants something with the main features of ICQ, not a complete replacement. I would go ahead and do the test. When it comes time to show him the code I would make sure it is understood that the code is yours. If you don't get the position with this company, you can then use the code sample at the next place that interviews you. I do believe that they will actually want to see the code. Seeing a working application is definitely helpful, but coding style is just as important.
Fri 16 May | S. Tanna | If you decide to do it Make the app (aftering trying to agree a small scope of work) Show the app running Print part (not all - leave some vital part) of the source, assuming they want to see it (which I guess they _should_, not might) - and show them that rather than all the source. If it is supposed to be the start of some real project, I would ask them to pay for time you spent doing the app before you started working for them.
Fri 16 May |     | http://www.codeproject.com/internet/
Fri 16 May | Big B | I'd tell him it can't be done, but I'd be willing to write a specification for a simple ICQ clone, and a detailed implementation estimate. That sounds like a more reasonable project to get done in one week. If he doesn't accept that counter offer, I doubt I would want to work for him. But then again, I'm not desperate for work.
Fri 16 May | Li-fan Chen | Assuming it's a legit request. You might humor them and submit something that's basically a thin wrapper around open source IM-work alikes like the Jabber API (which basically makes the Jabber protocol work). The Perl/Tk examples are like 200 lines. Interact with them by email, if you get feedback you might be able to figure out what they really want. It's possible they are just lazy and want to weed out people they don't see as fitting their needs. Chances are they want network and system programmers who are familiar with rapid programming languages who actually enjoys learning about their field. Because Jabber is network programming / system programming... and most folks like you and me gotta be pretty interested about network programming to know about it or tinker with it. But I personally thing this is a little strange as a test.
Fri 16 May | Mike Gamerland | MR -- It is time to enter the 'real world'. You started out well, in that something seems fishy. Then you went to ask people who may know more, again another good idea. Of course, people will argue that asking 24 total strangers their opinion is crazy too... Speculation is an interesting thing. - Do they want you to actually code something? If you do, that says something about you. If it is truly impossible, and you don't do it does that say something too? - Do they want you to send something? If you send them AIM would it show you didn't understand, you made presumptions or you have the common sense not to write something you can easily locate? - Large companies tend to standardize HR processes so this sounds more like a smaller firm. Small firms can be very eccentric. In good and bad ways. You have plenty here to wonder about. Ask for a contact phone number and a person to speak with. Then track down the company and do some research. Contact the person and ask for specifics and ask for more details. Do you even know what they are willing to pay? Whether you would need to relocate? 500 other questions you should ask before getting into testing or the like. No sense wasting your time either. Good luck.
Fri 16 May | Li-fan Chen | By the way, you have given us too little.. (or you have personally received too little) project specs to move forward at this point. From what I can tell there's a chance you are suppose to write one from scratch. Depending on the language you are expected to write it in, that time table could be either silly or more than reasonable. Another problem is whether they want you to come up with something new or not, or do it old school. And how much of the code needs to be yours (how low level do you have to code yourself--in other words).
Fri 16 May | George McBay | I agree with others that any time assessment is impossible without knowing more about what the specs they are looking for are. If all they want is a very simple IM system with client and server that allows users to login, keeps a list of current users on the server, and forwards IMs through the server to the proper recipient, that could easily be done within a week in virtually any language, assuming the target platform has at least BSD-socket/winsock libs and you don't have to write a TCP/IP stack from scratch. Of course, once you start adding in buddy list maintenance and other features, it can quickly balloon into a really large project... In either case, unless I was extremely desperate or really, really wanted the job for some reason, I wouldn't write an entire app, even a small one, as part of the interview process. Not because I'm afraid they'll 'rip me off' (if they wanted to do that, they'd just rip off some mature open source IM code), but because I don't think it is a particularly valid way to assess my skills UNLESS they are hiring for 'coder-monkey-in-a-sweatshop', which isn't a job I want.
Fri 16 May | MR | Update on the Situation: 1. In the reply , my name is not even mentioned. 2. Several spelling and grammatical mistakes 3. No product listing,just contact info on the web. 4. Nothing much about the program except do something better than ICQ, that runs on both Linux and Windows. 5. Why it needs to be Open Source ? if they just want to look at the code. It is very fishy, and I am no longer interested. I guess it is time to go back to my personal project. PS: Am I desperate? Not yet. Maybe, if I still don't find work by Sep.
Fri 16 May | Tj | Jerks.
Fri 16 May | Li-fan Chen | MR, maybe you can send them references to some of the software you have written on your own time (assuming you are one of those who write hobby programs sometimes as a way to pass time) or open source projects you participated you. You mentioned that you write personal projects on your own time (between jobs I presume)--sounds like you must have something to show thats gotta be levels above ICQ on steroids. Just my 2 c.
Sat 17 May | T. Norman | They just want somebody to do something for them for free. That's it. And I think the posters who mentioned Open Source were referring to including Open Source code in your solution rather than writing it from scratch.
Sat 17 May | Stephen Jones | ----'Something better than ICQ' ----- How about a version that doesn't interrupt you all the time with stupid messages. Photoshop comes in useful here :)
BDN Survey results - Team size 1 most common | Fri 16 May | Sunish
Looks like majority of Delphi developers are self employed. Any JOS readers using delphi who are self employed ?
Fri 16 May | Sunish | Forgot the link http://homepages.borland.com/davidi/bdn/2003BDNSurveyResults.html
Fri 16 May | eclectic_echidna | 92.561% of all stats are wrong. If 40% work alone, then this question doen't quite jive... How frequently are you interrupted by other programmers for advice? (choose one) Interrupted Count Percent every hour 6547 7.76% twice a day 16921 20.07% every other day 17290 20.51% once a week 14700 17.43% once a month 9292 11.02% all the time 5461 6.48% never 14098 16.72% no choice 0 0.00%
Fri 16 May | one programmer's opinion | Sunish wrote, 'Looks like majority of Delphi developers are self employed. Any JOS readers using delphi who are self employed?' How did you come to the conclusion that just because someone doesn't spend a lot time working with other developers they must be self employed? I feel the survey results for development team size is pretty accurate. My guess is that most American programmers spend most of their careers 'working by themselves'. I know I have (rarely by choice mind you).
Sat 17 May | Stephen Jones | These figures are totally skewed because they are based on Borland developers. You may note that there is no mention of VB or VBA among the programming languages. As the main disadvantage of Delphi appears to be finding other developers and its scalability for large applications, then it is not surprising that a survey with 30% of the users being Delphi users would hava a lot of individual teams.
Is Joel Alive and well? | Fri 16 May | Neri
I was noticing that Joel hasnt posted any of his brilliant insights since April. I hope everything is well, that its simply too much work and just life getting in the way, as opposed to something darker. Just wondering. ~ Neri
Fri 16 May | Stephen Jones | Maybe the weather's got better and he's got a life!
Fri 16 May | Simon Lucy | I think he's now studying for a Prince2 certification.
Fri 16 May | meinthecorner | yeah I saw him the other day at Startbuck talking to Tom Demarco . I said hi but he was too immersed in discussion
Fri 16 May | Just me (Sir to you) | In crunch mode to finish a product release?
Fri 16 May | Joel Spolsky | I just don't have anything to say :) Actually doing two releases at once, a bug fix for FogBUGZ so that it works on Chinese and Japanese Windows 2000, and the next beta of CityDesk. Combined with the fact that I don't have anything to say.
Fri 16 May | Philo | What does Fog Creek look for in a cover letter? [grinning, ducking, running] Philo
Sat 17 May | Damian | The cover letter isn't so important. What does matter is that the only person allowed to blog current projects is Joel :)
Sat 17 May | tapiwa | good one Damien
Sat 17 May | Stephen Jones | ---'What does Fog Creek look for in a cover letter? [grinning, ducking, running]'---- Joel likes to see a lot of military experience; it brings so many happy memories fliooding back. :)
ear plugs | Fri 16 May | The Real PC
Bob Noxious is playing music again but I cant hear it. I cant even hear my own keyboard.
Fri 16 May | Ian Stallings | I bet you can hear yourself breathing though ;-)
Fri 16 May | The Real PC | Yes, and I could probably still hear my boss yelling at me.
Fri 16 May | Bob Noxious | why do you care if you don't work just read this jos forum? Bob
Fri 16 May | Nat Ersoz | You have a staff meeting in 1 hour. Ask Derrenberger to shut him up.
Sat 17 May | Li-fan Chen | Well you don't need to hear this but some bad news. I just bought a noise cancelation earphone from Panasonic ($79 Canadian dolla at Best Buys) RP-H270.. and it will kill the sound coming from your main processor or video card fan--but that hard drive will escape scott free. And no modern OS will let your hard drive spin down for good. Consider it money wasted.
Sat 17 May | Li-fan Chen | Silicon ear plugs are really great though, but you'll have to decide whether you'll like something in your ears.
Better system - home or office? | Thu 15 May | Philo
After reading AnonQAGuys comment in the browser thread about going from four machines/monitors to one, I was wondering how many developers/IT types here have better setups at home than they do at work? (and having root on the companys server doesnt count) In eight years developing, my system at home has always been an order of magnitude better than the system at work, and for the past three years Ive worked on my laptop at the office because my LAPTOP was better than the desktop system. To be honest, I think its pretty sad that we buy better stuff with our personal $$$ than management generally sees fit to give its workers. Philo
Thu 15 May | Scot | Ya, that $2000 system is going to really kill the company's net income. Blah. My home system has been better, with the exception of 1998-2000. I usually build my own and can find the price/performance sweet spot.
Thu 15 May | Spaghetti Rustler | Actually, I'm just the opposite - I have a PentiumPro 200 at home running Windows 2000! Yeah, it's slow, but for what I need, it works. I just make sure to have lots of reading material handy. Besides, all my money's tied up in Barbie clothes, apparently... I'm buying a new PC this week, though - can't stand it anymore. (And I have to jump on the .NET bandwagon, don't I?)
Thu 15 May | Nobody Special | At my last job, before I quit (paychecks were bouncing) I had a 90 MHZ Pentium and had to run VB 6.0 and Access 97. It took forever to do anything. I'm glad I quit. ( Funny thing was, I went back six months later to find out if the guy was gonna pay what he owed me and what do I see but brand new computers for the other developers. He still hasn't paid me. What a jerk... anyway) I have a Pentium III 1GHZ at home and am looking to get a Pentium 4 3.x GHZ pretty soon.
Thu 15 May | fingers | I have never had a better system at 'on site' jobs, than at home. I am almost always allocated an underpowered system, with a dodgy monitor and keyboard covered in grime. I swear some employers take delight in bad equipment, which makes me wonder why they expend so much effort to get you to work for them in the first place.
Thu 15 May | www.marktaw.com | It alternates. I upgrade my home system once every 3 years or so. It's better than my work system just after I buy it, and then eventually my work system gets replaced and my home computer gets out of date... I had a 233mhz computer until last fall when I upgraded to an Athalon 2100. Do you really need more than a P1 to surf the web? Heck, I'm using it as a server now!
Thu 15 May | Nat Ersoz | Home mahcines always rule - because they have to play games!
Thu 15 May | Mike Swieton | Home. Work has some damned good hardware, but no single-screen system can hold a candle to my 3 heads. Now work has good hardware: my current work is on a QNX box running dual P4's. But the OS has issues: doesn't support second P4 with our NIC (or some such issue), the compiler is slow (even with ccache)... Kind of hard to vote, that given.
Thu 15 May | RM | If your work machine is (unreasonably) worse than your home machine, and there is no chance you will be getting a better machine at work, would you take your own to avoid frustration at work and be more productive? Why and Why not ?
Thu 15 May | Nathan | RM - our network policy does not allow us to attach anything to the network not purchased by our employer. i'm sure it's similar most places.
Thu 15 May | Stephen Jones | My work machine (P4 2Ghz) is better than my laptop (1.6Ghz P4M) and my desktop(733Mhz PIII) in everthing except the three things that matter, the memory, the monitor and the chair! I've had a 19' monitor at home for three years the CTX packed in a year ago so I bought an LG Flatron; the laptop has a 15' 1450 x 1050 TFT screen and at work I get a bog standard Benq 17' which I run at 1024 x 768 and that is the largest monitor in the whole college (and we do have CAD labs!). I've got the defacto control over where the new machines go in the department and I arranged last time that they went to the most needy first (ie. me, the secretary, and the three or four lecturers who do the admin) but when you find the boss and the secretary still running the display at 800 x 600 after you've changed it what can you say!
Thu 15 May | Stephen Jones | Oh, I forgot to mention that Acer keyboards and mice are vile - so vile I purchased an extra Microsoft Optical mouse and Natural Keyboard. If only MS software were as good as its hardware!
Thu 15 May | Tim Evans | Home: Pentium 200, Matrox Mystique, Linux. Work: Athlon 2000+, Radeon 9000 Pro, Windows XP. I play my games at work (after hours).
Thu 15 May | Brad Wilson (dotnetguy.techieswithcats.com) | For every job where I went into the office, home machine was better -- except for my first job, when I didn't have my own PC yet. :) As someone else pointed out, a lot of that has been due to keeping the PC up to date for gaming. After I got my laptop, I was using it at work instead of my desktop, as it was a lot faster; the ability to take work home was a bonus, because the 60 mile drive was often enough thwarted by snowy roads. Now I work at home. But once we've moved into a real office, we'll all have reasonably top of the line PCs. I think a couple grand spent on a developer who makes 80 to 90 thousands dollars is well spent in morale. Good computers, good displays, good chairs, good work area. All important.
Thu 15 May | T. Norman | Right now it is practically the same. P4, same MHz, same 512 MB memory. Mine at home is somewhat more powerful due to a 64MB nVidia graphics card, but the one at work has a bigger monitor. However, before the current setup I always had a better system at home.
Fri 16 May | John Fletcher | At home I have a P4 2.4 laptop with 512mb of memory (Dell, fantastic machine, worst support service I've ever encountered), and at work I was - until a few days ago - struggling along with a P3 933 with 128mb of memory. Having a much faster system at home really emphasized the differences. The work setup had real problems running .NET and the smart device extension pack for embedded systems. Had to up the virtual memory and this resulted in the hard drive permanently thrashing away and a very slow machine. After a huge amount of whinging (the company made £45m profit last year), they finally caved in and gave our development team (3 developers) P4 2.4s with 256mb of memory. I really didn't appreciate the amount of political campaigning I had to do to get the equipment I needed to do my job properly. Problem I encountered is typical within a huge organisation - they have a standard 3-year refresh cycle on equipment and are reluctant to splash any extra cash on whizzy stuff for developers unless it is absolutely critical. I'll give it a few months for all the egos to mend and see if I can get an extra 256mb of memory... ;-)
Fri 16 May | Just me (Sir to you) | Work: Notebook Toshiba PIII 450, 320 Mb, love it. Have a new one in the pipeline Dell PIV 2G, 512 Mb. Home: Old homebrew IBM686 300, 256 Mb. Isn't used much since we switched to notebooks at work.
Fri 16 May | Stephen Jones | Our college we had and still have loads of machines with 32MB, which was standard for bottom-end machines mid-1998. It took the secretary two minutes to open Outlook and if he tried to open Access at the same time the machine froze. Apart from that the machines were perfectly competent workhorses. After a year of badgering MIS they decided to put through an order for another 64MB of memory. However they were told to send a tender instead of using petty cash for the purpose, and the tender took three months to prepare and another month to OK. By which time the price of memory had gone up and the vendor refused to sell. I get a new work machine every year because there appears to be no way to get the extra memory or larger monitor otherwise. So I waste a day every year configuring the new machine and then another afternoon reconfiguring the old one for the new user.
Fri 16 May | | PII-300 at home (perfectly adequate, but then it runs A Real OS), something 'somewhat' faster at work. I begrudge every penny I spend on computer hardware, because there's absolutely no need.
Fri 16 May | Rahoul Baruah | Work: PC Home: Mac Home is much better!
Fri 16 May | Tj | It's a wash. Home has more powerful x86 systems, but everyplace I work has more exotic machines. So I lose on quality, but it's an astounding deal to get both power and cheapness. And quality usually comes with an antagonistic relationship with a vendor like apple, sun, commodore, symbolics, neXt...
Fri 16 May | DrAwesome | I wish I had my home system at work. My Athlon 2800 at home is used to check email and run Mozilla. My 1Ghz Duron at work is used to compile massive (600+ classes) Java projects while running two copies of my IDE, Photoshop, Mozilla, Eudora, and OpenOffice.
Fri 16 May | Ian Stallings | No contest. My home machine is a beast compared to my work dekstop. I'm both a hardware and gaming junkie.
Sat 17 May | RB | My work computer has the same specs as the video card in my home computer (350MHz, 128MB).
Poll: Most used scripting language? | Thu 15 May | Scot
I am interested in knowing: - what scripting language (singular) you most commonly use - what % of your productivity comes from your use of that language Im NOT interest in knowing why it is better than other scripting languages though :-)
Thu 15 May | Scot | So, I use bash and it accounts for 5% of my productivity.
Thu 15 May | j. | perl , 40% coding productivity. This depends on what you mean by productivity too. I use alot of languages and tools ...mostly on unix.
Thu 15 May | Anonymous Coward | Define 'productivity'. I write many more lines of Javascript than I do of Perl. However, the things written in Perl are more important and more difficult.
Thu 15 May | Scot | Good question. For the purpose of this poll lets define productivity as work/time. So my total work output per day might be 100%, and my time spent coding in a scripting language is 30 minutes (or 6%), but it accounts for 20% of my work. Make sense? My purpose here is not to prove a point, just to ask what others experience has been.
Thu 15 May | The Real PC | Perl is the ultimate scripting language.
Thu 15 May | Dangerous Liaison | Given that the most efficient language is the one you know how to use so as to be productive in your work, I believe your poll is invalid. Unless of course you want to obtain a count like '5 people use perl' '6 people use js' 'The rest of the world uses VbScript'. In that case my vote goes for, well I'll let you guess.
Thu 15 May | Brad Wilson (dotnetguy.techieswithcats.com) | Javascript. In pure form, it is perhaps one of the most well designed script languages I've ever seen. Too bad the stuff they put into browsers is crap. :-p
Thu 15 May | n | Python, but it's not a great %. It's multiparadigm as long as it's pythonic.
Thu 15 May | Tim Evans | Python, although much of the time I'm using it as an application development or glue language, not really as a scripting language.
Thu 15 May | Eric Lippert | Brad, I'm curious as to why you think that Javascript was well designed. What do you particularly like? The reason I ask is (a) because in many respects I disagree that it was well designed, and (b) I like finding out what people want from languages. Thanks, Eric
Fri 16 May | Arron Bates | JavaScript is the bomb. Problem is, most people haven't taken the time to learn what the later versions can really do. It's far more flexible than anyone gives it credit for. It was the victim of the browser war. But it is a truly fine thing.
Fri 16 May | Mike Swieton | So much of my stuff is hacked together with many tools. I'd say bash and perl on top, but often I'll use sed/awk... Of late I spent much time scripting vim actually.
Fri 16 May | Colin Macleod | I use Tcl ( www.tcl.tk ) when it's appropriate and when management will let me, which is currently about 10% of the work I do. I find it about 400% more productive than C, which I have to use most of the time. Don't believe all the knocking by people who have little idea of Tcl's strengths.
Fri 16 May | Gordon Hartley | Ruby, but there's no easy way to turn that into a % gain, and only because it happened to appeal to me more than python or perl when I decided to learn a 'scripting' language. I find learning keyboard shortcuts for everything, and making use of record / playback macro's to be where the most 'visible' / immediate productivity gains are. (e.g. Emacs, Word, Excel macros). Use the right tool for the job at hand...
Fri 16 May | Matt H. | Perl. Anyone going to the Open Source convention in Portland in July?
Fri 16 May | S. Gwizdak | Bourne shell (sh). TCL w/ Expect. Python looks interesting though...
Fri 16 May | Li-fan Chen | I use Perl and VBscript. By itself WSH and ASP (using VBScript) saves me the kind of time I need to save when I write throw away software. But then if I had written the same thing in VB it would be easier to package it as a compiled com object without too much fuss. And over all I find the need to look for commercial components a major waste of time. So if you had compare it with Perl's CPAN network or ColdFusion's richer base API or PHP's massive collection of built in functions or dot net framework you feel like that time would not have been wasted. If you really really know mod_perl, dotnet, or servlets, you could be quite a bit ahead on the productivity curve compare to the average ASP 3.0 or WSH bloke. So the argument becomes one of why would most folks stick with ASP when they could be using something else? Is C# too verbose? Is Perl too complicated to read? Is having to learn Jython + Servlets too much trouble for throw away code?
Fri 16 May | moses whitecotton | Perl and Expect , together they are very powerful Powerful = Do want I want + quick + works.
Fri 16 May | Karel | Jscript can support functional style programming as well Not many ppl are ever going to get the prototype vs class thing - thats why they are switching to classes only in jscript2 (.Net) They thaught of maintaining dual class/protype character for all objects but it imposes to much of an implementation burden. I always digged Brendan Eich's 1st website where he let on that he had to implement scripting in netscape over a weekend and just sort of hacked JavaScript together... Later versions were not as self-serving... The wayback machine is a beautiful thing! (Esp when applied to self moderating print media ;-)
Fri 16 May | Beka Pantone | Python. Although it's difficult to determine how much of my productivity is it accountable for. Most of my code generators are in Python. Most of the workflow software in my shop is in Python. Most of the prototypes I write are in Python. My last 3 large applications are scriptable in Python. Most GUI mockups I write are Python + wxPython. I prefer Ruby as a language, but it's difficult to beat Python when it comes to standard libraries and 3rd party modules. And I find Python easier to embed than Ruby.
Fri 16 May | treefrog | Ruby The first code generator I wrote was in perl (it generated c++ unit tests). It took a week. When I re-implemented it in ruby it took 3 hours and I doubled the functionality. I've not tried Python, but I am very happy with Ruby. I've used quite a lot of its functionality / libraries over the past 3 years or so, including sockets, database interfacing and win32ole interfacing. I really find it so easy to code in. I agree that it doesn't yet have the libraries thatperl and python do, but I think these will arrive in fairly short order. best regards, treefrog
Fri 16 May | Chi Lambda | 100% VBScript.
Fri 16 May | Albert D. Kallal | Vbscipt in windows. You can just fire up notepad, type in the code, and then save with a .vbs extension. For batch printing of Word documents overnight and similar stuff, vbScript is really the only solution, since the old style dos batch files don’t work with windows programs. It is interesting, but the Unix side seems to have a much larger percentage of people that use scripts to automate system tasks as compared to the windows side. I don’t know if the lack of people not using vbscript to automate windows tasks is due to the difficulty of using vbscript, or the fact that so much of it requites the use of com objects? Albert D. Kallal Edmonton, Alberta Canada kallal@msn.com http://www.attcanada.net/~kallal.msn
Fri 16 May | Paulo Caetano | > It is interesting, but the Unix side seems to have a much > larger percentage of people that use scripts to automate > system tasks as compared to the windows side. I tried WSH with VBScript, but I never got it working. In the end, I just installed ActivePerl, and it worked wonders. Python and Ruby are on my todo list.
Fri 16 May | Giorgio Pallocca | Perl
Fri 16 May | runtime | I really like JavaScript. I've started to explore Python, but it feels just like JavaScript. Object-oriented, dynamic type checking, everything is a dictionary, ... Someone asked about functional programming in JavaScript. The BeyondJS web site has a few articles about functional programming using JavaScript. It's a very flexible language! http://w3future.com/html/beyondJS/
Fri 16 May | A Software Build Guy | Personally I use Perl for most instances of scripting. On another note: I have gotten WSH with jscript to work for every task I have needed a windows MS Only solution. (I even used jscript and WSH to dump messages out of Lotus Notes in to plain text so I could send to my Perl machine to stripe some information from the resultant text. )
Fri 16 May | Jeff Kotula | Python 25-75% depending on what I'm doing. Have used Tcl in the past too.
Fri 16 May | Eric Lippert | Just to clarify two points: > they are switching to classes > only in jscript2 (.Net) It _is_ possible to use prototype inheritance in JScript .NET. JS.NET was designed to be as backward compatible with JScript as possible. Additionally, it is possible to use class members as prototype class constructors. > They thaught of maintaining > dual class/protype character for all objects but it > imposes to much of an implementation burden. I find it fascinating that you claim to know both what we were thinking of implementing and why we decided against it! :-) I assume that you read this somewhere and are not relying on psychic powers. Please let me know where you got this information so that I can correct the source. To further clarify: It was not at all that implementing classes which share implementation through both inheritance and prototype was _too hard_. We're buff. We could have done it! We didn't do it because we did not see a compelling user scenario for it. Features are not just added to languages for the heck of it or because we think they're cool! Rather, we start with user requests and user requirements and work out feature sets from the requirements, and then do usability research to see if we've got it right. Then we weigh the cost of doing the work against the benefit to the user. People asked for backwards-compatibility with existing prototype classes. They asked for inheritance-hierarchy classes to promote programming-in-the-large. They asked for the ability to use class members as prototype constructors. We implemented those things. But no one asked for objects which shared implementation through both inheritance and prototypes! Offhand, I see no reason why anyone would _want_ this feature. Do you have some usage case for this feature which we missed? If so, please let me know and I will pass it on to ECMATC39. Thanks! Eric
Fri 16 May | Chris Blaise | PHP. Since most of the stuff I do revolves around browsers, it of course makes sense but with the new CLI, it's quickly supplanting Perl for shell-based scripts as well.
Fri 16 May | Tj | Some sort of make tool. I see it more as a productivity multiplier than a percentage.
Fri 16 May | Chris Tavares | Well, I've been doing about 80% of my work for the last year in TCL. It's nowhere near 80% of my productivity, though - TCL is great for small scripts and quick windows, but developing a full app in it really strains at the limits of the language. Had I my druthers, it'd be Python.
Sat 17 May | Dewd | Ruby. Everything I tried to do with it was easy. Sometimes I wish more native interfaces to databases, instead of using ODBC, but even comercial products dont have that :-) I kind of admire python, though.
Reporting Solution | Thu 15 May | Dustin Alexander
Ive just started a reporting project for a large company that needs to convey a large amount of detail to a disparate and varied consumer base. Weve got all of the details for reporting in line, but I now need a reporting solution that works with our concepts. Our requirements are rather simple: We need the ability to format a report with graphs, graphics, headers, footers, and outlines. The report solution would ideally allow most of the formatting capabilities that are provided when hand formatting a document in Microsoft Excel. In addition, delivery in a variety of formats with identical formatting and integration with applications through an in-process server are major benefits. Were not looking for something that uses COM/Automation unless absolutely necessary, do to speed concerns. Otherwise wed just drive Excel. Any ideas or recommendations?
Thu 15 May | Philo | You don't mention the underlying architecture, which is fairly critical here. I will venture 'not Crystal' If you're on a MS architecture (which the use of Excel suggests), check out ActiveReports: http://www.datadynamics.com which has a free trial. Don't know if they can handle charting, tho. Philo
Thu 15 May | Dustin Alexander | The system needs to work with ODBC datasources. Any architecture that can be interpreted by a windows end client would work well. The ability to serve the reports from a non-windows machine might be an added benefit.
Thu 15 May | Dustin Alexander | This solution looks exceptional (especially the part about hosting third party controls, such as graphs, etc). Anybody have hands on experience with it? Any caveats?
Thu 15 May | tapiwa | I second the 'not Crystal camp' I needed one of these a couple of years ago. Ended up rolling up my own in Access. Would either print out hard copies of reports. Print to PDF, or export data to Excel. Must point out that the charting support in Access was a bit flaky. Not sure whether it has been fixed in the new version(XP).
Thu 15 May | Karel | You may also want to investigate Infomaker from Sybase - In its day it was an award winning product. You can prepare the report and say print as pdf or ship executable reports that hit your server when the user runs your report. Done mail merges, labels as well. You do not have to be aware of the Powerbuilder foundatation of infomaker at all to use it, but if you are a powerbuilder user you can make infomaker jump hoops. Good support newsgroup too
Thu 15 May | Philo | I've deployed two applications using ActiveReports, and I cannot recommend them strongly enough - it's one of those dream solutions that just.simply.works. I haven't used them in VB6, but in .Net the designer runs in the IDE seamlessly - just drag and drop controls, then write code behind to populate them. Reports can also be manipulated after they're run, just before rendering (to do 'Page x of y' stuff, put totals on the front page, etc) You can also check out their support forums, which are open and frequented by the developers. To my knowledge, nobody has ever switched from AR to Crystal. ;-) Philo
Thu 15 May | Joe Paradise | I'm in a similar position as Dustin (VS.NET 2003 app needs reports). Was leaning toward Crystal, but only because it's the devil I know. Project's in the design phase and still open to other options. Can anyone elaborate with specifics on why ActiveReports is better than Crystal?
Thu 15 May | Dustin Alexander | I played with the demo designer on ActiveReports. The technical prospects seem to be there, but what I felt was missing is the intuitive formatting capabilities. Is there a way to drag and drop the visual elements of the reports together that I am missing, or is this functionality that I need another suite to provide? If so, can anybody make any recommendations? While I am a fairly technical user, I don't relish the idea of setting formatting/wordwrap options by using a properties dialog.
Thu 15 May | Philo | Dustin - not sure what you're asking; I just drag and drop text boxes, labels, etc to the designer and put them where I need them. You also have alignment and sizing buttons available. It's *very* visual - I only use properties for placement when I have to fine-tune positions. Philo
Thu 15 May | Wayne | Do you need the end user to be able to modify a report's behavior or are they just going to be running the reports? If they are simply running pre-made reports (with parameters like date-ranges etc.) then I would say that Crystal should be your first choice. To the 'no Crystal' people: can you give specific reasons for your decision? Really nobody has given you any solid comparison of it on a feature by feature basis to anything else here but I think you should compare it with ActiveReports which seems to be the 'other' developer's choice for reporting. If you want some nice examples or help working with Crystal, email me and I'll be glad to point you in the right direction.
Fri 16 May | Ling | I was designing a reporting solution that would allow the end users to design their own reports. The application being reported on did not have a one to one mapping between the data entry fields the user sees on the UI and the data stored in the database. There was a layer of metadata that interpreted some configuration settings. To provide this solution, I needed to provide an easy to use UI that is familiar to users who have used MS-Access. I also needed to provide access to the data. When searching for a solution, I first tried to use Crystal because all the static reports were based on it. However, I encountered a problem because they do not provide you with a designer that you can modify and distribute. They also did not have a straight foward way of pulling data from my dictionay base approach. AR provided this. I'm not very sure about the current versions for either of the products, but I have alot of confidence in AR.
Fri 16 May | Philo | I experienced this in Crystal 7, heard it from a coworker regarding Crystal 8, verified today with my Crystal 8.5 guru: Crystal only works with flat files. It doesn't do relational data. So any report that takes master/detail data from multiple tables or views is gonna get the master data for every detail row. This is why my friend on CR8 has issued an edict that no report will join more than three tables. In ActiveReports you pull the data you need in codebehind and stuff it where it belongs. I've got an invoice generator that reads from over a dozen tables, but it doesn't pull a byte of data that isn't displayed. It also dynamically sizes subreports (or hides them if they're empty) and expands other areas to fill in. All in C#, completely intuitive. Since there's a 1,000 page Crystal 7 book sitting in my bookshelf, it seems to me Crystal wasn't quite as intuitive. Crystal also has a serious history with upgrade and patching problems. Oh, I'm sorry - that's a CURRENT problem: http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/q268/5/53.asp&NoWebContent=1 Here's a thread entitled 'CR8 Locks up Win2k': http://groups.google.com/groups?hl=en&lr=lang_en&ie=UTF-8&safe=off&threadm=39A5C893.FF9E7613%40techIII.com&rnum=11&prev=/groups%3Fnum%3D30%26hl%3Den%26lr%3Dlang_en%26ie%3DISO-8859-1%26safe%3Doff%26q%3Dcrystal%2Breports%2B8%2Bwin2k%2Bdll%26sa%3DN%26tab%3Dwg I also know of two people who are on a first-name basis with Crystal Tech Support. I only know two people who are hard-core enterprise CR users. You do the math. ;-) Philo
Fri 16 May | John Ridout | I think Crystal went downhill when they switched from selling a component to selling a 'solution'.
Fri 16 May | Justin K. | If you haven't tried out Crystal 9 it's a major improvement. I had used Crystal in the past and it fell into my 'Hell No' category but we had to purchase it at work recently and the difference is astounding. Integrates well with .NET or Java. Can be designed to display data that was generated at runtime using .NET data access objects or Java classes. Can define data sources that are like SQL stored procedures with Crystal parameters. The report designer is much better (although still not as intuitive as Access) The report API is a bit easier to comprehend (but has a very deep hierarchy which can be a pain sometimes) The licensing costs for a small outfit are pretty reasonable in my opinion.
Fri 16 May | Philo | 'It sucks less' is hardly a resounding endorsement. ;-) ActiveReports integrates seamlessly with .Net. Uses ADO.Net natively. The report designer is pretty much like Access. When you install ActiveReports, the final thing the installer does is display AR's object model, which is very straightforward. Oh, a single report can render in HTML, PDF, or Excel simply depending on how it's called. One of the reasons I'm so anti-Crystal - they made a business of simply being 'the default reporting engine' while they fumbled around breaking installs and creating 'Crystal experts' because it was so hard to work with. Meanwhile AR has been competing from scratch by simple excellence. I'm unwilling to reward Crystal at this point for finally getting it (if they do). Philo
Fri 16 May | Wayne | Personally I haven't experienced any of the heart-ache that you associate with Crystal. There is hardly any code to write after you've designed a report, what's your beef? You found a few things on the 'net pointing out easily fixed problems with older versions of it. Big deal. I'd rather open the registry to fix a bug than have to code a seperate form for each report like you do with ActiveReports. Crystal allows you to seperate the code that deals with formatting the report from the code that runs the report. Do you want to compile a new Exe everytime you want to add 'Page X of Y' to a report header? No, just open the Rpt file with Crystal, put it in there, and you don't even have to restart your app just re-load the report... This is just one example of something that Crystal does that ActiveReport's needs you to code in. Crystal takes care of most of the formatting all you have to do is feed it the data. And what is this about not joining more than 3 tables? You are obviously using the wrong (I know there are many techniques for using Crystal...) technique. Here is my function for initting commonly used reports (just pass it the Recordset that you want it to use for data...what is hard about this??) Public Sub ReportInit(oRs As ADODB.Recordset, sReportPath As String, _ Optional ShowTree As Boolean = False, _ Optional SubReport As String = '', _ Optional oSubRs As ADODB.Recordset = Nothing) On Error Resume Next oRs.MoveFirst On Error GoTo ProcErr Set fcrRpt = Crystal.OpenReport(csWebRptPath & sReportPath) With fcrRpt .DiscardSavedData .Database.Tables(1).SetDataSource oRs, 3 If Len(SubReport) > 0 Then .OpenSubreport(SubReport).Database.Tables.Item(1).SetDataSource oSubRs, 3 End If End With With crView If Len(SubReport) > 0 Then .DisplayTabs = True If ShowTree Then .DisplayGroupTree = True .ReportSource = fcrRpt .ViewReport End With ...
Fri 16 May | Wayne | One more thing...it'll be a lot easier to find articles about Crystal's problems than it will to find anything about ActiveReports since a lot more people use Crystal. And yes, you can export a report to PDF, HTML, Excel, RTF, Word, etc. files right from inside your application with Crystal. Nothing new there.
Fri 16 May | Justin K. | LOL one of my favorite sayings (I attribute it to myself) is 'It doesn't suck toooo bad' I use this phrase as a compliment.
Fri 16 May | Philo | 'You found a few things on the 'net pointing out easily fixed problems with older versions of it' Dude, it's a MS KB article about CR *8*. That's a whole one version back. And as for 'easily fixed' - that's only once someone's figured out what's broken and why. Getting to that point isn't exactly easy for the end user. Look, I don't want to argue this back and forth, since I haven't used Crystal since I threw it down in disgust three years ago. All I'm trying to say is that a) CR has a fairly long and distinguished history of making developers ask 'for god's sake, isn't there anything better?' and b) AR is a very capable competitor. Philo
Sat 17 May | Philo | Sorry, thought of one more thing... When I had to build my first report in .Net, I swallowed hard and decided I would put the past behind me and give CR (which is included with VS.Net*) another chance. I fought with it for three hours but couldn't get a simple table report - nothing but errors. When I tried to get it *out* of my project I found it had left detritus in just about every project file - some references I had to pull with a text editor. This, of course, reflected my experience with CR every time - you have to learn the package pretty well to use it, including its nits and oddities. I don't want to be a CR expert, I just want to produce a report. I installed AR and three hours later had finished my first rough on the detailed invoice report I had to produce. Every brush I've had with CR, from version 6 through 9 has given me the impression it's simply a messy product. Philo * incidentally, I'm positive the only reason CR is so market-dominant is that it's always included with Visual Studio...
The British School of User Interface | Thu 15 May | Ged Byrne
Are you thinking of hiring a British contractor or firm to design the UI of you product? Before you do that, take a trip to the old country and get some first-hand reconnaisance. http://www.relisoft.com/Science/UI/index.htm Its funny because its true.
Thu 15 May | Just me (Sir to you) | ROTFL! So true.
Thu 15 May | S Tanna | #1 is for a sort of a sensible reason. Some commuter trains get so packed, that people are scrunched up against every surface. They removed inside handles, when people lent on door handles and started falling out of high speed trains.
Thu 15 May | Ged Byrne | You have a point. Its hard to believe that these trains are so old they actually predate cheap technology that could lock the doors while the train was in motion.
Thu 15 May | Martha | No, apparently there _is_ technology that locks the train doors - on the sign, it says to wait for the 'door unlocked' signal. Very funny site, btw. :)
Thu 15 May | Ged Byrne | I think the door locking was added afterwards. When the trains were originally constructed you could open the doors while the train was in motion. I know this for a fact because I remember doing so when I was a foolish child.
Thu 15 May | John Topley | My God, I actually have first hand experience of all of these classic designs!
Thu 15 May | Brian | So they took off the handles first, then installed the automatic locking feature, and have yet to return the handles? I don't think I've ever been on a train where the doors were not fully automated.
Thu 15 May | tapiwa | Brian, you need to visit South East England. You can still open the doors while the train is in motion. That's why they have one of those dudes with the white 'lollipop' on the platform to signal to the driver when all the doors are closed, and the train can move. I never cease to be amazed every time I get on one of those Connex trains to Gatwick. Give me the express anyday and twice on Sunday.
Thu 15 May | X. J. Scott | Brian, You can also visit the United States. On the Amtrak long-haul trains I have been on, you can open the doors or even jump off the train from in between cars if you are so inclined, just like in the movies. I think this way is best. Why limit the user's possibilities? Also the US is one of the few places left where you can take a train ride that lasts for weeks and weeks, if it even manages to get to your destination at all.
Thu 15 May | S Tanna | 'Also the US is one of the few places left where you can take a train ride that lasts for weeks and weeks, if it even manages to get to your destination at all. ' No, they do that in England too :-)
Thu 15 May | Stephen Jones | In India there is one train that has NEVER been on time since Independence (and in all fairness possibly never before). It's best time was only three hours late, and its worse was seven days late. The average delay was 46 hours. However they still stick with the original timetable. Remind you of any software projects you've ever worked on?
Fri 16 May | Simon Lucy | I think this just goes to show how pampered users (americans?), have become. After all, once having discovered how a user interface works; ambiguous menu items, checkboxes that need hitting twice to work (otherwise people just ignore them you know), mysteriously requiring entry in a box but not caring what the entry is, interesting choices of a combination of colours, flashing red messages (cos once the user ignored the situation and the server crashed so the manager said we had to make it obvious); after all that the sheer feeling of accomplishment and safeguarding one's job because no one else knows how it works more than satisfies a whole pyramid of happiness targets. Did the guy not know how to use the multi-functioned toothmug to rinse his hair? How many Fridays did he spend in the hotel to need the bathroom anyway. Sheesh.
Fri 16 May | | Twice on Sunday, Tapiwa? You'll be lucky if the trains run that often... I'm a bit confused about the hair rinsing thing. Either he was in the bath (in which case he could have simply done the hair washing & rinsing thing then) or he wasn't. If he wasn't, why didn't he just use the hand basin? Would it have helped if it had had a sign saying 'Hand (and head) basin'? The shower cord thing is probably because mixing electricity and water is generally considered A Bad Idea. Particularly if your hand is the one dripping water into a switch or socket. So naturally there is no alarm cord in case you are 'dying alone in the bathroom'.
Fri 16 May | Tj | Good to know that natural selection is alive in the UK. You guys don't need to mess around with usability. Just visit parts of the US and see all the billboards advertising personal injury lawyers.
Sat 17 May | tapiwa | In the UK it is the Call XYZ lawyers for your risk free assessment if you have been injured in the last three years.
PVCS Tracker, anyone use it? | Wed 14 May | Practical geezer
I am looking for opinions on PVCS Tracker, because we use that here on a project I am involved with. I noticed that it appears to be more of a toolbox than an actual tool, but that may be the way were (ab)using it here. We have all kinds of fields that need to be filled and that are mainly for the purpose of project management, not bug solving. But the worst thing is that it does not provide any workflow. Moving a bug forward means manually selecting from a list of possible states that a bug might be in, with all doors open to input errors, and with the additional requirement that you now also need to concern yourself with the meaning and flow of bug states. I find that questionable, because you want the tool to take care of that. However, some people here seem to think its a good thing and that it is the responsibility of everyone to know how to move a bug around and do it correctly. I wont go into what I think of that, because I want to keep up the appearance of being a respectable person... But now I am curious, is this an inherent flaw of PVCS Tracker, or is it really a good tool, say compared to Fogbugz, but simply misunderstood by me, or abused by the organisation. Please dont jump immediately to the easy conclusion of the latter, but provide some thought on the first too, please...
Wed 14 May | Keith Wright | I demo'ed it and the main thing I didn't like is that it didn't really present an issues history when you view a bug record. I like it more like Fog's product where you can see the whole list of comments as it the record moves from state to state. Also, many of the fields always seemed to be scrolled off of the bottom of the page, where they could be forgotten.
Wed 14 May | Pathetic Version Control System devangelist | We unfortunately use PVCS, and I can confirm that workflow does not exist and you need to RTFM in order to do anything, and we all love doing that ;-) It is almost so bad that we have resorted to tracking our internally detected bugs separately so as to avoid that hassle on going through PVCS.
Wed 14 May | A Software Build Guy | PVCS Tracker is a tool box. And if you have a decent idea of where you are going and pay Merant several grand on training and additional several grand for on-site specialist to set it up, then you can have a usable product. There is NO AUTOMATED WORK FLOW in Tracker (I ought to know, I manually change a state flag every time I build to let test know they have work). We made it part of the development process that when your defect has change state, the person doing the change places a field in Tracker to the correct state. As the build guy I get to move stuff from ready to build to ready for test (Oh the fun). The only tools that do the Autowork flow either are intergrated with a source control tool (PVCS Dimentions) or can Intergrate with a source control tool (ClearQuest and ClearCase) All of which are expensive (I do not know every CM tool out there so there might be tools that do work flow with out the cost).
Fri 16 May | YF | We're using the i-net thingy, and most of my Tracker work is changing state attributes... It's like that by design. We have a set of rules that everybody follows, and that's how we get things done. It's not perfect, but it works. I don't complain, because we used to use Excel before.
Sat 17 May | Liron Levy | You can work with it. The real problem with the tool is the administrative side. For example - the backup/restore feature really sucks (I know from personal experience ...)
Why isn't Delphi more popular? | Thu 08 May | T. Norman
Everybody I know who has developed with it says great things about it. Its object-oriented, decent performance, cross-platform (Windows+Linux), good for building GUI applications, doesnt require end-users to have a licensed runtime environment, and a lot of other good stuff. But in terms of market share, its still far behind other popular languages like VB, Visual C++, and Java. Whats the deal why it isnt more popular? Have you used it yourself? What do you find good about it? Whats the bad?
Sat 17 May | S. Tanna | I think the reason is they trashed everything and started over so many times 1. Original Turbo Pascal 2. TP4 and later - no longer compiled even relatively trivial programs made with 1 3. Delphi vs Tp4/5/6(?) - same thing I think Eventually you get tired of having to rework your programs, merely because they made the language better, rather than 'real' changes. I'm sure each time the language got better, but you added a few more folks who decided to try a different programming language (from then on).
Seven stages | Fri 16 May | Tj
I usually find these things pat and unfunny. But this to me is very insightful about stages in learning a programming language. In fact, this newsletter is surprisingly good. (Anyone remember eidola?) http://open-beos.sourceforge.net/nsl.php?mode=display&id=42
Fri 16 May | Albert D. Kallal | Hum, sounds similar to the 7 stages listed in Yourdon’s book: “Decline and fall of the American programmer” I quoted/used that above list a article of mine at:: http://www.attcanada.net/%7ekallal.msn/Articles/PickSql/Pick1.html I did quote the above from that book, but the book was quoting from: Page-Jones, Meilir. 'The Seven Stages of Expertise in Software Engineering', American Programmer, July-Aug 1990 Albert D. Kallal Edmonton, Alberta Canada kallal@msn.com http://www.attcanada.net/~kallal.msn
Controling the re-calc cycle in Excel | Fri 16 May | Albert D. Kallal
When a user hits f9 to re-calc the spreadsheet, all is fine and well. However, if I have more then one spreadsheet open, then ALL the sheets re-calculate. The problem is that I want only the current sheet to re-calculate and not all of the other sheets. Or, even better is if each sheet would wait until the other sheet is finished before it starts its re-calc cycle. I realize that shift-f9 will just re-calc the current sheet. However, I still wondering if there is a way to turn off the concurrent of the sheets when they re-calc. I want them to re-calc one at a time, one after another. Not all at once. If this is not possible, then I would not mind having a way to change f9 to function like shift f9 *just* for this sheet. I do have this question posted in a excel newsgroup, but nothing came up yet. Any ideas here? -- Albert D. Kallal Edmonton, Alberta Canada kallal@msn.com http://www.attcanada.net/~kallal.msn
Fri 16 May | DJ | Having done a few Excel Add-ins I wish it had a better event model. Excel does have a WorkSheet_Calculate event but that gets triggered AFTER the calc so you can't cancel it. You can create a macro and assign it to a button to run the calc one sheet at a time. Just loop through each sheet in each open workbook and call: Worksheets(x).calculate I don't think you can reassign the F9 key to run your macro though. Good Luck! Dave
Fri 16 May | Albert D. Kallal | Yes, I think the solution is to teach users about f9 I have a sheet with some code that reads data from a mainframe. This code is a function in a bunch of cells that returns values from a mainframe. At the start of a re-calc cycle, I connect to the mainframe, and this includes a logon via a user id. After the re-calc cycle is finished, then in the calculate event, I log the user off. This way, I am only using ONE user logon during a re-calc cycle. The number of additional logons to that system is limited. This way, while working on, and editing the spreadsheet I am not using a precious user logon from the mainframe. I only use that logon during the re-calc cycle. That way other Excel users can also work, and we don't have to have a huge number of extra user logons for the mainframe. If I have 5 spreadsheets open, and I hit f9, then ALL of the spreadsheets start a re-calc cycle, and it causes 5 logons to occur. This bad for many reasons, not to mention gobbling up 5 users license all at once. In fact, 5 users is ALL the extra logons we have! If each user just works with one spreadsheet, then those 5 extra logons can service a LOT of excel users, since I only use a single logogn during the re-calc cycle. So, I need a way to turn off the concurrent recalc of all the sheets, and have them re-calc one at a time.
Fri 16 May | Philip Dickerson | What about using: Worksheets(i).EnableCalculation = False for all the worksheets except the active worksheet. You will need to set it back to True for the new active worksheet (and False for all the others) when the user switches worksheets. One disadvantage with this approach is I think it forces a recalculation when you change the value to True.
Fri 16 May | Joel Spolsky | With recalc turned off, replace all occurances of '=' with '='. This is enough to trigger a recalc in each individual cell that had a formula, without starting a global recalc. It also lets you recalc a range easily.
Fri 16 May | DJ | You can trap the F9 key when the worksheet opens: Application.OnKey({F9},'CalcAllSheetsOneAtATime') Then this code should do the trick: Public Sub CalcAllSheetsOneAtATime() Dim WS As Worksheet Dim WB As Workbook For Each WB In Application.Workbooks For Each WS In WB.Worksheets WS.Calculate Next Next End Sub Dave
Fri 16 May | DJ | Actually you have to put it in the Activate event Private Sub Workbook_Activate() Application.OnKey '{F9}', 'CalcAllSheetsOneAtATime' End Sub Also you should restore the F9 Key when you close the workbook Private Sub Workbook_BeforeClose() Application.OnKey '{F9}', '' End Sub
Fri 16 May | Albert D. Kallal | Thanks Dave. That looks about perfect for what I need. I was not aware of the onKey feature. Gee, just how much time does one invest in learning Excel? With the above list of suggestions, I can now control how f9 behaves in this sheet, and even make excel re-calc the sheets in sequential order also. It seems that these programmable office applications can just about always solve the question I ask. I mean, I can’t ever remember Word, or Excel not being able to do what I wanted it to do. Rather remarkable these tools are. Hence, I am working with a spreadsheet that has a function in some cells that read values directly from a legacy pick data base. (using a com add in here allows this without the need for odbc). Thank you very much Dave, and to all of you who offered some suggestions. It is appreciated. Albert D. Kallal Edmonton, Alberta Canada kallal@msn.com http://www.attcanada.net/~kallal.msn
Selling software to embed in other people's softw | Fri 16 May | Ronald Fisher
Can it be done? Selling your software application to a series of other software companies (or ISVs; Independent Software Companies) who pay you large licence fee for each version they sell. This is sometimes called OEM. Different from simply a channel relationship where someone else sells your product with your brand; this is when your product is in effect white labeled. I have people telling me this is the way to go because it means you dont have to sell direct (meaning no sales channel expense) and you dont have to put up with users giving you a hard time post-sale. It seems like a sensible way to approach the ME sector especially but is this really viable? Are they many precedents of successful companies doing this? Id welcome any thoughts anyone has.
Fri 16 May | j. | www.sleepycat.com makers of BerkeleyDB
Fri 16 May | van pelt | Well, I certainly hope it can work-- this is exactly the kind of thing I've been thinking about doing myself. But I guess we'll see. = I have people telling me this is the way to go = because it means you don't have to sell direct = (meaning no sales channel expense) and you = don't have to put up with users giving you a = hard time post-sale. Yeah, but now you have whole companies giving you a hard time instead. And although maybe I'm missing something with the 'sales channel' terminology, aren't you going to have to get out there and plug your product one way or the other?
Fri 16 May | Albert D. Kallal | Sometimes that package can be royalty free also. codebase is such a library http://www.codebase.com/ Albert D. Kallal Edmonton, Alberta Canada kallal@msn.com http://www.attcanada.net/~kallal.msn
First to Market | Fri 16 May | anonymous
Recently I was thinking about the fact that many managers and executives will rush products to market just to be first. Although Im sure cases exist where products that were first to market now dominate the market, I really cant think of any. It seems in most areas that a few companies will bring out similar products and then eventually one company will learn from all their mistakes and release a product that eventually dominates the market. Can anyone think of products that benefited from being first to market?
Fri 16 May | billm | Ebay was not necessarily the true first to market, but they were the first acceptable player to market. In a business like auctions, with important network effects, being the first viable player does matter. If there are not clear cut network effects, it is much less important. Just remember that in any case throwing out a product that does not meet customer needs just in order to be first will not work.
Fri 16 May | S. Tanna | Along time I go read some books by Al Ries, 22 Immutable Laws Of Marketing, Focus. In these books there are lots of examples of being first winning - but I seem to remember they are all like beer, aspirins, etc... I do remember he attacks the idea of building a better widget which is the route most companies attempt to follow. Perhaps it does not apply to computers, at least not in the long run, as we throw out so much stuff, and start over every few years. Additionally the market leader of a few years ago would almost automatically assumed by a lot of people to be obsolete. If WordStar or VisiCalc was suddenly came out with a new word processor/spreadsheet, I doubt most would even look at it, no matter how good it was.
Fri 16 May | WW | The Apollo 8!
Fri 16 May | Nat Ersoz | Apollo 1. Lessons of rushing to be first to market.
Fri 16 May | Marc | Do you know who the 1st person to fly across the Atlantic ocean is? How about the 2nd person? Didn't think so. But what about the 3rd person? Do you know who that is? Well, how about this one; who was the first woman to cross the Atlantic? I'll give you a hint, she was the 3rd person to cross. :) The point is (and this comes from that book of 22 mentioned above), they only remember the 1st. If you can't be the 1st in your category, then you need to make a new category.
Fri 16 May | Nat Ersoz | Who remembers Xerox PARC? Almost noone.
Fri 16 May | S. Tanna | Do you remember the first spreadsheet (VisiCalc)? Do you use it today? Do you buy upgrades for it? Do you remember the first popular [which I also remember is one of the restrictions in the book - it's no good being first if nobody ever hears of you] word processor (arguablly one one of WordStar or Wang or WordPerfect) ? Do you use it? Do you buy upgrades for it? I just don't think the first logic works, if you basically expect to throw the whole kaboodle out every few years.
Fri 16 May | Stephen Jones | Xerox PARC was uneconomical to release, or so the bods at Xerox decided. It wasn't first to market; it never got to market. Uhh, who invented the internal combustion engine? A certain Mr. Otto, but the first practical engines were bought to market independently by a Mr. Daimler and a Mr. Benz, whom you may have heard of. Marconi might be in Chapter 11 now but it has sure had a good run for its money, and wasn't it Eddison who founded General Electric? And why do you tnink US telcos are called Baby Bells? What was the first industrial strength relational database? Oracle. And the first portal cum search engine? Yahoo. And there are plenty of companies that get the market cornered and then lose it. We would all be running Apples if Apple had been prepared to allow cloning; it prefered to go for high profit margins over market share, however. Netscape got busted by a combination of illegal bundling and its own stupidity (by refusing to allow a modular Netscape it forced all developers to use IE). Word Perfect had the market and lost it somewhat unjustly to Word, not because Word was better, but because Excel was better than the equivalent spreadsheet program. GSM is the standard everywhere else but the States and Korea, not because it's technically the best (it isn't) but because it could be deployed quicker so everybody took it up and phone manufacturers could profit from economies of scale.
Fri 16 May | X. J. Scott | Interesting to see these two things finally put together in the same thread. I suppose the reason Xerox PARC is mentioned because it is commonly assumed that the graphical user interface was invented there. However, this is not true. The graphical interface, including menus, windows, and direct manipulation of the screen, was invented and put to productive use in the flight evaluation systems built in the aftermath of the Apollo 1 disaster. This (and other improvements) allowed evaluation of flight data to be reduced from 6 months to under a week, enabling lessons learned from one flight to be applied to the next. It also enabled much data that was unusable before to be recovered. This vastly improved the quality of the design improvements and the speed at which they were implemented, allowing the United States to be the first and only society to send men to visit the moon, which was not only the most astounding technical achievement of all time, but centuries ahead of its time and also the only engineering project of its size ever to be successfully completed.
Anyone use Multiple Inheritance? | Fri 16 May | Not Telling
Has anyone here ever used Mutliple Inheritance in a real world project? What language did you use? What was it useful for? I have never seen multiple inheritance used on any of the C++ projects I have worked on, and at most places the coding standards pretty much forbade its use. But surely someone out there is/has used it?
Fri 16 May | Paulo Caetano | I've made limited use of it in C++, to simulate interfaces, i.e., no data members, only methods. Worked like a charm.
Fri 16 May | Not Telling | Sorry, I should have been clearer. I am talking about full blown implementation inheritance (data + methods), not interface inheritance, which of course is the commonly used form of multiple inheritance in C++.
Fri 16 May | Mike Swieton | IIRC, the C++ iostream libraries use multiple inheritance. I also recall reading on a 'reliable' source (slashdot) that the author regretted his choice of using MI. Personally, I'm perfectly happy with being limited to single-inheritance plus interfaces.
Fri 16 May | treefrog | Yes, we use it all the time in a fairly large scale network simulator, especially combined with templating. It does just what it says on the tin! For example, we might have a particular cellular telephone interface (not a coding interface, but say a radio connection between a handset and a base station). This is a radio connection, which can be templated based on the channel characteristics and direction (1st inheritance), but at the level we are looking at, we consider it as an instantiation of a certain protocol (2nd inheritance). It would take quite a long time to explain in detail, but it does work very well. It isn't that hard to do and keep track of really. That said, I'm getting very jaded with C++. I've been doing a lot of ruby lately ( www.ruby-lang.org ). I find that ruby's single inheritance mechanism plus mixins of modules provides a really powerful inheritance framework best regards, treefrog
Fri 16 May | Katie Lucas | I use MI all the time. I find the trick to having happiness result is a number of small, specific lightweight mixins that you blend together. You keep the inheritance trees relatively shallow. In some projects more than half the useful classes I create end up being blended classes like this - I like the freedom to have, say, Serialisable, be something I can go around painting into objects, rather than have it be a property of some root class that All Other Classes Must Descend From. Most places do ban it, but if you look closely at their code you find they don't actually do much inheritance at all. Scary. It's all based on this religious belief that they once heard someone say that they'd heard it said that MI is dangerous. Not because they've anyone around who's ever tried it.
Fri 16 May | Bill | take a look at MS's ATL -- MI is used all over the place (and works quite nicely, too)
Fri 16 May | Brad Wilson (dotnetguy.techieswithcats.com) | Yep, +1 for the 'mixin' philosophy. I saw it used with great success in ATL and adopted the usage model. Now I'm in C#, so no chance to do it. Oh well... :-p
Fri 16 May | David Basil Wildgoose | Multiple Inheritance works well in languages like Eiffel. Languages without it (e.g. Java) disparage it in order to try and hide their own shortcomings. Take a look at some of the libraries at: http://www.gobosoft.com/
Fri 16 May | Dan Shappir | MI is a useful idiom but comes at a price. Some examples of the usefulness of MI: 1. Combining the functionality of orthogonal object hierarchies. 2. Mixings as has been described (to an extent this is a special case of the previous item). 3. It has been shown that exception hierarchies are best done as a 'forest' rather than a single tree. Basically, if it makes sense to have multiple interface inheritance then it also makes sense to have multiple implementation inheritance. As I said, this feature does carry a price tag, which is why some languages leave it out (and some developers don't use it with languages that have it). For example, there is the issue of inheriting the same implementation several time through several base-classes (C++ virtual inheritance et al). You also have alternatives to MI such is the delegate design pattern. However, there is no doubt that using MI in a language that supports it is significantly easier than the alternatives.
Fri 16 May | raindog | In C++, I use it for mix-ins. In languages that have more elegant support for mix-ins (e.g. Ruby), I have never seen a need fo MI.
Lego Computer | Fri 16 May | Justin
Heres a bit of fun for a rainy Friday morning: http://cgi.ebay.co.uk/ws/eBayISAPI.dll?ViewItem&category=171&item=2729209921 [originally from The Register]
Fri 16 May | Simon Lucy | Its a very, very wet Friday morning.
Fri 16 May | LegoGames | http://www.lego.com/build/junkbot/junkbot.asp?x=x&login=0 Junkbot: for those never ending conference calls.
Creating Wave (.wav) Files, sound theory | Fri 16 May | Here Th. Ere (e-Very where)
Hello everybody. I have found so much advice here that I thought I might give it a try myself. I am trying to write a program that can write .wav Files. The instruments should be generated by the program. First, I thought, that should be possible with something like y(t) = a1 * sin(w*t) + a2 *sin(2*w*t) + a3 * sin(3*w*t) Although I am able to generate tunes this way, the instruments sound very boring. Also, its almost impossible to generate something that sounds like a snare, hihat and so on. Searching the internet, I found out that there is much more to sound theory than that formula. Unfortunately, these pages go in deep details on things that require a degree in physics/maths and also much experience on the field. I dont know enough about physics, so I want to ask if there is a website, or source code, that does explain what I need. Id also appreciate if someone pointed me to a site where I can download free wav samples of instruments in order to analyze their wave shape. Any help is appreciated
Fri 16 May | Simon Lucy | Did MIDI die?
Fri 16 May | Alyosha` | Most sounds are not simple sine waves. Wind instruments tend to have sinusoidal waveforms since they operate on the principle of simple resonance in a tube, but a guitar, for example, looks more like a triangular wave, because that's the shape of a string as it is plucked, and percussion instruments have very random waveforms. In music, this is refered to as the timbre of the sound. If you read into signal processing, you'll learn that all periodic wave forms can be written as the sum of many sine waves, each with a different frequency. For example, a triangular wave at frequency w is actually a sine wave at frequency w, plus a sine wave at three times the frequency and a one ninth the amplitude, plus a sine wave at five times the frequency and one twenty-fifth the amplitude, and so on to infinity, or a reasonable approximation thereof. It's often easier to think in terms of frequencies instead of waveforms -- a triangular wave at 440Hz has frequencies at 440, 1320, 2200Hz, etc. These are called 'harmonics'. More complicated waveforms can be composed of thousands of frequencies. Even a random looking waveform, such as a percussion beat, will show some structure if looked at as a sum of frequencies. For example, a high-hat sounds very tinny because it is composed of many high-frequency sounds, whereas a bass drum has many low-frequency sounds. Another thing you have to keep in mind is that sound evolves over time. When a note is first hit, for example, it will be unusually loud for the first hundred milliseconds, then hit a plateau, and then slowly fade. To a simple approximation, you can program a sound 'envelope' in which the amplitude rises to an initial high value (attack), then drops to a plateau (decay), maintains that plateau for an interval (sustain), and then eventually dies out (release). This is referred to as an ADSR envelope. Of course, real sounds are a lot more complicated than that, but adding this as a rough guide will add more depth to your sound. Also, sounds evolve over time, not only in loudness (amplitude), but also frequency (pitch). Even though the primary tone of the sound may stay constant at 440Hz, the higher frequencies (harmonics) may decay, rounding a triangular wave down into a sine wave. A close look at the frequency spectrum of a real instrument will give you a better idea what real music is composed of. This is very complex. Many synthesizers don't even try to mathematically generate sounds, but rather simply play back recorded sounds at altered frequencies. Still, hopefully this will give you some ideas as to how to add some depth to the sounds you are generating.
Fri 16 May | -tim | If you want delve deeper into the interesting subject of digital signal processing, I'd recommend either Richard Lyons 'Understanding Digital Signal Processing' or Steven W. Smith's 'The Scientist and Engineer's Guide to Digital Signal Processing' which, by the way, is accessible for free here (http://www.dspguide.com/). Both are excellent introductory texts. They're very well written and provide easily understandable introductions into the field. Neither is an 'easy read' in the sense that you can just tear through in an evening; it helps to have pencil and paper and something like gnuplot at your disposabl while reading it to play around with the examples, which, of course slows down reading. But it's definately possible for a technically interested non-mathematician to gain a solid understanding of the topic from either of these texts. Neither of the provide any specific pointers to *.wav, but you can find specs for those at wotsit.org. As for *.wavs of specific instruments, I'd just digitize them myself, you could try recording the aoutput of your computers MIDI device, audio_out->audio_in. Depending on your soundcard's MIDI processor, the result will sound nothing like the intended instrument, but saves work looking for samples and isolating them.
How should I arrange my new small 1BR apt? | Thu 15 May | Anon for today
I am single, and moving into a SMALL 1BR apartment. 550 sq ft. The living room and Bedroom are basically the same size. (12x12) I do not have many people over, so I dont need an entertainment living room. Living room: I just need to have 1 sofa and a LZboy recliner. I will forgo a coffee table to avoid getting cramped. Bedroom: A double bed, and some kind of dresser. I have a dual monitor setup, and I would like to have a new corner desk... The question is, where do I put the PC desk/office? One setup can be living room/small dinette and bedroom/office ..... Or do I forgo the dinette, and put the PC desk with the living room? Again, people do not come over much, and I dont watch too much TV. In my apartment, I generally use the PC and the bed. I fear that if I put the PC desk in the bedroom, I will always be in that room, and the living room will never be used. Reading this, I think I am moving into too small an apartment. Shit.
Thu 15 May | Gwyn | I think you may be moving into too large an apartment; if you only had one room you wouldn't have this predicament. And indeed you said you only use the PC and the bed which implies that you only need the one room! My home office is about 12x12 and I reckon if I got rid of the second desk a sofa and TV would easy fit in. I've also got twin TFTs which helps. My machines are permanently on so I couldn't have them in my bedroom.
Thu 15 May | Stephen Jones | 550 ft shouldn't be too small unless they've included the common parts in that 550ft (a common trick in some parts of the world). 40-55 square metres is fine for a single person depending on how it's designed. You don't really have a choice. Bedroom/office and then, unless the kitchen is large enough to turn into a kitchen diner (which it ought to be since you've only mentioned 288 square feet) you have a dining room cum living room. I'm in a one bedroom apartment at the moment and that is the setup (though I do have a large living/dining room).
Thu 15 May | Anon for today | Well, there is only a narrow alleyway kitchen, so the dinette table (if any) must be part of the living room. To be honest, living room/dinette/PC desk all in 1 room may not fit...... There is a bit of an entry hallway that is somewhat wasted space. I think I can keep my bicycle and file cabinets there, (regretfully an unsightly way to enter the apartment.) The question remains, Should the computer desk be a part of the living room or the bedroom? Unless...I split the 'office'. PC desk in one room. File cabinets and 'work desk' in another?
Thu 15 May | Ken Klose | Maybe you should invite people over more often.
Thu 15 May | Anon for today | This is a serious posting. Does anyone take issue with putting your PC in the bedroom? I feel this 'lack of seperation' could become unhealthy, as one can always be lured to get back onto the PC. I also have concerns about spending 90% of my time in one tiny room. Who knows if that has some side-effects. Again, I'd like tpo hear your experiences.
Thu 15 May | Stephen Jones | As you have no room for the dining table in the kitchen, you will have to place it in the living room, which means there is no room for the PC there so, it goes into the bedroom.Any further argument is moot. You may find that your sexual partners get annoyed when you break off in mid -climax to check your email. The solution is to always use their flat, or have a convertible sofa in the living room.
Thu 15 May | Mike Gamerland | Keep the dinette table for eating and writing. Put this into the corner of the bedroom or living room. When not in use it can be the 'tv chair' http://www.mypce.com/product/peacemaker/peacemaker.html
Fri 16 May | X. J. Scott | It sounds pretty small to me. I had this problem once while in a studio apartment (1 room + kitchen) in college. The only solution was to make the 1 room an office/dining room and sleep on a mat on the floor. When I got up in the morning, I would put the mat in the closet. Later, when I hit the big time and was making $6/hr designing high-performance chips for a big name company (Zilog), I upgraded my living space to a two bedroom apartment + good sized living room. I think 700 sq foot total and a nice view of the ocean. I got a real bed for the first time which was quite nice and the 2nd bedroom had the computer and bookcase. I don't think I would feel comfortable having all that you describe in a one bedroom. Could you get a different apartment?
Fri 16 May | www.marktaw.com | Sounds like a prime candidate for Object Oriented Design... Christopher Alexander did write a book on architecture & design, not programming after all. Here are some questions. Maybe the answers will help you figure out what is you really want. What kinds of areas appeal to you? Where do you migrate to in public spaces? Do you sit in the corner seat on the subway or the center seat? What about the library or restaurants? Do you watch a lot of TV? If so, do you like to relax on the couch while you watch TV? What about when you're in bed, what do you like around you when you're in bed? A radio? A TV? Do you ever watch TV in bed? Do you ever eat or read in bed? Cloudy day in the mid 60's: Outdoors or Indoors? What type of sun does your apt get? Morning, Noon, Afternoon? Where do you want to be when you get that sun? What will you be doing? Where do you not want sun?
Fri 16 May | Gwyn | I didn't actually mention that I think you should reserve the bedroom for bed related activities. If it were me I would want the divide. Are you sure you need a dining table? Despite 3 eating tables in my house I normally end up eating on my lap or sitting at my desk.
Fri 16 May | Frank | How about getting a notebook and a wireless network, then you can move between your two rooms as you like....
Fri 16 May | Stephen Jones | People who consider this apartment small must have been pretty lucky. I lived in various apartments in Spain over 15 years and reckoned that 550ft was fine. I did have two apartments that were 400 and 450ft but they were exceptionally well-designed.
Fri 16 May | Just me (Sir to you) | Move all 'activities' in to the dinign/living room/office. Keep the bedroom reserved for sleeping/sex. If arrangements become to cramped in the 'activity' room, move storage space out to the bedroom as much as possible.
Fri 16 May | | Why should he reserve the bedroom for sex? You can have at least as much fun in the other rooms you know (though lino is hard on the knees).
Fri 16 May | Simon Lucy | This thread is rapidly approaching fantasy land for an old married guy like me. 550 sq ft... all for me?
Fri 16 May | anon | I've lived in two different one bedroom apartments and had both setups. I definitely prefer having a computer in the living room over a computer in the bedroom. For one it lets me have the TV on while i'm on the computer, or look something up quickly (IMDB) while I'm watching TV. Also today's computers get kind of loud with all of the fans in them, so you wouldn't want that in the bedroom (unless you turn off your computer at night anyway). Having a computer desk with a hutch lets you organize yourself vertically without taking up as much floor space.
Fri 16 May | Just me (Sir to you) | Allowing for sex in the bedroom does not imply prohibiting it anywhere else. I hope you are not a developer.
Fri 16 May | Seeker | A couple ideas: Get rid of the dining table. Try tv trays that you can stow away if you need a surface to eat on. If you want to really optimize your bedroom space (for other activities such as excercise, yoga, whatever), try bed alternatives, such as a murphy bed (which folds up against the wall), a day bed, a futon, etc. I highly recommend keeping your sleeping space separate from your working/computer space. The bedroom should be a place you associate with rest/relaxation. Also, depending on closet space, you may be able to stick dressers / storage bins for your clothing in the closet... to have some extra space. You may want to get a big mirror to make the place feel bigger. That's it from me.
Fri 16 May | David Clayworth | When I moved into a 1 bed flat, I managed to buy a solid wood gate-leg dining table for about 50 pounds. When fully folded this went down to about 5ft x 10 in (and pretended to be a sideboard). When fully unfolded it was 5ft x 7ft, easily big enough for four or six people to eat. Even though I'm now in a three bed house with an enormous dining room, I still have it as a backup table.
Fri 16 May | Steven E. Harris | > Christopher Alexander did write a book on architecture > & design, not programming after all. *A* book? On architecture? Keep reading. http://www.patternlanguage.com/bookstore/bookstore.htm http://www.patternlanguage.com/archive/archive.htm
Fri 16 May | NathanJ | I used to live in a similar sized apartment. I put the office/computer stuff in my living room. I had a heavy duty desk that could support a lot of weight. Don't go for those wimpy $200 particle-board things from OfficeMax. I'd try a used office furniture store myself to find one (I got mine for $25 from an office liquidation sale). On top of the desk I put a set of wire shelves that hold about 1400 lbs. You can get them at Target/Elements and other places. So anyway, I basically put my computer/desk/stereo/TV against one wall and stacked them all. It worked out pretty good.
Fri 16 May | Li-fan Chen | I find distraction wastes space. If you have a friend watching the TV while you are trying to catch a nap or do some reading. Or if your computer is humming away near by while you are trying to watch a quiet movie. If you can design partitions or snip the noise/distraction at its source you'll find your living space much more bearable. I recommend passive techniques like distancing the computer from the living room or sleeping space and washable silicon ear plugs. A pair of nice $50 head phone with extra long cord will do more for you than you can imagine. It cuts sound as well as replacing that silence with something gentle and pleasant (Metalica or Enya or Tibetian chants or NORAD signal relays???).
Fri 16 May | Anon for today | Thanks for all the replies. I am leaning towards putting the desk/office with the living room. I like the idea of seperating work and sleep. The idea of always being in the bedroom doesn't appeal to me. I do not watch TV, and I spend a decent amount of time on the computer. And yea, I doubt I'll use a dinette table very often. I will forgo that for now, until I see how the essentials are spaced out.
Fri 16 May | Anon for today | http://www.furniture.com/Common/RoomPlanner/
Pentium 4 Hyperthreading | Thu 15 May | mov ax, es:[di]
Anyone with a Pentium 4 3.06GHZ+ care to comment on how much of a performance boost they see? Has anyone made use of this technology? or is this the operating systems job? or the compilers job? If it is the compilers job I wonder if the .NET CLR makes use of it or any other compilers for that matter? Isnt this just a trick to make it appear that applications are processing faster?
Thu 15 May | Tim Sullivan | I've got the 3.06, and it's fast like a greased monkey. I find that I have no delays at all while running many programs, though that may be just because the processor is so freaking fast. I'm satisfied, but I didn't pay for it, per se. :-)
Thu 15 May | Brad Wilson (dotnetguy.techieswithcats.com) | I've read 0-20% performance increase with hyperthreading, depending on the application(s) you're running. I've also heard that in a few rare circumstances, you actually lose performance (although I don't know what the key factor was there).
Thu 15 May | Mitch & Murray (from downtown) | The OS (XP) takes care of it for you - you don't have to do anything. Each CPU looks like two to the OS - the task manager shows two distinct CPUs for each actual chip. A friend of mine has a dual hyperthreaded Xeon so his task manager says he has four CPUs. He's had the thing a month and he still isn't tired of telling me how fast it is.
Fri 16 May | Christopher Wells | The last time I looked, Intel's compiler is compatible with Microsoft's; can compile faster code; is also better at generating code which adapts to or is suited for whichever Intel CPU.
Fri 16 May | Albert D. Kallal | Hyperthreading can boost performance by quite a bit in some cases. Here is two articles on this: Intel's Pentium Performance Hangs on a Hyper-Thread http://www.tomshardware.com/cpu/20021202/index.html Hyper-Threading On The Desktop http://www.hardwareanalysis.com/content/reviews/article/1557/ Albert D. Kallal Edmonton, Alberta Canada kallal@msn.com http://www.attcanada.net/~kallal.msn
Fri 16 May | Azazello | This must be the shortest write-up produced by Albert! :)) Albert, please don't get upset; I respect you a lot and enjoy your thoughts!
Fri 16 May | Wayne Earl | Where hyperthreading slows the application down is in heavy mathematics computation. While the hyperthreaded CPU appears to be two virtual processors, there is still only one FPU - and they have to share it. I recently began a new position where we build large linux-based clusters, for labs and universities. The very FIRST bit of training I recieved - ALWAYS turn of hyperthreading in the BIOS, and let the customer do application profiling to decide if they see a performance increase or decrease. More often than not, with what they do, there will be a performance decrease with hyperthreading turned on.
usability of SSL web apps? | Thu 15 May | Will Glass-Husain
Hi, Any advice from the field on this one? I just installed an SSL certificate on one of my servers. Several customers require SSL encryption when viewing their data. The servers host a variety of applications. Should I enable the SSL on (1) only the ones with highly confidential data (2) the user / login screens of all apps (3) all of the screens of all apps? Im trying to figure out the pros and cons. The other option is to give the user a choice. Yahoo Mail does this with a discreet standard and secure hyperlink above the login button. But why would you choose non-secure? WILL
Thu 15 May | eclectic_echidna | > But why would you choose non-secure? Because non-secure is the default choice, and I am a stupid user and I don't know any better. -- ee
Thu 15 May | Philo | Some people are behind a firewall that blocks the SSL port. Philo
Thu 15 May | pb | I'd pick one or the other and go with it for everything.
Thu 15 May | Wayne Venables | SSL pages typically load slower and put more stress on your webserver (and the client).
Thu 15 May | HeWhoMustBeConfused | Our CGI applications, when tested over dial-up, ADSL and Cable connections, have no discernable user response time difference between SSL and non-SSL sessions. There is a slight degradation in service process performance, but this is in the order of milliseconds. Again, largely ignorable when assessing the impact of SSL. All our server-side code is written in C. Our web servers are (usually) IIS in production environments, and Xitami for development and demonstration purposes.
Thu 15 May | Brad Wilson (dotnetguy.techieswithcats.com) | One gotcha to consider is whether you're planning on having documents that open directly into the browser. Some applications that dynamically stream the content (like, say, Adobe PDFs or QuickTime) might not support https, and if they're doing their own HTTP, you may also not get your cookies (meaning, possibly, no session data and therefore no correlation to a valid login).
Thu 15 May | Danil | A variety of user agents react poorly to mixed content. http://www.whiterose.org/cluey/archives/002841.html http://www.whiterose.org/cluey/archives/002918.html Just one more thing to worry about.
Fri 16 May | Darren Greaves | Secure connections are not cached at all, this can slow things down quite a lot (especially for repeat visits). This is probably only noticeable on a dialup however.
Fri 16 May | Just me (Sir to you) | Be carefull with the 'SSL only for login' option (2). Sometimes sites make the mistake of using 'Basic authentication' (clear text username+password) protected by SSL for the login page, and switch to plain HTTP for the rest of the site (still under Basic authentication). Of couse they forget that the browser will still be sending the username + password for every request to that site.
Fri 16 May | Li-fan Chen | You can switch between secure and non secure pages if you like. Partition it carefully though. For example. Most web applications have session management, and if your cookies are holding on to plain text session IDs.. and these IDs literally will let someone hijack a highly sensitive privilaged operation (spending money at a online bank for example).. and direct himself into a SSLed transaction with your session key--then you lose. In the everyday fast paced web development we do everyday, we are presented with a threat model that leaves little room for good protection for session keys without the help of SSL.
Fri 16 May | Li-fan Chen | Sensitive data presented as pictures .. dynamic or static.. needs to be served over HTTPS, but other jpgs and gifs declassified can go over HTTP.
Fri 16 May | Brian | HeWhoMustBeConfused: Why do you use different web servers for production and development? I realize CGI should be platform independent, but why introduce another variable when you don't need to? What's the benefit of developing on Xitami?
Fri 16 May | HeWhoMustBeConfused | Brian: Frankly, we'd prefer to deploy Xitami in production, but our customers are banks and won't look at anything that doesn't have big names associated with it. We write our software to conform to established standards. CGI is really quite simple, and almost any web server can support our products. We like Xitami because it is small, simple, well supported, and it just works. It is great for demonstration platforms because of its low memory consumption and simple installation. Ah, the money customers waste. We have a similar issue with database management. Our development servers are Adaptive Server Anywhere (Sybase) and Firebird (OS derivative of Interbase). These are great products which will support thousands of concurrent users of our application. They are low cost (or free, in the case of Firebird). But when the IT departments get involved in the selection of our software they INSIST on a DBMS such as Oracle, DB/2 or SQL/Server. Sure, we work with these produts, but the organisation throws away tens (hundreds, in some cases) of thousands of dollars on un-necessary bloat. The usual argument is based around support, ie, 'We are an Oracle shop and we need to be able to support this software'. Well, in over six years of application deployment in more than thirty customer sites, not ONCE has anyone from a customer IT department done any 'support' associated with the DBMS. And the only 'support' for the web server has been to patch repeated security holes, in MS-IIS installations. And some IT managers wonder why they have a reputation for wasting money ...
Opera | Thu 15 May | John Topley
Who else here is viewing this site using Opera? I downloaded the latest version (7.10) a few days ago and am very impressed. Mouse gestures are so cool! Its only when you switch to something like Opera that you realise that Microsoft havent done *one thing* thats interesting with IE since they captured the browser market. I tried Opera a few years ago and wasnt really impressed but the latest version is definitely cool.
Thu 15 May | Li-fan Chen | Mouse gestures? What's that?
Thu 15 May | John Topley | See http://www.opera.com/features/mouse/
Thu 15 May | Gas prices are finally down a bit | Why buy opera? For mouse gestures?
Thu 15 May | A Random Software Engineer | Mozilla has them too, and tabbed browsing. Be careful thought, you'll become addicted before you know it.
Thu 15 May | van pelt | Opera has configurability out the wazoo, including the ability to block popups and identify itself as other browsers, both of which come in handy. And you don't have to buy it if you can tolerate the ad banner. I've been using opera for two years now and I like it an awful lot. The configurability has spoiled me rotten.
Thu 15 May | mackinac | Does it crash as much as Mozilla/Netscape 7.0 ? I do like the tabbed browsing, even if they didn't do it right.
Thu 15 May | A Spacebar | >> 'even if they didn't do it right' According to you? And you are?
Thu 15 May | Adrian Gilby | I love Opera. Mouse gestures are the sort of feature that initially seem unnecessary, but quickly become so useful you wonder how you ever did without them. The tabbed browsing is great, and it hardly ever crashes.
Thu 15 May | DJ Kent | I also use Advanced Web Browser that I found on www.download.com - it's pretty cool, and freeware.
Thu 15 May | Phibian | Looking at the mouse gestures, many of them are built into my mouse. Eg. Why would I click and drag to go forward and backwards, if I can just hit the button on my mouse? I love my mouse :)
Thu 15 May | Sam Livingston-Gray | I use Opera (v6) on my PC and Safari on the Mac, and I do sorely miss the mouse gestures when they're not there. They're such a cool idea that they make me want one of those TouchPoint gesture pads. (= Of course, I got excited about the interface scenes in Johnny Mnemonic and Minority Report, too... And mackinac, Opera crashes once in a great while, but the nice thing about that is that when you relaunch it, it opens up all the windows you had open when it crashed -- *so* nice if you commonly have about 8-10 browser windows open.
Thu 15 May | Philo | [nod] to Phibian - I use a four-button mouse, and the thumb button is always configured to [backspace] (which is the 'page back' command on IE) I get *so* twitchy when I use someone else's machine and it's not there... Philo
Thu 15 May | . | StrokeIt is an excellent program for mouse gestures across any app: http://www.tcbmi.com/strokeit/ My colleagues all wonder why I trying to draw strange C shapes with the mouse when I want to close a window on their machines - it is so much easier than reaching for the keyboard or trying to hit that little X shape.
Thu 15 May | anonQAguy | to answer one poster's question, I often view this site on opera on a redhat box. But, if that's about 60% of the time, the rest of the time is about evenly split across IE 5.5 and Mozilla (both on linux and W2K). There's no really hard and fast reason for that distribution other than perhaps the way I have my machines arranged around me both at work and at home (btw - you want to go through some withdrawal symptoms sometime, try limiting yourself to only using one 1024x768 monitor for everything you do after having been used to working across 3 - 4 machines! Never realized how spoiled I've become! ;-) I've found Opera's javascript support to be pretty bad, but that's only an issue on some sites, and doesn't seem to be a problem on JoS. Mozilla (now at 1.3x stable, I believe) does much better with js. From what I've read, the latest Opera version improved its js support somewhat. I haven't checked out the latest opera tho. some features I particularly like about Opera since 6.x are: tabbed browsing, configurability (e.g. the pop-up blocking), and in particular the ability to save a specific configuration to always start with, or have the choice of restarting where I was when I last closed it, it's small size and its speed, both of launch and operation. I think they've done a good job with Mozilla 1.3x, but it's still pretty slow compared to opera on the same box, and while they have tabbed browsing, I really miss the ability to store a specific set of tabs or save where I was when I close like I can with opera. Though the general public is unlikely ever to give a damn about it, I've found the DOM Inspector very handy when testing sites or constructing tests where I have to extract values out of a page. Pretty esoteric, but it's handy for me. I don't even want to think about opening Netscape on a linux box -- it's been a POS as far as I'm concerned for some time -- way, way too slow and very unstable, but to be fair, I haven't looked at NS on a linux box since 4.76, which is pretty old. When I do analysis of our clients' log files to see what the breakdowns and trends are with respect to the useragent usage, I keep watching eagerly to see Opera numbers start to show some life, but so far, they're still completely insignificant, along with post-4x Netscape versions and Mozilla.
Thu 15 May | Stephen Jones | ------'Does it crash as much as Mozilla/Netscape 7.0 ?'------ I use Netscape 7.0 on W2000 and it doesn't crash ever.
Thu 15 May | mackinac | I use Netscape 7.0 running on Windows NT and it crashes a lot. The crashes are not random. There are particular web pages it doesn't like.
Thu 15 May | pb | Mouse gestures aren't that neat. I tried to use them for a few months and found them irritating and of little value.
Thu 15 May | www.marktaw.com | I just downloaded the latest Opera and I like the things they've added... Like being able to add notes as you browse and keep them like bookmarks. I've liked Opera for quite a few versions now and it really just keeps getting better. Bravo to everyone at Opera Software. 7.11 just came out, btw. The only issue I've ever had with Opera is that it won't create a new window if you're running low on Memory, while IE will... Then again, if you're already low on Memory maybe that's a good thing! I like the skins too. Any time someone takes the time to create their own interface that doesn't look like a Visual basic app it tells me that they're doing more at the core of the application than other people.
Thu 15 May | Wayne | >>...Microsoft haven't done *one thing* that's interesting with IE since they captured the browser market... I have to disagree with you there. Most of the newer innovations have taken place under the hood of IE (in the DOM). The reason for this is to make it easier for developers to develop applications with IE, which in turn drives it's popularity. For instance, Databinding (Mozilla still can't do this, can Opera?) is one of my favorites. IE4 had it but it's gotten steadily better through the versions. There have been many updates to the DOM over the past few years, which is why IE is the developer's choice. Granted, these are not consumer features but the extensability model of IE is built so that you can add things like this if a 3rd party felt it would sell.
Thu 15 May | Nat Ersoz | Side note: I just started using Mozilla as my work email reader (IMAP against a MSFT exchange server). Evolution was _horrible_, so I decided to try the Mozilla reader 1.4.1 beta. The spam filtering is so cool. After a few hours of marking spam in my subscription lists, almost all the spam is now filtered into the spam folder. I cannot describe the satisfaction of it all. It seems to work rather well, and I started marking other things as spam. Out of Office messages, and some other mails I'd rather ignore that arugable are not spam. Very nice.
Thu 15 May | Philo | You can get Bayesian filtering with any mail client by getting PopFile, which runs as a proxy server and is amazingly configurable. Philo
Fri 16 May | Augusto | I switched from Netscape to Opera mid-2000. Never used IE.
Music | Thu 15 May | The Real PC
As I write this I am listening to music I would never listen to voluntarily. I asked the guy to please use headphones and he said no hell just turn it down. I can still hear it. I wouldnt mind so much if it were a style of music I can tolerate, but it isnt. The problem might eventually solve itself, since his cubicle is right outside the managers office, and maybe hell shut it off when the manager gets back. My ears are kind of sensitive and Im also very particular about music. If he doent stop, and if no one else complains, I wonder if I should ask him again to get headphones. By the way, this guy is well known for being obnoxious. Until recently, he had a private office so no one would have to listen to his loud phone conversations and other obnoxious sounds. But they needed his office space so stuck him back in a cubicle (near me, unfortunately). I dont mind his long and loud personal phone conversations, but I doubt Ill ever get used to this kind of music, no matter how low the volume.
Thu 15 May | Ok? | Drag his dumbass outside and beat the sh** out of him.
Thu 15 May | Nat Ersoz | Second the motion.
Thu 15 May | Ged Byrne | If the style is anything other than classical, then sound him down with some Beethoven. You may not like this music either, but it should have him insisting on headphones in no time.
Thu 15 May | GiorgioG | I third the motion. Although you could just piss him off by installing prank s/w (random character input at random intervals, screen flip, etc) I'd probably try to have a good time with it. ;-)
Thu 15 May | Brent P. Newhall | Have you talked to your boss and/or the guy's boss about this?
Thu 15 May | GiorgioG | Wait a minute. Find the music most unlike the music he listens to and turn it UP ;-) Problem will be solved within 4 songs.
Thu 15 May | The Real PC | Talking to the boss would be my last resort, because I don't want to be known as someone who complains about everything (I already complained about the smoke and got the smoking policy changed). I don't want to start playing music myself because it is incredibly stupid to listen to music in an office without headphones, and I don't want to be known as incredibly stupid and/or inconsiderate (like this guy). I thought of getting earplugs.
Thu 15 May | Just me (Sir to you) | 'Some individuals and businesses feel that they have a right or the freedom to use a common resource in any way they see fit. Perhaps these people are mistakenly extending their own private property rights to that which is publicly owned or cared for and not exclusively their own. Perhaps they do not realize what most of us learned on the school yard years ago: 'that my right to swing my fist ends at your nose.' Or, perhaps they do not recognize the soundness of our parallel claim 'that my right to create noise ends at your ear.' In any case, these people are acting as bullies, claiming rights and freedoms that are not theirs while degrading resources that are ours.' support http://www.nonoise.org/commons.htm I feel for you Real PC. An obnoxious noise polluter can be one of the worst things to encounter. A swift kick in the nuts administered at regular intervals in phase with the beat might be tempting, but too mild a punishment. IMHO noise pollution is worse than smoking.
Thu 15 May | moses whitecotton | I see two options. 1. be glad you and he have jobs, and learn to be less sensitive. 2. Sabotage whatever device he is using to produce music. CD player , dirty it. Radio , destory speaker with a well placed paper clip. so on. Not nice but sometimes you gots to do what you gots to do. One mans opinion
Thu 15 May | Nick | Don't go to management - you'll look like a sniveling ninny. And don't get into a volume war - you'll just look childish. Instead, do the mature, manly, and responsible thing - F*** with him when he's not looking. Is he playing the music on his PC? If so, go to Radio Shack, Fry's, etc. and get some chip resistors and a soldering iron. Stay late one night, open up his box, and piggyback the resistors at random locations on his sound card. Make sure NOT to use static protection. Being a conniver is much better than being a whiner. P.S.: Maybe there's some EE's here that might have a faster, easier way to zap the sound board through the speaker jack?
Thu 15 May | Nick | moses - didn't see your post until after I made mine. I like the way you think - especially your Second Commandment.
Thu 15 May | Just me (Sir to you) | OK Moses, tell me more about the paperclip trick. Is this something subtle and untracable or just brute force.
Thu 15 May | Nat Ersoz | Actually, the speaker wires - fray them slightly at the speaker side, and take the frayed end and short the amplifier output together. That alone will mute the sound, and if you only use 1 or 2 strands of wire, might be difficult enough to notice that it will be hard to figure out what is wrong. Also, it strains the output transistors into driving a short. Older equipment will eventually die, newer stuff will tolerate the insult.
Thu 15 May | moses whitecotton | Not that I would ever do this, but a paper clip straightened and pushed thru the speaker cone, usually accessable thru the speaker grill will either make the speaker inoperable or at least make it sound very 'tinny'. ( use your anger and punch many holes for best effect and relief of stress ). Purely theoretical of course.
Thu 15 May | The Real PC | I don't know if you're being serious. Damaging the PC would get me in a lot more trouble than complaining to management.
Thu 15 May | The Real PC | What if I just go back over to Bob Noxious (yes, that's his real name) and tell him he is the ONLY person in the entire office who is playing music without earphones?
Thu 15 May | EasyLife | You have to speak the same language what he is speaking to you to get your work done else it is very hard. You don't have to say 'please' if his requestes are not accompnied by 'please'. If you are right, the best way is to continue being 'right' in such a way that you don't to be fearful for just being right. I really don't like the people who want to continue being right and still be fearful of surrounding in which they live in. What if you become wrong and not afraid and then continue being right. You want continue using your 'right' past to escpae from today's situtation, instead of building a new solution for the situtation. Challanges are there, even outside the computer box.
Thu 15 May | Martha | Do you know if other people have asked him to use headphones? If you're the only complainer, you'll also be the likeliest suspect for any sabotage. So unless you can make the sabotage look like a random glitch, don't do it. I know volume wars are childish, but I like the Blasting Beethoven method. (It has to be Beethoven, by the way, or at least one of the other Bs [Bach, Brahms]; Mozart just doesn't do the trick.) You just have to be disciplined about it; if he doesn't get the point after five minutes of 'Freude, schöne Gotterfunken', give it up and complain to a manager.
Thu 15 May | Nat Ersoz | Homygosh. You work with Bob (Rob) Noxious?? The world is a big place, and perhaps there are more than one - but you're in the midwest? Working at a large consumer electronics company?
Thu 15 May | moses whitecotton | I guess I am revealing a little of my personality type in this posting. I am not a developer , I am a Unix System Admin, I am action oriented. I assumed you had your reasons not to contact management ( which I would definately do). Thats an obvious solution that I dismissed because you dismissed. If I was approaching this problem with the information you presented. I would take it upon my self to solve the problem or not ( refer to my #1). Always remember , as my boss taught me long ago 'pick your battles'.
Thu 15 May | The Real PC | I spoke to another programmer who can hear it. It bothers him, but he likes rock music so it isn't disrupting his concentration the way it is mine. Two managers are nearby and probably can hear it. One is my boss (the big boss). If I complained to him and said I can't concentrate with Bob Noxious playing rock music, he would probably speak to him. Nobody likes Bob Noxious very much anyway. I just don't want to seem hyper-sensitive (although maybe I am) or a chronic complainer. I never complained about anything for 2 years, so they know I'm not a chronic complainer. I have a tendency not to be afraid of anyone, so I be more willing to complain than others. I can't believe no one else has said anything yet (it started yesterday).
Thu 15 May | mackinac | The long term solution is to find another job at a company that has some concern about the work environment. In the current economic environment that can be very long term, but you might as well start looking. If management won't take care of this problem, it is probably not the only thing wrong with working there. When is the manager going to return? You said Bob Noxious might use headphones when the manager gets back. Why not just wait? Reconsider your decision not to complain to management. You were successful in getting the smoking policy changed. Alternatively, if there are other nearby cubicle inhabitants, you might talk one of them into doing the complaining. You are probably not the only one that doesn't like the choice of music. When I am working I prefer quiet and don't even want to hear the kind of music that I would choose to listen to elsewhere. Don't bother asking Bob again. Obnoxious people like him seem to have a psychological need to irritate other people. In the 'it could be worse' department, at least he is listening to music. He could be listening to the Dave and Mike Show (aka Dumb and Dumber). This is a talk show that is part of an Al Queda plot to suck the intelligence out of the American office worker population.
Thu 15 May | Buford | Go back and tell him to use headphones. Don't take no for an answer. Make sure you state this loud enough so that your boss can overhear the conversation and call him to mediate if 'Bob' refuses.
Thu 15 May | doobius | dont'go to the boss. Make the boss come to you. Whenver the music bothers you, leave, do something else somewhere else. When your boss asks about your prodcutivity or availability, explain. The butthead is responsible for an expensive and potentially critical (sysadmin is can't work) problem. Make it a $ problem and the manager will quickly solve it.
Thu 15 May | tapiwa | make it either a $$ problem, or deal with it yourself. Just remove the wire that connects the speakers to the soundcard/cd player. This will solve the problem. Unless of course Bob decides that since his computer speaker does not work and he will bring in his own set, complete with active woofer. Like someone said, bring the manager to you. Tell Bob rather loudly to shut the .... up. Refuse to take no for an answer. More loudly, explain, in very basic, condescending language that you cannot work with his music blaring. Do not go on about the type of music.... that's getting personal. Suggest that while music might up his productivity, as HE will probably argue, he can still listen to his music, and not disturb other folk with a good set of headphones. Again, use very condescendig tone/language. Alternatively, when bob disappears. Set his sound to max. Next time he decides to play his CD, the whole floor will know, and so will the boss. When all else fails, I second the kick the .... out of him motion. I am rather partial to baseball bats and knee caps.
Thu 15 May | | Random thoughts... Grab him by the balls until his cubicle emits a more palatable tune. When the office is busy take his speakers and rip then violently from their connection and toss them as far as possible in a safe direction. Bash his skull with his keyboard. Politely ram your fist down his throat and rend his voice box. Remove his pancreas with a dull spoon. Ask if his health insurance is paid up. Immediately phone for an ambulance and describe to them what you are about to do to him. Stand on his desk and piss on his head. ... Ahhh!
Thu 15 May | Application Specialist | - Use the dead-animal-head-on-his-desk technique to send him a clear message of what the consequences will be if he continues. -Make voodoo doll if stupid-jerk-next-to-your-cube-music-fan and pierce them in vulgar way. -Record MP3s of yourself singing ' is a big retard.' and play them in a loop all day. -If he doesn't get it claim his first born as yours. Legal disclaimer : Do not follow the previous advices. Just cut his speaker wires when there's no witness.
Thu 15 May | Jesus | Turn the other ear.
Thu 15 May | mark | 'I was told, that I could listen to the radio at a reasonable volume, from nine to eleven, I told Bill that if Sandra is going to listen to her headphones while she's filing then I should be able to listen to the radio while I'm collating, so I don't see why I should have to turn down the radio because I enjoy listening, at a reasonable volume, from nine to eleven...' :-)
Thu 15 May | | Rotate his left ear untill it falls off... then turns his other ear.
Thu 15 May | Spam | I realize this off-thread comment will likely be removed post-haste, but Mark, your comment really did make my day. Thank you.
Thu 15 May | Sam Livingston-Gray | If you're going to get into a volume war, I suggest Wagner. While doobius' suggestion (disappear whenever it's on, then use that to introduce the idea to your manager) is tempting, in a sort of passive-aggressive way, it could easily backfire: 'Hey, why is The Real PC missing? He must not want his [cube goodies | stash o' Twinkies | job] anymore.' The real solution is to go to your manager. You shouldn't have to deal with this infantile bogosity. Schmuckboy is probably upset at being 'demoted' to a cubicle, and has nothing to gain from voluntary compliance -- quite the contrary, he's got a vested interest in being *so* annoying that he gets put back in an office. That leaves you with the choice of tolerating it, or seeking divine... er, management intervention.
Thu 15 May | Philo | I have to argue strongly against any permanent destruction ploys - quickest way to end up on the sidewalk, IMHO. If he listens to MP3's, then add a few to his playlist. There was one that went around in '98 that said, in a nice clear voice, 'Hey everyone, I'm watching PORNOS over here!' there's also one of a mad cow that's fairly funny. Or you could just record your own voice saying 'I'M LISTENING TO MUSIC WITHOUT HEADPHONES BECAUSE I'M AN ARROGANT JACKASS WHO HAS NO RESPECT FOR HIS COWORKERS.' Obviously, when putting these files in his playlist, delete existing files and name yours appropriately. ;-) The truly professional thing to do - 'Bob, I can't concentrate with your music playing. If you don't turn it *off* or get some decent headphones, I'm going to have to talk to your boss.' Philo
Thu 15 May | Emmit | Solve your own damn problems. Damnit.
Thu 15 May | The Real PC | [he's got a vested interest in being *so* annoying that he gets put back in an office.] That's how he got his private office before -- he learned how to fart at will. So he figures it will work again -- but management has changed since then.
Thu 15 May | Stephen Jones | Could it be that he was one of the smokers you screwed and is now getting his own back?
Thu 15 May | Nat Ersoz | Its Trybinski, isn't it? Spelling is off, but close...
Thu 15 May | www.marktaw.com | Get that radio shack doohicky that was in the news a while ago that aims a laser beam of sound so only the person it's aimed at hears it, and it sounds like he's exactly in the middle of whatever is playing. Hide it in the ventilation ducts, aim it at him, and choose the appropriate recordings... like an earthquake, gunshots, the boss yelling at him, firedrills... Trigger them at semi random times throughout the day when his music is too loud. That oughta train him to turn it down and keep it down. Though after that he may never want to go over to headphones for fear of missing out on a real gunshot.
Thu 15 May | | Walk over to his desk while he's there, grab his music machine, and lock it in a cupboard. He will be flabbergasted because you've called his challenge, which is what it's all about. Management will then have an issue they have to deal with.
Thu 15 May | The Real PC | [Could it be that he was one of the smokers you screwed and is now getting his own back?] They never knew it was me! Anyway, he doesn't smoke -- at least he has one good trait. I bought ear plugs on my way home and hopefully I won't hear anything tomorrow. Bob Noxious obviously feels invulnerable. Maybe he's about to retire and doesn't need a job anyway.
Thu 15 May | Kaushik Sridharan | Get your own set of headphones and listen to music that *you* like. I have found that to be a good strategy to focus, even if there isn't anybody around playing annoying music. Just the shutting out of external noise helps me focus sometimes, and it might help you too. -K
Thu 15 May | Nat Ersoz | Bob Noxious, aka Rob Try.. RealPC, drop me an email - it would be an interesting chat, I guarantee it.
Thu 15 May | realist | Be politely blunt, with a 'hint' of agro. When anyone else is around be rational and firm.
Fri 16 May | Just me (Sir to you) | 'He could be listening to the Dave and Mike Show (aka Dumb and Dumber). This is a talk show that is part of an Al Queda plot to suck the intelligence out of the American office worker population. ' Nah, it's 'friendly fire' ;-).
Fri 16 May | Just me (Sir to you) | 'RealPC, drop me an email - it would be an interesting chat' And cutt us out of the fun? Keep it coming. We can take it. Hey, Real PC. I think you are starting on the wrong path by getting the earplugs. Why should you have to suffer. You are not the one doing anything wrong. It is Butthead that needs a fix. You have the right to an obnoxious moron free workplace. Isn't there some exterminator service you can call for these types of bugs?
Fri 16 May | Simon Lucy | Interesting how all these kinds of things turn into an Arms Proliferation Scenario. You could just cut to the chase and threaten to kill his wife/children/girlfriend (sounds unlikely)/boyfriend/dog/cat/goldfish. On the other hand. You could try standing behind him and asking him to turn it down, not off, down. If he refuses, then you inform him that you are making a formal complaint in writing. Then you leave him alone. You carry through the threat if he refuses. You let the UN/management do it.
Fri 16 May | The Real PC | Yesterday I asked him to please use headphones. He said 'no, I'll just turn it down.' The problem is that if it's loud enough for him to hear, it's loud enough to bother me. I still don't understand why the 2 managers and 2 programmers who can also hear it don't mind. Unless they also like this 'rock for dummies' style of music. I don't hate any particular style of music, but I hate bad examples of any style. The rhythm of this music is so annoying to me it can give me a headache and disrupt concentration even at a low volume. If you could see this guy or hear his voice you would know immediately why he does not have a reputation for being a genius. But nothing he did ever bothered me before, and I had no judgemental feelings toward him, until now.
Fri 16 May | Brent P. Newhall | Other people may hear and be VERY annoyed, but aren't speaking up. Regarding your concern about going to your manager: Be aware that you are operating out of fear, and that is a Process Smell. If your boss is a reasonable person, s/he will *not* think poorly of you because you came to him/her with two complaints.
How To Ask Questions | Thu 15 May | Just me (Sir to you)
Were (largely) volunteers. We take time out of busy lives to answer questions, and at times were overwhelmed with them. So we filter ruthlessly. In particular, we throw away questions from people who appear to be losers in order to spend our question-answering time more efficiently, on winners. If you find this attitude obnoxious, condescending, or arrogant, check your assumptions. Excerpt from: http://www.linuxsilo.net/docs/smart-questions-en.html Many many years ago we ran a volunteer organisation that was trying to help people using computers (this was at the very dawn of the net, kids, long before the birth of HTTP). The attitude displayed above was not uncommon. What was remarkable though is that is was mostly spouted by the realy mediocre people, that were convinced they were somehow special. Most of the true wizards would meet any request, no matter how trivial, no matter that they had been asked 100 times before. They did not complain about lusers, didnt nag about efficiency or productivity. What they did do was help people out, and once in a while turn out some brilliant solution that eliminated the source of a whole series of recurring questions by improving the system, making it more intuitive, automated, user friendly. I guess there is nothing new under the sun.
Thu 15 May | Christopher Wells | I was an MS MVP on Compuserve. When they moved to the internet I dropped out: because I couldn't answer all the questions anymore: there were too many of them.
Thu 15 May | HelpDesk | there is a difference between answering a question and spoon feeding. the true wizards you refer to are probably the same mediocre guys on a different question. read the archives of any bsd or linux mailling list and you'll see some big names are both nice and arrogant depending on the circumstance. Besides, most of the true wizards stop participating in the newbie (or unresearched) questions all together. I suggest any question you have should first be entered into google; your answer would show up 9/10 of the time.
Thu 15 May | Paul Brinkley | Indeed. This missive is meant to solve the very real problem of there being many more people with questions than there are people with answers. The problem is solved with technology. If there's any arrogance at all, it's more on the part of the uninformed assuming they are entitled to a guru's personal time. Frankly, the gurus have more of a right to be arrogant (and thankfully, the good gurus aren't anyway); after all, they have the knowledge.
Thu 15 May | Nat Ersoz | The introduction of the referenced URL is self serving. It adds nothing to the content except an edge of hostility. Take off the introduction, and its not a bad document. Its only other drawback is that it revels in its own obscurity. Lest the split personality of Me/Sir pointed it out, I would never have known about it. But then again, in about 3 days time, this message also will have passed onto its own level of obscurity and was likely meaningless at its inception. Thanks for reading.
Thu 15 May | Mike Swieton | I've read ESR's Questions document before. My take on it was this: It is not meant to excuse the behavior of arrogant help. I saw it as merely an explanation. Not to long ago on a mailing list I am on, someone asked a dumb question that was covered clearly in the FAQ. The author posted the URL, question, paragraph, and sentance number so that the user could go and find it himself. Maybe he should have just cut and pasted the answer in, since he was obviously looking at the docs anyway. But I don't blame him. I agree with this: the majority of people aren't gracious enough to spoon-feed perfectly framed answers to every dumb question. If someone asks me a question that's covered in my manual, I'll ignore it, or tell them to check the manual. I should be nicer. I shouldn't promote to the arrogant attitude that much of what's freely available (forums, etc.) is abundant in. But that's just tough: I'm an ass, and I do expect people to look for their own answers, at least to the point of reading my manuals, and maybe that aint right, but I am not going to change, and niether is anyone else. *That's* what ESR's document is trying to explain. Is it representative of the same bad attitude many developers (myself included) have? Yes. Does it excuse it? No. But it can help to explain *why* it's there, and generate a little understanding, if nothing else; I don't expect sympathy.
Thu 15 May | tapiwa | My attitude is that if it is a spoon feeding question, then I don't give them the answer. I tell them where to find it. Sending someone with a google link with their question and the answer in the top five or so results is the way to go. Whatever your answer is, they will have more questions. Get them into a habit of googling first. This is more so in a volunteer organisation than in a business setting. In the latter, I answer the question, and then kindly point out that should they require more information, the best/quickest method should be to RTFM or RTFF, where these issues are covered in more detail. Sometimes folk do not know enough about a problem domain to do an effective google search. Someone knew to a topic will not know the best keyword to use in a google search. Do not spoonfeed..... point them to a google search that gives them the right answer. A classic Platonic paradox..... 'Meno:: And how will you enquire, Socrates, into that which you do not know? What will you put forth as the subject of enquiry? And if you find what you want, how will you ever know that this is the thing which you did not know? Socrates:: I know, Meno, what you mean; but just see what a tiresome dispute you are introducing. You argue that man cannot enquire either about that which he knows, or about that which he does not know; for if he knows, he has no need to enquire; and if not, he cannot; for he does not know the, very subject about which he is to enquire.'
Thu 15 May | andrew m | If you don't know enough about the problem to ask a specific question, then what you need is a decent overview - not the answer to a question about a detail. Once you have this, you can learn more about the concept you're having trouble with, and eventually will know enough to ask a specific question. Besides, if you don't even know what your question is, how meaningful will the answer be?
Fri 16 May | www.marktaw.com | A brief glance at that document makes me think that it was written by people who don't want to be bothered by people asking the same questions over and over again. 'Volume is not precision' Brevity is also the soul of wit. Nobody's going to read a 12 page dissertation on why you shouldn't write a 12 page dissertation. 'Describe the problem's symptoms, not your guesses' Their problem seems to be people who ask stupid questions, yet they're taking their own guesses as to why and how to solve them. This document sounds like it was written by programmers with extra time on their hands. if problem != solved then { goolgeSearch(query); } --- In other news, whenever I deal with musicians who are learning, I try to play guitar left handed. It reminds me of how spastic I used to be, and how far I still have to go. When dealing with newbies, a little patience goes a long way.
waiting for distributed dev | Thu 15 May | anonymous
Looking at the old outsourcing debate, I thought about a recent experience where I worked with a pal across an ocean on a tiny util, and even that failed. Basically, he wanted a not operation on a directory tree, and thought I might be interested in coding it. Simple, but he used more words than this, and I didnt get the not part, and sent him the wrong thing. Now, I know this guy down to his perversities (not particularly perverse), and still it was really easy to get a not lost in the communication. In real life, wed have exchanged a few sentences, maybe hed show me something, and I wouldve winnowed down his spec to something really easy to implement. IM is also frustrating. Diagnosing a problem over IM is an exercise in typing. Phones can be used, but werent phones supposed to be a problem in productive work environments? Many big opensource projects buy hotel rooms so people can productively hack together. I think a number of things are needed before this can work, short of VR. Broadband for vnc and broadcasted audio, tablet pcs for sharing diagrams... Am I getting the wrong impression from limited distributed dev experience?
Thu 15 May | GML | 'Am I getting the wrong impression from limited distributed dev experience?' No, you're not. I personally couldn't live without my whiteboard. I've yet to find a reasonable substitute.
Thu 15 May | Just me (Sir to you) | I think your experiences are not uncommon. Distributed development does take some getting used to. But as you yourself remark, the technology is getting better and better. Basically we already have the tech to give you a large window on your desk wall that looks out into the next office, only the office is not the next cubicle, but located on the other side of the continent. You share screens share whiteboards etc. It is not exactly 100% as 'being there' but maybe close enough? Right now this is a very expensive setup, but prices for these things are plunging as we type.
Thu 15 May | Li-fan Chen | If you don't strive to communicate your specification, you probably never had to share specs. You are always juggling between too little spec detail verses too little time to share. But if you've been burn by project delay due to reimplementation or lack of specs enough time (most of us have).. you'll learn to take that time. Code Complete from Microsoft Press talks about this.
Thu 15 May | Ged Byrne | I think this is where the heavy weight methodologies and UML comes in. They seek to provide a formal process for describing the program in its smallest detail so that the writing of code is a creativity free, methodical process that can't possibly go wrong. I think this is where the out-sourcers just don't get it. They're applying non-programming logic to the problem. In one of his articles Joel says that a software house is a factory that converts cash, through developers time, into code. http://www.joelonsoftware.com/articles/fog0000000074.html The decision makers look at it this way, and they apply the logic of physical construction to the problem. 'All we're doing here is making stuff,' they say to themselves, 'this is just like with trainers. We can save lots of money by getting poor people in developing countries to do all the grunt work for peanuts.' They then do that 'kerching' motion they always do. Of course, they just don't get it. Just as the fail to see the exactly what the programmers don't on the 4th floor are really doing, they sell short the highly skilled developers in India or Eastern Europe. They don't realise that if a problem is sufficiently understood so that it can be expressed using a high level notation and then converted to code using a creativity free, methodical process then you don't need to send the specs halfway across the world. You just write yourself a program that does the conversion on your desktop.
Thu 15 May | Christopher Wells | I can be impatient when using instant messaging: if someone wants to write to me, I sometimes prefer that they sit down and compose a proper email. Speaking as a developer, I didn't expect that all my clients can write specifications that I find unambiguous; if they can't, then after a 'chat' (by phone or instant messaging) my next step is to formalise the requirements: write down my understanding of the requirements, and email them for review. Broadband helps. Supporting a site on the other side of the world, I used pcAnywhere extensively (to remote-control their computers, see what they're doing, get their log files, upload new software); I also used the telephone whenever necessary. Given an adequate internet, it's also possible to save on telephone costs by using audio-capable software like Netmeeting. 'Telephones being a problem in a productive work environment' ... are you talking about your voice disturbing your neighbours in nearby cubicles, or about your being interrupted by incoming calls? Incoming calls from a customer are a good thing, not a bad thing: an important and welcome 'interruption'. In any case I use a cell phone with a hands-free earpiece and throat microphone ... which leaves my hands free to type, and/or I can move away from my neighbours to somewhere quiet and private, and in any case the conversation will be quieter than if I were using a 'speakerphone' (I would use a speakerphone only if there were more than one person at my site, talking with another party). Getting back to my 'impatient with instant messaging' problem, in my experience almost everyone types more slowly than they talk. If there are more than two sites, occasional voice conferance calls are more productive (I won't say cheaper) than instant messaging and emails. As a developer, I haven't yet seen a need for video conferencing. Fundamental to the process is knowing what must be shared (defining the work, and deciding how to partition it and integrate it), and what work can be done by each site individually.
Thu 15 May | mb | telephone = bad???? no, interruption = bad. (though sometimes it's nice to be interrupted). and most people treat all phone calls as a high-pri interrupt. so if a phone call is the way to go for something, say 'let's talk at 12:30' via email or chat or whatever. then pick up the phone and talk.
Fri 16 May | Simon Lucy | My daughter's First School now has electronic whiteboards in every classroom and the main hall. Right now the teachers are just discovering the kinds of things it means. (It also means the blinds have to be down so they're starved of natural sunlight now). What's certainly true is that the kids are all over it like a rash, I'm waiting to hear that they've worked out themselves how to conference to other kids in other schools.
Design docs for existing functionality | Wed 14 May | John
Has anyone attempted to write design docs for existing code/component?
Wed 14 May | Joe AA. | Yes, and in many ways, it's the only way to do it. Why?
Wed 14 May | John | Well, we have lots of C/C++ code with us and we have been asked to write design documents for the applications.
Wed 14 May | Beth Linker | Writing a design doc for existing code ought to be much easier than writing a design doc before coding. For one thing, you don't have to make any decisions. You just have to describe what the system is already doing. The only potential problem that I can see is if you've got old code and nobody remembers what it does.
Thu 15 May | John | We are totally new to the code. There is no one to help us on this.
Thu 15 May | Christopher Wells | Maybe you'd like to reverse-engineer a picture of the code, using some tool like http://www.scitools.com/ucpp.html or another.
Thu 15 May | Joe AA. | Or take the classical approach... start reading the code.
Thu 15 May | Brent P. Newhall | Um, good luck. D'you realize, John, that the only question you've asked is whether we've done this before? If you ask a more detailed question, I'll be happy to answer, but right now, there's nothing to talk about.
Fri 16 May | John | Well, I'd like to how to do it :-). Right now we are reading thru the code & debugging the app. How to draw the interaction diagrams?
Passing VB Date Types | Wed 14 May | Ged Byrne
We have a rather strange problem with some code. We have a client and a server. The two machine probably have different locales and date formats. The client is passing a date to the server as a paramater, and the month and year keep getting flipped. The dataobject was created on the client using an RDS Datasace. Has anybody ever experienced problems like this? Are there any known bugs regarding the date type when passed over RDS? Ive tried google, but no luck.
Wed 14 May | Justin | What format are you using? What locales are the machines running? What database are you using? What is the granularity of the date - ie does it include the time? Do you have any control over the source code for the client and/or server? Just to put your mind at rest, almost everybody has trouble with date formats at some point. A good 'common' format is, e.g. 20030514 10:38:00 - I don't know if it has a name. General advice: Always have a DisplayDateFormat() function. You may also need a StoreDateFormat() function. Try and ensure that a common format is used when doing anything other than displaying dates. Doesn't really matter what it is, as long as its consistent.
Wed 14 May | Ged Byrne | The server has US locale and the client has either UK or any european locale. The date is stored in a table on SQL server. They are saved as strings in uk dmy format. The date is being read correctly and converted using CDate() to a date. There are 3 such dates held in a variant array that then get passed, via RDS, to a server object. The thing I don't understand is that the date is being passed as a date, not a string.
Wed 14 May | Rick (www25.brinkster.com/rchildress) | Is there a particular reason y