I have always wondered about the point of CD keys since I first noticed them on Microsoft products. How do they hamper piracy?
If I copy the CD, I write the key on the CD label.
I dont get it. Ive done this when Ive made backups* and its never caused me a moments grief.
* I carry a zip case with copies of the more important MSDN CDs and some other component/utility CDs instead of carrying around my gooduns. If I lose one, I dont cry.
Sun 06 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | Well, clearly, it doesn't have any impact at all unless you're required to use the key in some way -- like with activation.
Question: how do you guys handle signals in C++ objects?
In my case I have a program that forks a child process and runs another application, so it has to touch the signal handlers for SIGPIPE and SIGCHLD.
It seems to me that this breaks encapsulation: nothing else can touch those signals, because then the classs internals will be broken.
Anyone have a cleaner way?
Sun 06 Jul | Ori Berger | Same was you handle Windows messages in Win32.
Have a global handler that consults global tables in order to know which object to redirect the signal to. That's what 'DispatchMessage()' does.
P.S: Depending on what exactly your program does, it might be better to ignore the signals (SIG_IGN them), and explicitly poll using wait() or friends. Most Unix texts always offer the most complex solution without discussing the simpler solutions that work in a lot of cases.
I have released 3 days ago a version of my software which includes improved protection.
Now somebody has sent me a crack.
Damn the crackers! :-(
Sun 06 Jul | you have my sympathy | 3 days! You must be really code at copy protection. Usually my programs are cracked in less than 24 hours.
Sun 06 Jul | Pat Rice | The weed of copy-protection bears bitter fruit.
Sun 06 Jul | Warren Henning | The copy protection-counter-copy protection cycle has always interested me.
Maybe you could study how the difficult-to-break copy protection (the one that Maya and other high-end graphics packages use) schemes work? The protection for Maya took months to break.
Sun 06 Jul | Johnny Bravo | Warren,
rumour has it Maya 5.0 Unlimited was released by a group even before it hit shelves. Perhaps it took those mentioned months until it was available on publicly available russian web pages.
Sun 06 Jul | you have my sympathy | Yeah dudes, I've never heard of anything that took three months to crack. You've got somewhere around 8 million crackers worldwide, of whom most are immune to prosecution because of their age, country of origin, or ability to hide their tracks. Among them, there are about 250,000 that are extremely smart and persistent, as well as having tons of free time. They participate in a community in which the only way to get respect is to be the first to crack a new release. Cracking a novel scheme is worth even more. They have distributed computer clusters that far exceed anything the NSA has and crack strong encryption every day. If you contact them, they will offer to stop cracking your program if you hire them for six figure salaries, but unless you can hire all 250,000 of the core crackers, there's no point.
But you should still have copy protection since without it, the average joe user will feel very comfortable passing your software around. By having to go through crackers, there is at least the fear of trojans.
Do folks have better luck with hardware protection -- dongles and network card queries and 1-800 numbers? Or will we have to wait for Microsoft and INtel to build copy protection deep within the OS at a hardware level?
Sun 06 Jul | Corporate Avenger | Here's how we handle it.
We have a full time employee whose sole job is to be involved in the cracker community. He has high prestige because he has been first out the gate with several high profile cracks -- all of our own software of course. Because he is actively involved in producing high profile, high quality cracks, he has also acquired the personal contact info regarding a large number of other crackers. We maintain a mailing address for him near a foreign branch office to cover his own tracks.
This provides us with a couple of advantages: our cracked software contains a trojan that not only logs information about the users computer, but also scans their system for other cracks. This information is transmitted back to us and we share it with a few other companies that use this system. The information is stored in a database where it is made available to the FBI for use in their own investigations.
Sun 06 Jul | Dan Maas | Most high end programs use the same license manager (FlexLM). This makes them easy targets because once you crack FlexLM, you've cracked all the programs that use it.
But copy prevention isn't much of a big deal at the high end anyway. The infringers tend to be poor students who wouldn't be able to pay $50,000 for a license even if they wanted to. The biggest reason to use something like FlexLM is to prevent corporate customers from inadvertently cheating on their licenses (e.g. adding an employee while forgetting to buy another seat license). So the copy prevention doesn't have to be bullet-proof - better to make it user-friendly and easy to comply with. (I've heard of license managers that let you run more licenses than you've paid for, only they start sending an email every few hours telling you to pay up :)
Sun 06 Jul | Dan Maas | One more thing: I think watermarked binaries are a cool idea. If every binary you distribute is unique, it should be very easy to figure out who is leaking your software to crackers :)
Beta versions of Lightwave used to include the tester's name in the title bar - people who leaked the software were easily identified and dealt with... (of couse make sure you include a subtler watermark that is not as easy to hex-edit out...)
Sun 06 Jul | Bobb | Well, same problem as the RIAA is facing, they're in the business to make money, but people are sharing, and people enjoy sharing what they spend money. It's a lost battle. But it's your decision if you want to stay in business, or retire [before the crackers will, because they will not].
Intuit Will Discontinue Product Activation http://www.extremetech.com/article2/0,3973,1088341,00.asp
In their own words: 'In addition, we didn't get the revenue and profit growth we expected. Therefore, we've decided to discontinue product activation next season.'
Sun 06 Jul | Philo | LOL!
More like 'Holy crap did this hurt our sales. We're scurrying away as fast as we can'
Pretty silly to try to lock a $50 piece of software that people only need one copy of, anyway.
Philo
Sun 06 Jul | And the horse you rode in on | I find it funny that people worry about trojans in cracks.
The cracking groups are generally higher profile and something I'd be more likely to trust than a random shareware developer.
Sun 06 Jul | Warren Henning | 'our cracked software contains a trojan that not only logs information about the users computer, but also scans their system for other cracks.'
If I knew that your software did this I would never buy it if you didn't notify all your customers of your dishonest, immoral policy.
Sun 06 Jul | Philo | Warren -
a) I think he's trolling
b) Assuming he's not, I read that they distribute the cracks for their own software and the *crack* installs the trojan. But I could be wrong.
Philo
Sun 06 Jul | Homo Ironicus | Is this illegal? Should send it to the FBI if so.
Sun 06 Jul | Corporate Avenger | No, it's not illegal. The cracked software is acquired illegally and so anything it does is not our responsibility. Of course it doesn't do anything harmful, it's no more nefarious than spyware -- it monitors the user and reports back. But instead of monitoring the user's web surfing or music habits, it monitors their illegal activity and reports on it. None of this is in the version that is sold through legitimate channels.
There have been some recent changes in the law though that allow content producers to legally hack into the computers of people who are engaging in illegal distribution, but we don't have any interest in that. There's also lobbying in the industry about changing laws to explicitly allow destructive worms to take over the computers of infringers and destroy things, but I personally think that is foolish, although there will likely be some companies that implement these policies.
Methods & Tools is a free e-newsletter for software developers
Summer 2003 issue content:
* XP Testing Without XP: Taking Advantage of Agile Testing Practices
* Modeling the Real World for Load Testing Web Sites
* When can the software be released?
To download or read this issue go to http://www.methodsandtools.com/mt/download.html
Sun 06 Jul | Simon Lucy | And this is a free advert...
Does anyone work on a project where there is someone who only does user interface design? (i.e. not a programmer as well, might have a degree in human factors or something like that) If so, I am wondering what these people are like. Are they contractors? Are they respected, or does everyone think they are a pain in the ass? Are they paid well? Do they come back for project after project? How big does a project have to be before they have someone like this?
At my current project there is no such person, and our interface is sorely lacking.
Sun 06 Jul | Andy | Also: what are the job responsibilities of this person? i.e. are they responsible for talking with end users and getting feedback, and who do they report to?
Thanks for any info.
Sun 06 Jul | www.marktaw.com | I worked in the 'web' space and the UI person was one and the same as the designer - i.e. the guy that made sure it looked pretty.
Whether or not he understood usability as well was sort of luck of the draw. I consider myself to be somewhat of a usability expert, and I always made sure my stuff was usable - except when it directly contradicted what the customer wanted, as well as tried to raise usability awareness among my fellow designers.
Sun 06 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | I've only ever worked one place that had a full time usability person, and unfortunately, it was right as the bubble was about to pop. She never really got into her stride to know what all of her duties were before mass layoffs. What she did do, though, was mocking up UIs in PowerPoint or Photoshop. Presumably, with enough time, she would've been able to do live-user usability testing.
Sun 06 Jul | Dave | One member of our team is dedicated to 'user experience' for our Windows product.
He is responsible for the following:
1. User interface design, based upon feedback from clients. He may participate directly in client feedback sessions, as well as receive input from sales, training, and technical support.
2. User interaction. I.e., forming the basis if the use case text.
3. Participating in the QA process. This typically involves making sure the user experience in the final product is as he envisioned.
Our big competitive advantage in the marketplace--according to our clients and prospects--is our product's ease-of-use. Because of this, in my opinion, he is one of the most valuable members of the team and could not be easily replaced.
He brings a unique combination of computer graphic arts experience and a degree in electrical and computer engineering to the table. This fusion of 'left- and right-brain characteristics' results in a unique perspective for designing human-machine interactions, and this has been a primary key to our success.
Sun 06 Jul | Philippe Back | A friend of mine earns a living on that:
www.ergosoft.be
They record people w/ cams while the guys have to perform a series of tasks on the app (or mock up).
If the results are bad, they modify the GUI and all and it usually gives good results.
If done properly, there is value in it.
I have decided it makes perfect sense to speak to my boss about the guy playing music without headphones. First I want to get some idea of what is considered normal in various offices. If most offices have a policy that you cant play music in a cubicle without headphones, then I can tell my boss its normal to have that policy.
I hope some of the managers and developers here at JOS will say what the policy is at their office, so Ill have plenty of data.
Sun 06 Jul | Tony Chang | Yes, almost every office in the world has a policy that employees may not play their own music through a loud speaker. Even in a radio station, the DJs wear headphones.
So, go get em and report back how this thing was settled amicably.
Sun 06 Jul | Philo | You'll need one of these, too:
http://www.swingline.com/html/1695.html
Philo
Sun 06 Jul | Our team of programmer | Our policy is: If the stupid shits noise is impeding my work, in any way, then he shuts the hell up. And it only takes one conversation. PLEASE get off your ass and settle this, woodya! :-)
Incidently, that was a mis-guided but wholely satisfying attempt at motivation.
Sun 06 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | 'Even in a radio station, the DJs wear headphones.'
That's to prevent feedback from speaker to microphone. I've worked radio, as have a few of my friends. When not speaking, they don't use headphones. They use the overhead speakers. The speakers automatically cut out when the microphone is turned on.
On topic, every cube-farm I've been forced to suffer has had a 'no music' policy. In fact, it wasn't until it became common to have sound built onto the motherboard that I ever had a sound card in my work machines. Definitely never been provided a set of speakers, ever.
Sun 06 Jul | Philo | Brad, does that include if you brought in your own radio and headphones? I have a friend who worked at a place like that - I can't believe management could be so incredibly reactionary.
When I was working on a dev team of 6-7 people we had our own enclosed area - in there we had an MP3 server and speakers. :-)
Philo
Sun 06 Jul | why are we even listening to this station | Wow! What an amazing coincidence you were able to find 7 people with exactly the same taste in music.
Cause if everybody didn't have identical taste ,there was probably at least a coulpe who were being driven crazy and felt they couldn't get their work done but didn't want to sy anything.
Sun 06 Jul | Philo | MP3 server. With an MP3 repository. I know for a fact that every member of the team had contributions in there, and we just had it running on 'shuffle'
There were some songs I didn't care for, but nothing so bizarre that it kept me from concentrating.
Philo
Sun 06 Jul | www.marktaw.com | Setting something up like that is illegal... I read a case where the RIAA forced a company to give them a million bucks because their employees ran an mp3 server.
That said, my co-workers and I traded mp3's all the time... It's a good way to broaden your musical horizons.
Sun 06 Jul | Contrary Mary | I have to say, I wish the RIAA were more sensible and just said 'If you have an MP3 on your machine, you had better have the physical CD in your library, in case we audit you.'
I realize CDs aren't liscensed this way, but it would be a better starting point. There are people like myself who like to keep things basically legal, but with computers and music these days, the music industry makes it hard.
Sun 06 Jul | Philo | Mark, do you have a cite on that? I find it hard to believe I haven't heard of it.
I can believe if IBM set up a server for their whole company they'd be nabbed for licensing fees, since they're effectively running a radio station. But when we're only playing over speakers, it could've easily been a portable stereo with CD's.
Granted, the project lead didn't go around and verify every MP3 came from a CD, but I know that most of them came from CD collections.
Philo
Sun 06 Jul | Momma's Boy | This thread is stupid. Grow some balls. Like I said in an earlier thread. Why come on this board and spill your problems on everyone else. Go cry on your mom's shoulder.
Sun 06 Jul | www.marktaw.com | http://www.google.com/search?hl=en&ie=UTF-8&oe=UTF-8&q=riaa+%22mp3+server%22
Sun 06 Jul | www.marktaw.com | .. Slashdot is the 2nd link:
http://slashdot.org/articles/02/04/09/237230.shtml?tid=141
'nkruse pointed out that our pals as the RIAA are breaking new ground. According to this Reuters Article, the RIAA has succeeded in collecting 1 million US dollars from Arizona based Integrated Information Systems. IIS apparently had a corporate MP3 repository on it's network. This is the first time I've heard about the RIAA doing this kind of thing. Looks like they're taking a page from the BSA handbook. '
From the Reuters Article:
'Big Brother is listening!
That's the message the recording industry hoped to send on Tuesday by announcing it had collected $1 million from a company that let employees swap songs on an internal server.
Arizona-based Integrated Information Systems Inc., which ran a dedicated server permitting employees to access and distribute thousands of music files over the company network, agreed to pay the Recording Industry Association of America (RIAA) $1 million rather than face the music in court.'
Sun 06 Jul | somebody | That's obviously a completely different scenario than what Philo described.
I hope Joel and everyone here will forgive me if I sound cranky in this post... Do books on AS400s and how to operate them exist, or do you basically throw idiots at the database machines until queries come out?
No offense to anyone who uses an AS-400, but I have repeatedly asked people who use them what can I read to learn how to use it? So far the answer has generally been, No, you just have to use it. Frankly, I dont buy it.
We have one at work, and my life (at least this weekend) would be much more pleasant if I could query the records and have it spit out a dlimited file for me. However, I dont know how to get it to do that, I have no context on even how to look up information on it, and as were a college I hate to mess with anything where I might mess up student records.
So, again: Do books about the AS-400 and OS/400 exist? Thanks.
Sat 05 Jul | Dave B. | Hi Andrew,
I have used and read the following books when I was in school:
Control Language Programming for the AS/400
SQL/400 by Example
Programming in RPG/400 : Judy Yaeger
Programming in RPG IV : Judy Yaeger
Introduction to the AS/400
I also recommend reading the AS/400 manuals. Lot of good information in there on DDS's, logical and physical files, display files, journaling etc etc.
Sat 05 Jul | Dave B. | As for creating a comma delimited file, I don't believe you can, of course I could be wrong. The AS400's files are defined as structured data using Data Description Specification files. Everything has a certain format or specification. However you could establish a connection to the AS400 database that contains your records through a PC running VB with ADO. This would enable you to pull the records to the PC and write them out in the format you wish. If you are using the ILE on the AS400 and you have the C++ compiler for the AS400 you may be able to write a small program that reads the file and outputs a comma delimited file. However my knowledge of all of this is limited but I'm sure with a little (or a lot) of work it's possible. Again I highly recommend the AS400 manuals. They are very interesting... If you like that sort of thing.
Sat 05 Jul | Dave B. | One last thing to add, is that you might check out CL for the AS400, if I remember correctly it can read and write files, but once again, I believe it only deals with database files defined through DDS not sequential files. At any rate good luck.
Sat 05 Jul | Matthew Lock | Check Amazon I found 329 books by searching on AS 400:
http://tinyurl.com/g4ek
Sat 05 Jul | Matthew Lock | There's a site here with some ebooks for AS 400 too http://www.abc400.com/book/
Sat 05 Jul | Matthew Lock | .. and this http://www.touniteamerica.com/programming/manuals.as400.html
By the way what's the job scene like for AS/400 programmers? I have been tempted a few times to buy an old one off Ebay and teahc myself programming on it.
Sun 06 Jul | anon | >> 'By the way what's the job scene like for AS/400 programmers? I have been tempted a few times to buy an old one off Ebay and teahc myself programming on it.'
I have too. I haven't used an AS/400 in at least six years, but as I recall, they were beautiful machines. Nothing like the DOS-Windows/Unix paradigms we're used to, but other operating systems could take a few pointers in human-computer interaction from this elegant shell.
Also, as I recall, there is no native SQL on the 400, but there is a command like QRYF or something which is completely parameterized, and quite simple to use. Sorry I don't remember more.
As for documentation, the manuals and the 'red books' from IBM were excellent.
Sun 06 Jul | Guillermo | AS/400 (now named iSeries, part of the IBM eServer family) is, simply, the best machine for running business applications, only it's not very well known for different reasons. Some of us are thinking the AS/400 is the most keep secret in the IT.
a lot of medium-sized and very large corporations use AS/400 as the core of the main applications, of course including Microsoft and many others that would surprise you.
unfortunately IBM don't provide a good schema of prices in the AS/400, being epensive (at least in the first impression) to many medium/little sites and also for little software developers. the start prices are in the 20,000 US $.
http://www-132.ibm.com/content/home/store_IBMPublicUSA/en_US/eServer/iSeries/
of course, AS400 have a very good SQL language and the most flexible & secure DB2 database with a lot of nice related tools. Full support of TCP/IP applications is embebed in the system (Sockets, Telnet, FTP, HTTP, SSL, and many others). as same for security related task, and an very rich operative system,
the main languages for developing is RPG4 (also named RPG IV, RPG ILE) along with CL, COBOL, C, Java...
the ony 'not so good' in this environment is the allways criticize 'GUI', in character mode. Some efforts are in ways to improve the changes to the GUI (Client/Server, Websphere, HTML and others), but the community is not puting all the best in this task, because the programs runs very efficiently in character mode and some internal related functions are more proficiency in character mode (i.e. typing orders and so on).
oh! manuals: a lot, and you can download its in pdf for free. also you can found good printed manuals (you can order printer manuals from IBM also).
When you install a new machine you receive an/two CD contains a lot of manuals. these cd can also be purchased for an price.
here is the main links, but sure you can found many others.
http://publib.boulder.ibm.com/pubs/html/as400/infocenter.html
RedBooks (nice manuals in PDF or you can order printer manuals)
http://publib-b.boulder.ibm.com/Redbooks.nsf/Portals/AS400
http://www.redbooks.ibm.com/tstudio/
(sorry my 'english')
Guillermo.
My apps got a memory leak somewhere. Before I dig through 27,000 lines of code looking for it, does anyone know of a tool that will help with looking? Ive tried FxCop, and it gives some good info, but I dont think its showing what I need.
AutomatedQAs profiler looks interesting, but I dont think theyve fiinished it yet - I get all kinds of UI problems (tab strip locks up, freezing, etc). Definitely not worth $600.
Ants seems to do less than a good trace file, too.
Any other suggestions?
Philo
Sat 05 Jul | Christopher Wells | I haven't tried it with .NET but you might try BoundsChecker at http://www.compuware.com/products/devpartner/bounds.htm ... it has a 14-day evaluation.
Sat 05 Jul | Philo | Looks like BoundsChecker is just for C++. DevPartner looks good, but it's ***$1500*** - that's more than MSDN Universal!!!
Philo
Sat 05 Jul | Andy | Memory leak? I thought C# had garbage collection.
I don't know if this is possible in C#, but the no-tools-required solution in C/C++ would be to wrap your allocator and deallocator and print out the file and line of the calling function every time you allocate.
Then run the program and reproduce the memory leak. And then go through match them by hand or with some sort of text script.
Sat 05 Jul | Philo | Actually let me clarify - it's an ASP.Net web application; the code behind language is C#. Ran out of memory on a 1GB machine yesterday; the ASP.Net process was at 500MB.
Philo
Sat 05 Jul | Sammy | Hey Andy, technically they're called loitering objects, but might as well call them memory leaks.
This might be what you're looking for, Philo:
http://www.scitech.se/memprofiler/
I know diddly about C#, but i once solved someone's Java memleak in 10 min tops using JProbe memory debugger, and this looks like it has all the needed features.
http://www.google.com/search?hl=en&ie=UTF-8&oe=UTF-8&q=c%23+memory+profiler&btnG=Google+Search
may help too.
Sun 06 Jul | Marc | Try the Borland Optimizeit Profiler. I've only seen it demoed (I've yet to use the trial myself), but this seems to be exactly what you need. The demo I watched was quite nice.
Sun 06 Jul | Ben | Would this help?- http://www.red-gate.com/advanced_dotnet_testing_system.htm
I am doing a project, not a large one by means of LOC (around 1200).However it makes use of a few complex algorithms for data mining, and I have basically modified some algorithms developed in academia to suit the purposes of the project, and have solved some statistical problems, which were thought to be very difficult to solve.I have spent 2 months on it, with a lot of time experimenting and coming up and coding new algorithms to suit the projects purpose for data mining.
Its more research oriented, although intended for commerical use.I have extensive talks with researchers in Pattern recognition for some algorithms used in the project, including a very novel mathamatical measure.
It doesnt have --- here is a spec deliver it,
partly becuase there is not a lot of work done on similar projects in industry(only a couple of others I know)
Since many people use LOC as a measure, how would a 3 rd party(who is evaluating the project for my yearly review)
measure its quality?
Sat 05 Jul | Philo | If possible, the same way a lot of projects should be evaluated instead of LOC:
Old process: x hours
Your process: y hours
(x-y) * number of times process performed/week * 52 = manhours saved/year.
THAT is a number management understands.
Philo
Sat 05 Jul | Jeff | Philo, there is no old process, it's a completly new development,what then?
Sat 05 Jul | JWA | Philo, you are absolutely right about that. Any product/project (purchased or commisioned by a business) should ultimately be measured by it's ROI.
Jeff, there is no previous app doing this, but was the same or similar action undertaken through any means? Manually and/or through the use of misc. utilities, reports, etc? In addition to that, can you in any way measure the resulting value of the data resolved by the system?
Sounds like its a cool project.
--Josh
Sat 05 Jul | The Real PC | When talking about books we often mention the number of pages. We assume a long book takes more effort to write than a short one, which is usually true, but number of pages is obviously not the best way to summarize what the author has accomplished in writing the book. You have to say something else about it besides number of pages before anyone can say how much effort went into it.
So LOC has to be just one measure among others. Anyone can write a long book that says nothing worthwhile, or a long program that does nothing worthwhile (or a short one that changes the world).
Sat 05 Jul | Mike Swieton | A few complexity measures listed in the pragmatic programmer:
- McCabe Cyclomatic Complexity Metric (supposed to measure complexity of decision trees.) Pragmatic Programmer doesn't say how this one works... It's probably on google ;)
- Inheritance fan-in and fan-out
- Response set
- Class coupling ratios
Sat 05 Jul | Eric Lippert | Your question is 'how do we measure code _quality_?' It's unclear to me how either _complexity_ or _size of source_ have anything to do with _quality_, because you haven't stated WHICH quality you're looking for.
Furthermore, I get the sense that what you're looking for is not so much 'how do I show that this is high quality code?' but rather 'how do I show that I didn't play Quake for three months and then dash off this 1200 line program at the last minute?' :-) There's no way to do that with code metrics -- you'll have to convince them some other way that this is reasonable output for several months work.
Can you tell us more about this third party who will be evaluating your work?
The reason I ask is because there are a lot of metrics I'd use to measure the quality of a piece of code, the first being _correctness_, obviously.
But without knowing the wants and needs of the evaluating third party, its hard to say what comes _next_.
Do they want extensibility? Legibility? Maintainability? Good asymptotic performance? Amortized performance? Worst-case performance? Robustness? Portability? Patentability? Publishability? I'd use a different metric for each, so its hard to say. Give us more details!
Eric
Sun 06 Jul | Jeff | Eric, main criteria is workability and fast run-times.
Sun 06 Jul | Marc | LOC isn't very accurate, and has no business value associate with it at all. Only another programmer can really tell anything by it. And really, the only impressive LOC statistic relates to refactoring. If you refactor 1200 lines into 120 lines, then I'm going to impressed. You get the idea.
When it comes to measuring business value, you have to use an actual business cost as a comparison. For example, will your software save a company 100 man hours for a given research project? 500? 1,000?
As some others have said, know the ROI of your product. If you don't know, then this is what you need to find out.
How often do you upgrade your PC/Laptop be it home or work?
Sat 05 Jul | Matthew Lock | I'm still on my Pentium 2 laptop I bought second hand in 2000. I only tend to upgrade when the computer becomes too sluggish for what I want to do.
Sat 05 Jul | Albert D. Kallal | It depends...about 3 years for a notebook. Once they get out of warranty and they break...then they are not worth fixing.
I have gotten more out of a desktop. But, again, typically about 3 years is all I get.
I think the next upgrades for me (which are now due) will last a VERY long time.
I also am running a lot more test and beta software. Thus, I need a test mule also....
Albert D. Kallal
Edmonton, Alberta Canada
kallal@msn.com
http://www.attcanada.net/~kallal.msn
Sat 05 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | I upgrade my PC a lot, but it's more because I play games with it than because I develop with it. Where I am now, though, the only upgrade I can into the medium-term future is increased CPU speed.
Sun 06 Jul | www.marktaw.com | I replaced my 233mhz P1 in November with an AMD 2100XP, mostly because I wanted to do audio with my computer. The P1 did nearly everything I wanted it to do.
Sun 06 Jul | pcg-n505ve lubber | I got a sony pcg-n505ve laptop in August of 1999 for $1400 new, and I stilll haven't seen a laptop on the market since that's made me want to upgrade.
I use w2k on it, and the only problem I've had was it was starting to get really noisy and a bit slow for some things. I then dropped it while it was on and the battery fell out, and it started crashing every 15 minutes or so.
I decided to try upgrading the 6GB drive to a new 40GB drive ($140) and reinstall windows 2000 in the process. It's super! The computer is so FAST again (more responsive it seems like than my girlfriend's xp tablet pc less than a year old) and quiet too (turns out it was the drive making ALL the noise). I lub it.
All I do is: ssh, windows IE, emacs, excel, ftp, p2p, play mp3s/mpgs on it, and it can handle all that fine so I don't see a reason to upgrade. 1024x768 celeron 333, 128MB of ram, pcmcia, usb and firewire.
Sun 06 Jul | Unsigner | If you feel you're more productive with a top-of-the-line machine - e.g. if you're a game programmer and you're developing games that will be on the market 18 months from now, so they run at about 12 fps on your development machine and wait for the next greatest thing to arrive from Nvidia - then you probably have to upgrade something - CPU, memory, HDD or motherboard - every 6 months. It seems that the pace of platform (chipset->motherboard) evolution is so fast that a motherboard can usually can only take one (significantly faster to be worth it) CPU upgrade - e.g. I got my nForce2 board with an Athlon 2400+, and I'll probably get it a Athlon 3200+, then I'll have to change the board to get an Athlon64.
Maybe for more mainstream programming the upgrades can be a bit less frequent, e.g. once in 12 months. But having a machine more than two years old for active development seems to be a bit too masochistic for my tastes.
I don't get laptops. Do you really move around *that* much to bear the cramped keyboard, slow-response LCD screen, anachronistic video subsystem and should-be-criminal-offence prices for memory?
Sun 06 Jul | Philo | 'I don't get laptops. Do you really move around *that* much to bear the cramped keyboard, slow-response LCD screen, anachronistic video subsystem and should-be-criminal-offence prices for memory?'
Yes.
Cramped keyboard - I bought my own. If I'm going to be on it for any length of time, the keyboard comes with.
LCD screen is no slower than that LCD screens that everyone is vamping for desktops, and really not noticeably slower than my CRT.
Anachronistic video subsystem - my two year old Dell has a GForce 2 with 32MB RAM. While it's not a gamer's dream, it's a respectable video card. I also run the laptop at 1600x1200.
Memory prices - pricewatch.com, buddy. [grin]
Philo
Sun 06 Jul | James Ladd | Im a bit of an upgrade junky and upgrade every six months.
Sun 06 Jul | Unsigner | 'Anachronistic video subsystem - my two year old Dell has a GForce 2 with 32MB RAM. While it's not a gamer's dream, it's a respectable video card. I also run the laptop at 1600x1200.'
Well, it really is a respectable video card (and I'm a gamer). I can also envy you for the 1600x1200 display. But you most likely payed through the nose for that 2 years ago, didn't you?
The LCD-or-CRT matter is becoming a religious one, but I *hate* LCDs. Never seen one that doesn't blur terribly even at the slightest scrolling, and for graphics applications like Max or Maya it's unbearable.
Sun 06 Jul | Philo | I won't argue with you on either cost or the problem with gaming on LCD's. But since I use mine for business (I game on a CRT), then it's fine for what I need.
Actually, I'm not sure that the LCD was really that expensive - I got the laptop (15.4', 1600x1200) in December 2001 for $3k. I've always figured the LCD was about $1200 of that. In late 2001 you couldn't buy an LCD that ran at 1600x1200 for less than $3500, and a 15' 1024x768 LCD ran about $600, so it was almost market price, if the standalone product existed.
Then again, I bought my 21' CRT for $500... [shrug]
Philo
Sun 06 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | 'LCD screen is no slower than that LCD screens that everyone is vamping for desktops, and really not noticeably slower than my CRT.'
Image clarity and available brightness on a high quality stand alone is MUCH better than laptops, but that's to be expected when you have comparitively infinite power to draw. :)
My laptop is a typical 50ms refresh, but my desktop is a 20ms refresh. It's definitely visible on anything fast moving (run a game or a movie on both, and you can see it).
John Allen Paulos has written a decent article on estimating wild things like how much tea is there in China
http://abcnews.go.com/sections/scitech/WhosCounting/whoscounting.html
His columns are always enlightening.
Sat 05 Jul | Zahid | Very cool!
I read a page on interviewing candidates for programmer jobs (I think it was at Hentzenwerke.com) that advocated asking questions like this -- the point, obviously, not being that the successful candidate knows the per capita land area of the earth, but that she can be creative and diligent in solving a problem without much to go on.
Sat 05 Jul | Philo | A programmer went to a job interview. His interviewer was a very attractive young lady. Her first question was 'There are three birds sitting on a wire. A hunter shoots one of the birds, how many are left?'
'None' he answers.
'How do you figure?'
'He shot one, and the other two flew away'
'Well' she said, 'that's not technically correct, but I like the way you think.'
The interview went on, and at the end she asked 'do you have any questions for me?'
'Yes,' he replied, 'three women are sitting on a park bench eating popsicles. One is licking hers, another is biting the popsicle, and the last one is sucking it. Which one is married?'
The interviewer blushed, then said 'the one who's sucking it?'
'No,' he said with a smile, 'the one with the wedding ring. But I like the way you think.'
Philo
Sat 05 Jul | www.marktaw.com | Huh. I do these kinds of estimations all the time. It's nice to know that I'm in good company.
Sat 05 Jul | Homo Ironicus | 6 or 42
Sat 05 Jul | Eric Lippert | A lot of companies -- Microsoft included -- are noted for asking these sorts of questions in interviews. I personally enjoy pondering these sorts of questions -- computing the number of litres of human blood in the world, etc, is fun mental arithmetic.
However, I've got to question the assumption that questions like these tell you anything _relevant_ about an interview candidate.
Either the ability to manipulate large numbers is relevant to the job or it isn't. If it is, then surely there must be examples FROM THE JOB which you can use. If there are no such examples then don't ask questions that test an irrelevant skill!
I ask 'manipulate these large numbers' questions all the time in interviews, and I would never in a million BILLION years ask about tea or the Mississippi or piano tuners. I ask questions based on problems that I actually had to solve in the course of my job!
'How much memory will this data structure consume if the web site has thirty million unique users? How long will it take to persist one user's state off disk into this tree? Given that, what's the worst-case loaded server performance in pages per second?'
or
'Given that an IEEE double has 53 bits of precision and we need nanosecond precision, roughly what's the range of dates we can store in a double?'
I don't care if you can guess how many grams of tea are in China. I care deeply if you can look at a piece of code and say 'this will consume ten billion bits of disk space', or 'this 32 bit integer counter is going to overflow every 53 days', or 'this will drop throughput to no more than ten pages per second per server', etc.
Eric
Sat 05 Jul | www.marktaw.com | Perhaps it's not testing what you think it's testing - maybe it's testing their ability to think independantly in the face of uncertainty without constantly asking for guidance.
Ask an unanswerable question and see how the candidate responds. Do they 'panic' and ask for guidance, or do they proceed to devise an answer on the spot.
Sat 05 Jul | Philo | Eric, the talent they're looking for is:
'A client wants to put all his archived data into SQL Server. Currently it's maintained in five filing cabinets. How long will data migration take and how much disk space does he need?'
Admittedly when $$$ are on the line, the only answer is 'I'd have to look at the data.' But in the meantime, can you give a gut feel for what we're talking about here?
Does the applicant sit there looking panicked? Or do they start with 'okay, one page is about 1kb. 500 pages in a ream, which is 3 inches thick. A filing cabinet drawer is 24' deep...'
The next thing they do is try to make the problem as abstract as possible to remove any possible 'insider info' (your last job might've been migrating a filing cabinet of data to SQL Server).
These questions test analysis and synthesis techniques - extrapolation and intuition, as well as confidence in your own abilities. They are not the Holy Grail of interview questions, they are simply a way to assess an aspect of personality that is fairly critical to high-level design but difficult to evaluate objectively.
Philo
Sun 06 Jul | Bobb | How much tea in China is usually not relevant to the job, but how you handle such questions, in all aspects, might be relevant.
You can't ask a person 'Are you smart?', so you ask about 'Way of thinking' as in Philo's example.
Sun 06 Jul | www.marktaw.com | Is it just me... Several times I've posted something and then the next post, or a couple of posts later, someone says basically the same thing, but adds or removes a few details, and everyone loves the 2nd person's explanation.
Sun 06 Jul | mackinac | This link works better:
http://abcnews.go.com/sections/scitech/WhosCounting/whoscounting030602.html
The link in the OP is for the most recent column, no longer the one on estimating.
Sun 06 Jul | Johnny Bravo | Anyone ever noticed that sometimes you post something, and another poster repeats what you posted by every word, leaving out or adding minor details, and people actually stick to what the second poster said? Strange.
Sun 06 Jul | Tom | Yes, Mr Bravo, I have noticed that. I wonder who's going to copy you?
Hi All,
Has anyone here had any experience using TX Text Control (http://www.textcontrol.com)?
Im about to begin an app that allows users to create structured documents relating to a specific subject. These documents use a specific format developed by my company. The current way of doing this is to use a reporting component (ActiveReports .NET) and add/edit the text and images using dialogs. This works fine, but Id like the ability to:
1) Use actual tables, rather than have to use multiple textboxes arranged like a table, and then having to set the heights of all textbox cells in a row to the height of the tallest cell. This seems to be native to TX Text Control.
2) Allow the user to directly edit the text within the tables. This would be in addition to the ability to add/edit text and set formatting options through dialog boxes. It appears that this is also native in TX Text Control. The only thing that Im not sure of yet is whether you can enable and disable user editing of certain fields of text.
Id be using the .NET version, and have no need to use it within a browser.
Im downloading it now and Im going to play with it, but I thought Id see if anyone has had any good or bad experiences with this, and/or any tips.
Thanks guys,
--Josh
Fri 04 Jul | DJ | We have been using it for about a year or so. But not the .NET version. We use to add some basic word processing like features to our app. Basically they enter everything in a big memo box and can do all the basic formatting which was very easy to set up.
You can specify many formats to save the data in. We save it in RTF. We have never tried the embedded fields but apprently you can create forms with some sections editable. There has only been very minor quirks with the product, otherwise it has been very stable and easy to use.
Dave
Sat 05 Jul | Eric W. Sink | I've been working with it recently in a C# app. I'm generally impressed so far. For example, I like the fact that it comes with a toolbar class that Just Works.
I'm using it as an HTML editor, nothing more. In that context, I dislike the fact that it doesn't understand the SIZE attribute on FONT tags. I handles the FACE attribute, but not SIZE.
Sun 06 Jul | TheWeasel | Hmm.
We spent a lot of time incorporating TX Textcontrol .NET into my app only to discover there was a problem with their licensing system that mean it didn't work in our live environment.
I unpicked their code using ILDAsm and told them where it looked to me the problem was (they assumed the loading app was a .NET one- it wasn't). They then told me off for breaking their user licensing agreement.
They thanked me for the bug report, and told me they would probably fix it in April/May (the report was late Jan), so I had to move on given our release schedule of February. On the plus side, they were prompt at answering my questions and processed the refund efficiently.
Instead I'm using TRichView http://www.trichview.com as a COM object and I'm very happy with the functionality and price as well as the fact that it works and I've got the source code - and the support is /outstanding/. It handles tables really well and there's a whole heap of excellent menu code with it. The downside? You need some Delphi skeeelz to build the COM object though once Delph.NET ships, TRichView will become a first-class .NETizen.
HTH
Well, it looks like the book I bought on the Windows API, Programming Windows by Charles Petzold (the one everyone recommends -- I dont know why, it has hundreds of pages on stuff I dont care about, like graphics and multimedia and whatnot), doesnt have the information I need to make professional-looking Windows applications.
So it looks like learning the MFC is the way to go. Some of the classes, like CTreeCtrl, look like they make the task of Windows programming a lot easier.
So heres my first question: what are the best book(s) for learning MFC if one already has experience with the Windows API (from programming in C)?
Also, I have heard bits and pieces about COM. All Ive gathered is that you create interfaces wherein you expose functionality in such a way to other components... why is that a good thing? What advantages are there to be had from programming in COM?
Fri 04 Jul | Big B | First, make sure you really want to learn MFC, COM and ATL, and not .NET.
For MFC, I'd recommend Mike Blaszczak's Professional MFC with Visual C++ 6.
For COM and ATL, I liked Richard Grimes' books.
But really, make sure you want to learn this first. The good thing about COM and ATL is that if you can wrap your head around it, you'll probably become a better student in the process. But all of this is dead end technology that most companies will be phasing out over the next perhaps 5 years.
Fri 04 Jul | S. Tanna | The Prosise MFC book follows a similar structure to the Petzold Win API book. If you're looking for familiarity, it'd be a start.
Sat 05 Jul | Alyosha` | I can't recommend any MFC books -- I learned it only by coding a program and refering to the Microsoft documentation. I already knew Win32 from previous experience, and I found the Petzold book an invaluable resource ...
Regarding COM -- well, it was designed to be the next generation in creating modular applications -- like using DLLs. But instead of exporting functions, COM servers export objects. Also, COM was also designed to work even if the object and the user of the object were on different machines -- that is, distributed COM, or DCOM.
Did it succeed? Well, depends on who you ask. I'm pretty ignorant when it comes to distributed applications, so I can't really argue for or against DCOM.
For me, the only place where COM really shines is when you want to write language-independent objects that works in all of the Microsoft languages -- Visual Basic, Visual C++, and JScript. I wouldn't ever use it if this weren't a given requirement.
Sat 05 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | Alyosha,
You should distinguish between being a COM client (i.e., consuming COM classes) and being a COM server (i.e., exposing COM classes). You will be a COM client when you have no choice, and it might have nothing to do with cross-language or cross-machine interoperability.
ATL includes assistance for both COM client code and COM server code, although most of the books focus heavily on the server infrastructure and are light on the client infrastructure.
Sat 05 Jul | Warren Henning | Thanks for the replies.
Blaszczak's book looks to be out of print, but a glance at the table of contents of both his and Prosise's book suggests that it's better, even if it's not meant to be a tutorial.
Sat 05 Jul | Heston Holtmann | These three will cover about 90+% of your needs
Best Writing:
http://www.amazon.com/exec/obidos/tg/detail/-/1572316950/qid=1057443660/sr=8-3/ref=sr_8_3/102-9403736-5546511?v=glance&s=books&n=507846
Best Details:
http://www.amazon.com/exec/obidos/ASIN/0201407213/qid=1057443736/sr=2-2/ref=sr_2_2/102-9403736-5546511
The MICROSOFT MFC Architect:
http://www.amazon.com/exec/obidos/tg/detail/-/1861000154/qid=1057443936/sr=8-1/ref=sr_8_1/102-9403736-5546511?v=glance&s=books&n=507846
Sat 05 Jul | Philo | My turn for a newbie question:
I was under the impression that, if given the option, one should avoid MFC and go (painfully) straight into ATL. Is that valid advice? Or is it 'disco sucks' backlash from the group that migrated from MFC to ATL?
Philo
Sun 06 Jul | Alyosha` | Philo: MFC and ATL are two tools for two different tasks. There is some overlap between the two, but MFC is tailored for creating applications whereas ATL is for writing COM objects and ActiveX controls.
Sun 06 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | There is a free add-on library from Microsoft called WTL, which replaces about 85% of what MFC does with a nicely templated system built on ATL's windowing classes (which are there primarily for ActiveX control support).
Personally, I found WTL much more intuitive than MFC, and it was definitely much lighter weight. At the time that I was using them (VC++ 6), the few things missing from WTL were not really important to me (doc/view, print preview... probably something else). Obviously, WTL had VERY good control container support, something that MFC was middling at at best. :)
Fri 04 Jul | David Basil Wildgoose | I'm not sure I understand the question, I think you need to be more precise.
However I suspect that your answer (if any) is to be found within the Declarative programming community (Functional and Logic Programming) who make heavy use of list manipulation, typical languages being Haskell, OCaml, Oz and so on.
Fri 04 Jul | Matthew Lock | Sumit, are you making the list yourself, or is it given to you by some(one|thing) else?
Fri 04 Jul | He-who-would-not-be-named | If you mean you want to find the number of times each element of the list appears in the list, then - yes, you can do it in O(n) average with a hash, or O(n log n) worst case with a balanced tree of some sort.
Fri 04 Jul | sumit | I am making the list myself, I am trying to find the number of duplicates in a sentence, how can I do this in less than O(n^2), by using say a hash?
Fri 04 Jul | Matthew Lock | Yes you should use a hash to count the number of terms. They are orders of magnitude faster than scanning arrays.
Fri 04 Jul | Matthew Lock | To clarify create in the loop that scans your sentence create a hash for each word you find and increment it by one. At the end of the loop your hash will contain a count of the words in the sentence.
Fri 04 Jul | Frederik Slijkerman | You can sort a list in O(n log n) steps, and then find duplicates in the sorted list in O(n) steps.
Fri 04 Jul | constructive comment | you view the sentence as a 'list of words'; are there other ways to view it?
Fri 04 Jul | sumit | How can I find duplicates in the list in O(n) steps?
Is there any other way than a hash? the system is such that incorporating a Hash will require a lot of changes
Fri 04 Jul | Ged Byrne | Without using a hash I think the best approach is to first sort the list using the fastest means possible.
Then iterate the list, counting duplicates.
Fri 04 Jul | Roel Schroeven | I don't see how using a hash could require a lot of changes in your code. As I understand, you use the hash only to find your number of duplicates, and throw it away afterwards.
Fri 04 Jul | Albert D. Kallal | What language?
If the list is small, then in VB you could use:
Dim c As New Collection
Dim buf As Variant
Dim i As Integer
buf = Array('one', 'two', 'three', 'one', 'a', 'one')
On Error Resume Next
For i = 0 To UBound(buf, 1)
c.Add Null, buf(i)
Next i
On error goto 0
Debug.Print c.Count
The above results in a answer of 4, since there is only 4 unique elements
Albert D. Kallal
Edmonton, Alberta Canada
kallal@msn.com
http://www.attcanada.net/~kallal.msn
Sat 05 Jul | DJ | use SQL :=)
SELECT [Word], Count(*)
GROUP BY [Word]
HAVING Count(*) > 1
Sun 06 Jul | Simon Lucy | You find the duplicates as you create the list, whether you hash/index or not depends on whether you care about this at some later date, ie you store the occurrence of duplication.
I typically store all words over a particular length (and those designated keywords), in knowledge systems as a separate table with the 'document' id and offset of the word. Duplicates within the same document get ignored in that case as its used to search the knowledgebase, but they could be stored as a count in the same record.
Sun 06 Jul | Geoff Bennett | This sounds like a job for...
Regular Expressions!!!!
Have a look at the RegExp component. You don't say what language, so I'm going to guess VB. RegExp's are available in many, many, many other fine languages.
All you would have to do is count the matches that come back. I don't know how this goes for speed, but it's been pretty good to me.
So recently I ran across this somewhere. Why are more developers not use this tag? You can make the clickable zone for a radio or check box much bigger (essentially including the text as a clickable reigon for the input object)
Are there any good reasons not to use this? For such a simple item it really makes forms more user friendly, esp when coupled with: label { cursor: pointer; } in your CSS.
Fri 04 Jul | www.marktaw.com | I always wondered how they did that, but never bothered looking it up. It is a useful feature and makes your HTML more like regular windows apps.
Fri 04 Jul | Duncan Smart | 'Are there any good reasons not to use this?' -- no, it's just ignorance methinks --
Fri 04 Jul | Ed |
Fri 04 Jul | Philip Dickerson | I started using both the label tag and accesskey tag for internal webs where I work, even back in the version 4 browser days when Netscape 4 didn't support it. I have tried to encourage its use in my small circle of influence, especially now that it is supported by more browsers.
If you start using the accesskey tag, use number keys, not letters - accesskeys are accessed using the Alt key and the character that you select, but browsers are already using most of the Alt+letter combinations for browser functions.
Sat 05 Jul | Christopher Hester | Using accesskey; how do you let the user know that is available?
These tags really help HTML rendered forms.
Sat 05 Jul | Guillermo | Ed,
'Get a designer to write you a nice CSS file'
please any suggestion of any product in this area?
Sun 06 Jul | Walter Rumsby | My suggestions for writing better semantic HTML and using CSS more effectively:
* Browse the element reference for the HTML spec at the W3 website - http://www.w3.org/TR/html401/index/elements.html - this is how I came across genuinely useful and meaningful elements like
Sun 06 Jul | Walter Rumsby | That should be:
http://www.bradsoft.com/
and
http://www.alistapart.com/
Sun 06 Jul | Phibian | I find the accesskey label to be rather useless, myself.
Even assuming I know what the accesskeys for a site are, pressing 'ALT' instead of 'CTRL' is very difficult and unnatural for me. And in IE, I have to also hit enter.
For me, thee mouse is quite a bit faster and easier.
Most non-experts that I have observed in usability tests have no concept of keyboard shortcuts. They tend to use the mouse for everything, even though they find mousing control challenging.
And if I had more limited mobility than I do now, trying to hit three keys at the same time, one of which is in an awkward spot wouldn't be doable.
Now, if we could access the arrow keys, or override the CTRL-x functions - that would be useful.
I taught SW engineering a few years back. I saw several areas where students were lacking, and had some useful methods for addressing those needs.
Heres what I saw:
1. RUSHING TO CODE
A tendency to want to rush to the coding phase, before requirements are gathered and spec is done. BTW, this was true in the telecom consultancy I worked for (as an EE Engineer as well. So, perhaps just human nature).
Many reasons for this, including:
a. We have better coding tools (IDEs) than we do tools for design.
b. Coding FEELS productive, earlier stages do NOT feel that way. (How it feels is contrary to the reality, of course).
SOLUTION: Id give a test with 10 questions. #1 thru 9 were worth a point (listed at the end of question). #10 worth 91 points. #1 thru 9 were fairly hard (10 minute problems) #10 was moderately hard but the ANSWER was in #1 thru #9.
I gave them 10 minutes to take the quiz. Only one student ever got #10 right.
Hed forgotten his book.
He couldnt answer #1-9 so he kept going til he got to #10.
Interesting responses DURING the test. A lot of bitching and moaning. (I never used the test score. It was just a mental exercise for them). Im not sure how much it helped them, but I think it got the point across. (Whether they were ready to LEARN that point is another matter).
2. NO TROUBLESHOOTING SKILLS
This just is NOT taught in colleges (in my experience). I learned the basics in the Navy and then went on to study it.
My students would do fine in class and then, if they encountered an error, they were LOST and couldnt recover.
SOLUTION: I would teach troubleshooting methodology. Then the first student who came in with an error would be used as a case study. I did this without embarassing the student. The CLASS would solve the problem as a group. Worked great.
ANYONE ELSE HAVE SIMILAR INSIGHTS?
Thu 03 Jul | Philo | 'SOLUTION: I'd give a test with 10 questions. #1 thru 9 were worth a point (listed at the end of question). #10 worth 91 points. #1 thru 9 were fairly hard (10 minute problems) #10 was moderately hard but the ANSWER was in #1 thru #9.
I gave them 10 minutes to take the quiz. Only one student ever got #10 right.
He'd forgotten his book.
He couldnt' answer #1-9 so he kept going til he got to #10.'
I had a *really* hard time trying to evaluate the lesson here - it seems like the guy who came to class unprepared then blew through the test as quickly as he could got rewarded?
I understand that the lesson *should* be 'review the entire project before starting', but recognize that in 99% of college exams there is no reward in doing that.
How *I* would teach that lesson - give a coding exercise. The exercise consists of requirements gathered from ten people, the design should meet their requirements as closely as possible. Same kind of drill - nine fairly dense (and often contradictory) sets of 'I'd like it to do [x]'
The tenth paragraph is the CEO who says 'do what 2, 4, and 8 wanted. Ignore the rest, we'll get them later.' (and of course 2, 4, and 8 create a well-formed design that's fairly straightforward to design.)
Philo
Thu 03 Jul | anon | I'm not sure I understand the quiz. Students are given 10 minutes to do 100 minutes worth of design/coding, the one who made the most points rushed to the coding phase while everyone else failed, and it was supposed to *discourage* rushing to coding?
Thu 03 Jul | anon | Ah, Philo just cleared up my confusion...
Thu 03 Jul | flamebait sr. | Semi off-topic, but I've sometimes wanted to teach solely because I'd love to mess with student's heads a little bit.
I want to give people a multiple-guess test where all of the answers are C. Except for the last one, which is A.
To make sure that they have confidence that they really know what they are doing, but aren't so encouraged by previous correct guesses to blow the last one. ;)
Thu 03 Jul | schmoe | as long as we're off-topic and messing with students' heads...
A roommate of mine had a stats professor who gave all-multiple-choice tests, except that along with your choice, you had to give a confidence level (0-100%). If you were 100% sure and got it right, you got all the points for that question. If you were 100% sure and got it wrong, you failed the entire test (-infinity points for the question). I don't know the details, but it was scored in such a way that if you were 0% sure the answer was A (that is, 100% sure it *wasn't* A), you still got some points even though you didn't actually get the answer. This leaves lots of interesting ways to mess with students' heads, based on the multiple-choice answers...
Thu 03 Jul | Michael Moser | I think a major problem is that few are able to READ code.
That would be a neat thing to teach at University; now they also have a huge corpus of open source software to practice reading/understanding code / decomposition of existing programs.
Thu 03 Jul | Nick | What I would teach is what I've dubbed The Tale of The Den and the Dining Room. If I'm sitting in the den in front of my PC, I don't design. The temptation is too great to just try things out. Cowboy coding is fun until there's a problem.
I have to move to the dining table, with a pencil, paper, and any needed reference books to plan out the design if I want to get things done quickly. Moving away from the PC forces me to think about the problem before trying to come up with a solution.
More than once I have hacked away for an hour or more, tweaking the code, trying to get it to work with no success. Then I moved to a table, really thought about what I was trying to do and what my code was actually doing and came up with a working solution in less than 10 minutes.
[This could be called The Desk and the Conference Room, but that doesn't have as good as alliteration.]
Thu 03 Jul | Daniel Schwartz-Narbonne | The program that I am presently taking (Engineering Science at the University of Toronto) has found a good solution to this program - a year long project building an autonomous robot, which ended up consuming between 20-100 hours/week, depending on the week. We worked in teams of three - I did code, a friend did mechanical, and a third friend did circuits. I learned more from that project than I have in all of my other classes combined - including things like the importance of preplanning code (but ALSO the importance of producing something that your collegues can test against). I learned about things taking twice as long as they should, tradeoffs of using different programming languages, teamwork, and of course, debugging (and more debugging, and then more debugging). Seems like this type of thing would be a good solution to these kinds of educational problems
Thu 03 Jul | Rich | Make it the 'Desk and the Drawing Board' ;)
-Rich
Thu 03 Jul | S. Tanna | While I generally agree with not rushing to code, I think there are exceptions, sort of.
For my most recent app, I was not sure I could do certain parts of it (2 areas to be exact, let's call them X and Y). There is no book, saying here is how you do X and Y. X and Y are probably < 1% of the app in terms of LOC, but they are essential to the entire purpose of the project.
I therefore rushed to code X and Y (well to be fair, I also mixed this with trying to figure out how to do them hundreds of times on paper). When I had them, I knew the app was feasible.
It was only then, I began to think about the other 99% of the app, which is mostly standard GUI stuff, and obviously do-able backend stuff. I always knew I could do the other 99%, so I figured it wasn't important or worthwhile planning this part at all (I know I can make dialog boxes, save into a file, etc.) until I had the critical 1% proven.
If I had planned out the entire app, before doing the critical 1%, and found I couldn't solve the 1%, the planning would be entirely wasted.
Another situation where you might have to rush to code, at least part of something, is where simply not sure how so interface or API works. Let's face it, many modern interfaces and APIs are only possible to truly figure out, by doing some coding experiments. If you haven't done the code experiments, you don't know the best/right/only way to design your app.
Fri 04 Jul | . | 1. That time == money
2. That giving their source code away is all part of a scenario working to undermine their chance of getting a job
Fri 04 Jul | Julian | There are two valid approaches to programming: up-front design (before coding) and evolutionary design (while coding). I find evolutionary design combined with continual refactoring to be the most productive approach. The end result is better, and it can handle spec changes more readily. Many excellent programmers prefer up-front design, but it's not the only way to do things.
Regarding the larger question, nobody gets good at anything until they do it. Classes can provide advice and assign self-contained projects. Still, everyone has a lot to learn when they begin their first software job, working on messy long-term collaborative projects.
Fri 04 Jul | Entrepreneur | I' understand that the lesson *should* be 'review the entire project before starting', but recognize that in 99% of college exams there is no reward in doing that. '
Not true in engineering classes that I took. We could answer any 5 of 8 questions. So, you learn really quickly to find the ones you can solve the easiest. (There weren't necessarily EASY problems, just ones that YOU could sove the easiest).
That was one of the most instructive things I learned.
Fri 04 Jul | Daniel Schwartz-Narbonne | And of course, the clear surperiority of the design first model over the evolutionary model is why we are all using gnu hurd instead of linux.
Wait a sec ...
Fri 04 Jul | Entrepreneur | REGARDING ITERATIVE DESIGNS
I agree, those work best.
However, it's important to have a good understanding of the problem. Coding is ONE WAY to better understand the problem. But a much faster way is paper-prototyping or 'doing it manually' as I told my students. The programs I've written are all about FORMALIZING some process as a program. It's VITAL that you undestand the process and be able to do it manually.
I realized this one day when I was trying to analyze 'how do I come up with algorithms' for, say, manipulating strings. I sit down and draw out the string and and say 'oh, I'll want to take the first 3 characters, character #1 to #3 and then do a Mid$ from Character #4...' blah blah.
Philo wrote:
'The tenth paragraph is the CEO who says 'do what 2, 4, and 8 wanted. Ignore the rest, we'll get them later.' (and of course 2, 4, and 8 create a well-formed design that's fairly straightforward to design.)'
PHILO- I like that a lot. It's more realistic.
Were you thinking this would be done by them in 10 minutes, etc. ?
Grading a design is really really difficult. It's very very subjective. (And many students --many people-- write like crap. They can't put a coherent sentence together.) That's thier problem. Just don't make me read it. It's painful.
A variation would be to have them list the features rather than create a design. (Or perhaps that's what you meant)
DIFFICULT TO LEARN FROM LONG PROJECTS?
I think one problem with learning lessons from projects is that the PROJECT IS SO LONG that people aren't able to learn from them. Perhaps that's just because TIME is not set aside for debriefing afterwards. But, also, the key is to get the point across as quickly as possible.
Fri 04 Jul | c++_conventioner | S. Tanna:
I think you bring up a well-illustrated point, which is that design-first often works best with low-risk, high-knowledge products (in more derogatory terms, commodity software).
Anyway, I digress:
If you want to teach people software engineering and its merits, for God's sake let's stop making it so fucking BORING. Noone wants to design when it entails a morass of paperwork and metrics and bureaucracy. And that, by the way, is what so much of academic software engineering teaches.
Design should be more like art, and less like CAD, and it should be broken up with some kind of active creation. People are not machines, and therefore the approach to creating a program should be fairly organic. Let's just acknowledge that, psychologically, creators want to create and see something come around sooner rather than later.
In this sense, the interests of businessmen and creators intersects, and we should therefore encourage the _most_ evolutionary model. IMO, design processes that work more towards strict formalizing miss the whole point of 'programming as a craft.' So too do tests where one answers #1-9, then 10 (is the Waterfall methodology in vogue in your particular sector of the economy?)
Fri 04 Jul | Philo | Maybe not ten minutes, but not much longer. Or heck, even give them an hour - that should still be sufficient for those who start working before they read the whole thing to really shoot themselves in the foot.
As for grading design, yes it's subjective and there can be many answers, but so long as they can explain their work (which should be part of the answer), then a functional design should still be an 'A'.
For example - you have to process invoices and purchase orders. Do you make one documents table or an invoices table and a purchase orders table? Both are 'correct' answers, they each have their issues.
Philo
Fri 04 Jul | Ged Byrne | The variation I had on this was my maths class. There would be a huge sum with a single times zero embedded in it that invalidated most of the sum.
Those that attempted to step through the whole sum piece by piece go nowhere. If you took the time to get an overview then you found that and saved yourself a lot of time.
Fri 04 Jul | Mathematical Dunce | These are both aspects of the one failing.
Most people don't have the mind set to read documents/code carefully and understand what is being built before beginning to impose their own will on things.
Anyone who does have the mind set soon finds out that large numbers of documents and programs are ramshackle constructs working by luck, if at all.
When doing maintenance work I find myself having to balance what the spec/design intended (if this can be deciphered), what the developer thought they were doing (however deranged), and what is actually required (occasionally related to one of the other two).
However, this doesn't stop me using sketched-out code to assess my theories and the problems likely to be introduced by alternative implementations. It never does to forget that there is an order of problems which arises from the different natures of spec and implementation (all those leaky abstractions).
If you want people who can read code and interpret specs you will probably be better off looking for good History, Literature, or Archaeology graduates IMHO. It's not about literacy or maths, it's about accommodating someone else's world in your own head and reviewing it critically.
Find some who can also write decent code and you will be well away. But if they have the right thinking skills they can be trained to write code ...
Sun 06 Jul | Stephen Jones | A similar test is the one that has a hundred questions to answer in an hour and starts of with the rubric ---Please read ALL questions carefully before you start to write anything.'
The last question says 'Ignore everything you have read before. Sigh loudly, hand in the paper unanswered and leave the examination room quietly.'
Hi,
Our tiny software company is currently inside our house (upstairs in a 12 x 14 room plus a storage closet, etc.).
Were considering moving to a larger house (we now have 3 kids).
One option were considering is a house that has a detached workshop (about 14 x 23) with A/C and heat, etc.
BENEFITS OF THE DETACHED BUILDING
1. Quieter
2. Easier to have additional employees.
3. Marginally eaiser to write off cost on taxes.
(It actually is pretty easy to do this with an in-house office too, as long as the whole room is used for the business.
BENEFITS OF IN-HOUSE OFFICE
1. Easier to pop in to do a bit of work while watching one of the children (say, baby Olivia, whos 7 months old).
2. Easier to access office resources, network connection, phone, etc.
If we want to go look at something on the internet, etc., wed need to walk to the office. Not a big deal unless its raining or 30 degrees (F) outside.
3. Easier (mentally) to leave work.
ANY OTHER BENEFITS of either one?
Thu 03 Jul | Entrepreneur | OOPPS!! #3 under in-house should have been listed under DETACHED office.
Thu 03 Jul | Philo | 'Easier to access office resources, network connection, phone, etc.
If we want to go look at something on the internet, etc., we'd need to walk to the office. Not a big deal unless it's raining or 30 degrees (F) outside.'
I'm not sure I get this - do you mean if the office is in the other building there will be no computers in the house?
Overall, I'd go with the detached building - I work in an office in the basement and even though the family knows I work here and that 'Daddy is at work' I still get interrupted one or more times/day.
Philo
Thu 03 Jul | Entrepreneur | Yes, there would be no computers in the house.
OR, if there WERE computers in the house, we'd have the additional trouble of running an ethernet connection from the extra building to the house.
(So, I'd probably just NOT have computers in the house. No sense in spending another $500 + cabling + lost space in the house just for another internet connection.)
TIP: have you posted a note on the door to your office that says 'Daddy's working ' ?
Or perhaps having some disincentive for interruptions?
Thu 03 Jul | Philo | Actually, no to the sign, and I need to start.
Regarding the connection - wireless. 802.11b. 11Mbps is plenty fast for an internet connection. Then you can have one terminal in the house for 'net connectivity.
Philo
Thu 03 Jul | Brad | Children grow up to be teenagers. Businesses can grow too. These are both arguments in favor of having the detached office, if you plan to stay in this house long enough for your kids or your business to grow to adolescence.
Teenagers, at least in my experience, pay absolutely no attention to rules. Thus requests like 'please keep the noise level down' or 'please don't download Kazaa and tie up our Internet connection' have no effect whatsoever. Teenagers are also impulsively curious and will poke around in your files and try to get into your computer when you're away. All arguments for having a detached, and locked, office.
Thu 03 Jul | Rich | My 2c.:
I think that the tax implications of a detached building are different from a room in your house. That is, you can't necessarily take the 'home offic deduction' on a detached building.
However, relying solely on my memory would be a bad idea. ;)
-Rich
Thu 03 Jul | Philo | Rich - only in that you can actually take a full office deduction, which is easier.
Philo
Thu 03 Jul | Dan Brown | I'd have a few questions:
- Do you have to meet clients in your office? I'd guess no.
- If you have multiple people, are their activities compatible with each other? For example, if you have several people, and they are all doing software development, that is fine. However, if you have significant marketing, sales, or customer support activities, someone will be on the telephone a lot, and may disturb others unless you have multiple rooms.
- Do you have special equipment or other items that pose insurance issues?
- How well can you work in your house with other people around?
If you are only doing software development, my guess is that working in your house will be fine, but if you have other activities, you'll find that using a separate space really helps.
Thu 03 Jul | Philo | Incidentally, make sure to check your zoning laws regarding home businesses and what's allowed in your location. I know that where I'm living I can run a business from my home provided:
- I don't receive clients
- I don't send/receive regular shipments
- I don't have employees
Philo
Fri 04 Jul | Entrepreneur |
No customers/clients visiting.
No regular shipments.
No employees ... yet (just the wife and me), although we may have one more employee in the future.
Good point on zoning. I usually don't worry much about that because we're usually not affected. But the Employee aspect might zing us.
We do development and sales, so those conflict somewhat in the workspace. But that would be true even in the house. I'd probably put up a dividing cubicle wall type of thing.
Philo-
I Enjoy your posts. Good suggestion on the wireless LAN idea.
Fri 04 Jul | Tony Edgecombe | I have just moved my work out of my home and into a small rented office after 18 months working at home. The main reason was that there were just too many distractions at home but also because I wanted a clearer separation between home and work.
Fri 04 Jul | Gregor Brandt | Go detached...
The separation of office from home makes it much easier to enjoy your home life without constantly being reminded of the work you have to do everytime you pass the office door.
It also makes a clear delineation between work and pleasure. You wouldn't be tempted to do a load of laundry in the middle of your work day, for instance.
Fri 04 Jul | Norrick | Since being laid off a few months ago, I've been working at home and I hate it. I hate it passionately.
My wife refuses to respect my work time, and refuses to police our 3-year old enough to keep him from walking in while I'm working or on the phone with a client (I can't get mad at him about it - he's only little). It's horrible working here in the house.
That plus the fact that my home is located in a spot where DSL is not available, and I'd love to have an actual office. But I haven't built up my practice to the point where I can afford to do so yet.
Fri 04 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | Norrick,
Get a lock for your door. Seriously. :)
Sat 05 Jul | jb | Norrick, put a weighted cardboard box in the doorway and cover it with toys. Toddlers like to come along and see you, and maybe talk, and looking over the box will satisfy that interest some of the time. The toys will grab their interest at others.
And finally when they clamber over it, at least you've got a bit of warning.
When we were faced with a similar situation, my wife used to go out a lot to visit friends and also - shudder - go shopping. It did actually cost extra, but was worth it.
Also, to a certain extent, you do have to get used to the different environment. I just accepted that times when my little boy was home and awake were times to work on non-coding things, like reading.
For telephone conversations, don't worry about it. You will find that most people are parents too. Just explain the interuption. I even took our little boy to meetings some time. It brought out a different side to lots of people.
Sat 05 Jul | Guy Incognito | Or turn the cardboard box upside down and prop up one end with a stick. Next, place a peanut butter sandwhich under the box, but within view. Attach a length of string to the stick that is proping up one corner of the box. When the todler sees the bait and goes under the box to retrieve it, pull the string and the box will come crashing down, trapping the little noisemaker in his place.
Sun 06 Jul | jb | That's offensive, Guy.
Sun 06 Jul | Norrick | 'Or turn the cardboard box upside down and prop up one end with a stick. Next, place a peanut butter sandwhich under the box, but within view. Attach a length of string to the stick that is proping up one corner of the box. When the todler sees the bait and goes under the box to retrieve it, pull the string and the box will come crashing down, trapping the little noisemaker in his place. '
No way - then I'd be interrupted with cries of 'Do it again, Daddy! Do it again!'
My boy is irrepressible.
In the I finally found one! discussion
http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=55060&ixReplies=19
someone mentioned that they should teach students to use the if( 3 == x ) style instead of the more common if( x == 3 ) style, for obvious reasons.
When I was in school, I asked a professor why they dont teach more about good programming practice, debugging, etc. His response was: If you could get 30 Computer Science PhDs to agree on a good style of coding, wed have a class on it. Obviously thats a losing proposition, so it wasnt taught.
Was anyone here taught these types of things in school? Or did you just have to teach yourself reading books like The Pragmatic Programmer, Code Complete, etc?
Thu 03 Jul | Justin Johnson | My Data Structures and Algorithms class was taught by a woman who's day job was at a software consultancy, who came back to teach that class just to have a shot at impressing on students the importance of good coding practices. Best professor I've ever had. There were fewer details, like the x==3 vs. 3==x thing, than there was repeated, close examination of code snippets. For assignments, there was a fairly simple style sheet.
The impression I left with was that the more important aspect of style is what writers worry about: It's not 'is it correctly formatted?', it's 'is it clear and understandable?'.
Thu 03 Jul | Mike McNertney | My university studies concentrated heavily on good coding style, but not at the 'if (3 == x)' level. Mostly it was about proper use of abstraction, not duplicating code, etc
Thu 03 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | It was CPS 586 (Operating Systems) before I saw the 'if (3==x)' stuff. Barely anything about coding style. Almost all of the coding when I went through was done in Pascal. I took independent study on C, Lisp, and Ada. The C class was a pre-req for 568, because the code was all in C, but if they didn't take that path, the students had no exposure to C.
Thu 03 Jul | Mike Swieton | I do take points off for style, but it's hard to make that significant when half your students don't get what 'if' does.
The last semester we graded the courses labs on a recomendation basis only: as long as you do them, they get credit, but we make comments. *Lots* of comments, usually.
However, I must admit that most don't heed it at all. Those that write good code do so from the start, and the rest turn in their final assignments with horrible indenting. Blech.
Thu 03 Jul | Andrew Hurst | I should add that another professor I had once related this story to me about the intro to programming classes he taught (in C).
What he would do is assign about 5 programming assignments over the course of the quarter. For the second or third assignment, he would pass back what people turned in for a previous assignment, but not to the author. he would take off all identifying comments, and give them to someone else. Then get the new person to add a feature. After that project was turned in, he lectured a bit on writing maintainable code.
He said that the 4th and 5th assignments were much easier to grade and read. :-)
Thu 03 Jul | Entrepreneur | Andrew,
That's brilliant!!
When I taught SW engineering, I gave an exam where the students got up to 30 minutes for design, but couldn't turn on thier computers. Then when they turned on their computers to start coding, they had 30 minutes to write the program.
This really encouraged them to THINK about thier design.
I think it helped them quite a bit.
I think I'll start a thread on: 'simple things that to teach sw engineers'
Thu 03 Jul | S. Tanna | For a long while I tended to write ( 3 == x ). I tend to do it the other way round now, and not worry about it, as I've never actually fallen for = instead of == in an if in many years of coding. The compiler hopefully warns you too. And the effect if some how it slipped by of accidental assignments, would probably be obvious from any reasonable amount of testing.
What I think more effort/ideas/thought should go into is in complex conditions involving several && and || and !. Everybody gets some complex condition wrong in their programs once in a while - and some of them don't get noticed, until late, or even in production code.
Thu 03 Jul | Andy | Well, regarding complex conditions, IMO if you have lots of huge if's in many places, then that indicates that you have a problem with abstraction in your program. People might accuse me of abstracting too much, but I think that is really the power of programming languages -- they allow you to create your own abstractions. The code I'm currently working on has tons of complex if's, and if's duplicated (w/ slight changes sometimes). Basically the main abstraction used is the programming language itself. You have to think at the statement level rather than at a higher level.
Incidentally I don't see how that relates to 3 == x, since that is more of a typing/syntax problem, whereas the complex condition thing is a very important design problem.
Thu 03 Jul | S. Tanna | The condition is still there whether it's in separate function(s)/layer(s) or not. I do not think human brains are wired to get complex conditions right enough of the time. If I understand your argument, it's reduce complexity by abstraction, which I would not disagree with. That said, I don't think it is more than a partial solution.
In my experience many bugs are caused by conditions being slightly wrong
As to why I raised it, it simply seems a more real problem with if statements, than whether you write if (x==3) or if (3==x), which rarely seems to go wrong in actual use. The 3==x debate is based on what I consider a largely false premise, that bugs are caused by typos and not reading compiler warnings.
I think bugs are primarily caused by other factors: logic errors, design errors, inability to full comprehend code, bad-wiring in human brains, not considering all cases, etc. And this is the area we ought to be trying to attack.
Many of the primary causes of bugs stem from poorly understanding the code. Abstraction can help. So can simple things like writing code in more readable ways, which is why I think if ( x == 3 ) is at least as good as if ( 3 == x )
Thu 03 Jul | Sammy | While I've been to college courses, I avoided compsci. Still, how do you learn good style when people fight over what language should be taught? In most languages, if(x = 3) isn't a problem to lose sleep over.
Indentation and commenting are the main thing that stays the same. And I hear Horror stories about teachers getting the commenting part wrong.
Fri 04 Jul | Andy | S. Tanna:
I agree that 3 == x is not really a major concern. I don't use it but I could care less either way. I agree with the first poster: there are very few absolute good coding practices of this sort. Everyone has their own style, because everyone thinks about programming differently.
And I agree that many bugs are caused by conditions being wrong. I think that complex conditions should be rarely used, and aren't necessary in many cases. In the code I am currently working on, there is all sorts of code like:
if( A || (B && !C) || D )
blah blah
if( A || (B && !C) || !E || F )
blah blah
where A B C D are global state. It's programming 101 to avoid this kind of thing, but it's of course widespread in practice.
On a mundane level, you can just say: goodNameHere = A || (B && !C). And then you just have:
if( goodNameHere || D )
and
if( goodNameHere || !E || F )
This goes a long way. But I'm saying that, even more importantly, if you have designed good abstractions, then a lot of the ifs dissolve away. For example, I'm working on some user interface code now, where basically every thing is done with ifs and switch statements. It is about 10 times more code than is necessary. It sorely needs some very well-known abstractions that are used in UI code like the APIs Microsoft and Apple have designed for the OSes (flawed though they may be, they're still better than writing UI code in a 1975 top-down style).
Just creating a polymorphic interface can eliminate a lot of ifs as well. Polymorphism forces you to make the abstraction when you write your code, which is a good thing. In C, using opaque pointers instead of directly accessing member tends to take a lot of ifs out of code. Many ifs can be hidden in the 'private' functions that manuipulate the structure.
I don't know if I am describing this very well, but in short I think that a lot of complex ifs are caused by design problems.
Fri 04 Jul | S. Tanna | > I don't know if I am describing this very well, but in short I think that a lot of complex ifs are caused by design problems.
Definitely 'some', possibly 'a lot', definitely not 'all'.
Some situations are complex by nature, because the rule that the computer is modelling is itself unavoidably complex.
I'm sure you can find many real world examples (and these aren't cauise some, but not-all complex, and un-simplifiable*, conditions in software, some may arise for internal reasons in the software too). For easy to find, real world examples, a good place to start looking might be business rules, tax codes, etc.
* Of course you can simplify any condition by wrapping part(s) of it in external function(s). But I'd argue that it is only truly simpler if the external function actually corresponds to something coherent that you can brain can take in, not so random of lump of &&s and ||s
Sat 05 Jul | Sammy | Actually, if you think about it, the Python community is remarkable. They're always asking, 'Is this Pythonic? IS THIS PYTHONIC? PYTHONIC???'
I think the moral is if you care about the Usability of a language, users will care too. C doesn't inspire me to care about how code looks. Whereas with Python, I think, 'Well, people have had enough time to get used to list comprehensions, why don't I stop using map/filter?' And it's kinda silly because a lot of this code might never see the light of day, but I would feel ashamed if I wrote code that the greater Python community wouldn't understand syntactically.
Sat 05 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | 'Just creating a polymorphic interface can eliminate a lot of ifs as well.'
The Refactoring book says something to the effect of 'every conditional should make you wonder whether a refactoring wouldn't be better', for just the precise reasons you mention. You turn:
if (isUserAdministrator) ...
into polymorphism, by separating normal and admin users and the things they do. That was pretty eye-opening advice the first time I saw it. :)
Sun 06 Jul | S. Tanna | The isAdmin idea is a good point, if the situation is as simple as that
What if:
Alice isAdmin isProgrammer
Bob isProgrammer
Charlie isAdmin
Dave isProgrammer isManager
Earl isAdmin isManager
etc
What happens here when you want to test these attributes? Multiple inheritance (a controversial topic in itself)
Alternatively what happens if your decision point (isAdmin) is not the same as your class hierachary (let's say your classes are based on job title which is not necessarily related to isAdmin). Again multiple inheritance, or decision points in one case
Sun 06 Jul | Tom | But your decision about the adminness or programmerness of someone should _never_ be based on the class hierarchy. You have a function that says true or false depending on the adminness of the object.
No hierarchy needed. (Well, apart from that mandated by the language. For example, you can't say 'thing->IsAdmin' polymorphically in C++ unless the common base class has an IsAdmin function.) And that is I think as it should be; for if you are using the runtime type of the object, that is hardly polymorphism!
An additional point is that any rule is always wrong sometimes. I may start another thread about this soon, because this seems to be the root of many arguments.
I have a database utility that I want to write. I think its got room to be successful in both MS and *nix worlds, against all the standard databases.
Im a MS guy, proficient at C# - part of the reason I want to multiplatform* this is to broaden my skills.
It needs robust data access (DML & DDL) to at least SQL Server, Oracle, and MySQL, and its going to have a fairly intricate UI.
My options:
1) Write it in C# then migrate. Gives me fast to market, but defeats the purpose of the exercise. :)
2) Java. Do Java UIs still suck? Or can that negative aspect of Java be addressed now?
3) Delphi/Kylix
Thoughts?
Philo
*take that, you verbifying detractors!
Thu 03 Jul | Daniel | At least Java UI's sucks much less than before. If you haven't tried it for a while it might be worth checking out.
/Daniel
Thu 03 Jul | Marc | If you know C# that Java is a fairly easy transition from a language standpoint. So that might be your best bet.
The database I work with most today (Progress) runs on some 37 different platforms and they use Java for a lot of DB management. So it can be done. The UI however is still poor. That is the price you pay for 'run anywhere' I guess.
Maybe C# and Mono? I know Sourcegear is working with them so they can port Vault to *nix. I'm just not sure how much UI stuff they have in there yet. Maybe Eric could chime in on this.
Thu 03 Jul | Prakash S | Philo,
Why excatly do you want to learn mysql, etc- ? Do you think it will give you an edge when you contract?
To answer your original Q, java & mysql...
Thu 03 Jul | constructive comment | many java apps suck, but then so does normal native xyz toolkit apps. Sucking is not related to the tool, so mcuh as the programmer imo.
delphi/kylix: win32/linux x386, very nice language, rad etc
java: most platforms (hence dbs themselves e.g. oracle use java (and suck, but see my first para))
php: want it to be an intranet-type app? I guess you're righting more of a tool though, right?
wxwindows: surprisely, this has database access and cross platform and is a nice c++ toolkit, great for snappy uis too. http://www.wxwindows.org/manuals/2.4.0/wx497.htm
My choice: delphi for the tools, java for the skills and wxwindows for the surprise
Thu 03 Jul | Lauren B. | re: Java and UI:
I just created a desktop app using Java Swing for the UI (1.3.1, which is not the latest). It works pretty well.
The one thing I'd caution you about is that if you attempt to use the Windows Pluggable Look and Feel, you will be extremely frustrated. The libraries just don't do everything correctly for the Windows PLAF.
The default look and feel, 'Metal,' works much better, and it looks pretty good. It's just different.
Additionally, this app. had a server component using JDBC to access and Oracle database. Had no problems, and it was nice and fast.
Thu 03 Jul | Michael Kohne | In my mind, Java for UI stuff is just a bad idea. My evidence is the program MagicDraw (which we use for drawing UML diagrams). We run it on workstations running windows NT. We have version 4.51, which has a copyright date of 2001 on it. Now, I have a Logitech wheel mouse connected to my workstation (It's actually my mouse - I like them enough to bring my own). Everything on this machine works just spiff with the wheel mouse - Except MagicDraw. Why? As far as I can tell, Java insulates the app so much from the actual UI that whatever normally happens with a wheel mouse and a scroll bar is getting lost.
So please, for the sake of the users who have a slightly non-standard configuration: Don't use Java for the UI stuff. Please!
Thu 03 Jul | Philo | Just to clarify - the application I'm working on is a database utility, so the more databases it can work with, the broader my market.
And I really want to *nix enable it to broaden my professional background - I can best recommend technologies if I've actually played with multiple technologies. :-)
Philo
Thu 03 Jul | Philo | Michael - good point, both for Java and testing in general. However, I'm not sure you can blame Java for how a two-year-old application ignores the scrollwheel. ;-)
Philo
Thu 03 Jul | Chris Winters | If you want to see how spiffy Java GUIs can be, check out the Intellij IDEA IDE.[1] (And the IDE is amazing as well!) The JGoodies toolkit [2] looks pretty sharp too.
[1] http://www.intellij.com/
[2] http://www.jgoodies.com/
Thu 03 Jul | Tom Vu | I highly recommend the Qt toolkit for GUIs. It is very simple and has interfaces with several languages. For languages, if this is a personal project do it in a language you are NOT comfortable with.
Thu 03 Jul | IntelliJFan | I'll second the recommendation to check out IntelliJ. It's a great tool with a great UI, and it recognizes my scrollwheel!
Thu 03 Jul | Rob Warner | Check out SWT, the Java GUI toolkit that comes with Eclipse -- http://www.eclipse.org -- it runs on all major platforms, uses native controls, and is extremely responsive.
Thu 03 Jul | Ged Byrne | Have you considered using Python?
Regarding Java:
- There are some Java apps now with very nice Guis. Take a look at http://java.sun.com/products/jfc/tsc/sightings/S01.html#5 .
If this isn't good enough for you, there is always SWT: http://www.eclipse.org/swt/
- VB6 IDE doesn't work with the Wheelmouse either. Plenty of Java applications do work with the wheel mouse.
Thu 03 Jul | Fred2000 | Java 1.4.2 includes a really nice XP look and feel. It looks just about perfect. Of course, your non-XP users still get the old, lame look and feels.
Thu 03 Jul | Albert D. Kallal | It is strange, but getting the application up and running for one platform (the one you know the best) would be my bet.
Some good feedback and a good dose of iterative design.
Then, you can start working on the other platforms.
Your mileage will vary on the above concept, but I find getting something working, and some good feedback is the way to go. When the features, and ideas starts settling down, you are then ready to start porting the product for the other systems.
I can’t know if you have this option, or you will (or have to) develop for both systems as you go along.
I say this, as then the first project becomes the design spec for the other platforms.
As for the other tools...darn, I can’t help you. I do have lots of software running on Linix..but we are talking strictly green screen data base stuff (and non sql!).
Albert D. Kallal
Edmonton, Alberta Canada
kallal@msn.com
http://www.attcanada.net/~kallal.msn
Thu 03 Jul | mph | Concerning the suggestions before, I would like to second jgoodies.com. That site has a swing look and feel that looks great, and comes with layout managers that explain how to actually produce a good looking gui. As far as the mouse wheel not working with java, that feature was added in 1.3 I believe.
Thu 03 Jul | snotnose | Nahh, dump Java. Try Python with one of the newer windowing systems. I started this being tongue in cheek, but it actually makes sense. Python is flexible enough to talk to about any db backend you have, and it's pretty easy to learn. You can distribute the .pyc files to keep your source to yourself.
Thu 03 Jul | Chris Tavares | Here's another vote for Python. You can use the wxWindows package to get decent cross-platform GUI, or QT if you're willing to pay for a GUI toolkit. There are database drivers available for most databases. And Python is flexible and powerful enough to do almost anything you could want.
And it's a lot more fun to code in than Java is, IMNSHO.
Thu 03 Jul | Ori Berger | Second vote for Python here.
It's extremely portable, entirely open and free, and has a huge, high-quality library. It compiles down to Java byte code if you insist, and lately even to 'specialized' compiling to native x86 code, which can sometimes beat out the best optimizing compilers because it does not in run time (It's like JIT, on steroids).
I assume a Python.NET will eventually be out as well.
Database support is good, and if you need a database you can easily embed the pure-python Gadfly database or the completely free SQLite.
And it's the language that scales best to any size project, both large and small. Spend 4 hours reading the tutorial from Python.org. You won't regret it.
Thu 03 Jul | flamebait sr. | Do it in whatever language that looks best on your resume. You will most likely end up hating whatever language that you use anyways.
Thu 03 Jul | Jim Rankin | Lisp :).
Thu 03 Jul | Jim Rankin | ...for reasons, read anything by Paul Graham.
Thu 03 Jul | Michael Moser | you could use java/JDBC, and do the interface as
servlet or JSP.
(well, that would need a web server to run, but is that a problem, nowadays?)
Thu 03 Jul | FullNameRequired | another vote for wxWindows
_love_ wxWindows...
java is still pretty bad...I haven't seen a non-trivial java application yet that was not instantly recognizable as being a java app///
Thu 03 Jul | Michael Moser | Another cross platform choice is ... PERL.
(CGI for UI and logic).
Thu 03 Jul | Giovanni Corriga | I second that. VisualWorks Smalltalk 7.1 is cross-platform, has good bindings to many database engine and is one of the most productive development environment I've ever seen. It's only drawback is the price...
but if you aren't going to sell this utility, you may use the Non-Commercial version for free.
Just be careful... if you get infected with the Smalltalk virus, going back to C# won't be easy :-)
Thu 03 Jul | Matthew Lock | > Perl - the 'write only' language...
How do you figure?
Thu 03 Jul | Michael Moser | every language can be a write only language.
in other words, you can produce good code and bad code, in any language.
Fri 04 Jul | Philo | Due to the power of Perl in 'inlining', Perl hackers often delight in minimizing silly things like linefeeds.
I've lost count of the number of times I've heard Perl gurus arguing 'I can do it in three lines of Perl' 'Oh yeah? I can do it in two.' (What's DeCSS? Seven lines, I think?)
Those same people are the ones I've on occasion heard 'I can't read this to debug it, I'll just rewrite it.'
Agreed - you can code poorly in any language, but I think Perl's the only language you have to know really well to really write unmaintainable code. ;-)
Philo
Fri 04 Jul | Matthew Lock | Perl's power is it's brevity, or succinctness.
Check this Philo 'Succinctness is Power' http://www.paulgraham.com/power.html
Fri 04 Jul | Andy | At the end of that article, he asks:
'Are there languages that force you to write code in a way that is crabbed and incomprehensible? If anyone has examples, I would be very interested to see them.'
IMO perl is one of those languages. While it doesn't 'force' you to write unreadable code, it seemingly encourages it.
Of course, to each his own. To me a scripting language should be obvious. I have better things to do than stay current with a scripting language and spend time learning all its idiosyncrasies. I can forgive a language like C for some of its oddities, because it is powerful enough that I would use it a lot. I use perl mainly for support in development, to do some quick and dirty job, and thus to me it is a secondary tool. And every time I have to go back to perl, I've forgotten some weird construct, or some idiosyncratic behavior, and it really annoys me.
Plus, most of my co-workers are the same way. And thus they write horrendous perl code (which is the 'default'), and when I have to modify that stuff it annoys me even more.
I'm probably using the wrong tool for the job, but that's what every developer on the team has installed, and I don't use it enough to be too worried about it.
Fri 04 Jul | Matthew Lock | I felt the same way about regular expressions. For a long time I used them so infrequently that I would always forget the syntax. One day I sat down and properly learned them and never looked back.
Regular expressions probably have the most cryptic and weird syntax of any computer language this side of Prolog, but you could hardly say that it's regular expressions fault if I keep forgeting their syntax. Ditto with Perl.
I think most of the 'Perl is write only' arguments are from newbies who hack out a quick script, then forget what they did 6 months later.
Fri 04 Jul | Andy | Right, that's basically what I said. We don't care about perl, we just need to get the job done somehow, and it's there. So we use it and get pissed off at it when we have to read it again.
Is there such thing as a 'perl programmer'? I mean someone who writes perl full-time. I see scripting as a secondary task, and one that shouldn't require a lot of effort to decode syntax. A quick and dirty job should be obvious. What I would use it for is stuff like copying a directory tree structure, doing rough source analysis, copying files around based on their attributes/existence, etc. If I was using Unix I guess the OS would handle a lot of this, but we're using Windows.
Incidentally it's not really regular expressions that trip me up. I just have to find a webpage with all the codes listed and I'm fine. It's all the other shortcuts and whatnot. The use of $_ and $_[0] or whatever is atrocious, both because some functions operate on those variables by default, and it lets the programmer skip thinking about a decent variable name, which might give you a clue as to what it stands for.
If something is a parameter to a function, I want to see it. Likewise, I want to know what that variable holds. A name is a good way to indicate that.
The argument of it saving programmer effort is totally false economy. If you can't be bothered to think of a decent variable name, or typing an extra parameter, then I don't know what to say. Code is read many more times than it is written.
Fri 04 Jul | treefrog | Two things.
1. My next door neighbour is a professional perl-head!
2. My own language of choice would be Ruby, but failing that I would add my vote for Python. The productivity you can get with a modern dynamically typed language is obscene!
regards
Fri 04 Jul | Guyon Morée | And again, a big vote for python here.... really, try it and will want to do every project in Python :)
yes, is has interfaces to every imaginable db. coding in python is just great. You have a lot of gui's to choose from nowadays. I'd recommend wxPython (wxWindows wrapper for python). It's very crossplatform (unix,linux,windows and mac i believe).
There is also a nice ide with 'gui-painter' it's called Boa Constructor if I recall correctly.
really, give it a try
Fri 04 Jul | sleepy | Shhh... Will you all please shut up about Python / wxPython / Boa - you're ruining my competitive advantage!
Sun 06 Jul | Simon Lucy | I'm considering python/wxWindows for something at the moment, and its nothing to do with Zope though it might have applications there.
I'm attracted to use Perl in much the same way as I was attracted to C twenty some odd years ago. The obfuscation argument is as valid for Perl as it is for C, that is, its pointless. Once you understand the syntax properly you don't recurse the symbols up your own bum even if you can.
Perl's terseness is useful because of its nature, an interpreted scripting language thats wonderful at handling strings.
As to which language for a database app, it depends on what kind of UI you want and in that case it isn't then so much which language as it is which cross platform UI library.
If you want a nice long learning curve then consider XUL/XPCOM or use wxWindows on top of whichever language binding suits you best. If you use any of the C family then you'll likely get much more bound up in the differences between platforms than in some system which encapsulates it all.
So if you don't want the over the cliff experience of XUL/XPCOM and any other language you can get bound into that (C,C++,perl,python, java, javascript), and you don't like Perl, then the python+wxWindows would be a reasonable choice.
Btw, the reason I'm not seriously considering XUL at the moment for my choice is that it has to work with IE.
Sun 06 Jul | Neil Bloh | Personally I find Python the best for any application for which it is suited.
MS developers in the US just cost too much!
http://story.news.yahoo.com/news?tmpl=story&cid=569&e=16&u=/nm/tech_microsoft_india_dc
At last there is an option. If MS can get rid of all their greedy US based developers and shift to low cost india, that will be a win for all of us since the savings will be passed on to the consumers and the cost of Windows and MS Office will be cut drastically, perhaps to 1/10 what it is now!
Only protectionists and racists will be against this new era of global opportunity.
Wed 02 Jul | Ankur | > Only protectionists and racists will be against this new
> era of global opportunity.
And whiners who overvalue their productivity.
Wed 02 Jul | Philo | 'that will be a win for all of us since the savings will be passed on to the consumers and the cost of Windows and MS Office will be cut drastically'
Haven't been paying attention, have you? Copy protection in XP was supposed to cut piracy by eleventy-zillion percent. That would mean more $$$ for MS, which MS promised to use for R&D, since the billions they have in the bank obviously weren't enough.
Consumers won't see a dime of that money.
Philo
Wed 02 Jul | FullNameRequired | makes a lot of sense really....lets them compete more nearly headon with open source as well, $3-7/hour isn't free but its getting pretty close.
Wed 02 Jul | Our team of programmer | Turn up your irony detector
Wed 02 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | Are there any entrepeneurial software companies in India that have made it big, or is the claim to fame simply cheap labor?
Wed 02 Jul | Ankur | > Consumers won't see a dime of that money.
And why should they? Why should consumers feel their own consumer surplus should increase just because Microsoft decreased their costs?
Wed 02 Jul | Anonymous Cowboy | My sarcasm sensors are going off pretty strong. Microsoft is yielding, what, a 90% software profit margin (remember before you do the math of sales to revenue, Microsoft loses BILLIONS each year on failed partnerships, and constantly subsidizing money bleeding ventures like the XBox and MSN). Microsoft could save billions simply by focusing on their core areas (operating systems and productivity software).
Announcements like this are meant to cater to the, in this case, Indian crowd (note the Indian VP of Windows Development). I mean the latter half of the article is about Microsoft cutting unionized production facilities, and earlier example was about consulting. Niether are the people making Office or Windows. Microsoft has attempted to sweatshop software development for years to no success, and once again this is a lot of talk with very little reality (ooh, a couple hundred people. Wow. Microsoft has hundreds of employees in virtually every country on the globe, so having a couple hundred in the second largest country in the world doesn't really sound too amazing).
Let me say this, though: If I hear that Microsoft really starts siphoning money out of the country that they've gotten through basically a consumer supported sanction, I'll be pirating their software and trying out Linux faster than you can imagine. To put it bluntly: Don't fuck with the American tech worker Microsoft, even if your mouthpiece is just trying to make his relatives happy - We made you and we will break you.
Wed 02 Jul | Walter Rumsby | I think some Indian companies like i-flex are moving from consulting work to product development.
The impression I got was that many of the major BPO companies were / are planning to use the revenue generate from BPO to fund product R & D. If memory serves me correctly i-flex develops banking software.
Wed 02 Jul | | It has always worried me that while I was partying and playing football at uni, geeks were learning to do useful things.
I and my mates always were worried that when we went into business and management, we might actually have a dependency on them, and thus have to pay them as much as we pay ourselves.
For a while that's what happened. For a while, they even made more than us. But thank God for the globe, that's all fixed now.
Thu 03 Jul | James Ladd | ^^^^^^
Thats a great post.
However, what about the actual economy here?
The people in country 'X' may be cheaper, but are they as good ? Thats the important question.
Who wants a person that costs half when they do less than half the job, or take 3x as long?
Thu 03 Jul | Rhys Keepence | No company is going to just pack up and move to India. Think of the costs, not to mention the training, staff losses, and loss of all the IP and ideas in the heads of the programmers. What India needs, and I haven't seen much of yet, is inside innovation. Why doesn't an Indian company do their own operating system, or office suite? Imagine that, it could be 10 times cheaper, or 10 times better (joking).
We sell a CMS/portal server, and our clients buy it because not only is it a good product, they also have access to us, the people who wrote the product, for consultancy. To be honest I don't see this going away any time soon. If Interwoven moved to India, the product may cost a million dollars less (/sarcasm), but it is still going to cost a few million to get going (more sarcasm, but relatively correct). And the consultants who do this work will have to be local to the organisation. Unless we _all_ move to India, nothing will change.
I think we should all stop whining and worrying, and stick to writing kick arse software :)
Thu 03 Jul | Bored Bystander | There is an incredibly important distinction between developing software for your own business purposes, and developing someone else's software for their purposes.
The former activity requires proximity to a base of users and paying customers, as well as the deep pockets to pay up front for an uncertain activity that may or may not yield a profitable product. It also requires something deeper - the decision and commitment to do so.
The latter activity is basically what all employees do. Developing someone else's software is a commodity function and requires absolutely no element of risk taking.
The IT entrepreneurship of 'India, Inc.' appears to be currently restricted to the domain of provisioning low cost, high quality outsourced development services. This is a FAR cry from envisioning a new class of product, evangelizing it, and spending the money and time to develop and market it.
So I wonder if India possesses the entrepreneurial culture to take this leap of developing their own intellectual property on a large scale. It is a large and non-obvious jump. It's always easier to take the money and work for someone else.
I look at the litany of glossy, high flying 'preferred vendors' and other such bodyshops that graced the ad pages of Contract Professional in the late 90's - did even a few of these places have ANY of their own product equity? Hell no. They'd can the ass of anyone daring to sit on the bench for more than 2 days, because internal R&D doesn't count, only billings. Same with India, I am guessing.
Thu 03 Jul | Walter Rumsby | If so that would explain why they work in banking software.
When I was in India they were touted as a local firm.
Thu 03 Jul | Prakash S | Citigroup has a majot investment in IFlex, Polaris. 2 companies from the top of my head.
Thu 03 Jul | Boris Yankov | The inital post is just ridiculous.
Don't you think at all before posting here?
Several very SIMPLE things to consider:
1. It does not matter how cheap will the new programmers will be. The investments are already made and ONLY the new software will be cheaper.
2. Indians are not that cheap. Not these which will be able to work effectively and well on MS projects, especially if they are core projects of them like Windows and Office (which is HIGHLY UNLIKELY).
3. It is ridiculous to think that in a software company the employees are ONLY programmers. Yes, they cost some bucks, but there are tens of thousands of people not related to programming.
4. Support and local representatives CAN NOT be moved to India :)
5. The actual moving will cost money too!
6. Cutting loses DOES NOT mean that they will lower prices.
7. Lowering sales MAY mean that they lower prices.
Actually lots of flame wars or just stupid threads are appearing by very wrong interpretation of news.
Thu 03 Jul | www.marktaw.com | I know MS is in a price war with Sony with their X-Box, but I don't think they're going to compete on price with the other OS's, and Office Suites out there... They're the market leader, and to compete on price would mean reducing the percieved value of your own product.
Thu 03 Jul | Jim Rankin | In totally unrelated news, unemployment figures in the U.S. are at their highest levels in over 9 years.
Sun 06 Jul | | A couple of people here are talking about lower costs for products.
Could we just get this straight. Companies outsource so they can keep more of their revenue as profit, not so they can cut the end costs to consumers. It's got nothing to do with benefiting customers.
On the topic of Indian firms developing products, yes, it's true that most have not done that, and I would say probably lack the expertise to do it successfully. It's a lot harder to developer a product you ship to people that it is to do custom business applications.
Sun 06 Jul | Warren Henning | 'If MS can get rid of all their greedy US based developers...'
I stopped reading as soon as I saw that. Get a clue before you make yourself look like a moron.
David Vaskevitch, Microsofts Chief Technology Officer in the Daily Telegraph, 29/06/2003:
[begin quote]
If all this change comes to pass, does that mean that we are heading for another technology bubble? A boom? Absolutely. Like the dotcom one? I sure hope not, he says. Theres such a lot of things that were wrong with the dotcom boom. The idea that you can start a company and it doesnt really matter if its never going to be profitable just feels wrong to me.
And its also like, would I like to live in a world where you dont have to exercise but you stay fit and you can eat whatever you want but you dont get fat? I dont even know if Id want to live in that world. But even if I did, its not a real world.
[end quote]
Sorry, surely this is the American dream?-)
Wed 02 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | Really? I don't like to make generalizations, but since you brought it up, it seems like Americans are pretty obsessed with health and fitness, whereas Europeans are often proud to be slovenly smokers who spend 3 hours eating a meal.
See? Generalizations don't help. :) (No, I don't believe what I just wrote. I'm trying to get a point across.)
Wed 02 Jul | Chris | I think that would be a dream for anybody, regardless of where you live. A world where you could enjoy things that are considered harmful (e.g. smoking, driving too fast, eating the wrong foods, drinking, etc.) without any consequences would be ideal. So many people do these things knowing the risks, imagine their happiness if those risks weren't there.
Chris
Wed 02 Jul | The Real PC | [it seems like Americans are pretty obsessed
with health and fitness]
Have you LOOKED at any Americans lately?
Wed 02 Jul | jedidjab | I think he's right with 'obssessed' -- he didn't say anything about them actually *doing* something about it :)
Wed 02 Jul | Yanwoo | >>So many people do these things knowing the risks, imagine their happiness if those risks weren't there.
Not at all. The main reason they bring so much hapiness is because we know they're B A D.
Wed 02 Jul | Jordan Lev | '...whereas Europeans are often proud to be slovenly smokers who spend 3 hours eating a meal.'
That's funny, I was just talking about this last night! We figured that there are a lot less cars in Europe--people walk everywhere, and that had something to do with it? Or maybe taking 3 hours to eat is better for your body and digestion than rushing a crappy fast-food meal into your body in 2 minutes flat?
Wed 02 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | Okay, folks, you can stop micro-analyzing the things I said I didn't believe. :)
Wed 02 Jul | John K. | > Americans are pretty obsessed with health and
> fitness, whereas Europeans are often proud to be
> slovenly smokers who spend 3 hours eating a meal.
There is a cultural difference: in Europe, the middle of the day meal usually takes one hour.
It is mainly a social event. People relax a little and get to speak with the other people working at the same company.
This is good for the company, in the long term, because lots of information is exchanged that way, and people know each other and feel that they belong to the same team.
It is also good for the productivity, because people work for 4 hours, then rest and eat for about 1 hour, then work the other 4 hours with renewed energy.
> 'And it's also like, would I like to live in a world
> where you don't have to exercise but you stay
> fit and you can eat whatever you want but you
> don't get fat? I don't even know if I'd want to
>? live in that world. But even if I did, it's not a
> real world.'
There are people for whom this happens for real.
They are thin, they simply eat what they want and how much they want, have a sedentary life style, and still don't get fat.
I know several such people.
Wed 02 Jul | Andrew Hurst | Regarding a world in which people could do what they want and never get fat/unhealthy/etc a good book that covers this in an AI/sci-fi way is 'The metamorphosis of Prime Intellect'.
http://www.kuro5hin.org/prime-intellect/
Very good short story. A bit too much gratuitous violence in a section, but in the end you see how it fits into the whole world. Covers the 'what would people do if they could do anything with no consequences' angle very well. There are also a few short stories set in this world linked to from that page as well.
Wed 02 Jul | J. D. Trollinger | Sooner or later, neurobiologists will figure out the molecular basis of appetite, and then we'll have a safe, effective pill for weight loss. Building muscle and cardiovascular endurance via pills might be more difficult.
Wed 02 Jul | www.marktaw.com | Safe? Hey boys and girls, let's mess with your bodies on a bio molecular level.
Wed 02 Jul | . | There's more walking in European cities because they developed at times when everything had to be convenient for walking. Thus useful facilities are within walking distance.
Secondly, that same history means many streets are small and unsuitable for traffic.
Wed 02 Jul | J. D. Trollinger | MarkTAW: Obesity causes health problems. If a drug can cure obesity, then some incidence of dangerous side-effects may be justified.
Wed 02 Jul | Sammy | Andrew, I'm probably slow. Could you point out the other stories set in that world? I don't see them.
A very good story, no matter the media or genre. Too bad he didn't do all the boring work of getting published. Maybe it's good to season though.
Thu 03 Jul | bpd | JD Trollinger: Why would anyone wish to unnecessarily inflict him-/herself with drug-induced side-effects when there's a much better long-term solution: appropriate diet and exercise?
Yes, I suppose you can make an argument that there is this tiny percentage of the obese population for which diet and exercise doesn't (hasn't?) worked. However, I'm of the opinion that typical medical solutions address symptoms, as opposed to actually 'curing' root causes. I.e., taking an aspirin doesn't 'cure' the cause of your headache; it just suppresses the pain. In like manner, drugs are not likely to be the catalyst that will 'cure' obesity.
Fri 04 Jul | J. D. Trollinger | 'there is this tiny percentage of the obese population for which diet and exercise doesn't (hasn't?) worked. '
Tiny? The percentage is huge -- maybe 90% or more of obese people will never lose weight via diet and/or exercise. Your argument is a bit like saying that heroin addiction really isn't a problem -- all people need to do is quit shooting-up. Whether we like it or not, the vast majority of obese people won't lose weight until researchers come up with some kind of pill for it.
Fri 04 Jul | bpd | '[...] maybe 90% or more of obese people will never lose weight via diet and/or exercise.'
I don't disagree. But there's also a huge difference between 'will never' and 'can never'. You make the point that they _won't_ loose weight (to which I don't disagree); while my point is that they _can_ loose weight (via diet and/or exercise).
'Your argument is a bit like saying that heroin addiction really isn't a problem -- all people need to do is quit shooting-up.'
But that's right - that's all they need to do. It may not be 'easy' (in the case of heroin, it may be life threatening), but a pill isn't the cure for an addiction. Unless a person's obesity is 'forced' upon them (and, therefore, doesn't qualify as an addiction), isn't it, as with other addictions, a matter of will/choice/desire/inner-strength (pick your term)? By definition, an addiction is a person's devotion to some habit, practice or pursuit; a choice made by the addict.
However, you may not have meant to suggest that obesity is an addiction. In which case, the preceding paragraph may be of little value to the discussion.
Fri 04 Jul | J. D. Trollinger | It's largely an academic question as to whether people do or do not have the ability to lose weight through diet and exercise. The point is that they simply don't do this in practice, for whatever reason. Thus, there are only a few options as what can realistically be done to foster weight loss. Surgery is one option (it worked well for Al Roker and Carnie Wilson). Pills will be another option, someday.
Sun 06 Jul | Stephen Jones | Exercise has very little to do with weight loss; most of the weight loss from jogging is caused by heat loss. You might as well have stood still.
It is possible that the increasing difficulty of exercising while obese acts as a warning and results in less eating.
Obesity has much to do with the availibility of food; a hundred years ago there were no fat men in the desert; now the Gulf States have the highest obesity levels in the world.
One theme I personally feel runs through all of Microsofts products - they dont know whats going on in the real world.
Ive always had this feeling with Windows - default options very often had the sense that it was someones personal preference/agenda instead of what really made sense in day-to-day use.
The feeling was strongly reinforced with VS.Net, with three main culprits:
1) The extreme difficulty in setting up a datagrid for bulk data entry. ANYONE whos ever written an ASP application has had to do this, and knows the loop structure for making tables by heart. Yet in ASP.Net you have to break the operating paradigm and do some serious under the covers work to pull it off.
2) The HTML formatting when switching between the designer and HTML views - no ASP programmer ever even looked at that; Ill guarantee the formatter was written by a C++ guy.
3) Putting dynamic javascript in a page is obviously a complete afterthought.
Id be amazed to find out that *any* professional ASP developers had any say in the development of that area of VS.Net.
The latest evidence that Microsoft lives in an ivory tower - Biztalk Server 2004 beta is shipping. With no EDI engine. Thats going to be in the RTM they promise. Microsoft has treated EDI like a red-headed stepchild for Biztalks short history. 90% of the worlds financial transactions are moving around in EDI and MS seems to think that X12/EDIFACT are beneath them, just as Steve Jobs felt that floppies were beneath the iMac. Both attitudes (IMHO) betray a serious misunderstanding of whats going on in their product space.
Just venting, really. :-)
Philo
PS - Ill be crossposting this (with more detail, me thinks) to the CAMEL. http://www.saintchad.org/blog/
Tue 01 Jul | Alyosha` | Reporting from Bellevue, just south of Redmond ... grey and cloudy.
Tue 01 Jul | Tom | Visual Studio Dot Net, eh. Having had to use it myself, I can assure you that no C++ programmers had a hand in its development either :)
It has this weird thing of calculating dependencies for all projects, not just the ones whose ultimate target needs building. Maybe there's a reason, but it's not clear and it slows things down. (I will admit, the compiler is generally faster.)
The dialog boxes are _still_ not resizable, and the text entry fields are teeny tiny.
The Project|Settings menu disappears and reappears depending on what's selected in the workspace.
Interestingly, the assumption where I worked (languages most often used: C++ & assembly language) was that it was designed by web developers :)
So you'll understand that I'm intrigued by a more web-oriented programmer thinking it smells of C++. This does make me wonder... just who the hell _is_ it designed for?! :)
(PS I didn't use any of the RAD stuff in it, it's just an overly fancy editor and build environment, but we were obliged to switch to it because MS don't supply Xbox tools for VC6 any more. I'm not sure what the opposite of rejoicing is, but there was much of that.)
Tue 01 Jul | www.marktaw.com | Overly saturated blue, haven't you seen any of their default wallpapers?
Tue 01 Jul | Tom | meta PS: so maybe if you are a C++ programmer who uses the class wizard for everything you will find it a perfect fit :)
Tue 01 Jul | Mister Fancypants | 'Both attitudes (IMHO) betray a serious misunderstanding of what's going on in their product space.'
Seems to be working out financially, though, eh?
At least in Microsoft's case.
Tue 01 Jul | S. Tanna | I have not used these particular products so can't comment on the specific comments, but the web UI comments caught my eye!
Maybe, I am jaded by seeing web-applications and web-like applications which are worse than the GUIs or Text versions they are replacing.
With some occassional exceptions - and this is 100% personal opinion - but I think the general trend (many companies seem to be following) to make client GUIs, especially programmer GUIs, more web like - is mostly a massive negative step.
IMHO Web Page GUIs frequently suck. Web Page GUIs can get away with a lot because:
- In most cases you read much more than you write and interaction is limited to occassionally clicking something.
- You probably don't do tons of user input
- If it takes 30 seconds to download the page when online, you can get away with a lot, as even clumsy UIs can seem quick compared to this
- They look pretty (and great in a demo). Unfortunately this ain't necessarily the same as being productive day-to-day
More fundamentally, there seem to be two different goals in different style apps. While the goals are not completely opposite from each other, there are enough differences that web-ifying a GUI may make it worse.
- Typical Web = Present information to *read* and *navigate* clearly. Collect only limited info from the user.
- Typical GUI or Text UI = Allow fast input of information as easily as possible.
Tue 01 Jul | ajs | Tom, I believe the opposite of 'rejoicing' is 'wailing and gnashing of teeth'.
On a slightly related note, I'd be interested to know what size of display people need to make VS.NET useable. I find there are so many windows all over the screen that the code winow is crammed into a postage stamp sized area on my display - admittedly only 17 inches, but I find it fine for most things.
Tue 01 Jul | Philo | S. - the users are low-tech store owners in over 200 locations all over the US, Canada, and (hopefully soon) Mexico. Would you approve of a web application in that case?
ajs - from a code window try Shift-Alt-Enter.
However, I find running 1800x1440 on a 21' monitor to give me plenty of usable space even with both UI and code windows open. You can get a 21' CRT for under $500 - I'd highly recommend it.
Philo
Tue 01 Jul | S. Tanna | > S. - the users are low-tech store owners in over 200 locations all over the US, Canada, and (hopefully soon) Mexico. Would you approve of a web application in that case?
I thought we were talking about stuff like development tools.
And the answer to your question is it depends.
If they are expected to enter say details of every transaction in some horrible scrolling web page form with limited user interface functionality, crappy validation, no hot-keys, and constant required clicking with the mouse (requiring taking hands of keyboard) then I think the users would probably prefer a faster way to enter them.
Sit next to somebody in a store, bank or travel agency who knows how to use the computer system and all the various hot-keys. They tend to whizz around at unbelievable speeds. For them a web page interface (and in some cases even a GUI as compared to text) is a massive retrograde step.
Users are not stupid, some apps are. If they have to enter a lot of data regularly, they get good at it, provided the UI is reasonable (and sometimes even with a crappy UI - despite the UI).
Tue 01 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | 'On a slightly related note, I'd be interested to know what size of display people need to make VS.NET useable.'
I used VC++ 6 on an 800x600 laptop. For VS.NET, I need a minimum of 1280x1024. :(
Wed 02 Jul | Farid | Reporting from beautiful Vancouver, BC, Canada (North neighbor of Seattle). Sunny, gorgeous and happy day.
Yes we won the bid for the winter olympic today, Hurray!!
Wed 02 Jul | flamebait sr. | I run VS.NET on a 1600x1200 screen. It works fine.
Well, fine if you consider the long list of issues that I've had with it, fine.
But the actual C++ compiler is quite nice. You have to give them points for that. +2 for good compiler, -1e6 for awful everything else.
Wed 02 Jul | Andy | Yes, I've noticed in a lot of applications, the mouse is an enormous step backwards as well. For very complex software it is good, because it does reduce the learning curve to be able to browse around the menus and dialog boxes.
But if you've ever seen people work with those old green screen inventory programs which only use the keyboard, they're amazingly fast with them. They've installed newer apps at my local library, which use the mouse, and the employees are much slower to look things up.
It would be nice if windows had good support for interfaces which are meant to be more keyboard-centric. Everything is mouse-centric and the keyboard is an afterthought.
Wed 02 Jul | Clutch Cargo | The opposite of rejoicing is of course dejoicing.
Wed 02 Jul | Michael Moser | if we are already at VC7;
bring back VC6 find_in_files dialog; i am missing it.
Thu 03 Jul | Chris Nahr | Find & Replace in Files are available in VS.NET 2003 (not sure about 2002) as Ctrl+Shift+F and Ctrl+Shift+H, respectively. You have to use the little 'dots' button to access the folder browser, then you can enter arbitrary directories instead of the standard solution/project options.
Thu 03 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | Yeah, I don't get the objection to the find functionality in VS.NET. It changed a bit from VC6 in that it's centered around the files in the project instead of the files on disk, but that's probably generally for the best. :)
Thu 03 Jul | Chris Tavares | I'm not too fond of the new find-in-files dialog. It's far too easy to accidentally run your search somewhere other than where you thought, and that directory selection dialog is a usability nightmare. Not in the slightest bit intuitive.
Thu 03 Jul | Mike | Grey. It's snowing and were up to our asses in penguins.
Sun 06 Jul | Stephen Jones | Dear Philo,
You are quite wrong about floppy drives on iMacs. A colleague of mine whose email address was MacAl@isp.com told me four years ago that floppies were dead; he did this at great length as he was making his daily backup on floppies at the time.
The only iMacs I ever saw in Saudi were in an Internet Cafe that was originally a Mac distributor but converted to make use of all the stock nobody would buy. And everyone of them had an external Imaton drive. The leading laptopseller in the Kingdom offers a discounted USB floppy drive with every superslim notebook that doesn't come with one as standard.
Sun 06 Jul | Philo | Stephen, how do you mean I was 'dead wrong' about iMacs? The original iMacs shipped without floppy drives because Steve Jobs decreed the death of the floppy. He apparently did this from the top of his ivory tower without checking with the real world.
Floppies are dying now (five years later), but they're still not dead. The last box I built without a floppy; I've since regretted that move and my next box will have the little $14 anachronism.
Philo
Sun 06 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | I'm floppy-free and don't miss it or regret it. Making bootable CDs is pretty simple. But if worse comes to worst, my laptop came with an external USB floppy drive that any PC can use (presuming it contains a moderately recent BIOS, it can also boot off of it).
Im a journalist, and I travel extensively throughout Asia commentating and reporting from hot-spots. A colleague of mine last week was arrested and had his laptop taken by the police in this specific Asian country, and interrogated, he was accused of sedition because of his articles, but whats weirder, he was accussed of software piracy. Despite the fact our notebooks are given by the news company we work for, and we dont install or uninstall anything from it. It was a mere pretext to haul him in, this is backed up by the fact that no credible anti-piracy laws exists in this ultra corrupt nation.
As a result of this incident, Im seeking to take all measures possible when travelling abroad.
I know there are software to hide files, and im trying out the trial versions at the moment. But is there such a thing as software to hide program files, and all the shortcuts that accompany it in the start menu and desktop?. Im using windows xp, I was thinking if there was such a thing as a decoy operating system that I can use?.
From now on, Im leaving nothing to chance.
Tue 01 Jul | Mike Swieton | Two points:
Firstly, if the laptop was just a pretext, what makes you think that having a more secure laptop will keep them off of you?
Second, 'hiding' files usually means steganography. It is worth noting that, as far as I am aware, every method of steganogaphy devised thus far is detectable. Even if it was undetectable when it was invented, I believe an attack has always been able to be created after the fact.
Meaning that a competent party that thinks you may actually have data hidden will be able to find it.
Your other option is encryption: Sure, they'll know the files are there, but without a key, they can't get at it.
In any case, I doubt there's any method that can stop a rogue government from coming after you: if they only need a pretext, it can usually be found.
The only good solution I can think of is to establish anonymity, however, for a journalist, that may be impractical.
Tue 01 Jul | flamebait sr. | You could always encrypt with Solitaire. ;)
http://www.counterpane.com/solitaire.html
Tue 01 Jul | Nick | What was the country?
Tue 01 Jul | Boris Yankov | If you believe that encryption will save you then:
You don't need anything more.
Covert your file system to NTFS.
Then from the folder properties you choose 'Encrypted'.
So without your password the folder is actually unreadable even if used from another PC.
Tue 01 Jul | eclectic_echidna | An encrypted file obviously means that it is subversive.
Get a sattelite connection, and send your files out of the country as soon as you can. Leave nothing on your laptop.
--
ee
Tue 01 Jul | Sammy | I've never used VMware, but I understand it uses a single file to store its snapshots, so you can use both encryption + stenography on it.
Maybe this is a solution?
Tue 01 Jul | Sam Livingston-Gray | This obviously falls under the heading of 'security through obscurity', but you could have a dual-boot setup with a boot loader (such as LILO) configured without a menu. The default choice would be Linux (or BSD, or some other OS that's impossible to pirate because it's free), but you'd also set up WinXP under some not-trivially-guessable option, such that if you typed in 'MicrosoftSpyware' (sorry, couldn't resist the dig; I'm still using Win2k) you'd get your 'real' OS.
Of course, if the person inspecting your laptop knows Linux and you let them log in*, they could check the configuration of your boot loader, or inspect the partitions and see that there was a Windows partition, or something. You might also need to demonstrate some sort of familiarity with the decoy OS to make it convincing as well.
* Note that withholding login information, or encryption keys, from law enforcement personnel could easily land you in jail.
Tue 01 Jul | Steve Smith | Hmm. Sounds like a request for a bribe to me. 'Look, I'll pay *you* for the software and we forget about it, OK?'. But I've never had to deal with these types. Encrypt your data and hope. If they want ya, they gotcha.
That said, what I do sometimes is to have one OS boot from a floppy and the other OS boot directly from the c: drive. (Win2k does not play nicely with other OSs. The floppy keeps everybody happy) Without the floppy in the drive, it just boots straight into the second OS.
Keeping a floppy in the drive when you're going through an airport is a good idea, too. If they make you turn on the computer to prove it's 'real', they're perfectly happy with the 'Non system disk error' and you don't have to worry about interrupting the boot cycle.
Tue 01 Jul | Joel Spolsky | Hmm...
How about this: you get an IBM Microdrive (postage stamp 1GB hard drive) and install VMWare and a VMWare OS on the microdrive.
Keep the microdrive separate from your laptop unless you're actively using it. It's small enough to hide just about anywhere. Put it in your digital camera and pretend it's film.
Tue 01 Jul | Traveller | I agree with ee.
Encryption is stupid. That just 'proves' to them you are a spy. Don't forget encryption is illegal in their country, so you 'really are' a criminal then. Don't forget that they will simply torture you until you give them the password. ee's suggestion to email all your work out of the country immediately and then delete your mbox is the correct one. Have a plain vanilla computer with a few pictures you've taken of tourist spots and a few emails to your sister about how wonderful the country is and how friendly the natives are. Make sure yours installation is a bare bones one and you have a friend back home who can fax in your receipt from Dell.
Tue 01 Jul | Our team of programmer | I seem to racall a USB watch that had a gig of storage, but alas the link was deleted.
Wonder what Q has to say?
Tue 01 Jul | Philo | 'ee's suggestion to email all your work out of the country immediately and then delete your mbox is the correct one'
Close. If you've got a connection to email, then you have a web connection. *Webmail* your work out of the country, then simply clear your IE cache.
However, I think Joel's suggestion is a better one - load linux, run Windows in a VMWare partition loaded from a microdrive or flash card.
Philo
Tue 01 Jul | www.marktaw.com | I agree with the e-mail the files solution, or set up a web server with something along the lines of moveable type or a WIKI on it and just 'blog' your articles from anywhere with an internet connection. You can SSL it in between points, and there should be no record of it on your computer, even less than with a deleted e-mail.
Hopefully this will allow you to not keep any subversive programs on your computer, and a bare minimum of text between your online sessions.
Tue 01 Jul | Tom | Why do you have to use a PC? What is wrong with (say) a Sinclair Z88, or a Psion Series 3/3a/5/7?
Well, probably plenty, but there's limited installable software, longer battery life, and if you don't install the lithium backup battery you can erase the internal memory by just pulling out the AA batteries.
Tue 01 Jul | Geoff Bennett | I can't help thinking of a certain scene in 'Pulp Fiction' to do with a watch, and being a POW...
Wed 02 Jul | Just me (Sir to you) | If it was a pretext then any attempt at decoying wil just put extra fuel on the fire, and can be hauled in as 'proof' of obstruction/subversion. I would in such cases be very carefull with some of the suggestions that have been made here.
Wed 02 Jul | Common Sense Guy |
Hiding or encrypting files won't help.
If the police are willing to falsely accuse you of software piracy, what makes you think they won't also falsely accuse you of having 'subversive' files on your computer.
In that environment the truth is irrelevant. Even if you could hide every file on your computer, they would just find some other excuse to arrest you.
Wed 02 Jul | programmer | I would also think that 'hiding' things on a postage stamp drive would also look mighty suspicious -- and if found, would lend credence to the rogue government's claim that you are up to no good.
Even if what you're hiding is perfectly innocent.
Wed 02 Jul | Steve Barbour | I think you have to ask what would be an acceptable OS to these people.
Linux? That's certainly do-able. You can even use it as your primary OS.
I agree with some of the other posters though, a pretext is a pretext. They are just as likely to accuse of piracy if you were using Linux.
As far as the microdrive, it has its attraction. It'll be easy to hide on your person, and easy to drop/destroy if the need arises. Heck, you could probably swallow it if necessary (beware of heavy metals poisoning).
I don't think you have any safe way to do it though.
Good luck! And let us know what you decide and what happens.
Wed 02 Jul | Jimmy | I'm attracted by Steve Smiths idea, of using a floppy disk to result in a non-system disk error. While I do like the idea of linux as an option, windows xp should not be a visible option. It would be good to have a way to conifgure it so I can select xp without visibly being given that option on the screen.
While many argue that they will find any pretext no matter what I do,,its best that I reduce those chances of them finding a pretext, no matter how sooner or later they find one.
Wed 02 Jul | Joe Grossberg | I'm missing something here -- can't you use just about any OS and then not tell them the login password? (And don't store it either.)
If they ask, tell them you forgot it.
If it's the kind of country where they hold you indefinitely until you remember the password, a confiscated computer is the least of your worries.
Joe
http://www.joegrossberg.com
Wed 02 Jul | www.marktaw.com | It shouldn't be too hard to bypass the login, either BIOS or OS if you were motivated, or simply knew how to do it.
I think the best defense is simply to not have any of that stuff with him. A computer with a bare minimum install of an OS you can prove you have the right to use with a few internet tools, whose ownership you can also prove, so you can e-mail anything out of the country and delete it as soon as you have access.
Isn't China that country with 'The Great Wall' - that big firewall that prevents anyone inside the country from getting to certain websites? One might assume they have their own versions of TIA & Echelon and track you as you move about the internet anyway.
Sun 06 Jul | Stephen Jones | If they stopped your friend then it was for a reason; and if they pulled him in for software piracy then it means they can't get him for anything else so they've invented a holding charge that will play well with Western diplomats.
Some of the advice here might be of use for passing through Western Customs though.
You really ought to tell us the country.
These two screens have no color:
http://www.attcanada.net/~kallal.msn/test/gs1.gif
http://www.attcanada.net/~kallal.msn/test/bw.gif
This screen shot has color:
http://www.attcanada.net/~kallal.msn/test/color1.gif
(the above screen shots are from ms-access, but that is really moot point here).
I don’t use color in my applications. I use straight boring battle ship Grey.
For some reason, I don’t like color.
Question:
Do you folks use color in your applications?
Do you recommend color?
Albert D. Kallal
Edmonton, Alberta Canada
kallal@msn.com
http://www.attcanada.net/~kallal.msn
Tue 01 Jul | www.marktaw.com | First impressions - the non-color screens look more professional. The color ones make me think 'the developer wanted to show off' and instinctually I tend to trust the application less.
Tue 01 Jul | Nick | Well put, Mark.
Tue 01 Jul | Developer who sucks at graphical design | It is a lot hader to male an application look good using colors.
As a user, I like UI with color schemes only if they look real good.
Color can make aplications friendlier and better looking, I prefer not using color because it is a lot harder to build a UI that looks good using color than using the standard gray combinations.
As usability advocates say, changing color of standard UI elements acauses the user to change his mental frmework of understanding of how things work.
Tue 01 Jul | Larry Prince | One risk of using color is that around 7% of men (American men, anyway) have a hard time distinguishing red from green.
Tue 01 Jul | apw | The application i work on allows the user to setup a color scheme; an extension of the windows color themes (i.e since its a db front end you can highlight certain records based on some criteria, change color of focused controls, etc)
Tue 01 Jul | njkayaker | Try changing the color scheme of your computer and looking at the program.
It looks like the default system color is being used for the button backgrounds but gray is explicit for the dialog background.
Tue 01 Jul | Joe Paradise | Use color with purpose.
Only use color when you want to draw the user's attention to something, such as invalid data entry or an error condition. Limited use of color on a battleship gray UI will stand out much better.
Put in gratuitous color and graphics, and your users will eventually tune it out as visual noise, thereby reducing the overall effectiveness of color in your app.
In your color screen shot, I'd say the alternating white and gray grid lines was good, in that it aids in horizontal visual tracking across the grid. The monochromatic nature of those two colors provides visual differentiation without drawing undo attention to the grid.
The red and green color and graphics for the group headers, however, seems superfluous. For example, if you tried to use a red font to highlight high-priced parts, or parts not available, the red background in the 'Cars' line would conflict with it visually and intuitively.
Just my $0.02…
Tue 01 Jul | Mister Fancypants | I have to disagree with the consensus going on here so far.
I think using color is a great idea for virtually any application as long as you keep in mind the color-blindness issue previously mentioned (which can easily dealt with) and, most-importantly, the color schemes should be chosen by someone who is an expert at such, someone who understands color theory, etc. Allowing (most) programmers to decide the color scheme on their own will result in a hideous eye-sore.
Tue 01 Jul | flamebait sr. | The problem is that most people find muted colors in a carefully designed scheme soothing. It enhances the experience.
But most programmers use bright, vivid colors for everything. I think it goes hand-in-hand with the traditional engineer pocket protector containing at least 3 colors of pen, plus a pencil. ;)
And, of course, web pages need designers, but UIs don't always need one.
Tue 01 Jul | www.marktaw.com | I agree with Joe. The rows are already indented in an obvious way, what purpose does the color serve? I keep looking at the headers and ignoring the content.
Also, the colors you chose aren't even related - shades of the same color would relate them better, though simply inverting them (white on black) or giving them a gray or darker gray works just as well.
Tue 01 Jul | Eric W. Sink | Two basic rules for using color:
1. Avoid using color unless you know how to do it properly.
2. If you're not sure whether you know how or not, then you don't.
Tue 01 Jul | HeyCoolAid! | Don't forget to consider who the program is for. Is it an accounting app? Probably little to no color should be used. It is a greeting card generator for kids? Lots of color... but designed by a professional.
Tue 01 Jul | Phillip J. Eby | It must be just me, but I clicked on the links included by the OP, and found the 'non-color' screens both hideous and amateurish-looking, when compared to the pleasant appearance of the 'color' screen. (Not that there aren't a few places where the color screen could use some tweaking.)
That doesn't mean I think the color one is easier to use, just that someone would be more likely to *buy* that program, because it looks better.
Tue 01 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | Actually, my objections to the color screencap aren't color related (although I'm not sure that the colors are the right ones, they're also not offensive). I strongly dislike purposeless icons and the drop-shadow on the text.
Agreed, too, that the B&W images didn't looking particularly good (not bad, but not good).
Tue 01 Jul | Martha | Albert, you need to bring up the properties window, find the back color property, and enter '-2147483633' into it. :)
Tue 01 Jul | Mister Fancypants | My biggest issue with the non-color screens is they scream 'Windows 95' ('OLD!').
Of course, an application being 'OLD' looking or actually old is no indication of its quality, so this is a superficial thing for me to judge it on, but I still do anyway. And if I (as a programmer) make this snap judgement, I'm positive many users will as well.
Tue 01 Jul | Leonardo Herrera | On a side note, bad use of color (ie, using Grey instead of the appropiate system color) is bad. Also, using white instead of the appropiate highlight color... I use the 'Rainy Day' color schema in my Windows box, and I can tell a bad designed(*) app from a mile.
(*) An app can be a marvel of design, but this small details just screams 'lazy/incompetent programmer!' to me.
Tue 01 Jul | Chris | What about using colour to distinguish different sections of an application - Microsoft Money does this very well so if the background is a pale green colour you know instantly that you are in the accounts section, but if it is orange you know you are in the Share Portfolio section.
This works well because when you are on the Money ''Home Page' you can see from the colour of the link heading what section of the program you are going to.
But saying that I do think the Red and Green rows in Alberts colour screen are not providing any real value to the user - but having said that, we do have a similar thing in our app just because the sales guys said it would look better.
Tue 01 Jul | Albert D. Kallal | Thanks for the comments folks
>>Two basic rules for using color:
1. Avoid using color unless you know how to do it properly.
2. If you're not sure whether you know how or not, then you don't.
I have to agree with this. I as rule don’t use color. Further, I find it takes effort and developer time to come up with colors. I mean, to spend resources and time to start using color is to me a real big decision.
And, yea I written software for years...but avoid color. I mean, in FoxPro/dos before windows I generally used blue/white, or the default light green that Fox used.
So, I just advoid the issue right now!
>>found the 'non-color' screens both hideous and amateurish-looking
I don’t think the non color screens are poor due to no color. However, I can’t quite put my finger on it, but I am not really that happy with those screens either.
>>Agreed, too, that the B&W images didn't looking particularly good (not bad, but not good).
I am considering updating the look of those screens. I am open to suggestions. I did not think they were bad, but I also agree that “something” is wrong with them. They are not that good. (of course, “me” the developer NEVER thinks anything is bad!!!).
I open to suggestions on improving the look of those grey screens....
Albert D. Kallal
Edmonton, Alberta Canada
kallal@msn.com
http://www.attcanada.net/~kallal.msn
Tue 01 Jul | www.marktaw.com | Well, the B&W screens look very Windows 3.1 - something about the buttons and icons and borders looks Win 3.1.
I'm sure more attention can be paid to the flow of the data being presented, but I'm too tired to look closely at it.
Tue 01 Jul | S. Tanna | I prefer the last screenshot (although not sure of some of the colors used or the context for choosing them).
Ledger paper has horizontal stripes for a reason: it is easy to trace along a horizontal lines.
About the non-color screens:
- Why are some headings in grids not shaded at all
- Too many fonts. Limit yourself to a maximum 2 fonts if you are not sure (read basic typography rules, with all due respect, that part makes the app look less professional. It reminds me (although far less extreme) of DTP publications where the author has to use way too many different fonts and font sizes. Also what happens if they change the Windows font settings?
Wed 02 Jul | Jeremy Statz | Think I have to go against the flow here and say that upon initial scan, the color pic was dramatically easier to read. Part of that is the indentation and general layout though, the color's just sort of there to draw attention to the headings.
Wed 02 Jul | Just me (Sir to you) | I prefer the color one, very much so. More than the color it is the fonts, layout and whitespace that make it look a lot more practical to work with.
Even if you drop the color (but do keep the horzontal grey/white alterations) I suspect a big 'thank you' from the users will be forthcoming.
Realy sorry but it has to be said: The first two screens look very much like pixel by pixel ports from the Commodore 64 days.
Wed 02 Jul | Peter Ibbotson | Nope. We have a support guy here who uses the HiContrast colour schemes (Because he's legally blind) and it's vital for him to get this right.
We have a few exceptions (Red for negative usually), but in general we stick with system colours.
Wed 02 Jul | Gareth McCaughan | * bw.gif:
The column labels are horribly misplaced. Move them down 2 or 3 pixels and get the horizontal positioning right.
The 'Remain' column's data should be right-aligned, not left-aligned.
The column headings are things like 'ToName'. It would almost certainly be a win to change the first five to: 'From', 'To', 'City', 'Hotel', 'Tour'.
Instead of the boxy thing labelled 'Search Options', unclutter the layout a bit. Move the radio buttons down so that their labels have the same baseline as the text over to their left; and put 'Search ...' on the line above, same baseline as the text to *its* left, left-aligned with the left-hand edge of the leftmost radio button. (Possibly one pixel left or right of that. Try each option and see which one looks right.)
The title bar says 'Tour Search'. You don't need to say it again in the window. Taking that away frees up the space to make the 'Downhill Riders ...' thing left-aligned.
Align the right-hand edges of your visual elements: the date and time, the horizontal rule, the right-hand edge of the scrollbar, the door icon. And the right-hand edge of the group box, if you keep that; or the right-hand edge of the label on the rightmost group button, if not.
And the left-hand edges, too. Preferably move the left-hand edge of the grid in to line up with the left-hand edge of the text. Make sure all your left-aligned text is left-aligned to the same margin.
Speaking of which, that door icon is taking up a lot of space. Not only the space it occupies itself, but all the space to its left. Surely there must be a better way? If it means 'Exit', then why not just use the close box in the title bar? If it must stay, then please give it a textual label too.
This isn't really pure greyscale, of course, because those spectacle icons have cyan lenses. :-) Something's not quite right about their vertical placement, by the way.
If you can inset the text in the grid cells by one pixel on each side, it will be easier to read and nicer to look at. If vertical space is at a premium, at least do this horizontally.
Can you make the internal rules in the grid less obtrusive? You really don't need 3-d effects here. Why not nice muted thin grey lines?
You will be amazed how much better it looks if you do all this.
* color1.gif:
Much nicer to look at, at first glance, than the two greyscale ones. It's mostly not the colour that's responsible, though.
Notice how everything has a bit of room to breathe: there's a bit of whitespace in the grid cells, for instance. (A pixel more of horizontal padding in the 'Price' column would do it no harm at all, though.) And the grid itself isn't jammed up against the left-hand edge of the window.
Notice also that the left-hand edge of the grid lines up with the leftmost checkboxes.
The use of colour is helpful too, mostly for purely aesthetic reasons but also because it (fairly subtly) directs attention to the structure of the tree.
The alternating colours for the rows of the grid help to make sure the eye doesn't wander onto the wrong row. (They could do with being slightly subtler, I think, but that's mostly a matter of taste.) It also helps that the grid lines aren't too blatant.
It's not perfect: as I say, it wants a bit more padding in the 'price' column, and the greyscale-gradient effect on the headings is ugly, and the row numbers should be right-aligned instead of centred. But it's pretty good.
Wed 02 Jul | Sgt. Sausage | As a rule, we ship our apps 'out of the box' with the standard grey (no color).
On the other hand, most apps we write have user-configurable options whereby the user can make the decision to change colors/fonts/bitmaps/sizes and whatnot to customize the application to their preference.
Wed 02 Jul | Will | Just wanted to put in a quick note. Color-blindness is a real issue (speaking from personal experience).
Red-green color blindness doesn't mean you can't tell red from green as a previous poster stated. It means you can't tell blue from purple, yellow from green, pink from gray, and dark red from black. (All especially true in any type of low light situation).
I recommend you avoid any type of GUI situation where you are trying to signal the app is in a certain state solely by use of color.
Oddly, there's little commercial software out there that bothers me. But don't get me started about the overuse of color-coded maps in newspapers or magazines. :-)
Thu 03 Jul | Albert D. Kallal | Thanks Gareth
I can’t disagree with any of your comments. (gee, maybe I should hire you!). Your suggestions are practical.
That “old” screens is 4 years old. (and it looks it).
I also have been exposed to the book “looking good in print”. A few others had commented about using too many fonts.
A few notes:
The “large” “Tour Search” text label was put there since during phone support, or support emails users did not realize what the name of the form was (The help key now shows the internal form name anyway). Thus, those large letters leave no doubt as to what the name of the form is. However, adding more fonts of a different size to a form is almost ALWAYS bad.
I mean, a LOT of web sites have a large label, or title in the upper left, or center. (Microsoft, Yahoo etc).
I just tried your suggestion to remove that large label, and lined up a few things.
A few minutes later, the results are a very nice improvement:
http://www.attcanada.net/~kallal.msn/test/bw2.gif
As for the “exit” box in the lower left?. The X close is available in most forms, but I also placed the big exit box. Users go for the big exit box FAR MORE often then little X. The problem with the little X is it is a VERY small target.
In fact, the ESC key gets you out of the form, and users use that MORE then the big exit. That being the case, I could argue to remove the Exit button in the lower right, since user prefer the Esc key anyway. I am a bit fond of that big exit target..but I don’t care about my fondness anymore! I did try and pick a bad screen. However, what REALLY surprised me was general lack of alignment for fields and labels. I seen that screen for 4 years, and never even noticed.
It is time for me to clean up that stuff. A lot of the application was rushed, and it shows...
Anyway, Thanks to all, and Especially to Gareth.
I also might try some color bands. If I do that, then I find that removing the grid lines COMPLETE makes it look a lot better.
I am going to re-do a lot of those screens, but I will work on a base “look” that I like. I might even adopt the new windows XP “blue” type screens. That means, the options and stuff goes to the “left” side in a large vertical bar, and then the grid etc is put on the right side.
Also, office XP is adopting large bar on the right side. So, I might adopt that look also.
The look and feel of the new stuff is also making current stuff look older. I am running word 2003 beta, and the icons etc are MUCH nicer then the old office.
I think the open source movement also now has some work to do. The 'bar' just keeps getting higher here.
Albert D. Kallal
Edmonton, Alberta Canada
kallal@msn.com
http://www.attcanada.net/~kallal.msn
Thu 03 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | The UI is what the users use. So it stands to reason that most of their issues will be with the UI. Making the UI pleasant is a HUGE boost to the apparent usability of the apps from the user's point of view; good polish makes a good impression.
Keep up the good work!
Fri 04 Jul | John | Just on the colour blindness thing, an eye-test technician recently told me I was technically colour blind, but I've never had any difficulty telling red from green or any of the other common problems. It does run in my mother's family so I'm not too surprised, but I'd never had any idea. I only mention it here because I think it could have a bearing on the 7% figure quoted quite often - does that include people like me or is it only people who are colourblind enough for it to affect them?
Fri 04 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | Quick and simple. Take the Ishihara test:
http://www.toledo-bend.com/colorblind/Ishihara.html
Sun 06 Jul | Stephen Jones | Are you writing a utility or an application?
If the former (that is to say something which will be used rarely by the same person so many web pages would come into that field) you will want to have everything stand out more - bolder colours, larger icons.
If the latter (that is a program that will be used almost daily) then you want to use a much more muted approach.
The standard system colours have been chosen for the latter and thus can appear boring. But as the user can jazz them up if he wants to that shouldn't be your problem.
Im rereading Designing Web Usabiliy by the afformentioned and am having trouble accepting his hyperlinks should always be blue for unvisited and purple for visited mantra.
As a perpetual student of design and usability, Im finding it a little difficult to accept. It basically constrains the range of colours and presentation you can use to ensure that the links dont look out of place on a page design.
I would assume, for the sake of pleasing everyone and aiding usability, that it would be better to us an clear/faded metaphor.
For example, on a black background, you may choose white as your unvisited link colour, with grey as your visited link colour. The white would stand out more so than the grey, making the white the obvious unvisited link.
On a lighter background, a more contrasting colour and s similarly faded version of the same would act as the unvisited and visited links.
This would give the designed free range with colour scheme etc, while maintaining the high navigation usability associated with coloured link states.
Anyone?
Sun 06 Jul | peter renshaw | design v's usability
STANDARD ARGUMENT
While I can see where you are coming from I would advise sticking with *accepted* metaphors for linking. Lets look at your question in a slightly differenct perspective.
' Q Would you use a different combination of CUT+PASTE keyboard combinations when designing an application for Windows ?'
You could use some other combination but a heck of a lot of users *expect* CTL+C, CTL+P. Whats a heavily traffic site you can think of? ( www.google.com ). How many of your users would use google and expect standard link behaviour?
Compromise on your design aesthetics and improve your user ability to use your site. It is a good bet to adopt similiar standards as commonly used websites.
COUNTER ARGUMENT
'... To design an easy-to-use interface, pay attention to what users do, not what they say. Self-reported claims are unreliable, as are user speculations about future behavior. ... ' http://www.useit.com/alertbox/20010805.html
Maybe you should do as the man says and run a usability study of you own to see if your ideas hold any water by conducting an usability study. Here's a link to a description of doing such a study for '10% of design budget'.
http://www.useit.com/alertbox/20030602.html
Regs PR
Im starting this in response to some comments in a thread about Anti-MS universities. Several posters clearly thought that professors expressing opinions about products was out of line, and shouldnt happen. Which led me to ask the question: who is qualified to give opinions on products? And related to it, who do we expect to go to for unbiased information about products, and any sphere, not just IT.
Let me say a few things up front. By unbiased I dont mean doesnt have an opinion. I also dont mean that someone is not allowed their own preferences. If they happen to hate particular styles of interfaces, and give bad press to everything with that style, then fine, as long as they are up front about it. By unbiased I simply mean that what they say about a product was not influenced by how much money they might get as a result.
So where might we get this information from?
Trade Magazines? Too reliant on advertising.
Government? Theoretically a nice idea, but just imagine the amount of lobbying that gets done to appoint members of the Office of Product Review.
Media? In depth reviews arent sexy enough, and whats MSNBC going to say about the new edition of Windows?
Universities? Once this was probably our best source of unbiased information. With course sponsorship on the increase, this is getting to be less likely.
Word of mouth? Again theoretically a good bet. But most of us dont know people using all the products we might consider, and finding people by networking is very time consuming.
Any other ideas anyone?
Sun 06 Jul | peter renshaw | '... who is qualified to give opinions on products? And related to it, who do we expect to go to for unbiased information about products [or *information* - author], and any sphere, not just IT. ...'
1. Mindset - I do not believe ....
Come at information with a different mindset. Do not trust information until you can evaluate it's validity, quality and source.
Most people do this by reading a *trusted source*, say NYT ( www.nyt.com ) [*1 ] But you even have to evaluate the *author*. Take for instance the retractions the New York Times recently ran on a rouge reporter, Jayson Blair.
2. Read wide.
Do not rely on one source of information. Only by *reading wide* can you begin to see differences in reporting fact, various spins and outright mis-information. Its also possible to see interesting patterns emerge, like *visits by national leaders on month*, then a week later trade agreements. Product reviews for cars one week, product recalls for faults. *DrugCo* wonder drug now on market, then a urgent recall because of side effects.
3. Remember
Many debious bits of information have a habit of trying to re-perpetuate misinformation as fact. So be aware of this one. It is not always possible to keep a file on what you read but be aware.
4. evaluate angle of information
Sometimes information is *spin on facts* rather than facts themselves. '... Conflicts of interest, bank backflips, deceit, misrepresentation, manipulation, plagiarism, abuse of power, technical lies and straight out fraud ... [ *2 ]'
5. check the facts
Not always possible but look for attributions. Dont believe that your *favourite reviewer* is totally unbiased for *foo product*.
With information coming from fewer sources critical analysis is becoming more important. We are lucky in .au to have critical media analysis tv [*3], websites dedicated to critical analysis of information.
resources:
--------------
1. www.indymedia.org/front.php3?article_id=322334
2. www.abc.net.au/mediawatch/more.htm www.abc.net.au/mediawatch/
2. www.abc.net.au/4corners/
sunday.ninemsn.com.au/sunday/
3. www.indymedia.org/
Just another victim of economic downturn or one of many tales about sawing off the branch that holds you.
The owner of the Linux Router Project closes shop.
My many contributions to the computing community has reaped very little personal benefit for myself. As I now struggle to pay the bills I can not help but feel quite pissed off at the state of affairs, for myself and the other authors who contributed massive amounts of time and quality work, only to have it whored by companies not willing to give back dime one to the people that actually created what it is they sell. Acknowledgement and referral would have at least been acceptable. Few companies do even that.
Some companies did contribute directly to the project. However a few thousand dollars or a few computers does not let a programmer eat next month.
My thanks go out to the few people that did help to make happen the LRP that was released. Untrue to the opensource dogma, actually finding people to contribute work to a project is a task in and of itself.
http://linuxrouter.org/
Sun 06 Jul | peter renshaw | It is not such a weird concept. In .au plumbers are *licensed*. This means a plumber is liable for his work for 10 years after installation. Any problems with the system and you can check the license number and tie the installation to an individaul plumber.
Imagine that with software developers? Besides plumbers are responsible for the reliable delivery of my *water*. And while my plumbing requirements are an order of complexity less than my computer system requirements my plumbing is more reliable.
Anyway whoever said that by virtue of a job as a *sys-admins* your entitled to earn more?
What genius at Microsoft thought that Cancel should really mean Please load up several gigabytes of Visual Studio so I can look at some bloody assembler. Now that Word loads so quickly I find the crashes just arent taking up enough of my time.
Sun 06 Jul | anon | why not just move to linux, then you dont have to worry about it ;)
Joel seems to think we should all be writing software that does things automatically without the users knowledge. Personally, Im nervous about writing software that does things without anyone knowing. Its all very well if thats what everyone expects to happen (and maybe in this case, that is what everybody would expect to happen) but guessing what 90% of you users expect to happen is sometimes a tricky business. And if you get it wrong, your application becomes infruiating. Anyone who has fought with Word to get it to understand how they want their paragraphs to indent knows what I mean.
Maybe this is just a good argument for doing lots of usability testing. Or maybe its a good idea to avoid second guessing the users expectations all together, and to just write software that does what you ask it to and nothing more.
Sun 06 Jul | Whapow! | Why not just store the old address, update the bookmark with no dialog, and then have an option somewhere to roll back the change if it turns out to have been incorrect. This accomodates the users who don't have the slightest idea what a redirect is, as well as the person whose website was hacked.
The only case this doesn't cover is the person who linked to that site or who distributed the address in an e-mail, but those people ought to have a better method of maintaining link integrity than counting on the browser to do it for them.
Just reading an article on WINE (WINE Is Not an Emulator - its a copy of the Win32 api for Linux.)
From what I can see, users are able to run quite complex apps like Office on their Linux boxes.
Anybody here tried it? It is good enough to use day to day, or buggy? Is this going to cause a headache for Microsoft?
Fri 04 Jul | David Basil Wildgoose | Yes, I run programs with it all the time. I have even run Windows games like 'Unreal', complete with sound, although the thing I most commonly run is a Windows backgammon program called 'Jellyfish'.
Basically, it intercepts the Windows API calls and passes them on to the equivalent calls under X-Windows, etc. Hence it is not an emulator, nor a 'copy' of the Windows API, but rather a translator of the Windows API.
Fri 04 Jul | Clutch Cargo | Yes, I try Wine all the time. Sometimes it helps get her clothes off and sometimes it doesn't.
Fri 04 Jul | Ged Byrne | Mr Wildgoose,
Thanks for the extra information. I was wondering how they did it.
Fri 04 Jul | Mariano Kamp | I am also using wine and even got Counterstrike running.
CS is using OpenGL, but there are also two commerical derivates of wine, which empower you to use Direct X (winex) and to run MS Office and IE (crosswire).
Fri 04 Jul | tapiwa | I have used it.
I find it quite handy when I am running Knoppix, (run from CD distro) and demonstrating how far linux has come to naysayers.
Works quite well for a lot of the apps I have run.
Fri 04 Jul | Ged Byrne | CD Booting operating systems: how cool is that.
Here in the Windows world you can't even play a computer game of CD without first installing some of it to your PC.
Over in the Linux world that can run the whole OS of CD if they want.
I've just obtained Morphix. Will this do me, or is knoppix the one to go for?
Fri 04 Jul | Mike McNertney | The requirement of installing first has more to do with the fact that games have a lot of artwork and reading from CDs is slow, rather than any requirement on the OS's side
Fri 04 Jul | Dan Maas | I use WINE to run a critical Windows program (the Lightwave render client) on Linux. It works quite well, but it took a lot of tweaking and playing with different WINE versions to get there.
WINE is hit-or-miss depending on what application you are trying to run. Straight Win32 programs tend to run really well. Programs that use more complex features, like internationalization, COM, DirectX, etc, run into bugs more often.
There are a few commercial vendors who fully support WINE for particular applications (e.g. CrossOver for MS Office, and Transgaming for certain games). If you have another program you'd like to run, try it on the latest version of WINE. If it works, great, otherwise wait 6 months and try again...
BTW the DirectX support in WINE is really an OpenGL translation layer; it doesn't talk to the graphics card directly like Windows' DirectX, instead it uses OpenGL to produce (mostly) the same results.
Sat 05 Jul | Ged Byrne | Mike,
I've never been convinced by the installation argument. Playstations have always been able to cope with just Memory and CD.
I realise it isn't any technical fault, I think it comes down to a lazy attitude from the developers. It would only take a small effort to make a game playable from CD.
If you can run an OS from CD, you can run anything.
Since I'm still a Windows User, I'm just glad that Linux is around now to shake up the Windows world.
Sat 05 Jul | Jan Derk | When first trying Knoppix 3.1 I could not believe my eyes that our main software ran on Linux using WINE. Installation, database support, complex graphical stuff, it just worked. And it felt as fast as on Windows. The only problem I noticed was toolbar icons looking ugly.
However, Knoppix 3.2 gives no joy. A nasty access violation stops the fun. I guess making that last 5% work is even more difficult for WINE.
By the way, Knoppix makes a great Windows rescue CD. Why settle for less if you can get a rescue CD with a full Operating System including network support.
Anyone longing to see what Linux with KDE looks like, but did not feel like messing up their Windows desktop computer (like me), try Knoppix. It boots right from CD and installs into memory.
Sat 05 Jul | Bill Rayer | Have any developers used wine to port code from Windows to Linux? My understanding of Wine is - there are libraries you can link against that emulate the Win32 API.
In theory (and I have not checked this at all) you could then have the same source base for Win32 and for Linux. This would be useful for those of us that believe code should be portable to different platforms :)
...or any other westerners?
For India, a Shrinking Chinese IT Monster
http://businessweek.com/technology/content/july2003/tc2003071_2518_tc058.htm
Suddenly, Indians are realizing that their big edge in English skills and multinational investment should hold off Chinas software threat
No mention of the Americans in the article. Guess weve been written off already.
In the Philippines, we cant scale, says Parekh. The talent pool is sizable, but not the size of India or China, where its inexhaustible.
Doesnt sound like much prospect for wage growth anytime soon in those countries.
Thu 03 Jul | Tom Vu | Americans with purely vocational skills in a market where location doesn't matter will have to compete in the global market. I suggest you learn a field and use programming or IT within that field, not programming for the sake of programming. Besides how many Americans have you or the other people on this forum displaced by automating their jobs. Also, I think China is a bigger threat than India not only in IT but in almost everything. It is more capitalistic than India and has more resources. China is where things are going to happen. India is just America's slave labor.
Thu 03 Jul | FullNameRequired | 'China is where things are going to happen. India is just America's slave labor.'
see that dam they are building? I _love_ the idea...worlds biggest dam, will be able to be seen from space.
makes me proud to be human :)
Thu 03 Jul | Sebastian Wagner | You DO realize this is one badly thought out and potentially desastrous project? Talking of megalomania...
Thu 03 Jul | flamebait sr. | Most of the dams are visible from space. The great wall, astonishingly enough, isn't visible from space. Ripley's Believe It Or Not isn't exactly the poster child for fact-checking excellence, so they introduced that persistant turkey long ago.
Thu 03 Jul | Jim Rankin | 'I suggest you learn a field and use programming or IT within that field, not programming for the sake of programming.'
Such as? I mean, it will need to be something that a well educated Chinese or Indian person can't do from India or China for less. Let's see:
1. Hairdresser
2. Plumber
3. Construction
4. Custodial services
5. Cashier (soon to be replaced by automated check out scanners)
6. Gardening/landscaping
7. ???
I know some people mentioned requirements gathering, but those jobs can easily be done by H1Bs.
And note jobs in a lot of these fields are already filled by various illegal immigrants.
I suppose you could add Pointy Haired Manager, but they'll probably find a way to outsource themselves, too.
Thu 03 Jul | Hardware Guy | It stands to reason that Americans weren't mentioned. We don't have that edge in English skills that the Indians do.
Thu 03 Jul | FullNameRequired | 'You DO realize this is one badly thought out and potentially desastrous project? Talking of megalomania'
was it? potentially disastrous I guess, most big projects are....but badly thought out?
Ive seen two documentarys on it, both made by americans, both noticeably anti, but none of the negatives were based around those things....what are they....important for science....ah, thats right, facts :)
most of the negatives Ive heard are conjecture.
even if it _does_ go wrong Im being the sideeffects will be less potentially long-term devastating than, for instance, GE foods or nuclear power...
Thu 03 Jul | Tom Vu | '
Such as? I mean, it will need to be something that a well educated Chinese or Indian person can't do from India or China for less.
'
Jim Rankin:
When I say learn a field and use programming or IT within that field, not programming for the sake of programming I mean apply programming to your occupation. A biologist that can program, an economist that can program, a lawyer that can program. I used to be a contract programmer but it dried up and there just are not much challenging opportunities out there, so now I work with financial researchers who can program. My experience with IT has been the IT worker is business illiterate and used by companies to get a result, which is fine if companies pay well...currently they are not.
Thu 03 Jul | Jim Rankin | 'A biologist that can program, an economist that can program, a lawyer that can program. I used to be a contract programmer but it dried up and there just are not much challenging opportunities out there, so now I work with financial researchers who can program.'
Hey, I like that answer! Doggoneit, now you've gone and spoiled a perfectly good troll. :)
Seems like a lot of developers worth their salt have a job in finance at one time or another, which is probably because to work in that environment you have to understand things other than programming.
I remember one time in my job working in Market Risk Analysis, my financial coworkers were dumbfounded that one of the IT programmers didn't know mathematical operator preference rules!
Thu 03 Jul | Andrew Burton | Aren't H1B's going to get cut in half next year?
Fri 04 Jul | sammy (had a hard enough time with kanji!) | Hmm, actually the long-term threat posed by the Chinese is when they start writing code using Chinese characters. Many languages are embracing Unicode now.
Fri 04 Jul | Christopher Baus | I've been thinking about this a bit lately. Since I spend time thinking about economics and investing from time to time, I just don't see how the U.S. is going to be able to compete on a global scale going forward.
It seems that all we have left are managers, doctors, and lawyers. Doctors and lawyers. Same as it ever was.
At the same time, it seems the U.S. is still the driver of innovation. But we are always quick to out source it. My fear is that we are not exporting our standard of living, but importing Asia's.
As far as software is concerned, I'm beginning to become convinced that India is going to kick our collective butts, primarily because engineers don't expect the same quality of life, that we do in the U.S.
I certainly resent it when people claim it is because software engineers in the U.S. are dumb and lazy. This is not true -- its revisionist. The software industry exists because of the hardwork of many U.S. based engineers over the last 30 years, not inspite of it.
I think the only thing that is going to save U.S. industry, and maybe our economy is the falling dollar.
Unfortunately China has their currency pegged to ours, giving their labor an unfair advantage. The U.S. should pressure China to float the currency to fairly compete in a world market.
www.baus.net
Sat 05 Jul | Rock & Roll Will Rot Your Brain! | Ah... so this is the time our lifestyle is going to end?
I just want to make sure. Because we've been hearing this for 40 years now and I just want to make sure that *this* time it is different.
Sat 05 Jul | c++_conventioner | christopher:
Well, I think what we have left are balls-to-the-wall businesspeople, ie, those who have always driven our economy. That includes not only our big corporate executives, but our entrepreneurs on all levels.
Standards of living exist in the context of business. Every nation that has taken our technicians, has consistently hampered their economies (read: their businesspeople) with regulation and rigamarole. India is a good example, where at-will employment is practically non-existant.
People who wish to survive in any economy must take a businesslike approach to their work (ie, sell themselves and broaded their horizons), and not expect the economy to provide them with jobs. That's institutionalized thinking.
Sat 05 Jul | Alyosha` | I would love to see code written in Chinese characters. Maybe one day this will compile:
整數 住程序(空虛)
{
為 ( 整數 甲 = 零; 甲 < 十; 甲++)
{
如果 ( 甲 % 3 == 0 )
{
printf('世界, 你好! %i\n', 甲);
}
}
歸 (一)﹔
}
Sat 05 Jul | Alyosha` | Grrr. Unicode doesn't work so well on this forum.
Sat 05 Jul | Alyosha` | Should anyone be curious what I intended to write, it's at http://cashton.homeip.net/sample.txt
Caveat: my Chinese is atrocious. Which is all part of the joke anyways.
Im serious. When I read all these posts on JOS about idiots whove gotten jobs as programmers, I have to think Im going about it wrong.
I got laid off recently and decided to go back and get a 2nd BS - this time in CS. Im not doing for the money - I truly like programming. But after seeing all the complaints on this forum about idiot co-workers, I thought, why get a BS in CS if I can just go into an interview and BS about CS.
Ive done a number of small projects using skills in C, VB, SQL, Javascript, and more Access than Id like to admit. But they were all small - not much to hang on a resume. Also, since I managed a department, I was my own customer.
But, I was always the type of manager who demanded credentials from those Id hire. Ive imposed the same set of standards upon myself, so I feel obligated to get a degree in CS. Maybe Im just being too tough on myself.
So, how are all these idiots landing jobs? Through contracting agencies, in-house promotions, regular job ads and interviews? What lets them slip through the cracks?
Mon 30 Jun | Brent Python's Flying Newhall | Not an idiot wrote, 'You are all idiots.'
I'm not.
Mon 30 Jun | jcm | I feel compelled to say: networking networking networking. It's not so much what you know than who you know and hang out with. In my team, there are TERRIBLE people, but they were somehow friends with the Boss or refered by friends to the Boss. Then you've got to deal with that. So grab a book from Dale Carnegie and climb up the ladder ;-)
Wed 02 Jul | GML | How do you get a job as an idiot? Find a villiage that has lost theirs in an unfortunate accident?
Thu 03 Jul | Joe AA. |
If we start up a certification process for idiots, would that reduce the number of idiots to only the qualified ones?
Sat 05 Jul | Alien Burrito | >>It's not so much what you know than who you know and hang out with<<
I would say that just as (if not more) important is, Who Knows You...
I have got all the contract work for which my skills were suitable because I was, and my skills were, known by someone involved. I'd have to say that all of the jobs that I felt either unsuitable for or were an utter waste of time were ones where I had been approached by a third party (eg: an agency) who had no in depth knowledge of the tasks to be done.
In these situations, the agencies are idiots for not researching or understanding either the requirement or the candidate's alleged skills thoroughly, the customers are idiots for not understanding their own requirements well enough, and I'm an idiot for not finding this out before the interview stage. ;-)
Think about what the generic catchall requirement '2 years of HTML experience' means. Any slightly techy design student with a copy of FrontPants could make that claim, but it doesn't mean they can write an international ecommerce system with cross-browser Javascript and SSL security (an extreme example, you'd hope they'd get noticed pretty soon...). I've worked with people who allegedly have these skills but don't even know what a TABLE tag is.
As a prime example of idiocy in action, this is from a conversation I had with an agency a while back; 'You've got the skills the customer requires, Site Server, MS SQL, IIS, ASP, Javascript etc., but you don't say if you have experience of using Internet Explorer....'.
Sorry for the rant, but after 15 years you bottle up a few things! In short, it's very easy to get a job as an idiot, there are plenty more of them out there to help you! ;-)
Hi there.
I am trying to convince a friend that running with the pivotal CRM is a bad thing.... http://www.pivotal.com/products/pivotal.asp
I must admit that I have not used it extensively, but the bit I have seen of it I do not like.
Throw in the Ł1000 seat licence, and I think he can do better.
Has anyone had experience with this piece of software??
Fri 04 Jul | Ed | Two words tapiwa: run away. I know two large organizations with heavy investments in Pivotal that have moved off of it.
Anyone ever post a file to a server outside your network using a form. I have a feeling this is very simple but I havent done it before and I am struggling. We have a .pdf that is generated locally that must be posted to the client server via web form. I am using classic ASP and VB6. Any help, would be really appreciated.
Thanks
Thu 03 Jul | mb | eh? from your web server or from the client?
just make sure the 'action' param on the form is correct, and the client will do it. on the server, look at the serverxmlhttp object.
Thu 03 Jul | shiggins | So I should just do something like:
Thu 03 Jul | shiggins | Actually
action=FormSave.asp should be
action=http://www.myClient.com/FormSave.asp
Thu 03 Jul | Adam Young | For the serverside Check out the code in the FileUpload servlet under Jakarta commons.
Fri 04 Jul | Duncan Smart | Shiggins - I don't understand the scenario. You want a VB6 app to upload a file over HTTP? Or a web app? Or what?
Hi all,
Im working on a project to build a scheduling application for sports teams. Part of the project is schedule manipulation (done throughout the year) -- changing which teams are playing against each other, and which location they are playing at.
The other big part of the project is a schedule generation tool that will create the initial schedule for the year. The requirements are that the schedule generation tool will be fed a number of initial parameters, and then it should spit out the proposed schedule.
The initial parameters are rules such as:
- The number of teams, and their home location
- Which teams are in which division
- Travel restrictions on how far each team can travel during the regular season
- Restrictions around the number of times each team should play each other.
- Holidays in which no games should be played
- Specific days off in which certain teams should not be playing.
- Etc.
Our application will collect information for all these rules, and then the input the rules into the schedule generation tool which should then spit out a proposed schedule that meets all the restrictions defined.
Any recommendations as to how this could be implemented? Im assuming this problem has been solved before -- does anyone know about any off-the-shelf scheduling engines that we could integrate?
The rest of the application will be an ASP.NET web app, so ideally the scheduling generation tool would integrate well into this environment. However, since the scheduling generation will occur once a year, a standalone system with clearly defined interfaces would work as well.
Thoughts?
Thu 03 Jul | Jamie Hornstein | Ed,
I've done a little bit in this area, although my scheduling was limited to a golf league schedule.
One thing you might be missing in your parameters is how to handle conferences, and possibly if each division needs to play everyone in it's own division X number of times, and how to determine which out-of-division teams to play.
That being said, I've always wondered if there was a nice scheduling algorithm out there, I've searched briefly and couldn't find one readily available.
Thu 03 Jul | John Aitken | I've done some work in this area as well... in my case it was for squash tournaments.
My feeling was that the rules could easily become so oddball and complicated that there was no hope of finding a generic scheduler that could cope. Some issue with the characteristics of different venues for different matches, preferred times for or between matches, cancellations, etc. was always going to require that the organizer have a good tool for quickly hand configuring whatever the scheduling algorithm came up with anyhow.
My solution was to have the matches autogenerated according to certain criteria for the structure of the tournament and the player / team list, and then to have the organizer drag these matches from a pick list into the 'cells' of a special dynamically resized gridish control that represented the available court times. The grid was built according to simple venue info, but court times could easily be blocked out with a mouse drag. The pick list was sorted by match sequence, and could filter for a single event (eg. Men's A) or a single player or whatever. This interface was slick enough that a couple of hundred matches could be 'semi-manually' scheduled in 15 minutes, and of course allowed for intelligent tradeoffs and changes at any time.
I went some distance down the path of packaging up the bits of the interface as 3 interoperating OCX controls, but never finished that part of things.
I might be able to find you some of my old stuff if you want to pursue a similiar approach. My thing was a combination of VB6 & VC++6.
Thu 03 Jul | S. Tanna | While I have no experience of specifically scheduling - if it has to be completely automated - this would seem the kind of application which lends itself to calculating a fitness function for a 'guess' and iteratively improving it.
Reason I say this:
1. It does not sound like there is one right answer, rather several good answers, and you want to converge on one of these.
2. Additionally the criteria and relative importance for what is good or bad - you want them to control them (which would be possible in your fitness function).
3. Finally it sounds like there may be way too many variables to try every possible 'guess' and find the best one. So you want to search the virtual space of possible answers, for good answers, without searching across the entire space.
Therefore - suggestion - Genetic Algorithm?
Thu 03 Jul | Christopher Wells | I read someone's PhD thesis on this subject recently - 'Beck.Thesis.zip' at http://www.eil.utoronto.ca/profiles/chris/zip/
Fri 04 Jul | Spam | I think the solution you're looking for could be Constraint Solving, specifically Finite Domain solving. It's a large topic, and there are many resources available. You don't say how many teams/rules/etc you have, but I'm certain this could help, especially since you don't seem to need real-time results.
I'm not sure what your monetary or time budgets are, but there may be libraries available that could be easily modified to fit your needs. If you are really looking to make an investment, then you could look into the ILOG Solver libraries, or possibly to the Mozart/Oz language. It has contraint capabilities built into it, but will require much time if you're not familiar.
One thing you haven't mentioned is optimization. Constraint solving can be used to find a large set of solutions, or can generate one solution, and then use optimization parameters that you provide to find better solutions.
For example, you may require that each team travel no more than 1000 miles in a season, but the first solution may have team 1 traveling three times as far as team 2. Optimization could be used to 'load balance' the solution.
Anyways, it's a large and complex topic, but very interesting.
Good luck.
ps. I just came across this...
http://mat.gsia.cmu.edu/sports/
Many links to do with sports scheduling.
It's a list maintained by Michael Trick whom I believe is still involved with the Operations Resource pages here...
http://www.informs.org/Resources
If you need anything related to Contrained Programming, the answer will likely be there.
I have a whole bunch of text, (20,000 bytes), and for each unique word in the text, I am putting that word and the count of its occurances in a HashMap.
to put it in a hash map of key-value pairs with the count as value,
I need put the primitive data type count,which is an int into an
Integer object which is created, and then I can put it in the map.
SO I do Integer I =new Integer(count);
each time.The profiler says I am using a whole amount of time there, I guess due to memory allocation of so many Integer objects for the unique words.
is there any way to cast an int to an Object?
anyway I could avoid using the heap? and optimize?
I am almost using 50% of run-time in this
Thu 03 Jul | Mike McNertney | Unfortunately, I don't think there is any way to get around creating all those Integer objects if you are using built in Java collections. Creating objects in Java should be very fast though. My guess is that the speed hits you're seeing are a result of triggering the garbage collector. Try null-ing out any unnecessary references before you do this, and then explicitly calling the collector. This may allow you to get through the insertions with fewer collections.
As a last resort you could always write your own hash table class that handles ints as the value type.
Thu 03 Jul | | Java?
Thu 03 Jul | jq | try TObjectIntHashMap from http://trove4j.sourceforge.net/. It will let you use a primitive.
Thu 03 Jul | SG | I'm mostly a C/C++ type of programmer, but maybe this makes sense for whatever language you're using.
Allocate a large pool of objects, and eat from that until it's empty. (And then refill the pool if necessary.)
Thu 03 Jul | SaranWrap | I don't think it's a useful suggestion to your particular problem, but it might be interesting to someone. As Integers are immutable value objects they can be freely shared rather than creating new instances all the time.
Thu 03 Jul | Brian | since Integers are immutable, you can share them. You can do something like:
Integer[] cachedInts = new Integer[MAGIC_NUMBER];
Integer getInteger(int i)
{
if (i < cachedInts)
{
if (cachedInts[i] == null)
cachedInts[i] = new Integer(i);
return cachedInts[i];
}
return new Integer(i);
}
then later:
theHash.put(word, getInteger(count));
Tweak MAGIC_NUMBER to suit your needs.
Thu 03 Jul | anon | Mike McNertney, where exactly should I call the garbage collector?
Thu 03 Jul | Mike McNertney | Well if you have some sort of loop that is adding elements to the HashTable, before that loop would be a good spot.
Obviously there are no guarantees that this will help. It will probably only be significant if you can identify a lot of object references that you can get rid of and NULL them out before calling the GC. If this doesn't work, there have been a number of other good suggestions in the thread that should help you out.
Thu 03 Jul | Mike McNertney | To be more specific, the TObjectIntHashMap and the idea of caching Integer objects based on the int value both have a lot of merit and either would probably speed your application significantly. Which you try is up to you. The Integer cache sounds very promising for your application since I imagine the vast majority of your words have a relatively small count (say less than 10 or 20) and thus you would have a lot of re-use of Integer objects
Thu 03 Jul | valraven | You never said if your application is too slow. If it's not just build the map, damn the runtime, and move on.
Thu 03 Jul | Ged Byrne | The simplest approach is to create a WordCount object with getCount() and IncreaseCount() properties, and an int private member.
When you create a new hash entry, then you create a new WordCount object and put it with the words as an index.
When you encounter an existing entry, you just retrieve the corresponding WordCount object and call increase.
You may also find that creating your own class of string with a more efficient equals method will speed things up.
This type of thing is so much quicker using Jython.
Thu 03 Jul | Chris Tavares | DO NOT MANUALLY CALL THE GARBAGE COLLECTOR!
Modern GC's are well tuned these days, and manually kicking them off will just waste more time than letting it do its thing automatically.
For more detail, read this:
http://www.neward.net/ted/weblog/index.jsp?date=20030413#1050273570331
Thu 03 Jul | anon | would setting object references to null without explicitely calling the garbage collector help?
Thu 03 Jul | Mike McNertney | Yes it could. That would mean you'd be able to reclaim more memory the first time the GC is called.
It's far more likely though that some of the other suggestions mentioned will benefit you.
Thu 03 Jul | Mike McNertney | Chris has a good point. It is probably best not to explicitly call the GC. As I mentioned before the other ideas expressed here should substantially cut down on the number of allocations required and should probably help your execution speed
Thu 03 Jul | Brian | Do it Ged's way. I was too busy answering the question to see the big picture.
From your description, it doesn't sound like calling GC or nulling references would help any. You need to make less garbage in the first place.
Thu 03 Jul | Ged Byrne | Anon here is a quick demo. It takes a reader so you should have no trouble adapting it to take a file.
It will need a bit of work to filter out any punctuation, but not much.
Notice that you don't even have to put the WordCount objects back in the map. This is because the map returns a pointer to the existing object. Both your object reference and the map reference point to the same object.
Hope this helps.
__________________________________________
import java.util.*;
import java.io.*;
class HashCount {
private StreamTokenizer st;
private HashMap hm = new HashMap();
static void main(String[] args) throws Exception {
HashCount hc = new HashCount(new StringReader('All together now\nI am he and we are he and we are all together\nAre we all singing'));
hc.tally();
}
public HashCount(Reader in) {
st = new StreamTokenizer(in);
}
public void tally() throws Exception {
String word;
while (st.nextToken()!=st.TT_EOF) {
word = st.sval.toLowerCase();
if (hm.containsKey(word)) {
// Increase Count
WordCount wc = (WordCount) hm.get(word);
wc.increaseCount();
} else {
// New Counter
hm.put(word, new WordCount(1));
}
}
System.out.println(hm);
}
private class WordCount {
private int i;
public WordCount(int startValue) {
i = startValue;
}
public int getCount() {
return i;
}
public void increaseCount() {
i++;
}
public String toString() {
return Integer.toString(i);
}
}
}
Thu 03 Jul | Ged Byrne | Should give the result:
{are=3, singing=1, now=1, we=3, he=2, i=1, together=2, and=2, am=1, all=3}
Thu 03 Jul | Evgeny Goldin | Type-Specific Collections Library:
http://www.sosnoski.com/opensrc/tclib/
ObjectIntHashMap
http://www.sosnoski.com/opensrc/tclib/docs/com/sosnoski/util/hashmap/ObjectIntHashMap.html
'Hash map using Object values as keys mapped to primitive int values'
Thu 03 Jul | mph | I'll second the point about don't call the garbage collector. Additionally, using a pool of Integers is the wrong way to go. Unless creating an object is extremely heavyweight (IE database connections), you'll want to just create a new object. Lightweight objects such as Integers are not candidates for pooling. One possible suggestion is to instantiate the HashMap with predefined size. The default for java.util.HashMap is 16.
Fri 04 Jul | ice | Integers and Chars are the PERFECT examples of the Flyweight pattern (see GoF).
Im not worried about outsourcing to India. Maybe Ill get worried about that later. Right now I have far more serious things to worry about -- free software.
One application we write and sell is the best in its class, yada, yada. We have several adept competitors and we all keep each other on our toes. THe software represents an investment of years, including a lot of work to get the UI just right and working smoothly and provide a real good experience for the customers.
In the last six months, two different guys have appeared on the scene with free software clones of our product. The UI wasnt a concern for either of these new competitors since they just cloned our look and feel. One competitor is an unemployed CS graduate in Hungary, the other is a government employee in Belgium who apparently has a lot of free time at work to code on his hobby project.
What distinguishes us? Well, our software is more stable, has fewer bugs and far better documentation.
What distinguishes them? Theyre free.
Do I need to tell you our sales have dropped from enough to justify development (we werent getting rich but were getting by) to almost nothing. Checking around, the reason is simple -- people know about the free software.
Heck, if this free software had been around when we got started, we never would have bothered.
So, well probably retire the product since its not generating income anymore. Ive spoken with my commercial competitors about the free software and theyve come to the same conclusions -- sales have dried up and theres no point to continuing development.
So what Im seeing is that in certain markets, particularly niche software markets like ours selling software to individuals, software given away by unemployed and underemployed but fully capable programmers will wipe our a lot more enterprises than outsourcing will. After all, you still have to pay to get outsourced software developed, annd that is a limiting factor.
Any one else dealt with these issues?
Thu 03 Jul | Mark Bessey | I've wondered about that. Seems like small companies (and Shareware authors, in particular) are much more vulnerable. It's way too hard for a small number of volunteers to create a really polished operating system or productivity suite.
Any kind of 'neat little tool' is really ripe for some individual kicking out an 80% solution in a weekend, and steamrollering your niche-market application. bad news for your company, but maybe good for the user community in general.
I wonder if a 'if you can't beat them, join them' strategy would work here? Given that the market for your product has entirely dried up, could you donate the code to your open-source 'competitor', and try to make a go of the contract service and support model that e.g. Red hat uses? Just an idea...
-Mark
Thu 03 Jul | FullNameRequired | hi dying relic,
aren't we all ;)
Yes, Ive had a vaguely similar experience.
The conclusion Ive drawn from it? long term we _cannot_ win head to head against free software, assuming that it is properly supported and managed by a reasonably competent leader.
The trick now is to find areas where freesoftware is unlikely to go, to charge less for our products (0$ vs $15000 is a no brainer no matter how good the docs, whereas $0 vs $150 is _not_) and to make *amn sure the products are good ones.
The upside of free software (yes, there is one :) is that in many cases it offers the real opportunity of code reuse.
This is a problem that people have attacked over and over again, c++ and java have both tried to solve this but with little real success, even now almost every large company writes their own x-plat widget code.
Imagine if they didn't have to.....(love that wxWindows)
_that_ is the opportunity that free software offers for inhouse software, and for commercial software depending on the license of the free software in question.
My overall feeling is that the trend of free/os software is a good one, code reuse is finally coming of age and free/os software is a big part of that.
but we _do_ have to rethink the market....building expensive software for a niche market has always been risky, but now it can be suicidal......
Thu 03 Jul | Jones | There are 3 great enemies you have, as a small software company:
1. free-as-in-beer and open source software
2. Microsoft who may crush you like a bug, no, make that a mosquito :)
3. the crackers who create cracks for your product
I noticed that when a free product appears, the similar products that cost money simply stop selling.
In order to be a successful small software developer, you have to fend off these 3 enemies.
What is a good method for fending them off - that is what I'd like to know! :-)
Thu 03 Jul | Relic | Mark,
No -- there's no possibility of earning a living from offering support in most niche markets for non-business software.
My wife is a physical therapist and makes more than I do anyway; there's no worries about being homeless like with the guys I work with.
I really enjoy development and have enjoyed the very positive feedback we've gotten from customers in the past, but the writing is on the wall and I don't see it as something that can pay the bills any more, unless I want to do business software consulting, but that's not my field of expertise. I'm not really interested in writing software for free either. I have plenty of friends that have tried to make a go of making a living writing software for free and they are all bitter, angry, and flat broke now.
With the great software development tools now, a newcomer can bypass all the writing of custom libraries and dealing with compatibility issues and tuning for speed and memory use, and put together in a month or two an application that took 20 man years to develop. More power to them I say. The sweet spot right now is in being a user of free software, not in being a developer. The old era of software that involved optimizing and maintaining compatibility with a variety of system versions, and doing user interface testing is past, as archaic and foolish as when Corel tried to keep WordPerfect going in assembly language. The new way is to, working from a existing app as a prototype, put applications together in weeks what once took years and give them away for free. With this being the way things are, the smart thing to do is be a user of free software, or a consultant/developer of business software. The dumb thing to do is be a developer of any sort of mass-market or other non-business software.
I'm not bitter, just realizing how things are. Realizing that 'the cheese has moved' and so I better stop looking where the cheese used to be. I'm looking forward to using free software more and sweettalking the developers into putting in more features for me for free. This seems like a good deal when I look at it from the user's point of view.
My band (I play bass and electric violin) is getting bookings so I'm going to leave software and start doing some serious touring and promotion. Maybe get back into surfing too, development got me out of shape and took too much time.
Here's to the future! May we all embrace it with gusto.
Thu 03 Jul | Relic | Jones,
You make good points. The MS thing, if it happen, it happens. No use worrying about it unless it does, right?
The cracker thing definitely cuts into the sales, but fortunately most legitimate customers are afraid of cracked software, as well they should be. It's like buying pot from someone you don't know -- did he lace cheap stuff with PCP and LSD, or is it good stuff? You take a risk with the unknown, just as there are very serious risks of trojans and viruses whenever downloading a crack. People know this and so that's a limiting factor.
But with free as in beer, the issue is is it good enough, is it available and can I get it working? Linux has certain limits in that installing an OS is scary and hard for people and the Windows that came on their computer seems to work fine, so don't mess with it. Also, downloading a Linux distro is an overwhelming project for the average user, so the only real option is to buy a distro disk at Staples, at which point it's no longer free.
But with niche software, the download is only a few megabytes which isn't a problem for hardly anyone and they click a button and it installs and works. Hey great! Why buy the cow when you can get the cow for free? So, you're right -- free niche software of acceptable quality that is in a under 20MB download can wipe out 100% of an existing market.
Thu 03 Jul | FullNameRequired | 'I noticed that when a free product appears, the similar products that cost money simply stop selling.'
I dont agree with that.
One of the projects (not the one I referred to above) Im working with is being sold and is (if I do say so myself) no more than an average product in a market where there are at least 5 OS products competing directly against.
We _do_ make a profit on that product, sufficient to pay for 1 developer to spend upwards of 3 weeks a month working on it _and_ for us to also make a profit on it.
its not as big a profit as it would be without those competitors, but iwe make what amounts to ts a perfectly livable income for one developer off it.
It _is_ possible to compete, it all depends on the market.
OTOH the product I referred to above is having problems at the moment.....its future is still in question.
Thu 03 Jul | Yaniv | I have something quite opposite to what Mark said. Instead of 'joining them' or donating your software for free, make them join you. Hire these 2 guys as your employees along with their software. Shouldn't be that hard, considering the fact that one is an unemployed CS graduate and the other one is a gov. employee. If you make a good enough offer (along with the H1 Visa :)), they probably won't reject it. Then incorporate any good features of thier software in yours and continue selling it.
If you don't do it, one of your commercial competitors will.
Thu 03 Jul | Yanwoo | I don’t think you need to worry. Let me explain.
Free software in the long term tends to develop into one of three things 1) Dies out because the author gets bored 2) starts to cost as the author wants to make some money 3) software stays free but support starts costing money.
In my experience, any business of note is scared of free software because of (1) – getting stuck with an unsupported, dead application can be damn costly. When a business buys software, support and upgrades/new versions are pretty important things – with free software this is often not the case.
(2) is fine because it’s just effectively another competitor and (3) that’s fine too, because the structuring of support charges often costs a business far more in the long term and anyway you can always consider this model.
My advice? Sit tight, keep developing your product, emphasise what differentiates your product from the free ones. Yep you’ll suffer some short term pain as this relatively new phenomenon causes you to lose business. Don’t worry, they’ll get their fingers burnt and they’ll be banging your door dowa – more willing to spend money on a well supported, growing product than ever before.
The worst mistake you can make is to pull out. As companies increasingly seek relationships with stable, reliable software providers you’ve just proved you’ll pull out a market and the drop of a hat. Not good.
Thu 03 Jul | Relic | Yaniv,
The guy in Belgium has a good paying job with full benefits, short hours and long vacations working for the government. I've talked with him and he basically has nothing to do 95% of the time and his skills as a developer are not needed at the level he feels challenged. Rather than die of boredom, he saw our software and thought it would be fun to clone it, so he redefined his job to be a free softwarer paid by his government.
The guy in Hungary is definitely thinking like you -- he has a degree and is a decent developer but has never found a job and lives with his grandmother who gets some sort of pension check. We don't have the money or resources either to pay him or to cover all the overhead of doing an H1B. Besides, there are tons of out-of-work programmers here in the States that we could hire that could do exactly what he has done. Why pay someone to clone our own software for us? What is the point of that? We can't use his code since it does nothing novel or new -- he just paces and matches our features point by point. Also, he's gone and GPL'd his software, which would mean even if anything he did was something new we wanted, we would lose all rights to our software if we linked any of his code with ours. It would really be tremendously foolish to hire him even if we did have the money. There is no more business case for it that there would be for MS to buy Linux, neither for us nor for our competitors. We're actually the last hold out -- our commercial competitors have stopped isuing updates to their software and have already moved on. Though of course we all still offer the software for sale further development doesn't make sense.
We've created some great software and it's been a long and hard road with late hours and difficult challenges. These other guys are able to do something we can't -- work for free. Hey, that's the new thing. This is a new era. I'm looking forward to submitting my feature requests to these guys and relaxing while they do the heavy lifting. Shoot, I'll be one of their best customers!
Thu 03 Jul | Relic | yanwoo,
I hear you and I can see that. We don't sell to businesses though but to individuals. It's not business software. Consumers don't worry about getting stuck with unsupported software. Also, most free software nowadays comes with unlimited free support from newsgroups. The issue is is the software good enough to do what people need. They'll try out the free stuff when deciding to get free or pay. If the free stuff allows them to get their work done, then there's not much motivation to switch to more expensive stuff. Yeah, a few will pay for the extra polish or amount of efficiency, but not enough since development is expensive if you don't have a check coming in from the government each month.
Thu 03 Jul | Relic | Oh on point 3, it's pretty established that individual customers simply don't pay for support contracts. Name someone paying a support contract to use WinAmp or iTunes -- right, there aren't any. I tried to mention about the business software thing since I know that in that market people can sell support. Also true for really large complex applications - people will pay for updates until the software is stable. Not many regular folks upgraded from Office 98 to the latest version - they just wait until they get a new computer. Business markets are very different from the mass market. In the mass market, a decent free app can wipe out commercial apps. Back to WinAmp/iTunes -- I don't see any business case for developing a new commercial mp3 player for either the Pc or the Mac. Doing so would be foolish from a business perspective, as would continuing to support and develop an existing mp3 player.
Thu 03 Jul | Yaniv | Obviously I didn't know the whole story :(. It looks like you have already given enough thought about what I said. And ofcourse with the whole GPL thing, you might be getting into more trouble.
If it was feasible from your end as well as thiers, hiring them would have been one way to eleminate this problem instead of giving up.
And I am sure MS would try to buy Linux if it comes to shutting down Windows.
Thu 03 Jul | FullNameRequired | Hi relic,
you _do_ have my sympathy, its a prick of a situation to be in.
Im convinced competing is a possibility , but I still have no idea of where and how it can be done.
As I said, we have one project surviving (and gradually increasing its market share) in an area that I would have thought it would be slaughtered by the OSS products (they literally have 95% of the market) and another project which appears to be dying in an area where I would have thought it would really be able to compete...
Im learning and I intend to find the way forward, but the tension between OS and commercial software is still finding its strength.
Until things have settled down there will be a _lot_ of stories like yours and mine I suspect. (and an equal number of success stories on the other side)
Thu 03 Jul | Relic | This idea of business shrinkwrap vs business one-off megaprojects vs commercial shrinkwrap vs shareware vs embedded -- we're into the realm of Joel's 5 World's theory.
If I was coding business one-off or business shrinkwrap, I'd be worried about India. But consumer shrinkwrap isn't going to be outsourced to India.
Likewise, free software developers don't present any threat to one-off custom business development.
But free software does present a challenge to shrinkwrap and India does present a challenge to one-off megaprojects.
If I was working at GM and we needed a new custom payroll system, I know that there are several shops with expertise and proven results in India that can reliably deliver the billion dollar system we need for a mere hundred million. It woud stupid for me to try to put a team together in house to do it when it's a known problem that's been solved many times and can be done much more cheaply by someone else.
If I was advising a friend how to play mp3s, I would tell him to use a free player. If advising a friend how to do minor touch up to photos, I'd show him where the good free photo basic editing software is. If advising a friend on development IDEs for the Mac, I'd point him to the amazing free IDE that Apple gives away free to all who ask. If advising a friend on recording software, I'd point him to ProTools free. Free is the way to go.
Regarding adding features to our software -- it's a mature product and we don't get many requests anymore since it does basically what people want. And the new free stuff does the basic stuff people want too. I can see how this would be different if the free stuff had too many bugs or had a really poor UI, but it's acceptable. Like I said, the current income doesn't justify any further development. We'll sell it but we're going to lay off the developers since things are too tight, and I'll be one of those developers. It was fun while it lasted. now I'm moving on to the happy world of being a free software consumer.
Thu 03 Jul | Relic | Yaniv,
I agree with you there. MS would love to (1) buy Linux and (2) fold in what they could and (3) shelve the rest. But (1) no one owns Linux so they can't buy it, (2) it's GPL so they can't fold it in (Apple managed this trick but they sell hardware not software - MS can't be like Apple since MS doesn't own the hardware), (3) the license can't be retracted or limited, which is the whole point of GPL of course.
Thu 03 Jul | | Apple is not Linux, it's BSD. The licensing agreement allows them to sell it, and they do. OSX costs money. The upgrades cost money.
Apple could switch to x86 architecture and still sell OSX and not have to release it as open source.
Someone correct me if I'm wrong.
Thu 03 Jul | FullNameRequired | Apple is built on top of BSD.
Its kernel, darwin, is open source but _not_ GPL
there _is_ a difference folks....wxWindows is open source but _not_ GPL...I can build and sell commercial applications built on top of it without having to provide access to any code at all (although IIRC its considered polite to mention the fact I used wxWindows I dont believe there is a requirement even for that...I may be wrong about this).
Linux is open source _and_ GPL, if I use the linux code in a project, I can sell the results as a compiled application but I also have to provide access to both the original code _and_ my modifications.
(technically there is no reason I could not build and sell a commercial application using GPL'd software, but practically its so easy for others to undercut me using the same code that mostly charging for support is a more secure form of income)
GPL is _one_ type of open source license, LGPL is another, there are many, many other types of opensource licenses....which license the code is released under is determined entirely by the author of that code.
(and yes, apple could move everything to any type of machine without any problems)
Thu 03 Jul | Rhys Keepence | In our product space, we have our fair share of open source competition. We haven't seen much threat from it, however. In fact, open source is more of an ally.
One way in which open source works for us is in utility classes that our product integrates with. Off the top of my head, we use the following tools:
- jakarta.apache.org/lucene - Full text search engine.
- jakarta.apache.org/commons - Small and common utility classes
- jakarta.apache.org/poi - Read and import Word documents
- jakarta.apache.org/log4j - Logging framework
- openoffice.org - We integrate with
- opensymphony.com/webwork - MVC web framework
- lowagie.com/iText - PDF creation
- pdfbox.org - PDF importing
- ant.apache.org - make files
- junit.org - unit tests
etc.
These tools together amount to some pretty serious functionality.
The other bonus of open source for us is in deployment platform options. Some of our customers run on pertty serious 64 bit machines, with BEA Weblogic and Oracle 9i. However, customers of ours can run on a $0 linux operating system (linux), with a $0 application server (jboss + tomcat), with a $0 database (mysql). Just add hardware! This has been a huge selling point, and (as it happens) we provide support and consulting for these platforms too :) Life is good where I sit :)
Thu 03 Jul | Relic | My point on Apple is that a substantial amount of the system software and utilities are GPL'd.
Thu 03 Jul | Katie Lucas | I used to work for a company that ran against free competition and wins.
They do it by basically just being better at the whole package: although the alternatives are free, the alternatives don't integrate as well; they don't handle all the cute file formats, they don't have such nice scripting systems and there's no 24x7 phone support to hand-hold you through when the 'I'll just script a thing to do that' goes wrong.
You call support and someone with a degree in microbiology answers it. If they can't fix the thing they go find someone with a computer science degree to help. If you want to buy a bit of kit through the place, someone comes and helps you write the grant application for the money.
There's an attention to detail trickles down through the company; Icons don't get just get picked from a stock range, each one is custom designed exactly right, using exactly the right colours. Custom controls for all the external toys that work properly. One of the standards is that the user interface stuff is double buffered, because dials don't flicker in real life and they're not going to here. All the image processing options come with previews, so you can tell what the options you're choosing will actually do. Not just the ones that it's easy to do that for. All of them. Things like that.
They simply don't ship 80% or 90% or 95%... it has to be 100%.
50K a seat, and still the sales department basically answers the phone to customers who've seen the thing running and have just GOT to get it.
Thu 03 Jul | Relic | MS doesn't include gcc, perl, apache, lex, yacc, grep, less, emacs, and everything else the FSF has ever produced free in their distro with source code. Apple does.
Now let's leave this subject, or continue it in some other thread where we can argue whether Apple can make money selling open-sourced Intel versions of their OS software running on Intel hardware. (Since this is such a great business model, I am sure someone will take advantage of the great opportunity here and make a open-source clone of OSX for intel and make money selling service contracts.)
But look, I'm really sorry I followed up on the MS buying Linux issue. It's off-thread.
Our situation has nothing whatsoever to do with GPL or open-source. It has to do with free as in beer.
It has nothing to do with custom business software costing millions and requiring extensive maintenence. The software costs under $200 and comes in a box. It's used by regular folks.
Weak? Yeah, sure. i'm ready to concede defeat. I'm letting the guys in Hungary and Russia and Belgium do all the free software development. I promise to enjoy using it. That makes me weak, OK. And working for free shows they are stronger than me. I am too weak to do that, true. Sure, I got no problem with your powerful strength. Just keep making the free software. And adding the features I want. I promise to be your internet friend if you give me the free stuff, man.
Thu 03 Jul | Relic | Katie, I agree it can work sometimes. We have all the things you mention and the orders just aren't coming in. So, in this sector, those distinguishing things are not enough to compete against free.
Thu 03 Jul | Mister Fancypants | Getting back to the original case of the Hungarian programmer -- as long as he owns all the code in question, even if he released as GPL, he can relicense it to you with any license you two agree on. He's still the copyright holder. He can license the code to YOU (and only you) under BSD or some invented license of his choosing, should he want to.
Things are more complicated if, in addition to making his code GPL, he pulled in other people's GPL code in the form of GPLed class libraries or whatever. In that case, he obviously can't relicense the parts he doesn't own the copyright to, and he can't make his code non-GPL if it relies on other GPL code.
Thu 03 Jul | Rhys Keepence | Relic,
If there is indeed nothing more you can add to your product to differentiate it, then it is time to switch into maintenance mode and move onto the Next Big Thing. Standing still in our industry is a bad idea.
I am certain that if Microsoft decided that Windows 95 had everything, and no more features could be added, then linux would have taken over by now and Microsoft would be out of the game. But that is not the case.
Thu 03 Jul | Relic | Rhys,
As I said, the next big thing for me is doing some touring, and also planning to fit in some studio sessions now that I'll have more free time available. We've made a lot of good contacts over the years and now I'm really looking forward to taking up some folks on the invitations they've extended!
Thu 03 Jul | SG | I work in an environment where there are lots and lots of free-software code that can do what my company's product does. However, we're growing and getting lots of business. How? The company has adapted itself -- beefing up the support division and added consultants to integrate our product in other people's networks. (Oh, and there are other differences as well -- such as the fact we actually test our software in ways that most free-software authors do not have the resources to do.)
Thu 03 Jul | Relic | 'consultants to integrate our product in other people's networks'
SG, maybe I'm jumping to conclusions, but is it safe to say your customers are businesses? I have already said many times that our primary customer base is the individual using the software at home -- about 90% so.
Yes, regarding stability, our product is substantially more stable than the free variants. This doesn't matter so much to that 90% though, not so much that they will pay extra for an assurance of complete stability. Only about 1% of the customer base uses the software in live performance and broadcast situations where stability is absolutely necessary and fortunately we've never had a problem there -- I'd wager that there are no bugs left in the code base. But that 1% isn't enough to pay for continued development. The only rational thing is to let the development team go. The revenue coming in is enough to provide a modest living for a skeleton crew of sales and customer service folks.
Thu 03 Jul | Just me (Sir to you) | Did you know that in Belgium the avarage working time of a government employee is around 25 minutes per working day? This guy is a thief. He steals from the taxpayer, probably at the rate of more than 50.000$ a year, and these illegal gains he invests in ripping of the work of others and grabbing their source of income.
Now I know he is just a cog in a big apparatus, but that does not mean it is al innocent.
Thu 03 Jul | S. Tanna | Differentiate your product
Do something the guy can not easily copy
Ask your customers what is important to them
Out market/advertise the guy (you have money - he presumably doesn't to give away free copies)
Hire the guy. Not to get his code - but to stop him working on free competition
Create a different product entirely
Produce superior looks/packaging for your product (Pay a graphic designer etc if necessary). When your product looks like a Ferrari, and his like Trabant in comparison... you might be surprised at the effect it could have.
Provide integration with proprietary applications which are important to customers. Something an OSS probably wouldn't want to follow.
I mean, there must be like a 1000 things you could do.
If price is the only thing you can compete on, no offence, but you're doomed in the long-run, against not only free-software but any commercial competitors you might have. Personally, I think you should have the advantage, as you have money + time to spend on this - he only has time.
Thu 03 Jul | constructive comment | well Relic, sounds like you've convinced yourself.
Niches that can't compete against free beer wouldn't have been able to compete against a smaller, leaner operation either. If either of these developers were charging peanuts and keeping the source closed, you'd still up the creek..
Thu 03 Jul | S. Tanna | > Did you know that in Belgium the avarage working time of a government employee is around 25 minutes per working day?
I thought that the average 'government' employee in Belgium, actually works for the EU... so it's largely not even Belgian tax payers who are paying their salaries! :-)
Thu 03 Jul | Relic | Shoot, Just Me -- 25 minutes a day for 50 grand, and teh rest of the day just kicking back and doing your own thing. I could live with that. Dang! I'm kicking myself that I wasn't born in Belgium.
This whole thing had us pretty freaked out when it started coming down, but we've got open management and we left it up to the employees what to do. We've had every conversation possible and we realize it's time to move on. There was some sadness at loss but now I see it as an opportunity to get real with the new way things are and be happy with it. And the new way things are ain't so bad -- instead of busting my butt 12 hours a day, the Belgian government is now giving me software for free! Shoot, that's the least they can do after we saved their butts in WWII, right? The Hungarian guy is a sader case though -- he really things he's going to make a living somehow if only he keeps doing this free software thing long enough. I've tried to give him the heads up but he thinks I'm just scamming him cause I'm his evil capitalist competitor. Poor guy. World's a tough place. His software's not so bad! Maybe we can encourage him to make some other useful software and give it to us for free.
Back to the waffle land and their cushy life of leisure, that sounds pretty nice. I've been supporting myself since I was 17. Some of those early jobs were pretty tough work. Things are more stable now but I feel bad for a couple of the other guys that are sadded with big mortgage payments. They've been looking around and haven't found anything. I know one guy from college who was really one of the best developers I've known - learned a lot from him. He lost his house, his trophy wife left him, and now he's living in a van somebody gave him. Maybe we could all move to Belgium! Do they accept a lot of immigration there?
Thu 03 Jul | Mitch & Murray (from downtown) | 'Back to the waffle land ...'
Laughed out loud at that one.
This is an outstanding thread. Relic, would you mind letting us know, even in general terms, what your application does exactly so we can get a better idea of who your customers are?
Thu 03 Jul | GiorgioG | Offer a service of some sort with regard to functionality that your software provides. Most open source people can't afford to put up 2 or 4 servers (appserver/data/redundancy) for their users. This will take care of 90% of the OSS problem. Just give them some value for their $...
Also, make it (more?) user-friendly and easy to install...case in point - OSS is usually hard to set up and even harder to configure.
Thu 03 Jul | Philo | 'As I said, the next big thing for me is doing some touring, and also planning to fit in some studio sessions now that I'll have more free time available.'
[shrug] It almost sounds to me like you're looking for a reason to quit. If you *really* want to maintain this revenue flow, I've got some ideas, but I'm not gonna take the time to type them if this isn't really what you want to do.
[NOTE: There is nothing wrong with changing lifestyles - I strongly advocate it. Just be honest about what you're doing and why.]
Philo
Thu 03 Jul | Bored Bystander | I'm really skeptical about the ability of free software to penetrate vertical markets. I think either that 'Relic of a dying era' has little to worry about, or, his company's application really wasn't that hard to figure out and clone so they should have expected this anyway.
Here's my perspective... Free software is basically techie playtime. Programmers choose to work on open source projects that they think will be fun and interesting. The intersection of 'fun and interesting' with business needs is... almost nil.
What I find continually about open source is that YES, the 'brilliant core work' may be done. BUT THE DAMNED THING BREAKS, WON'T INSTALL, CRASHES, IS INCOMPATIBLE in some undocumented way. And when you post a question publicy you get a sanctimonious 'RTFM' and/or you get a bunch of excuses why the core development team didn't think it was necessary to update the demo code or docs to match the core code. Or something similar.
An associated problem is that often there is just too much open source laying around. Many OSS 'freshmeat' pages look like some junior programmer's hard drive. Lots of outdated legacy versions, no explanations, lots of betas with no caveats, etc. Often you have absolutely no idea what the magic combination of different packages is that will actually work.
As far as solving real world business needs - ROTFL. I will give you an example. I recently sought to find a replacement for Quickbooks in my consultancy. I looked into the open source alternatives. Absolutely nothing usable with more depth than a juiced up set of Excel macros (although not Excel, I mean that the applications I found had very little depth of functionality.) Accounting is about the most horizontal of business applications, it has applicability across the board, it consists of very general rules and principles that lend themselves perfectly to open source development, and you would THINK that someone would consider it 'glorious' to compete with Intuit on their home turf. Well, think again... My guess is that constructing a full blown accounting system with reporting, a general ledger, AP/AR, Payroll, inventory, etc, is just not that much fun to do for free.
So, dangerous competitors? Yes, if the software has to do with operating systems, programming tools, debugging, gaming, IM, command shells, or other common network utilities.
Otherwise, exceedingly wimpy competitors.
Thu 03 Jul | Bored Bystander | Ok, I read into the thread a bit more. Relic's package is sold to individuals.
One question I have is, how important is it to those individuals that buy his program that it works exactly as advertised?
If it's some sort of important utility software that helps the user do something related to either human health or financial issues, then Relic should try to get his hands on the european guy's freeware package and investigate and list its deficiencies.
The important thing is, do an inventory of how your commercial product is better than the free version. One thing I do know from experience - software just out of the chute produced by a skeleton crew will never compete well with mature commercial software. If the function performed is personally important to the user, then you probably have a clear edge in reliabilty and support.
If, however, your product is entertainment related or pure utility, then it has to be pretty special to compete... since it's not tha important to the user whether it works 100% or not, this may be a battle to yield on.
Thu 03 Jul | Andrew Hurst | Relic said: 'Maybe we can encourage him to make some other useful software and give it to us for free.'
I used to work on an Open Source CMS, and that was the single most irritating attitude people ever displayed towards me and my work. That Hungarian guy wouldn't be writing that software for free if he didn't like doing it. Similarly, all the code I wrote I wrote because I liked writing it. If I didn't want to add a feature, I wouldn't. No itch, no scratch, no code.
There are some that are writing Open Source programs to unseat a commercial competitor, but I think the vast majority of OSS development is to scratch and itch, and should be treated as such. Don't expect people to write code for free, that they don't want to write. And if you act ungrateful, and expect the code to be written for free and quickly, don't expect to ever get any features you want finished.
Rant over :)
Thu 03 Jul | anonymous | Apache and Perl were not created by the FSF, are not maintained by the FSF, and do not use the GPL license. Apple's biggest use of GPLed software is gcc. A majority of the GPLed software used in OS X is used by FreeBSD as well. It just doesn't make sense to rewrite some command line utilities.
Apple succeeds in using open source software because they actually work with the projects. Safari uses the KHTML rendering engine from KDE. Most of the UNIX utilities come from a specific version of FreeBSD. Apple contributes back to these projects. There is no reason why MS couldn't take advantage of open source software in the same way, and in fact they do. There is BSD code in Windows.
Regardless of whether you dislike open source software or not, it is probably a good idea to actually understand it so that you don't look foolish on discussion boards such as this. It probably helps to actually understand something you want to compete with as well.
Thu 03 Jul | Mr Curiousity | I think the core problem here is that Relic expects something that worked in the past to work in the future.
A lot of things are hard to develop but easy to clone once you know how it should look and behave.
In these cases one should expect a lot of me-too's undercutting you all the way once the idea gets out.
Therefore treat the initial revenue stream as something that will stop in a (short) while, and don't dwell on it.
Stop the development effort, and move on. That's life ...
Fri 04 Jul | Eric Debois | The problem with OSS is the same as its main strength. Diversity.
Its really a jungle out there. Lots of crap, sure! But also lots of good stuff.
Having followed this development for almost 10 years now, I dare say this. The projects that are thretening to their commercial counterparts have these things in common:
A) The core developers stick around for years
B) They appeal to crowd that codes for fun and community spirit, and contain technical challanges of the fun kind.
C) They have a strong leader that is also a good coder.
C may sometimes be a company. Like MySQL AB or the many commercial linux distros.
I think C is also quite interseting since it contradicts the idea that OSS evolves out of chaos, which is something that many believe. Not least in the GNU/Free Software crowd.
Now a lot of software does come from the more chaotic circulation of code, but the projects with the capacity to hurt commercial competion are generaly very well lead and managed.
Fri 04 Jul | Bored Bystander | Eric,
Hear, hear! Excellent post.
>> Now a lot of software does come from the more chaotic circulation of code, but the projects with the capacity to hurt commercial competion are generaly very well lead and managed.
One major fact that has a bearing on this comes to mind: how common is excellent management and leadership, even in the paid professional IT world? Astonishingly rare.
Most OSS projects have neither, so they're chaotic piles of crap where people come and go and break things as they bloody well please out of a misguided sense of control and of getting their fingerprints all over the project just because they need to express their arteestistic notions.
The unjustly lauded 'Indy' internet component tools for Delphi are a prime example of this: core developers running amok, breaking existing application code, not updating demos, and not documenting anything very well.
Fri 04 Jul | Bill Rayer | What's the software? Paintshop pro? Installshield? Winzip? Just curious...
Fri 04 Jul | Paulo Caetano | > The unjustly lauded 'Indy' internet component tools for
> Delphi are a prime example of this: core developers
> running amok, breaking existing application code, not
> updating demos, and not documenting anything very well.
I gave Indy a try and gave up in no time. I'm still sticking to François Piette's ICS (Internet Component Suite).
Why? Because the way it works is a lot more natural for me. Also, it doesn't have much in the way of docs, but it has more than enough samples to get me started on whatever I want to do - granted, I have simple needs :)
--
'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)
Ok, inspired by Crimsons How Do You Keep Up thread.
We are the experts, the hype machines driven by vested interests and Journalists are not.
Lets hear your opinions on where we are headed.
Pick a new technology and give your view.
RDF
I was _Very_ excited by RDF. It makes instinctive sense to me that more structured data means more sophisticated searching and manipulated.
If the web was RDF not HTML i should be able to seach not only for the terms chess tutor washington but say get me all the chess teachers in the washington area who charge under $50 an hour and are rated over 2200.
Obviously currently it would be very hard to create a web search just to do that particular search (given all the different ways the required info is presented) never mind a generic mechanism to make searches of that form.
Interest Rating : **** (4 of 5 stars)
Future : Been disapointing so far. Will probably be superseeded before it has any mainstream effect.
There is no doubt the next big leap forward will be AI.
Or to put it another way much more sophisticated mechanisms to manipulate information.
Braid_ged.
Thu 03 Jul | Avenger | RDF will not win. Why? Because it is a HUGE effort to implement it.
In order to be useful, a lot of people and companies have to implement it - and most of them won't bother.
I am a lot more excited about things like ASP .NET - a powerful, RAD environment for the web.
This could make complex web sites a lot more common.
Thu 03 Jul | Joe AA. |
As a side question... why are 'complex web sites'... or complex anything deemed such a virtue?
Thu 03 Jul | JJ | Well, why is a well-cooked food considered such a virtue?
Why not read the raw fish and potatoes?
Thu 03 Jul | Prakash S | Braid,
the kind of searches you talk about relate to the 'Semantic Web' envisoned bt Tim Berner's Lee. Read his paper on the Scientific American regd. this.
Thu 03 Jul | Just me (Sir to you) | As others have said far better, there is no Semantic Web, its just a Syntactic Web. You do not get anything for free, you just get a markup syntax that you have to apply to make it easy on the SM people.
'Hear ye, hear ye: from now on you will add markup to your webpages with links to the Grand Unified Onthology. You millions of people will do this massive work so that We, the gods of SM, can implement a simple graph traversal algoritm and claim to have solved AI. Now if you will excuse us, I hear the next truckload of government research grants dumping money pulling into our courtyard.'
Know this: People do not do markup.
Let's try that again: People do not do markup!
It has been tried in news agencies: 'Catagorize my story? Keywords? I am a journalist, Sir. I >make< the news. Want someone to do household chores, call my cleaners!'
On the Web, you say? People can't even do proper HTML, and only search engine spammers pay attention to meta-tags. 'Are you saying www.bighooters.sex is not rdf:about rdf:collection evry damn concept in the universe?'.
Now, when was the last time you filled out the catagory and keywords fields in a Word document. Yes, it is rigth there under 'Summary' in the document properties. You knew that, rigth? For those of you with in the nice big companies with the KM-enableled Intranet, did you bother to select the right catagory and keywords even when the system forced you to, or did you just hit OK?
I rest my case.
Thu 03 Jul | braid_ged | Prakash,
My buddy, (read a lot of your posts, love your work),
What does Tim suggest we build the semantic web with ?
You guessed it, RDF.
Braid_ged
Thu 03 Jul | Dr. Van Nostrand | Just me (sir)--
You are so **on the money** with that comment. I'm involved in a major KM snake-oil project at megacorp inc, and guess what? The whole fabric is tied together by user-supplied metadata, which is a fairly preposterous and unworkable approach.
Thu 03 Jul | Jim Rankin | 'Know this: People do not do markup.'
Marked up text is the single most valuable commodity in natural language processing research. With well marked up corpi, a researcher can make break throughs and work wonders. Without it, you can't get started.
Fri 04 Jul | Andy | Well not that I have thought that much about the 'semantic web', but it seems to me a solution to the markup problem is to make it worthwhile for people to markup.
i.e. if people got more hits to their websites because of markup, then they would markup. People go to great lengths to try to improve their search engine ranking (there are whole websites dedicated to this, apparently). If there were some search engine that was better than Google because it could analyze markup, then a lot of people would use it. And if more complete markup resulted in more hits, then people would do it in a second.
But of course I can see lots of problems with people creating misleading markup just to increase their rating. Oh well.
Fri 04 Jul | Just me (Sir to you) | Realize that the major reason why Google was better than the others was that they >stopped< relying on markup.
I reffered to the meta-tag spamming problem before. Maybe I should put it more clear: 'People do not do honest markup, but they will try to abuse whatever you give them for selfish gains'.
Fri 04 Jul | S. Tanna | Maybe I am not knowledgeable enough, but what is the point of the semantic web unless every (or many) web sites implement it?
It seems to me that the value would be greatly lessened, if it's just a few who do it... and therefore I predict there is a massive obstacle to its adoption.
Joels posting about using the new Echo format got me thinking (watch out!) -- do you have a strategy for keeping up with all the new stuff that gets thrown out there? By stuff I mean, XYZ standard for doing ABC (RSS, Echo, 80whatever, HTML13.0, CSS 4.2, DOM 97.2, SOAP, etc ).
Does anyone else feel a little twinge when they see a standard pop up into common use that theyve never heard of? I kinda felt that when Joel posted about this new fangled Echo thing (though thats not in common use...yet). Sometimes I kinda worry that Im not doing things as efficiently as possible and that one of these new standards could save me a lot of time (or make me more marketable)...BUT, I cant find that out unless I invest a lot of time in figuring out what the heck all those new standards do (and thats without getting into the annoying details of various implementations).
So, how do you keep up?
Wed 02 Jul | S. Tanna | I am tempted to say, don't worry 90% of the TLAs you hear now, will be forgotten, replaced or obsoleted within a couple of years... and I'm only half joking.
Unless you are working with all of them, do you really need to know the fine detail of every one?
Even if you do, don't you need to the overview and main points - then use the book/help rather than remember everything? I once knew a guy who refused to do any Windows programming until he knew every API (and that was when there were a lot less APIs, but even then too many to remember!)
Wed 02 Jul | Philo | Tangential to topic, I misread '80whatever' and realized that my misreading should be the new name for Echo:
Snowblower.
It's unique, easy to say, easy to remember, and so very, very descriptive.
Philo
Wed 02 Jul | FullNameRequired | I ignore everything until it either goes away or I have to use it....
we dont have to keep up, we just need to be able to solve business problems using computers.
Wed 02 Jul | J.J. | Often if you ignore a technology, it will simply go away. :-)
Wed 02 Jul | braid_ged | It (that twinge when you hear lay people talking about something you should know all about but don't) is a confidence trick.
It is an industry wide 'fire and motion' technique.
Go read www.news.com. Business wankers love buzz, buzz means they don't actually have to understand.
What the leaders, Joel and the like, do (correct me if i am wrong), is to back their own judgement.
Hear about a new technology, does it make sense, does it seem useful, if so investigate and play, else disregard. Even if there is a lot of hype, if it seems silly, it is.
It's amazing how much your preformance improves when you back your own judgement rather than trying to immitate a genius.
Picking new technology is like butting in on a lecturer at University to make a correction or ask for clarification, you worry about it and doubt yourself but when you start to trust yourself and be brave it's amazing how smart you can look :D
The classic buzz experience for me personally was 'Push technology'. Most people I talk to now play down or completely deny it had any traction or press.
I remember it coming, I remember thinking about it and deciding it was definately a non-starter, mid-hype. Ahhh the satisfaction of seeing it fade to nothing :D
It's the same with more hardcore technologies. WebDav, RDF, .net etc. Think about it and trust your judgement, there is no one else who knows the future.
Braid_ged.
Thu 03 Jul | Ged Byrne | I remember a post that Joel made ages ago that basically said 'If you find a new standard or technology to difficult to understand, don't worry. It will be replaced by a standard that can be understood.'
I use that still as a general rule of thumb, and it seems to work.
A standard will only take on general importance if it is easy enough for the majority of people to understand.
Some standards require a great deal of specialised knowledge before you can understand them. Thats not a problem. If you lack that specialised knowledge then the standard isn't relevant to your area. If you have the specialised knowledge and still can't understand, then the rule still applies.
It may be that a standard that applies to a specialised area proves to be generally useful. If this is the case then somebody will adapt it for use by the general population: eg SGML and HTML.
Thu 03 Jul | Bored Bystander | >> I remember a post that Joel made ages ago that basically said 'If you find a new standard or technology to difficult to understand, don't worry. It will be replaced by a standard that can be understood.'
I like this principal and I used it in my own career. It simply isn't possible for anyone doing real and useful work, to keep up with the TLA's (I take to mean three letter acronyms) that are being constantly manufactured. And most of the crap goes away after awhile as pointed out.
I've found that people who are really on top of current TLA's all the time (they always seem to know exactly what they are or represent and have dabbled in them) are either professional writers, or don't really develop large projects that require stable interfaces in their own work... The borks and agency recruiter scum always use criteria like 10-year mastery of a just announced TLA as a way to 'knock the trade' and put you down when you don't have deep experience in it.
Example: I ignored COM & DCOM through its rise in the late 90's because I had other work at the time. It was absolutely unapproachable in the limited time I had to look into it (I know all about threads and coroutines, but hearing about 'apartment' and other threading models gave me a brain aneurysm.) Now it's about to be superceded by .Net.
When I had an application in hand that needed a distributed approach, I used RPC. There must be a death squad that roams around that executes programmers who choose the simplest and most elegant available solution. This is judging from the cluelessness about RPC that I found with peers who were steeped in DCOM and CORBA who considered RPC a junk, bad, 'legacy' (horrors!) protocol. The simplest protocol was absolutely unknown, instead all the mass culture 'knows' is the hardest possible way to shove bits down the wire.
And this pattern of making things as hard and as kewl as possible is repeated all over the place.
Thu 03 Jul | Steven E. Harris | It can be exhilarating to jump into something new while the metal is still hot, so that one has a hand in forming a potentially long-lived and influential tool or protocol. It's much the same allure as joining a young startup versus joining a staid, successful company. One must get in early to make an impact.
Witness all of the 'little languages' that pop up, or the overlapping Java frameworks, or the new craze in XML-based vocabularies. Each is a fresh attempt to start a new club, to lure energetic interest away from the more settled projects.
The problem, though, is that these projects are often started and guided by vanity and competitive frustration rather than technical necessity. The participants often make good volunteers but would not be qualified to be recruited.
I try to ignore most new formats and protocols through a cooling-off period. Too many are just merely learning projects that don't need to be shared, let alone 'standardized.' I hold BEEP (nee BXXP) in mind as a notable exception.
Thu 03 Jul | Michael Moser | >> I ignored COM & DCOM through its rise in the late 90's because I had other work at the time ... Now it's about to be superceded by .Net. <<
That reminds me of a Dilbert cartoon - where a Dinosaur got hired to do a computing job, just because he looked like a programmer.
Now he wouldn't bother, anything you do, just wait till another asteroid comes down, or an ice age sets in.
Fri 04 Jul | Norrick | I don't.
The majority of the client work I do is in either VB6 or ASP 3.0. SQL Server for databases.
Granted, I'm learning the .NET stuff because it looks like it's going to stick. But in general I am a late adopter who prefers to pick something up only after it hits two milestones - 1) it proves itself to be useful in the marketplace, and 2) there is wide support and availability of code snippets.
The majority of my clients are far more interested in making sure their systems work than in playing with cutting edge technologies. And thank God for that!
I dont understand why there is so much fuss about blogs. Why do people consider them a revolution?
Very, very few blogs are worth reading.
Indeed, there are one or two blogs which are simply goldmines. JOS is one of them, VentureBlog is another.
However, the rest are not worth reading.
Wed 02 Jul | flamebait sr. | Well, 90% of everything is crap. Over 90% of all webpages are crap.
So don't wory too much about it.
Wed 02 Jul | Sam Livingston-Gray | Indeed, Sturgeon's Law definitely applies. But if there are a few blogs worth reading, doesn't that mean the medium itself is worth some amount of fuss? (BTW, see Clay Shirky, I believe, who wrote about weblogs and power laws.)
Plus -- even though a blog may not be worth reading (for a given reader), it could still have been worth writing (for a given blogger). I've found that blogging has helped me tighten up my writing somewhat. I still tend to be verbose, but I'm getting progressively less so. (=
Wed 02 Jul | S. Tanna | 98.72% is a vast under estimate.
I do not wish to read boring stories about somebody's cat or ugly kids.
Wed 02 Jul | | Don't forget that you don't have to read someone consistently. Often someone will write a brilliant article once every blue moon, and over many people it adds up. Every week there's something good.
Also, there's Lambda the Ultimate, /. and OSNews, which are collaborative, focused weblogs. I guess the nice thing is you get to ignore all the boring ones with the ugly kids, and you don't have to pay for multiple subscriptions or anything.
I wonder what will happen when video becomes really common...
Wed 02 Jul | John Rosenberg | Blogs also give you an insight into how people are thinking. All the Microsoft blogs are a great example.
Wed 02 Jul | S. Tanna | 98.72% [!? :-)] of bloggers aren't thinking. They're just recording the mundane trivia of their lives. That's the problem.
I'd read joelonsoftware because he is thinking, and what's more, he's thinking about stuff that I'm interested in. Both are exceptionally unusual.
Wed 02 Jul | ymmv dude | IMO, the really good blogs (< 1%) aren't any different than a regularly updated website. They usually attract a large readership and comments are either turned off or too large to be meaningful (ala /.). You know how the hype wagon is though.
Hey, anybody wanna buy my flooz?
Wed 02 Jul | Taka | This is sort of missing the point. Blogs are about social networking.
Even if your blog is simply about your day-to-day activities and only your mum and a few friends read it, it's important to *them* and helps keep that social network going. The fact that it is of no interest to you or the other 5.999... billion people on the planet doesn't reduce it's value to those involved.
Wed 02 Jul | Nobody Much | 'I'd read joelonsoftware because he is thinking, and what's more, he's thinking about stuff that I'm interested in. Both are exceptionally unusual. '
Hook, line and sinker.
Wed 02 Jul | r | > This is sort of missing the point. Blogs are
> about social networking.
I find this extremely pathetic. Why not do 'social networking' using face to face meetings, or a good mailing list?
Wed 02 Jul | Philo | If someone doesn't put the Camel in the remaining 1.28% soon there's gonna be some hurt handed around...
[grin]
Philo
Thu 03 Jul | www.marktaw.com | Sturgeon's Law /prov./ 'Ninety percent of everything is crap'. Derived from a quote by science fiction author Theodore Sturgeon, who once said, 'Sure, 90% of science fiction is crud. That's because 90% of everything is crud.' Oddly, when Sturgeon's Law is cited, the final word is almost invariably changed to `crap'.
http://www.jargon.net/jargonfile/s/SturgeonsLaw.html
Thu 03 Jul | Entrepreneur | Aren't 987 crappy blogs worth having one Jos?
It's like evolution, right?
You have to let eveyone try everything and the cream will rise to the surface.
Thu 03 Jul | Taka | >>> Why not do 'social networking' using face to face meetings, or a good mailing list?
How do you do FTF if you live in different countries?
And using a mailing list just doesn't feel right. 'Social networking' here has a slightly different meaning to the normal, real-life one. Look up Clay Shirky or Stowe Boyd and see what they have to say about 'social software' (a phrase I hate, btw :-)).
Thu 03 Jul | Konrad | The thing that cracks me up are huge circle-jerks about folks blogging about blogging. There's hundreds of these things - blogging about the ramifications of blogging, the software behind blogging, the social aspects of blogging, about the blogging of blogging about blogging, the 'blogosphere' and some of the stuff just gets crazy.
How many blogs about blogs can you have before the system exceeds the chandrazer limit and implodes into a black hole!?
Thu 03 Jul | Alex | Hi.
I created this site for myself and a few friends. It's at
www.motherblogger.com.
It's a site with links to the 'most popular' blogs that interest us.
Do take a look, and i would love to get your feedback.
Thu 03 Jul | Marc | I don't know. I've found a number of blogs worth reading.
Brad always has interesting things to say ( http://dotnetguy.techieswithcats.com/ )
Philo has a well written history of 'the bad project' ( http://www.saintchad.org/blog/ )
Eric has some fantastic insights into software development, especially commercial software ( http://software.ericsink.com/index.html )
Funny thing, each of those blog writers hang out here.
I also like a number of summary feeds out there. http://weblogs.asp.net/ has a number of good posts everyday.
Thu 03 Jul | 99.999% of all blog entries, convenient summary form | hey! Look at this blog post: (href)
Look who just started blogging! (href)
blogging about blogging, blogging about blogging about blogging.
We're changing the world! Blog blog blog blog.
Read this A-List blogger (href), read this other A-List blogger (href). Check out this post about meta blogging (href)
Thu 03 Jul | Fred2000 | Also, about 80% of blogs are like ham radio... Blogs about blogging.
Thu 03 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | Marc, thanks for the kind words. :)
As for '99's point, he makes a good one. I think blogs fall into three categories: (1) personal/business journal, (2) meta-bloggers (aka, link regurgitators), and (3) creators of original content. I put myself as a mix of #1 and #3, with very little of #2, as I generally find meta-blogging boring to both read and write.
If you want just a few blogs that are primarily category #3 and very high quality, here they are:
Adam Nathan [.NET Interop]
http://blogs.gotdotnet.com/anathan/
Chris Brumme [.NET Architect]
http://blogs.gotdotnet.com/cbrumme/
Ingo Rammer [.NET Remoting]
http://www.ingorammer.com/
John Lam [AOP, Generative Programming]
http://www.iunknown.com/
I read about 70 blogs, and I get value out of them all, but these 4 are probably the best value for time invested (to counterpoint those who think blogs are always useless).
Thu 03 Jul | John Topley (www.johntopley.com) | I've had my blog up and running for just over a month. Would love to know if it's boring!
http://www.johntopley.com
Thu 03 Jul | Yanwoo | I disagree with the general sentiment here. Blogs are a big deal for all kinds of reasons.
But first, the wonderful thing about freedom of choice is if you think a blog is boring, then you never have to go anywhere near it again. full stop.
Boring is subjective. Nothing is boring. You find it boring. John finds it boring. Sam loves it. It's not boring. It's not interesting. It just is.
A blog about the trials of a girls struggle through an eating disorder would, I'm sure, be boring to many of the people here. According to the sentiment expressed here, it's a waste of time, shouldn't be done. Rubbish. If one other person around the world gains some strength from realising someone else has faced similiar battles to their own then a tag of 'boring' becomes somewhat lame and irrelevant.
Blogging gives a global voice to everyone. Nobody makes anybody else listen. Ok, perhaps 98.72% blogs don't interest you, but the growth of blogging has meant that 1.18% of blogs have lived.
Without the 98.72% you wouldn't have the 1.18%. You choose.
Thu 03 Jul | flamebait sr. | Hmmm...
I like http://jwz.livejournal.com/ despite the author spending far too much time griping about his life. But he realizes that his life is, in fact, a comedy, and actually does a good job of articulating it.
Thu 03 Jul | Grumpy Smurf | Well, 98.72% of all statistics are wrong, so there...
Thu 03 Jul | www.marktaw.com | Is this how 90% of rap songs back in the day were about rap songs?
Fri 04 Jul | Wackazz MC | So nowadays 90%+ rap songs are about how great the current rap song and/or rapper is, how many people he's/she's killed, how many cars they have, and how many women/men they've slept with.
Then again, maybe weblogs would be a tad more interesting if they talked about what rap songs talk about.
Fri 04 Jul | Julian | I maintain a boring blog as hobby. Reviewing every book I read, for example, is a rewarding use of my time, motivates me to read more attentively, and improves my writing and analysis skills. Plus, it's nice having a small audience that hears my views.
FYI, here's the URL, though I'm definitely pimping my blog since I mentioned it in the last JoS blog discussion.
http://www.mindspring.com/~teleri/julian/index.html
Fri 04 Jul | S. Tanna | Yanwoo
Boring is subjective, it is simply something that causes boredom, which is a mental state involving lack of interest in the subject matter.
No value to anyone, is not semantically equivalent to boring.
And I still don't want to read about somebody's cat.,
After years of always writing if statements like this:
if (5 == nMumble)
... instead of like this:
if (nMumble == 5)
... I finally found some code that failed because someone did it the wrong way:
while (pos = NULL) {
// delete some resources
}
Even better: I knew there was a tiny memory leak in that function, and had even glanced briefly at the loop, and *still* didnt notice the bug - which is *exactly* the rationale for this idiom!
Okay, Im easily amused, but its been a crappy day, and I dont know any other group that (a) gets it, and (b) cares...
Wed 02 Jul | Tim Evans | Compiling this with GCC gives the warning 'suggest parentheses around assignment used as truth value'. Do other compilers not check for this?
Wed 02 Jul | njkayaker | VS7 does check for this.
If the idiom is intended, one could write the following to shut it up:
if((pos= XX) == NULL)
Wed 02 Jul | Fenster | I'm using VC6 (long story), and this line of code has been compiled about a zillion times at Warning Level 4. Today, the gods smiled, and the warning was displayed when I built.
Why was it never displayed before? Beats me... vagaries of the compiler. I'm just happy it did at all...
Wed 02 Jul | Mister Fancypants | I can't stand having constants on the left side. I fully understand why people think it is helpful, but I think it is very unnatural to write and read code using that convention.
I just do things the old fashioned way and let the compiler warn me about such things.
Wed 02 Jul | Joel Spolsky | 'unnatural' ?
what does that mean?
Wed 02 Jul | eclectic_echidna | I can't stand making my code look a little strange, so that I can all but eliminate an entire class of bugs.
I thought programmers had vulcan-like logic?
--
ee
Wed 02 Jul | WildTiger | There are ways to disable warnings in VC. I.e. you can use #pragma warning disable( 4706 ) to turn off this particular warining about 'assignment within conditional expression'.
Wed 02 Jul | J.J. | C# always catches that error.
Wed 02 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | That was a good rule a decade ago, but we've all moved onto better compilers, I presume. Well, maybe someone's still doing Minix kernel development...
Wed 02 Jul | And the horse you rode in on | You're sacrificing readability to prevent a mistake the computer can catch and let you know about.
Sounds like a poor tradeoff to me.
Thu 03 Jul | constructive comment | I put constants on the left side all the time just so that other programmers ask why and I can tell them ...
Thu 03 Jul | Someone unknown | Why do you want programmers to ask why, so that you can tell them?
Or did you just make this statement to make us programmers ask you why, so that you can tell us?
Thu 03 Jul | Ashley | > 'unnatural' ?
> what does that mean?
To me, the line if (x == 3) reads naturally as 'if x is equal to 3'. My brain parses the 'if x is equal to' bit first, followed by the '3'.
The equivalent 'if (3 == x)' is parsed by my brain as 'if 3 is equal to', followed by 'x'. This causes minor cognitive dissonance, because my brain thinks '3 is equal to what? 3 is always 3, it doesn't change, something must be wrong here!'. This results in my taking marginally longer to understand the 'if' statement.
Also, the '3 == x' idiom breaks my personal 'If it looks ugly, don't do it' rule. Subjectively, it *just looks wrong*, and by the sounds of it, other people here feel the same way.
Thu 03 Jul | Ajit | It's just that you aren't used to looking at it this way. Actually they should teach to use this style in institutions. I also laughed the first time I saw it. But, it got into a habit after a month or so and it has helped me to catch many bugs at compile time itself.
Just my 2 cents worth :)
Thu 03 Jul | Roel Schroeven | I never put the constant first in if-statement comparisons. The rationale is this: putting the constant first is meant to prevent one from typing = instead of ==, because the compiler will catch it. I fear that doing so will make me careless, and that it will bite me back sooner or later: quite often I compare two variables instead of a variable and a constant.
So I prefer to be consistently cautious, with the added benefit that the code is more readable (I'm from the school of thought who thinks that if (x == 3) is much more readable than if 3 == x)).
On a (somewhat) related note, some people recommended to use always < and never > (or the other way around) in comparisons, but I don't like that either. I prefer
if (x > 3 && x < 10)
above
if (3 < x && x < 10).
Thu 03 Jul | Fenster | 'The compiler will catch it' is an attitude that causes bugs, pure and simple. And in fact, the compiler does *not* always catch it, as I have demonstrated.
Everything you do in source code should have the aim of making bugs impossible. That includes big things like design, and little things like this. To do any less is unthinkable.
Thu 03 Jul | treefrog | Fenster,
I think that while your attitude is laudable, you are failing to see the wood for the trees. One of the things you should be doing in source code is making it harder for bugs to exist, and easier for bugs to be spotted. It is not the only thing.
Code maintainance is not just about finding bugs, it is also about being able to extend and / or refactor as necessary. Building code which is easy to maintain, extend and refactor is also a valid goal. Bugfixing is important, but it isn't everything.
regards,
Thu 03 Jul | c++_conventioner | I really dislike this convention. Really. Dislike. It. If you're going to do that, you may as well do this:
template
inline bool compare_equals( const T& arg_1, const W& arg_2 )
{
return( arg_1 == arg_2 );
}
// ...
if( compare_equals( i, 0 ) )
// foobar
Hey, then I can put the constant on whichever side I like, and there's no chance whatsoever I might slip up. And it's perfectly clear what's going on.
Thu 03 Jul | Big B | I think every decent C developer makes the assignment-instead-of-comparison error exactly once, then from that point on forward remembers to use the correct operator. I know that's what happened to me.
Once you appreciate the value of the convention, you've already been burnt once. Once you've been burnt, you no longer need the convention. Now I'm confused.
If half of the people here think it makes the code harder to read, and the other half don't, what's does it say about the average cost in readability?
Thu 03 Jul | Leonardo Herrera |
Heh, my 'me too' response is: yeah, looks unnatural to me, too. I'm not against people using it, thought.
http://dictionary.reference.com/search?q=unnatural
;-)
Thu 03 Jul | Aren't there more important topics? | As long as we're nitpicking, the statement
if (5 == x)
is 'wrong' since you are using a magic number!
Thu 03 Jul | Fenster | treefrog - What's the point of making code easier to maintain, at the expense of correctness? Nothing in this idiom makes it hard to extend or refactor. The easiest code to maintain is the code you don't have to look at, because it doesn't have a bug.
c++_conventioner - That's just silly.
Big B. - You misunderstand. It's not a mistake, it's a typo. Any idiot knows to use == instead of = , but sometimes fingers slip.
Aren't there more important topics? - You are correct, sir!
And finally, 'harder to read' just means, 'someone else's code'. ATL is 'hard to read', at first. Does that make it bad code?
Thu 03 Jul | Mike McNertney | 'hard to read' does not mean 'someone else's code.' It also applies to YOUR code when you have to come back and modify it two years later.
Personally I see no substantial difference between relying on the compiler issuing an error for 'if (5 = x)' and relying it issuing a warning for 'if (x = 5)' (especially if you have warnings as errors, which IMO is a good practice). In both cases you are relying on the compiler to catch a typo. Both indicate that there was a failure. Why is one preferable to the other?
Now obviously if your compiler doesn't issue that warning, or if you want to turn that warning off for some reason, the constant on the left may be preferable.
Thu 03 Jul | Mike McNertney | Fenster... you say c++_conventioner's idea is silly. By your own argument, his idea should be the standard. It is the only way, for example, that you can protect against 'if (x=y)'. Your whole argument is that it is OK to sacrifice some readability in order to make sure the compiler throws an error for this bug, so why wouldn't you go along with the idea c++_conventioner put forth?
Thu 03 Jul | c++_conventioner | Fenster:
That was my point. But it's only silly because the logic of constant-first comparison is silly--that is, we should all move away from simple and intuitive language semantics to avoid (rare) mishaps.
Well, if we're going to do that, why not use templatized comparison? Because it fits that end _too well_? Why not also use operator keywords, too? We wouldn't want to accidentally confuse && with &.
In short: we should encourage developers to use the language mindfully and with a sharp eye for its nuances, rather than use these catch-all tricks. Part of being an experienced developer is being extremely careful on all levels of one's practice.
Thu 03 Jul | Larry Prince | I can't believe that reading 'if (-1 == x)' will throw an experienced programmer for a loop, so I definitely agree with Mike. And since I suspect that Mike and I work on the same program (if this is the same Mike) it's refreshing to know that at least one colleague won't get annoyed when I do this.
Like most programmers I read/modify code written by others all the time. Other programmers will always have different styles. Some I really like, some I'm not so fond of. But that does not mean those styles are necessarily right or wrong.
Thu 03 Jul | somebody | I prefer putting constants first for readability. The constant is typically the point of the comparison so it makes sense to put it first to highlight this.
Consider the following where the compiler check isn't even an issue (since = will fail in both cases):
if (ERROR == FunctionCall(...))
-- versus --
if (FunctionCall(...) == ERROR)
You can get the point of the first 'if' by simply reading 'if (ERROR ==' but must read the entire line to understand the second 'if' (sometimes needing to scroll to the right if ERROR is outside the visible area). It's annoying to have to read whole lines (or to scroll) when trying to quickly scan through code and it's easy to misinterpret 'if (FunctionCall(...' as meaning 'if FunctionCall succeeded' when reading through code fast.
I could've sworn I read about a study (or something along those lines) about this but I haven't been able to find it since. If anyone knows what I'm talking about, please speak up!
Thu 03 Jul | And the horse you rode in on | But the important thing on that line is the function call, not the constant.
Put the most important bits first.
Fri 04 Jul | c++_conventioner | Somebody:
Well, call me anal, but I don't nest function calls inside if statements. Or inside anything, really. Flat structures are just more readable, IMO. And generally, more extensible.
For instance, in that code:
if (ERROR == FunctionCall(...))
Well, what if in the future, FunctionCall( ) is modified to return some other status besides ERROR (it happens!)? You aren't very well going to do:
if( ERROR == FunctionCall( ) )
else if( ANOTHER_STATUS == FunctionCall( ) )
Because, of course, that executes FunctionCall( ) twice. More likely, you want to do this:
ret_val = FunctionCall( );
if( ret_val == ERROR ) // or switch( ret_val ), etc.
// ...
else if( ret_val == ANOTHER_STATUS )
// ...
In short: I don't really buy the readability argument here, because you could improve the code a lot by eliminating the nesting altogether.
Fri 04 Jul | somebody | I totally agree with you that it's usually bad style to stick function calls inside the 'if'.
However, I'd still argue that it's clearer to have the constant on the left. 'if (ERROR == ...' is the important piece of information. 'ret_val' is just some placeholder variable that you're comparing it against. Why stick the superfluous piece of information (to the reader) in the middle of the important stuff?
For the record, what I had in mind with the above function is something like Win32's GetLastError:
if (ERROR_FILE_NOT_FOUND == GetLastError())
-- versus --
if (GetLastError() == ERROR_FILE_NOT_FOUND)
In this case, GetLastError is far from the most important thing on the line, as far as readability is concerned.
Fri 04 Jul | c++_conventioner | SomeBody:
I don't know that 'ret_val' is superfluous. It was in that example, but only because the example itself was very generic.
But in practice, the variable isn't necessarily superfluous. eg,
HANDLE created_file_handle = 0;
created_file_handle = CreateFile( ... );
At least in this instance, the return value is extremely important--it's the handle to your newly-created file.
So shall we write:
if( INVALID_HANDLE_VALUE == created_file_handle )
versus
if( created_file_handle == INVALID_HANDLE_VALUE )
I don't know that the particular error code is more important, in this case at least, than the fact that you're testing the created file handle for validity. Isn't _that_ what the reader wants to know? Who cares if the handle is invalid because its value is INVALID_HANDLE_VALUE; I just want to know that the handle is OK.
Fri 04 Jul | Greg | It is hard to argue for legibility in a language that wasn't designed to be safe or legible.
Fri 04 Jul | somebody | Obviously the return value is important to the proper execution of the program. I'm speaking solely in terms of a human viewing the code, not the compiler.
Consider the following two examples:
data_file_handle = ...
if( data_file_handle == ... )
... CreateFile( ... );
if( INVALID_HANDLE_VALUE == ... )
It's not clear at all what the first example does, other than getting some file handle and comparing it to something. It might be creating the file or it might be retrieving the file from a previously opened set of files. It might be comparing against an error value or against another file handle.
It's obvious what the second example does, even without the variable being visible. That's what I mean about the variable being superfluous. Conceptually, the important thing is that you are creating a file and checking for failure, not that you are assigning a variable and comparing it to something.
Since this is a pretty global forum, Im curious -- has anyone ever moved a computer (not laptop) from North America over to Europe? Are there any problems to worry about besides plugging it into a converter? The reason Im asking is that its still quite a bit more expensive to buy, say a Dell, in Ireland than in the US so I wonder if it would be worth my while to buy a PC here before leaving.
Wed 02 Jul | Marc | I know someone who has done this in the UK and Germany. The trick he used was to replace the power supply once he got it back to Europe.
The converter might work, but I doubt that the quality of the converter wiring is good enough to handle a PC over a long period of time.
Wed 02 Jul | A.T. | I don't think I've ever seen a computer in the UK that didn't have a switch next the the power socket that swaps between 240v and 110v. Is it different over there?
Wed 02 Jul | constructive comment | check the power adapter; all the laptops I've had work fine both sides (Dells, IBM Thinkpads)
And remember to buy your US->UK or US->EUR plug adapter in the US; they are a real hassle to find here (although EUR->US is more straightforward etc).
Wed 02 Jul | Philip Dickerson | Virtually every PC made in recent years has a 'universal' power supply - it has a switch to change the input voltage between 110/120V and 220/240V, it's a switching power supply so the 60Hz/50Hz frequency doesn't matter, and they accept a range of input voltages (when set to 240V for example it will work correctly with input voltages from 210V to 255V or something like that).
Most manufacturers ship essentially the same system worldwide these days.
If you were moving from the Northern Hemisphere to the Southern, you would want to buy a CRT monitor in your destination country (the difference in the Earth's magnetic field is enough to slightly distort the display image if the CRT is not set up for the hemisphere). But moving from North America to Europe shouldn't be a problem for a CRT, although you will need to check whether the input voltage (and frequency) for the CRT is adaptable. (LCD monitors don't have the same problem with the Earth's magnetic field.)
Wed 02 Jul | Matthew Lock | The keyboard layout in the UK is different from the US layout. For example the British Pound sign is on the numbers somewhere (I forgot) and the @ sign is not shift 2.
Wed 02 Jul | Matthew Lock | I moved a monitor from Japan to Australia and one from The UK to Australia. Crossing the equator causes some weird colour changes but it is easily fixed with the Degaussing function on the monitor.
Wed 02 Jul | Big B | >>> Crossing the equator causes some weird colour changes but it is easily fixed with the Degaussing function on the monitor.
So THAT's what the Degauss button is for. I always thought its purpose was to scare users half dead the first time they pushed it out of curiosity.
Wed 02 Jul | Joker | Yeah, and if you sit exactly at ecuator, and turn on your computer, you will see nothing at all, because the colors mix with each other in exactly equal quantities.
This is, in fact, why the boreal aurora appears - at the poles, the electrical discharges in the earth's athmosphere happen to be polarized by the earth's magnetic field, which pulls the photons STRAIGHT down and this is why we tend to see different colors.
Also, LCD screens are more affected by this, but the makers of LCD screens forget to put a Degauss button mainly for cost reasons.
You can degauss ANY LCD screen using a STRONG electro-magnet - just let alternative current pass trough it, and you got yourself a magnet which changes polarities very rapidly!
Wed 02 Jul | Steve Barbour | I've done it in both directions with no problems, but...
When I was in the Army in Germany, we finally got a shipment of brand new Pentium 233s in and the guy who was setting them up forgot to switch the power supply to 220 before plugging them in. He went through three PCs before he figured out what he was doing.
So, remember to switch the power supply first. Also, rather than buying those little plug adapters, you can go to a computer store oversees and buy yourself a power cable. The end that plugs into the PC (and the monitor) are the same.
Double check your monitor to make sure it switches. Also, a lot of stereos and TVs also will accept different voltages. If it's a US TV you won't be able to get the local stations (Europe uses PAL), but you can still use it to watch videos and DVDs. Also, your stereo may need to be adjusted for European tuning, if memory serves, their stations are spaced differently on the dial than those in the U.S. On my stereo, it was just simple option in the setup.
Also, a lot of lamps will work with new bulbs, but the touch sensitive type generally will not.
If you are going anywhere near a military base, ask around about people selling transformers. They are really expensive if you have to buy them new.
Good luck and have fun!
Wed 02 Jul | S. Tanna | I have a US system running in UK. Just flipped the power switch. Keyboard is US, so no pound, but I don't care, about this. I imagine I could plug in a UK keyboard if I did.
Wed 02 Jul | David Clayworth | I moved a load of stereo equipment from the UK to Canada, and I just went to an electrical store and bought a x2 transformer and a couple of North American plugs. A few minutes work made a transformer capable of handling the load of any electronic equipment and used the sockets from my old UK extension cords. That was six years ago and they are still working fine.
Wed 02 Jul | Martha | The physical keyboard has precious little to do with what characters you can produce, and what keys you have to hit to get them. Just set your keyboard layout to whatever country you like.
If you need to relabel your [physical] keyboard because you don't remember what character is where, a useful hint is to stick the label on the *front* of the key instead of the top - you hit the top often enough that anything you put there will wear off in no time.
Wed 02 Jul | jedidjab | Wow .. thanks for the all the info! :)
Wed 02 Jul | pdq | A buddy of mine moved from the US to Germany recently. He bought a transformer to convert 220 to 110 with the proper Hz. He told me that the problem wasn't the computers it was the printer, and the scanner, and the monitor, etc. It was just easier to buy one device and plug a US powerstrip into it.
Wed 02 Jul | @+ | I second what pdq just wrote. When I moved from Canada to France I bought one converter from which I could get power for the monitor (it didn't handle 220), the printer, the scanner, my over-aged answering machine, etc. Depends how much your peripherals are worth...
Wed 02 Jul | echidna | One of my proudest achievements is being able to say I have actually seen a computer smoking.
Back in Australia after being in America, I plugged a machine into the power without checking the switches. Smoke curled out and of course the CPU was fried.
Wed 02 Jul | Martha | Sounds fun, echidna. :)
Wed 02 Jul | Chris Tavares | This is how we know that computers run on smoke.
After all, if you let the smoke out they don't work anymore. ;-)
Wed 02 Jul | | > So THAT's what the Degauss button is for. I always thought its purpose was to scare users half dead the first time they pushed it out of curiosity. <
HA HA HA! QOTW!
Oh wait, we don't do quote of the week here.
Thu 03 Jul | Punter | I've done it, well in the other direction.
Your PC and probably your monitor will be fine with dual / switchable power supplies.
The problem is with your router / KVM / speakers / printer, i.e. everything else won't. Just buy a decent transformer, plug a power strip into it and you're set.
Thu 03 Jul | Steve Barbour | Actually, I would suggest putting a surge protector before the transformer, and then adding a surge protected power strip out of the transformer.
Had a bad experience once, went to turn on the computer via the surge protector, and had nice sparks shoot out of the surge protector, which saved the computer, but ended up having to buy a new transformer, and they weren't cheap then (I have no idea how much they cost now a days).
That's when I realized I could run the computer and monitor off of 220. Which saved me from having to buy a larger sized transformer.
Thu 03 Jul | Philip Dickerson | Regarding the surge protector, make sure it's for the appropriate voltage on either side of the transformer. A surge protector power strip designed for 110V, if plugged into 240V, will see the 240V as a major 'surge' and will short out in an attempt to 'protect' the equipment plugged into it and will blow the fuse or trip the breaker for the power line. A surge protector designed for 240V will provide no real protection at all on a 110V line.
Fri 04 Jul | Stephen Jones | You should be pretty safe with the power supply in the UK; it's one of the cleanest in the world.
In Saudi you get all kinds of voltages. I just get a couple of boxes for $40 which take about 500W and have a couple of outlets for each voltage.
I you're going to be shipping cargo over anyway it's worth it. Otherwise I'd say not. Most of the savings are VAT savings anyway. You might also think about shipping over the bits and then buying a case and monitor in the UK. Doubt if it would be worth it though.
Ok, I need serious helpful answers. I have been suffering with Bob Noxious noisy music for several weeks now. I have a box of ear plugs in my desk, but it is so much nicer not wearing them. One of Bobs speakers is pointed directly at me (though the partitions).
Im in a bad mood today and as soon as he turns it on Im going to feel like saying things I would regret afterwards.
Its possible that Im the only one able to hear it. I have tried listening from inside my neighbors cubicles, and have asked them to listen from mine. They agree its pretty loud from here. The bosss office is nearby also, but the sound might not travel in his direction. He knows Ive been wearing ear plugs but has not asked why.
I already complained about smoke several months ago, so I dont feel ready to complain and make a big deal about something else. Especially if it only affects me.
On the other hand, I think its ridiculous that I have to be subjected to distracting noise for no reason.
Wed 02 Jul | Marc | Time for some wire snips. :)
You really do have to say something if it is effecting you work. Otherwise you look like a bad programmer rather than a distracted programmer.
And smoke in the office? I assume you are not in the US then. I'm a smoker and even I would go ape if someone was smoking while I tried to work.
Wed 02 Jul | The Real PC | I'm in the US. But this office is so backwards they had a smoking room until 2 years ago (the day before I started, by chance).
Then the smokers started congregating right outside the IT department door. The smoke drifted in and everyone had to breath it all day, and we had to hold our breath while going in or out. I mentioned it to 2 managers and they said yes it's terrible everyone hates it, we're working on a solution. Months later they had held several meetings about it but the smokers were still out there happily smoking.
Finally I decided to put a sign on the door. In 5 minutes it was taken down by the facilities guy. The IT director put it back up and initialed it, and spoke to the smokers. They had one more meeting, and since then there has been no smoking outside the IT door.
Wed 02 Jul | constructive comment | _buy_ him some earphones.
Wed 02 Jul | The Real PC | That might work. But I suspect his reason for not wearing them is that he prefers not to, and he has none of the normal social instincts that would make you consider what others prefer.
Wed 02 Jul | mackinac | It is management's responsibility to provide a productive workspace. Playing music or any kind of radio through a speaker is something that shouldn't be allowed at all, even if you have private offices. Unfortunately, most employers don't do well at this. In any case, you need to determine the attitude of management. The most appropriate thing to do would be to discuss the situation with your manager. Don't just complain that BN's music is too loud. Instead ask about workspace noise policies and ask why they allow speakers anywhere in the office. The only appropriate policy for speakers is the same as for smoking.
The longer term solution is to find another employer. This is not a good time to find a new job, but it is probably a good time to start looking. It may take quite a few months to find what you want. The ideal employer may not exist, but there are a very small number that stand out as distinctly better than the typical cubeland employer.
Wed 02 Jul | TheWeasel | < evil >
When Bob's away, put his music on pause, but turn the volume up to full.
< / evil >
Wed 02 Jul | Joe Blandy | 'I was told that I could listen to the radio at a reasonable volume...'
Wed 02 Jul | The Real PC | [The longer term solution is to find another employer. ]
It's hard to imagine anyone quitting a job because of a problem like this. Another place might be annoying in some other way. And you can't tell just from having an interview.
I liked this place, and still do, because of the somewhat academic environment, which lacks the hysterical pressure of what I imagine is your typical IT department in a private company.
The lack of rigid rules leads some individuals to take advantage. Life isn't perfect, and was never meant to be.
Wed 02 Jul | Contrary Mary | One thing they do make, but I have never seen in an office, is speakers that hang from the ceiling, with a clear plastic hemi-sphere attached. The sound is focused downward, with remarkably little out-of-zone bleed. The person under the bubble doesn't need to wear headphones, nobody else is bothered.
My father-in-law is deaf-ish, hates earphones. The dish above his TV-watching chair helped save a 40-year marriage.
But short term, I'd ask vaguely what the music policy is. If there isn't one, try to get one going. Or, figure out what your most productive time is, and ask Mr. Noisy to avoid playing music then.
Sample patter: 'Mr. Noisy, normally I don't mind your music, but before lunch I tend to get into a zone where it's interfering with my work. Would you mind keeping it down in the morning.'
Wed 02 Jul | The Real PC | I don't see why or how I could figure out my most productive time. Ideally, I would be able to concentrate at any time, not just before Bob comes in, after he leaves, or when he's at a meeting.
I was very surprised when he started playing music. Maybe it was because he was moved from an office to a cubicle -- the only reason he had an office was that he's noisy, but eventually they needed office space for managers. Maybe he's trying to teach them a lesson for taking away his private office.
But I can't imagine why I should have to settle for a peace and quiet only part of the day.
By the way, it doesn't bother me at all if I hear people talking and I don't expect perfect quiet. This music is incredibly annoying to me.
Wed 02 Jul | Mike McNertney | Have you talked with Bob about this? It's possible he doesn't even know that it is bothering anyone. Personally if I were in his position and you did something like go to the manager before talking to me I'd be rather upset.
Now if you've asked him to turn off/down the music before and he hasn't done it, then it is time for more drastic action
Wed 02 Jul | The Real PC | I spoke to him a while ago, maybe 2 months. He didn't seem to give a darn if it bothers anyone. If you knew him you would understand. At meetings he might bang a pen rythmically on the edge of the table.
I can't imagine any IT department where anyone can play whatever music they want.
Oh, that gives me an idea. What if I start playing music? Then when people start complaining I'll say it's just to drown out Bob's music.
Wed 02 Jul | HmMm | Isn't IT wonderful?
On one hand you've got the folks who are essentially hermits. And on the other hand you've got the folks who would suffer than rock the boat.... ;-)
I think you just need to say something to him again. If it doesn't work, play some music of your own at an unreasonable volume. Your turn to be the @$$hole ;-) It's the only way to go if diplomacy fails.
Wed 02 Jul | www.marktaw.com | > with a clear plastic hemi-sphere attached
A parabolic bowl.
Wed 02 Jul | The Real PC | I told him it was bothering me and he offerred to turn it down. I said if he can hear it so can I, because I'm very close. I said I can't think when his music is on. He turned it down a bit.
Tomorrow is blue grass day! I'm bringing in my CDs!
Wed 02 Jul | Gustavo W. | Well, you have four options:
1. You can be a grown-up and speak to him about it. Maybe get him to point the speaker into someone else's cubicle, whatever...
2. You can be a pain, and speak to his boss.
3. You can be vindictive, and play your own music until someone institutes a strict headphone policy. Perhaps Johnny Cash's version of 'I won't back down' over and over again... or 'Bridge Over Troubled Water'!
4. You can quietly suffer.
I'd go for #3, but that's just me. (In fact, I have gone for #3 in the past, and it worked)
Wed 02 Jul | www.marktaw.com | > I'd go for #3, but that's just me.
Don't forget singing along.
Seriously though, he might not like headphones, but he really should be able to deal with headphones in the work environment. Offer to buy him a nice set of headphones if he promises to use them.
The Sony MDR-7506 is a good closed set (i.e. sound doesn't leak in or out) that sounds good and runs around $100. For a $100 pair of headphones, I'd be kind to my cubicle neighbor. Or if, as you may have said before, he's paranoid of not being able to hear around him, the Grado SR80 runs around the same price (and the SR40 and 60 are cheaper). When I put my SR80's on I hear no difference in the noise around me, no muffling whatsoever.
Wed 02 Jul | The Real PC | You would really spend $100 to buy headphones for someone just because they are inconsiderate and annoying? If I'm going to spend $100 on a gift I would rather spend it on someone I like who has been nice to me.
Maybe I'm just mean.
Wed 02 Jul | www.marktaw.com | How about $40
http://froogle.google.com/froogle?q=grado+sr40
I would consider it an act of good will.
Obviously you've all read 'How to Lose Friends and Alienate People' and have taken it's lessons to heart.
Wed 02 Jul | The Real PC | I'm not being inconsderate and alienating people. I'm not doing anything to bother anyone.
If I spent $100 on him do you think that would make him considerate?
Anyway he has headphones.
Wed 02 Jul | www.marktaw.com | Not you, the other posters here with the malicious ideas.
Wed 02 Jul | The Real PC | I think it's malicious to play music in an office even if you know it's bothering someone. I told him it's preventing me from thinking, and then I said 'but that probably doesn't matter.' Either he agrees that it doesn't matter if I can think or not, or it just doesn't matter to him.
Now I have to decide if I should speak to the boss. Obviously he can't hear it or doesn't mind, or he would have done something already. If it turns out the boss doesn't care if I can think or not, then I guess I shouldn't be here anyway.
I can use ear plugs but I get tired of that all day every day.
Wed 02 Jul | www.marktaw.com | > If I spent $100 on him do you think that would make him considerate?
There are too many variables to say definately, mostly involving your presentation & his level of paranoia. If he thinks you're doing it just to get him to stay quiet (damnit!) then he'll resent the gift.
If you can swing 'Hey, I know you like music, and I heard these were good headphones. I'm hoping we can come to some sort of comprimise where you use these, which are probably better than your computer speakers, and I get to sit in quiet,' then it might work.
It comes off as even less self-serving if you can do it for an event, like his birthday, or a holiday he celebrates, and his isn't the only 'gift' you have, but at this point we're getting silly with the money spending.
Wed 02 Jul | www.marktaw.com | Have you tried headphones of your own with some music you're not opposed to? Maybe just some pink noise type stuff like 'rainforest sounds' or 'ocean waves' if you can't concentrate with the music.
There's also the possibility that what's annoying you is his attitude and not the music - when you hear the music is it the music that makes you annoyed, or the fact that he's still listening to it? I.e. if a car in the street passed with the same music, would it also distract you?
Wed 02 Jul | Martha | Given that (a) you've talked to him already, (b) the problem still exists, and (c) it bothers you enough that you've brought it up on JOS twice now, it looks to me like it's well past time to involve your and/or his supervisor. Never mind that you've spoken up about the smoking before. Never mind not wanting to rock the boat or look like a complainer. It bothers you, and prevents you from doing your work (obviously, because you're posting here ), so it needs to be resolved.
Wed 02 Jul | The Real PC | [if a car in the street passed with the same music, would it also distract you?]
Yes it would. I would be glad after the car passed, and that I didn't have to listen to it all day.
On the other hand, his attitude also bothers me. Also the fact that I can't get away from it, also the fact that no one cares, and that I hardly got any work done today.
My boss was busy with other things and didn't notice how much I did. Otherwise I could have been in trouble. And I hate it when I can't get anything done, not just because I'm afraid of getting in trouble. I hate being at work and wasting the whole day and having all the work pile up for the next day.
Wed 02 Jul | www.marktaw.com | It's always better to be busy than to be idle.
Try asking him one more time, and then telling him you're going to go to the boss about it, and then do it.
Wed 02 Jul | The Real PC | [It's always better to be busy than to be idle.]
No, not always. But it sucks to get nothing done when you're getting paid and you need the job. And it sucks to be idle when you're listening to music you hate.
There is nothing wrong with being idle when you have a chance to relax and do not have a list of things that are supposed to be finished some day. I am not here to avoid being idle -- I have no trouble finding things to do and if I didn't have to be here I would be doing something. But I have to be here (I guess) and I have to get things done and today was wasted.
Wed 02 Jul | Philo | 1) Ask him to please keep it down or buy some headphones.
2) Ask him would he please keep his music down or buy some headphones
3) Headphones are only $15 at Best Buy - would you please go buy some?
4) Spend $8:
http://www.fogdog.com/product/index.jsp?productId=841303
I'm absolutely serious. If he's going to act like a rodent, treat him like one. Mind you, this takes some judgement on your part - will your boss and coworkers laugh? If so, go for it. And keep doing it until he gets the point.
Philo
Wed 02 Jul | Sammy | What had worked for me in these situations is finding a conference room and working there. Inevitably someone asks what I'm doing there. The secret is that it makes me seem like I'm doing whatever it takes to get my job done, even inconveniencing myself to not make any waves. Of course I have to explain it in a logical 'What can I do?' tone. With the teeniest hint of passive-aggressiveness.
This might not lead to change, but it sets people up to be understanding if I start complaining. People like saying, 'Well, Sammy's been putting up with it for a while I guess.' I think technical people act too discretely, when our actions should be more continuous.
Wed 02 Jul | FullNameRequired | 'I told him it's preventing me from thinking, and then I said 'but that probably doesn't matter.''
you told him that you had a problem and _then_ told him that it didn't matter?
for gods sakes talk to the lad and tell him that you cannot think because of his music and that it _does_ matter and that you would like him to use headphones or turn the music off please.
be polite, firm and be willing to get angry if necessary.
sometimes confrontation isn't a terrible thing....if you were one of my employees and you told me what you have told us Id tell you to grow up and deal with him yourself....if he _then_ refused to respond I might consider getting involved, but until you actually tell him you have a problem and it does matter I personally would consider you to be a helpless wimp of a person who is not worth keeping around.
if you cant handle that small level of confrontation, how would you deal with something important? like telling me the truth about schedules, or how easy/hard it would be to implement a feature, or how long something would take or anything that you are scared I might respond badly too.
employees that are scared of confrontation waste my time and their own.....how many months and you have not yet actually told him to _stop playing music please_?
Wed 02 Jul | The Real PC | When I told Bob Noxious his music prevents me from thinking, but that doesn't really matter, that was supposed to be interpreted as sarcastic repressed rage.
I'm not afraid of confronting anyone. But my boss has told me I'm supposed to talk to him about problems. Since I already complained about smoke this year I was hoping I could reason with Bob and not have to bother my boss.
And although I'm not afraid of anyone I don't like working in an office where people hate me, so I try to be on good, or at least not bad, terms with everyone.
I spent the whole day trying to figure out if the music was really intolerable or was I in a less tolerant mood and easily distracted. But the feeling of relief and relaxation that comes over me the minute the music stops is a sign that it really is bad. Of course it's worse if I'm in a tired and distracted mood to begin with. But once I get started I'm usually fine -- but not today. The music -- which sounded like pots and pans banging (not loud, but very insistent) just blocked my concentration every time it got started.
Wed 02 Jul | FullNameRequired | 'that was supposed to be interpreted as sarcastic repressed rage.'
so maybe he is a person who misses sarcasm....I have known them.
Instead of being so passive-aggressive, why not try using a non-sarcastic, unrepressed direct request.
If that fails, move up to non-sarcastic, unrepressed anger.
If _that_ fails take it to your boss.
anything less than that process is a waste of everyones time and amounts to you sitting around whinging to yourself _but not telling anyone direectly that something is bothering you)
Wed 02 Jul | Rob | I agree wholeheartedly with FullNameRequired.
Except I wouldn't say 'please'.
By the way, you may be suprised how much respect people gain for you when you hold them to account when they've done something wrong.
For example, one guy I worked with was despised by everyone because he was very difficult to work with and he had a long history of antagonizing people. Including me.
One day he willfully messed up something I was working on, and I strode over to his cubicle and yelled a long and extremely abusive instruction to never do that again (I will not repeat it here, what with it being a family forum and all). He never, ever bothered me again - in fact it's quite possible that I was the only guy at work that he actually showed any deference to after that.
Of course, such tactics should be used sparingly and only on the thoroughly deserving.
Wed 02 Jul | The Real PC | I don't think he's trying to be mean, just stupid and self-centered.
I thought about sending this email to my boss tomorrow. Does it sound too angry or sarcastic?
Is there any chance that I can move? I am
closer to Bob Noxious than anyone else
and I sometimes find his music
distracting.
(He does not want to use headphones).
I didn't want to complain and have tried
ear plugs. I'm not usually bothered by
noise, but there is something about this
music that interferes with my ability
to concentrate, especially since it's on
all day every day. If I complain he
turns it down but I can hear it almost
as well as he can, because I'm so close.
Maybe there is someone who wouldn't
mind listening to Bob's music all the
time.
Wed 02 Jul | FullNameRequired | wow, talk about passive/aggressive.
makes me want to kick you myself :)
If I received that particular email from an employee the first thing Id ask you is whether you had approached the man directly.
Youd say yes, I implied that I was unhappy and would like him to change his habit, but he ignored me.
Id ask exactly what you said to him.
Youd tell me what you've told us.
Id tell you to approach him directly and never to imply anything again.
You wouldn't because you obviously dont have the balls.
You would go on being unhappy, and would develop an attitude problem. (because I hadn't helped you)
Id get fed up and fire you.
The entire office would breath a sigh of relief and beg me to get someone who actually says what they mean and doesn't deal in subtleties, innuendo, implications and 'complaining to the boss'
If _you_ do not care enough about this problem to attempt to deal with it directly, why should anyone else?
Wed 02 Jul | Miss Manners | marktaw, would you be willing to buy the $100 headphones for Real PC to give to Bob? That would be real neighborly of you.
Wed 02 Jul | Dennis Atkins | FullnameRequired is totally completely right. And I might say that FullNameRequired is a boss worth working for.
Real PC, stop being such a whiney wuss. Grow some testicles for goodness sake. Confronting people is just part of life. There is no reason for this to go on month after month.
Tell Bob, 'Bob, the music bothers me.' [Not *sometimes* bothers you, but *bothers* you. Don't be so darn wishy washy.] 'Bob, I need for you to stop playing music through speakers. Use headphones if you must, but no more with the speakers. OK?'
At this point the only acceptable answer is, 'Gosh PC, I didn't realize that. I will start using headphones right away.' If he later 'forgets', then remind him, 'Bob, you agreed not to use the speakers any more. Is there a problem?'
If at this point he won't do anything, then go to the boss: 'Boss, Bob's music drives me to distraction. He needs to wear headphones, or one of us needs to get a private office or move to a different cubicle so I can concentrate on finishing project X. I told him to stop using the speakers and he point blank refused. What can you do to help me out here so I can get my work done?'
At this point, Boss will solve the problem. If he doesn't then you have these options:
1. 'Boss, I switched my cubicle last night with Sue. Sue, you like music doncha?'
2. 'Boss, I moved your stuff into my cubicle and I'm taking your office since you like Bob's music so much.'
3. 'Boss, I'm resigning and moving to greener pastures where I can get some work done.'
4. 'Boss, I'm filing a disability claim with the state - my psychiatrist says bob's music has driven bme into a state of endo-cerebral apoplexy and I will never be fit to work again. You'll be recieving a letter from the Law Offices of Shaftim and Howe requesting a settlement for Mental Anguish at the hands of an abusive corporation.'
Thu 03 Jul | www.marktaw.com | I agree with Dennis, which means I agree with FullNameRequired.
If this guy were my neighbor, I don't think it would've gotten to this point, and now I'm not going to buy Real PC $100 headphones to give to his neighbor that he's not dealing with. I think Real PC and a lot of the people posting to this thread are passive/aggressive.
Thu 03 Jul | Philo | Nobody like my idea? I don't think it's passive/aggressive...
Philo
Thu 03 Jul | FullNameRequired | hi philo,
'1) Ask him to please keep it down or buy some headphones.'
thats a good one :)
2) Ask him would he please keep his music down or buy some headphones
a good alternate plan, Id try this before (1) personally..
3) Headphones are only $15 at Best Buy - would you please go buy some?
this would be worth trying.....prolly, as you have suggested, after the first 2/
4) Spend $8:
http://www.fogdog.com/product/index.jsp?productId=841303
smacks of genius :)
the only problem would be that the other chappie apparently has a higher noise tolerance anyway......my grandpa would have said
(if he had been living in texas instead of new zealand and had ever heard of porcupines)
'never get into an ass-kicking competition with a porcupine'
Thu 03 Jul | Sammy | Passive aggressive, no way! ;P
I had to go thru politics for a while, and I think I learned alot. I absolutely Refuse to do that again, but it made me more complete, and the subject is entertaining now. Real PC is in a very political situation and a little passive aggression is how I'd handle it because it's Useful. I don't think it plays to his/her strengths, but it's just my opinion.
Plus, I kinda liked working in conference rooms. Laptops, VNC, wireless... I just sort of treated politics as another problem to solve patiently. Now, it killed my productivity, but that's what happens.
Thu 03 Jul | The Real PC | I'm the only one it bothers (because I am much closer than anyone else). It's outrageous for anyone to play rock music in an IT office. If my boss wants me to work efficiently (and that's the big question) he will simply tell Bob shut off the music and that will be the end of the problem.
I might be passive/aggessive, I don't know. I am extremely angry but for obvious reasons I can't have a temper tantrum at work. Why am I so angry? Because I like to feel I'm doing a good job, it's very important to me. I think my boss can sympathize with that, because he should want me to do a good job also.
What I don't understand is why my boss has not already figured this out. Although he might not hear the music inside his office he walks right past it all the time.
But people don't waste energy trying to figure out what might be bothering someone else. Why should they? That's why I think I should let him know.
I tried reasoning with Bob twice. Almost anyone on earth would have immediately stopped playing music if they even suspected it bothered anyone. Maybe I wasn't direct enough with him but I think I stated the facts. I can hear your music, even if you turn it down, and it bothers me. I don't have any authority over him so I don't see any way I can force him to do anything.
I'm not asking my boss to tell Bob to shut off the music (but I'm pretty sure he will). I'm just asking him if I can move.
Thu 03 Jul | Better than being unemployed... | Either The Real PC is caught in a very nasty case of office politics, or his social skills need brushing up a bit.
A few weeks ago, our neighbours started playing loud music at 4am. I went round there and politely told them that I was trying to get some sleep. I also mentioned that I used to play loud music when I was at college, and I didn't actually mind their music per se, just the hour of day the chose to play it. They stopped.
I think your problem is you feel the only way you can express your opinion is to have an argument about it. Perhaps you're normally introverted and don't like confrontations from people, particularly since you feel more comfortable ranting on about the problems with your coworkers on this board.
Do you think Bob is smarter than you? Is he more experienced? Do you think he's the boss' pet employee? Honestly, people are not _all_ thugs - it's just a question of getting through to them on their wavelength. If you can't do it yourself, you'll need to get somebody to do it for you, and it doesn't look like there is anyone.
Have you tried asking the people around you if they're fed up with the loud music? If they are then maybe you can all club together on this issue, which will probably make it more likely for one of you to take some action. Unless you just turn into a group of introverted developers whinging, which isn't altogether impossible.
I wonder if Bob's introverted too and choses loud music as a way of closing off from the rest of the world?
Thu 03 Jul | The Real PC | I already explained that I am MUCH closer, geographically, to Bob's cubicle than anyone else. I will not be able to organize a group.
Bob is not smarter or more valued than I am. He is known for being loud and obnoxious, and that's why he used to have a private office (as I explained above).
I am sort of introverted. I want to be appreciated for my intelligence and hard work, not my schmooze skills. On the other hand, I'm probably known for being nice and somewhat friendly. As as for politics, I absolutely suck at it.
Why do I rant at this board? Because you don't know who I am or where I work. It's better than kicking the cat (I don't have a cat anyway).
Thu 03 Jul | Better than being unemployed... | What sort of 'IT' work do you? Development? Test? Repairing PCs and the phones? Clearly nothing customer facing, as nobody would tolerate loud music there?
It may be that Bob considers it perfectly normal to have loud music in his work environment, particuarly if he's just out of college. Additionally, he might be annoyed that his ruse to get an office by playing loud music all the time has now backfired because he's been kicked out and put in a cubicle, and hence is quite happy to rip anyone's head off who dares question his environment.
You'll never know for sure unless you get both of your feelings out in the open, though. You can be as nice and helpful as possible, but there's always going to be people who completely disagree with you.
Thu 03 Jul | Just me (Sir to you) | Find help
http://www.nonoise.org/
Thu 03 Jul | The Real PC | Bob is in his 60s at least.
We are programmers and the department was reorganized last winter so the programmer/developers would have a quiet area. Bob was kicked out of his office to make room for a new manager. He's only been here about 5 years.
Thu 03 Jul | www.marktaw.com | Hmmm. Friendly, wants to be known for his intelligence, doesn't confront challenges immediately... You sound like me, Real PC. You have to learn to confront challenges, and ask for what you want without being so demure people don't take you seriously, that was one of the lessons I had to learn in life. People aren't going to recognize some inner quality if you keep quiet about it all the time, and people aren't going to be able to intuit what you want.
Plenty of people have said to me 'I'm not psychic, how am I supposed to know what you want?' so I'm guessing that's how people feel about you too.
Thu 03 Jul | Gustavo W. | 'Obviously you've all read 'How to Lose Friends and Alienate People' and have taken it's lessons to heart.'
I *love* that book! A friend gave it to me for my birthday a while back.
I haven't heard from her in a while... you don't suppose there was some kind of message there, do you?
Thu 03 Jul | mackinac | >>> We are programmers and the department was reorganized last winter so the programmer/developers would have a quiet area. <<<
So management had a good idea at least. Now the implementation is broken; the work area is not quiet. You know about it, but instead of informing management of a problem, you just post to JOS to complain about it.
Fri 04 Jul | The Real PC | [instead of informing management of a problem, you just post to JOS to complain about it.]
No, the idea is to post to JOS to release most of the anger, and then speak to management once I have calmed down and can be rational. That's one of the ways I use forums like this -- is that ok? You can ignore my posts if you want. I spend less time boring friends with the problem, and by the time I speak to management I have thought enough about it and have heard some other opinions.
Fri 04 Jul | Must be a manager | Real PC, sounds like you're caught in the crossfire of a battle between Bob and the manager. Your manager probably wonders how you can stand the loud music.
The problem isn't yours to solve; it's for your manager. You don't have authority to do the necessary negotiation and make the necessary changes.
What you need to do is tell your manager there's a big problem, and don't be backward about it. He knows all about it. Don't, however, blame Bob, who is getting stuffed around here too. Just say you can't do any work with all the noise. Full stop. Fix it.
With Bob, you should see him as a fellow traveller, and try to talk to him about his problem - the uppity junior manager who stole his office. Have coffee with Bob. Share his concerns about idiot managers.
Bob might even respect your proximity as a result of this, but in any case, you won't feel so put upon if Bob is a colleague, and I would say that's what he is.
Good luck, Real PC.
Fri 04 Jul | The Real PC | [the uppity junior manager who stole his office. Have coffee with Bob. Share his concerns about idiot managers.]
Oh no that's not how it is at all! I do not feel any alliance with Bob against the managers.
They gave him an office originally because his neighbors couldn't stand all the noise. It was ridiculous for him to have an office while a hard-working and motivated manager who needed an office had a cubicle instead.
If I sympathized with Bob against the managers I would be lying. They were absolutely right to take his office. He shows no signs of motivation or caring about work and now I know he doesn't care much about people either.
Fri 04 Jul | Sam Livingston-Gray | From what you've said, Bob doesn't give a damn about anybody else. Therefore, communication that leaves Bob any wiggle room whatsoever will have no effect, as you've already discovered. Sarcasm only works on people who (a) can detect it (I often can't), and (b) care. Otherwise, it falls on (sorry, can't resist the pun) deaf ears. Buying him headphones also falls into this category, because he can just find something wrong with them and stick them in a drawer -- and get the added satisfaction of wasting your money in the process. Basically, he's free to ignore the message because the way it gets delivered leaves an open question as to whether you had a message at all.
However, air horns (much as I like them, and have a rechargeable one on both of my bicycles) won't solve the problem (and will probably make things worse due to the 'splash damage' inflicted on everyone within 100 feet), nor will yelling, brandishing sticks or katanas, 'growing testicles' (and thank you, whoever said that, for the lovely dose of sexism!), destroying his equipment, or generally carrying on cranky. This kind of message also has two components: message ('leave the speakers off') and noise ('do what I want or I'll hurt you.') Again, Bob is free to ignore the message, but this time because you delivered it in a threatening way -- and worse, he now has further ammunition against you, which could get you in trouble with HR.
Essentially, you have to deliver the message by itself, as simply and directly as possible. Identify the behavior, state why it causes a problem, and present a solution. 'Hi. Your music keeps me from doing my job. Please use headphones.' Then -- and this is the important part -- STOP TALKING. Further embellishment is not necessary.
Think of it as a continuum, and stick to the middle:
passive-aggressiveness < assertiveness < aggressiveness
If that doesn't work, deliver the same message (change the pronouns, of course) to your boss. You could add, to your boss, that you didn't want to complain because you felt like you'd already rocked the boat with the smoking, but make sure you follow this statement with 'but that didn't work, and my work is suffering because of it.' Otherwise you get sidetracked into rehashing the smoking debate, which in all likelihood, your boss has forgotten about.
Fri 04 Jul | Must be a manager | Real PC, OK. It's still a problem for your manager, though. You won't be able to fix it. I think this advice needs to go to your manager.
It sounds like Bob may have enjoyed some sort of implied privilege as a result of his age and, to be honest, I don't that is wrong. I imagine it is the junior manager who has asserted a demand to that space, and that's what Bob is complaining about.
Fri 04 Jul | The Real PC | [I imagine it is the junior manager who has asserted a demand to that space, and that's what Bob is complaining about.]
No, that's not what happened. When I said 'new' manager I did not mean junior manager. Bob's only qualification for having an office was that he is obnoxious and noisy and inconsiderate. The new manager needed an office.
How much sense does it make to go for one ? Does anyone have any experience in working for CMM certified software companies ? what are the pros and cons ?
Wed 02 Jul | Matt H. |
Read 'PeopleWare' (2nd ed) for a good discussion of CMM.
It's also Recommend 'Successful Software Development' by Donaldson/Siegel.
Finally, you could check out Joel's Article on McDonalds Vs. The Naked Chef: http://www.joelonsoftware.com/articles/fog0000000024.html
In a nutshell:
PRO:
-- CMM forces you to have process maturity. That means things like Hungarian Notation, Code Review, Specs before you write a design document, design docs before you write a schedule, automated check-ins, testers, defect tracking software, etc. (In other words, it's a super-dooper version of the Joel Test: http://www.joelonsoftware.com/articles/fog0000000043.html)
-- Strict Adherence to standards means that if person X leaves the company or gets hit by a car, you can recover. In this sense, CMM moves the relying on Heroics and Good Management to relying on process.
-- Process can make a medicore programmer good, a good programmer excellent, and an excellent programmer great.
CON:
-- CMM certification often involves trying to do the same thing, the same way, over and over again, and getting good at it. As a result, you tend to work on an ever-shrinking niche Market. As a result, YES, sure, your estimates get more accurate: But only because you're doing the same thing, over and over again. Tom DeMarco stipulates that if you're doing CMM, the best project to do may be the one that threatens to move you DOWN the CMM ladder.
Comments:
From what I've seen, CMM level 2 is a lot like ISO 9000 - document everything, do it for a year, then bring in an auditing group to show that you've documented your processes. (Level 2 is 'managed' - basically, 'we do stuff a certain way, but we don't know why. When a real crisis happens, we will revert to what we did before.)
Level 3 involves steering. You take pains to figure out what is happening and correct it before it becomes a crisis. Level 3 companies know the policy, and can understand -why- the process is in place.
Level 4 is about Measuring. NOT just KLOCs (Measuring by KLOC is tragic and deceptive), it's things like PSP (personal software process), defect rates per KLOC, expected defects, function points, etc. With level 4, you can predict things. (Again, only if you don't expect much to change. Throw in a new database, new programming language, move to the web, whatever ... your carefully collected data becomes allmost meaningless.)
Level 5 is optimizing. At level 5, you know why you put the measurements in place, and are getting better and better at it every day. You have a process to change your process.
I hope that helps. For a good discussion of the levels/patterns, I'd check out 'Quality Software Management Volume I: Systems thinking' by Gerald Weinberg.
good luck!
Wed 02 Jul | JasonB | From my experience, the journey is far more important than the destination when it comes to CMM. Granted, after that much time and money invested, your boss is probably going to want something to show for it, but the changes to company culture and practice are what really matter.
If you're a small firm, I'd say following best practice concepts are better than the overhead generated by CMM. You get more bang for the buck, as it were. Large companies need the structure and focus CMM provides. Again, just remember that the point isn't to get certified, it's to write better software more efficiently.
jason
Wed 02 Jul | Timmy | And then there is level 6 - a process for modifying the process for changing the process.
Wed 02 Jul | ! | In general, it doesn't make a great deal of sense to go for the certification unless you have a client base that requires it. Military or aviation projects often fall into this group but the group of people who demand to see the word certification is growing.
Actually following the steps laid out to work your way through the CMM steps is something that I would recommend. So far, I have only been on a team audited to level 3, but we did see a marked decrease in the number and scope of crises we dealt with.
That said, the certification just a piece of paper you can wave at a client. The process you develop is the important thing.
Wed 02 Jul | | CMM certification is a way for large corporations to attempt to emulate the type of quality of the best developers, even though they don't have them.
It should never be seen as a substitute for actually having those best developers, and in many ways it's a pointer that the company doesn't have them.
Wed 02 Jul | BC | Our company is certified CMM Level 2, and will probably be Level 3 next year. The funny part is that we in the trenches got to know about the Level 2 stuff only after we were actually certified. Like, 'What's CMM???' It has to be said we've been certified ISO 9000 for many years though.
Wed 02 Jul | Nick Brosnahan | Don't assume that CMM is always a 'Very Good Thing'.
Check out this article:
http://www.satisfice.com/articles/cmm.htm
Fri 04 Jul | . | 'How much sense does it make to go for one ?'
How much business will you lose if you don't?
Im on an intranet project written in C# that uses Oracle 8i for a backend. Weve got a test DB server and a production DB server.
Although all of our C# code is neatly tucked away in SourceSafe, we manage all of our stored procedures and database scripts with TOAD. Id like to bring all of the database scripts and packages into SourceSafe and deploy them in the same manner in which we roll out our code.
Currently, if we ALTER a table on the test server, when it comes time to load production, we simply make the same change through TOAD on the production server. (Ack! Major possibility of screwing that up!) For stored procedures, we pretty much copy and paste the package from the test box to production.
I cant just re-run the DDL scripts since that will DROP the tables and all of the data. So how can I put my DDL under version control and deploy it in a safe manner?
For the stored procs, I guess I can just drop those into SourceSafe and then just re-create them on production each time we deploy. But is there a better way?
Any hints or suggestions on how to clean up the way that we handle database changes?
Tue 01 Jul | eclectic_echidna | I forget what it is called, but there is a product that you find that will do a diff between two databases.
Do the diff, and generate a script.
Make multiple databases on the test server that are copies of the current production data. Run the diff_script and check for bugs. repeat, test, test, test.
Once you are confident, backup up production, run the script on production, push your app, execute your acceptance test, and get some Coors.
--
ee
Tue 01 Jul | Daniel Shchyokin | you can do a diff in tables with reports from microsoft access
Tue 01 Jul | Adam Young | Oracle Has a better tool for revision control. Checkout their site. I think it is something like Oracle Version Manager.
Tue 01 Jul | Philo | Does TOAD have an option to script changes? If not, then I'd have to recommend that you make all your changes via script. Run the script on the test server. If it does what you want, commit the script to VSS.
This is what you should be doing anyway, yes? Otherwise you're doing something different to production (running a script) than you did in dev (fiddling with a GUI)
Philo
Tue 01 Jul | deja vu | TOAD (the professional version) has a 'schema compare' option which works well. It compares two schemas and generates a diff script which can then be run on the production server.
If you're using the free version, a little more discipline might be required. Simply start from a point in time, commit the full structure SQL and stored procedures to CVS. Next time you make any sort of change, export the structures the same way and do a diff to find out the differences, then apply those changes to production.
Of course, if you're in the mind to write some (not a lot) PL/SQL and more importantly, if you're willing to upgrade to Oracle 9i, consider DBMS_REDEFINITION.. Does what you need, with the additional benefit of not needing to take the database down before you redefine tables. The problem with using diff scripts is that if someone is actually querying (inserting into) a particular table, you cannot run an ALTER table script on it. For a 24/7 operation, DBMS_REDEFINITION is essential.
Fri 04 Jul | Patrik | TOAD has a function that lets you check in/out stuff in SourceSafe, it can be turned on in the Options. Just point out the path to your VSS installation and TOAD reads it.
However, when I tried it the browser for the VSS projects were kindof sucky.
Another good essay from Clay Shirky. This time he talks about scaling social software, a subject close to my heart.
Read it at http://www.shirky.com/writings/group_enemy.html
Now how does JoS look when seen in this light?
Tue 01 Jul | eclectic_echidna | '...nothing causes a group to galvanize like an external enemy. '
I would submit to you that our external enemy is bad software and the people who cause it.
Joel and Fog Creek are the internal heros.
--
ee
Tue 01 Jul | Johnny Bravo | What I liked most about the essay is the description of that Hongkong-Tokyo music-on-harddrives trading community, where your handle is linked to your sponsor's handle once you have joined it. Sounds much like the mafia's system, but anyway it sure works.
Tue 01 Jul | Brent P. Newhall | I was most struck by this statement: 'The user of social software is the group, and ease of use should be for the group. If the ease of use is only calculated from the user's point of view, it will be difficult to defend the group from the group [and] its own worst enemy style attacks from within.'
I think Shirky makes excellent points. Very much worth thinking about.
Tue 01 Jul | www.marktaw.com | Interesting how he talks about reputation and name recognition... JOS does so little to enhance name recognition - no registering, no avatars... It takes a while for me to get to know people in any forum I participate in, but eventually I find myself reading through a really long boring thread and looking for the people whose posts I know are always good and just reading those.
Philo I instantly recongize becuase of Camel. Bella I recognize because Bella is so abrasive... Many of the others here a sort of wash of names, which is the same as with any group online group I've been in - the voice of the poster isn't heard when you read the post, and by the time you look at who posted it, you kinda don't get to link the two together.
So it seems to me that if each poster, like in chat or IM, was allowed to define their own font and color for regular posting, then their 'voice' would be associated with the words, and not next to or below it.
Anyway, that's my 2 cents as it pertains to forums in particular.
Tue 01 Jul | anon | I always recognize Albert Kallal's posts because of his big signature. They tend to be generally good posts too.
Tue 01 Jul | Unknown | I also can start to recognize patterns in some of the regular posters on JOS. I can usually recognize Bored Bystander's posts. They are usually lengthy and full of common sense.
You can tell (he or she) is a true veteran of software development.
Tue 01 Jul | Alyosha` | Some people are recognizable only by their signatures.
PS: You think I'm kidding. I'm not.
Wed 02 Jul | Ged Byrne | External ememies (not that I consider personally, but that I've noticed):
- Slashdot
- Dave Winer (never figured out why)
- Religous fanatics (of the software kind)
- Cringely
Worship:
- Joel told us not to worship him, so we don't. he told us that we are all our own individuals, so we are all our own individuals
- LISP
- Pragmatism
Sex:
Not sure about this one.
Wed 02 Jul | Luke Duff | A good reason to not like Dave Winer is self-important nonsense like this:
http://www.scripting.com/defaultJul29.html
Wed 02 Jul | www.marktaw.com | Reminds me of a note that was posted on the door of the video store in a small town in upstate New York that I'd see every year when I went to the Renaissance Fair.
I don't remember the wording, but I remember the tone... I'll try to reproduce it for you:
'Dear Neighbors,
After ten years of serving the community we're closing down. It seems you would rather support the corporate video stores than support your neighbors. If you still have a video and want to return it, drop it off at the convenience store next door.
Thanks for nothing,
etc. etc.'
I think Dave Winer will get a little perspective, maybe see the bigger picture in a little while. Remember, it's not really a gift if you expect something in return.
Fri 04 Jul | Entrepreneur | When my mother-in-law visits, she starts doing all this work around the house.
Essentially, it's useless stuff, like scouring pans that aren't shiny, etc. In the process, she asks lots of questions and makes lots of comments, hoping for praise, like 'I scrubbed the toilet with a toothbrush and I put the milk back in the frig'. We always thank her, even if it's not helpful, or it's just the polite thing to do.
But, then when she wants something done around OUR house, she expects us to do it, since 'she's been helping out.'
Mother-in-laws. Can't live with them. Can't have them put to sleep.
'Treat your children well.
They'll be picking your Nursing Home'
As said above: if you expect something in return, it's not a gift.
Are there any _good_ books which discuss the upcoming sharepoint 2.0? Im looking for something with general best practices for administration, as well as something that runs through how to extend sharepoint. it doesnt have to be just one book
Tue 01 Jul | Greg Hurlman | If you're talking about the upcoming Windows Sharepoint Services, it's still in beta... you're going to have a hard time finding a *good* book on it until a few months post-RTM.
Until then, Microsoft's got some documentation on their site for now:
http://download.microsoft.com/download/7/7/2/772C5A1F-207E-4F49-B47B-1DFE51CD8094/SharepointTSAdmin.chm
Fri 04 Jul | SPSGuy | Don't forget the SDK's, still in beta (and still being added to weekly) but an invaluable resource.
http://msdn.microsoft.com/library/default.asp?url=/nhp/Default.asp?contentid=28001891
Ive been searching the web, freshmeat etc. for a simple, single-user (or very small group), PHP or Perl-based app to handle contacts + calendering.
Either they were e-mail-oriented (Hord, Phorecast, etc.) or too big for what I need (Phprojekt, PHPGroupWare, etc.)
Any idea? Thx
Mon 30 Jun | Frederic Faure | Thx everyone. Although WebOrganizer is nice, I ran into bugs. Check out MoreGW which is pretty similar:
http://moregroupware.sourceforge.net/
Fri 04 Jul | tapiwa | check out http://www.hotscripts.com
there are quite a few small ones that I saw there, php, asp and perl, when I was looking for something a bit bigger.
Thu 03 Jul | Jonathan Hager | yes. It is not as good as a commercial profiler. Search for 'Xrunhprof site:java.sun.com' using google. Jack Shiraz book (http://www.amazon.com/exec/obidos/tg/detail/-/0596003773/qid=1057248137/sr=8-1/ref=sr_8_1/002-0714324-8269612?v=glance&s=books&n=507846) also has a good explanation.
Thu 03 Jul | Evgeny Goldin | Offtopic, but I'd suggest you to use JProfiler. It's an excellent tool and you can get evaluation keys every 10 days for free.
Thu 03 Jul | Daniel Shchyokin | Its a JVM option java -EProf, java -hprof etc ... had a hell of a time using it, but yes it has one
Thu 03 Jul | Brian | It's been a '-X' option in every version of the JDK I've seen. Which means that it's not 'official'. Invoke with java -Xrunhprof:cpu=samples,depth=4. I've had great success using it, but I can't compare it to the other products mentioned. However, it's free and you alread have it.
I know this has been discussed here before but the topic has dropped off the bottom already. I need opinions on reporting software, specifically with software that allows online report display similar to Crystal Reports (it has a server process that can run on or separate from a web server and a web viewer control, both COM and .NET versions).
Crystal Reports is doing all I need but designing a report that looks the way I want is an exercise in futility. A report that looks good in the report designer has chopped off fonts in the web viewer (vertically chopped off not horizontally). All they have to say on the matter are two PDFs on the subject of why its the printer drivers fault and not theirs. I have used Access reports for many years and have never ever had any problems like this even printing to different printers with different drivers. My reports would always look like how I designed them, I dont know if its possible (and easy) to display them on a web site.
The system I need has to have the abilities of Crystal Reports server and view control without all the display problems. I need to be able to embed SQL complex commands into the report, the Crystal Reports command is like a stored procedure in SQL server but allows you to put Crystal parameters into it which allows for alot of flexibility. Also the commands seem to allow full database functionality in them, due to the complexity of the queries I have I use SQL Server user-defined functions with parameters in the FROM clause of my queries and Crystal allows this. The ability to put Crystal parameters in the query allows me to put one parameter at the end of the query after the FROM clause and if I send to the parameter the query runs wide open but if I send WHERE x=1 the query runs with that WHERE clause.
As for the report designer side I would like it to be as close to Access as possible. Important features include double clicking on the side of a text control to automatically size it to the correct size for the font, a grid snap that doesnt suck and constantly unsnap controls. And one that doesnt seem to have 3 different displays of a report depending on where you view it (report designer, web viewer, printed copy). Being able to drag a control all the way to the right of the report without it snapping off the report or one grid away from the edge would be nice, and need to be able to easily move and resize multiple fields (this is not easy at all in Crystal). If you have ever designed reports in any version of Access you should know what Im talking about it is the best reporting system available its just trapped inside a desktop app. If only MS would release the reporting side of Access for VS.NET.
Another requirement is that its not too pricey. This is a small (non tech) company and the price of Crystal was about in the sweet spot (~$2000-$3000).
Thu 03 Jul | Marc | Check out ActiveReports over at www.datadynamics.com
Thu 03 Jul | Justin K. | OK that looks promising, could anyone expound about how a web application works using this system and the licensing involved. For example Crystal Reports has a full server process that handles requests from ASP or ASPX pages. The basic version will process 10 concurrent requests at a time with the 11th+ requests being dropped. The advanced version will queue the extra requests until one of the 10 connections is available.
Reading the ActiveReports web site does not say anything about a server process (this could be a good thing) or if there are any limits on connections, etc. Does your web app do all the work?
Thu 03 Jul | Justin K. | A problem with ActiveReports is that it is not a stand alone product, it requires VS.NET (which I do not have). Any comments on the report designer? A comparison with Access would be nice. Also any possiblity of having programmaticly controlled report grouping using this sytem?
Thu 03 Jul | Philo | Justin, I'm using ActiveReports to serve up Invoices as PDF's on a live application. We've got hundreds of users and we've never caught the CPU above 10% on the web server.
I feel comfortable saying that I can do *anything* with ActiveReports. They also support one of the charting components now, so you can add charts to your reports.
I have *not* used the ad-hoc reports designer, so I can't comment on that.
ActiveReports.Net is, obviously, .Net based, but they still have ActiveReports 2.0 (I don't know what languages it supports)
The evaluation is free and fully functional.
Drop me a line if you have any other questions.
Philo
Thu 03 Jul | r1ch | Talking with my non-work hat on... ;-)
For your Crystal Reports problems you don't mention what version or which viewer you are using but I had a quick look through the knowledge base and turned up this:- http://support.crystaldecisions.com/library/kbase/articles/c2012801.asp Have you tried applying the latest monthly hotfix? Have you tried the other web viewers? It sounds like you've already decided to move on to another reporting package, but I thought I'd try to help anyway.
Thu 03 Jul | Justin K. | That acutally is helpful, I guess I'm not that good a searching although their site is kind of weird. Instead of giving you a link they always tell you to go to a long URL (not linked) and then search for another word. You end up having to cut and pasting the link and then cut and pasting the word/file name. Well you have at least giving me some hope with Crystal I'll just have to try harder to find things on their site.
Thanks!
http://news.com.com/2100-1001_3-1023215.html?tag=lh
When IPO time comes for these guys - we gonna buy the shares wouldnt we? I cannot think of other private company which is so dominant and respected at the same time by software community.
Thu 03 Jul | James Ladd | Your being sarcastic right ?
Thu 03 Jul | Marc | I'd love to get in on it myself. VMWare has the best virtual PC technology, a great rep, and I believe virtual server partitioning is going to be a booming business for the next 7-10 years.
Thu 03 Jul | Yaniv | VMWare has a great product, no doubt about that. But considering the fact that Microsoft just bought Connectix, do you think VMWare's IPO going to do well? What are Wallstreet's analysts going to be thinking?
Thu 03 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | And remember that VMware provides a stellar product -- where they can. They can't emulate a PC on a mainframe, for example.
Thu 03 Jul | Marc | You are right Brad, but I'm not sure that the mainframe consumer would care even if they could run on it. I could be wrong.
As for Connectix, I don't think they will unseat VMWare for one reason; Linux. VMWare runs on both Windows & Linux and this gives them a larger market to play in.
Remember that although Microsoft has taken over markets from leading vendors before, in each case it required the leading vendor to screw up first. When they *don't* screw up, Microsoft has trouble beating them (Intuit is a primary example of this). So far VMWare is doing things right.
Microsoft could just buy VMWare of course... :-)
Thu 03 Jul | Mitch & Murray (from downtown) | I dunno .... the new V4 product has not been quite so well received among the end users. Browse the VMWare support newsgroups to get an earful. We've got it here and there were a couple of showstoppers right out of the box.
Thu 03 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | 'I'm not sure that the mainframe consumer would care even if they could run on it. I could be wrong.'
Lots and lots of IBM mainframe customers running virtual Linux would disagree. :-D
Thu 03 Jul | James Ladd | I think there are a few of you who think an IPO will do well because of the technical merrits of a product. This usually has very little to do with it. Its more about the bean counting, and less about whats in the beans.
Thu 03 Jul | Larry Prince | Marc said: 'When they *don't* screw up, Microsoft has trouble beating them (Intuit is a primary example of this).'
I agree that potential investors have to hope that VMware doesn't screw up even one time.
It should be noted that Intuit has screwed up in the past. In the early 90s, I liked Quicken so much that I would buy their latest release the minute it hit the shelves each October. (I think it was October.) Every year, it seemed, they had another cool feature that saved time, reduced errors, or displayed my data in a cool new way.
About 8 years ago I picked up their newest release and it was SO MUCH SLOWER than all of their prior releases. Using the program became a chore; I started procrastinating more and more and eventually stopped using the program entirely. Worst of all, the upgrade changed its file format so it was not even possible to revert to the previous version that I liked so much.
Later, when I got a fast new computer, I decided to try MS Money, which was sufficiently okay by that time. I've been using it ever since.
Today I found (and solved) an incredibly hard to track down bug.
The problem was
- the app generates a whole series of compex data structures, (it could equally well have been getting stuff from a file/database, although it wasnt in this case, etc.) - key point was it was time consuming
- when data changed, it tried to regenerate only the bits of the data structures that were affected (sort of like a cache of last times results)
- unfortunately a bug in the cache algorithm, meant it didnt always regenerate it right, or the right bits (in the particular example it was kind of like the cache got changed after populating it, without getting invalidated)
- the bug was incredibly hard-to-discover and even harder to track down, as it was not easily reproducable, as it depended on what happened several steps before
(the way I tracked it down was I discovered an edit operation that nuked the cache, eliminated the bugs effects, then on gut instinct, tryed flushing the cache after every edit to see if this eliminated the bug).
Anyway, the point Im coming to is caching type algoirithms seem like a horde of bugs waiting to happen
- You have at least 2 copies of data, and they can get out of sync
- You have the possibility of bugs related to the cache management itself
- You have the possibility of invalidating the cache(s) wrongly. incompletely, not enough, etc.
...And worse because caching is usually very state dependent on things that happened before, often a long time before, you can easily miss such bugs during testing.
(FWIW I have many programs which contain various cache-like things, many not about database/file caching)
No question here, just a thought.
Wed 02 Jul | FullNameRequired | Just thought Id agree :)
I dislike state flags for much the same reason, the bottom line is that wherever possible programmers should deal with what _is_ rather than an abstract of that.
Wed 02 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | You could look at it another way: it means you probably should've had better layering and better unit tests.
Wed 02 Jul | S. Tanna | It already has good layering, if anything too many layering (although I can't see an obvious simplification, as it is complex with 3 levels X 2 of data, caching on each level, and the code is about is neat as it'd ever be to implement all this).
As for unit tests, you could argue any undetected or late detected bug is because of inadequacies in unit tests. Everybody's unit tests are inadequate - unless you really detect every bug with them - which would imply you are writing totally bug free software.
(Additionally some bugs will never get detected with unit tests, as they are the result of integration, this particular one, would probably fall into this category).
The main point that I am making is I believe cache-type algorithms are more likely to have undetected bugs. Sort of an accident waiting to happen. This might suggest more careful testing and review of these areas, and/or avoiding implementing them where possible and/or other conclusions about this more-than-averagely vulnerable points.
Wed 02 Jul | Bored Bystander | S. Tanna, I agree too. How's that for controversy and flame wars. :-)
The only partial solution that I can think up is to make caches of critical data structures somehow self-validating. IE, do something akin to a CRC of the data contained in the cache every time the cache contents change, and verify the CRC for correctness on the fly. A mismatch between expected CRC and calculated CRC indicates bad cache data.
If there is no way to define some kind of low-overhead self test of the cache data, I posit that the cache is too unreliable to use for any important application. And I think that unless there is some kind of implicit self-test mechanism, this variety of undetectable error will always be possible.
Also, the efficiency gained by the cache should be evaluated. Does it buy needed performance in exchange for the greatly increased vulnerability to bugs?
Wed 02 Jul | S. Tanna | In this particular case: CRC doesn't really apply - as it's more of a calculated data cache (calculations take a long time). There are self-tests but they're more along the lines of 'this data is not stupid' type tests - and the 'corruption' of the cache was subtle and gradual never triggering the self-tests
In the general case: A CRC or something might help for some classes of cache bugs. It's a good precaution, but not a pancea.
Particular case again: The cache is fundamental to app's performance, which is a major differentiator for the product. So I have to get it right, not just eliminate it. Believe me, you wouldn't want to use this app without the caching thing. Of course, that leaves a potential vulnerability siting in the app - yes it's a risk - but it's still a rational business decision.
Wed 02 Jul | S. Tanna | I just realized, first paragraph of my last post was not very clear.
What I mean by 'corruption' was it wasn't actually corrupted, but subtely affected thru the correct interfaces using in slightly the wrong way (so a CRC would have always said it's okay, as it would have been recalculated - unless a 2nd copy of the CRC was stored elsewhere, which would introduce a new potential problem in itself).
I realize that this explanation probably still doesn't make much sense, but if you saw the code, you'd understand what I mean :-)
Wed 02 Jul | FullNameRequired | wow Tanna, I wish I could give you a job.
You sound so _intelligent_, _capable_ and just all-around competent.
if you dont mind me being nosy, how much do you earn?
Wed 02 Jul | And the horse you rode in on | Just out of curiousity, was the caching code hand written or generated?
Without knowing the specific situation, it's hard to draw conclusions, but often caching code can be generated, and it's a hell of a lot safer to do so. Yes you can still get the same class of bugs, but there's a lot less risk of a typo destroying the whole thing, simply because you have fewer lines of code in the generator than in the output.
Hand writing repetative but critical code is a disaster waiting to happen.
Again, I don't know the specific situation, so it may not be repetative code or whatever, so don't take this as a criticism. :)
Wed 02 Jul | S. Tanna | It's not repetative, it's hand-written, I'd say it's cache-like, rather than a traditional cache... and what FullName doesn't know (if he isn't being sarcastic!) is it was my fault that the bug existed in the first place.
FullNameRequired - it depends - not that much - and much less than I used too. I do shareware (mostly) and some (not too much) consultancy. I only do consultancy (and shareware) on projects that I'm interested in - so I'm happy.
Wed 02 Jul | FullNameRequired | Hi Tanna,
'nd what FullName doesn't know (if he isn't being sarcastic!) '
definitely not being sarcastic :) going on your posts directly relating to programming Id say you have as good an understanding of fundamental programming skills as anyone here.
'is it was my fault that the bug existed in the first place. '
:) Ive long ago decided to judge programmers based on the bugs they manage to find and fix, not the bugs they create.
(thats the only way Ive managed to maintain such a big ego throughout my career....)
Whereabouts are you based Tanna?
Thu 03 Jul | Punter | A man with two watches doesn't know what the time is.
Thu 03 Jul | Mark Bessey | One more vote for 'needs better unit tests'. I've done similar things (cached the result of a lengthy computation for re-use) in a couple of programs, and I always had a way to disable the cache, and run things 'the slow way' and compare them to the cache-enabled version.
Like FullNameRequired says, deal with what IS, rather than an abstract of that.
-Mark
Thu 03 Jul | Gareth McCaughan | Two tips:
1. Whenever you build a cache, give it a flag that makes it not cache at all.
2. Whenever you build a cache, give it a flag that makes it validate everything it does.
If either of those is difficult in a particular case then what you have isn't really a cache :-).
You might be able to get by with #2 and no separate #1.
Thu 03 Jul | snotnose | Reminds me of the good-ol-days, when running C on real hardware (as opposed to Vaxen and such) was new. Before they (we) learned the volatile keyword was needed. All I can say is, I'm really glad I knew assembly when 'while(!(*hardware_register->done_field)) never finished, even though the debugger showed the bit had been cleared.
Thu 03 Jul | Mikayla | I'll second #1 above. We got that behavior somewhat by accident in our cache (it's time-based, so adding things with zero time-to-live means you'll never get a hit) and found it extremely useful in isolating bugs.
I just hope I'll remember how cool it was, when I write something else cachelike that doesn't give it to me for free.
Thu 03 Jul | IntelliJFan | This is probably obvious to all of you, but it sure bit me the first time I wrote any kind of cache: Don't cache mutable objects!
I wrote this caching layer in Java that returned plain 'ol LinkedLists. It never dawned on me that someone would modify said lists once I returned them from my caching layer. So there I went, caching objects, and returning mutable Lists. All my unit tests passed. All the unit tests for the app passed. On my machine... On the official build machine, however, certain tests involving the cache always failed.
It took me days to put it all together. The order in which unit tests will be executed in JUnit is either very complex or not specified, I get different answers when I ask different people. On my machine the test that modified one of the Lists returned from the cache was called near the end. On the build machine, that test was called early, and it mucked up the cache for everyone else. I changed my cache to always return Collections.unmodifyable() and everything worked again.
Thu 03 Jul | somebody | My approach to things like this is to implement a simple, 'naive' implementation that works well as the first shot. If it turns out that optimization such as caching is necessary (per the 'Optimize Later' rule, often it isn't), I have the first working algorithm to run against the more complex algorithm in order to verify results.
I believe this approach is described in 'Writing Solid Code' where the author mentions that Microsoft tests the optimized Excel table calculations against a simple, slower implementation in order to verify that the optimized algorithm produces correct results (this may no longer be true -- the book is somewhat old).
I know most people on this forum dont play MMORPGS, but now European users are being charged VAT for digital services. http://eq.crgaming.com
I used to go with Earthlink as my ISP, then, I believe a state tax was put on Internet Services. I was paying $24 a month unlimited access for Internet service. No Thanks. I switched to a local provider for $20 a month unlimited access. Still overpriced, IMO, but a bit more reasonable.
Is this because of the budget crisis in most (US) states?
What other digital services can be taxed?
Should digital services be taxed?
Wed 02 Jul | Philo | When faced with a deficit, cut spending.
If that doesn't work, cut spending more.
Philo
Thu 03 Jul | JP | And then when your infrastructure's crumbled and their are mobs rioting unchecked in the streets, go live under the sea. There'll be no accusations, just friendly crustaceans under the sea. :^)
Thu 03 Jul | Philo | JP, I suggest that if the entire US Federal Department of Education went away, our infrastructure wouldn't crumble.
Our schools are run by counties with oversight by states. The Dept of Education is just for meddling.
Philo
Thu 03 Jul | Marc | I agree with Philo, a good 30% of the US Federal Government is either worthless, overly wasteful, or borderline unconstitutional.
But yes, a lot of this has to do with the budget crisis that most US states are going though right now. Of course, most of that crisis is caused by unfunded mandates imposed by the federal government.
As for taxes on the internet in general, I do not like them very much. It is too hard to measure transactions on the internet, costly for businesses to implement them, and too easy for someone to get around them.
Thu 03 Jul | Mike McNertney | I'm not sure what the topic has to do with US state budget problems. The VAT mentioned is enforced by the EU, not the US or state govt. The idea is to tax based on the location of the buyer rather than the location of the business, because US companies had a price advantage since they weren't subject to EU taxes. It's the same in the US with online retailers. You generally don't pay tax unless the company has an office in your state. Some poeple are trying to change this
Thu 03 Jul | JP | I can see this going waaay off-topic....
I'm not saying that there all taxes are usefully used, Philo. Just saying that spending cuts have a finite limit of efficacy....
Albeit in a very sarcastic way.
FWIW, I think that the EU is setting a dangerous precedent with regard to extra-territoriality. I can't see how they expect to implement it with regard to non-multinationals. I've ended up wondering if it's an attempt to create a bargaining position over something else entirely....
Thu 03 Jul | Grumpy Smurf | 'EU is setting a dangerous precedent with regard to extra-territoriality.'
It sounds like a Federal System. Hmm, just like the US...
Yesterday I came up with a theory: poor programmers dont indent their code properly [or consistently].
Someone who isnt writing their code to be read isnt planning to read it again (hack it up and move on) and doesnt care about anyone else reading it again.
This might be a pretty easy to measure metric thats actually accurate. I cant think of an example that disproves the theory - i.e. poorly indented good code/poorly indented code from a good developer.
I guess this is an instance of The Broken Window Theory mentioned in the Pragmatic Programmer book.
Discuss. (Inconsistent indentation drives me up the wall.)
Wed 02 Jul | Pete J | I would say that assumption is slightly incorrect.
Someone who does not indent their code can be assumed to be a bad programmer. However, there are plenty of bad programmers who do indent their code, so you can't assume all bad programmers don't indent.
There are also plenty of good programmers who are not suited to the task at hand, which in that situation makes them a bad programmer.
So to answer your question, no it isn't that easy!
Wed 02 Jul | Matthew Lock | I think Walter may be right. Most of my career has been spent fixing up other peoples code and I have never seen a bad program have good indendation or commenting - ever.
I think that's part of the idea behind Python's whitespace as syntax.
Wed 02 Jul | constructive comment | ever heard of pretty print? I like 1TBS because it folds nicely in my editor. But the codebase I work with is strictly Whitesmiths so I transparently convert when I open/save, and no-one knows.
Although I hope I'm an 'ok' programmer, I have been guilty of rushing through some function bodies in a way that could be described 'bad', and taking time to lay out other code while in the end feeling I'd got the algorithm sub-optimal.
Wed 02 Jul | S. Tanna | I think the assumption between the theory is that there is only 1 type of bad programmer. And this is flawed.
Some bad programmers are sloppy, and lack of indenting or useless commenting may be an indication of this.
Some bad programmers are so anal-retentive that they just don't get the job done, and are so fixated on the rules - that the rules become an obstacle, not help, to success. I'm sure you know the type - the guy who has to revise everything so it is just so - but ends up with nothing work.
Some bad programmers would be good programmers, if they learnt not to bite off more than they can chew in one go. Their projects go wrong, because they are unable to break up their projects into manageable lumps.
Some bad programmers are good programmers, some of the time. and vice-versa.
Some bad programmers are only bad in certain problem domains. There are just some people who don't, and never will, get low level stuff, high level database type stuff or UI concepts. The best low level programmer that I ever knew wrote incredible code that even mortals like me could follow (although never as well as him thanks to his feel for the subject) -- but ask he to do a dialog box or write a user understandable error message - no way, and he knew it.
Some bad programmers are bad because they never take advice from more knowledgeable individuals.
Some bad programmers are bad because they do take advice even though they know it's wrong.
Some bad programmers are bad because they revent everything, and don't research what's already been done that could help them.
(and I could go on)
Some *really* bad programmers, just don't know how to program. They fake it until they make it - but never make it!
With the exception of the last one, I think every good experienced programmer should note at least hint of familiarity - as regards their own work - in most/some of the above. I think the best programmers know that they themselves are bad programmers, at least some of the time. If you ain't self-critical and aware of your own limitations - then I don't think you are a good programmer at all.
So my last category of bad programmer: somebody who thinks they know everything already, so doesn't analyze and try and improve their work.
Wed 02 Jul | | You guys don't use editors that automatically & consistently indent your code? I use visual studio & VI, both of which handle this task automagically for me.
Wed 02 Jul | The Real PC | Once I started using emacs I became a good programmer, by the indenting standard at least.
Wed 02 Jul | Dennis Forbes | I agree wholeheartedly with you S. Tanna. Indeed one notoriously bad programmer that I worked with in the past would cause tidal waves through source control as they checked out every piece of code, modifying almost every line (making version diffs a nightmare), because they preferred the scope marker on the beginning of the following line rather than the end of the preceding line (the classic 'where to put the the curly brace' debate, though in this case it was Delphi so it was begin and ends): Rather than actually solving problems, or adding value, their net contribution was code reformatter from one defacto standard to another defacto standard, bringing historic code up through the many standards (the great thing about standards: There's so many to pick from), because apparently their capabilities were so marginal that the placement of a scope marker was what really threw them off. I'm sure that they perceive themselves to be a world class programmer because of the excellent reformatting that they've done on everyone else's code, though they might find the job market a little rough when they go up against dozen line perl scripts.
On the same theme, another notoriously bad programmer (who was also a sociopathic liar to such a level that it boggled the mind, but that's beside the point) would refer to every half-baked, misunderstood idea as 'Enterprise Programming'. Again they assured themselves that they were a tremendous developer because they could constantly take MSDN articles out of context (speaking of that, see my article in the July isse of MSDN Magazine... http://msdn.microsoft.com/msdnmag/issues/03/07/ScalableVectorGraphics/default.aspx), applying n-tier methodologies to unclarified needs with dubious specifications and no defined interfaces to build around (in other works n* the rework everytime there was a realization that the 'solution' was for the wrong problem, which was frequently).
In both cases there were people who grasped onto what could be good programmer practice, and could fool the casual observers, but in both cases the execution by incapable individuals just led to disaster.
Wed 02 Jul | Bored Bystander | S. Tanna - well put.
Walter - While I largely agree with S. Tanna's response, I think that ragged indentation is a pretty common symptom of one type of bad programmer. This is the type of programmer who 'pieces around' with small sections of code and tries to fix small localized problems without being willing or able to drop back and see the entire bigger picture. I've actually seen bad and inconsistent indentation in instances with several different bad programmers. These tend to be the programmers whose absolute last tendency is to gut an entire poorly constructed application and rewrite it where called for. They don't take responsibility for the entire job, only piecework.
On the other hand, I don't see many (any) instances of 'good' code badly indented. Good developers take more pride in their work than to allow it to look sloppy.
So, I think you're onto something, but I don't think it's a comprehensive test, because as pointed out, well indented code could be bad in some general or structural way and could simply be pretty printed into good indentation. I've seen this, but more rarely.
Wed 02 Jul | Dennis Forbes | The problem is that many organizations attempt to improve the quality of code by 'standards' (such as the placement of scope markers, the number of spaces that comprise an indent, etc), but these standards don't correspond with the historic standard(s) used in previous code. Thus, if you go in to fix a piece of code or add a bit of functionality you're at a decision point: Do you alter all of the existing code to conform with the standard-of-the-day (ignoring that when that code was created, it likely followed the standard of that day), do you do your alterations following the standard evident in the historic code, or do you put in your new section following current standards (hence it'll be 'ragged' with the rest of the code). In my personal opinion, option 1 is a _horrible_ option, but it's one taken too often : Instantly historical differencing is destroyed, someone wasted a large amount of time for something of dubious value, and worse yet you've mucked with working code for no particular reason, and even if you only changed the indentations of all of those functions, you had better do function/unit testing on the entire project all so that you can smugly be self-satisfied that you've imposed some control-freak imposition over existing code. Option 2, following the historic standard of the code, is personally the best option but too many programmers are too egotistical for this.
Regarding the comment that bad programmers don't know when to rewrite it all, I'd turn around and say that he WORST programmers go from project to project, constantly rewriting it all (usually slandering any prior programmers in the process). It's easier to ignore what has been done and why it was done, and is far more glory to proclaim that all that's gone before is crap and it all needs to be rewritten. The overwhelming majority of the time these rewrites are a disaster (as Joel has commented upon).
Wed 02 Jul | Dennis Forbes | As one last comment, 'ragged' code can result from differences of the setting of the size of a tab in each users IDE: i.e. If Bob has tab set to 3 spaces, and Tom has a 32' 2560x2048 monitor has it set for 5 spaces, then if they don't have their IDEs set to save tabs as spaces the code will look ragged when they pull up each other's code. To either user their own code looks perfect, but because of configuration differences each will think the other's code is bad code (as people often vary between tabbing and manually spacing in), when in reality it's just a difference of settings.
Wed 02 Jul | Bored Bystander | Dennis: excellent points.
On lack of rewriting and messy code: what I was describing were underachieving, docile programmers who are handed a piece of badly engineered code that *never* worked right in the first place. I've seen in at least two separate instances programmers just tiptoeing through the code, reluctant to rethink anything. Of course, when the overall conception of the code is bad, the programmer will be bandaging multiple places in such code; as they go they become demoralized and they stop caring about minimal craft issues like making the indentations reflect the loop and block nesting structure.
On maintenance and multiple programmer's tab settings producing raggedness: software development starts out nice and clean, but most commercial software starts to look like a mess after a few years. So it's unfair in a lot of cases to hang a label on production code that has seen several different phases of maintenance...
Wed 02 Jul | S. Tanna | Another thing, definition of bad programmer, will vary depending on the organization, time, phase of the project, and outside factors.
Is a bad programmer one who develops sloppy code, hard-to-read code, delivers too late for the deadline, code that runs slow, takes too many risks in changes [making un-necessary changes to a source tree], does rewrite stuff, doesn't rewrite stuff, breaks the build, exceeds user requirements, underflows requirements, doesn't implement as spec, sticks too rigidly too the spec etc.... It depends on where in the project you are, and what's important at any particular moment
Sometimes the 'best' programmers suddenly because the worst, when you are nearing the end of a project or deadline, and don't want to mess with stuff that you shouldn't.
Disclosures:
- I think that I am good programmer, most of the time. Exception would be hardware-interfacing. I have done it before, and actually did it quite well (for a while I got stuck as 'the guy' to do this at one company). But if I had to do it now, I'd turn down the job, or if forced, deliberately mess it up :-)
- I probably get 99% of my braces right. I used to be anal about getting them 100% right. Now when cutting/pasting code, I don't always fix them immediately, provided after the move, the code is clear even if braces are wrong (and no, I don't fix other people's braces!)
- I am anal about white space, both vertical and in long expressions. Again I won't add them into other's code unless I have a reason. But it costs nothing in most languages and used reasonably well does make code easier to read.
- Years ago, I worked with a guy who has unbelievably anal about commenting style. Some of it stuck (I won't fix other people's code).
I really do think this is best commenting style in C++ (it's kind of an adaption of how we used to write turbo pascal.
/*
Some overall explanation of intent of next section of code
*/
// where needed comment about individual lines or fragment
code
code
code
// where needed comment about individual lines or fragment
code
// where needed comment about individual lines or fragment
code
code
code
/*
Some overall explanation of intent of next section of code
*/
// where needed comment about individual lines or fragment
code
code
// where needed comment about individual lines or fragment
code
code
code
// where needed comment about individual lines or fragment
code
Wed 02 Jul | Paulo Caetano | > /*
> Some overall explanation of intent of next section of
> code
> */
I used to do this, but when I needed to comment out a large section of a module, it would become a major PITA.
I now prefer to use
// Some overall explanation of
// intent of next section of code
It isn't that much extra work. Just selecting the lines and having the comment added by the editor.
--
'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)
Wed 02 Jul | 1/4 Ain't Bad | I'll echo a few posts because I certainly see this pattern. The majority of the bad programmers that I know also have the habit of ignoring code spacing. It's not a rule, nor is it particularly useful, but it can be a hint.
How's about this one: Bad programmers do not, by habit, replace the paper rolls in the bathroom when they finish a roll. (I'm being half-serious here.) It's an indication that they do not consider the consequences of their actions, nor do they try to thoroughly complete what they started.
(If I was a better writer, the above would have been hilarious instead of anal.)
Wed 02 Jul | Nick | I'm with ya, 1/4th.
I should add that REALLY bad programmers mount the toilet paper roll so that it feeds off the bottom instead of off the top.
Wed 02 Jul | Bored Bystander | Corn cobs, anyone?
Wed 02 Jul | Dennis Forbes | It sounds funny, but I can see some logic in that. I feel the same way about people who don't start a new pot of coffee after they've emptied the pot (on the machines where I am, it is literally a 7 second 'job', but it constantly goes unfilled). I feel confident in my belief that the person(s) responsible take a sneaking look around and then spirit away, fully aware of their actions. It sounds like something trivial that is nothing more than filling a pot of coffee, but to me it hints at some very insidious, unpleasant personality traits. So the non coffee starters=incosiderate jerks.
On the other end of the coffee maker analysis scale are those people who take a cup of coffee as it just starts brewing. For those who don't make coffee, it should be explained that coffee extraction is not a linear process, but rather about 80% of the flavour comes out in the first 10% of water (these numbers aren't scientific), and then the next 90% is getting tailing flavours...hindcoffee if you will. When someone grabs that first 10%, what is left tastes similar to water which was used to extinguish a cigarette, and to make it worse the culprit inevitably will be dumping their ultra-coffee (unless they're intentionally looking for a bowel cleansing). I peg these people as the people who stumble through life never logically considering the reaction to their actions.
Much can be learned at a coffee pot.
Wed 02 Jul | S. Tanna | Back in Turbo Pascal, we used to use { } for comments, and (* *) for commenting out. This worked great. In C I just use #ifdef
For me, the advantage of putting some kind of marker on the left for 'big' intent comments, is you can easily spot them and scan them without reading all the detailed code and minor comments.
Wed 02 Jul | Dave | Just to be a devil's advocate, doesn't the need to create 'section-level' comments, then sub-comments, indicate the routine is not cohesive, and should be split into multiple, smaller routines?
In other words, if a routine is cohesive, it will do one thing and only one thing. If it does one thing, it should involve several steps, all at the same 'hierarchical level.'
If I was performing a code review and I saw a routine with 3 big steps (with 'section-level comments') all consisting of 5 smaller steps (each with a comment), this would indicate to me the routine is not cohesive, and should be split into three separate, cohesive routines. Each of these routines would perform one of the three 'big' steps.
I must admit, I used to find the need to create 'section-level' comments as well as step-by-step comments, but then I read Code Complete, started building more cohesive routines, and now I don't find I have the need to do this any longer.
Wed 02 Jul | Pete | re comments about indentation/brace positioning
since the actual position is generally irrelevant to the compiler - shouldn't these things simply be up to the individual programmers editor? (difficult to do in practice mind...)
maybe we need a markup language for code that can be rendered according to the individual developers desires ...
Wed 02 Jul | . | Walter, that seems a pretty good indicator to me. I think it serves to distinguish a deeper difference - between those who take pride in their work and want it to work properly, and those who are accustomed to just bashing through stuff till it works.
The latter approach tends to be found in web firms and consulting firms not led by software engineers. I think it's also characteristic of the pair programming approach.
The former approach can cause conflict in poor environments, for all concerned, because the programmer will not be happy to apply band-aids to code that's otherwise scrappy.
Wed 02 Jul | BC | Dennis, I hear you. Which is why I'm really happy we finally got an automatic coffe machine at work... just press a button and the cup is filled. :-) Previously, at our floor, we were maybe 4-6 guys who made coffee (out of 30 who drank it), and we were quite annoyed in the end (you also had the people who spilled coffee and didn't clean up)... Then again, aren't programmers supposed to be lazy?
Wed 02 Jul | S. Tanna | Pete, I agree a function should implement one clearly defined goal. I do not agree that that means a function has 1 major step.
For example, many functions have 3 major steps (allocate, do it, free) which may themselves involve multiple sub-steps some of which need commenting.
or
Consider a function to implement line drawing (for example). A bresenham implementation may look like Line function from BRESLINE.PAS at http://www.gamedev.net/reference/articles/article767.asp
However a real world implementation might have few preliminary steps. So the overall thing ends up something like:-
1. Parameter validation
- possibly several substeps some of which may need comments
2. Check if line eliminated by clipping (major step)
- completely outside clipping area? (sub step)
3. Check for lines which are dots
- is line is just a single pixel (x1==x2) and (y1==y2). If yes, draw pixel (substep)
4. Check for lines which can be drawn fast using external functions/hardware
- if y1==y2, call draw horizontal line fast function (sub step)
- if x1==x2, call draw vertical line fast function (sub step)
5. Otherwise draw line using bresenham algorithm (similar to BRESLINE.PAS)
- several sub steps, basically each commented section in the example code is a sub-step consisting of several lines.
Now you could argue that the code in 5 should itself be a separate function, but I think this is highly debatable whether it's actually better or merely rigid application of a rule. If you really think 5 should be a separate implement_bresenhamline type function, I'd question
- is it really more understandable?
- you have a dangerous function (implement_bresenhamline) which doesn't handle the special cases well (or even at all), waiting to be called by somebody from the wrong place in future
- and despite making section 5 a call to a single function, it still doesn't fundamentally alter the function that the main Line( ... ) function, still has 5 major steps - it's just that the last step is one line.
Wed 02 Jul | Alyosha` | 'Is it really more understandable?'
I'd say so. I hate scrolling. For me, once a function gets above about 200 lines, it starts to smell. It's trying to be all things to all people. I can't understand it all in a glance; there are pages between when a variable is set and when it is used, and I start to lose confidence that if I make a minor change in one place, it won't have some strange side effect somewhere else in the function.
It's like Visual Studio.NET's code-collapsing feature. If a block of 50 lines of code can be expressed concisely as 'FrobnicateWidget()', I'll break it out into a single-use subroutine. That way when I read the code later on, I don't have to read 50 lines of code to figure out that it frobnicates the widget -- and it's better than a comment, because I don't have to scroll down 50 lines to find the end bracket, losing my train of thought in the process.
'You have a dangerous function (implement_bresenhamline) which doesn't handle the special cases well (or even at all), waiting to be called by somebody from the wrong place in future.'
There are some remedies to this. If you're in C++, make it a private or protected method; if in C, don't include it in your header file. That way it will only have module or class visibility, and if your modules are kept to a reasonable size, there shouldn't be any confusion. You can use a naming convention to highlight which functions are single-purpose subroutines, and a comment at the top of each function will give the reader an idea of what the function does, and who calls it.
Wed 02 Jul | S. Tanna | To answer the 2nd part first: If it's private/protected/local to a C file, another member of the class etc. could incorrectly call it. The usually won't happen now - but could happen when maintained years down the road.
As regards the line example, the bresenham part itself is about 70 lines in the example I gave including comments. and could (should) be shortened. The other bits might add up to 20-40 lines (say), so we're still well under your 200 line limit.
To be fair whether it was 50, 100 or 200 lines, doesn't matter to the point I'm trying to make - which is simply - that it is logical to subdivide non-trivial tasks into the main steps.
If you read some web page or report for example - it's much easier to read the whole, if each section has a sub-heading. Moreover even if some sections need and footnotes for explanation (and they might if the report was a complex as some ideas embodied in code), that wouldn't eliminate the need for
(a) sub-headings to identify the main sections
(b) sub-headings to be clearly differentiated from footnotes, so you are not distracted by one, when reading the other
Wed 02 Jul | Bored Bystander | To get back to the original topic of this thread - using a simple criteria such as poor indentation to identify lacking programmers...
The subject reminds me of the guy who posted here a few weeks ago who vets candidates by having them identify a few obvious syntax and gross usage errors in a hard copy printout of sample code in the computer language of interest.
Much calumny was heaped on him for daring to have such a trivial, demeaning, unprofessional seeming test, but the only apparent purpose was to weed out the 'complete' poseurs who had little to no applied experience in the language. IE, those remaining being worth interviewing.
I like simple, elegant solutions like these...
Thu 03 Jul | Nekto | How about:
//[ [coder_name] Text
code
...
code
//]
and
// [coder1] TODO[coder2]: Text
First one for long parts of code.
And... I thinks that work of programmer is to make decisions - which type to use, which algorithm to select, need he check for error or not.
This sort of decisions are too small to be documented or even commented. It is just 'all do that way' thing. But it could differ between porgrammers.
So good one is the person, who knows several ways of doing things and selects the best for the task. Father more he/she will always check for boundary condition for every datatype he will use (especiall thouse from external world).
And the _Talent_ is - to keep all that in mind and just write code. Same way as you write plain text in your own natural language without spell checking :)
BTW. proper indentations made by hand is a way to see bad prgrammer. Good one will find an IDE or external tool which sill do this for him just to save time ;)
To add to the email client thread:
Any hints on usenet newsreaders? It seems that theres Outlook Express (Im not thrilled with the interface), and then theres the other stuff out there that was written years ago and is plain ugly.
Basically, a PC version of MT-Newswatcher would be ideal. :)
Speaking of which, the JoS discussion layout is the best Ive ever seen. No clutter, no 25 posts to a page, no annoying threading--just sequential posts.
-Rich
Wed 02 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | If you also want integration with other types of content (like RSS), then give NewzCrawler a try. It's known primarily these days for its RSS support, but it does support NNTP well.
Wed 02 Jul | Marc | My problem with XNews is the attitude of it's developer. Take this great tip:
'New users are often confused or annoyed by Xnews opening an article or thread when they click on the subject. The solution is simple: don't click on the subject!'
Really? Brilliant idea...
Somone needs to send him a copy of Joel's book I think.
Wed 02 Jul | Tom | Microplanet Gravity is OK, if you use Windows.
Wed 02 Jul | Ben Combee | I was using SuperGravity, a updated version of MicroPlanet Gravity, but I've recently switched to using Mozilla Thunderbird as a news reader instead. It's got a clean interface, it's under active development, and I've not found many bugs with it. I'm not using it for full USENET news, just to access a few technical support forums, however.
Wed 02 Jul | Steven E. Harris | Gnus atop XEmacs or GNU Emacs.
'You're going to like the way you look.'
Wed 02 Jul | Ori Berger | Mozilla.
Really. And it also does email great.
And it lets you crosspost email to newsgroups and vice versa - which is something I've been bitterly missing in every other mail and news reader I've used, whether combined or separate.
Wed 02 Jul | Steven E. Harris | > And it lets you crosspost email to newsgroups
> and vice versa
Gnus does this with great finesse. It pulls together newsgroups, mailing lists, common e-mail, and RSS feeds, and blurs the lines between them. It's frustrating to read and compose any other way.
Wed 02 Jul | Dave | XanaNews
http://www.wilsonc.demon.co.uk/d7xananews.htm
Wed 02 Jul | Dave | Sorry, I meant to include the NG Support info:
xananews.support and
xananews.wishlist on
forums.talkto.net
Wed 02 Jul | Smurf975 | groups.google.com is an excellent news (usenet) reader.
Its allows you to read posts from even before you signed up and has a huge database. Which is searchable. Also your location is not imporatant just go to a local internet cafe.
Only thing you need to post to a question or post your own questions is to sign up to google groups. I'll bet it works from any web browser too.
Thu 03 Jul | Rich | I've tried Gravity, and it has some good features, but some rather large annoyances, too.
Xnews looks interesting, I'll echo the concern with the developer attitude. And, it's like the first thing on the front page! I know, it's good to have a FAQ there, I guess, but...
Don't know why I haven't thought of Mozilla. I'll have to give it and some of the other suggestions a try (like NewzCrawler--been meaning to install an aggregator).
I'm somewhat suprised there aren't more polished news apps out there.
Oh--and to the Google Groups suggestion--I do use it, but it's less than ideal for browsing. It's absolutely invaluable for searching, though!
Thanks!
-Rich
Thu 03 Jul | Philo | I used Agent for five years, finally dumped it when it was obvious it had been abandoned (and what do you know - eighteen months later it was under development again)
I went from Agent to Gravity (briefly) then ended up with xnews - I *really* like xnews.
Put it this way - I think the best software is software you don't think about. xnews fits in that category - I just use it, no problem.
Philo
I was struck by a thought today and Im interested in anyone elses opinions.
What if we used server tarpits but with a difference...
if every mail server was configured to (a) recognise spam as it arrived and then (b) reply to that spam automatically (with forged headers, subject etc etc) then spamming would suddenly have a cost for the spammers.
They would have to either manually work through every reply or just give up.
No spammer would last more than 1 or two attempts before giving it up as a bad job.
Tue 01 Jul | K | They already forge headers, including the email address header. Some of them operate by distributing the task of spamming across tons of cheap/free dial-up accounts (so even if the email header was valid you'd just be spamming the spammer's mail server -- probably an unwitting ISP). You could try to deluge them with various network requests if you have their IP addresses (provided that they're valid too), but they could change their sending pattern in such a way that nothing like that could bother them (eg: having multiple dial-up shills and switching frequently).
Tue 01 Jul | www.marktaw.com | That software exists - it creates a giant network of all users and if enough users delete an e-mail, it will recognize it by the time you check your e-mail and delete it before you see it.
I forget what it's called, but someone here will probably be able to tell you. It's a Google for e-mail.
Tue 01 Jul | www.marktaw.com | .. I wonder if they've copyrighted the term 'SpamRank' lol.
Tue 01 Jul | Thinking aloud | 'so even if the email header was valid you'd just be spamming the spammer's mail server -- probably an unwitting ISP'
hmm....OTOH the unwitting ISP _does_ need to be informed and this could be a nice way to let them know...
Tue 01 Jul | Thinking aloud | 'That software exists'
the way you describe it sounds totally different.
I was picturing using bayesian techniques to recognise the email as spam, and then automatically have the mail server send a reply to the spammer composed of various random fields.
If the spammer is _not_ a spammer (the email was a false positive) then no real harm done, the sender can see what happened and adjust their wording or whatever.
If it was then the smapper receives umpteen million emails (1 for each email he sent) and has to wade through them all.
If he was routing the email through another mail server then that mail server would receive all the crap....but then it shouldn't be allowing him to route his spam anyway and so it deserves what it gets :)
Tue 01 Jul | www.marktaw.com | That software exists too.
Tue 01 Jul | Nate Silva | Looking at the stuff in my Junk folder, I'd say the spammers don't expect a reply by e-mail but by having you click a link to go to their web site or calling a phone number. So replying back to an e-mail address found in the spam, won't accomplish anything.
Tue 01 Jul | www.marktaw.com | My favorite spam revenge has already happened... One of the biggest spammers in the world has been subscribed to nearly every catalog that exists. He gets them by the truckload every day.
http://www.tech-report.com/news_reply.x/4453/
My favorite solution today is temporary e-mail addresses. mailshell does this. spamgourmet does this.
http://marktaw.mailshell.com/
http://www.spamgourmet.com
I basically create a new e-mail address for everything I sign up for. With spamgourmet I can even define how many times they can e-mail me at that address before they start getting gobbled up. With mailshell, I create rules for the e-mail address, and not the sender.
Wed 02 Jul | ajs | I've found the single most effective filter for spam is to put all HTML email into the sin bin. For me, it catches just about all spam except for the Nigerians, and even they are starting to use HTML now. If I get a false positive, I contact the sender and ask them to send plain text in future - so far, I've found that everyone is more than happy to oblige, and are only using HTML in the first place because that's the default in their email program.
Wed 02 Jul | Foolish Jordan | Thinking aloud, if you have a good way to '(a) recognise spam as it arrived', then you've solved the problem already. You just recognise the spam, and quietly delete it.
Wed 02 Jul | Phibian | For some spam, we refuse the connection before we even finish receiving it.
This means that our bandwidth costs of receiving the spam are not as high. Unlike sending out an automated bounce message - which has the effect of doubling your costs...
Wed 02 Jul | Entrepreneur | As a business owner, the key issue for me is that the spam blocker can NOT BLOCK any VALID email.
So, it has to have a 0% false positive rate.
One simple way to do that is the same way they do with Postal mailing lists you purchase on a 'per use' basis.
You seed the internet with DECOY email addresses. Any email showing up in those boxes is spam, because those addresses aren't actually used. If more than one DECOY address gets an email it's certainly spam.
Then you keep a list of the EMAIL (not the sender) and block the email (at the mail server, etc.) that matches the email recieved at the DECOY addresses.
This has been used by paper mailing list folks for years (probably decades) with, I suspect, great success.
Thu 03 Jul | Eric Lippert | > Then you keep a list of the EMAIL (not the sender)
> and block the email (at the mail server, etc.)
> that matches the email recieved at the DECOY
> addresses.
Good idea -- in fact, many email services (AOL, Hotmail, etc) do this already.
Unfortunately, spammers are on to that one. All the spammer has to do to defeat this scheme is to append a unique stream of bytes (like a counter of the number of spams sent so far) to the end.
Eric
I need to set up a distributed app to demo on a single laptop running windows XP home edition. To do this I need an LDAP server. My first thought was active directory but, unless I am misreading, that doesnt come with Home edition.
Anyone have any experience, advice or suggestions?
Tue 01 Jul | Walter Rumsby | If you're using Java you could use the file system JNDI service provider - set the initial context factory to 'com.sun.jndi.fscontext.RefFSContextFactory' and provide an valid file path as the provider URL and it will store your bindings in a file called '.bindings'.
Thu 03 Jul | Erik Lickerman | thanks Walter. Obviously this topic didn't inspire a lot of response. I will give it a try
Thu 03 Jul | Walter Rumsby | Check out the JNDI tutorial on the Sun Java site. We're currently using the file system provider to store one or two simple values.
I'd like to get some more information on implementing javax.naming.Referenceable but haven't got around to reading the advanced parts of the tutorial yet, so maybe it's there.
Theres been a lot of discussion about how much better contracting is compared to being a FTE.
Ive always taken full time employment. Originally it was because my parents kept hassling me about the importance of having a regular income, and its kind of rubbed off on me.
I dont think I could cope with having to continually find new contracts, the possibility of not getting paid or suddenly kicked out, and going for large amounts of time without getting any income to pay the mortgage.
Yet there seems to be an impression from quite a few people on here that contractors get a better deal when theyre in work.
Am I missing out, or have I made the right decision?
Tue 01 Jul | Coward | It depends. I contracted for the same company for 5 years.
Tue 01 Jul | Lauren B. | Given your stipulations about instability, it sounds like FTE is right for you. Finding what's right for you is the goal. Here is my experience:
I have been a contractor for a year, after always being a full time employee at 3 different employers (over a span of 14 years). Some of the nice things about being a contractor:
setting my billable rate,
less moral 'dilemma' about putting in extra hours (ie. hours = $$),
can take multiple contracts at the same time (less conflict of interest issues, if your contract is written that way),
sense of freedom and independence (a big one for me)
down time between contracts
Some of the down sides to contracting:
uncertainty: down time between contracts,
possibly being excluded from the 'team,'
possibly being treated as less than an employee,
not being able to use the company facilities as an FTE would,
have to pay for benefits and insurance,
have to pay for training or conferences,
if you work as a 1099 contractor, having to do quarterly taxes,
creating invoices / accounting
How much these things bother you are variable. Personally, I am beginning to enjoy the uncertainty (=adventure, in a small way) and I like networking / negotiating to find work. Slowly, I'm building a reputation and I will get known. Kinda cool.
So far I've been successful, and one year is hardly long enough to judge! Plus, I have a spouse with a full time, well-paying job. That helps.
Tue 01 Jul | Troy King | I owned a third of a consulting company for a year and a half. Thankfully, I also maintained FTE during the time. The consulting work was miserable, not because of the work, but having to fight to get paid. The crap companies will pull to not pay is unbeleivable, and we had to get lawyers in a couple cases.
The money could have been much better in the consulting, but it wasn't worth the stress to me. I also do not like the 'business' side of business. I suspect if you're the same way, stick with FTE.
Tue 01 Jul | Michael Moser | 'The crap companies will pull to not pay is unbeleivable'
Me Too.
i got into contracting after being fired from my last job (rough entry). Now when there is a fine day, and i have my bills payed i think 'yeah, freedom rulez'.
When my bills are not payed i think 'capitalism sux, lets hail the proletarian revolution'.
Tue 01 Jul | | Another way to look at it is once you get going good, there's more stability in having a large number of clients instead of relying on one single employer.
The trick is getting going good. It helps if you have another source of income, especially if that source is in the form of another person that will enable you to go w/o pay for a while.
What I like about working for companies though is that IME the projects are more interesting. Consulting work was fairly mundane, usually fairly simple stuff with importance placed being on-time & within budget. The FTE work I've done has seemed much more relaxed. There's more room to play around with technologies. I recently spent 2 weeks learning about remoting, something I never would've had the luxury to do as a contractor.
Tue 01 Jul | Mark Hoffman | Just depends on the person and the aversion to risk....
One of the biggest advantages I have of being a contractor is the relative immunity from office politics. I'm not here to get promoted; I'm here to make the guy that hired me look like a superstar.
That makes my job a little bit easier than the person that might be hesitant to make their boss look good because they are afraid of losing out in the long run.
Not a perfect system and it depends on the client, but I've been fortunate that I get to focus on technical problem solving without having to worry about accruing political chips and favors along the way.
Tue 01 Jul | Tom Vu | I contracted for the past 7 years (avg. 1 contract per year) and never saw instability as an issue. I suppose working for a smart firm that writes software would be great but there aren't too many of those, and most of those firms outsource to contractors or overseas. Probably the greatest benefit for a FTE is that if you work for a large multinational you can just come in and do the same thing day after day (until you become downsized or automated).
For me it was a bigger risk to be a FTE than a contractor.
Tue 01 Jul | Bored Bystander | ANY work you do for someone else is 'unstable'. Full time employment in most parts of the US is at-will on both sides so is virtually equivalent to contracting, except that no anti-discrimination or unemployment compensation issues enter into contracting. Basically, all you lose with contracting is the ability to draw a pittance for unemployment, and you can't claim illegal discrimination. THAT'S IT. I'll gladly forego these two 'benefits' in order to have the dignity of not having some jerk act like he owns me.
I've contracted for the last 10 years. At *every* permanent technical job for which I have been contacted in this period, the employer wanted someone ready to go balls-to-the-wall, steeped in the exact specific technology that they wanted, and no learning curve was tolerated. In other words, exactly the same preconditions as contracting. And one current client uses me after canning a long term technical employee. All that matters is performance and the employer's perception of your worth and contribution.
As far as client non-payment and poor working conditions in contracting, I'll pull a Bella now (punitive, scornful and accusational of fellow technology people) and say that these 'problems' are *always* the fault of the principals of the consulting firm.
As far as working conditions or the quality of work goes, one reason you're a contractor is that you seek to equalize the disparity in economic power between you and the person(s) you work for. If the client really starts to suck, well, you have other clients, because you're a small business and you market on the side, right?
And there is NO excuse for letting a client get $10's of thousands of dollars into you except exceptionally gross stupidity about human nature and management of accounts receivable. I've known or heard of several local guys who basically had enough contacts to sustain excellent consultancies, who acted like complete childish dumbasses and wouldn't invoice regularly, set aside monies for taxes, or other minimal activities of managing the mechanics of a business. They had to quit not because they didn't have enough business but because they were adult children techies refusing to take care of business.
Tue 01 Jul | Mike Gamerland | My experience has been similar to Mark Hoffman's.
Pro:
- No office politics. You are there to make the person who hired you look great.
- Hours equals income, in most cases. YMMV depending on the agreement.
- Valued more than FTE. I see someone said they found themselves less valued, but I find just the opposite.
- High level of exposure to all levels of customer organization.
- I am as successful as I make myself. I am not held back because my manager wants to keep me taking care of the dinosaur. [OTOH: I make more money supporting old systems while employees learn new tech.]
Con
- You must sell yourself and skills. If you cannot sell, you will fail.
- It is a business: Training, healthcare, retirement, etc. at your expense. [** this often oversold by companies. FTEs are paying nearly as much as me for health insurance and getting FAR less in retirement]
- With few exceptions, you can be let go on a moment's notice. You must be prepared to be out of work for 12 months. I have yet to be out for more than one month, but it is not uncommon to go six or more during bad times.
- Because of the MS permatemps loss, many companies force you to go through Vendor managers, which are basically rip-offs. They get the company to pay an 'admin fee', then force the contractors to take a 5% cut and then the contractors have to pay the vendor manager 5-10% to stay on their list of available vendors. [Yes, I am a little bitter or envious. Check the day. ]
If you have a unique skill set and can sell yourself, contracting is much better IMHO. It was at one time felt less secure. The last three years I have seen employees laid off while contractors were kept. I believe it is an illusion to think FTE is secure.
Tue 01 Jul | Mike Gamerland | Wow...I have to agree with Bored too. Well put!
Tue 01 Jul | One Programmer Opinion | Better Than Being Unemployed...
The vast majority of computer contractors working in the U.S. (this includes many H-1B visa workers) are simply W-2 hourly employees. In other words, these people are short-term employees who work for a staffing firm/broker. These firms will keep a contractor employed for as they can sell their skills or for as long as a particular client of the staffing firm/broker is interested in using their services. In many instances these contractors are eligible for unemployment compensation.
Bored Bystander sounds to me as if he chases after his own contracts. That is, he doesn't find most of his gigs via a broker, staffing firm, or consulting firm. I bet if you asked him he would tell you he is an independent contractor or independent consultant. These type of people truly are independent businessman. Note: sometimes ICs aren't able to find their own clients and are forced to use a middleman (a broker, a staffing firm, etc.) to get work.
Many W-2 hourly contractors either have bleeding edge technical skills or some type of niche technical skill/knowledge (i.e. ERP experience, SAS, etc.) that keeps them employed.
Someone who has excellent VB, Java, or VC++ programming skills probably isn't going to be able to get a good hourly rate from a broker simply because everyone and his brother claim to have these technical skills nowadays.
Tue 01 Jul | anon | How many years of experience should someone have before they become a contractor? I only have a couple years of experience and have assumed that >= 5 years would be best in order to to land a steady stream of contracting gigs.
Tue 01 Jul | Tom Vu | It was at one time felt less secure. The last three years I have seen employees laid off while contractors were kept.
I have seen FTE laid off and then hired back as contractors because contractor pay was accounted for differently.
Bored Bystander seems to have summed it up quite clearly. There are no guarantees be it contracting or FTE, but at least in contracting you take responsibilty for yourself and manage your own career.
As for how many years you need to become a contractor. 0 years, start right away. Look at the threads on this board about FTE that have no skills or drive. In any industry or profession if you are good or at least think you are good and are confident in your abilities then show some b*lls and do it.
But if your skills are in ass kissing and politics then a FTE environment may actually be a good place
Tue 01 Jul | T. Norman | Indeed the 'job security' aspect of being a FTE has been largely whittled away, with the way companies have become addicted to layoffs.
Before my current job at a Fortune 500 company, I was an employee of a tech consulting firm which is now breathing its last breaths. In the past 4 years I survived 6 rounds of layoffs at the consulting firm and 2 rounds at my current company.
Even though I was a contractor to the clients, I was an FTE to the consulting firm. So I had both the problems of not being paid for overtime while facing the clear and present danger of being unemployed if a client couldn't be found. Luckily the clients weren't strong pushers of overtime as they would be billed for it, and I had a client 95%+ of the time.
I am looking into getting into *independent* contracting myself; the problem is figuring out how to get started. Companies seem to be resistant to contract any one-man-shops, instead sticking to people from their 'preferred vendor' list. Which means I would have to come through one of those vendors, who tend to take too much of a cut out of the billing rate, either forcing me to price too high or drop my rates to the point where I am worse off than I am now.
Tue 01 Jul | | Anyone wanting to develop a real contracting or consulting business should avoid going through recruiters at all costs. Working through recruiters means you have very little say in arrangements, and this becomes critical if problems arise, which is normal in software development.
Most people considering becoming contractors have specialised expertise in some area or other, and this is useful to companies. You need to get in touch with companies directly and offer your services.
Companies are sucked in by recruiters just as much as developers are. If companies tell you they only hire through recruiters, firmly tell them the only way they can hire you is directly. You are a business. You don't work through middlemen.
A second important skill, alluded to by others, is being firm on getting paid. Staffers are not accustomed to making demands for pay, but consultants learn to do it. If you don't, some companies delay paying as long as possible, considering this financial prudence. So you have to learn to contact accounts payable and chase them for money.
Tue 01 Jul | Bored Bystander | To answer the speculation - yeah, I find my own work. Recruiters and brokers have done absolutely nothing for me except waste my time with their bullsh*t mind games and lies and noodling around to get lists of references. I've had one brokered contract in 10 years.
In my case, it's not so much networking and sales skills as it's been just lucking into singular situations.
T. Norman - 'consulting' firms are the dregs with all the disadvantages of both full time employment and contracting. The worst of both. I sympathize.
In general - I think technical work has become such a commodity at a certain level of client (Fortune 1000 and up) that the *only* way that you can name your terms (IE, by refusing to work through agencies) are with much smaller businesses. The large companies procure contract technical help through preferred vendors and they seem to approach the selection game like a glamour talent agency model anymore. Whereas the smaller businesses are not large enough 'accounts' to be of interest to large body shops so they can be approached directly with much more credibility.
Of course, smaller businesses tend to have a LOT less money available than large businesses. It is not proportionate to their size, either.
Wed 02 Jul | | There's still plenty of money in large companies. That's why it's important to avoid recruiters.
If you can do something useful for a big company, you can negotiate a good fee for it directly wtih the people who want it.
But if you just answer ads from recruiters, they will pocket the money, and just pay you the standard rate for 'C++ programmers' or whatever. And lie through their teeth about it.
If you work directly, you negotiate whether you work off-site, you retain IP, you are an equal partner. If you respond to an ad from a recruiter, you are tied up in unequal and useless contracts, and legally prevented from doing any negotiation with the real employer.
Wed 02 Jul | Bored Bystander | The problem with large companies is finding and building relationships with influential contacts within those companies. I don't dispute that anyone would be better off contracting for a large company rather than a small one, just that it's damned near impossible to market to executives within large companies.
The money's there - but it's there mainly for preferred vendors.
Thu 03 Jul | Jim Rankin | ' You must be prepared to be out of work for 12 months. I have yet to be out for more than one month, but it is not uncommon to go six or more during bad times. '
Can any independent contractors comment on how they set rates based on these assumptions? For us FTEs, we really haven't had the experience of figuring out what health insurance, etc. costs. Or how to set rates or figure out how much we need in the bank to get started. (Enough to pay the mortgage and eat for 6 months? 1 year?).
Etc.
Even if you want to be a FTE, you still must find a way around the recruiters. They are truly a scourge on our economy.
Ive been gradually tiring of using Outlook lately (say the last 2 years) and have been on the lookout (excuse the almost pun) for another mail client that will serve my needs. Ive returned to Eudora for a while and even considered Outlook Express. I know also from http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=47634&ixReplies=25 that the Bat is highly regarded. However...
Ive recently downloaded and been looking at Thunderbird. Although an alpha, it actually seems pretty good and stable. I like the UI and it appears to offer all the functionality that I need such as multiple accounts and rules. Above all, I like that it doesnt run incoming viruses by default.
As yet, though, I have not made the switch. I was wondering, is there anyone else out there that has been using it for a while that has any useful experience to offer?... such as dont use it, its stinks or its better, even, than sliced bread
Thanks
Tue 01 Jul | Troy King | Not that you asked this, but I too have searched for the perfect email client over the years. There's something to hate about all of them. The best I've found yet is 'Becky.'
You can default to showing the text of an HTML message or the HTML (and turn off scripts), compose regular text or HTML messages, have multiple accounts with different check times, threaded message viewing (or flat), and quite a bit more.
It lets you choose your own editor for messages, or use the (quite good) built-in editor. Here's the part I also like: You can edit incoming messages. If you want to trim out all the fluff in a message to just keep the part you want, you can use 'Edit Mode' on a message to change it. You can change the subject or body. It's a much more valuable feature than it sounds -- you can add phone notes to an email you received, if you like to use your Inbox as a to-do list, like I do.
It also supports plug-ins that can work on the messages, the GUI itself, etc. There have been quite a few good plug-ins written.
Tue 01 Jul | anon | I just started using the mail client in Mozilla 1.4, and I must say that the junk filters have worked perfectly so far. This and popup blocking are the killer feature of Mozilla for me so far.
I looked at Thunderbird, but it seemed kind of 'alpha' quality, as you say. If I get used to Mozilla, I think I might switch over to Thunderbird as it gets more stable.
Tue 01 Jul | Sam Strachan | Troy: thanks - I will take a look at Becky.
Anon: Same here. I like the idea of a separate web and mail client. I like the Mozilla mail client but don't want to have to go via the web browser... (or if configured otherwise, get to the browser via my email client. Don't ask me why - I can't justify it - it just feels better that way.
Tue 01 Jul | - Roland | Question: have you used Mozilla before installing Thunderbird, and did you import your old mails? (If that was possible and stable, I'd switch immediately.)
Most likely you also have heard that Mozilla 1.4, just released yesterday, will be the last 'all in one' release, and from 1.5 on releases will consist of several components (browser a.k.a. FireBird, mail client ThunderBird etc.)
Wed 02 Jul | Sam Strachan | Roland: Yes, I've done successful imports with both Mozilla, and thunderbird. I think I'll just take the plunge; it can't be any worse than Outlook ;-). I didn't know, however, that 1.4 was the last all-in-one release. I might RTFM from now on!
Wed 02 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | I've been a staunch supporter of The Bat! for many years. I just tried Mozilla Thunderbird, and I'm pretty much positive that I'll be using it full time when it's released. So far it's only crashed on me once in the few hours it's been running. Not bad for an admitted alpha.
The UI is slick, the filtering is good, multi-account support is good. The signature support is weak, but I'm wondering what I can't cook up with the templates to overcome it (still haven't experimented with templates yet).
Wed 02 Jul | Martin | I have been using Netscape Mail (version 4) for years, then switched to Mozilla Mail ~2 years ago. This spring I started using Thunderbird.
There were times when I was looking for alternatives (Eudora, The Bat, ...), but I kept using Mozilla because I like the UI.
Thunderbird is a great mail client. I didn't have any crashes or other program errors, no loss of data. Importing mail profiles works like a charm. So I can really recommend it to you; there are still some UI inconsistencies (e.g. differently themed buttons), but that's what they are working on at the moment, so it will change rather soon.
The spam filter, as mentioned before, works great. I have not had a false positive for months, but occasionally spam passes the filter.
My main issues with Thunderbird are:
- There is no alternative to the old nsnotify utility which resided in the Windows tray and checked for new mail. If you want to be informed of new mail you have to keep the program running.
- You will be notified of new mail even if all you received was spam which then got caught by the filter. This is being worked on, but could take some months to be resolved.
Thunderbird/Mozilla Mail is the best email application there is.
Thu 03 Jul | Sam Strachan | Thanks for your responses guys. I'm a convert!
Does anyone have any recommendations for software to handle bouce emails? I need to be able to check an account, then update a database to show that the email has bounced. The database will be running on a remote web server. I am considering both full programs and APIs.
I have looked at BoogieTools, anyone used it or have any other recommendations? http://www.boogietools.com/
Wed 02 Jul | Damian | I know someone who uses it.
www.sqlteam.com uses it for their mailing list and I know that Graz (who runs the site) loves it.
Wed 02 Jul | Entrepreneur |
Gammadyne Mailer ~ $150.00
I use the Gammadyne Mailer, which is for sending out mass email. It has bounced email processing and can interface to an ODBC compliant database. Not sure if it can do that across a network (our database is local).
Powerful program, although you may need to tweak it a bit (it's very customizable, with scripting, etc.).
Does anybody know of a way to disable horizontal scrolling when using the mouse wheel ?
Whenever I move a window that has both a horizontal and vertical scroll bar to the right to view something underneath, the vertical scroll bar is moved off screen and the mouse wheel suddenly starts scrolling that window sideways.
This unexpected and inconsistent behavior is definitely not user-friendly. I would like to be able to scroll any window vertically at any time, even when its only visible scroll bar is the horizontal one.
Wed 02 Jul | Brad Wilson (dotnetguy.techieswithcats.com) | The vertical scroll bar is moved off screen? Huh? It's anchored to the right side of a window. How could it be moved off?
Wed 02 Jul | Duncan Smart | Eric -- I can't reproduce, I've never seen the behaviour you describle with any mouse. What type of mouse are you using? What OS? With my Microsoft mouse under Windows XP, rolling the mouse wheel *always* a window scrolls up and down irrespective of where the window is placed on the screen or its complement of scroll bars. Have you fiddled with the settings in Control Panel > Mouse?
Wed 02 Jul | jedidjab | If I remember correctly this happened under Win2k and VS 6 .. I'm running XP now so I can't check. However, I do remember that in certain situations I would have the exact same annoying behaviour.
Wed 02 Jul | Eric Hop | Exactly. I'm using Visual Studio 6. When I move one of my source windows to the side so that only the left half of it is shown in the MDI frame, and the vertical scroll bar is 'off screen' using the scroll wheel results in horizontal scrolling because that scroll bar is still visible. I am using IntelliPoint 4.12 with an IntelliMouse Explorer.
The irritating stuff happens when I'm scrolling vertically, move the window to the right (scroll bar off screen) to check something underneath, and then try to resume scrolling vertically. It now suddenly starts to scroll horizontally, I start screaming in frustration, and my train of thought is broken...
Wed 02 Jul | Eric Hop | By the way, I think using the same function for two different things is confusing as hell. Horizontal scrolling is not something you want to do often, as opposed to vertical scrolling (you do that all the time: sources, websites, helpfiles, etc).
So why they added this disfunctionality to the scroll-wheel is beyond me...
Wed 02 Jul | ymmv dude | I know what you're talking about. Very aggravating.
It doesn't do that in VS.NET 2K3, but that interface is jacked in other ways. They moved all of the menus and changed the keyboard shortcuts. Very very aggravating.
Of course it's still the best IDE out there, IMO.
Youll probably get some heat from someone about prematurely adding [FormerlyKnownAsEcho] support, but I say more power to you. The only way to test a format is to slap some real-world data in there to find out where the holes and speed bumps are. Kudos on being the first!
(BTW, vote for my suggested new name Xark [www.xark.org]!)
Wed 02 Jul | runtime | I like the name Echo the best. There aren't enough unique names to go around. Remember Firebird, not too long ago?
On the list of proposed names, I like Aya or Bravo. Of course, isn't Bravo is the name of another software product?
http://www.intertwingly.net/wiki/pie/ProjectNameProposals
I don't like Xark because I thought it was pronounced 'Zark' until I read the FAQ, saying it is 'Eggs-ark'.
Hi,
I need to simulate a heavy load of transactions in a database in order to test an app that Im building. My app will monitor and transform some of these transactions but the process that will do the actual inserts is not ready yet.
I guess building my own wouldnt be too hard, but I have this feeling that someone has done this before, and much better that I would. I would need to be able to specify the information to be inserted, a range for every field, and a frequency.
Has anyone seen something like this?
Wed 02 Jul | deja vu | Not free.. but look for Quest software's DataFactory.
http://www.quest.com/datafactory/index.asp
Or just roll your own with a Perl script or something ?..
Hey.
I was wondering if there is some standard datamodel for calendar/scheduling typ apps.
The requirements are that there should be visual representation of time that can stretch infinitly into the future. Events have a start time and a stop time (or duration).
No two events can overlap.
Now, the display thing is done all in code of course. And the events could simply go into a table. But how does one do the colision/overlap control without having to scan for and calculate all possible collisions.
Im thinking the solution must either be in some SQL command I dont know about, or in the datamodel itself.
How is it normally done?
Tue 01 Jul | Adam Young | order the events by start time.
find the greatest start time less than pending event.
if (previous.startTime + previousduration > newvent.start time) new event is invalid.
find the least start time greater than new event.
if (newevent.start time + newevet.duration > next.start time) the new even is invalid.
The SQL for the queries is failrly easy. but the test logic inside your domain model.
Tue 01 Jul | Eric Debois | DOH.
Thanks.
I diddnt realise that if every new insertion is checked against the closest two events, those will be the only two events you ever need to check against since only those two can possibly be in conflict.
I figured you hade to scan through the entire list, but that would only be needed if there was invalid entires in there to begin with.
Cheers
Tue 01 Jul | anon | When you start allow for recurring events it becomes a pain in the ass.
Tue 01 Jul | Chris | Well put anon. :)
Tue 01 Jul | Adam Young | Yep.
Probably what you want to do is have a template of events, apply those templates to a give time slice, and check for conflicts.
Your object model would have the following classes (or something close)
tempolate event: start date, end date, start time , duration, repeatrule.
repeatrule (maybe some time of enum patterns) can be daily, weekly, monthly, etc. whatever your app requires.
scheduled event: template event, date.
It gets more complicated if you want an even to reur more often than daily (every hour on the half hour).
Tue 01 Jul | Philo |
CREATE PROCEDURE CheckEvents
@StartDate DateTime,
@EndDate DateTime,
@EventCount int OUTPUT
AS
SELECT @EventCount=COUNT(*)
FROM Events
WHERE StartDate<@EndDate
AND EndDate>@StartDate
If @EventCount>0 then there's a collision.
(This is my favorite SQL trick in the world)
Philo
Tue 01 Jul | Chris | Philo,
Shouldn't it be:
WHERE StartDate<@EndDate
OR EndDate>@StartDate <-- The OR not AND
Or am I misunderstanding? Because your one will only catch events full between the enddate and startdate? Forgive me if I am wrong.
Tue 01 Jul | Philo | Yep, you got it wrong. Try these out:
@Start----------------@End
Start--------------------End
@Start------------------@End
Start--------------------End
Philo
Tue 01 Jul | Chris | Ok then I see it now. Thanks for taking the time to clear that up for me Philo.
Tue 01 Jul | Chris | Definately going to file this away tip away for our actions section. Thanks.
Wed 02 Jul | Albert D. Kallal | I have written more collision routines then I care to admit.
It is strange,but it really is a very simple query as to find a collision. It is a simple sql query (as Philo points out).
As long as you check (don’t allow) collisions at insert time, then the problem is simple.
For some reason, this booking problem seems to be difficult, but in fact is not a complex problem at all.
My first gen of reservation software had all kinds of weird logic. Now, it is so much simpler.
I will suggest to store “ranges” for testing. (you seem to hint that is what you want anyway). So often, if a booking is for a week is needed, then many developers wrongly assume that you need to write out 7 records to some huge booking table.
I have had to work with those types of designs in the past...and it was a mess.
If you store ranges, then you can delete, or change the range with ease. If you store a reocrd for each day of the booking, you have to write tons of code just to move, or remove a booking.
As for some ideas for “repeating” events? Take a look at how your palm pilot does it....it will give you some good ideas.
Albert D. Kallal
Edmonton, Alberta Canada
kallal@msn.com
http://www.attcanada.net/~kallal.msn
So many companies are so clueless on UI issues.
For example, tabs are the correct solution for many of the worlds ills.
So in OS X, instead of tabs they have these scrollable sets of icons horizontally arranged above your preferences panels. Which tab you are on is not indicated in any way so if you are wondering where you are you have to click on each one of them, looking to see the panel that you are currently on and then memorizing the look of its icon. Normally that wouldnt be a problem but each click whirs the disk and does some fancy growing/shrinking animation and so even on the fastest Mac it can take a full second to switch between panels. Stupid piece of ball-wax!
Or how about another way to avoid tabs -- in the print dialog, instead of tabs, there is a *popup* menu to select the preferences panels - # of pages, print quality, layout. How lame is that? Popup menus are for selecting between less frequently used or large sets of options. Commonly used small sets of options can be selected with checkboxes or radio buttons. But popups to select preferences panels or open windows? That is lame. Tabs are the solution here.
Speaking of printing, why on earth are there two print dialogs anyway - page setup and print. Printer selection, scaling and paper size are here. But printer selection is also in the print dialog. Why two places? Why not one? Why not put scaling in the print dialog, since selecting layout is there?
And heres something new with OS X - pdf print preview. Press preview and your pages are saved in a pdf file which is opened in Acrobat. So how to print now? Well you can restart printing from inside Acrobat. But if you close Acrobat, the print dialog in the calling program has been closed and you will have to open it again and reset up your print options. That is annoying, as is the fact that some print options are saved between calls to the print dialog and some are not. Why do I have to reselect print quality to use less ink but two-up printing (wihch is usually a one-off thing) has to be reselected?
Tue 01 Jul | Mr. Tab | Meant to say two-up printing is sticky and needs to be deselected to undo its mode, wheras print quality unselects itself automatically... sometimes.
Tue 01 Jul | Mike Swieton | This really is just a rant.
Why not write Apple? I don't think anyone here can really help you.
Companies do do some usability testing, you know. There may be a good reason for their decisions.
Or, there may not be, and maybe they'll change it when someone points out that it's stupid.
Tue 01 Jul | Mr. Tab | Yes, of course it's a rant -- one of the five forms of forum communication. Or is it seven?
This is a good board for it since Joel has published exactly one book and it happens to be a very fine one on UI design.
Joel never writes about H1B issues, database table design, or favorite types of music, yet discussions about those topics show up here with astonishing regularity.
I am claiming that for a window in which there are a small to moderate number of settings panels or documents (tabbed browsing) that are 'paged' in and out of a single window frame, a row of tabs at the top is the appropriate UI. A popup menu is definitely not the right UI, nor are scrollable buttons that do not show which one is currently active. Such choices are in fact symptomatic of a lack of ignorance of usability design.
I've posted on these issues on Apple's boards and written them. OS X, though a better UI than Linux, is a huge step backward from both OS 9 and NeXT. Lot's of people are complaining but Apple doesn't give a shit since they know better than every one else. Whatever they do is right. One button mouse? That's all you'll ever need! Just press the control button at the same time as clicking your mouse if you want a second button! Floppy disks? We don't need em! Hardware compatibility with previous models? Forget that -- you'll be wanting a printer and scanner with a new stylish case to go with your new stylish computer anyway!
Tue 01 Jul | Mr. Tab | ...unlack of ignorance
Tue 01 Jul | James Ladd | +-----+-----+--------+-------+---------+
! You ! tell ! them ! good ! Mr Tab !
+-----+-----+--------+-------+---------+----------------+
Tue 01 Jul | Nate Silva | Heh heh. You bring up a lot of good points about OS X. I do feel the need to point out that OS X has tabs, and they are often used as a second level of selection in addition to the icons you mentioned. I'm not sure that's a good thing, as I personally dislike tabbed UIs.
But printing is terrible. That is one area that Apple really needs to work on with OS X. It's gotten better in Jaguar but it's still rudimentary. I don't mind the fact that print choices are PPD-based, but having to choose from a popup list to get to the different choices is really annoying. Even I would agree that tabs are the solution there. They also need to offer cleaner support of networked, non-PostScript printers (without me having to download a bunch of scripts from linuxprinting.org).
Wed 02 Jul | Mr. Tab | Hi Nate, thanks. Right, tabs do appear in certain places, true -- I'm just ranting about the places where were unwisely bypassed.
But your insight let me see what they are thinking -- 'System Preferences' -- there's the control panels, with the favorite on the top shelf as icons. Choose Monitors and we have a tabbed preferences there. So Apple is thinking 'oh no - we can't have two rows of tabs so we must have the first row be icons. And if making some first row icons, then -all- first rows must be icons. Of course the control panel gizmo is probably ok since its such a weird thing with the 'show all' icon which really means 'go to index'. Where it drives me crazy is in safari because I am always having to try to find the cookie eraser hidden multiple clicks down in the dang preferences listed under 'security' options (??), even though killing cookies automatically at the end of each session is a browser standard. I'd like to not have to go to this preferences at all in the first place, but have a 'delete all cookies at the end of each session except these specially checked persistent ones that I use for reading the New York Times'. I have never found a browser that does that but it seems to me that that is what most people want. Anyway, instead of 'security' options it should be in a 'Protect My Privacy' panel. And the current icon should at least be highlighted in some way (maybe just a line underneath it) for the panel one is on if tabs are not possible.
Wed 02 Jul | Joker | Muh4h4h4h4h4!
Tabs R tabs R tabs R tabs!
I louve Mozilla, especially if it is eaten by Gozilla.
What do people think about using dual monitors for development (one for Visual Studio, the other for the program being debugged).
1) Does this really improve productivity?
2) Suggestions for a dual-monitor video board?
3) Does this mess up testing (most users have one monitor)?
4) Does it work better / different under WinXP vs Win2K?
5) LCDs vs CRTs - does it matter?
6) Other caveats?
Thanks in advance!
Mon 30 Jun | Brad Wilson (dotnetguy.techieswithcats.com) | 1. Yes.
2. I use an nVidia card, but I also play games. :) For pure video quality, Matrox is probably the best (but terrible for 3D performance)
3. On the contrary, you find multi-monitor related bugs.
4. I love XP for the font smoothing.
5. LCDs only. Using a 17' w/ DVI and a 15' w/ analog. Once I'm rich, then 2 19' DVIs for me! :)
Tue 01 Jul | Rhys Keepence | 1, Yes, even for general use.
2, At work, I use the factory Dell AGP video card plus a cheap PCI video card. At home I have a dual head card.
3, What Brad said
4, Both support dual monitors. XP has ClearType for LCD monitors.
5, Get the best you/your employer can afford. LCD and at least 17' is a must for the main monitor.
Tue 01 Jul | Mike Swieton | I have not run dual head under windows for some time, but I do it under linux a lot.
In any case, the same caveats apply: make sure your drivers support it, etc.
Dual (or in my case triple, though anything more would be overkill... diminishing returns and all. 3 is handy, though) head is extremely handy: Right now, I have the docs up on my small 15' LCD on my right, my headers up on my left 19' CRT screen, and on my middle (a 21'), I have my C++ code. Going to work to work on one screen is often quite annoying. I'll be bringing in another screen sometime if I decide it's worth coming in after and spending the time setting it up (not likely, but I'd really like it).
In any case, the sheer ability to see N things at once, and well too is indispensible. With one screen you're stuck managing windows painfully, with excessively narrow windows/etc.
Forget the extra 50mhz on the processor, leave off the extra-massive hard drive, and spend the money on multiple good displays. I can not endorse it enough: once you try it, you'll never go back.
Tue 01 Jul | Anonymous Coward | I use two blurry old dim monitors. 19' and 17'. It helps.
Tue 01 Jul | matt | Double twenty one inchers, baby.
I love it and now it just feels kind of teeny and one-tasky to work on a computer with one monitor.
I'm not doing the kind of code that has a debugger (don't ask), but it's wonderful to have a reference open on one monitor full screen and code on the other, or server output on one while pushing buttons on the client on the other. So cool.
Tue 01 Jul | Andy | those double 21's better be LCD.. : ) I had two 21' CRTs at work and they took up the whole cube and were shoved in my face. They were way too deep. Whenever I looked up there was the crease between the two monitors staring me in the face. So I got rid of one and I've been fine. When LCDs get cheaper I'd like to go back to two.
But if you run at 1600x1200 a lot of stuff fits on the screen. I just work with the desktop in halves for my browser windows, file manager, and text editor -- it's still 600 pixels wide which is fine for a lot of apps. And then for the IDE and big apps I go full screen of course. It works well.
Tue 01 Jul | Philo | Huge caveat with dualhead - make sure the video card supports separate resolutions. A lot of the earlier dualhead cards can only run the two monitors at the same resolution. This is fine if you plan around it, but can be limiting.
CRT vs. LCD: LCD's are brighter and crisper (and don't take up much desk space). CRT's have a higher resolution. If you have a 'corner' on your desk, then I recommend a 21' CRT (in the corner) and a 17-19' LCD to the side. Make sure the LCD is 1280x1024 - some of the low-end models are 1024x768.
Once you try dual head, you will never go back.
Finally, ditto on the Matrox - that's what I use and it's rock solid.
Philo
Tue 01 Jul | Mr Jack | I just got a shiny new GeForce4 dualhead. Gainward GeForce 4 power pack. Very easy to setup, good software (none of that dialog box split between two monitors crap) - good image quality, fast for games (not yet tested). It's definetlt worth having.
Tue 01 Jul | Phibian | I use two 17' CRT monitors (soon to be dual 19' - yay!). My setup was a real pain originally because we went the two video card route instead of the dual head route.
LCD wouldn't work for me because I do a lot of graphics work, but I only use my desk to hold the computers (I'm more or less paperless...) so the space issue is non-existent for me.
Switching to two monitors really improved my productivity because I am always comparing multiple screens to each other. I am also one of those folks who keeps a million windows open at once, and having another display to spread them out over also helped.
However, I found that I needed to get a faster machine after I got the two monitors, because with another display to spread out my open windows, I started to open twice as many...
Tue 01 Jul | Fred2000 | There is NO WAY to go back to a single monitor after developing with two.
I can't imagine how I ran my debugger and used my application on one monitor.
At work I have a 19' CRT and a 15' LCD. I usually have my code on the CRT and run my application, view documentation, run a browser, etc. on the smaller display.
At home I have a 19' LCD flanked by two 15' LCDs. They're all nice Samsungs and it's amazing. If you don't have two monitors, stop what you're doing and go get another.
Tue 01 Jul | Mitch & Murray (from downtown) | 20' and 18' LCD displays on my desk. Both driven off the same ATI Radeon 9000 card - the 20' is driven via DVI, the 18' driven via VGA analog output. The Radeon, under XP at least, supports this perfectly. The 20' is at 1600x1200, the 18' is at 1280x1024. One gigantic seemless desktop spread across two monitors.
I would never go back - no way.
It even plays games well.
Tue 01 Jul | Myron Semack | Go tri-head... Three flat panels is heaven.
Tue 01 Jul | Peter Ibbotson | Make sure the video card appears as two cards rather than one wide one with different resolutions.
This stops the problem you get otherwise with message boxes etc. popping up split between two monitors.
ATI certainly had this problem and although their software kludge to fix this kinda worked, it caused other bugs. The matrox cards just get this right (So thats all we buy now).
Note: This is different between NT & 9x.
You will love it! I find using my laptop very frustrating on the road as a result.
Tue 01 Jul | Mike Swieton | One caveat that slipped my mind earlier: fonts.
I am running tri-head under linux (an old install, few frills. I never messed with it much, which may have been the source of my pain).
The issue is this: I have a cheapo LCD (1024x768) and a big Sony that maxes out at 1800x1440. There's no way to take advantage of the big one's resolutions (even 1600x1200 is not really practical), because the fonts that look good at 1600x1200 will fill up a 1024x768 display real quick 8-} My current solution is 1024x768 across all 3, and with 3 I have enough space to not need more resolution 8-}
But keep it in mind, if your screens have different dimensions.
Tue 01 Jul | murph | I need one *big* (as in hi-res) monitor to work on - but am then more productive if I also have a second screen.
Where I differ from some of the above is that I think that one should have a 15' LCD as a second screen - why? because its more or less one's target screen (OK, maybe I need to pitch at 800x600 now but I was able to assume the above in my previous employment).
Develop/debug/make notes on the big screen, run the app (and help and reference material) on the 'little' screen.
Tue 01 Jul | Mike McNertney | Out of curiosity, how do you guys arrange your monitors (physically)? My thought would be the debugger/IDE/editor/whatever on the main screen directly in front of you, and the application/documentation/whatever on the other screen to the side of the main screen. I'm just wondering because it seems like having to look to the side often would start to strain your neck after a while
Tue 01 Jul | Mike Swieton | To the poster that was wondering about arrangements:
I'm linear. I sit pretty far away, so there's not much looking. 3 screens, in a rough arc in the corner about 4 or 5 feet away from me. I keep the fonts big enough that five feet is readable (b