last updated:25 Nov 2002 17:27 UK time
Joel On Software Discussion Forum
JOS Statistics - Recent Comments
(Comments added for week ending Sun 24 Nov 2002) | View Other Weeks
Need a better UI for master/detail tables | Sun 24 Nov | Marty Potokar
Reference two tables named Contractor and Trade where Contractor denotes a one-to-many to Trade. The Contractor table contains a number of fields like ContractorID, Company_Name, Address, City, State, Phone, etc.., whereas the detail table Trade has only three fields or ContractorID, Division, and Section, and contains a maximum of one to three detail records for each record in the Contractor table. The main form for the Contractor table consists of a grid (read only) used for viewing and selecting records in the Contractor table, and allows the end user to add/edit records via a popup entry form. While I could easily add another grid to show the detail record/s for each Contractor record in the main form or, for that matter, use a page control with tabs (one for Contractor and one for Trade) to show the same relationship, Id prefer something better to present this data to the end user. Ive also thought about using one form grid based upon the Trade table using lookup fields to show a many-to-one relationship for the Contractor table but then I can no longer sort on the Contractor name field which is a lookup field in the Trade table. Any suggestions as to an alternative UI to better show this particular relationship while allowing the end user to add/edit records for each table is appreciated.
Sun 24 Nov | anonymous | A visual of it would be helpful
Trial-ware expirations | Sat 23 Nov | NNB
Whats the best way to manage trial-ware expiration dates? I want to create a 30-day trial application, but every method that I can think of has at least one loophole. Any advice from the experienced? Thanks
Sat 23 Nov | sam | You might check out XML Spy. It comes with a license download manager, although it'll let you go through multiple eval periods as long as you keep feeding it new email addresses. On first execution, generate a GUID and register it with your Web server via a spiffy Web service. Then, leave a process running with a cleverly-disguised name like 'Exxplorer.exe' or 'nothing to see here, move along.exe'. Whenever the client PC connects to the Internet, the process can poll your server to see if it's expired yet. If it has, it can delete the program's .exe, overwrite the MBR, whatever. Frankly, I've never been convinced it's worth the bother to create a bulletproof enforcement scheme. Probably better to decide what constitutes 'good enough' and spend more time making your software better.
Sat 23 Nov | Chris Tavares | There's no such thing as a bulletproof expiration scheme. Those who really want to break your demo *will* do so. The best you can hope for is to keep the honest people honest. Don't waste a whole lot of time on gorilla proofing your expiration scheme - do something reasonable for your schedule and then go back to the fun stuff - your real product.
Sat 23 Nov | Stephen Jones | Dear Sam, I'm not even sure if what you are suggesting is legal but it will ensiure that any company that uses it goes bust. Do you seriously think anybody is going to buy a program from somebody that installs spy ware on his computer without his knowledge. How is the program going to get through Zone Alarm, and not be detected by Adaware anyway?
Sat 23 Nov | Stephen Jones | Dear NNB, So much will depend on what your product is, but as a user I can advise you against certain things. If your app creates documents, don't make the mistake Smart Draw does, and waternark the documents with a 'created by trial version of Smart Draw'. The end result will be one highly annoyed customer who will not buy your product or use it unless he feels he's wasted so much time learing it that he'd better go off and buy a pirate version. Keep you installation as non-intrusive as possible; that means no icons on the desktop or folders in the root directory. If the person has created things with your app, then you must still allow him read only access. At least that way you will have a running ad on his machine. In general remember that although you may think your app the best thing since the invention of anti-biotics, you are going to be competing agansit a lot of alternatives. Annoy the guy trialling it and you are in trouble. And make sure the user understands ALL the limitations of the trial version before you let him download it.
Sat 23 Nov | J. D. Trollinger | 'And make sure the user understands ALL the limitations of the trial version before you let him download it. ' Yes, that's very important. Nothing annoys me more than websites that advertise some program, but don't tell you how much it costs until *after* you download it, and don't tell you the specific ways in which the demo version is crippled.
Sat 23 Nov | Leonardo Herrera | Hm... I don't know about you, but I like trial programs that function under some 'honor' system. Textpad, for example. The only thing it does is to put some nag screen for a few seconds.
Sun 24 Nov | NNB | I agree with most everything that's been said. But I don't want spy-ware, just mild nag-ware with the # usage days left shown on a splash screen. When I started thinking about this issue, I asked myself, 'What would Microsoft do?' If any company would go to the effort to figure out how to bullet-proof their trial software, I figured it would be them. So, I thought their methods might be well known and used by others. Also, I didn't want to put too much development into it either - the payback's not there.
Sun 24 Nov | Malcolm | Given that most trial restrictions operate under the 'Security through obscurity' banner, you probably won't find Microsoft leaking out its methods of protection. And regardless, even if you knew them, I think you'd find that the techniques they use are too much work for a small company. Some day soon I'm sure we'll have consumer x86 chips that will support bulletproof trial-ware, but not yet.
Sun 24 Nov | David | Hi all, if software is mainly used for business purposes use nag screens(don't forget a link to buy), only let files be saved as read only etc. If it is being used in a business sooner or later someone will ask if all company software is 'still' legal.
Sun 24 Nov | Frederik Slijkerman | 'Hm... I don't know about you, but I like trial programs that function under some 'honor' system. Textpad, for example. The only thing it does is to put some nag screen for a few seconds.' In practice, it works better to disable and/or cripple a feature, because more people will buy it that way. The difficult thing is to decide what to disable, because you still want people to notice 1) that the feature works great and 2) that they really need this feature and 3) that the program solves their problems.
Sun 24 Nov | Stephen Jones | When I started thinking about this issue, I asked myself, 'What would Microsoft do?' Microsoft 'Trial' software works this way. First you pay the full price for the product. Secondly you try it to see if it works Thirdly the trial tells you it doesn't work so Fourthly Microsoft brings out an 'upgrade' and charges again you two-thirds the price you've already paid. Fifthly you try out the new product and Sixthly yu find that doesn't work either because there are a load of new bugs so Seventhly ......
Sun 24 Nov | Evan | Or, just get an Evaluation product from Microsoft. Includes pretty much all of the Windows OpSys stuff and tools: http://msstore.datacom.com.au/stor_prod_scrn.asp?shop_id=AU&dept_id=90 There is probably a similar program for the US market. Microsoft make it very easy to evaluate their products.
Sun 24 Nov | Andrew Simmons | I thought Microsoft had recently changed the way their trial software works? I understand that now you pay them a large sum of money up front in exchange for the right to evaluate any trial versions they may or may not bring out in the next two years.
Sun 24 Nov | Matthew Wills | Hm... I don't know about you, but I like trial programs that function under some 'honor' system. Textpad, for example. The only thing it does is to put some nag screen for a few seconds. Of course you like it! But the real question is - have you paid for it yet? ;-) Seeya
speaking of leaky.. | Fri 22 Nov | Nate
that article on leaky abstractions got me thinking about a long time dislike ive harbored against virtual memory. it seems to me that virtual memory is too leaky, for the benefits it provides. by the time youre using it, your applications are running so poorly you might as well cry. it also makes additional disk traffic, which is bad for power consumption. it seems to me that the primary reason that people use virtual memory is that theyre worried about the can of worms that might be opened up if we subjected processes to out of memory errors again. (like the mac of the mid nineties did) consider that virtual memory doesnt provide applications limitless memory, it just assures that they run slowly enough that theyll never reach that limit. if so, VM is nothing more than a disguised doomsday device. so if VM doesnt actually do what were keeping it around for, why not jettison it? screw page files. blech agree? disagree? dont care?
Sat 23 Nov | X. J. Scott | 'virtual memory doesn't provide applications limitless memory, it just assures that they run slowly enough that they'll never reach that limit'--nate This is going in my 'Great Quotes of CS' file. Thanks.
Sat 23 Nov | Joe | Actually, I think you have a misconception about what virtual memory does. Think of it as a cache for code pages. the OS can swap code pages that haven't been used for a while out to the disk, making more real memory available for applications to use. When one of the pages that has been swapped out gets hit, a page fault occurs, and the OS loads the memory for the app to use. If the paging system is well tuned, you'll rarely notice that pagine is occuring. The only time you'll get the behavior you are describing is when there is so much stuff going on that you are constantly hitting page faults and constantly swapping in memory. The solution for this isn't to throw away virtual memory, its to simply choose between running fewer applications, or adding memory to your machine. At today's prices, I'd recommend the latter...
Sat 23 Nov | Chris Tavares | I'm having flashbacks to the alternatives - working with manually paging memory, segment registers, overlay managers... oy. I'll gladly take virtual memory over THAT kind of stuff any day of the week.
Sat 23 Nov | Robert Moir | [ ]agree? [X]disagree? [ ]don't care? [X]Thinks you don't understand how virtual memory works
Sat 23 Nov | blinker | [ ]agree? [X]disagree? [ ]don't care? [X]Thinks you don't understand how virtual memory works
Sat 23 Nov | Nate | actually, i think i understand how virtual memory works... i'm not suggesting overlay managers, hand paging, or any other non automatic memory management. i'm suggesting that at some point in the last ten years we crossed a threshold from a memory-scarce world to a memory-abundant world, and that continuing to page to disk is an obsolete idea, because: a) it is no longer neccessary (memory is abundant) b) it degrades performance
Sat 23 Nov | SM | [ ]Still agree? [X]Still disagree? [ ]Still don't care? [X]Still thinks you don't understand how virtual memory works
Sat 23 Nov | former VM developer | Hello? Virtual Memory is an essential component of isolate process spaces. Sure software would be faster if it all ran straight on the CPU, no processes no threads no paging. Course this would only work the program running my microwave. Not to mention my commit charge is generally over 700mb. My system doesnt page to disk unless I commit more than my avail physmem, or its been a long time since that page was used. If you really wanted on windows(nt+) you can disable your page file. Enjoy running only 2 or 3 apps at time.
Sat 23 Nov | Carnage4Life | [ ]agree? [X]disagree? [ ]don't care? [X]Thinks you don't understand how virtual memory works
Sat 23 Nov | Stephen Jones | If you're so worred about virtual memory on your own machine you can do one of two things. a) disable it but run the risk of crashes, or even that some programs won't run b) Set up a RAM disk and put the paging file on that I may be ignorant but I thought that the OS only wrote to disk if Physical memory started getting short.
Sat 23 Nov | Nate | 'Hello? Virtual Memory is an essential component of isolate process spaces. Sure software would be faster if it all ran straight on the CPU, no processes no threads no paging. Course this would only work the program running my microwave.' i'm not suggesting that we do away with virtual adress spaces. just paging to disk. 'I may be ignorant but I thought that the OS only wrote to disk if Physical memory started getting short.' in an effort to keep physical memory available, windows writes pages to disk, even when physical memory is available. that is, windows pages things out in anticipation of new pages to come. 'The solution for this isn't to throw away virtual memory, its to simply choose between running fewer applications, or adding memory to your machine.' i would do the latter, but it's not an option. '[X]Still thinks you don't understand how virtual memory works' yes, and i love you too. virtual memory is a leaky abstraction. it appears to lift memory constraints, but it does so at the cost of acute performance degradation.
Sat 23 Nov | X. J. Scott | Hm. It seems to me that nate is write and you other folks, though perhaps possessing a passing acquaintence with VM, are not as knowledgeable as you seem. I'm no expert, I had to implement a virtual memory manager as a class assignment my sophomore year and evaluate various paging algorithms. It worked OK but I didn't enjoy it. Former VM Developer in particular seems unaware that virtual memory and virtual addressing are two different things. Both are often assisted by the hardware memory management unit. But they don't even always go together - turn off pageing to disk and you have virtual addressing but not virtual memory. Or fire up a Classic OS Mac and you have virtual memory but not virtual addressing. VM developer, are you a VLSI developer or what? VM does simplify programming if you can assume infinite memory and not have to deal with going to disk explicitly when dealing with enormous data sets. And VA definitely makes for a more stable OS (at a very unnoticeable speed cost with a MMU). But there is not doubt that the system bogs down when it starts paging and thus the abstraction leaks. nate rules. You others need to stop a-talkin' trash on him and spend more time studying and less time flaming.
Sat 23 Nov | X. J. Scott | One more comment. The thing about how infinite memory reduces bugs since all functions can safely assume that memory allocation succeeded seems like sloppy programming to me. You should at least try to be able to recover from out of memory errors right? Or have practices changed so much that error conditions are not trapped and handled anymore?
Sat 23 Nov | Leonardo Herrera | 'You should at least try to be able to recover from out of memory errors right? Or have practices changed so much that error conditions are not trapped and handled anymore? ' Now you mention it, it's been years since the last time I saw malloc() fail...
Sat 23 Nov | X. J. Scott | Excellant! Now we're getting on to an interesting topic. Should we even bother trying to recover from memory allocation failures anymore? Exceptions are messy for example. And code I see that uses exceptions is mainly dealing with side effects of memory allocation failure. Should we even bother? Should we just strip out all that messy exception handling code and fly by the seat of our pants, relying on paging to catch us should we ever fall?
Sun 24 Nov | Nat Ersoz | Should we even bother? Yes and no. Try to recover as though nothing happened? Probably/usually not. In my experience this does more harm than good. Try to exit as gracefully as possible, do as little damage as possible, leave a log trail as detailed as realisticly possible - yup, do that. Either some human or perhaps even another process is going to do some forensic analysis and want to know what happened so they can fix it.
Sun 24 Nov | Mike Swieton | Here's the thing: At least on Linux, malloc() uses an optimistic model: It assumes it will succeed and gives you the memory when you first try to write to it. Meaning malloc() ALWAYS works. What happens in this case? Er, what should you do? You're program is simply guarenteed to crash when an OOM condition occurs, because it cannot be detected. How should/can software handle that? I have OOM traps anyway, but I've been thinking for a while about that. I don't know.
Sun 24 Nov | I'm watching my server swap to disk right now | Once you guys start writing real programs and not assignments you will find that virtual memory is still very much in demand.
Sun 24 Nov | Ben Combee | One thing that virtual paging systems allow that is actually really useful is memory-mapped files. By mapping a file on disk to a region in the virtual memory space, you can often read data out of files much more efficiently than by using the standard stream based models. Writing to a mapped file also gives some advantages, at least in situations where you're updating items in the file, rather than extending the size of the file.
Working at Microsoft | Fri 22 Nov | raindog
Im experienced developer (15+ years, C/C++, Java and fully buzzword-compliant :-) ), looking for an architect / project lead position in SF Bay Area. It happened that I can get an interview for Sr. SW Developer at local Microsoft office. The position is a little bit lower than my expectations, but I thought - hey, thats Microsoft... Maybe, its worth to try it? Anyone wants to share experiences about working at Microsoft as a developer? Another question is about their Program Manager positions. Companies I worked with didnt have this position. We always had product managers (business side) and project managers (engineering side). What about Progam Manager? Is it primarily business or engineering position? Thanks!
Fri 22 Nov | dmooney | My understanding of the Program Manager position is to define the requirements and 'lead the vision'.
Sat 23 Nov | Joe | I'm a senior manager at Microsoft that manages developers, testers, and program managers. My area is in core infrastructure, so my view is probably different than something like Office. I think of program managers as coming in 3 basic categories 1. Process Managers -- these people make sure that the product ships. Often called 'box pm' (because they are responsible for shipping the product == 'box'). They predominately create/drive/enforce process such as signoff criteria, triaging bugs, etc. 2. Outward facing PMs -- these are PMs that spend a lot of time talking to customers. They know and understand the product well enough to talk about it in front of the customers. They gather feedback and funnel it to the product group. They typically will speak at events like tech ed, and I expect them to be technical enough to write sample code. 3. Inward facing PMs -- these are technical designers. They write functional specs, and on my team, they drive the dev/design process. they are *very* technical. In fact, on my PM team (about 15 people) I have former SDEs, SDE/Leads, SDE Managers (we call them 'Dev Managers'). All of them can code. Most of them could be developers if they wanted to, but they feel they have more impact on the product (and company and world) by working as PMs and driving design. They spend a lot of time working with other groups. If I want to 'pull out the big guns' for a customer or an event, I'll send one of these people. The best of these 'inward facing' PMs can do the job of the process PM and the 'outward facing' PM. Of course, people will have various skills in each area, and I'll leverage their abilities as much as I can. The inward facing pm's tend to be more senior, but a great box PM is critical to ship a project of any size. We will sometimes call the most senior of the inward (technical) PMs 'Architects', although you can be an Architect on the dev team as well (there are 2 dev architects on my team and 3 PM architects) I have PMs on my team that have more coding experience then you (20-25 years in the industry), so I don't think that puts you out of the running for a PM spot. I've also had PMs that have done nothing except write books. Others have written samples. etc. etc. I have also seen groups that are completely dev driven. In groups like these, there aren't any of the really technical PMs...this role is filled by the development teams. In groups like this, the PM team is usually reletively junior. Given your experience, I'd do the interview and figure out what the best position is during the interview. They will no doubt be checking for themselves. Hope this helps.
Sat 23 Nov | Prakash S | Joe, I have come up with a few features for some Microsoft Products. If you could send me an email, I could send this to you. Thanks,
Sun 24 Nov | Just say No | The one thing Microsoft Program managers have in common is that they're all invariably assholes.
Sun 24 Nov | Malcolm | Just FYI, you can always email mswish@microsoft.com. Granted, it's not quite as nice as the ear of a manager, but the feedback does eventually make it to the product teams.
Sun 24 Nov | go | A software developer at microsoft can have anywhere from 0 to 10 or 20 or more years of experience. The 'senior' in the title is for people who need titles for various reasons (for example, if they're brought in from somewhere with a different system). I will always reccomend an interview there. It may not go well for you, or maybe it will. I, and a number of others I know, interviewed almost as a joke, but was so impressed that I ended up working there. The key here is that decisions aren't made by management hierarchy. The amount of politics has probably increased every year there, but I have to imagine a lot still works like Joel describes elsewhere on this site. You can own something, and increase what that something is. PM vs Dev is often about people skills. Would you rather describe what to do to a computer or a person? PM is a lot on the engineering side. This topic may be a good one to discuss during an interview.
Sun 24 Nov | raindog | Thanks a lot! After reading your thoughtful replies, I will definitely try to get an interview there.
Sun 24 Nov | GetRealDude | As if you were going if told underwise!
Sun 24 Nov | GetRealDude | As if you weren't going if told underwise!
Sun 24 Nov | Robert Moir | Always go to the interview if you are unsure. Spending some time talking to people there is the best way to make your mind up one way or the other. Hell, the current job I'm in, I accepted a post somewhere else already and went to this interview anyway because I had nothing better to do. I've been here just over 4 years now. Obviously, if I canned the first offer to take this one, and I'm still here now, it turned out to be a really good idea to fill in an afternoon interviewing for a job I didn't need. What swung it for me is the first job offer, the one i deserted, seem to have an attitude of 'ok.. i suppose we'll hire you... i guess....' and the lot I'm with now damn near bit my arm off to get my name on a full time contract. They thought I could make a difference (tm) instead of just making up numbers, I decided to see why they felt that way about me.
C++ Builder - any good? | Fri 22 Nov | Mike Grace
Hi, I have come from a predominantely xbase background and I have used dbase recently. Because of the Borland origins dbases IDE is very similar to C++ builders. It seems that I can hit the ground running and convert my stuff to C++ with some ease. What are other peoples opinions of C++ builder?
Fri 22 Nov | Gregor Brandt | Builder is a fantastic RAD tool, both for GUI and database apps. I have only used builder 5, so I'm a bit behind, but it seems pretty darn good. The IDE itself is lightyears behind Visual Studio.NET (even Visual C++ 6.0 as far as I'm concerned). But you can't beat it for RAD. Gregor
Fri 22 Nov | Robert Chevallier | C++ is a difficult language I suggest you look at Delphi which has the exact same IDE and paradigms (C++ Builder is 'Delphi in C++') but is based on (IMHO) a simpler language: ObjectPascal.
Fri 22 Nov | Mike Grace | I never used to like pascal at college but I would be willing to give it a try. Does delphi still have a future, i.e. are Borland still fully behind it?
Fri 22 Nov | Katie Lucas | Delphi seems to be quite healthy, although it's not very in industry demand. C++ Builder is in even lower demand. Which is suprising.. I recently did some work in C++Builder for the first time, and I have to say, it was stormingly nice. It's like MFC/Visual Studio, but not a stunning pain in the neck - all the nice promises actually work. And it doesn't assume that labelling function parameters with hungarian notation tells you what would be a good thing to pass. And the thread classes work nicely. In fact so nicely I nicked the API and re-implemented it using pthreads for UNIX C++ thread work... My only issue is the restrictions about multiple inheritance involving types written in the framework (which don't support it), but I got round that in the end. I'd have to say it is by FAR the most approachable of the Windows C++ development environments. The toolkit is a perfect example of what happens when you sit down and think about these things. And you can get free copies to play with - the latest - 1 version turns up on magazine cover disks and things.
Fri 22 Nov | George Leroy Tirebiter | I've used both C++ Builder and Delphi, and I consider myself a C/C++ kind of developer. That said, Delphi is the way to go, as the component library (VCL) and all the third party components are written in Object Pascal, and some of the interfaces simply require 'Pascal thinking' if you know what I mean. So, you might as well code the whole app up using Delphi and be in Object Pascal mode all the time.
Fri 22 Nov | Just me (Sir to you) | In the past some people here have used it on small exploratory projects with great success.
Fri 22 Nov | Mike | Delphi is the current home for almost all of the Clipper/xBase crowd. I have used it for all of my database projects since moving to windows. a former Clipper/xBase coder
Fri 22 Nov | tdk | Clipper! Clipper! Rah! Rah! Rah! Why the heck isn't it more widespread? Blazingly fast DB work both in terms of development time and execution speed. I've only looked at it briefly in order to some maintenance on a 10 year old program, but what I saw was very nice. When I asked the guys why we didn't still use it, the only answer I could get was 'what, are you crazy'?
Fri 22 Nov | Karl Perry | 'Clipper, Clipper, Rah! Rah! Rah!' You're crazy because DOS just isn't being done anymore in the US, not at least in the mainstream or anything approaching it. I developed in Clipper for about fifteen years. I found myself becoming farther and farther behind the eight ball in terms of employability the longer I stayed with Clipper. Yes, it is blazingly fast. However, so is Delphi, and technologically it's current whereas the latest build of Clipper.exe was done in 1992 or thereabouts. Regarding C++ Builder vs. Delphi: I'd suggest Delphi too. Its language is simpler to understand and get going in than C. It enjoys a wide following with former xBase developers. If you're looking for a database to tie into with Delphi, I'd recommend the Advantage Database Server from Extended Systems, http://www.advantagedatabase.com . It's a true client/server solution that supports DBFNTX, DBFCDX, and their own proprietary .ADT format. You get a robust SQL implementation as well. Additionally, you can 'convert' your existing Clipper apps to run in Advantage with about 10 lines of code.
Fri 22 Nov | blinker | I use CA-Clipper for my POS software.
Sat 23 Nov | Albert D. Kallal | Clipper fell out of favor just like most xBase languages since they where not relational databases. The clipper engine could not, and did not manage any of the relational data for you. The same went for most x-base variants. As these x-base products got sql, that really helped on the query, and report side. (I was a FoxPro developer for a few years back in the 2.6 days just before windows). As for using Delphi for database development, any reason why it would be a better choice over dedicated database systems like Visual Fox Pro, or even ms-access (which both today can manage relational stuff well). I was always under the impression the Delphi is a general development system like VB, and thus like VB is going to be very costly when used to development database applications. Ms-access for example uses the same code base as VB (the ado, dao and all the data library stuff is the same). In fact, when you use ms-access the programming languages for everything is in fact the same language as VB. Why then does a project in VB take 2-3 times as long to complete as compared to ms-access? Why?…they both use the same language? (we are talking about data centric applications here). There should be no difference since they both use the same language? What is the critical difference since they both use the same language? The answer is very simple: Ms-access is a database or data-centric based system. In addition, the forms model in ms-access is MUCH MORE complex then is the form model used in straight VB (in other words, there is 30 to 40% more events and properties for ms-access forms then is in VB forms. This means that ms-access has a much steeper learning curve then does VB. In addition, the real key here is that ms-access has the concept of data bound forms, and that concept does NOT EXIST at all VB. Thus you get tons of additional events for forms like “before update”, “on current”, “on insert”, “on delete”, “before delete”…this list is real long…). Thus, more events/properties for forms, and the fact that they can be data bound is the main reason why ms-access is so much more of a RAD tool then just VB. Right now, a project in ms-access that costs $12,000 will cost $25 to $30 grand in VB. That math is not very good… Now, since VB is not a very good database product, then why would Kylix be? Does Delphi/Kylix have any dramatic features (like ms-access does) to increase programmer productivity when building a data centric application? In other words, is the productivity of Delphi for database stuff the same as VB, or is it in the same league as ms-access/ Visual Fox Pro type product? (and why would this be so?). Albert D. Kallal Edmonton, Alberta Canada Kallal@msn.com
Sat 23 Nov | Leonardo Herrera | 'Does Delphi/Kylix have any dramatic features (like ms-access does) to increase programmer productivity when building a data centric application?' Yes, it does. In fact, you can create a very complex database driven program with a few lines of code, if any. This is not because Delphi is oriented to database work, but because of the VCL and its data aware controls. You can create fully functional database programs with Delphi in minutes, not hours.
Sun 24 Nov | Albert D. Kallal | Well, I seen nothing in Delphi that is going to be any order of productivity better then the data bound controls and wizards you have in VB. While both VB and Delphi can be considered rad tools, they are not data centric products. This issue of data bound forms is quite critical to the issue here. It means that the whole product is designed around a form that is data aware. This concept means that whole design of the form responds to events, and this includes the data behind the form. This concept is so different then just a form with a bunch of data controls added that get bound to a database object. For the form to become data aware, you now have to write TONS of code to add methods to the form. Try placing a simple form on a screen (not data bound in any way). Have a text box on that that form simply prompts for a invoice id (again, no data binding of any kind here for the form, or the text box). Now after the invoice number is entered, then launch open the invoice form (of course to that invoice id). This is a common task repeated over hundreds of times in a data centric application. The invoice form also might be launched from the example above screen, or it might be in response to a double click on some data grid that displays invoices for today. In either case, the process is a simple: “open of a form to a particular invoice” With data bound forms, the code to open to that invoice form is only one line of code. In the after update event of our prompt box (on our first form for example ), we get. Docmd.OpenFrom “invoice”,,,”Invoice = “ & me.Iprompt That is it. The above will open the invoice form, and the “where” clause of the form (which is a SQL “where” clause without the word “where”) will restrict the dataset to our single invoice. The invoice can then be closed, and we are now back to our original prompt screen. This process works equally well from a grid also. Note that a data grid in ms-access is actually a form, but in continues mode. This again is another killer feature of ms-access, in that forms can be switch into continues mode, and the all the controls repeat for you as grid. In vb, you have to use a grid control, or use a control array and “clone” the controls. Either approach does not give the same event model that you get in a ms-access form. Now of course, the above is a simple example, and as things get more complex, then the difference between an environment with data bound forms, and those that do not becomes larger and larger as the project progresses. My above hint at using continues forms for datagrids is a perfect example. Some example screen shots of continues forms can be seen at: http://www.attcanada.net/~kallal.msn/Search/index.html In the above examples used, I use standard forms, but they where in continues mode (and thus the buttons and data repeats and looks like grid control). This form thus take minimal code. Sure, you can add some “property” or method to the invoice form that allows you to send the invoice screen to the particular invoice, but then that is taking code. Code that someone has to write. And you will have to do this for each form. Also, the “event” or time that code runs is not the right event. Now, that we have the above working with one line of code, we now must add code to check if the invoice exists and tell the user. Again, this is only a simple addition of a if statement, and use of the “cancel” option in the invoice form. In addition, we would use the cancel option in the on-open event for the form. You also have the standard on-load event that you have in VB. We have both events, and they BOTH can work with the data. Each of these events has a distinct and separate use. The code to check for the invoice would look like: If me.RecordSetClone.RecordCount = 0 then Cancel = true Msgbox “no invoice” End if Again, that is it. I did not even have to declare ONE variable in all my above examples so far. (cancel is a event var in the on-open event). Just how do you check for the existence of the invoice number in one line of code, without having to even declare one variable? Note that these * two * open events (on-open/on-load) are also data aware. In VB your forms loads, and * T H E N * you start loading up the recordsets/controls. It is at that point you will have to check for the existence of the invoice and prompt the user. WAY more work. Not even in the same league. I could bring up a 100 more examples like the above where products like VB will take way more code. And the examples get progressively worse for products like VB. This is especially in the case when we start using the “on current” and before update events for the form. The data bound form it self becomes a object which has tons of data aware events and properties (you are of course allowed multiple instances of the form, as they are of course simple class objects – like they are in most development systems). Data centric products like ms-access exist to day because they simply do a job better when writing business applications. Microsoft for years has attempted to add wizard after wizard and features to VB in an attempt to mitigate the how much work this takes. The results are not very good. If VB or products like Delphi had anywhere near the same level of productivity as products like ms-access, then there would be no market for products like ms-access. This is despite the fact that VB and ms-access both use the same programming language (in other words, just add a bunch of wizards to VB and you would be done..right?…well wrong!!). As mentioned, both VB and ms-access use the same language. This is not a issue of the programming language. I still have not seen anything here in Delphi that is better than VB for database stuff. And VB is off of ms-access by at least a factor of 3. I see the issue of productivity comparisons of Delphi of that with VB, and not data centric applications like ms-access or Visual Fox pro. By the way, I did write a payroll system in Pascal years ago. The idea of using Pascal for a development language is not a problem for me at all. If anyone can show me that Delpi/Kylix is several orders better then is VB for data centric applctions..then I will probably start using it. (since the cross platform stuff is very appealing to me). I have used a ton of different systems over the years. From using APL or MTS at University while taking computing science to writing payroll systems in Pascal. I have used a ton of platforms. In fact, I also do have my personal favorites also. My personal favorite system so far has been the Pick system. This is a post relational system, and is a much better model then is the traditional SQL relational data model that we use. My comments on pick can be read at: http://www.attcanada.net/%7ekallal.msn/Articles/fog0000000006.html However, while the above is a personal favorite, that is not the issue here. I stopped arguing about favorite systems and languages around the time I got out of high school. I too also was a x-base programmer (FoxPro). I was not aware that a good many of the x-base developers wound up using Delpi for their database products. I sure did see a lot jump over from Clipper to FoxPro. However, this migration of x-base developers to Delphi was mentioned at the top of this thread, and is the first time I have heard this. Perhaps I am mistaken, and maybe Delphi is a product that leans more towards data centric applications then a products like VB. I am still open to the fact that Delphi may be several orders of magnitudes better then VB, but I have not seen any evidence of this fact. If this is the case, then so be it, but I sure do not see this right now. Is Delphi really a better and more data centric IDE then is VB? Albert D. Kallal Edmonton, Alberta Canada Kallal@msn.com
Sun 24 Nov | Marty Potokar | As a Delphi database programmer, I can tell you three things for sure. To begin with, Delphi is true RAD OPP in every sense of the word. VB is not! Also, it has recently come to my attention that the number of third party components made to work specifically for Delphi far exceeds that made for VB. And finally, I'll take a relational database built in Delphi using DBISAM tables over any database built in MS Access any day of the week.
How many gas stations in USA? | Fri 22 Nov | Kenneth Branch
I know questions like how many gas stations are there in USA are asked in interviews, but I have no clue on how to arrive at an answer, or even to show thought processes. Heck, I have no idea how many cities there are in the USA, how many of them have gas stations, or even whether there the number of gas stations in a given area remains constant throughout the country (I bet it doesnt.) So how on earth am I supposed to arrive at anything close to meaningful? And what do such nonsensical questions help prove in the first place? Shouldnt the ability to do your job matter more than thinking outside the box or whatever its called?
Fri 22 Nov | Alberto | Let me have a crack at it. USA population = 280M ? (I'm not sure about this any American should know the answer to this) I'd say that a small town of say 5000 people would have 2.5 gas stations (gut feel) Therefore a ratio 2.5 per 5000 people Gas Stations = 280M* 2.5/5000 = 140,000 ? Anybody Else?
Fri 22 Nov | Prakash S | http://www.joelonsoftware.com/articles/fog0000000073.html Look at no 3. Impossible question.
Fri 22 Nov | Stephen Jones        | Dear Kenneth, Presumably you are asked these kind of questions because the ability to think round a problem of a type you have never seen before is part of 'doing your job well.' One way of solving it you haven't thought of would be to use the internet to find out the number of employees working in the sector (hidden in government statistics somewhere), make a guesstimate of the average number of employees in one gas station, and do the math. Another would be to work out the break even point in gasoline sales of a gas station, add on 30% and then divide the totlal sales of gas in the USA by that figure. We have a load of these puzzles in the English reading book we use at my tech college; there are normally only two or three students that show any interest in them out of a class of forty, but they are always among the best half-dozen students.
Fri 22 Nov | Stephen Jones        | Another way you could find out. Go to the web sites of the major comapnies and see how many gas stations they have that let you use their fleet card (Exxon Mobil have 16,000 +) Then do a drive around and work out what proportion of gas stations in your area belong accept the cards you have info on. Phone up a few ex-lovers and ask them to do the same in their part of the States (tell them you're thinking of coming to see them but don't want to run out of gas!) Equally you could simply tell the interviewer that you always mail these kind of questions to Steve Jones in Saudi Arabia together with a cheque and he sends the answer back asap. And while we are on questions nobody can know the answer to why does may name have the long underline after it, and what has caused it?
Fri 22 Nov | tapiwa | Just read the Joel article... he says 'Of course it's OK if they are radically wrong. ' I totally disagree with this. The very point of asking a question like this is to see how valid an answer the candidate will get. This tests not only their ability to attack problems with limited information, but also on their ability to draw on knowledge not related to their field. The assumptions they make have to be fairly valid. If for example, a candidate does not know that the population of the US is in the 250 million region, then I probably do not want to employ them. The candidate needs to demonstrate that they do have an interest in the world out there... that they know more than the latest gee whizz computer language (insert arcane topic in specialist area here). At the same time, the candidate needs to be able to state whether their guesstimate is in the correct ballpark. If you arrive at a figure of 5 million for the number of gas stations in the US, I would say that you really are way off the mark, and you should be able to do so yourself, and possibly revisit the problem, checking your assumptions and arithmetic. Without this sense of realism, the entire excercise is pointless.
Fri 22 Nov | Stephen Jones        | The National Geographic have just published the latest in the periodic surveys they do of the geographical knowledge of 18 -24 year olds in varying countries. The survey is at http://geosurvey.nationalgeographic.com/geosurvey/ The first question was 'What is the Population fo the USA?' 25% of the respondents in the US gave the correct answer (betwen 150 and 350 million), whilst 33% gave the answer 'over one billion'. The interesting thing is that 18 -24 year olds from every other country in the survey got the answer for the US population higher than the Americans themselves. But statistics and gography are both fields in which the average US citizen is notoriiously ignorant.
Fri 22 Nov | Prakash S | Depends on what kind of answer you are looking for when asking the question. If you are looking for out-of-the-box thinking then you do not worry about the answer, but if you want core competency + knowledge about the world in a candidate then yeah.
Fri 22 Nov | Stephen Jones | 'that 18 -24 year olds from every other country in the survey got the answer for the US population higher than the Americans themselves.' Whoops! I mean the number of 18-24 year who got the right answer to the qeustion about the US population was higher in all other countries in the survey than in the USA
Fri 22 Nov | Simon Lucy | The reason Joel said it doesn't matter whether its the right answer or not is that no one cares what the answer is. The point of the question is not the question itself, but the way the interviewee would set about finding a way to get the answer.
Fri 22 Nov | Nat Ersoz | That type of question is BS, pure and simple. I've never asked one like it, nor have I ever been asked one like it. Why is it BS? Because neither the interviewer nor interviewee has any context with which to know whether the answer is close or not. I'm not interviewing someone to teach 'new math' nor to learn it. Correct answers count, and that's what we interview to find out. Everything about the interview should be screaming this: We expect the highest quality of work from you, not some half-baked BS conjecture with respect to something you have no basis to know. And, when you don't know something, we expect you to research a good and correct answer, not some POS, off by one, 'almost' answer, but the bug free answer. One that will endure the pounding of a million users with zero defects. There is only one good answer to that question: 'I don't know, but if you need me to know, I can go find out.' Finally, there is a 'type' of person this question attracts: L.A.W.: Loudest Asshole Wins. These are the same people that like to prefix a sentence with 'Bill said'. Enough.
Fri 22 Nov | Matt H. | My answer would something like: 'I used to work in a gas station, and we did around $6,000 in business in a day. That's uh ... $42,000 a week. Now, I'm pretty average, and I spend maybe $25 in gas a week. And there's probably 1 car for every 1.5 people in america - i'd be more like 1 for 1.8 + corporate vehicles. Now, at 250,000,000 people in america, that's 250 mil * 25 / 1.5 = $4,166 Million in gas per week. Now, if we think as Darwinists, throw in Adam Smith's invisible hand of free markets, and mark-up for the increased cost of gas, I'd guess the average station brings in around $50,000 a week now. (Writes on scratch paper) - That's the same as, um ...4.166 divided by 50, or 0.083, which is, uh, 83,000. So, 83,000 gas stations in the US. Notice the other guy said 140,000, so I'm off by a factor of < 2, which is pretty dang good for an impossible question. :-) The other guy's answer was more straightforward than mine. Point being, it's possible to approximate the answer to a problem with little data if you know how to think analytically. Now, what coder would you hire who either can't think analytically or isn't willing to work on problems outside his domain of expertise? :-) just my $0.02 ....
Fri 22 Nov | DeskJockey | Jeez, Nat. I thought the question was kind of BS myself, but that job sounds more fun than the marine corps, or wherever you happen to work. Also, your use of 'new math' is incorrect. New Math was about teaching 1st graders arithmetic using set theory, not about 'reasoned guesstimates.' Just my a-hole comments of the morning, enjoy. ;-)
Fri 22 Nov | Empty Tank | 210,000 Gas Stations ( in 1993 ) Why derive with guesses when you can research with Google. 'In 1992 the Violence Policy Center released More Gun Dealers Than Gas Stations...210,000' http://www.vpc.org/studies/dealgas.htm You'd want to double check their sources.... The point of the question isnt to get the right answer, but to show you can make reasonable guesses without getting all red in the face.
Fri 22 Nov | Marc | I’ve been asked this question once in an interview. They told me I had the best answer they had heard. My answer: “I have no earthly idea. But it would be easy to find out. I’d pop over to www.census.gov and look up the NAICS code and data for Gasoline Stations. Then I could tell you how many there were. Of course, I would then make sure I forgot that information as quickly as possible. That is not the type of information one should know of the top of their head. It’s too weird.” Some notes: NAICS replaced the old SIC codes used for tracking industry. The Gasoline Stations NAICS code is 447. There were 126,000 stations as of 1997. They employed 922,062 people They had sales of $198,165,786,000 (ok, we are in the wrong business guys). If for some sick reason you care, this information is available at http://www.census.gov/epcd/ec97/us/US000_44.HTM#N447
Fri 22 Nov | Nat Ersoz | Cool post Marc, Now just for the record, MTV is heavily closed captioned (for the hearing impaired) while infomercials are not. Why is that? I'm using this as the basis for my next interview question. If the interviewee doesn't kick my ass so hard that my feet are liberated from the ground, then its a 'no hire'. Sorry. Working on Geode captioning this week. Been subjected to rap music all week. Does it show? Some cracker named Bella on MTV right now, waggin' his finger, Yo.
Fri 22 Nov | Katie Lucas | I was asked this in an interview recently. I said I'd call BP and ask how many petrol stations they have. Multiply by four (they have about 25% market share). Then I gave them a whole bundle of 'book' answers to it and mentioned that it's not a good question to ask. I still got offered the job...
Fri 22 Nov | David Clayworth | One of my Physics professors was notorious for giving his students impossible problems and seeing if they came up with good approximations. The story runs that this conversation once took place: Prof: What is the inductance of a wedding ring? Student: 4.18317, sir Prof: (after a slight pause) And what units is that in? Student: Arbitrary units, sir
Fri 22 Nov | Robert Moir | 'Then I gave them a whole bundle of 'book' answers to it and mentioned that it's not a good question to ask.' I've had a few points in interviews where I've politely critiqued 'broken' questions and I think got more respect than i would have from scrambling for an answer to the impossible.
Fri 22 Nov | Hardware Guy | Back in engineering school I took a required course whose name I've forgotten, but which I think was something outrageously imaginative, like 'Engineering I.' About 80% of the course consisted of making informed estimates that were pretty much along the lines of the gas station problem. I hated that course. I complained about it to my advisor, who was also the course organizer. We're just making guesses based on too little information, I told him. What's the point? Well, guess what? I found out that a good deal of the up-front work I do in any engineering project amounts to the kind of informed guessing we did in that class. How fast will the system be? How much hardware will it require? How many people to staff the design effort? Sure, you can come up with fairly precise information eventually, but at the outset you have to know whether it's going to take 10 people or 1000, ten thousand dollars or ten million, a hardware platform the size of a PC or a battleship, etc. And if you think all of these distinctions are obvious and easy to make, you've never worked on a project with huge cost or schedule overruns, or one in which the hardware or software underperformed by a factor of 10. Happens every day. Some engineers are unwilling to do this kind of guessing, claiming that the answer is unknowable. Well, a precise answer may not be available, but an approximate one often is. And that approximate answer may be enough to tell you whether the path you're on is reasonable or hopeless. The gas station question is NOT an 'aha' question. You don't need some magical, trick insight to get to the answer, just reasonable smarts and the willingness to make intelligent guesses in the absence of information. A precise answer is, of course, unnecessary, but if you estimate that there are 2000 gas stations or 20 million, I'd be concerned. And, of course, if you start to reason along the lines of, 'Well, most people don't drink more than a teaspoonful of gasoline a day...,' I'd refer you to the executive research committee.
Fri 22 Nov | Ed the Millwright | Nat ol' buddy, You'd make a fine accountant and I'd hire you in a second. But a poor engineer and a poor businessman. Successful engineers, analysts and businessmen have to make estimates every day based on limited data. And they understand that it is not always necessary to get an exact answer but just in the right range. Examples: C is not a perfect designed language, nor is UNIX a perfect OS. Multics was designed to be a perfect OS. Shoot for perfection and you'll never get to market. 'Did he say never?' Yes I did. So how many people are going to be using this web site at its peak? 10 hits a day or 100,000 hits a day? Obviously I need the general answer and not the exact figure. Getting the exact figure wouldi be such a huge waste of time I don't even know where to begin - the exact figure would indeed be impossible, but getting a rough estimate is incredible valuable information! How could you not know this! Sorry, Nat, but that was like the lamest post I've seen. Are you just some low level coder? Or do you even do engineering at all?
Fri 22 Nov | Nat Ersoz | Well, OK. Alberto's very accurate estimation of gas stations changed my mind. Very interesting.
Fri 22 Nov | Nat Ersoz | Ed, mah man... my mouth ran away from me on that one. Suffice it to say, yes it was lame. Never mind...
Fri 22 Nov | Andrewm | There's one of these questions that I've heard a couple of places, but never heard or figured out a convincing answer: Why do bathroom sinks usually have overflow holes, but kitchen sinks do not?
Fri 22 Nov | Brad Siemens | K I'll take a bash Kitchen sinks, aside from being larger (more time) are almost always in pairs. The divider between them is not as high as the outside edge. Both sinks are virtually never plugged at the same time as they are only distributed with one plug!?!
Fri 22 Nov | Brad Siemens | ALaura Roenitz, senior market analyst for Kohler, provided the following response and it probably applies to other brands of kitchen sinks. Kohler kitchen sinks do not have overflow drains for a couple of reasons: • The overflow is not necessary, because the saddle (the part between the sinks) usually is lower than the rim. In most cases of double basin kitchen sinks, the second drain acts as an overflow of sorts. • An overflow drain creates an area that isn't rinsed and sanitized often and can harbor germs. In kitchens those germs can contaminate food. I had to know!
Fri 22 Nov | Alberto | How come I haven't got a job?!!!
Fri 22 Nov | Brad Siemens | Humility?
Fri 22 Nov | Ed the Millwright | Nat, It's no problem - I've been listening to a lot of gangsta rap lately too which I've found to be very inspiring.
Fri 22 Nov | Neil Butterworth | > Why do bathroom sinks usually have overflow holes, but kitchen sinks do not? This is one of these false premise questions like 'Why are most manhole covers round?' when actually most (I estimate over 90%) at least in London, UK are actually square or rectangular. Similarly, I've never seen a kitchen sink in the UK or the other 2 countries where I've had a kitchen (Switzerland and the Netherlands) which did not have an overflow hole.
Fri 22 Nov | Sarain H. | I follow you, but still, It's not a false premise in the US. Translation to other cultures is easy: 'Why *should* most man hole covers be circular?' (Since they abviously should be! We Yanks did it right for once!)
Fri 22 Nov | Neil Butterworth | Translation to other cultures is easy: 'Why *should* most man hole covers be circular?' (Since they abviously should be! We Yanks did it right for once!) Please remember that the UK is the country that is (or was) home to people that invented: - the steam engine - the computer (twice!) - the jet engine - antibiotics and quite a lot of other useful stuff. If such an inventive people decide that manhole covers should in general be rectangular then perhaps there is a good reason for them being thet shape. Perhaps a manhole designer might like to comment here?
Fri 22 Nov | Phileas T. Farnsworth, inventor of the manhole | 'Perhaps a manhole designer might like to comment here?' Thank you for the introduction. As the world's most preminent manhole designer, I must say that circular is definitely the way to go. We did exhaustive testing of square, rectangular, regular polygons, irregular polygons, stellated polygons, ovalloids, trapezoids and other shapes and round was always best. But if you like, we can have others rehash all the reasons why here. I have to take the Steam Train to Philadelphia this evening and regret I can not participate, but I wish you best of luck with your thread hijacking.
Fri 22 Nov | Glade Warner | I asked a candidate, 'How long would it take a cannon ball to drop to the deepest point in the ocean?' He looked at me dumbfounded. I gave hints. He was still baffled. I walked through the whole thing. He said, 'Oh.' And his reaction was like he was not sure I was all together upstairs. He was a strong candidate in all other ways. He was hired by my boss, despite my misgivings based on this one question. I was wrong. The guy turned out to be one of our best programmers, and could crank out code faster and better than most. I don't think I'll ask such questions again. They gave me the wrong opinion of that guy.
Fri 22 Nov | Alberto, world famous petrol station estimator | 'Why *should* most man hole covers be circular?' That's too easy, the answer (in USA) is 'because GW's electioneering is funded by a company that only makes round manhole covers' Similar situations (round/square/oblong) exist in other parts of the world.
Sat 23 Nov | Stephen Jones | 'when actually most (I estimate over 90%) at least in London, UK are actually square or rectangular' Yea, but we know the Brits are a load of squares anyway! Cool dude!
Sun 24 Nov | mackinac | This has been a fascinating thread. Not, of course, because I learned how many gas stations there are in the USA, but because of the various attitudes by posters concerning this question. My own attitude agrees with that of posters such as Ed the Millwright and Hardware Guy. This is not an impossible nor even difficult problem, although it would be bit unfair to assume everyone has the information needed even if most adult Americans drive cars. Nevertheless, I would be concerned about the problem solving capabilities of anyone who just threw up their hands and said 'I can't do that. I never took a gas station estimating class'.
Sun 24 Nov | Brad Siemens | I find it interesting that the only factor involved in most the calculation was cars/.
Sun 24 Nov | mackinac | Here is my solution to the problem: The primary function performed at a gas station is the fueling operation (FOP). I fill up once or twice a week. Most adult Americans are drivers. If my exeperience is not too far from typical then we have 2E+8 drivers times 1.5 FOP/driver/week for a total of 3E+8 FOP/week. A FOP takes a few minutes. Let's say 5 minutes per FOP and a station might have 6 pumps. A single station could produce about 1700 FOP/day. But a lot of the time pumps are idle, especially at 3AM. At this point I take a bit of a shot in the dark and guess that a typical station performs 500 FOP/day. Take the ratio 3E+8 FOP/week / 500 FOP/day/station gives a result of about 86000 stations. Off by less than a factor of 2. Not bad for a SWAG.
Sun 24 Nov | Brad Siemens | 6 or 42 depending on whether you believe George Carlin or Douglas Adams
bait and switch: what would you do? | Thu 21 Nov | whatToDo
Hi, 6 weeks ago I got hired for a project where I was to build a cool statistical mapping/graphing application for some people in an R&D department. My background is more in standard enterprise data management apps, and the main reason I took this job, is because I am trying to move away from enterprise data management apps, into scientific research applications. (please no comments about the financial foolishness of this plan ;-)) Anyway, my interviewers mentioned that I would also need to help out on another app, which is a pretty typical enterprise data management app. 6 weeks into the job, I am ONLY doing work on the data management app, which has no end in sight. I pointed out a number of problems with their original design, and proposed some changes that I thought would work better. Big mistake! Now Im the lead on this thing I dont really want to do. In fact, they are now doing an employee search for someone to work on the charting app that I thought I was being hired for! Now, the main reason I took this particular job is because I want to get into cool scientific visualization type work, maybe even go to grad school. I didnt want to work on yet another data management style app. However, the second more important reason I took this job is because I needed a job! Im happy to be employed, but not particularly happy that Im working on this particular project, especially when I thought I would be working on something else. I sort of want to chime in and say that I thought Id be working on something else, and dont particularly like this project...however I dont want to get sacked! Any job is better than no job! (maybe) I now know that this project is much more important to the organization than the graphing app. My contract is for a year. What would you folks do? chin up, tough it out for a year? mention that I want to be working on something else? neither? something else? any input would be nice. im also starting another related thread in this forum...
Thu 21 Nov | Bella | The days of getting paid to play with 'hypeware' are OVER. Those people have long been laid off. Recall how you felt when you were laid off, and make sure you remember every morning. Be happy you are working on something critical. Be happy you have health benefits, we are entering a new (and better) era. PS: Next time, don't show so much interest in doing the 'shit work' if you dont want it. You are clearly more important in your new role. Stop your complaining. No one owes you a special fun project to work on. Earn your paycheck, and deal with it. If you don't like it, then find a new job, and be done with it. Good luck
Thu 21 Nov | Bella | PS: Have you not developed ANY business acumen since being laid off, and having had ages to reflect? Do you have to ask why they would assign you to this project, when you yourself said it is more critical? On second thought, you may deserve to be fired.
Thu 21 Nov | whatToDo | Bella, thanks for your positive reply! I don't remember being laid off, and I realize no one 'owes' me a paycheck. I guess I didn't make myself clear: I have been doing enterprise apps for a while, and have no problem finding work doing them, as I have a good network, a lot of experience in a 'hot' application space, and live in an area where demand still outstrips supply. I'm trying to move into scientific research, and the institution I'm working at is a scientific research institution. I thought perhaps taking this job would be a good first step - but it really isn't , if I'm just doing the same thing I was doing before, but at a lower rate! Also, even though this data management app is 'more important' than the visualization app, they are both R&D apps, and neither one is 'crucial' to the longevity of the institution. PS: One reason I'm trying to get out of enterprise apps is because every person I know over the age of 30 doing them is a cranky, fat motherfucker who hates his life and spends a lot of time randomly flaming people on message boards. Sound familiar?
Thu 21 Nov | Doug Withau | Try bluffing, if they call, don't quit, just fold.
Thu 21 Nov | Isn't it obvious | Do youre best not to gag while looking for a new job in what you want!
Thu 21 Nov | Nat Ersoz | There is always tomorrow... Today its the same old crap, and despite the fact that there seems to be no end in sight, there always is a tomorrow. Weigh many of the other merits/demerits around you: . Are the people smart? . Is there potential for growth independent of the specific project? . Is the place well managed? Lots of other stuff - take inventory. Its often possible to switch projects once you've completed this one. Is that a possibility? FWIW,
Thu 21 Nov | mackinac | If you don't tell them that you would rather be working on the other project, they're probably not going to figure it out themselves. If they realized you weren't really interested in the project, it might have been harder to get hired in the first place, but now that you are on it and if they like your work it's not likely you'll get fired just for telling them you would rather be on the other task. If you have a good relationship with your supervisor, then you could bring up the topic and discuss future options. BTW, if you are in an area where demand for developers exceeds supply, let us know where it is. A lot of us would like to know.
Thu 21 Nov | Must be a manager | You need to front up to your manager with enthusiasm and ideas for the scientific apps, just as you did for the enterprise app. Make sure he knows where you want to be. Even do a definite deal with him or her, if needs be: you'll do a good job on the enterprise app if you can do some part of the scientific app.
Thu 21 Nov | whatToDo | 'Even do a definite deal with him or her, if needs be: you'll do a good job on the enterprise app if you can do some part of the scientific app. ' I think I am going to approach it this way. Thanks! I'll let you know how it works out.
Thu 21 Nov | Christopher Wells | > what would you do I asked a lawyer 'How much is an employer allowed to change a employee's job description, instead of terminating the employee's position?' He replied that, for example, they can't require an employee to emigrate, nor even require them to accept a demotion. He also said that, here at least, the amount of notice due and of any severance or compensation can be assessed, argued, not argued... I mention talking to a lawyer, but in my experience this is a last resort: the first thing I would do is talk with my boss.
Thu 21 Nov | Alberto | WhatToDo - 'every person I know over the age of 30 doing them is a cranky, fat motherfucker who hates his life and spends a lot of time randomly flaming people on message boards' Have we met?
Thu 21 Nov | Alberto | Seriously - I'd say that you want to work on the other application, get them to hire a new person and tell your boss you'll do the handover to them so that you can get back to the other application. This is a win - win, you get the job you want and the company get to have you holding the hand of the new person for a while until they learn to walk and then run.
Thu 21 Nov | whatToDo | Alberto: I don't think we've met. But maybe. ;-) That comment might have been a bit harsh, but there certainly seem to be a lot of grumpy old programmers, in my experience. (even worse, are the systems administrators) I'm trying to sort out some type of plan, hopefully it will all go over well.
Thu 21 Nov | Prakash S | IF you let your Boss know, then he might think what guarantees he has that you will do any other task with enthusiasm?
Fri 22 Nov | Ed the Millwright | what2do, I believe that you said that you were hired specifically to do this scientific visualization project, with some minor assistence needed on some boring project. You passed up higher paying offers to do boring projects because you wanted to work on this interesting thing. And so you find that you are not working on the interesting thing, but are doing the boring project, a project which you would be paid much more to do elsewhere. And to add insult to injury, someone new is being hired to do the interesting project that they lured you in with. Yes, you have been bait-and-switched. It happens sometimes, especially if there is a job no one wants - I've been through it a couple times. I would politely and calmly confront your boss with these facts and assert clearly that you will be working on the work you were promised, making clear that the boring work is something you would be paid much more to do elsewhere and it as your primary focus was completely different from what you were promised. If they do not turn you over to the project they lured you in with, I would go straight to a lawyer to negotiate a severance package. It's a breech of contract. They misrepresented the job. Because it was done in bad faith, they are liable to you for treble damages - such as relocation expenses, severence, etc. Good luck.
Fri 22 Nov | Must be a manager | Ed the Millright might be right. If you think you were deliberately suckered into the arrangement, you should be screaming. However sometimes situations such as yours arise because managers are dumb. If that's the case, be polite. If it's not the case, be demanding and rude.
Fri 22 Nov | | 'every person I know over the age of 30 doing them is a cranky, fat motherfucker who hates his life and spends a lot of time randomly flaming people on message boards. Sound familiar' I didn't know you knew Bella!
Fri 22 Nov | David Clayworth | Whatever you do, don't say nothing. I've been there, and believe me it does no good. Is anyone doing the visualisation work you were hired for? If you were hired to do particular work, and you are not doing it, definitely complain. Remember if they are being underhand about this they will probably be underhand about other things too. Any you are not without bargaining tools - if you quit they will have to find someone else and lose time on their Enterprise App, and go through another expensie hiring procuedure
Fri 22 Nov | dunno wair | Now, now. In his capacity as the official senior JoS Troll-in-Residence, Bella deserves more respect than that.
Sat 23 Nov | NathanJ | >> In his capacity as the official senior JoS Troll-in-Residence, Bella deserves more respect than that. << Bella deserves no respect. We've heard things like 'if you don't like your job just leave' for too long. It is possible to change a bad environment for the better. I'm sick of people like Bella with the 'everyone should just put up or shut up' attitude.
Sun 24 Nov | Nick Hebb | >> In his capacity as the official senior JoS Troll-in-Residence, Bella deserves more respect than that. << Actually Bella's been slacking as the resident troll lately. I'm glad he's back to form - it's a good reminder to spend less time in forums and more time doing something useful. So remember ... Ask not for whom the Bella trolls, he trolls for thee!
Sun 24 Nov | Bella | > PS: One reason I'm trying to get out of enterprise apps is because every person I know over the age of 30 doing them is a cranky, fat motherfucker who hates his life I am not fat. And I left the IT industry earlier this year. > Actually Bella's been slacking as the resident troll lately. Yes, I've been somewhat busy in establishing my new life(style).
MultiThreading | Thu 21 Nov | MRC
hi , i started learning about multithreading(using java) last week and found it very interesting. just want to know ur thoughts on multithreading and any good references.it appeared to me like ,multithreaing can only be exploited with multiple processor CPUs. regards mrc
Thu 21 Nov | Ged Byrne | Mrc, On a single processor you can still have virtual multithreading, where the processor switches between two tasks. This is how Windows is apparantly able to have several applications running at once. For the programmer, multithreading is great for reducing complexity. Especially when dealing with a graphic user interface. Take, for example, animated gifs in a web page. Writing a single process to animate six or seven images on a page would be possible, but the code complex. With multithreading you can have a single thread for each image that simply wakes up after a set time and loads the next frame. About 5 lines in java. The disadvantage to this is that you increase overhead, which can have a performance cost.
Thu 21 Nov | Steve Barbour | See this article at kuro5hin, http://www.kuro5hin.org/story/2002/11/18/22112/860 . I don't necessarily agree with all of it, but it does make some valid points. The discussions are fairly enlightened at points as well.
Thu 21 Nov | James Montebello | I/O bound applications can also benefit from multiple threads, even on uniprocessor machines, or in any system where the number of threads exceeds the number of physical processors. The classical case is a server that handles a set of network connections, alternating between doing calculation and waiting on I/O. On an N processor machine, N threads can be calculating while M threads are waiting on I/O. Even where N = 1, you *may* get an increase in throughput, esp. if the ratio of calculating time to I/O wait time is large. Writing the code for this with threads *can* be simpler than writing it as a state machine, which is the typical single-threaded approach. The chief advantage to threads here is, given the appropriate OS and thread implementation, the system will automatically use more processors if they are added to the system.
Thu 21 Nov | Karl Perry | We use multithreading here whenever we have a process that is going to take some time to complete. We put that process into a second thread, allowing the application to continue to run in the main thread. This prevents 'blocking' that makes an app otherwise unresponsive during a long operation. If the app cannot continue until the running process completes, we use a global variable to allow us to tell the user 'you can't continue right now.' However, the app is still responsive. Without this multithreaded behavior, a user would be more apt to think the app has frozen.
Thu 21 Nov | jq | With Java, you'll use threading for Swing programming. Swing is not thread safe & you need to understand threading to make your apps work. I just finished fixing a threading bug in a Swing program I inherited. Look at Doug Lea's book, Concurrent Programming in Java, 2nd ed. Slim in size, dense in ideas. He supports a useful library for concurrent programming.
Thu 21 Nov | Nat Ersoz | That 'story' on kur5hin.org is one of the biggest stinking piles of dung I've ever read. If threading makes your life simpler - and for many applications it will - then use it. That's how you know if you're using threading properly: It simplifies your code for similar or improved performance.
Thu 21 Nov | Adrian Gilby | In addition, to say 'For the programmer, multithreading is great for reducing complexity. Especially when dealing with a graphic user interface.' is only half the story. Multithreading _can_ reduce code complexity, but it also makes the runtime behaviour of your program less predictable. This means you have to be damn sure you've dealt with any concurrency and resource locking issues. Are any of your threads reading and writing the same data? Can you be absolutely sure that they won't try to do it at the same time? Are you absolutely positive that you put all the relevant pieces of code within critical sections? etc.
Fri 22 Nov | Yves | A second vote for Doug Lea's book. Highly recommended if you're working in Java.
Fri 22 Nov | Ged Byrne | The kur5hin.org article is very specific to Unix programming. In Java you don't have this Thread/Process distinction he is discussing. Besides, the whole Java object mechanism provide the event driven approach recommended as a solution. So the article just isn't applicaple to Java programming. There is, however, a lot of pitfalls involved in thread programming. Josh Bloch's Effective Java has a very informative section on Threads. http://www.amazon.co.uk/exec/obidos/ASIN/0201310058/ref=sr_aps_books_1_1/202-1782066-4017408
Fri 22 Nov | Brian | >> That 'story' on kur5hin.org is one of the biggest stinking piles of dung I've ever read. Agreed. Mostly, he demonstrated that it's hard to make code thread-safe after you write it. Which can be true. But retro-fitting design constraints is always harder than including them up front. If you know what you're doing, and you properly encapsulate, the thread safety part isn't that hard. You learn the techniques, then you get into the habit of making your classes thread safe. Avoiding deadlocks can be tricky, though. You really have to think that part out ahead of time.
Fri 22 Nov | Bill Carlson | I mostly agree with the kur5hin article. The fundamentals of concurrent programming are not that difficult, but translating those concepts into robust code is hard. Threading has become a 'separate the men from the boys' issue, which is unfortunate, as this leads to its application where it may not be necessary; kind of a badge of honor. Maybe this attitude isn't prevelant, but I've seen it at my company. Bugs have a progression: 1. Programmer screws up 2. QA or user finds the error 3. Someone fixes the problem For tasks where the time from step 1 to 3 is lengthy and or painful, I like to see a more senior persion doing the work. Threaded code often falls into this category. There's instances where experience gives you a queasy feeling about something. Recently, I was reviewing some code where the developer was doing heavy file access in a worker thread. At certain points, he was calling SuspendThread on this thread. Even though this is supposed to work and usually does, it's still a 'bad idea' on many levels. Until someone gets that queasy feeling, they shouldn't write heavily theaded production code. I think the author was trying to convey that most of the time, you don't need threading, just like most of the time, you don't need multiple inheritance, templated code (besides STL), function pointers, file system hooks, XML, etc. Bottom line: Identify the need and apply the minimum level of complexity required.
Sun 24 Nov | dk | From my experience I would say: 'Use as less threads as you can. If you need more then two threads - think twice'. All above is NOT true if all your threads are COMPLETELY independent, but this is very rare situation.
Problem at Work | Thu 21 Nov | Jack
Dear all: I work for a company (of technical writers), and manager (whom Ill call Debbie), who I thought were pretty good for over two years. About 8 months ago a new member came aboard my group (Ill call him Max). He and I hit it off really well from the beginning, so I thought that the three of us (me, Max and Debbie) would make a good team. But almost since the beginning of Maxs time here at work Debbie has shown a new side of her (at least to me) in that she constantly puts down Maxs work. Ive seen Maxs work and it is good. I saw Maxs work under his previous employer and it was good. Debbie not only has consistently not liked his work but the way she shows it has been deploreable. She will tell him to correct many things in Maxs documents then, when he hands in the revised work, she criticizes his use of the new additions that she wanted in the first place! I could go on.... Eventually, what happens is that these petty delays add up and Max gets blamed for handing in work late by Debbie. I feel that I am caught in the middle. I try to reason with Max and I try to defend him to Debbie. Got any suggestions for Max? His quitting could send a message to the company but it wont pay his bills :-) Thanks.
Thu 21 Nov | Brent P. Newhall | My first reaction is to wonder whether this is your problem to solve. It sounds like a problem between Max and Debbie. Having somebody else step in and try to be the peacemaker may be confusing matters, and indeed, it may make it easier for Max to avoid confronting Debbie about her actions, as somebody else is already 'running interference.' Have you talked to Debbie and/or Max about this? How do they feel? That strikes me as a good place to start. If you have talked to them, let us know how they feel and we can suggest actions from there.
Thu 21 Nov | Nick B. | Jack said, “My first reaction is to wonder whether this is your problem to solve.” I share these sentiments. I think if I were in a situation Max was in early in my career, I would have quit upon finding a better job. If I were in Max’s situation right now, I might confront Debbie in an effort to resolve issues before doing anything else. However, confronting managers over incorrect practices can be a very delicate matter (not to mention frightening for people with passive personality types). In any case, this is really between Max and Debbie. If Debbie is the manager and Max is that good, perhaps Max’s quitting will both be good for him and will send a strong message to the company. Max is (presumably) a big boy and can make decisions for himself. If Max doesn’t have the ability to defend himself in his current environment, he needs to either learn quickly or find a better environment.
Thu 21 Nov | Jack | Yes, you are correct when you state it's a Max/ Debbie thing.... But this reminds me of an episode of _The_Simpsons_ where Mr. Burns forms an all-star company softball team. On that team is Don Mattingly. Burns yells at him to 'shave off your sideburns.' Mattingly does so, only to get yelled at again by Burns for not shaving off the sideburns. Eventually, Mattingly shaves his head in two -- and not only gets yelled at again, but gets kicked off the team too. :) I share an office with Max so I not only talk a lot with him about his situation, but I see him working his ass off to do work that he thinks Debbie will like. Some advice that I've given to Max has been to do the best work that he can, defend himself when being falsely accused of something, and to keep copies of everything proving that Debbie is running in circles. I don't really say anything to Debbie, but she has mumbled things about Max to me while I meet with her, and I try to explain that I feel that I work well with him on projects and that I've been happy with our progress thus far. I don't know.... I've never felt this way before in a work environment -- only because in past examples have I not been witness, over and over again, to such vindictive and petty behavior. **So I guess I'm asking if you were in my place what kind of advice would you give to someone in Max's position?**
Thu 21 Nov | | Sounds like Debbie is a bully. Max has the wrong response in trying to accommodate her. Bullies thrive on weak people. Max needs to tell Debbie to lay off, and he also needs to arrange less supervision / interference from her. This will be a useful strategy while he moves to a decent job.
Fri 22 Nov | Ged Byrne | In my experience no-name is right. I've had a similar problem with an insecure manager giving me hassle and making my job almost impossible. Life got much better after I challanged her. My approach was to fist of all ask, since I kept making so many silly mistakes, that requests be made by email, so that I could refer back to them to double check. Then, when the requests started to conflict, I could produce the written evidence. After a few of these well documented confrontations she backed off and soon everything was sweetness and light. Problem is that Max has to do the challanging. You can't do it for him.
Fri 22 Nov | Simon Lucy | It does sound like she feels that he will undermine her, or supplant her and so disrupts his work. This is also unlikely to be entirely conscious or intentional and if challenged she would deny it strenuously and possibly escalate it into some kind of official dispute. In these kind of situations it has to be approached both cognitively and emotionally. She needs to be reassured that he doesn't intend to supplant her, he needs to be assertive but in a conciliatory manner. Often in a similar situation I'd take the dispute out of the workplace and work on some kind of social setting. This can get complicated because its a male and female and unless handled properly could be misconstrued either way. So you do have a role in that sense as a chaperone. Remember though that you can't fix it, you can't be nice to them and assume that either of them will be nice to you by working well together as a team. The most you can do is enable them to interact in a non-threatening, non-work situation. If that doesn't work then its likely to fall apart anyway. Its also important not to be perceived as conspiring with either of them 'against' the other. So if you do organise something out of work, do it on the basis of them meeting you, not he meeting her or the other way around.
Sun 24 Nov | Jack | Thanks, everyone, for your thought-provoking input.
Debugging and head-banging in estimates | Tue 19 Nov | h.
Recently, Ive tried to improve my accuracy in the creation of software schedules. For starters, Joel wrote an article on it - http://www.joelonsoftware.com/articles/fog0000000245.ht ml But Ive looked into PSP, XtremeProg, Risk-Adjusted Estimates, functional decomposition, guru method, etc. So Im writing a schedule for a piece of software ... and I want to nail it this time. First, I put in how long I think it should take me to do each feature. Then I sub-total. Then I add some debugging time (about one-third), then I evaluate the risk and add a mark-up for risk. (On this project, I added 30% to the sub-total) Heres the question: Do you think I have allotted enough time for debugging and head-banging? Joel suggests that I actually add time for BOTH debugging AND buffer - and submits that debugging can be up 100% or 200% of the original estimate! My numbers are more like 30% for debug and 30% for head-banging. Still, Im relatively confident that I designed the feature well up-front, and I understand what Im going to do. (As opposed to having hand-waving functions like validate data that I havent defined.) Any thoughts? thanks,
Tue 19 Nov | Big B | I make pessimistic estimates for every little task. I do not add any time for debugging in general. I have done this for over a year and I've always ended up very close to my initial estimate.
Tue 19 Nov | dmooney | Another nice thing to do w/ the riskier tasks is to do those tasks first, even if it requires the writing of scafolding code to get it working. This way, the tasks for which the estimates are most difficult to estimate get corrected first. Therefore the average certainty steadily increases as the most uncertain tasks are completed.
Wed 20 Nov | Alberto | Time estimates are like share prices. Every share has an intrinsic value, i.e what it's 'truly' worth. Also, a share is worth what somebody will pay you for it. Classic 'intrinsic value' vs 'castle in the air' theory. Estimates are the same, work out how long you think it will take, i.e its value, and then shoot for how ever long you think they'll give you. Of course, estimation is a totally different game if your spending somebody elses money and not your own. Software engineering is about money, just like all other sorts of engineering.
Wed 20 Nov | Alberto | My point being, use whatever system is most generous.
Wed 20 Nov | Nat Ersoz | The hard part of schedule estimates is bounding things that are unbound. That is, itemize the things that you: 1. Haven't previously done something similar. 2. Relies on 3rd party source code, deliverables, hardware or documentation. These are the high risk items. Everything else (am I missing something?) should be within your control and you should be able to estimate accurately based on past results. Take the high risk items, once listed, and break them down as far as you can go. What is the riskiest part of the risk? What are the blockers? What you should have is a schedule which is a list of tasks. Some tasks have hard estimates which you think you can meet with good certainty, and a highlighted list of tasks which have high uncertainty. The high risk items will remain high risk until you've coded them and brought them to near functiional level. That's about as good as you can do. That and keep the list up to date and transparent. Don't hide anything and keep your boss informed of your progress.
Sun 24 Nov | Justin | The best way I have found for improving schedule estimates is by keeping old estimates, which have both original estimated time and the time actually taken. After producing a schedule, find an estimate from one of your old project schedules for some similar piece of work and compare it against the estimates you have for the current schedule. Compare both sets of figures (ie estimate vs actual). You might have a think about what caused the discrepency and make a not on the schedule (obviously not a publically available copy). I am now much better at schedules than I was even a few years ago. >Another nice thing to do w/ the riskier tasks is to do those tasks first, Indeed. The common name for this is “ring-fencing”, whereby items that involve a higher degree of risk do not impact others. This applies equally to schedules and the software itself; particularly the software. You should definitely be doing this. >These are the high risk items. Everything else (am I missing something?) Changes to requirements (perhaps based on the schedule) are not something you have a great deal of control over. Also, people spending money do not like to see holes in the schedule or items marked as ‘contingency time’. To them it is just expensive programmers sitting about doing nothing. They would rather fill the time with new features or something. Somebody once told me that a good way to estimate function points (as opposed to making a schedule) is 1 day per function point per table. Eg to write a “user details” screen will take 1 day for Add/Amend/Delete. Obviously this assumes that you are working with a database. My experience indicates that this seems to be the case, although it needs to be tempered with a degree of common sense. It patently will not take a day if your user details consist of 250 fields of differing types, populated mainly with lookup data. It may take a good deal less if you only have a couple of fields and suitably similar code which can be stolen to order. Where was I? Oh yes, 1 day per function point per table. The main adavantage is that it allows non-technical people to see where all the time goes and allows for an approximation of profit (multiply by you daily rate). This allows you to determine whether its worth undertaking a project for someone. Use it or don’t; it’s a tool like any other, as long as you know it may not be greatly accurate, that’s OK. “Sloppy”, I believe the proprietor of this establishment would call it.
Sun 24 Nov | Justin | Sorry, paragraph 2 should read 'make a note on the schedule'. *Yes*, I proof read it, but I'm only human.
PalmOS Programming | Tue 19 Nov | Tim Lara
This is sort of a two-part question: 1) I am curious whether anyone here has experience developing for PalmOS. Metrowerks Codewarrior seems to be the IDE of choice, but I think the cost is a little bit high for a newbie/hobbyist. Has anyone used a different/cheaper tool set that works well? 2) For those of you who do have experience with PalmOS, is there any reason that it would be an unusually stupid idea to try to learn C/C++ by experimenting with PalmOS apps? I have almost no prior C/C++ experience other than a college class 10 years ago, but I am incredibly bored with my VB/SQL maintenance duties at work and am ready for a new challenge. The reason I ask is that I have been told by a consultant (dont laugh) working for our company that the memory management involved as well as various other quirky factors make PalmOS programming *soooo* difficult that very few people can do it. The topic came up when we were asking said consultant to provide us with the source code for some of the in-house PalmOS apps we use that he designed and had an off-site developer code for us. He begrudgingly replied that he could certainly get the source code for us, but that it was unlikely that anybody other than the guy who wrote it could take over where he left off. This consultant has a habit of gushing over what a *genius* his PalmOS guy is and that he can code things in 2 hours that would take anyone else 25 hours... Comments?
Tue 19 Nov | Chris Tavares | You probably don't want to try learning both C and PalmOS programming at the same time. Programming for the PalmOS is very much working with an embedded system. You need to deal with downloading object code, setting up an emulator, debugging over a serial port, and lots of other such things. Not to mention all the palmOS specific library calls, data management, UI toolkits, and whatnot. Add to that just learning C, especially pointers, and you've got a recipie for frustration. I'd suggest you start with writing some basic C++ dlls on Windows, and calling them from your VB apps. That way you can get used to coding in C and still take advantage of what you already know. Once you've got a firm grasp there, write a full bore C app. Then you're ready for PalmOS. I worked on a project on this platform recently, but I was doing the PC conduit, not the palmOS side of things. Programming for the PalmOS is not incredibly hard from what I could see, but it does take a shift of mindset. Generally, you have to assume the handheld will be slow, and have limited memory. The heap and stack are VERY small, but there's a whole new 'database heap' that provides blocks of ram for you. It's a learning curve, like anything else. I wouldn't try and tackle two such curves at the same time.
Tue 19 Nov | pb | I'd suggest VB if you want to get going quickly. http://www.palmos.com/dev/tools/
Tue 19 Nov | Bruce Perry | There's a useful FAQ here http://tangentsoft.net/palmfaq/ There used to be a good site called roadcoders which seems to have merged into developer.com somewhere.
Tue 19 Nov | beach bum | In early 2000 I wrote a commercial Palm OS app. There are a couple choices available to you: * Java Free tools are available, if I recall correctly. Easier to learn than C/C++ but syntactically the same. This choice may appeal to you for the reasons you mentioned above. However, it is not really considered a contender in the Palm OS space. Here is a benchmark article comparing Java to C++: http://www.cs.albany.edu/~mhc/Mobile/Paper/Java_vs_C.htm * Satellite Forms Think of this as VB for the Palm OS. RAD development environment with easy to use DB controls. Many serious Palm OS developers use this product to prototype thier applications. It is considered a legitimate choice however, it is at least as expensive (or perhaps more) as CodeWarrior. Also, I seem to recall having use some creative algorithms to handle large datasets. You can find out more about it here: http://www.pumatech.com/ * C/C++ Since the OS was written in C, this is considered the standard language of choice for this platform. I used CodeWarrior and found it to be very good. I didn't have much trouble picking up the C programming language. Like you, I hadn't used it since university. Just a general note about the contractor you mention, I belive he is full of crap. I have only worked with very few 'exceptional' programmers in my time. My experience is that their code is extremely easy to read. Everything is usually packaged in a coherent framework which makes it easy to find your way around. My guess is that your 'genius' programmer is just the opposite. Expect spaghetti. I say this because Palm prgramming is not *that* difficult. There are some rules to follow because of limited memory and processor speed, but these are easily mastered.
Tue 19 Nov | PDA Dev | It sounds like the consultant doesn't want to surrender the value of his colleague's work, which is fair enough. Rather than saying no to you, he's giving you an excuse, which is not the best way of handling it. The excuse he gives does have a factual basis, but it also sounds like something a big-noter would say. Programming for PDA's requires better C++ expertise than for desktop or server, but it's not rocket science. The relevance is that there are lots of poor C++ programmers, particularly those accustomed to using big libraries and frameworks, and those people will indeed have problems developing for PDA's. The person who suggested Java and other framework-type things probably does not have experience in this area. Java apps suck on PDA's. So do lots of framework apps.
Tue 19 Nov | Andrew Simmons | I did a fair bit of Palm programming a year or two back, so my experience may be a bit out of date. I used Codewarrior, and found it excellent on the whole. The worst part was the resource editor, which was all but unusable on the PC, but better on the Mac. You used to be able to get a free 'Lite' version - from memory, the only difference from the full version was that apps developed under Lite displayed a startup screen informing people of the fact. I wouldn't recommend this as a way of learning C though, even less C++. The environment did not come with a standard C library, and floating point support was limited - things have probably got better in this regard though. I did manage to get parts of the standard library from PJ Plauger's book going - mainly for floating point & formatting strings. The memory management was particularly non-standard - reminiscent of the original days of the Mac, and I believe there were problems with features of C++ such as virtual functions because of this. Again, this may have been cleaned up in more recent versions. Having said that, if you already know C the Palm can be a very pleasant environment to work in. When I was using it, it had not yet accumulated the layers and layers of godawful, insanely complex API calls that Windows has. No doubt this will be fixed in the forthcoming version 6 of PalmOS.
Tue 19 Nov | Passater | If you don't want to spend some $$$ for PalmOS programming use PRC tools: http://www.palmos.com/dev/tools/gcc/ you don't get some fancy IDE with it, but frankly do you need any? as for the difficulty of writing for PalmOS, no, it is not difficult. As someone here said there are some rules to follow and the development for palmos is more like development for an embedded system rather than for a desktop.
Tue 19 Nov | Neil Butterworth | An excellent and easy to use IDE for Palm programming is availalable from www.pocket-technologies.com (assuming you don't mind programming in Pascal)
Wed 20 Nov | Tim Lara | Thanks for all the great replies! This will no doubt keep me busy for a while...My poor wife is probably about ready to put a hit out on Joel for creating this forum. beach bum: Pretty much everyone in our company thinks that particular consultant is full of crap. Funny to hear someone else say it. His mantra of FAST PROGRAMMER = GOOD PROGRAMMER probably has a lot to do with the fact that he is in the habit of promising clients things that not only don't currently exist but often have yet even to be fully conceived. In that sense, something that sort of works tomorrow is obviously more desirable than waiting a month for something that works *well* that people might actually want to use - but I digress; that's a whole 'nuther topic!
Wed 20 Nov | Albert D. Kallal | I think that learning the palm and jumping into c is not such a bad idea. Much of your learning will much better since you are excited about the palm, and thus will have good motivation. (However, learning both a new language and a platform at the same time was mentioned as a problem). As for the palm being hard to program, well it really depends on what you are trying to write. For example, I am constantly shocked or stunned when companies start using Codewarrier to write simple database applications for the palm. About 90% or more of applications in the corporate world are database type applications. You can spend 4-6 weeks writing a time and billing application in Codewarrer, or use one of the many database programs and write the whole application in a afternoon. Fact is, most palm applications involve just display of basic data, and some means to search that data. In other words, the data usually is coming from an application on the pc side (where the application is!!). The palm side is usually very basic, and simple (which translates in to a very low cost for most palm applications). I put together a application for a tour company. On some weekends there is up to 800 people leaving on buses. Hence, they need a quick and easy for people to approach the tour guides in the parking lot where the 20 buses are leaving. Hence, they needed to be able to search by lastname, firstname, phone number etc. After they search, the bus number they are to be on is then displayed (along with Hotel information etc). Many people forget their bus number, or are meeting friends who have their tickets. Thus, this is much better than looking through a long printout (and you can’t search the printout by first name if it is in lastname order). After a name is found, then clicking on another button would then also show their rooming list (who they are staying with at the hotel). In addition, the list could be filtered by bus a number, and the thus a bus “list” could be viewed for any bus that is leaving. So, we have lot of functionally in the above application. To code that above application in Codewarrer would be a lot of work. I used HandiBase, and the whole application including the database export routines was done IN LESS THAN 3 HOURS OF TOTAL WORK!. In other words, why in the world are so many people writing database stuff on the Palm in Codewarrer? I mean, yea..if you are writing some GPS software to tie in with a real-estate application then I can see using codewarrer. For the other 9 out of ten applications, use a database, and you will almost need no code. (at least for searching, sorting, filtering and display of data!). In addition, the database applications for the palm handle the sync stuff, and again it would be foolish to write you own conduit in CW. So, is writing a application for the palm easy? Yes, if you use the right tools. Programs like dbase and ms-access caused a real boom in the early days for PC’s, because every new application did not have to be coded from scratch. The same goes for the palm…use a database, as I see incredible silliness in most applications that are being written using CW for the palm. I used HandiBase for above application…(it was $30). Check out: http://www.ddhsoftware.com/handbase_palm.html Albert D. Kallal Edmonton, Alberta Canada Kallal@msn.com
Sun 24 Nov | Ron Porter | Just in case you decide to look into a Palm 'DMBS': Satellite Forms is great as long as you don't need to use OR in your filters (2-level split OR 4-level split); Handbase only allows 6 (I think) criteria. Thus, for my application neither of these otherwise excellent products is suitable, leaving me no choice but to code things up from scratch. And I hate coding from scratch :) For the record, I discovered SF's lack of OR after I had already gotten fairly deep into the application (yes, bad planning!), so I ended up simulating it by applying each element of the OR separately and walking the result set setting a flag, then filtering on that flag. Not exactly a high-performance solution, but it turned out to be good enough for small-market realtors. Ron
Sun 24 Nov | Tim Lara | I actually have used Satellite Forms a bit, and I agree that it is a very nice product overall. You are right in that its weakness seems to be in dealing with complex filters or (in our case) tables with lots of rows. The consultant working with our company originally designed our app using Satellite Forms, but eventually had to outsource it due to perfomance issues. In our case, we needed to have a product database of 20,000 items or more on the Palm and be able to look up pricing, descriptions, movement history, etc while scanning barcodes on products out on the shelves in our stores. For apps that don't deal with tons of data, though, Satellite Forms is definitely worth looking at.
Sun 24 Nov | Ben Combee | Hi... I'm the technical lead at Metrowerks for their Palm OS tools and am the current 'mastermind' behind CodeWarrior for Palm OS. This discussion is interesting. I agree that bare CW is inappropriate for a lot of database tasks. However, I'd argue that we've been doing a lot to make this better. First, I know of three companies that have built database code generators that work with CW to produce custom DBs you can embed into your apps. Extended Technology Systems ( www.exts.com ) has a nice generator called da Vinci that produces well-optimized flat-file DB code. Falch.net has their Visual Database Designer which does some UI work as well, but isn't as sophisticated on the database side, and then there is Sybase's iAnywhere, which is really nice with its embedded SQL DB solution and relational DBs, but carries a runtime royalty. Second, I hope anyone looking at CodeWarrior takes the time to look at our new version 9 tools coming out in mid-December. We've done a lot of updating to the IDE, we've rewritten major parts of the debugger, we have new tools to build fast ARM code for the new Palm OS 5 devices, we've added command-line tools for people that prefer makefiles over IDEs, and we have a new resource designer as an alternative to the Mac-look-and-feel Constructor. For more info, see my weblog at www.palmoswerks.com . Thanks!
Sun 24 Nov | Ben Combee | I forgot to mention that V9 also comes with the Object Library for Palm OS V4, a excellent C++ class framework that automates a lot of Palm OS's quirks, including event handling, memory management, and communications code. POL also provides a framework for custom controls, and comes with tree controls, tab controls, and grid controls that can really speed up app development time.
Anti-spam vigilantes | Mon 18 Nov | anon
The filtering good mail spam problem is significantly worse than Joel metions in his article. We run a business that generates a lot of email. We regularly get spamcop complaints (and automated complaints from other spam filter software) about confirmation email (i.e. confirmed identity for a double opt-in list), which is obviously not spam by anyones definition. We generate so many confirmations, and so many bogus complaints, that weve had problems with various Internet services (DNS providers, ISPs, etc) that have a zero tolerance spam policy. Over the course of nine months, weve had four significant service interruptions caused by a guilty until proven innocent attitude. The state of the Internet today is such that less than a dozen complaints can get you pulled off the Internet by these vigilantes, with no warning. Careful reading of their terms of service says they reserve such rights. There are remarkably few service providers that dont have such wording in their terms of service. So, in addition to the usual crackers, DDoS script kiddies, etc., something else many large web sites have to worry about are overzealous system administrators trying to save the world from spam. I cant wait until the script kiddies figure out they can target a DoS attack by just sending bogus spam complaints...
Mon 18 Nov | David Mackintosh | I disagree. You have to decide up front just who the internet is meant to serve -- you, the advertiser/commertial communicator/whatever, or me, the reader. Obviously, I choose me. I have to make a decision when I set up a mail address -- just how much noise am I willing to tollerate, and how much signal am I willing to lose in noise-supression attempts. If I decide to use a service which may or may not identify your inbound mail as possible spam, that's entirely up to me to decide. Joel's points on the tag are well taken, but the problem there is that one still has to sit around while the tagged spam is downloaded and sorted -- not a huge undertaking on a corporate network or a high-speed connection, but it can be murder on dial up connections.
Mon 18 Nov | pb | Totally disagree. I can tolerate noise. I absolutely cannot tolerate missing signal. This is the major deficiency with virtually every spam blocker. For some reason they don't understand that blocking legit emails is a non-starter.
Mon 18 Nov | anon | So, you, the reader, decides to set up a mailing list for your favorite topic. You follow the rules, and use software that operates a double-opt-in list (they request to sign up, you send them an email to the address they give, they reply and are signed up). However, your favorite topic is the plight of Tibet, so you set up a mailing list on 'freetibet.org'. 90% of the people trying to sign up for your service can't, because their fully automated anti-spam software that came with their mailer software and about which they are largely unaware, blocks any email from you because the word 'free' appears in most spam, and therefore your confirmation email must be spam. Does this serve you, the reader? Or, you set up a website on 'freetibet.org', and someone who takes a dislike to your site generates a set of bogus spam complaints to your registrar, your DNS provider, your ISP, your ISP's ISP, etc., and one of those people decides to implement their companies zero-tolerance policy and removes your service (really appealing when the registrar deletes your DNS record with no warning, and you lose freetibet.org to someone else who's been camping on that address). How does this serve the reader, exactly?
Mon 18 Nov | obvious | That would be free tibet FROM CHINA!
Tue 19 Nov | FreeMeFromSpam | For every one 'freetibet''s their will be a thousand (or more) 'freecreditcards' or such like. So it's still worth it. Its very unfair on the 'freetibet' people admittedly, but using your example, they can change their name, so it's no more than an inconveniance for the greater good, like wearing seat belts.
Tue 19 Nov | Chris Blaise | I'm very sympathetic to false positives. In my opinion, if even one legitimate mail is lost due to anti-spamming techniques, that's a real problem especially to a business. The way we handle it is to have all mail marked as spam go to a mailbox and every morning go through that mailbox and manually inspect the messages. For the most part it's really easy and quick to figure out what's legitimate (or in some cases, possibly legitimate) and not legitimate by just looking at the subjects. I've been doing it for several months now but I'll soon be passing it back to IT. It takes me 1/2 an hour each morning to go through about 700 messages. The way our company looks at is that it's a lot cheaper for one person, skilled in groking good/bad messages than to hand that off to the rest of the employees and cause them to get distracted, lose productivity, etc. Chris
Tue 19 Nov | Stephen Jones | How about a confirmed opt-in for anti-spam software. That is to say that any mail server that wishes to apply any spam mechanisms sends me an email explaining that it is intending to block any email to me that comes from a list of unilaterally blacklisted servers or contains any reference to freedom (political, software, judicial or otherwise) or anything else that it feels like, and could I please sent them a reply stating that I am in agreeement with them deleting my messages or otherwise they will either send me all my mail, or refund my subscription and promise to forward on all my email to my new provider for a period of a year so that I may ensure that everybody has the new address. Also Microsoft could have the confirmed opt-in for SP1 for IE6 and Windows XP which blocks completely a long list of attachment types. It should state that the service can only be turned on after I have sent them an email confiriming my wish to have them block possible viruses as well as software updates and messages and photos from my friends and family.
Tue 19 Nov | Robert Moir | 'That is to say that any mail server that wishes to apply any spam mechanisms sends me an email explaining that it is intending to block any email to me that comes from a list of unilaterally blacklisted servers or contains any reference to freedom (political, software, judicial or otherwise) or anything else that it feels like, and could I please sent them a reply stating that I am in agreeement with them deleting my messages or otherwise they will either send me all my mail, or refund my subscription and promise to forward on all my email to my new provider for a period of a year so that I may ensure that everybody has the new address.' So you are saying you can tell me how to run my server? I don't like the 'Anti Spam vigilantes' nor do I like the 'my free speech first, on your property' vigilantes. I like running my little network how i choose. If I choose to stop mail crossing my network for *any* reason thats up to me, as long as I am up front with my users about it. I'm not about to pander to the needs of either side, I just want my network to work.
Tue 19 Nov | Stephen Jones            | Dear Robert, So if the mailman decided to throw away your letters you would say that's OK because the mail bag is his property. No problem if an airline taking you from New York to Australia drops you off at Mogadishu because it's their plane and they don't like getting told what to do with it? If you are an ISP you are promising to deliver me mail. If you don't want to then advertise that loud and clear (We are an ISP that only delivers the mail messages to you we feel like and dumps the rest) and then give sufficient notice for those clients who wish to change to another without such illusions of grandeur.
Tue 19 Nov | Robert Moir | ' So if the mailman decided to throw away your letters you would say that's OK because the mail bag is his property. No problem if an airline taking you from New York to Australia drops you off at Mogadishu because it's their plane and they don't like getting told what to do with it?' Sure if they told me up front they might do that. Of course, if they told me up front they might do that, I could well take my business elsewhere, but if i continued to use them knowing they might do that to me, I think my options would be limited if they decided to exercise that right don't you? And your reply is somewhat disingenious anyway. No one is talking about randomly throwing mail away, they are talking about deciding that they don't want to exchange email with certain other networks for various reasons. Again, if i am honest and up-front with my users about what i am doing, why, and what criteria i use to decide what mail to keep and which to reject then what is your problem really? If I decide to reject email from everyone called 'Simon' that might make me the worlds dumbest email administrator but if I am totally up front with you and make sure you know thats what i do, then if you still choose to allow me to manage your internet access then thats up to you. ' If you are an ISP you are promising to deliver me mail.' You really need to read the terms and conditions of your agreement with your ISP. Because unless you use the stupidist ISP in the world, they 'promise' nothing of the sort, I'm sure. Every ISP I've worked with has only ever promised to ensure its own service is in working order to a certain SLA, and to make 'best efforts' - that's all you can do because you cannot guarantee delivery of anything on the internet with 100% certainty for lots of reasons that have nothing to do with spam filters or dumb network admins. They might use a lot of flowery language to make you think that in the event of a mail server crash the ISP's CEO will personally print off your email and fly around the world hand delivering it, but if you read closely, I am sure it will add up to 'best efforts'. Go on, check now. I'll wait. Back yet? What did it say? See, what did I tell you. Mo