| last updated:11 Nov 2002 13:10 UK time |
![]() |
| JOS Statistics - Recent Comments (Comments added for week ending Sun 10 Nov 2002) | View Other Weeks |
| how do you manage your finance? | Sun 10 Nov | programmeur |
| just curious how you manage your financial matters. Percentagewise, how many goes to savings, stocks, paying mortgage/loans, children education, etc? |
| Sun 10 Nov | Alex Chernavsky | See Joel's review of a book called, 'A Random Walk Down Wall Street', by Princeton economist Burton Malkiel: http://www.joelonsoftware.com/navLinks/fog0000000262.html Read the book, and follow Malkiel's advice. |
| Sun 10 Nov | 2020sarah | 'A random walk' is not really a personal finance book, and Joel's review is about 8 sentences long, so I'm not sure how that answers the fellow's question. There are hugely disparate personal finance strategies... if you want two extremes, try : 'Your Money or Your Life' - buy used clothes, get out of debt, save, scrimp, put any extra into T-bills, get out of the rat race early to spend more time volunteering at the food co-op. 'Rich Dad/Poor Dad ' (and other permutations): get into debt, use debt to buy real estate from bankrupcy courts,resell real estate for profit, forget about college, take a sales seminar, buy naked puts, get out of the rat race early to spend more time hustling random deals. to answer the question... i have no kids, 27, $2000 of student loan debt, programmer for biomedical research. $70K a year. 3/4 of salary goes into savings account, the other 1/4 is used for food/shelter/entertainment. part time ski patrol / EMT job, additional $10K a year...use part time money to pay for night courses. when bank account reaches FIDC insured limit (< $100K) will start purchasing US T-bills. |
| Sun 10 Nov | Alex Chernavsky | 'There are hugely disparate personal finance strategies' Maybe, but the vast majority of them are not rational. The second half (roughly) of Malkiel's book is devoted to personal finance. The first half is theory, but it's written in an interesting, accessible style. |
| Sun 10 Nov | ZM | I like the Motley Fool's books, though I ignore their stock-picking 'systems'. No more stock picking or timing for me. Talking about stocks bores me. I split my investments 1/3 S&P 500, 1/3 US small cap, and 1/3 international stock funds (ala the 'Armchair Millionaire' book, which I also like). I like to keep things simple. Luckily, I have no debt. I max out my 401k (free money), company ESPP (free money), and IRA (tax shelter). I am hording the remainder of my paycheck for a down payment for a house. http://www.fool.com |
| Sun 10 Nov | CocaCola | do note that the original question asks what other people are doing, not what books to read. i had a college roommate who was really into all the investment literature, especially the motley fool. he loved to give advice on what to read and what to buy, and weirdly, people loved to listen to it. his persona on the fool.com bboard was ranked very high. however, i don't know how many of the other motley 'fool' members or real life advice takers realized he only had about $2800 invested in his 'portfolio.' i spend 10% of paycheck on living expenses, 40% on student loan repayment :(, and try to save the other half... |
| Sun 10 Nov | Alberto | My 'Strategy' has been to buy property with my savings, every mortgage I have had I have strived to pay off as early as possible. I like the security of living fairly comfortably if ever I did'nt have work (like now). This has left me with no debt so that 'most' of my savings have gone into conservative investments, CD's etc. If I had been more of a risk taker I could have made more money in stock in the roaring 90's, but I never lost a dime either. I've just sold all my property, so at the moment I've got a bit more than $1.5M sitting in cash 100% secure, low interest, at call, which I will buy a house with soon when I find one I like. I have inexpensive tastes, which helps. I am 42, have no kids and have been a contractor for about 14 years, in constant employment. |
| Sun 10 Nov | Alberto | I suppose what all that means is in my opinion don't waste it when you're earning it, especially if you are making good money, basically my strategy has been to make hay while the sun shines. |
| Sun 10 Nov | Tim | If I had money I am sure I would invest it wisely. (I am currently earning less in a full time position as Webmaster than I was working on the kill floor at an abbatoir.) Thanks. |
| "Murphy had other plans" | Sat 09 Nov | Agnus Moorehead |
| Cant help but read the latest Joel article and wonder if perhaps The Man might be drinking the purple kool-aid. For ever and ever we get directives from Joel Central about usability and general robustness of both code and overall solution. Now, a few days after the Latest Product ships and the online demo apparently falls over, The Boss explains that maybe it wasnt cost efficient to plan for / fix those demo bugs anyway, and by the way, do you know that our own in-house tools are buggy too and theres a good reason (cost) for that also? Sound like a bean counter talking here. Sounds like a bean counter who might be losing his ass. Welcome to Reality 101. |
| Sun 10 Nov | Prakash S | Economics 101: Run a company so that you can make money, the only way you can make money is if your customers are happy with your product. In the case of internal fog creek applications, the customers are the employees at fog creek, and they sure do know how to work around it, etc. Hence, it does not make sense to fix those things when there are other more important things to be done. I assume they (fog creek) work off a list which shows things to be done and its priority, this figures pretty low in that. |
| Sun 10 Nov | Leonardo Herrera | Nonsense. If you own a company, better learn how to count beans. I can't say I agree completely with this particular case. Perhaps 8 days would have been better than 4 if you take into account the potential damage to your image (ie, 'we tried to use FogBUGZ once, but their demo site was down, and I figured that if even they can't make it run, better try other solution'). Joel talked about it (the IBM imaginary customer). On the other hand, OF COURSE internal tools have bugs, and better don't lose time fixing them. I can't imagine why a tool meant to be used in-house have to be perfect. |
| Sun 10 Nov | Tj | Both you and Joel strike me as kinda nuts in this case. On one hand, a lot of good consultants I know make these little calculations, as 2nd nature. On the other, I think that little square, especially the 8 days figure, was pulled from someone's ass. You can't weight that equally. But is 1 hr downtime so bad? Many bad software people don't even try making a reasoned decision. |
| Sun 10 Nov | Joe AA. | After reading it I have the impression it was rationalizing a screw up. While I don't disagree that sometimes making a decision not to test for economic or other reasons may be the appropriate thing to do, not planning for the probability of that decision is entirely inappropriate - such as not keeping a closer eye on the status of the loading. |
| Sun 10 Nov | Sandy | Actually, Joel's article demonstrates pretty common behavior for successful software products. This behavior is pretty common. The trial site actually became customer facing software that needs to have the testing, etc. that you want in the product because it does effect the impression that you leave. There is an underlying principle that as your software becomes more successful, there are things that used to take a small amount of time or no time at all that now soak up a lot of time and energy. One of the arts of successful management is anticipating which of these things deserve your time and energy and which still don't. You need to make the kinds of calculations that Joel talks about being sensitive to the impression you leave. Joel's article gives another example as well. There is no way that somebody who was being successful would assume that the week or so after a release would be relaxing. There may be a lag, but there is always a big spike in activity that requires customer support right after a release. Just other differences between the two worlds. |
| Sun 10 Nov | ... | 'load testing is a no-brainer' Well, maybe not load testing, but preparing for the outlying conditions certainly is. I learned a long time ago that it's worth spending a little more time to make sure something can scale. |
| Sun 10 Nov | Marc | Should Joel have tested for 10,000 simulations (or however many it was) hits to his demo site? Today we can sit back and say 'sure, what idiot wouldn't?' but that is extremely unfair. You can only say that because you have substantially better information today than Joel did when the demo went live. What if the total number of demo users over the life cycle of 2.0 was only 1,000? Would you then reasonably think that on the day you release 3.0 that you demo requests would jump 10x the previous volume? Anyone who could predict that should become a fortuneteller. Without knowing the total number of requests you are about to receive, how could you define the load you are testing for? Sure, he could do some market testing to predict the interest of his demographic. I sure he has the $100k sitting in a cigar box to do it. :-) Also, don't forget that this demo has been up and running for some time now without problem. Its unlikely that he considered the existing design (that has function so well) would be fatally flawed. |
| Sun 10 Nov | ... | This is my own little table. COST do load testing don't load test --------------------------------------------------------- server OK 1 day 0 days server NOT OK 5 days 4 days I don't know of anybody who takes 4 days to load test. I've worked in my application space for long enough now that I pretty much know just by looking at some code or system whether or not it will scale. On those that I don't I usually load test as I go, making it a part of my unit tests. The private database scheme sounds like an idea that definitely doesn't scale, and that's when I think I would have nipped it in the bud. |
| Sun 10 Nov | ex2134n | Joel's math regarding making decisions is either totally baked, or he's not selling any software. An engineer day, for a load tester, is worth about $1000, MAX. Even in NYC, a 'load testing engineer' is only worth about $70K a year, which is about $300/day. Add in overhead, and you get close to $1000/day. So, even 4 days of load testing, is only $4000. Which is the cost of 2 unlimited fogBUGZ site licenses, or about five 20-user licences, or 20 5-user licenses, or 4 aeron chairs, or one workstation with a huge monitor, or a supersized number 2 meal at McD's for the development team every day, for a year. No load tester should take 4 days anyway, more like 4-8 hours. This latest column was very dissappointing. |
| Sun 10 Nov | Tj | btw, let's compare fogcreek with the real alternative. We're putting them on a pedestal, comparing them with ninjas. Instead let's ask what a bad company does. A bad company, like the one I'm at, makes schedules that are unbelievably optimistic. The head IT guy has been maneuvered out of real power because he had 4% less stock, and we have no idea how much time it actually takes to do any task. We overbudget for capacity insanely, so our ISP and hardware vendors laugh to the bank. Except that we misused the lower-salaried people, so no one actually loadtested in any meaningful way. So when problems visit, many people touch the product, and the 'engineer-days' pile up. Fogcreek does not ever have to worry about playing in this league. Any mistakes they make will have relatively light consequences. Allocating hours seems like an interesting art. There's someone in my guest room right now estimating hours for a proposal. Allocating time accurately is usually much better than having a great 'top speed.' Four engineer-days seems really reasonable if you're allocating the only time that matters -- the amount you can't directly bill for. |
| Sun 10 Nov | Tj | If that last sentence sounded strange, I had to run. ;) |
| Sun 10 Nov | ex2134n | the issue is that Joel did not make his engineer hours table BEFORE the server blew up. it would have been a refreshing breath of integrity to see a story about 'whoops, we didn't think to load test the server - sorry!' rather than conjuring up after-the-fact business analysis about why the releasing a broken server really just illustrates fog creek's superior business acumen. |
| Sun 10 Nov | Leonardo Herrera | Maybe that's his way to say 'sorry' :-) |
| Sun 10 Nov | Marc | 'the issue is that Joel did not make his engineer hours table BEFORE the server blew up' And you know this how? It should also be asked, do you know of any other company that would host a discussion about their 'lack of credibility'? Most would have shut this down and deleted the thread a long time ago. That alone says a lot about Joel and his company. And load testing or not, I'll be purchasing FogBugz for my development team. They make a good product. That says even more about Joel and his company. |
| Revenue | Fri 08 Nov | Carl Sagan |
| Joel, how much revenue has Fog Creek brought in this year? |
| Fri 08 Nov | Bella | The answer to that question is meaningless without also having the answer to 'What were FogCreek's total overhead expenses this year?' |
| Fri 08 Nov | Prakash S | maybe Carl is not interested in expenses, et. all :-) |
| Fri 08 Nov | Alberto | Still, it's a rude question. Fogcreek is not publicly listed. |
| Sat 09 Nov | Carl Sagan | I fail to see how it's rude. I'm not interested in if they're profitable or not, I'm interested in seeing how successful the company has been in selling products. |
| Sat 09 Nov | Diego | I'm no expert but to some people the question might seem the equivalent of asking, 'Joel, what was your income last year?' The company is private and probably mostly owned by Joel. That may be a reason why the question appears rude to some people even though you are not interested in Joel's income but the profitability of running a software company. I think people will know you meant no harm and understand your curiosity about the profitability of running a company that is small yet smart and innovative. |
| Sat 09 Nov | Diego | *the profitability of running a software company.* Sorry, Sagan. I meant: I think people will understand that you want to know how successful Fogcreek has been in selling their products, not about profitability. Sorry... i seem to confuse success with profitability which is wrong depending on the case. |
| Sat 09 Nov | ... | Not all companies view it as rude. I've worked for private companies that boasted about their revenue. Still, it deserves a little more tact than blurting out a request on a message board. |
| Sat 09 Nov | Farid | Do you really expect Joel to share this with you? speaking of naiveity |
| Sat 09 Nov | René Nyffenegger | Joel uses joelonsoftware.com to spread the word that he is clever und runs a successful company. He covers everything to prove that, how he hires people, what tools he uses, which he doesn't and why, what other companies make wrong. And mostly I agree with him; after all that's why I come back to his website. Yet, there is only one aspect that Joel leaves out: profitability of his company; though that would ultimately prove if he's right or not. In this view, Joel could be happy to have a possibility to say: Yes folks, my preaching is right and I have a worthy company. BTW, the only one who may think the original poster's question is rude is Joel. |
| Sat 09 Nov | Robert Anderson | It's always seemed a bit like armchair quarterbacking for Joel to write about how he has all the answers about how to run a software company *before* he ever actually tried to do it himself. From the few indications that he's given about revenue, I suspect it's not as easy or cut-and-dried as he thought. I think most of Joel's writings are well thought out and show the carefully considered experience of a 'trencher.' I would be pleased to see that such experience is all a company really needs to succeed. But I doubt it. Bob |
| Sat 09 Nov | J. D. Trollinger | 'It's always seemed a bit like armchair quarterbacking for Joel to write about how he has all the answers...' Have you ever read, 'Philip and Alex's Guide to Web Publishing', by Philip Greenspun? It was written when he thought the world was his oyster. I imagine he finds it slightly embarrassing now (Greenspun's company ArsDigita crashed and burned in a spectacular fashion.) Reminds me of my friend Francine's wedding from 1996. It was a very lavish, formal affair. Must have cost tens of thousands. The bride and groom seemed happy together. Fast forward six years: the couple are in the midst of an extremely nasty divorce, among allegations of infidelity, spousal abuse, and drug addiction. When I flip throught 'Philip and Alex's Guide', I feel about the same way as when I look at photographs from my friend's wedding. |
| Sat 09 Nov | the competition is listening | 'Hey General, what's your next target?' 'Why won't you tell me?, I'm not asking if your winning the war' |
| Sat 09 Nov | Ed the Millwright | JD, Good point. Perhaps lavish spending and trying to impress friends is a good predictor of failure for both marriage and small business. On the other hand, thriftiness and hardwork would be indicators for success. -- Others, Yes, it is quite rude to ask questions of income in US and some other western societies. In some traditional cultures such as parts of Africa, the amazon and some of the South Pacific, such questions of curiosity are considered normal. In this particular case, it seems the reason for asking is to gather information as a set up to shoot down or criticize another person in which case it would be considered rude in all cultures. -- BUT, a related question is of interest and might serve to answer your agenda better. What is the market penetration of CityDesk? I estimate, having done 5 minutes of research, that there are between 200 and 2000 copies that have been sold. Could be completely wrong of course. I just looked for a few keywords I thought might appear on some joel sites, then came up with a wild estimate using a randomly chosen fudge factor. I assume that consulting in FogCreek's major source of income, followed by FOGBugz, and finally CityDesk, which being consumer shrink-wrap software with free competition, probably is a loss-leader that draws interest to the company and its products. |
| Sat 09 Nov | George Leroy Tirebiter | I suspect Fog Creek is barely breaking even, if that. Two very competitive markets he is attempting to penetrate. High fixed expenses given where he locates his bidness. Don't let the (finely tuned and well done) Joel Jive fool you ... |
| Sun 10 Nov | Alberto | Personally, I hope he's making a bucket, the products are good and deserve some success. Sure, sometimes there is a bit of arrogance in the writing, but hey, we keep coming back don't we? At the very least Joel created something for a lot of people, which is more than can be said for most of us. Why the desperation to to see someone fail? |
| Sun 10 Nov | programmer | Keep in mind that Fog Creek Software has a source of income other than FogBUGZ and CityDesk -- their consulting work. |
| Sun 10 Nov | Defender of the Greenspun | To J.D. Trollinger, I don't agree with the comparison you made to 'Philip and Alex's Guide to Web Publishing'. The book is of it's time and in that time the world really was his oyster, that's why he was able to grow a company in such a relatively short amount of time. Read http://eveander.com/arsdigita-history for an insiders take on why it failed. As for the technical aspects, his web publishing approach and solutions still work and are available for anyone to use (see http://openacs.org/ ), they didn't die with the company (pretty nice of him to share this huh). If you really did read and understand the book (or are you in the coffee table book owner category?) you'd realise that the engineering decisions he describes are rock solid and definitely in the REAL world. It's a great book, nothing at all to be ashamed of (even the indulgence in photographs is replicated in this web site among other inspirations and lessons, see http://www.joelonsoftware.com/articles/fog0000000021.html for details). With regard the original question Joel himself has said that consulting helps to pay the bills (see http://www.joelonsoftware.com/articles/fog0000000013.html ) other than that it's none of our business ... that doesn't mean I'm not curious though :) |
| Sun 10 Nov | Dan Maas | Well, Joel has been sticking around for a while, so he's either making enough to cover his costs (plus some unknown amount of profit) or he's piling up lots of debt. Since Joel seems like a smart and happy guy (and he doesn't mention venture capitalists much, aside from poking fun at them), I'd go with the former explanation. :) |
| Sun 10 Nov | Philippe Back | BTW Greenspun was able to take some millions out of the venture... from that point of view, he has been quite successful. Other people having made good money are the guys @ togethersoft being acquired by Borland. People w/ good ideas and the ability to act will and do get the money. As for the detailed amount, that's another story. |
| Sun 10 Nov | tapiwa | I'm another one backing Greenspun. The man was quite ahead of his time. Reading his book was quite an eye opener for a lot of people, myself included. His ideas including giving people free training to use and develop with an opensource package was great. I even attended one of the bootcamps in London(UK). All the stuff I have heard about aD University have been positive. I recall Greenspun himself writing about how when talking to VCs, being told that they would invest, but were not so keen on an untried management. His response had been that if that was the case, they should take the opensource toolkit (forbear to http://openacs.org ) and build a company around it themselves. He seemed to have ignored his own advice somewhere along the line :-( I remember the old arsDigita website. The man ran the company very openly. Anyone could go through the site, and see the internal workings of the company. Hell, even typical engagement contracts, and financial details were online. When the VCs came on board, things started changing. All of a sudden, information was not available. From being a good resource, the website turned into an uber sized BILLBOARD. Then they rewrote the entire codebase in Java ..... Still, Greenspun seems to have come out of it all with a bit of money, so if money is a measure of success, he did not do too badly. |
| Sun 10 Nov | J. D. Trollinger | I like Greenspun's book. It sits on a shelf next to my computer desk. The book makes some good points about creating high-quality websites, but mostly I consult it when I feel that I might be getting too big for my britches. Reading a few pages restores some humility. My original point was that Greenspun's hubris makes him look foolish in light of what actually happened to his company. Recall that he didn't just discuss technical issues -- he also doled out business advice. See, for example, the sub-section of Chapter 2 that's headed, 'Growing ArsDigita the Sustainable Way'. Talk about counting your chicks. Sure, he and Eve Andersson blame all their failure on the venture capitalists, but I'm skeptical. Who brought them in? Who signed the contracts? |
| Sun 10 Nov | Rodger Donaldson | PANDA is still relevant from a technical perspective, because it mostly spends time debunking overly complex technical architectures. It's a good read and reasonably sound on that front. The fact that Greenspun got greedy, ignored his own advice about sensible business practise, and has a bunch of people claiming he's a lousy manager (and incidentally, some of his code isn't very flash when you poke about...), and aD the company tanked doesn't really tell me much about the value of his technical opinions, just that I shouldn't necessarily take his business advice. Joel, on the other hand, largely defines his technical advice in terms of how it affects his ability to run a successful company, which is why he's an interesting counterpoint to Greenspun and the (many) other people who are looking at things from a more purist standpoint. |
| Source code to this discussion forum software? | Fri 08 Nov | Anymouse |
| Does Joel have plans for releasing the source to this discussion forum software that he is currently using? Its nice and simple, and Id like to see how he did the design of it, to learn ASP, etc. So, any chance of gettin the source? -M |
| Fri 08 Nov | Troy King | Hey, maybe Microsoft will give you the source to Windows too, so you can learn C and assembly. |
| Fri 08 Nov | Troy King | Wow, did I leap without looking. I thought you asked for the source to FogBUGZ! My mistake, sorry! |
| Fri 08 Nov | Prakash S | hahahhahahha. If you ask MSFT with a 'pretty please', they just might! :-). Joel, if you do intend to make the source code public, could you throw in the specs as well. have a good one. |
| Fri 08 Nov | Andrew Hurst | You do get the source to FogBugz, when you buy it. Its ASP, its rather difficult to not get the source (as I understand it, I'm a perl programmer, and just know about ASP what I've heard :) |
| Sat 09 Nov | Anymouse | I'm not asking for FogBugz source here people. I'm asking if the source to *this* Discussion Forum software thingie will be released. I remember when Joel was writing it up, he said he kinda slapped it together very quickly, etc. Again, i'm asking about source code for the discussion forum software. If Joel does not wanna give it, I totally understand, its not like I'm 'demanding' it. -M |
| Sun 10 Nov | Alex Chernavsky | John Conners wrote a very similar package, using PHP and MySQL. I don't think he has it on his own site anymore, but he graciously allowed me to use the forum software on my site: http://www.astrocyte-design.com/forum/discuss.php See the bottom of the page for a link to John's home page. If you ask him, he'll probably allow you to use his code, too. |
| J2EE vs. PHP for web app development | Fri 08 Nov | Name withheld |
| One company I work with (as a consultant) has begun moving to a J2EE environment with Struts as the framework for web development. Certainly n-tier has its place, but many (or most) of the web apps that the organization needs developed - custom developed for internal use in the financial services industries - are limited in scope, have a small amount of direct interaction with a database backend or LDAP directory and change frequently, requiring many iterations as the business changes requirements. So my question is: should many of these apps - the ones that dont require n-tier - be PHP-based? The reason I mention PHP specifically is because it has a small role in the organization already. Months back, two similar projects kicked off at the same time in this company. One is being done in J2EE, the other in PHP. The PHP project is already in production, considered successful and revving for the second generation. The J2EE application is still under development, users are complaining about performance and theres the possibility that it may be further delayed. And a followup question might be: if PHP is a reasonable choice, why not figure out a demarcation line - a set of rules where the choice between J2EE and PHP is crystal clear. Any of this babble make sense - and any thoughts on these issues? |
| Fri 08 Nov | Name withheld | Forgot to mention that .NET isn't an option. Vendor-lockin is anathema to the organization in question. |
| Fri 08 Nov | igor | What about an in-between solution -- Java+Struts without full blown J2EE? We've been very successful in building webapps in Java using Struts without using any of the J2EE service/entity bean and app server madness. Recently I had to make some changes to a PHP-based PIM front-end (horder/imp/turba) and found it to be quite difficult to maintain the code. On the other hand, maintaining the Java-based web apps (which, BTW, are much more complex) has been much easier. I think the J2EE app server model has been way overengineered for a typical web app. It looks like Sun has realized this and is now focusing more light-weight solutions, like JDO. |
| Fri 08 Nov | bryan | My company is in the same situation as yours. Unfortunatly, we have not been given much as a choice because for some unknown reason our director decided that Java is the only say to go. Currently, my group has software written in PHP that changes rapidly and supports well over 300 users a day. We run on relatively modest servers and have very few problems. Most of our problems relate to poor database design when the system was first designed (which we are currently in the process of correcting). There is another group here at my company that has about the same number of programmers but programs only in Java. They can only handle a smaller number of projects and there developement cycle is much longer. They also only handle 5-10 users at a time before there servers start to slow down to a crawl. I can't think of hard and fast rules about what should be written in what language, but anything that involves rapidly changing requirements should be written in a language that can handle it like PHP. Good luck with it all. |
| Fri 08 Nov | pb | http://public.yahoo.com/~radwin/talks/yahoo-phpcon2002.htm |
| Fri 08 Nov | Chris Winters | The reason you can't draw a 'demarcation line' is that there are many more factors involved. Does this company already have a staff of Java programmers? It sounds like there are people who *know* Java and PHP already there, but are those their main jobs? Do they have existing libraries of business logic (not necessarily on an app server) they need to include? Do they need to connect to and use legacy data? (AFAIK PHP is good at the former but not so good at the latter) I'd agree with igor that PHP tends to be difficult to maintain for non-PHP people. The page creation paradigm is foreign to people in a way that Java/Struts isn't, even if the person doesn't know either. Also, you don't need to use every aspect of J2EE. There's nothing wrong with a Struts + Servlet Container + Persistence Framework (e.g., Hibernate) + RDBMS if you don't have heavyweight needs. Entity beans in particular can be major overkill. Finally, rapid development isn't solely a function of a language. It's primarily a function of design, no matter what language you're using. |
| Sun 10 Nov | Chas Emerick | >> http://public.yahoo.com/~radwin/talks/yahoo-phpcon2002.htm If you check out the 'Why not JSP, Servlets, J2EE' section of that presentation, you'll see that the *only* reason that such solutions weren't chosen was because Yahoo is tied to FreeBSD, which (according to the presenter) does not play well with Java because of some thread performance issues. I'm not a BSD geek, so I can't say whether multithreaded Java is a dog on FreeBSD, but it's certainly not the case that Yahoo rejected Java on the server due to its overall profile of functionality, performance, and platform independance. |
| Sun 10 Nov | php2java | either PHP or java should work fine for '1 tier'. there are plenty of JSP/Taglib/Servlet packages that have a 'paradigm' nearly identical to PHP. i would say it is a more of a factor of what languages the other programmers at the company prefer. |
| Object Caching in VB | Fri 08 Nov | rubyone |
| Im new to Visual Basic 6 and Im trying to implement a pretty basic OO design pattern... I want to create an object cache for a web application, but under the schema im familiar with, Id like to have an ObjectController of some sort that would be accessed by the application and would return cached instances of data objects relevant for display (in the past, ive done this using Factory design patterns in Java)... So all i have is a wrox book and the web, but I cant find anything on instantiating static objects, nor can i find any information about holding references to objects in ASP. I assume this is possible, but I could use some help! Anyone have any design suggestions or implementation resources i could refer to? how would one implement this in VB6? |
| Fri 08 Nov | igor | I haven't worked with ASP in a few years, but I believe there's a way to store objects on the session or application objects available in the ASP page (session/appliaction attributes in jsp). I believe VB has an associative array data structure (collection?) that you can use to store the cached instances. That's the basic idea, someone with better VB knowledge can fill in the exact class names. BTW, is your app only going to run on one machine? You may be asking for trouble if you need to maintain cache coherency across multiple machines. |
| Fri 08 Nov | Rob Conley | I write standalone applications but maybe this will help. This is done all in VB6 SP5. I have a need to maintain and add different file types. It is done in the following way with ActiveX DLLs. Interface DLL ----------------- Specify the interface of the following IFileType IFileFactory (has one method Organize which accepts one Parameter. aFileTypeList as FileTypeList FileTypeList (a strongly typed collection class of IFileType) Application DLL ----------------- Contains the object FileTypes which is an instance of FileTypeList. FileTypeDLL ----------------- References InterfaceDLL Has one object called FileTypeFactory which implements IFileTypeFactory. This is set to MultiUse. Has File Types that are set to Public Not Creatable and implement IFileType in various ways. Application EXE ------------------- References Interface DLL and Application DLL Has a init section that goes like this Sub FileTypeInit() Dim MyFactory as IFileTypeFactory FileTypes.Clear Set MyFactory = CreateObject('FileTypeDLL.FileTypeFactory'). MyFactory.Organize FileTypes Set MyFactory = Nothing End Sub ------------------------ Now I use CreateObject despite the speed hit because I only need to use it ONCE to grab the Factory. It allows me to have run-time loaded libraries where all you need to enter a string to load a library after it is installed. You can use References instead and go Set MyFactory = New FileTypeFactory. |
| Sun 10 Nov | Matthew Wills | Rubyone, I would consider checking out the list at http://peach.ease.lsoft.com/scripts/wa.exe?A0=visbas-l - it covers these kinds of issues. Seeya |
| "Missing" Free Tools | Fri 08 Nov | Matt H. |
| Things I have yet to find in my travels ... 1) Good .Avi Editor (I dont like the GIMP) 2) WYSIWYG HTML Editor 3) Test Software Automation. Any Recommendations? Open Source is probably best, then FreeWare, then ShareWare, then Shrink-Wrap-Ware for $50 or less ... regards, |
| Fri 08 Nov | Matt H. | Oh, the .avi editor should do animated GIFs, also. |
| Fri 08 Nov | Ged Byrne | Check out Chami's HTML kit. http://www.chami.com/html-kit/ |
| Fri 08 Nov | Kyle Cordes | Mozilla's HTML editor ('Composer') is WYSIWYG and not too bad. (I find DreamWeaver to be well worth the purchase price however.) |
| Sun 10 Nov | Steve Jones | Surely a true WYSIWYG HTML editor would only work if we had browsers that adhere to standards. I guess you could ignore all browsers except IE, but even then there's still the problem of versions. Anyone can write the editor, but if the browsers don't work how you expect and in a consistent manner, it's all a bit academic. For my part, I tend to assume IE current version - 1, that is IE5.5 now, and work from there. It gives me about 90% coverage and I'd rather lose 10% than spend substantially more effort in a vain attempt to get more than that. |
| Sun 10 Nov | Steve Jones | I'd also like a free Icon editor. VB used to come with one ages ago as a sample project. It worked then, but it'd be no good now, with 16x116, 32x32 and 48x48 all in the same file, etc. |
| Free (Or Nearly So) Programmer's toolkits? | Thu 07 Nov | Matt H. |
| I recently had the thought If I was going to consult (run my own company) what would I buy or use? This is what I came up with: Text Editor: TextPad ($50) or Pine (Free) Programming Lang: Perl (Free), PHP (Free), C++ (Gnu - Free), or Visual Basic (Cheap) Database: MySql (Free), or Access (Cheap) Source Code Control: CVS or WinCVS (Free) Bug Tracking: BugZilla (Free) or FogBugZ (Reasonably Inexpensive) Web Hosting: Some cheapy $15/month deal where you get a domain and can FTP stuff. They must have mySQL, apache, mod_perl Other Stuff: WinZip Other thoughts? |
| Thu 07 Nov | Frederic Faure | My software hall of fame :-) http://perso.club-internet.fr/ffaure/swhalloffame.html Fred. |
| Thu 07 Nov | Matt H. | I will definately add open office to the list. There's a catch! |
| Thu 07 Nov | Ron E. | Hmmm, here are some more that might be helpful: Finances: MS Money, GNU cash Environment: cygwin toolkit (if you're on a Windows box) Languages: There are many free ones. Depends on your project... Ruby, Tcl/Tk, Java Database: postgresql Text Editor: vim, emacs, Visual Slickedit Content Management: CityDesk, Zope Application Server: JBoss |
| Thu 07 Nov | Prakash S | Matt, what's the diff between cheap & reasonably inexpensive? |
| Thu 07 Nov | Matt H. | FogBugZ is free to evaluate, $90 for a single-user license, and $900 for a multi-user license. That's 10X the price of anything else I listed ... so I wouldn't call it 'cheap.' However, it does promise a 'bang' roughly the same as some CASE tools and Rational Products that cost THOUSANDS per seat. Since I haven't personally evaluated it, I'll just call it 'reasonably inexpensive.' :-) |
| Thu 07 Nov | Stephen Jones | For one user FogBuz is actually less than half the price of Access which you call cheap. Now if you're thinking of using Access to develop for MSDE, SQL Server, or MySQL, then I reckon it comes out pretty cheap when you think of the time it saves you, but in cash terms cheap it ain't. |
| Thu 07 Nov | jb | My take ( which pretty shows what I am coding in these days...) Text Editor: EditPlus ($30) or Eclipse (free) Programming Lang: Java (Free), Perl (Free), C++ (Free), Web Server: Apache and Tomcat Database: Personal Oracle ($400 a head) and it is pretty much fully featured. Database Access: JDBExplorer(?) ( free) TOAD ( cheap, but only for Oracle), OS: Linux or FreeBSD. Misc: CygWin, MSOffice ( still don't like StarOffice et al ), Visio, Other Stuff: much of the free stuff produced by GNU, Apache/Jakarta and IBM is good. Some of this things are under-implemented or over engineered but there are some real gems hidden in these guys offerings. |
| Thu 07 Nov | Adam | www.freshmeat.net The amount of quality open source stuff there is staggering. Granted, most of it is hosted on sourceforge Having used both eclipse and IDEA, I'd pay for idea (actually, I did) |
| Thu 07 Nov | been there, done that | |
| Fri 08 Nov | Ged Byrne | Been there, This is the crux of the matter. The nearly free products are as good- and sometimes better- than the very expensive alternatives. Personally, if I was developing for a number of customers and providing small executable I would definately use Delphi. The executables are so much easier to deploy into a new environment. None of that runtime hassle. |
| Fri 08 Nov | Just me (Sir to you) | Basic kit: MSDN Universal VMWare XMLSpy All of these cost some money but compared to what should be the turnover of a viable single person consultancy, these cost are most certainly not prohibitive. |
| Fri 08 Nov | derek | > Other Stuff: WinZip Get Ultimate Zip instead which is free. One less expense! |
| Fri 08 Nov | Matt H. | >The best tools money can buy. > >Starting a company on a shoe string budget >is a bad, bad idea. Well, uh ... no. I'm assuming you read PeopleWare and JoS, and know all about the performance benefits of buying the sharpest tools. I'm talking about a one-person consulting firm - and - in that environment - the performance benefit is from knowing that $0.75 out of every dollar goes back into -your own- pocket. If there is a commercial tool that has the right bang for the buck, then it will make my list. Access for one person (Remember: Jet is _free_ for the end user!) is definately on that list, FogBugZ might be. If the consultant can pass the cost of the materials on to the customer, then I might add ASPN. I'm going to make another post about the tools that I think are missing, but the list so far is getting pretty good. (Two more good ones: AIM for instant messaging and Snagit for screen captures & AVIs.) regards, |
| Fri 08 Nov | Albert D. Kallal | Gee, Oracle at $400 sounds cheap. The developer version of ms-access is $800 US... You get a ton of stuff..but it ms-access is not cheap For the *long* feature list, check out: http://www.microsoft.com/office/developer/suite/fastfacts.asp |
| Fri 08 Nov | Marc Scheuner | Programming Lang: Get Delphi 7 Personal - free download or $99 on CD with manuals. Excellent stuff, lot better than VeryBasic! |
| Fri 08 Nov | Ged Byrne | Marc, Unfortunately Delphi Personal cannot be used for commercial use. You have to pay for it if you want to use it for commercial purposes. Worth every penny, though. |
| Fri 08 Nov | stephen hill | Languages: You are pretty sorted here. There are a lot of good languages available for free (or even Free). GCC (The GNU compiler collection) includes C, C++, Ada, Fortran and Java. Perl and Ruby are also well handled in a cross platform manner. Development tools. Under *NIX you are pretty much sorted for small sharp tools (grep etc). The Cygwin platform for Windows duplicates that functionality. Editors. Flame wars abound. Personally I like Nedit under *NIX and Scite under Windows (bundled with Ruby). IDE's. Can be very useful, a pain in the arse and all points in between. No real prefernces here. I do use KDevelop, in some ways it rocks, but in others it is prehistoric compared to Visual Studio. DB's. MySQl and Postgres do the business in many cases. But like languages, you pick you're horse for the course. Best regards, Steve |
| Fri 08 Nov | Dan Sickles | python zodb zope mozilla komodo($29 personal) that's all I'm using |
| Fri 08 Nov | been there, done that | |
| Fri 08 Nov | Mr Jack | Since the benefits go into your pocket, you should be more careful about hamstringing yourself than ever. Don't skimp and try and scrape by with whatever you can get on a shoestring. Use the best tools money can buy. |
| Fri 08 Nov | Herbert Sitz | I agree with those who have said to get the best tools money can buy. In most cases those tools will help you produce (1) more polished results or (2) quicker results, and in many cases both. It's a little bit like Microsoft's Total Cost of Ownership against Linux/Open Source. MSFT essentially argues that even though MSWindows costs more than Linux, the extra labor costs involved with Linux outweigh the difference in licensing costs. MSFT's argument that MSWindows is preferable to Linux based on TCO is pretty weak, in my opinion. But similar arguments are valid in many cases when justifying purchase of 'best of breed' tools. If a tool costs $1000 but saves me 20 hours of work and helps me produce a better product to boot, then it's a no brainer to purchase it. I think the only times when purchase of the best tools isn't a no brainer is when as a consultant I either (1) don't have enough jobs/clients to fill my time so I may as well bill some extra hours handcoding a solution -- but this costs the client more , or (2) have clients who are happy with less polished solutions -- but the client ends up with inferior solution. Also, possibly spending extra to purchase tools that help you do more in less time may not be cost-effective if you can't charge premium rates to clients. But you should be able to charge premium rates when you're producing superior products in less time than other developers -- you've just got to communicate that to your clients. Even if you charge a higher hourly rate than other developers, clients are still going to be getting a better deal than someone who charges a lower hourly rate but uses lower quality tools (assuming you and other competing developers are equally talented and your tools really are 'best of breed'). I know it doesn't work out in all cases. But in many it does. Buying the best pays off. |
| Fri 08 Nov | Nick Hebb | |
| Fri 08 Nov | been there, done that | VMWare Info: http://www.vmware.com/pdf/ws_specs.pdf |
| Fri 08 Nov | Nick Hebb | Thanks for the link. I attended a software presentation last year where the presenter said that there validation testing included 'simulating' the application's performance in various OS's using VMWare. I spefically remember him phrasing it that way, which made me think that VMWare simulated other OS's. |
| Fri 08 Nov | Tom Vu | I tend to go with anything free for development purposes but did buy Visual SlickEdit for productivity gains. |
| Fri 08 Nov | Alberto | Don't you just use pirated stuff, like everybody else? |
| Sat 09 Nov | Marc | Nick, One of the other items listed was MSDN, this gives you all of the Microsoft OSs. Personally, I have every one of them installed here. My Question: I don't have XMLspy. I've never used it. What would I use it for? I know its an 'XML developer', but what the heck does that mean? If I'm developing a VB.NET/SQL Server application, where would this help me? My Tools: I use MSDN and VMWare every day and can't live without them. Visual Studio is the best IDE I've ever used (and I've used a number of them). One thing I didn't do was buy the Universal (I went with pro). To get the other items I needed (Office, SQL, Project, etc) I picked up the 'Microsoft Action Pack' for $250. It had all of them (as well as some other items). You can get the action pack from Microsoft at: http://www.microsoftactionpack.com/ |
| Sat 09 Nov | Ori Berger | If you use C/C++ and can afford it, get Purify or Bounds Checker. They aren't cheap, but they can save you a world of agony with stupid bugs and leaks. If you are developing for Linux, grab valgrind which is almost as good in what it can do, and runs significantly faster. Alas, it doesn't do Windows and I suspect it won't in any reasonable way for a long time to come. |
| Sat 09 Nov | Giorgio Galante | Personally I like the following (if I didn't have access to MSDN Universal ;-)): .NET Framework SDK SharpDevelop (www.icsharpcode.net) - .NET IDE - really good if you don't have VS.NET Firebird DBMS (free/open-source/non-GPL version of Borland Interbase) (firebird.sourceforge.net) |
| Sun 10 Nov | Rodger Donaldson | TORA is a good, free TOAD clone that runs under Windows and Unix/Linux systems. The UI is a bit slower than TOAD's, but it works with MySQL and PostgreSQL as well as Oracle. PostgreSQL is infintely superior to MySQL for DB work. OpenOffice removes the need to drop a small fortune on MS Office for most tasks (document exchange with clients). I'll agree with those posters who think that if you intend making a living from this you ought to be prepared to buy tools if you make money from them - if you develop in Windows world, you'd be an idiot not to pick up MSDN. If you can get an extra $20/hour for using a proprietary J2EE app server instead of the excellent JBoss, you'd be sensible to consider it. If you're selecting tools based on their philosophy, then obviously the money is secondary. If you're saving on costs at the expense of losing revenue, well, that's dumb. |
| Filemaker And coworkers | Fri 01 Nov | Eric Debois |
| Im a college teacher. We have been planning to build a little intranet for our staff for a while and since im the guy with the datamodelling/web app skills ive been put in charge of the project. The primary focus of the app will be an inventory database where all our hardware and software is registred. Simple stuff. The next thing is to tie the inventory to the scheduling so that the tech support can easily find out when and where certiain hardware and software needs be installed. No problemo so far. I could do this in less than a week with ASP or JSP. Approx. 30 ppl will use it. People around me are pushing Filemaker, praising its ease of use etc. One of the tech support guys in particular, is talking about how he could set up the inventory thing in a matter of hours. And to be honest I am a bit afraid that he will do just that and devote a load of time in to putting all the data into the database, with a datamodell I cant expand upon. And it feels a bit like he is invading my territorry. Yet I dont want to hurt his feelings either... Thoughts? And in any case, would filemaker be a good tool for this kind of job? |
| Mon 04 Nov | Frederic Faure | I don't quite see the point of using a tool (FileMaker) which, in its basic form, is not built for parallel write operations, and requires extra $ for its multiple-access version. Especially since you mentioned that you want to develop this application as a web application. Why not simply use a free, open-source client-server application like MySQL, PostgreSQL, or Firebird Interbase? Are there features in FileMaker or MS Access that those tools don't provide that would justify shelling out $ and using a proprietary tool? Fred. |
| Mon 04 Nov | | Why doesn't the college teacher give it to the college students as an assignment and get his work done for free? |
| Mon 04 Nov | Herbert Sitz | 'Are there features in FileMaker or MS Access that those tools don't provide that would justify shelling out $ and using a proprietary tool?' Well, Eric said in his second post that all of the client computers already have Access. So the question becomes whether there's any advantage to using Access over a web scripted front end to one of the open source databases. Access has definite advantages in terms of development time and the quality of interface you'll get over a web app. I think Jet is probably up to the task as a back end for this job, but if not someone has already pointed out that you could write an Access front end to one of the open source databases (using ODBC). Seems like it would be silly not to leverage the development advantage Access gives, especially when all the client computers already have Access installed. |
| Mon 04 Nov | Stephen Jones | For read only access to Access Web Pages there is no need for the client to have access installed. He simply sees the page as a normal HTML file. I would use Access and leave the Access database on the server. You're unlikely to have 30 people accessing it at the same time, and even then it should take it. If they only need read only access then let them see the web pages you have created, and cut down the number that are connecting to the .mdb file directly. One thing though. Do set the Access file to compact on close as ballooning .mdb files are one of many MS mysteries. And I suspect you will need some way of forcing users to log off from the database, or forcibly close down their computer, to allow for this. |
| Fri 08 Nov | Marc Scheuner | If you guys think Access (of all databases!!) is the tool of choice, good luck. But seriously: if Access can handle it, FileMaker will be more than adequate! It'll fly circles around Access...... FileMaker 6 is very capable, very powerful, has lots of XML and web publishing capabilities, is cross-platform (Windows / Mac - if that ever should be relevant), and it's a LOT easier to use and deal with than Access. Also, I don't assume those 30 people will constantly be online concurrently, right? If you do feel like you have to go with a 'real' SQL database, use FireBird, the Opensource version of Interbase - excellent stuff, very high quality, and FREE. Access it from any language, Delphi, VB, C++, Java and all, and it's absolutely rock-solid (used by several 911 dispatch centres). http://www.ibphoenix.com Marc |
| Fri 08 Nov | Stephen Jones | Marc, can you please tell us what you don't like about Access. To say (of all databases!!) suggests either that you know soemthing everybody else doesn't, or are simply mouthing off. |
| Sun 10 Nov | tapiwa | Like someone said earlier on. Concentrate on the data model. Nothing pisses me off more than having to maintain or worse yet extend a database designed by someone who thinks access is a super spreadsheet. We can discuss the pros and cons of the different databases, but if your tech support dude scr*ws up the data model, which is easy to do with access... (GUI tools and the spreadsheet look very dangerous with inexperienced 'DBMs'), then even if you implement on Oracle, you will still be stuffed. |
| Blog | Thu 31 Oct | Prakash S |
| Which blog software (if any!) do you use? |
| Mon 04 Nov | Dan Sickles | Of course all these home-grown blogs have an RSS feed. If your blog can't be read from a newsreader, it's just a chornological home page. RSS is where the value is in blogs. |
| Mon 04 Nov | Dan Sickles | chornological := chronological; |
| Tue 05 Nov | | Sean - shouldn't all those 'Obligatory |
| Tue 05 Nov | Sean Conner | To X. J. Scott: The thought never crossed my mind to patent the work (partly because I don't think software should be 'patentable'). The work I did was based off work Ted Nelson had done for Xanadu and was just another expression of his 'tumblers' and to me seemed like a rather obvious mutation of that work (namely, using existing notation to denote a range rather than the arbitrary notation of Xanadian tumblers). And even if I had a patent, then what? It does me no good if no one actually uses it and I have more interesting things to work on than trying to peddle an idea to a market that may not care. Heck, it's out there, it's GPLed and I've yet to see anyone actually use the code (either the blogging software or the Electric King James) or its ideas. Again, to X. J. Scott, about extending the functionality: Yes, I've thought of that too, and actually have some code to implement that in the blogging software (but currently disabled). The main problem I had was handling overlapping ranges (it was even worse with the blogging software since you can reference ranges in ascending or descending chronological order) and avoiding user interface surprises. The easiest is to just send out each selected range and not attempt to collapse them but I've yet to decide how I want to handle the situation. To anonymous: A great play on words; I may do that change ... |
| Wed 06 Nov | X. J. Scott | 'And even if I had a patent, then what?' Yes, I agree with you that patents are worse than useless albatrosses for anyone other than a corporation with legions of bloodthirsty lawyers, hence my comment to that effect. I was just pulling out the patent word to compliment you by emphasizing the excellance and novelty of your creation. Sorry if I offended you. |
| Thu 07 Nov | Sean Conner | No, you didn't offend me, just taken aback for something I thought was pretty obvious (well, obvious to anyone studying Xanadu). But thank you for your interest in the work. I do appreciate that. |
| Sun 10 Nov | itriedradiolastnight | i llike/hate blogs. i like to read them, but then hate myself for wasting the time. ;-) anyway, i have been building web-based crap for too long, and tried rolling my own, which sort of worked, until i started wasting too much time doing that, so the self loathing kicked in again (what's worse than wasting time reading others blogs? wasting time on your own blog software and not even having a decent blog to show for it) Uh...anyway, I tried out dave winer's 'radio' last night. and, it doesnt do all that much...but what it does do, it seems to do really well. if you use a mac, check it out. for various reasons, i need a blog editing tool that works offline. i also like downloading various crap software and trying it out. can anyone recommend any other blog tools for OSX? |
| VB6 Build and Debugging Question | Fri 08 Nov | Heston Holtmann |
| PREAMBLE: Maybe the JOS (JoelOnSoftware) forum is not the best place for this type of detailed development question, but i will ask anyways and see what people have to say.. QUESTION: Is it possible for the VB6 IDE compiler to build the final EXE (or dll) in a different directory (like a common BIN directory) other then the current project (.vbp) directory and still have the VB6 IDE debugger to find and run this different target when i want to debug it??? I do this all the time with the Visual C++ (DevStudio) debugger. I dont know how to do it with my VB6 projects EXAMPLE DIR STRUCTURE: Here is my project tree relative to H:\develop\GCS where GCS is the product name: H:\DEVELOP\GCS +---bin | +---fly | +---ini | +---maps | \---vrs +---src +---res NOTES: The src directory contains the VB6 project (.vbp) and all the source code (*.frm, *.cls, *.bas) and binary resources (*.ico,*.bmp,*.gif,*.res,etc) needed to compile the final .exe The bin dir is what my final setup program would create on the target computer. I ultimatly want my InstallShield project to build the final setup from all the files in the bin directory structure. I would like to have VB6 build the final .exe in the parent ..\bin directory so when i debug and run the application it can access the relative sub dirs (fly,ini,maps,vrs). This would simplify my develop-test-debug process as well as simplify my automated installshield setup build process. Any VB6 pros left out there??? P.s. for the curious minded out there.. all I can tell you is that GCS stands for Ground Control Station.... which is software for the UAV (Unmanned Aerial Vehicles) industry. See www.micropilot.com for more info, or http://www.google.com/search?sourceid=navclient&ie=UTF-8&oe=UTF-8&q=Unmanned+Air+Vehicles |
| Fri 08 Nov | Rob Conley | When you make a file it prompts you for a directory to save the executable in. If you save the project it will remember where it saved the last executable. It will also remember the NAME of the executable. I use VB6 SP5 so if yours doesn't do this try the latest service packs. |
| Fri 08 Nov | Heston Holtmann | Thanks, that helps with my final installshield setup build process..but... ... the VB6 IDE debugger still does not actually use the .exe in the target 'GCS\bin' dir because the app.path still points to the directory location of where the .vbp project file is; 'GCS\src'. If there is no high level VB IDE solution (like in VisualStudio).. i may have to resort to conditional code to check for DEBUG vs RELEASE builds and change my relative path strings in source code to accomodate my needs. Or conditionally change the current working dir based on DEBUG vs RELEASE flags. I'm Still open to other 'undiscovered' suggestions. |
| Fri 08 Nov | echidna | Heston, the VB IDE debugger operates on the source code, not the compiled executable. |
| Fri 08 Nov | Heston Holtmann | I guess i was getting my hopes up that I could get the VB6 debugger/IDE to work more like the VC++6 debugger that i'm so use to working with. The VStudio6 debugger lets you specify the target .exe to debug and at the same time set an independent working directory in the 'Project Settings->Debug tab:general' options: The interesting thing is if I compile to Native Code in VB6 and turn on 'Create Symbolic Debugging Info' i can actually debug my VB app (with full VB source) in the VisualStudio IDE debugger. You do lose some information that the VB debugger gives you.. but in many ways it works better then debugging in the VB6 IDE. Anyways.. to put this topic to rest.. the following was my VB6 solution: I define 2 symbols in my VB project 'MPDEBUG' and 'MPRELEASE' and call the following function as the first operation in my apps entry point function. '-------------------------------------------------------------------------- Public Sub ChangeDirToApp() #If MPDEBUG = 0 And MPRELEASE = 1 Then ' assume that in final release builds the current dir will be the location ' of where the .exe was installed; paths are relative to the install dir ChDrive App.path ChDir App.path #Else ' in all debug/IDE related builds, we need to switch to the 'bin' dir ChDrive App.path ChDir App.path & BackSlash(App.path) & '..\bin' #End If End Sub I gues you I can't shake my VC++ programming habits out of me even when i'm trying to think VB! |
| Sat 09 Nov | Rob Conley | My Directory goes like this. MyProjects MyApplication AppEXE DLL1 DLL2 DLL3 etc Under AppEXE has the directory tree and files the same as if it was installed. Since most of the directories I use are definable in the program I have a special configuration that I use while developing. While I do see the point of how Visual C++ does it. Understand that the VB debuggers allows you to alter the source while debugging in that regards is a lot more powerful. One of the few misses with version 1 of.NET is the removal of this from VB.NET. |
| Software Patents | Fri 08 Nov | Kenshi |
| Necessary IP protection or a system designed for abuse? What are your experiences and opinions with regards to software patents? |
| Fri 08 Nov | Mark Hoffman | One only has to look at this site: http://www.youmaybenext.com/ to understand the inherit dangers and abuse of software patents. PanIP has a patent on basically any system that performs e-commerce on computers with CRT's. They are in now in the process of suing dozens of companies for patent infringement. Obviously, they aren't going after companies like Amazon because they know they would get crushed. Rather, they are attacking 'low hanging fruit'by suing small companies that don't have the resources to fight a lengthy legal battle. I'm more supportive of patents of algorithms and such things, but the fact that you can patent a concept in software is just nuts. |
| Fri 08 Nov | Stephen Jones | Part of a global conspiracy to ensure that the rich get richer and the poor stay poorer. Still illegal in the EU but the Americans are pushing and using the usual dirty tricks to try and change things. A superb way of protecting the IP of lawyers however, by allowing them to gouge chunks out of the intellectual patrimony of engineers and software developers. |
| Fri 08 Nov | Mark Hoffman | 'Part of a global conspiracy to ensure that the rich get richer and the poor stay poorer.' Heheheh..No, I doubt that. Rather, it's yet another chapter in the endless schemes that people come up with to make money without expending much effort. No conspiracy, just lazy people trying to make a fast buck. |
| Fri 08 Nov | David Clayworth | If you follow the link to youmaybenext, and then follow their link to the appropriate patent, you will notice that the Patent Office has a shopping cart allowing you to order documents from them. Doesn't this mean that the Patent Office is violating patent 5,576,951? |
| Fri 08 Nov | BH | > Part of a global conspiracy to ensure that the rich get richer and the poor stay poorer. Stephen Jones is correct. The patenting exercises going on in software are yet another way to transfer money from those who create it to lazy bums who want to steal it. The patent system originally hada good intent, but that's not how it's used now. |
| Sat 09 Nov | Brian | I thought Divine made similar claims to a shopping cart patent. http://news.com.com/2010-1071-962485.html |
| VNC fixed shift key problem | Thu 07 Nov | Matthew Lock |
| From the recent discussion on VNC it looks like the latest release has fixed the problem with shift and selecting by keyboard. Additional functionality in 3.3.5 - Wheel mouse supported - Improved key handling for Windows - Improved support for 256 colour displays - Support for 16 colour displays, as found with very old graphics cards - Add New Client optionally takes a port number http://www.realvnc.com/3.3.5-release-notes.html |
| Sat 09 Nov | Joel Spolsky | Yay!! The port number thing could be very useful too, if it lets us work around firewalls doing customer support. |
| What are your favorite weblogs? | Thu 07 Nov | Scott |
| Im getting a little tired of the stuff I read daily. That said... What are your favorite weblogs? Joel, what blogs do you read? Scott |
| Thu 07 Nov | Kevin | Pop Culture - don't bother unless you are in your twenties. http://www.x-entertainment.com/updates/ Kevin |
| Thu 07 Nov | ... | http://www.angrycoder.com/ |
| Thu 07 Nov | Ben | Similar topic - http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&ixPost=8827&ixReplies=24 |
| Thu 07 Nov | Diego | It's a good question that should be asked again. http://www.keithdevens.com http://www.bugpowder.com/ And I guess the most obvious one aside from joelonsoftware.com: http://www.scripting.com |
| Fri 08 Nov | John Topley | Apart from Joel's I like www.jbconners.com, www.diveintomark.org and www.iunknown.com |
| Fri 08 Nov | John Topley | That's: http://www.jbconners.com http://www.diveintomark.org http://www.iunknown.com ;-) |
| Fri 08 Nov | Brian | Matthew Thomas http://mpt.phrasewise.com/ His essay on 'When good interfaces go crufty' (http://mpt.phrasewise.com/stories/storyReader$374) is being discussed on Slashdot now. http://developers.slashdot.org/article.pl?sid=02/11/08/0154238&mode=thread&tid=156 |
| Fri 08 Nov | Dan Sickles | a few of the blogs in my aggregator: http://weblog.infoworld.com/udell/ http://www.ozzie.net/blog/ http://diveintomark.org/index2.html http://jrobb.userland.com/ http://doc.weblogs.com/ http://www.scottandrew.com/ http://nyt.weblogs.com/ http://www.deftone.com/blogzilla/ http://blogs.osafoundation.org/mitch/ http://philringnalda.com/ http://www.russellbeattie.com/notebook/ http://jarretthousenorth.editthispage.com/ |
| Fri 08 Nov | ... | Chris Sells, consultant, author, speaker and general technology wonk. http://www.sellsbrothers.com/spout/ |
| Fri 08 Nov | Charlie Felcheur | mediageek -- indy perspectives on all aspects of media and tech: http://www.mediageek.org |
| Fri 08 Nov | JY Stervinou | Some good fresh Radio UserLand tools to find Weblogs people like: http://radio.userland.com/rssExplorerTool http://radio.userland.com/weblogNeighborhood |
| Fri 08 Nov | Eric Hancock | http://blogs.salon.com/0001081/ |
| Fri 08 Nov | ZB | http://winerlog.inspiredsites.net/ |
| Fri 08 Nov | John C | One interesting and insightful and one more surreal. Not sure which is which... http://dotnetguy.techieswithcats.com/ http://www.wilwheaton.net/ |
| Sat 09 Nov | Bjorn Blix | Its all an act (I think), but Billy Pooper is quite amusing. http://www.pooper.cc http://www.diaries.com/secrets |
| Sat 09 Nov | Mean Dean | http://www.HealYourChurchWebSite.com The domain name says it all. |
| N-Tiered Solutions/In-Memory Databases | Thu 07 Nov | beach bum |
| Folks, I was wondering if anyone here has produced n-tiered solutions which utilized an in-memory database? The product we are developing has reached critical mass. We have a calculation engine which makes use of a cache mechansim we built in-house. As the product requirements have expanded, this particular cache needs to become more sophisticated. At the moment I am analzying the feasibility of implementing sophisticated indexing algormithms versus commercial tools on the market. In theory, these products sound great and I could see many applicable uses for them. However, we have all been bitten by black box solutions at one time or another. So, in summary, I would appreciate any input, both positive or negative based on your experiences using any in-memory database technology. |
| Thu 07 Nov | Benji Smith | If you're doing J2EE development, an intriguing solution could be the Prevayler ( www.prevayler.com ). It's a system for keeping all of your business objects available in memory. I guess the idea is that 1) If you can keep your whole DB in memory, it will run much faster. and 2) If you eliminate all of the N-tier connections and put data and logic together in the same tier, you eliminate needless parsing and connectivity overhead.
The system seamlessly backs up the in-memory database on a continuous basis using Java object serialization. After any change is made to the data, an incremental update is saved to disk. After a certain number of incremental updates, the system saves a massive snapshot of all the data. Then, if you experience a crash (or a shut-down), you can recover your data into memory by loading the most recent snapshot and then stepping through all of the incremental updates saved since that snapshot.
A possible drawback (or benefit, depending on how you see it) of this system is that there is no built-in querying mechanism. So you have the additional task of developing a way to query all of your objects. Of course, you eliminate the overhead of parsing SQL queries, and you can do things with your data structure that are impossible to do with SQL.
Having said all of that, I've had my eye on this project for a while now. The project administrators are very active. A new version was recently released, and very few bugs were reported. Those bugs that were reported seemed to be fixed quickly. I've looked over the code myself and it looks pretty clean. It's small (less than 2 KLOC, if you don't include sample projects, etc). And it seems to have very good benchmarks.
It's LGPL, so you can incorporate the code into a proprietary system if you want. The only reason I've never used it is that I haven't had a project recently that would call for a massive persistent object database. But if I had the opportunity, I would jump at the chance to develop a project with this system.
|
| Thu 07 Nov | Benji Smith | BTW, there are also prevayler implementations ported to C#, Python, Smalltalk, and Ruby. There are links at http://www.prevayler.com/wiki.jsp?topic=PrevaylerPortsToOtherLanguages |
| Thu 07 Nov | Rover Still | 'and you can do things with your data structure that are impossible to do with SQL.' Benji, can you give an example of the data structure that SQL can not do? |
| Sat 09 Nov | Carlos Villela | Hi! It's very nice to see that people are talking about Prevayler, as I'm one of it's developers! :) An example to your question, Rover, is that when you're working with Prevayler, you can use pure Java Objects. So, you can get full object-orientation support: inheritance, polymorphism and encapsulation of your data. So, it gets a *LOT* easier to do trees, N:M relationships, and graphs in general. If you're storing more than a simple Customer:Product:Stock graph, then Prevayler can help you a lot... well, Java can help you a lot. Prevayler is just the persistence trick added to it ;) Shameless self promotion: there's an article I wrote about it at IBM developerWorks, here: http://www-106.ibm.com/developerworks/web/library/wa-objprev/ |
| Any JDeveloper Users Here? | Fri 08 Nov | John Topley |
| The organisation I work for has recently decided to adopt J2EE and I believe had chosen Oracles JDeveloper as the IDE. Has anyone any experience of using this tool? Is it any good? Im particularly interested in how it compares to JBuilder, as Im pretty familiar with Borlands IDEs. Thanks. |
| Fri 08 Nov | Gerald | I haven't used JDeveloper extensively but have played around with it a bit. It has a similar feature set to JBuilder in a lot of ways but it's UML features are a lot stronger then JBuilders. I did find it awfully slow though, worse then JBuilder from a performance standpoint. This was on a PIII 600 with 256MB of RAM. Generally speaking I don't think it be bad environment to work in if I was forced to use it. |
| Fri 08 Nov | Rob | For J2EE development, you might want to try Glider: http://www.ensemble-systems.com/glider.html Glider provides a fairly basic editor/IDE, but the real strength is that you can run and test your J2EE apps without deploying them on a server. This means you can reduce your code-build-test cycle considerably. Disclaimer: I implemented some of the back end stuff (parts of the EJB container simulator) so I am biased. That said, I believe that it's actually a pretty useful tool for what you want to do (and as a developer, I'm always the first to criticise any apps I work on!). Than main thing when selecing a tool is get something that doesn't try to lock you into one EJB container (for example, by generating source code that exploits some implementation quirk of the sever it is deploying to). It is possible to write reasonably portable J2EE code, although I'm sure most vendors would prefer it if you didn't. I don't have much experience with other J2EE IDEs so I can't comment on how good they are - even when I've used fully featured IDEs, I tend to avoid specialised features that autogenerate classes, etc. PS: I do not speak for Ensemble and all opinions are mine, etc - I'm simply speaking as a Java developer with an interest in this stuff. |
| WinInet Using VB | Thu 07 Nov | Giampiero |
| I have been trying to use the WinInet.dll within an Activex DLL that I am trying to make in VB. I know that Joel has used the WinInet library for CityDesk, and I know that CityDesk was written in VB, but the IDE keeps telling me that it cannot get load the DLL as a reference. Anyone else have this problem? Did I dream up using WinInet in VB? Please help, I would rather use WinInet instead of Winsock. |
| Thu 07 Nov | Philip Dickerson | Here's a starting point (without comment or explanations): Private Const scUserAgent = 'MyApplication' Private Const INTERNET_USER_AGENT = 'My own WinInet' Private Const INTERNET_OPEN_TYPE_PRECONFIG = 0 Private Const PRE_CONFIG_INTERNET_ACCESS = 0 Private Const INTERNET_INVALID_PORT_NUMBER = 0 Private Const INTERNET_FLAG_RELOAD = &H80000000 Private Declare Function InternetOpen Lib 'wininet.dll' Alias _ 'InternetOpenA' (ByVal sAgent As String, ByVal lAccessType _ As Long, ByVal sProxyName As String, ByVal sProxyBypass As _ String, ByVal lFlags As Long) As Long Private Declare Function InternetOpenUrl Lib 'wininet.dll' Alias _ 'InternetOpenUrlA' (ByVal hOpen As Long, ByVal sUrl As String, _ ByVal sHeaders As String, ByVal lLength As Long, ByVal lFlags _ As Long, ByVal lContext As Long) As Long Private Declare Function InternetCloseHandle Lib 'wininet.dll' _ (ByVal hInet As Long) As Integer Private Declare Function InternetReadFile Lib 'wininet.dll' ( _ ByVal hFile As Long, _ ByVal sBuffer As String, _ ByVal lNumBytesToRead As Long, _ lNumberOfBytesRead As Long) _ As Integer Private Sub Form_Load() Dim hNet As Long Dim hUrlFile As Long Dim buffer As String Dim BytesRead As Long Dim bRead As Integer hNet = InternetOpen('My Test', PRE_CONFIG_INTERNET_ACCESS, _ vbNullString, INTERNET_INVALID_PORT_NUMBER, 0) hUrlFile = InternetOpenUrl(hNet, _ 'http://www.microsoft.com', _ vbNullString, 0, INTERNET_FLAG_RELOAD, 0) buffer = String(102400, 0) bRead = InternetReadFile(hUrlFile, buffer, Len(buffer), BytesRead) buffer = Left(buffer, BytesRead) Debug.Print buffer Call InternetCloseHandle(hUrlFile) Call InternetCloseHandle(hNet) End Sub |
| Thu 07 Nov | mb | Why are you trying to use WinInet at all? You can probably use XmlHTTP, which is included with MSXML. It may use urlmon or wininet behind the scenes, but you don't need to know about that. |
| Thu 07 Nov | mb | Oh, one more thing: is this ActiveX control running in a user's web browser? And you want to use it to get documents from elsewhere? You can easily create a big security hole with this, please be aware of that and embed appropriate restrictions into your control. (One security hole: evil popup ad site creates a page with your activex control on it, telling it do download something bad--maybe a well known email site or banking site. then they can upload the email/banking data back to themselves.) |
| Thu 07 Nov | Kevin | To expand on Philip's explanation: There are 2 types of dlls. COM and non COM. Wininet.dll is a Non COM dll. You cannot load these using the add reference menu in VB. You need to specify the prototype of the functions you wish to use in that dll. Then you can call these functions from your vb app and the vb runtime will find the actual dll and call the functions in it. Kevin |
| Fri 08 Nov | Philip Dickerson | To expand a little on the code sample that I entered earlier... As explained by Kevin, WinInet is an 'API' style DLL, not a COM DLL. A reference to the WinInet DLL cannot be added to a VB project, the DLL must be called similar to Windows API's - by declaring the appropriate functions and constants for the DLL and then calling those functions from VB. You don't need to declare ALL the functions and constants for the DLL, only those that are called in your VB code. Warning - when string values are returned by API methods, the strings must be pre-allocated to be large enough to hold the return value (otherwise, depending on the particular API, you will either get an empty string or cause a fatal error in your program). The function used in the example code includes a parameter for the length of the string, so it won't attempt to write past the end of the string buffer. However, not every Windows API functions includes a length parameter. Also, do not use fixed-length strings for these return parameters - this will cause a different type of error. That's the reason for the statement: buffer = String(102400, 0) The number in this statement needs to be large enough for the expected return string. Alternatively, you can check the 'BytesRead' value - if this return value is equal to the length of the pre-allocated string, then you need to increase the size of the string and call the function again. A few useful articles for using WinInet are: Platform SDK: Windows Internet - Using WinINet http://msdn.microsoft.com/library/en-us/wininet/wininet/using_wininet.asp WinInet: Enable HTTP Communication in Windows-Based Client Applications http://msdn.microsoft.com/msdnmag/issues/01/06/UseMon/default.aspx Platform SDK: Windows Internet - WinINet Reference http://msdn.microsoft.com/library/en-us/wininet/wininet/wininet_reference.asp Note that a few (less common) WinInet functions are only available if later versions of Internet Explorer are installed on the client system - see: INFO: WinInet APIs and Internet Explorer Version Information http://support.microsoft.com/default.aspx?scid=KB;en-us;Q252369 Using XMLHTTP is often a better alternative to WinInet, but it requires that you can ensure that a sufficiently recent version of MSXML (or a very recent version of Interent Explorer or the operating system) is installed on the client system. |
| Data validation: best practices | Wed 06 Nov | Nick Hebb |
| When writing data-centric applications, what are the best practices for implementing data validation? Obviously, anything that you can catch at the user interface should be done at that level. Also, I assume the appropriate constraints, triggers, etc. should be implemented at the database to ensure the integrity of the data. But what about the middle-tier? Do you re-validate the same data that you validated at the UI? Do you pre-validate the data prior to any database transactions? On one hand, redundant validation would ensure that each layer is robust in its own right (e.g., in case of component reuse). On the other hand, it leads to added code, maintenance, and processing overhead. What do most of you do? |
| Wed 06 Nov | beach bum | |
| Wed 06 Nov | jb | As a general rule I try to make the middle tier the repository of all validation rules. I may also perform the same validation in the client and/or in the database but every rule is enforced in the app-server. This may cost because of wasted effort but it means that any app that uses the application-server is gaurenteed to use the validation, even if I it is written by a third party. I usually only use the database for highly data-centric data validation. (e.g. fk constraints, field-sizes, etc. ) I do not believe complex business validation rules (e.g. Accounts can only be in state X if condition A, B and C are true) belong in the database. I do not use triggers as a general rule, as their operation can be hidden from the general logic flow (especially if they are dropped or disabled). I prefer the validation rules to be out in the open. I tend to do as much validation in the GUI as can be performed without having to do a round-trip back to the server. generally this means only the current object or record in question. A generally try to use the GUI itself to control the type of data that is entered, so that it always valid. For example using text fields that are limited to the appropriate length, or using combo-boxes that are already limited to one of valid values that may be used. A really useful one is graying out the OK button until the data is entered correctly. On technique I use with the client is to define the validation rules in textual format (e.g XML, or sometimes even javascript) and download them from application-server to the client. The rules contain the basic validation rule and a base error message to display. This means that you can change the validation rules in one place and they automatically propogate. It also allows you to dynamically change the language of the error messages. Anyway that's my take, I am sure many would beg to differ. |
| Wed 06 Nov | Joel Spolsky | Let me vote for NOT greying out the OK button until the data is OK. This is incredibly frustrating for people who don't know what they've done wrong. It's almost always better to let them hit OK and then tell them what's wrong. Similarly I tend to think you should never grey out menu items, even if they are obviously not relevant. Better keep it ungreyed out and explain why that menu item doesn't work now when someone clicks it. This is strictly from a usability perspective, not a data validation perspective. I agree with the philosophy of making the UI represent the data model so closely that almost no validation is necessary (for example, in FogBUGZ, pardon my obsession, when you enter or edit a bug, there is literally nothing you can do that is not valid. When you submit a new bug or a bug edit it ALWAYS goes through, we don't even have a mechanism for the UI to fail.) |
| Wed 06 Nov | jb | >Let me vote for NOT greying out the OK button until the >data is OK. This is incredibly frustrating for people who >don't know what they've done wrong. It's almost always >better to let them hit OK and then tell them what's wrong. Fair enough I guess. I kind of find it useful myself, but I guess that is one of the first rules of useability is that not every one is like me :-). Mind you in any case ( grey OK or no grey OKs ) you should generally tell people if the field is optional or not. |
| Wed 06 Nov | Matthew Lock | It amazes me how many people do the data validation in Javascript on the client when building web applications instead of validating on the server. This is one of the biggest security risks around as it means a malicious user can disable Javascript and post any data they like to your application. The golden rule is never to trust the client, just because you are writing a GUI with verication it doesn't mean a user won't connect with their own client (say telnet) and enter malicious data. |
| Wed 06 Nov | Stephen Jones | The general rule is to be sparing with data validation rules. The chances of fouling up and preventing valid data input is great, and the frustration it causes users immense. Things are getting better now, but I've lsot count the number of ficticious addresses and ZIP codes I've had to use on web forms because I live outside the States. The question of greying out icommand buttons and menu items seems to split people. Everett McKay in 'Developing User Interfaces for Microsoft Windows' argues that you should always grey out options that can't be used. However as Joel says it can be confusing; I'm often confused by having the formatting buttons greyed out when I open a new Outlook mail message, or not been able to alter Word 2000 Options when there is not a document open (the reason for the latter presumbably having something to do with not having a template to save in, but still lazy programming in my opinion). I would however vote for having the inacessible options greyed out to start with. It's quite possible you never will have time to get round to writing all the error messages, and the worst scenario is having an option that is not greyed out but does nothing when you click on it. |
| Wed 06 Nov | disabled options are stupid | I hate greyed out options. Many people do not understand that the option is disabled on purpose, to them it's simply not working! |
| Wed 06 Nov | anonQAguy | just a few tidbits - 1) if you're working with a web app, then 'maxlength' is your friend. Use it. It works. Of course there's a bunch more to validation than just this, but it's so shit-simple, I can't see why it would not always be used (on the controls for which it applies, certainly). Surprises me how many folks just don't even include this attribute, leaving themselves open to any manner of over-long intputs making their way into the back-end. Having said that, you still need to rely on doing validation on the server because it's just too damned easy to get around a web browser and send http directly into your server. 2) I also prefer to avoid pushing very much validation to the client because that just means more javascript in the client. The more javascript you jam into the pages themselves, the more you're asking for a page compatibility problem, at least for a public website. I've tested a bunch of them, and it's generally proven to be better to keep the javascript in the web page as lean and simple as circumstances permit. We typically do the bulk of validation server-side. 3) Based on my experiences, I suggest to you that the single thing you're likely to have the most difficulty with getting done regarding validation is not the implementation, or the decision of where to put it, it's going to be gathering up the validation rules you need and making sure everybody on your team has that info by the time they need it. When I have to start working on the tests for a system, I always have to chase around for a data dictionary, for example, and when I get it it's normally not very complete. That's just one example. 4) might want to talk with your QA/Testing folks. They normally spend a large part of their time digging into the validation issues relevant to your shop and projects, they may have some insights that would help. 5) again for working on web systems, don't forget to check for valid commands embedded in a data field's input. At the current OpenHack (see www.eweek.com), the first successful attack, though minor and not causing any damage, was a scripting attack by submitting valid html in a web page form field. cheers, |
| Thu 07 Nov | Nick Hebb | Thanks everyone for the good advice. I guess I've always been anal about wanting to catch a problem at the earliest point possible, so validating at the UI just made sense to me. Before posting this topic, I realized that most of the books on my bookshelf address what you _can_ do, but few address what you _should_ do. > Let me vote for NOT greying out the OK button until the data is OK. Joel, can you talk to the folks at Microsoft about this? I get tired of having to accept those damn EULA's before being able to click Next>>. |
| Thu 07 Nov | Matthew Lock | Here is a great run down on validating data and security issues. The examples use Perl but the principles will apply to any language: http://www.oreilly.com/catalog/cgi2/chapter/ch08.html |
| Thu 07 Nov | Simon Lucy | As Joel says somewhere, so far as the user is concerned the application is the UI. So, no matter where the actual validation is done the user must feel as if the application in front of them has done it and not some strange faraway animal. There are few things more irritating to a user than to fill in a form, hit a button, wait some amount of time and then get some dialog or page saying 'You didn't enter x' or 'X is invalid'. This is not to say that you should validate everything in the UI. You should give the user the greatest help in providing valid entries in the first place;by filling list boxes correctly and updating them if the context changes;by providing zip code/post code lookups if you validate addresses rather than have the user guess with their fingers;date formats should be validated in the UI as should all masked data entry;checksum credit card numbers before sending them;and so on. The user shouldn't be left with the feeling that the application is looking to catch them out, or that in order to successfully use the application that they need to mirror the thought processes of the developer. |
| Thu 07 Nov | Alberto | I always have an small information pane on my data entry forms that tells the user what (if anything) is wrong with the data they have entered. FOr example in VB I have a simple status bar at the bottom of the form with an icon which pops up if the user has entered something bad and tells them what the error is. I use an error DLL with all the error codes and descriptions etc in it. Also, I grey out the OK button when an error is displayed. Hell, the end losers can see what's wrong can't they? |
| Thu 07 Nov | Herbert Sitz | I know several of the Delphi-based n-tier solutions (Datasnap, Asta) allow for constraints to be stored on the server, but to have them transferred to the clients along with data. So the logic for making sure constraints are satisfied is on each client, but the constraints themselves are stored on the server. Taking advantage of this setup gives you advantages of each: (1) constraints are stored on the server and can be changed with no need to modify clients, and (2) constraints can be checked immediately on the client without a round-trip to the server. |
| Thu 07 Nov | X. J. Scott | I completely disagree with Joel and others opposed to greying out action buttons. It gives the user instantaneous feedback when their input data is not valid. It's better to find out as soon as possible when data is not valid. For subtle/inobvious data format problems, an explanation of what is wrong can be drawn to an info bar at the bottom of the window as soon as the format goes bad. It seems likewise absurd to me to not grey out menu options that do not apply at the moment -- greying out is much better than removing the menu items, because users prefer menus where the items appear in a relatively fixed postion as much as possible (temporarily disabled items should not be removed). As much as possible, the interface should not allow invalid data to be entered, but when invalid data is entered, there should be feedback given. Waiting until the user presses 'OK' to tell them there is a problem that could have been easily diagnosed at a previous time seems to me to just be lazy. When I am using software and press 'ok' and get some lame dialog that says 'One or more of your items contains invalid data. Please correct and resubmit.' I curse the programmer and the loins that bore him. |
| Thu 07 Nov | mb | An implementation question: A lot of the validation which should be done at the UI level can be described in a straightforward manner, perhaps with something like XSD. Are there tools which do XSD to UI mapping or the equivalent? I'm thinking of things like mapping choices to dropdowns (this item has to be one of 50 states) in addition to basic typing and required fields. I suppose you could use XSL + original data + XSD + second XSD to generate HTML, but that XSL would be pretty complicated on its own. I'm basically trying to generalize this and not have to write code on a per-control basis, not even the code required by the .net validation controls. This also allows the validation to easily be driven by some data handling in the middle tier--we know you're responsible the west of the US, so the UI layer gets a list of western states as valid data. |
| Thu 07 Nov | Mike McNertney | X. J. Scott, I think the reason people are saying graying out items is not a good idea is because it gives users no feedback as to *why* the option is not available. If it is not grayed out, on the other hand, and the user selects it when it is not a valid choice, the UI can then say something like 'Option disabled because no document is open' or something. I'm not sure I really like that idea better as a user though... Maybe you can get the best of both worlds by just having the reason given in the status bar or in a tooltip |
| Fri 08 Nov | Bill Carlson | As a general rule, I agree with Joel on greying out the OK button. However, arbitrary statements like 'don't grey out menu items' make me a little queasy. There are too many axis to make blanket statements about UI. Casual user vs. professional user. Keyboard user vs. mouse user. Trusted user vs. untrusted user. Inquisitive user vs. tell-me-how user. Asthetic user vs. utilitarian user. The list is endless. For example, we do accounting systems where some users want a simple, self-explanitory interface, while others just want to 10-key as fast as they can. As a result, some parts of our app look awful, but perform well, while others are the opposite. We have extensive data validation concerns in our app. Fortunately, we can require a thick, windows client. Even as such, a roundtrip over the internet is still slow enough that validation when tabbing out of a grid field is not practical (scalability is not a problem for us - low number of users). The amount of data that we need to validate against is moderately large (up to 200,000 records). We've taken a couple approaches: - A nightly or even hourly process that preaggregates the data into a file, applies custom compression and places the file on the web server. When 'logging on' to the system, the client receives this file. All validation and lists happen locally. - A variation on the above where a cache is kept on the client. When logging on, only new/changed/deleted records are sent over. This is pretty nice. Performance close to a desktop app, even over 56K. With a lot of data, it helps to be performance conscious. We found that the standard .NET DataSet classes were woefully inadequite in this regard (they send XML, even when in 'binary' mode). Some very basic manual serialization bumped end-to-end throughput by almost 60x (really!). Depending on your audience, a thick client app with a great UI is not a bad way to go. Deployment issues don't have to be the 'DLL hell' nightmare that everyone expects with a desktop app. Self-registering your COM objects each time the app starts and providing 'no options' installation goes a long way. Also, .NET nicely solves some thick client deployment problems with its Windows Forms stuff. Hopefully, IT departments will wake up and realize that, while HTML UIs are good for them from a management standpoint, they're often not the best thing for the users. In time, perhaps thick client apps will regain some of their luster. |
| Fri 08 Nov | Mr Jack | I agree with not greying out the OK button, I also agree with X J Scott's loathing of 'one of more fields is invalid'. It should tell you exactly what's wrong and why (unless of course it's a security validation form). However I believe menu items should be greyed out when unavailable, since it immediately tells you what you can do. Hmm, perhaps if they were greyed out, but could tell the user why if hovered over or clicked on that would combine the best of both worlds? |
| Fri 08 Nov | Why go to the server? | I'm not sure if I like the fact that you have to go to the server for data validation. Sometimes I hate it when I'm filling out a long form, and I click submit, I wait 5-10 seconds while things are churning, only to be taken back to the same page again (to see that I missed a requried field). Whereas, if there was some javascript on the front-end...I click the submit button...a message box pops up 'This field is required'...I click ok...and it focuses me right to that field. Yes, they might have javascript turned off...well, I put the same validation on the middle-tier too. Yes, it's extra work. Yes, I'm duplicating the same code twice (unless someone knows something I can use on the gui side and the middle-tier that can be shared). But, I think the programmer should put in all of the effort to save the user effort. I'm not 100% set in stone with this thinking. Just putting it out there. |
| Fri 08 Nov | Nick Hebb | Although there are some differences of opinion, I would summarize the best practices for data validation as follows: 1) Make the UI match the data model as closely as possible, minimizing the validation requirements. 2) Perform all validation checks in the middle tier, even if the same validation is performed at the UI. 3) Additionally, perform any validation that you can at the UI in order to provide immediate feedback to the user without a round trip to the server. A couple of comments: a) Only one person commented on validation at the database. I would tend to be conservative here, myself. b) Security: I've only worked on intranet apps, so the concern that someone is going to telnet in corrupt data hasn't really been an issue (but feasibly, it could be). Regarding JavaScript – I've always used standard buttons not submit buttons. The standard button calls a function, which in turn calls a validation function. If the validation function returns true, then the form is submitted. Otherwise, the user is alerted of the omission / error and the focus is changed. So, if JavaScript is disabled the form cannot be submitted. c) 'Why go to the server' writes, 'I'm duplicating the same code twice (unless someone knows something I can use on the gui side and the middle-tier that can be shared).' You want to take a look at Microsoft's remote scripting: http://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/msdn-files/027/001/734/msdncompositedoc.xml . An excerpt reads, 'With remote scripting … the Web application can now validate data while the user is still filling out the rest of the form, without having to reload the page. Specifically, the script must first identify a server page to which to connect, then transmit the call to the server. Any return value from the call is transmitted back to the originating script.' I've used it before with good results. However, I don't know if there are security issues with it, and it only runs on IIS. I'd be curious if anyone knows of any issues with using it. |
| Fri 08 Nov | mb | The implementation question I ask above is exactly to remove the duplication of validation between the server and browser. I can write some rules once, and have the execute in jscript/whatever on the browser, and again in the middle tier, plus additional work. You can do 'remote scripting' type stuff with some client side hacks: create an invisible iframe/layer, then have your jscript post the form to the invisible iframe and gather the results back. You can also use xmlhttp in a similar fashion. I haven't looked into the details of the official 'remote scripting' code, anyone want to give a one-sentence overview of how it works? |
| Fri 08 Nov | Nick Hebb | It uses an applet (not visible) to communicate between the client page and a page located on the server. When using it, you specify the name of the function that you want to call on the server page. So, the server-side function could be written to create an instance of a COM object and run your middle tier validation code. All this is done without navigating to a new page or requiring a page reload. |
| Linux Commands | Wed 06 Nov | Benji Smith |
| Ive been trying to brush up lately on my Linux skills and I constantly find myself annoyed with all of the inconsistancies between commands. In particular, Ive been looking at sed and awk and tcl/tk and Im wondering cant I do all of this with perl and dispense with learning a 5 or 10 different tools? It seems like if I could devote my time to learning perl really really well, I could be much more effective than if I learn all of the other loosely-related tools. Of course, Im only vaguely familiar with any of these toos, and there is very likely something that Im missing. Fill me in. Enlighten me. |
| Wed 06 Nov | Acowymous Nonerd | I think that's what perl is for. So yes. |
| Wed 06 Nov | spiny norman | Part of the 'fun' is learning all those commands! And remember that Unix philisophy is small, single-purpose tools strung together with pipes or bundled into scripts. It's just the name of the game. |
| Wed 06 Nov | anonQAguy | Stick with it, it'll come. Perl's great, but not always the right thing to use. If you're going to get along in the *nix world, you're pretty much (IMO, anyway) going to have to get used to the variety of basic tools such as the ones you mentioned. |
| Wed 06 Nov | Benji Smith | By the way, I should probably clarify: I'm really not interested in doing much sysadmin type work. What I'm really interested in is running scientific simulations, parsing text for NLP (Natural Language Processing) algorithms, creating the occasional web application, and that type of stuff. I'm sure I will, from time to time, have to do some sysadmin stuff (because you really can't avoid it), but I'd rather do that stuff with perl, If I can. I'm really not interested in the 'fun' of learning a bazillion different commands, each with their own syntax. And I really don't care what the Unix philosophy is. I just want to make the most efficient use of _my_ time as I learn all of this stuff. |
| Wed 06 Nov | Eric Debois | ...then Perl sounds about as right as it gets for you.. |
| Wed 06 Nov | Andrew Hurst | Why learn sed and awk if you know perl? perl -ne 's/foo/bar/g;print;' there is also a few flags for 'perform this operation on the file given' so it replaces them within the file, and a few other useful flags too. I've been using linux for about 4 years now, and perl for 3, and occasionally I'll use sed or awk for fun, but if I need to get it done I use perl. Though, one book has come in really handy for me, its worth its weight in gold, for unix users: http://www.oreilly.com/catalog/upt3/ Its a great book. And I see the 3rd edition is out! Time to get out the checkbook... So I guess in summary, you'll pick up the commands as you need to learn them, and the best thing you can know is where to look for more information. Also, save all of your complex / handy commands in a scripts directory, and document them. They will come in handy later. |
| Wed 06 Nov | Fred | I have not used perl much. I use php for web stuff. http://www.php.net/manual/en/ has a very smart dynamic manual, that lets user add thing like advanced tips etc. I sometimes use sed and awk, and this is a page I often come back to when I need to brush up on sed fast : http://www-h.eng.cam.ac.uk/help/tpl/unix/sed.html grep, sort, wc, uniq are some other small commands I use in scripts. |
| Wed 06 Nov | Jeff | Remember, sed, awk, tcl/tk, and all the other programs have been developed over time since the early days of Unix (they aren't 'Linux Commands'). Most were written to 'scratch an itch' and other people have found them useful too. If Perl does everything you need, don't bother learning them. They're all just tools - use the one that lets you get your job done. |
| Wed 06 Nov | Brent P. Newhall | Agreed with the posts above; dive into Perl, and do as much as you can there. Then try other tools if you feel that you need them. OTOH, remember that other tools can be useful in their own ways. Lex and yacc can be strung together to create a simple compiler, just in and of themselves. |
| Wed 06 Nov | Scott Rogers | I recently replaced a combination of shell, sed and awk scripts with Python and I couldn't be happier. The same would probably apply for Perl. For my money, the benefit comes from having a common syntax. So go ahead and forget sed and awk. If you find you still need some information on them, get the Oreilly pocket book. It also comes in handy as a regular expression guide. |
| Wed 06 Nov | Rodger Donaldson | I like perl, but it's a mistake to clump TCL/TK in with sed and awk - it's a far more complete programming language, and GUI work is very simple with it. I've been doing a lot of TCL work in the past two years, and I can do pretty much anything in TCL that I can do in Perl (and it's more trivially extensible). The main drawback is the lack of extensions compared to the monster that is CPAN. Of course, if you like Perl and are happy with it, messing about with TCL is probably a waste of time. As far as other shell programming goes, it's mostly useful on the system admin/system integrator level. |
| Wed 06 Nov | DB | Though it is not uncommon to find perl installed on systems now, that has not always the case. I have worked on several flavors of unix over the years and sed and awk have always been there. Similarly if you need portability across multiple unix platforms, /bin/sh is always there when you need a consistent scripting framework. |
| Thu 07 Nov | stephen hill | I would also consider ruby as an alternative to perl. I tried learning perl myself, by writing a unit testing utility for c/c++ in it. It took a week of extremely hard work and had limited functionality. The first time I was exposed to ruby, I rewrote it in ruby as an exercise. It took an afternoon, was clearer and easier to understand. I'm not claiming that ruby is inherently superior to perl, just that as an experienced OO programmer, I found it much easier to get my head round, and seemed to have the same functionality. regards, steve |
| Thu 07 Nov | Andrew Hurst | -- DB said -- Similarly if you need portability across multiple unix platforms, /bin/sh is always there when you need a consistent scripting framework. ------- Not necessarily. There are some linux distributions that replace it with bash, or some flavor of bash. I seem to recall some problems it caused, but I can't remember them offhand. I think you have to run bash in sh emulation mode somehow (maybe it can tell by the /bin/sh line at the top... I dunno). Anyway, I need more coffee, and my point is that that statement isn't always correct. |
| Thu 07 Nov | Chris Tavares | The big problem with /bin/sh scripts is not that sh isn't always there. The problem is that you can't do ANYTHING in a shell script without calling external programs. Only if all of the external programs are on the system, and have the exact same list of parameters, will your script really be portable. And there are no two unix systems that have the same set of parameters. Just try and get a directory listing with attributes and sorted by size on Linux, HP/UX, and Solaris, and try to do it portably, without cheating by installing something like the gnu version of ls. Shell scripts suck. -Chris, who's dealt with porting way too many shell scripts lately. |
| Thu 07 Nov | DB | I suppose the only always is that there are always exceptions to the rule. My biggest scripting headaches have been when I have needed to take a script written with ksh or bash in mind and having to fix it to work properly with a system that does not have one or the other. /bin/sh (Bourne shell to be exact) is the lowest common denominator that I have found and coding to that makes my life easier. Thats not to say that I do not have to use some uname based cases in my scripts. There are always exceptions. :-) |
| Fri 08 Nov | Robert Anderson | 'And there are no two unix systems that have the same set of parameters. Just try and get a directory listing with attributes and sorted by size on Linux, HP/UX, and Solaris, and try to do it portably, without cheating by installing something like the gnu version of ls.' Cheating? Isn't that just being smart? I never understand why people try to do things like write portable makefiles. Just use GNU make and be done with it. All the portability you need is already in GNU make. Bob |
| Fri 08 Nov | Joe | 'What I'm really interested in is running scientific simulations' Benji: You may want to consider using Scilab, which is a MatLab like high level language. Octave is another MatLab like software. Finally there is GNU Scientific Libraries (GSL). http://www-rocq.inria.fr/scilab/ http://www.octave.org/ http://sources.redhat.com/gsl/ Scilab will also run on Windows 95/98/2000 |
| Fri 08 Nov | Chris Tavares | >>> I never understand why people try to do things like write portable makefiles. Just use GNU make and be done with it. All the portability you need is already in GNU make. <<< Well, because GNU make itself needs to be compiled? Actually, I'm being serious. I have a project that needs to run on both Win32 and HP/UX 11i. GNU make does NOT compile out of the box on HP/UX. It took me quite a bit of searching to find a binary. |
| Fri 08 Nov | Robert Anderson | 'Well, because GNU make itself needs to be compiled? Actually, I'm being serious. I have a project that needs to run on both Win32 and HP/UX 11i. GNU make does NOT compile out of the box on HP/UX. It took me quite a bit of searching to find a binary.' It should. Contact the maintainer Paul D. Smith - he's quite responsive and knowledgeable. A 'port' is probably a trivial extension of the build flags. 'Factoring up' the portability into GNU make rather than trying to write portable makefiles still seems like a no-brainer to me. Bob |
| Learning Perl | Wed 06 Nov | Benji Smith |
| Ive decided to dive in and learn perl. I figure it will help me brush up on my regular expressions (and other linux skills), and Ive had several prospective employers mention that it would be helpful for me to know perl. Ive already got experience programming in Java, C++, VB, PHP, XML, etc. What Im interested in finding out, from you perl gurus out there, is: what are your favorite ide/debugging tools for perl. Id like to be able to set multiple breakpoints, step through my code, and create watches on variables (at the very least). Id really prefer something that I can run on win32 machines (I like to set my linux boxes up as strictly command-line machines, but I like to do my development in a GUI environment). Also, Id really prefer something under an open source license, though (in a pinch) Id opt for a student license or an evaluation license of a commercial program. Thanks in advance for your recommendations. |
| Wed 06 Nov | John C. | Most of the time I don't use an IDE for Perl; I write my code in TextPad or Xemacs, and because of the XP-like way I build most of my test cases, I generally don't feel the need for a visual debugger. The Perl interpreter does have a built-in debugger that you can invoke with the -d option on the command line, but its operation is somewhat arcane and I wouldn't recommend it if you're looking for an IDE. But there is an option you should look into: the Perl Dev Kit from ActiveState, http://www.activestate.com . It doesn't have a full IDE per se, but it does include a visual debugger with the capabilities you describe. It also has some nifty features like the ability to compile Perl scripts into standalone executables. And yes, it runs on Win32. Eval versions are freely downloadable, but they do expire eventually (you may be able to renew them, and there may be a student license; I don't know). One other resource you should know about is PerlMonks, http://www.perlmonks.org . The community there is hugely helpful and dedicated and can help you through any puzzling situations you may find yourself in. Check out their tutorials and Q&A sections and just lurk to see what issues other people are asking about, and you'll learn a lot. |
| Wed 06 Nov | anonQAguy | Benji - I've been doing perl for a couple of years now. Extremely useful language for many things. Couple of sugestions: 1) don't buy the individual oreilly books related to perl - get the perl CD from ore |