last updated:05 Jan 2004 17:48 UK time
|
 |
|
(Comments added for week ending Sun 04 Jan 2004) | View Other Weeks
|
|
| Business/Working from home. | Sun 04 Jan | Billy Boy |
| Like a lot of IT people, my brain is always percolating ideas for a startup. I think I have a reasonable one at the moment, so Im going into R&D mode...but I also have a family and my two year old always wants to play when she sees me at home.
Do you have any suggestions for people in my position? |
| Sun 04 Jan | Brad Wilson | Yes. Unless your wife can support the whole family, including day care (and you're okay w/ day care), don't do it.
Seriously, starting a company is more than a 40-hour a week kind of a thing. While you'll be working at home, you'll need an isolated space (some people rent an office almost right away, because that kind of space isn't easy to come by at their house). And even if you work at home, you'll see your family a lot less than you do now.
It's one thing to do this when you're wealthy and can get away with taking the risk. It's quite another when you try to shoe-string a company while risking the home and health of your wife and very young child. It's very risky.
My advice would, obviously, be very different if you were single and kid-less. |
| Sun 04 Jan | Billy Boy | Oddly enough, my wife could support the family, but after we had children we decided that she should work part time instead as we did not want our children raised by day care. This means that I would have to keep my day job while working on my business project nights and weekends. I am more interested in knowing how to delineate the business world from the home world. |
|
| Database versus flat file flamewar | Sun 04 Jan | NathanJ |
|
I was discussing an application of mine with a friend of mine who is also a comp sci guy. The application is a strategy game that handles about 10 players per game.
He was quite adamant that storing my data in a database was a poor choice compared to a flat text file. Having worked on enterprise systems for a while I just threw everything into a database without much cost/benefit analysis.
To me the only real advantage of a text file is ease of quick editing. I think this advantage is outweighed by the referential integrity you get from a set of relational database tables.
I dont see a database as being harder to work with that text file data. Right now I use SQL to manipulate the data and JDBC to pull data into my application. If I was using a flatfile Id have to write all that glue myself.
Eric Raymond seems pretty psyched up on text files in his new book, but hes really talking about binary formats vs text formats and doesnt seem to cover databases.
Does anyone else see advantages to the flat file? |
| Sun 04 Jan | sgf | Well, in your case it looks like database files are at least two acronyms more complicated that text files. :) |
| Sun 04 Jan | Mike Swieton | Standardization? XML is XML. On the other hand, I've yet to see two DBMSs that had more than a tiny least common denominator common across both systems. Also, with a text file you don't need a server, and most (though many don't) DBs need a server. More admin work, etc.
And a game may really have different enough requirements and data to make a text file worthwhile. I imagine some data would be just silly to store in a database. Maps, for instance, don't feel row-oriented to me. Or data that must be accessed quickly without the overhead of a connection, such as any number of key/value pairs that games need a lot of.
Everything has its place. I usually use the DB for everything when I have one, but i.e. a DB is excessive for most configuration stuff. |
| Sun 04 Jan | Billy Boy | Did your comp sci friend give any technologies for accessing this flat file? What are you planning to put into this flat file/database? Is it shared among the multi users or is it user specific? Is speed/latency/bandwidth an issue? How often will the data change? Will the user have access to a file system or is it sandboxed away? Should I go on?
Make the best decision that you can. It sounds like you optimized for development time -- I know how to do it this way and it will be less code for me. If you get further along and people complain how hard or performance is unacceptable rewrite that section of code. You did properly abstract it right? |
| Sun 04 Jan | FullNameRequired | stick with the database for now at the very least.
Everytime I make the decision to go with a flatfile solution for anything thats not trivial I _always_ end up wishing I hadn't, and often end up moving to a database eventually.
A database is perfectly designed to store non-trivial data, and Im betting thats what you want to do.
(they also scale an awful lot better than a flatfile does, which for a networked game I can see being important) |
| Sun 04 Jan | Brad Wilson | In this day and age, we shouldn't be writing parsers. If your data is simple, put it in an XML file and use an XML parser, if you care. My advice would be like most: stick with what you already have, on the theory that it's not broken. |
|
| The problem with CSV files ? | Sun 04 Jan | Entrepreneur |
| Hi,
I read *somewhere* about how poorly the CSV (comma seperated values) format is designed. (The goofiness of how it handles imbedded and , etc.
But I CANT remember WHERE the heck I read it. (Tried googling and searching jos and cant find it).
Anyone know what Im talking about?
I think it suggested better alternatives.
(I suppose that one alternative would be to use a less commonly used seperator character and not enclosing everything in quotes.
e.g.,
some text or whatever ; next item; and another
Thanks! |
| Sun 04 Jan | Joel Spolsky | "The Art of Unix Programming" |
| Sun 04 Jan | Lou | The trick isn't in the delimiter but in how quotes and instances of the delimiter in the text are handled. Building a parser for CSV files is relatively complicated and not necessarily a solved problem (the same applies to generating them). |
| Sun 04 Jan | Almost Anonymous | 'Building a parser for CSV files is relatively complicated and not necessarily a solved problem'
CSV is complicated?
Rules for CSV:
* Each record is separated by a LF or CRLF
* Each record consists of a set of comma separated fields
* Leading/Trailing spaces of records are ignored
* You can embed CRLF, commas, or spaces in a field by delimiting the field with double-quotes.
* You can embed a double-quote in a field by using two in a row (e.g. '').
It's not hard to build a parser (and constructor) for CSV files. I've built both and they handle any valid CSV file thrown at them. |
|
| Check for Updates | Sun 04 Jan | Edward |
| Anyone know of any good drop-ins that will allow me to add a Check for Updates feature to my app?
Something similar to what this app does here:
http://www.lottomania2000.com/en/checkupdates.htm
Thanks! |
| Sun 04 Jan | Frederic Faure | Currently looking at this to install/update a VB app. Since VB has some prerequisistes, I'm thinking of writing a web-based installer with NSIS which, unlike Inno, supports installs over the Net.
http://nsis.sourceforge.net
Also, you can start looking at http://www.planetsourcecode.com , and search for 'updater'. Haven't tried any of the samples yet. |
| Sun 04 Jan | Clay Dowling | I don't know what language you are working in, but libcurl from curl.haxx.se makes doing a quick check pretty easy. If you have a predefined place on your web site where the application can check, it's trivially easy to snarf a file. |
| Sun 04 Jan | SC | If the updates are pure data file updates, then it doesn't sound too difficult to code...
The app makes a web request that contains within the query string the current version number and parameter check_update.
Server handles query, checks db and replies (most easily in xml) with the latest version number, and the readme text, whereupon the user can download the updated data file. |
|
| Getting control of a domain back! | Sun 04 Jan | Gwyn |
| Ive got a problem with some mickey-mouse outfit who registered my domain for me in 2000 and have since been providing web/email forwarding.
It all worked fine until recently when the company seem to have suffered some sort of internal problems and now their domain name servers are often down for days at a time. Ive spoken to someone in the company (having tried all their numbers of many many occasions) who admitted that the atmosphere was so bad in the office that shed spent part of that morning in tears.
I faxed through a letter instructing them to point my domain to some different domain name servers but theyve simply ignored it. I cannot now get in contact with them.
The domain is registered to me but they are the administrative contact in the WHOIS listing and it seems I can do very little to get control.... or at least as far as I know...
I got the company details (from companies house online service) and have the home address of the companys sole director (and he only lives about 80 miles from me). As far as I see it I either use whatever standard procedure is available to get the administrative contact transferred away.... or, if I cant find a straightforward way to achieve this Im going to go to his home and use a more physical approach.
Anyone know what the correct procedure is, if there is one? |
| Sun 04 Jan | Philo | Is your name or email listed in *any* of the contact info (tech or billing)?
If so, then contact another domain registrar (register.com, godaddy.com, tucows, etc), explain the situation, and ask if they can help. Be sure to mention the name of your existing hosting company.
Philo |
| Sun 04 Jan | Bored Bystander | >> The domain is registered to me but they are the administrative contact in the WHOIS listing
Philo's pretty much got it. I am looking at an admin screen at godaddy.com and what I see is that there are four official contact points defined for a domain: 'registrant', 'technical', 'admin', and 'billing info'.
If you are named and have a valid email address on *any* of these fields for your domain's whois record, you can initiate a transfer of the domain away from the current domain holder and onto your new domain registrar. The procedure generally followed by a current domain registrar is that they email each of the (up to four) points of contact to get permission for the move. If any of the points of contact agree to the transfer, you will succeed in transferring the domain away. This is the easiest option, and will only cost a domain transfer and first year's registration (usually $10 or less.) And most important, the current holder of the registration does not have to cooperate.
If you are *not* named nor have an email address on the current whois record, then the current domain registrant has to cooperate with a transfer and initiate it to you. At worst, you will either have to initiate legal action or pay a hefty 'ransom'.
The idea of confronting the turd in person sounds 'interesting' but risky. I guess you do what you have to do.
The 'official' recourse to taking a domain name is at:
http://www.icann.org/udrp/udrp.htm
Many times, domains in active use are allowed to lapse and a 'domain squatter' company then takes over ownership. The purpose is ransom and theft, pure and simple. Although it can be argued that if someone doesn't care enough to keep a name registered, then they deserve whatever happens to them... |
| Sun 04 Jan | Frederic Faure | Since we're on the subject, the domain of a company I used to work for seems to have been hijacked over Xmas (was valid until 2006, so it's not a renewing issue.)
How does a hacker do this: Hack this company's e-mail server so as to be able to reply to the e-mail from the registrar's to confirm the change? |
| Sun 04 Jan | Clay Dowling | From somebody who's had to do it:
You need to send a letter to the registrar on company letterhead (if you don't have letterhead, make some quick). They may need some contact information to confirm it.
As to the hijacking game, that's pretty easy to pull off, because e-mail operates on the honor system. The easiest method would be to use the method that I applied above. They don't know if you actually own Widgets Inc. or not, you just need a legit looking letterhead.
The second method would be to register a domain through the registrar who currently holds the domain. Learn the form of their communication. Now transfer that new domain to the registrar where you want to have the hijacked domain registered. Now initiate a transfer of the soon to be hijacked domain. Wait about the same amount of time that it took your first confirmation mail to arrive, then send your return confirmation e-mail back for the hijack target, using a forged header.
This second method relys on the proper owner of the domain not being too fast in responding. If they're on the stick they'll catch the e-mail right away and block the transfer. I've been in the position of having to make that block before, when an outside agency was trying to strongarm a domain name away from a client. Much depends on the speed of the response. |
| Sun 04 Jan | Gwyn | Thanks for the responses guys. I've had a look at the whois and whilst I'm the 'organization' and the normail mail address is mine I am not one of the 4 email addresses.
I had thought about the subterfuge approach mentioned and I'll think about that.
In the meantime I'll probably hang round this guy's house until he arrives home and present him with another copy of my fax in person with the underlying mesage being that if he doesn't address the situation then some nastiness will be bestowed upon his person or his property. May not work but I'm hoping he'll decide not to take the risk!! I think given the time to think about it I'd probably avoid the anxiety were I in his position... |
| Sun 04 Jan | Clay Dowling | Gwyn,
That approach has restraining order written all over it. My first outlined approach by no means involves subterfuge, and will keep the local constabulary from taking an interest. |
| Sun 04 Jan | Gwyn | Restraining order? nah! Not in the UK. Things don't really work like that over here. You can get away with bloody murder! (actually that's a bit of an exaggeration if taken literally! - but certainly you can get away with a lot in terms of intimidation).
I'm more concerned in the ehics than the legality of these things. I'll post back to let you know how it worked out! |
| Sun 04 Jan | Tony Chang | DEFINITELY post back, with photos if you can manage it.
This is exciting. |
|
| Need techie advice on launching new startup | Sun 04 Jan | JustGettingStarted |
| Dear Joel Readers,
After 18 months of evening/weekend R&D, Im finally ready to launch my new technology company. I will be providing a unique software-based service to a group of professionals, and although I havent officially opened my doors yet, I already have paying customers. Basically, *everyone* who has seen the demo immediately signed up. Everything else is in place - the company is incorporated, a marketing plan ready to go, attorney and CPA hired, website done, bank account setup, etc. Im a one-man show, by the way.
I have a few questions for you all.
First, I have no - thats right, NO - competition in my market segment. What can I do, if anything (except legal), to stymie my potential competition? Im no programming God, and I suspect 80% of you out there are better programmers than I, but it was technically VERY difficult to get the software to do what it needed to accomplish, even with the assistance of a few people who I consider programmers extraordinaire.
Second, in light of the lack of competition, Im charging my clients what I personally consider top-dollar for the service. Yet, a few of them stated that they wouldnt think twice if the service cost 50% more. If you were in my position, would you charge as much as you could get away with? Mind you, Id rather have happy, long-term profits and clients than a single one-time profit off a client who will be looking for a cheaper alternative.
Any advice regarding the above is MUCH appreciated, and any other thoughts on the startup issue overall are welcome. |
| Sun 04 Jan | Once bitten twice shy | Be careful. Very careful. Just ONE demo is enough to create competition. |
| Sun 04 Jan | | As soon as word gets out you will immediately have 20 or 30 competitors. Almost overnight. Been there.
You haven't told us who your customers are, so I don't know how price sensitive they are. I've seen a lot of people charge a few hundred dollars for something they could've easily sold for a few thousand.
You should have metrics available telling you what to set the price at to make it worth your while. This is a seperate item from how much you can charge. It will set a baseline but not a ceiling. Again it depends on your market, but it might be worth hiring a marketing consultant to help determine price. You might also use them to help flesh out your marketing plan further. Every one I've seen or done has operating metrics.
You beat the competition by gaining first mover advantage and selling the heck out of it.
gotta go |
| Sun 04 Jan | Tom Vu | Keep it in "stealth mode". And don't publicize your product. This adds an aura of smart and secretive to your corporation. As everyone already stated, once you say what your product does it will be copied. |
| Sun 04 Jan | Tom Vu | Also, give extremely limited documentation to your customers. This will force them to come to you for the simplest of tasks. Great lock-in. |
| Sun 04 Jan | Tal Rotbart | A market without competition, isn't.
See:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsoftware/html/software12292003.asp |
| Sun 04 Jan | The Great Economist | 'A market without competition, isn't.'
Usually, this is true but there must always be the first one in a market. |
| Sun 04 Jan | T. Norman | This doesn't sound like mass-market software that needs to be sold to a hundred corporations or hundreds of thousands of consumers in order to make a profit.
This seems like the case where there isn't a market because the niche is so small that big competitors won't bother with it. And with a one-man shop you don't need a huge customer base to be profitable. |
| Sun 04 Jan | Evgeny Gesin /Javadesk.com/ | Be careful, you can get an advice from a competitor, soon or later, who don't want you in this business. So, filter and think. |
| Sun 04 Jan | Noname | Competition is a part of life in the business world. Even if you have a patent or a monopoly there are still competitors. If you expect to depend on a lack of competition to be successful, do yourself a favor and cut your losses by stopping now.
Stop spending so much energy worrying about how to 'protect' yourself from competition, and focus on developing and marketing your product so you'll be able to stand up to the competition. |
| Sun 04 Jan | Noname | I should have also added that standing up to competitors includes proper pricing. So yes, if a lower price means lower profits but also lower long-term risk, it may make sense to use that lower price if it is still high enough to meet your profitability goals. However, bear in mind that once you set a price it will be difficult to raise it significantly in the future. Easier to drop a high price than raise a low one and have the market accept it. |
| Sun 04 Jan | foobarista | Make sure you price your software right. If it is
domain-specific software that is highly useful to a
specific business, you may need to charge more since
your customer universe may be relatively small. Pricing
is the trickiest part of new software in a new market,
and the mistake that lots of people make is often to
be too cheap. Also note that the price of software should
be a function of value delivery to the customer and
the market size and should have nothing to do with the
complexity of the programming involved (other than to
cover your costs, obviously). My own company has
grappled with costing and finally has a cost scheme that
seems to work, but it has been one of the hardest
problems we've had. |
| Sun 04 Jan | Philo | Be very, very careful about being overconfident, and do whatever you can to convey the value of your efforts to your clients.
I worked for a small company that installed a web-store management software for a client and designed a few stores for their partners to use. We charged a premium for the work we did putting the management software in place, because it enabled the partner to make stock changes without coming to the client or us every time - we simply planned on getting the business each time they put a different partner in a store (basically overhaul the store).
Well, the job of overhauling the stores went to the CTO's husband at 1/4 of what we were charging. Of course, he had no idea how to work the management software - he just frontpaged the changes into our generated html, so the partner couldn't use it to manage the stores - if there was an offering change, the partner went to the client, who went to the developer.
The developer also didn't have the design talents we did - that much was obvious.
The client didn't care. All they saw was 75% savings. Never mind that it wasn't 75% because they paid for every single change. And that doesn't account for lost productiivty because the client's staff now has to manage changes.
I'm not saying what they did was right or wrong; I'm offering a cautionary tale to make *sure* your clients understand what they're paying for and the value of your services.
Philo |
| Sun 04 Jan | JustGettingStarted | Thanks for the comments so far - I really appreciate it!
Regarding that article on MSDN, 'A market without competition, isn't'. Interesting, but as with all things in life, there are always exceptions. When I gave my 1st 4 on-site demos, all 4 clients signed up on the spot - and the software wasn't even done. I don't believe that I have created a solution for a non-existant problem, judging from the response I've gotten thus far.
>> This doesn't sound like mass-market software that needs to be sold to a hundred corporations or hundreds of thousands of consumers in order to make a profit.
Correct. I've projected about 100 new clients this first year. My expenses are minimal, particularly because I don't need to pay myself immediately. And each new client produces a very nice hefty profit at sign-up, with residual income from monthly usage fees.
>> Stop spending so much energy worrying about how to 'protect' yourself from competition, and focus on developing and marketing your product so you'll be able to stand up to the competition.
Point well taken, although I'm not losing any sleep over this issue, but rather losing sleep working late into the night :) |
| Sun 04 Jan | T. Norman | 100 clients? In a year? Do you really think you can (1) obtain that many clients, and (2) could you handle them if you got them?
And do you need anything close to that to make a profit (after paying yourself a livable salary)? |
| Sun 04 Jan | Philo | 100 new clients in a year?
You realize that's one client every two days?
Philo |
| Sun 04 Jan | JustGettingStarted | >> 100 clients? In a year? Do you really think you can (1) obtain that many clients?
Yes. I'm in an *extremely* specific niche, and I know *exactly* who are my potential clients and how to reach them.
>> and (2) could you handle them if you got them?
100 by myself? No way. With my current 4, who have required virtually NO support, I think I could handle about 20 by myself, if they 'behave' like my current 4.
>> And do you need anything close to that to make a profit (after paying yourself a livable salary)?
Not at all. I'm courting one new potential client right now that would immediately put $70k in my company coffers right up front, with additional monthly fees in the $3-4k range. They are what I consider to be a large client.
Support costs, which decimate so many software company budgets, will hopefully not be an issue for my company. Using the software is a no-brainer and takes only 10 minutes to master. And it only performs 1 main function, with some additional, optional functionality. I have designed not just the software, but the company itself, to be as self-supporting as possible, especially in the area of adding personnel to keep the venture running. |
| Sun 04 Jan | | I think you're pulling our collective leg.
As a rule, you need to be a large company to afford 70K + 3-4K per month.
In general, big companies aren't going to buy enterprise software from a 1 man shop.
In general, the sales pipeline takes a hell of a lot longer than 2 days.
Even longer if they're paying 70K for it.
You could make a million dollars every month if you taught people to reduce the sales pipeline in the dilbert sector from several months to 2 days. |
| Sun 04 Jan | JustGettingStarted | >> I think you're pulling our collective leg.
Well, being that we don't know one another, and it looks like most posts here are done anonymously, all I can tell you is that I have better things to do than posting complete fiction on this forum.
>> As a rule, you need to be a large company to afford 70K + 3-4K per month.
True.
>> In general, big companies aren't going to buy enterprise software from a 1 man shop.
Also true. However, I'm not selling a complicated CRM system that needs a whole staff to implement, train and support, both on the client side as well as my side.
>> In general, the sales pipeline takes a hell of a lot longer than 2 days. Even longer if they're paying 70K for it.
That is of course based on what you're selling and the price. All I can say is that $70k and $3-4k/mo doesn't even register on this particular client's radar.
>> You could make a million dollars every month if you taught people to reduce the sales pipeline in the dilbert sector from several months to 2 days.
Or just sell a product that TRULY solves a specific, nagging biz problem, as I have for my clients.
Thanks for your input - much appreciated. |
| Sun 04 Jan | Ted | Ideas are cheap, execution is what matters. Why are you scared? |
| Sun 04 Jan | JustGettingStarted | No fear here. Just looking for some advice from some of you who have already been where I'm heading. |
| Sun 04 Jan | Ted | Well, if you tell us what your niche is, we might be able to help you. |
| Sun 04 Jan | Ted | 'I will be providing a unique software-based service to a group of professionals'
I assume we're talking about one of the 'professions' according to the legal definition.
'I'm courting one new potential client right now that would immediately put $70k in my company coffers right up front, with additional monthly fees in the $3-4k range'
I'm trying to think of a niche that has professionals in it that generates that kind of money. Individual practitioners don't have that kind of money. Maybe some kind of practice management software for groups of professionals?
No, that's got a lot of competitors and you said there are none.
Maybe you're defining competition in a strict sense of brand competitors?
TV stations don't just compete against other TV stations. They have to compete against video games, internet, etc.
Good luck! |
| Sun 04 Jan | Mitch & Murray (from downtown) | With the numbers he is quoting, this guy has either figured out perpetual motion or the cure for cancer.
If the numbers are really for real then I hardly think you need help from anyone here. Get a lawyer, get a banker, and go make a couple of Megabucks before whatever the hell you are up to gets out. |
| Sun 04 Jan | Entrepreneur |
It sounds like you're heading in the right direction, based on my experience.
I agree with the above suggestions:
1. Operate in stealth mode. You see how much buzz that's generated on THIS forum.
2. Cashflow cashflow cashflow. Charge enough for your product, which it sounds like you're doing. Charge to little and you run the risk of FEWER sales because customers think 'this can't possibly solve a $100k problem for $5k', etc. We did that. We then raised prices 50% and got MORE sales, FEWER complaints about price, and, of course, made more money.
3. Don't sweat the competition.
Read Michael Dell's book (Dell ...something or other). He makes a strong point to focus on CUSTOMERSs. Competition won't hurt you (much ;-) it'll just give you a good yardstick and sharpen you. I initially worried about our ENTRENCHED competition, hasn't been a problem. It's a big market out there (even for our tiny niche). Mr. Dell points out that focusing on the competition forces you to be a step behind them. You can't lead that way.
Good luck.
For great generic articles on this sort of thing, check out :
Dexterity.com (the developer section). He's got smart stuff to say, based on my own experience of nearly 10 years. |
| Sun 04 Jan | JustGettingStarted | Thanks for the words of encouragement! I'll check out dexterity.com later this evening. |
| Sun 04 Jan | Me | JustGettingStarted, I think you might be having yourself on as well as us. As others have pointed out, your story doesn't ring true.
If you've got all the i's dotted, such as by hiring 'CPA's' and a 'lawyer,' and having a 'marketing plan,' you wouldn't need to ask for advice here. You probably wouldn't have time either.
I dare to suggest you've developed some piddly little web site and you're not aware of what a commodity it is, and how easily you would be rolled if it was a genuine market. |
| Sun 04 Jan | somebody that's been involved in 3 startups | STEALTH mode?!. You guys are killing me! You should really write a marketing book!
Do NOT operate in stealth mode. Sell that crap as fast as you can, and let everybody know about it. You might obtain first mover advantage. But if the idea is worth anything, there WILL be competition.
What if I told you that you could build a successful company by selling a web based bug tracker?! What a lame idea! That could never work. The market is saturated!
There's a lot of developers that are reading this forum that could write that software... A lot of developers have already written that software & released it. Some are quite good and some are quite good AND FREE. But Joel's building a successful company by actually EXECUTING!
Maybe he should keep quite about it? His sales would go through the roof!
You want to know about areas of fast growth business opportunity? Pick up a business rag people. They're full of ideas. Check out the Inc. 500. Check out Entrepreneur or Fast Company or Business 2.0 or ... |
| Sun 04 Jan | Dwilliams | What's the market segment? Doctors, lawyers, etc? I am just curious (and certainly you won't create a competitor just by telling us the segment.) |
| Sun 04 Jan | Rob | I'm sorry. I just can't believe that you are selling software for $75,000 plus monthly fees in the range of $3,000-$4,000 and you've got 100 sales already in the pipeline. And no competition.
Let's say that you sell the software only for $50,000 and collect monthly fees of only $3,000 for each customer. Off of those initial 100 customers, you're talking $5,000,000 in sales plus $3,600,000 in fees. Not bad. In 5 years with steady sales we're looking at $18,000,000 in fees alone.
Think if you have any growth! Poof. You're single handedly sitting on a $100M company.
You definitely wouldn't be hanging out here. |
| Sun 04 Jan | GuyIncognito | Is it a dog walking service? Cause you know they already have that... |
| Sun 04 Jan | JustGettingStarted | Man, some of you guys make for a tough crowd! I've spoken to numerous marketing people regarding pricing, and got a different answer from each 'guru'. Biz advice from biz attornies? Same thing. This is the *first* time (last?) that I'm trying to get some constructive advice from my peers! At the risk of sounding like a dick, if you're (a) unemployed, (b) under-employed or (c) just a worker drone who's never had an original idea, please don't respond to this thread - I don't need your advice.
>> Think if you have any growth! Poof. You're single handedly sitting on a $100M company. You definitely wouldn't be hanging out here.
I need to clarify. My pricing is based on the number of users, with this particular client being on the large scale. Looking at my market, I'm looking at an average sale of $3k with about $100-200 monthly ongoing fees. With thousands of potential clients, yeah - I stand to do well for myself. But I'm not kidding myself either - if I can do it, another programmer can to.
I'd like to hear more from you who have taken the stealth operating mode. Worthwhile? Or bullshit, as one of the previous posters implied. A few marketing people I've spoken to said it's a smart move, and a few others said it's suicide. On the one hand, it would be nice to fly 'under the radar' until I get a sufficient number of clients and cashflow, but then that also puts a damper on the general marketing effort.
>> Is it a dog walking service? Cause you know they already have that...
Hey, I know a guy here in town who performs the service of cleaning up dog crap from lawns. Just bought himself a new work van, so I guess he's doing OK! |
| Sun 04 Jan | Kentasy | Good luck.
Let us know more when you emerge from Stealth mode... |
| Sun 04 Jan | John Murray | After reading through this thread, then reviewing the heading, my only "tech" advice would be - finish programming the damn application! |
| Sun 04 Jan | no name | I have equity in a 5 person startup, can I comment?
If you can't give us your elevator speech, then your idea is worthless.
http://www.entrepreneur.com/Your_Business/YB_SegArticle/0,4621,311585-1----,00.html |
| Sun 04 Jan | Me | Own up, JustGettingStarted, this is a project for Marketing 101 for your MBA, isn't it? These are the inconsistencies that sink you:
1) You're a guy on your own yet you've outlayed all the bumf on attorneys, accountants, marketing plan and marketing advisors. Guys on their own do not do this unless their business is already solid, in which case they're not asking for advice from anyone.
2) You say you listen to conflicting advice from numerous advisors in the above category yet you complain about negative advice from us, who you incorrectly decribe as your peers. You also condemn unemployed people and worker drones. In other words, you are not genuinely seeking advice at all.
3) The figures and the ready sign-on of customers read like some MBA's wet dream. |
| Sun 04 Jan | no name | 'After 18 months of evening/weekend R&D, I'm finally ready to launch my new technology company'
An established company will take much less than 18 months to duplicate your work, or to develop an alternative solution to the problem that your application solves.
'First, I have no - that's right, NO - competition in my market segment. What can I do, if anything (except legal), to stymie my potential competition?'
Give up now. Even if your customers really do have a need that noone else has met, there's nothing you can do to stop people solving the problem in some other way, and taking your customers away from you.
'Looking at my market, I'm looking at an average sale of $3k with about $100-200 monthly ongoing fees.'
'Stealth mode' ? How do you seriously plan to find thousands of customers, particularly if you don't want anyone else to find out you're approaching these customers? If thousands of people already have this need and can immediately recognise an essential tool to meet their need then you have to wonder how likely it is that noone else has ever or will ever want that market.
If the market is profitable then you will develop competition no matter what you do. No patent, trademark, copyright or other IP related legal protection will stop other developers from noticing that there is a market and working out some other way to take your customers away from you.
Your terrible fear of having us know what this market is indicates that you already know you can't stop other people competing in this market.
There is some good news, though. What you can do is accept the existance of competition but be confident that you can do something so well that you can keep making money even if other people join in. Welcome to capitalism. |
| Sun 04 Jan | Tom Vu | You said you are in a small niche, so you don't need to advertise. Stay under the radar and lockin your customers. Go after the most influential company in this little niche and give that customer a discount. Then tell the wannabe companies that if they want to survive they need your product. It's also important to be good looking and likable, if you aren't then hire an actor or comedian who is. Also fill out some patent forms and label your product as patent-pending. Put the product in a box or have an image of a box on your website or brochure. If you ordered lunch at a fast food place, tell your potential customer that you are in talks with a fast food franchise...let their imagination take it from there.
Of course, if your product is actually good you don't need any of that. |
|
| Should I learn XAML or .NET? | Sun 04 Jan | directions in development |
| I just started learning .NET a few months ago, but now Im confused about the whole longhorn/xaml thing. Should I just skip dotnet and become an early xaml adopter? I currently program C++/MFC. There seems to be fewer & fewer jobs in that area. |
| Sun 04 Jan | | You'll still need to learn .NET to write the code behind the XAML. |
| Sun 04 Jan | Brad Wilson | XAML is not a replacement for .NET, it's a supplementary technology for .NET. Asking whether to learn XAML or .NET is akin to asking whether to learn Windows programming, or Resource (.rc) Files. |
| Sun 04 Jan | GuyIncognito | So your suggesting I learn the resource files thingee? Where do I start? Do they have any "Learn .rc in 7 minutes a day" books available? |
| Sun 04 Jan | Dennis Forbes | Start with the "ASCII in 24 Hours" series. Very informative. After that you can get started on "UTF-8 for Dummies". |
|
| Safe Mode Command Prompt vs Command Prompt | Sun 04 Jan | Indian Developer in India |
| Well, one more Q. for today. Minor issue, but its nagging me.
What have himem.sys, autoexec.bat and config.sys got to do with Mouse and Monitor detection?
Been playing around with OSes at home. Though most of the ones boot from a customized boot floppy, BeOS and some flavours of Linux have been configured to be loaded from a DOS prompt with a .COM file.
When initialized under a normal Command Prompt, my age old serail port 3 button Logitech mouse never gets detected in both the OSes and my equally geraitric 14 SVGA monitor behaves erratically with BeOS. The Graphic Card is onboard on an Intel 810 chipset.
The problems are overcome when Loadlin and LoadBeos are executed from a Safe command prompt.
As an aside, got to say, I really like BeOS. Neat, really neat. Planning to make that my Media Server at home.
TIA
Regards
KayJay |
| Sun 04 Jan | Ankur | himem is a DOS extended memory manager to get access to memory past the 640K barrier.
config.sys is a place to load DOS drivers, like a mouse driver. There is no auto-detect here - you load the driver, and hopefully it works. You would use this space to load a mouse driver, the memory manager, a CD-ROM driver, and a sound driver - and hopefully, you would still have enough memory to run Windows/game of choice.
autoexec.bat is meant to run programs on startup. |
| Sun 04 Jan | Indian Developer in India | Ah! Config.sys seems to be culprit. Conflicting drivers? OK.
Thanks Ankur. |
| Sun 04 Jan | Brad Wilson | Might I ask... why are you using BeOS, when it's dead? And why not use a modern Linux distribution that boots from CD instead of running a .com file from within a DOS prompt? |
| Sun 04 Jan | Indian Developer in India | Those are just some of the 'fun' things I like to do to my old boxes at home (1 PI, 2 PII and 1 Celeron 466 all with a sum total of 192 MB RAM - [4 * 32] + [1 *64]) . Keep swapping RAM chips, PCI video cards etc, etc.
I can't do any really productive work on them (Visual Studio, IIS, Photoshop, MS Office and heavy CD Burning Software). No point selling them as no one will buy them.
So they are now functioning as a local internet gateway (on Linux), a file server (also Linux) and the other two are just there to be worked upon, one of them has BeOS
BeOS 5 was a free download and OpenBeOS seems to be getting up to speed. I just wanted to check it out and was very impressed. Smooth video, no problem with onboard cards and works like a charm with only 92 Megs of RAM.
Regards
KayJay |
| Sun 04 Jan | Indian Developer in India | Typo above. Shoud read 96 Megs of RAM. |
|
| Technology ought to last longer | Sun 04 Jan | anon |
| I have this belief that a given technology ought to last longer than my underwear. With Microsoft, it simply is not the case. ADO, DAO,OLE DB, Active X, OLE, ODBC, .NET, Assemblies blah blah blah.
Now if the blurb is right, Longhorn will be based on the SQlServer database engine. Apparently, MS will provide backward compatibility. This essentially means another round of code rewrites. Basically because to optimize your application for longhorn, you simply cant use the old API any longer. I dont mean this for every application though. So for those of you who ported to .NET, welcome to another round of code rewrites. You can also bet that it will lead to new viruses, new bugs, new nuisances.
Joel was making the point that they develop new technology to screw their competitors. I dont think so. It probably has to do more with incompetency. I mean look at Oracle. Oracle 7 and Oracle 9i, there is no fundamental difference. Oracle 9i is way ahead of 7, but still anyone using 7 can port and use 9i. Same is with almost all other technology i have used except those coming from MS stables. Technology improvement essentially means you can port if you want to, but you can assume that the old stuff works still. I mean, i agree oracle upgrades are a pain. But you dont have to rewrite or face 100 bugs as in the case of MS.
I think there is something fundamentally wrong with their codebase, if they cant make incremental improvements and have to rewrite each time.
I work with a wonderful tool called Centura team developer (www.guptaworldwide.com). I dont belong there, but you can check out their software sometimes. Their codebase is almost the same from 1985. Upgrades are never a problem. It usually takes 10-20 minutes to change the DLL file names.
Centura/Gupta is way, way , way ahead of Visual basic when it comes to basic client server. I know both VB and Centura.
Centura sells for 5000$ a license seat, but they claim that client server coding is 4 times faster than VB. Having used both, it is an understatement. Unfortunately, they fucked their marketing up. So no one uses them. Upgrades are never,never a problem. I suspect Delphi also to be the same and very stable. Any comments from DElphi users?
Unfortunately, Microsoft f***ed both Centura/Gupta as well as Delphi. |
| Sun 04 Jan | anon | A typo
<>
I meant 1995 and not 1985. Sorry. |
| Sun 04 Jan | MX | I have studied Microsoft's behavior for many years.
Other software companies behave like this:
They have a version of their product. They incrementally polish it.
Version X+1 is version X plus a few features, and a lot of polishes.
Microsoft behaves like this:
They have version X of the product, but usually, with a few exceptions, they don't polish it.
This is why a lot of software from Microsoft doesn't look super-polished.
Their goal is not to add a few features and polish.
Their goal is to make a leap ahead - to add something to their product which represents an important competitive advantage.
So.. many times they rewrite large parts of applications, etc - in order to leap ahead of their competition.
So - in the end - the software of the competition is very polished, and users work well with it, they like it.
But.. the software from Microsoft is unpolished, but has major new features which are 'must buy' features.
People hate the MS products because they are unpolished, but buy them because of these features.
Look at what happened with VB 6 vs. Delphi.
Did they attempt to incrementally improve and polish VB 6 so it can compete with the (largely superior) Delphi?
No!
They attempted to leap ahead of Delphi (and Java), by creating Visual Studio .NET. |
| Sun 04 Jan | Smitty Werbenmanjansen | 'Unfortunately, Microsoft f***ed both Centura/Gupta as well as Delphi.'
I don't know about centura, but Borland did that to Delphi... |
| Sun 04 Jan | Smitty Werbenmanjansen | 'Other software companies behave like this:
They have a version of their product. They incrementally polish it.'
'Did they attempt to incrementally improve and polish VB 6 so it can compete with the (largely superior) Delphi?'
Seems to work wonders for Microsoft products. Maybe other companies should be doing the same... |
| Sun 04 Jan | anon | MX,
If you need to rewrite your entire application to leap ahead, then your product is fundamentally unsound. Is it not? |
| Sun 04 Jan | Nick | Anon, are you sure you want to use Gupta as an example?
Per their web site, it looks like they're re-writing their applications to utilize the .Net framework. They tout it as a means to 'future proof' your applications? Don't those two things run counter to your arguments above? |
| Sun 04 Jan | Chris Tavares | You can still run DOS applications written in 1985 on Windows XP.
All of the technologies you mentioned still work. You can still write Win16 apps if you want to, and they will (for the most part) still run just fine.
Granted, MS is always coming out with new and 'improved' stuff. Some of it is incremental improvement, some of it is genuinely fixing stuff they messed up (no more ActiveX controls, hallelujah!), and others, well, it's groups at MS justifying their existance. :-) |
| Sun 04 Jan | version 1.0 | All I can say is that I'm glad there has been a company of first class software developers like Microsoft. Otherwise our software would have been developed by twerps like those on this thread, with their ridiculous claims.
Microsoft's main products reflect more than a decade of continuous improvement which make them the industry leaders in their sectors. Word, Excel, Windows, VB and the C++ compilers are flagship examples.
Visual Studio .Net is a development tool and thus is not a competitor to Java, which is a platform and a language. |
| Sun 04 Jan | Eric Debois | Yeah, borland fuxxored delphi marketing all on its own... Still its a pretty solid product with an active user community. Delphi could have been way bigger.
MS wants to lead the industry and keep their competitors on their toes. Everyone knows that if MS invests in a technology there will be money in adopting it early (for thirdparty shops) because you can sail along on MS' marketing push.
As the competetive standards and platforms become more established, MS presents new technologies more often, and earlier.
My guess is that it will backfire eventually, but then again, they may have the sense to see when that is about to happen. |
| Sun 04 Jan | Mike | 'I mean look at Oracle. Oracle 7 and Oracle 9i, there is no fundamental difference.'
The same holds true for SQL Server 7 SQL Server 2000. That would be an apples to apples comarison. |
| Sun 04 Jan | anon | Nick,
Gupta has to been caught by the marketing bug. They are trying to market as developers these days look at hype too.
Their codebase consisting of base classes, functional classes is real strong.
As fr SqlServer 7, Sql server 2000 comparison, a more apt comparison would be between yukon and SqlServer 7. |
| Sun 04 Jan | Shlomi Fish | In UNIX the situation is vastly different. If we take a common GNOME 2.x system for example, then everything that is of critical importance is written in ANSI C: the kernel, the Standard C Library, the support libraries, X-Windows, Gtk+ and GNOME themselves, the compiler, the shell and command line utilities - everything. And you can fully program and modify everything. No need for C++, Java, .Net or
whatever.
Of course, ANSI C and UNIX have seen several good revolutions during the time. It is possible that many times backwards compatibility was somewhat broken, or that entire
codebases had to be refactored or re-written. But it enabled keeping the core system in good shape. This may be one argument why Joel's 'Things you must never Do Part I' (which is otherwise very good) may not apply to all open source technologies. In open source you sometimes wish to radically change the behaviour of programs. (and you also have an implicit monopoly). |
| Sun 04 Jan | Stephen Jones | Unix was written before you had C++, Java or .NET |
| Sun 04 Jan | sgf | 'I have this belief that a given technology ought to last longer than my underwear.'
So change your underwear more often. Problem solved. |
| Sun 04 Jan | Brad Wilson | Yeah, I don't get what the whining is about.
Look at the major evolutions of development technology from Microsoft:
DOS = 1981
16-bit Windows = late 1980s (not sure when)
32-bit Windows = 1993
.NET = 2001
We're talking about some pretty slow sweeping changes here. Yes, their data access team is on some kind of crack-induced frenzy, but it's really pretty isolated.
Microsoft apps aren't incrementally improved and highly polished? Have you ever USED Office? That product DEFINES incremental (snail-like) improvements and severe polish. |
| Sun 04 Jan | MX | Office and Windows are consumer products. With these, Microsoft applies the standard 'incremental improvements and polishes' strategy.
For developer and admin products, Microsoft applies the 'leap ahead' strategy. |
| Sun 04 Jan | Stephen Jones | With both Office and the OS MS has applied the incremental improvement strategy, but I think the OP was referring to its effect on developers.
Even here it is hard to get exact details. Most of the limits that MS has been putting on development for Windows (such as limiting the right to write to the registry, or insisiting that installed files go in a certain place) has been for the benefit of consumers, who do need saving from the delusions of grandeur that incompetent programmers and marketing types suffer from. Also, iI thought that the WDM model has meant that you only need to write one driver for Windows whether 98, 2K or XP, though the amount of incompatible hardware around suggests that something here is not going according to plan.
I would be interested to know how the Longhorn planned reduction of Windows API calls from the present 70,000 to around 10,000 is going to affect things.
With regard to developer tools, the big change seems to be .NET, and school is still out on that one. Certainly the split between VBA and VB.NET is a real gamble.
But programming languages have always been changing. Java was almost unheard of in 1996. I remember in the mid 80's teaching English to a guy who did the programming for the Spanish airtravel control systems, and he would spend a long time explaining to me the beauties of Fortran and how ADA was going to blow it all away.
to be frank we are using the Wintel platform because the three big players, IBM, Intel and MS, considered backward compatibilty to be one maginitude more iimportant than any other factor. |
| Sun 04 Jan | PrideGoesBeforeAFall | >I have this belief that a given technology ought to last longer than my underwear<
Well, if you wear your underwear inside out as well as inside in, then it won't last as long, therefore great technologies will last longer than your underwear.
Problem solved. The bill for my services is in the mail.
Next! |
| Sun 04 Jan | Me and the view out the window | > For developer and admin products, Microsoft applies the 'leap ahead' strategy.
Sorry, MX, that just isn't true. Visual Basic came out around 1990 as version 1.0, and Visual C++ around 1991 as version 1.0, incorporating a C++ compiler that was already at, I think, version 5 or 6.
Those products were gradually refined throughout the 90's, and the versions for .Net represents a further logical refinement. |
| Sun 04 Jan | Tony Chang | Windows has 70,000 API calls??
Dang, no wonder I'm so confused. |
|
| Listing Employment History on Resume | Sat 03 Jan | HmMm |
| Hi all,
I just have a question on what all of you do in the Employment History section on your resumes.
I have worked at the one company for the past 5 years, starting as a developer and progressing through team leader to my current position of Project Manager. I have listed each of my promotions as a seperate item in my employment history so that I can provide detail in what I did while in each position.
Does this sound normal to anybody else? I do the hiring now and I know if I received a resume that detailed an employment history in this much detail I would appreciate it so I can see exactly what the applicant did during each role. But I am worried that this might just be me and other potential interviewers may see it as trying to pad my resume or something. Any thoughts? |
| Sun 04 Jan | Nick | I've done the same thing myself when I've held several positions within a company. They've always been received well, so I don't fret about the format.
In general, I think there's too much worrying about resume format. Just make it as complete as possible while retaining easy (human) scan-ability. |
| Sun 04 Jan | HmMm | Thats my opinion too Nick, I suppose I just wanted to see what others thought of that as well. |
| Sun 04 Jan | Immature programmer | Yup, same here ... I listed different positions within the same company separately on my resume; it went over just fine with those I interviewed with.
If you've been at the same company for 5 years and have held several different positions at that company, it would seem desirable to list each position and set of duties separately. |
| Sun 04 Jan | Brad Wilson | I actually split out what I've done from where I worked. The dates of where I worked are actually just that: dates w/ titles, and really no other details. Some people care about some things more than others, so it just made sense for me to separate out 'work done' from 'where it was done, and for how long, and with what title'.
Nobody has really complained. |
|
| Word of the Quarter | Sat 03 Jan | Dennis Forbes |
| Every now and then I notice a massive uptick in the gross incidents of a certain word or terminology -- suddenly seeing it used dramatically more frequently than seen previously without a change in the general context or level of discussion to warrant it. This is not to indicate that the use is incorrect, or that the word isnt valuable or helpful to clarity, but rather that its interesting seeing the wildfire effect of some elements of linguistics.
About 3 months ago the word in favour was graph. Before that it was refactor, with some pretty heavy competition by corollary.
After much consideration, I would like to nominate the word orthogonal, and by corollary the variant orthogonally as the most increased usage in a quarter.
Thank you |
| Sat 03 Jan | MX | There are sites that monitor these 'word bursts' in order to detect new 'hot' trends coming up.
http://www.daypop.com/newsburst/ |
| Sun 04 Jan | Dennis Atkins | Orthogonal's coming back? I used to like that word until it got overused about 10 years ago to the point where I wouldn't use it anymore since it was starting to get used for things it doesn't mean.
Things need to be completely independent to be orthogonal.
So in what areas of industry are you hearing it used? |
| Sun 04 Jan | Dennis Forbes | I've seen it used on here probably 10 times in the past two weeks, and it has absolutely skyrocketed in popularity on Slashdot, as well as several blogs -- I think a couple of people used it in context, some people hit dictionary.com, and suddenly it became a "must be interjected" word. |
| Sun 04 Jan | Matthew Lock | My vote goes for the over use of the word 'broken'.
These days everythings is claimed to be broken. 'SMTP is broken', 'Windows security is broken'.
I prefer the term 'has a problem'. |
| Sun 04 Jan | Mitch & Murray (from downtown) | "Plastics, Benjamin, plastics". |
| Sun 04 Jan | Philo | Matthew - I think people use 'broken' to indicate that in their opinion, it's something that cannot be repaired in place.
IPv4 is an example - sure it 'has a problem' but absent reinventing mathematics, there's nothing that can increase the number space. So IPv4 is 'broken' and IPv6 is the solution.
MHO only, of course.
Philo |
| Sun 04 Jan | Stephen Jones | Rather too often for comfort, I have been on airplanes, that like IPv4 do not have any spare seats/addresses.
I would however have been quite worried if instead of saying the plane was full, they had said it was broken. |
| Sun 04 Jan | somebody | I agree with "broken" -- "I don't understand this GUI so it's broken", "I get spam in my mailbox so email is broken", blah blah blah. |
|
| CD-Burning Question (Massive Backup?) | Sat 03 Jan | John Rose |
| This is slightly off-topic, I guess, but its probably something that most software developers have faced from time to time, so Im posting it anyway.
I want to back up several hundred GB of junk from my hard drive onto CDRs. Which CD-burning software will make this easiest?
Heres the feature Im looking for: I want something that will allow me to drag the entire load of files into the CD-burning software. Now, instead of crapping out with a fatalistic error message informing me that this data cant fit on a single CD, I want it to be smart enough to BURN THIS LOAD OF FILES ONTO AS MANY DISCS AS IS NECESSARY. You know, like... fill up the first disc, eject it, tell me to insert the second disk, etc...
Its amazing how poorly-designed most CD-burning software is. |
| Sat 03 Jan | no name | Suggestion: Use WinZip to create a huge zip file that is split into CDROM size chunks. |
| Sat 03 Jan | MX | I use WinRAR (http://www.rarlab.com/rar_archiver.htm) to make backups.
I have a batch file that archives all my stuff (including work files, documents, e-mail, etc) using 700 MB volumes.
After everything is archived, I burn the archives to CDs.
The advantage of WinRAR is that the archive can contain recovery info - even if the archive is a little damaged, WinRAR can still extract all files correctly!
The amount of recovery info that is added can be controlled from the command line.
I like the fact that all of the settings can be controlled from the command line.
You also get a great compression rate (compresses a lot more than WinZip)
Also, WinRAR is a widely used archiver, and it is known that it doesn't contain major bugs. The only bugs ever found in non-beta versions are very minor bugs. |
| Sat 03 Jan | Tom Hathaway | Or get a 200G hard drive and copy to it. |
| Sat 03 Jan | MX | I forgot some things!
WinRAR is a complete solution - it also decompresses and can compress to ZIP.
Also, it decompresses GZ, TAR, ISO, etc. |
| Sat 03 Jan | John Rose | Thanks for the responses. The WinZip/WinRAR suggestions are good for a lot of scenarios, but not quite what I'm looking for. Let me clarify a bit more... I'm backing up my media files from my hard drive- mostly mp3's and videos.
I'd like something that will simply copy the files onto the CDs for me, ~700MB at a time. I'd like the files on the CD's to be in an easily-usable format so I can pop them into another computer later and watch the movie, or listen to the music, etc.
Since they're media files, compression won't be effective and will just make the files more of a hassle to retrieve later.... (Although you guys were sensible to suggest compression in the first place, since I didn't mention that they were media files) |
| Sat 03 Jan | no name | WinZip/WinRar do break the files up for you and restore them later even if you don't need compression it's still a good solution. |
| Sat 03 Jan | John Rose | Wellllll I don't want the files compressed because I (ideally) don't want to have to decompress them, worry about having all discs of the backup set present, etc.
I'd like to be able to just pop a disc of videos into my 'media' computer that's hooked up to the TV, or pop a disc of mp3's into my portable mp3 player or my mp3 car stereo... :-) |
| Sat 03 Jan | John Rose | ...I realize this sacrifices some efficiency in storage space (not every disc will be totally filled) in favor of ease-of-use |
| Sat 03 Jan | Programmers are so stupid | Back in the late 80's or early 90's there was a program called 'fill' that I used all the time to copy files from hard drive to floppies. You would just tell it:
fill c:\somefiles\*.* a:\
and based on file sizes it would copy the files so that you got as many files as possible onto each floppy.
When the disk was full, the program would stop and prompt you to insert a new disk, and continue until all files has been copied.
I find it absolutely amazing that nobody has created a similar program for copying files onto a CD. |
| Sat 03 Jan | John Rose | 'I find it absolutely amazing that nobody has created a similar program for copying files onto a CD.'
-------------------------------------
I agree! Seems like basic functionality, to me...
I downloaded the demo of the latest version of Nero Burning ROM, and it has a nifty backup feature that uses as many blank CD's as necessary.
But it wants to split files between discs. I don't want any files split up; I just want as many complete files as possible on each disc.
My friend's got a copy of Roxio's latest monstrosity; he's sending that to me now... |
| Sat 03 Jan | Him | I have no friends :( |
| Sat 03 Jan | Frederic Faure | Fill.exe is still available. You might want to check with its author how you could write a batch file to do what you'd like to do (maybe connecting fill.exe to a basic CLI CD burner)
http://users.erols.com/waynesof/bruce.htm |
| Sat 03 Jan | Mark Smith | I did something just like this recently except on to DVD-R's. I used a combination of a command line app I wrote and the mkisofs utility from the Open Source CD-Record package.
The end result was a bunch of batch files that I could run in turn to create .ISO images. Then, I used Easy CD Creator to burn the ISOs.
Worked very well. If Fill.EXE doesn't work out, send me e-mail and I'll cobble the stuff together for you. |
| Sat 03 Jan | MX | John, a program that does exactly what you want is BurnQuick, located at http://www.BurnQuick.com/
I hope this helps you.
Excerpt from the FAQ located at http://www.burnquick.com/faq.asp#14 :
Q: Can BurnQuick let me burn to multiple disks? For example: Can I fill one disk and have BurnQuick automatically tell me to insert another disk to continue burning?
A: Yes. Starting with version 4.0, BurnQuick will allow you to select a set of files or folders that is larger than will fit on a single disc and it will burn those files to as many discs as are required. |
| Sat 03 Jan | T. Norman | Get an external hard drive(s), or one of those removable hard drive kits. The cost of 1000 CDs and the time spent to burn them will dwarf the cost of the hard drives. |
| Sat 03 Jan | Tony Chang | 'My friend's got a copy of Roxio's latest monstrosity; he's sending that to me now...'
This can not possibly be the same John Rose speaking that is concerned in other threads about the effect of open source software on programmers careers. |
| Sat 03 Jan | John | No, it's not the same John. |
| Sat 03 Jan | Chris Tavares | Well, if you've got a copy of Easy CD Creator, you've got a copy of DirectCD. This makes recordable CD's look like a normal writable disk. You could use DirectCD disks and a batch file or whatnot.
The disks are normally only readable on a machine with DirectCD installed, but you can go through and 'close' the CD so that anybody can read them. |
| Sat 03 Jan | John Rose | 'This can not possibly be the same John Rose speaking that is concerned in other threads about the effect of open source software on programmers careers.'
--------
Wow, there's another John Rose on here? Haha.... wow. Or maybe there's just another John. I'm definitely not anti-Open Source, that's for sure.
I'm not going to get into debates about Open Source and/or piracy here, but the reason I needed my friend to send me a copy of EZ CD Creator is because they didn't appear to have a legal evaluation version available for download on their site. If they had, I would haven't gladly downloaded it, like I did minutes earlier with Nero's demo version...
Anyway, Nero and EZ CD Creator both allow you to span multiple disks, but they SPLIT UP some of the files (so that half of file ABC will be on Disc 1 and the other half will be on Disc 2) which is not what I want at all for a variety of reasons (although it would definitely be ideal in some cases). |
| Sat 03 Jan | John Rose | BurnQuick sounds like it's exactly what I need- but I downloaded the demo and it tells me my CD burner isn't supported.
I have a generic CD drive, it just shows up as 'ATAPI CD-RW 52x' in Device Manager; not sure who makes it... never had a compatibility problem until now. Grrr. The search continues. Thanks for the feedback so far. :) |
| Sat 03 Jan | MX | Nero contains Nero InCD.
Nero InCD allows you to write to CDs exactly like writing to hard-disks.
Also: You can download InCD separately (search the Nero site a bit) and it never expires!
Also check out the 'Burn to the brim' program, available at http://bttb.sourceforge.net/
They claim that:
'Burn To The Brim is a utility which selects the group of files or directories (documents, mp3 files, whatever you like to burn) which optimally fills a cdr or other medium (or multiple CDRs/media).' |
| Sun 04 Jan | MX | I have just tested 'Burn to the brim', as I need such an utility myself.
It appears to work well - just make sure to read the docs. |
| Sun 04 Jan | Stephen Jones | CD/RW's are not the answer; they take ages (like half-an-hour each) to format, and you are down to 535MB. so forget the suggestion of Direct CD. |
| Sun 04 Jan | Guillermo | I think the best idea is T.Norman 'Get an external hard drive(s), or one of those removable hard drive kits. The cost of 1000 CDs and the time spent to burn them will dwarf the cost of the hard drives. '
waiting CDR times is frustrating for backup purpouses.
I have add an second 80GB IDE drive and replicates (backup) the changed files every day at 23:00 automatically, using a nice and free vb program from KarenWare:
http://www.karenware.com/powertools/ptreplicator.asp
While this program runs I'm doing other nice things, not waiting to change another CD.
Sure, this backup scheme can have some troubles is all the pc is burn or stolen, but you can do other replicator tasks at 01:15 AM to other PC in your network or other external drive. |
| Sun 04 Jan | John Rose | The hard drive suggestions, while ideal for some (many? most?) backup scenarios, are really utterly missing the point for *this* scenario.
MX, thanks for the Burn to the Brim suggestion, that's a neat utility. |
| Sun 04 Jan | Simon Lucy | Ghost will do it and the majority of its competitors, some are picky about drives. |
| Sun 04 Jan | T. Norman | Talk to us again in 2006 after you've finally finished burning those 1000+ CDs, verifying them for correctness, and reburning the ones that didn't burn properly the first time. |
| Sun 04 Jan | Stephen Jones | Ghosting data files, let alone music files, is a really bad idea. You just want to play or copy a few files, not have to reinstall a whole disk with 100GB of data to get at one. And if any one of the Ghost disks is bad then the clone doesn't work.
Of the mainstream ideas Winzip is the best, particularly as you can put the spanning information on each disk, so that if one in the set goes bad it doesn't affect your access to the rest. And XP reads Zip files natively I think.
However the specialized CD burner programs recommended are the best ideas.
After all Simon, the guy is talking about putting music on CD's. Not an entirely new concept. |
| Sun 04 Jan | John Rose | T. Norman, let me know in 2006 when my CAR STEREO SUPPORTS A HARD DRIVE.
Thanks. :-)
(I know you listen to your clients/bosses better than you listen to me, because otherwise there's no way you could afford electricity or a computer with which to completely ignore the problem requirements) |
| Sun 04 Jan | Brad Wilson | 'T. Norman, let me know in 2006 when my CAR STEREO SUPPORTS A HARD DRIVE.'
Huh? You've had that for a couple of years now. Google for 'Kenwood Music Keg'. Removable hard drive that hooks up to your PC via USB. Mount it in the car and go.
There's even specialized versions for certain botique car brands (I can get one that works with the changer interface in my Audi, and keep the same head-unit). |
| Sun 04 Jan | John Rose | Perhaps I should have capitalized the word "my" in that sentence, instead. :D |
| Sun 04 Jan | My CDs Burn Perfectly | >verifying them for correctness
Most CD writing software does his automatically after the burn is finished.
>reburning the ones that didn't burn properly the first time
Does this really happen to you? If so you're either:
- using a shitty-quality CD writer
- using shitty-quality blanks
- burning at too high of a speed
- running intensive background tasks while burning
- all of the above |
|
| DJ Joel | Sat 03 Jan | Phil J Thomson (Deep Dish fan) |
| Just curious what were you playing at your party?
Couldnt find your name among the best DJs of the year 2003 in http://footwackyclan.de/forum_3/index.php?s=0cd40d6bdb4d8ce45929d4458b2f5cf9&showtopic=476&st=0entry5940 ;-) |
| Sat 03 Jan | Jorel on Software | Prolly busted out some Barbara Streisand with a Celine Dion chaser. |
| Sat 03 Jan | Kib O'Reilley | He's listed there, using his stage name. |
| Sat 03 Jan | PrideGoesBeforeAFall | Or maybe some Michael Bolton followed by some Kenny G. |
| Sun 04 Jan | levik | I wonder why Joel chose to use G-Force gold over the plethora of supperior (in my opinion) winamp plugins that are available. |
| Sun 04 Jan | John Rose | Get off Joel's jock already! |
| Sun 04 Jan | GuyIncognito | He wears a jock whilst djing? That seems a bit odd to me... |
|
| Single Line Up Arrow | Sat 03 Jan | Smeagle |
| On Windows 2000 if you start CharMap and select the Symbol font then try to Select/Copy the Single Line Up Arrow Glyph (0xAD), it doesnt do anything. (At least on my system.)
If you then attempt to paste this into WordPad or a RichEdit Window, Nothing gets pasted. If you try to use the keyboard and type Alt + 0173 with the Symbol font selected, in Wordpad or a RichEdit Window, you sometimes get a strange glyph.
This seems to also be the case on Windows ME. I havent tried the other versions of Windows, but I was wondering if anyone knows why this is or how to correct? Maybe I dont have the right fonts installed. I am trying to get this working for my code, (i.e. I want to allow the user to display this glyph).
(Arent the justification icons in WordPad upside-down?) |
| Sat 03 Jan | Smeagle | Can anyone reproduce this problem on their machine? |
| Sat 03 Jan | Dennis Forbes | This same behaviour occurs in XP Pro. |
| Sun 04 Jan | Chris Nahr | 'Single Line Up Arrow Glyph (0xAD)'
Character code 0xAD is only an up-arrow in the Symbol font. In every text font, it's the soft hyphen, indicating a user recommendation for hyphenation.
Word processors shouldn't show soft hyphens unless an option 'Show control characters' or the like is checked (which WordPad does not have IIRC). I suppose that's what happened in your case. |
| Sun 04 Jan | Smeagle | Shouldn't it display the up arrow glyph if the Symbol font is selected? Or are you saying the word processor and rich edit window interpret it as a soft-hyphen? If that's the case then why does "Alt+173" produce a different glyph? The correct behavior with the Symbol Font selected should be to display the up arrow glyph. Which is the behavior I'm trying to produce. |
| Sun 04 Jan | Chris Nahr | I really have no idea why the Symbol font isn't copied correctly across the clipboard -- it's true, I could reproduce it on my Windows XP Pro system as well -- the soft hyphen thing is just the only possible explanation I could come up with. |
| Sun 04 Jan | Brad Wilson | If you're talking about Charmap, it doesn't copy fonts onto the clipboard, only characters. It's your responsibility to make sure the font is appropriate in the destination application. |
| Sun 04 Jan | Smeagle | I believe Clipboard does retain the font of the character you copy, and I'm positive that the font in my application is set to Symbol, I'm actually using a Rich Edit Window.
Take WordPad for example. Set the Font to Arial then copy a random Symbol Font character like the 'Spade'. Now paste it into WordPad. Works good. Now copy the Up Arrow from Charmap and paste it into WordPad. You will either get nothing or a strange glyph.
Kind of frustrating because it is the only character I have noticed that does not work. |
| Sun 04 Jan | Smeagle | I guess the Rich Edit Window places the Rich Text into the clipboard, that's why it retains the font between copy/paste or maybe it's more complicated than that and I don't understand it. |
|
| Prototyping tool of choice | Sat 03 Jan | Mark Smith |
| Howdy all,
Id like to get some opinoins on application prototyping tools. What Im talking about is something that strictly creates pretty user interfaces that an experienced demonstrator can refer to and click on.
Visio will let you paint screens but not something that is very interactive. I havent looked at anything from Borland in some time, is there anything over there worth looking at?
Were leaning toward using VB6 or Visual Studio.NET (depending on the engagement) with a 3rd-party UI widget toolkit but that feels too much like real development and not focused on what we want to accomplish.
Ideas? |
| Sat 03 Jan | Indian Developer in India | VB6. |
| Sat 03 Jan | Shlomi Fish | My personal favourite is to use Perl with either Perl/Tk or Perl/Gtk (which would not work very well on Windows). I haven't tried wxPerl or Perl/Qt or whatever.
The difference is that Perl/Tk is very easy and fast, but is a bit lame, while Perl/Gtk is harder to get right, but can produce high-quality GUIs. They are both very nice.
If you don't like Perl you can take a look at Python, Ruby, Tcl, or whatever. The good thing about standards is that there are so many to choose from. |
| Sat 03 Jan | Saruman | I tend to work on server and back-end utility type stuff and not GUI. Perl is the prototyping language of choice. For the rare GUI needs, wxPython looks mighty good, I'm just looking for an excuse to plunge. My brother, a hardware guy, just loves it to make cross-platform hardware interface/data acquisition tools. |
| Sat 03 Jan | Kentasy | Paper and pencil ! :) |
| Sat 03 Jan | Brad Wilson | I vote for a variant of Kentasy: whiteboard and marker.
Showing people mocked-up UIs who don't understand coding, is a recipe for disaster. |
| Sat 03 Jan | MX | Paper and pencils. They work amazingly well.
Borland Delphi 7 |
| Sat 03 Jan | Mark Smith | This is for the next step beyond a whiteboard mock-up. Scribbles on a whiteboard are not going to keep people engaged enough, espcially people who don't understand coding, to get buy-in to make the project happen. The whiteboard is fine to get started with a small group who are very interested in making a project happen, but a larger audience needs to see something slicker.
Plus, this isn't for small projects ($150k+); if people want to use the prototype that's actually good news: we hit the nail on the head. |
| Sat 03 Jan | Michael Koziarski | Python with PyGtk is nice, build the GUI in glade, then just write some code to tie together the bits and pieces. VB6 is something that's never really worked for me, though some other guys at work always use it for POCs. |
| Sat 03 Jan | Anonymous Coward | If people who do not understand coding see a slick UI mocked up, whether in Visio, Corel Draw, Photoshop, or whatever, nothing you can say or do will shake them from the belief that the coding is at least 90% complete.
Therefore it is imperative that your mock up look like shit in order to get the time and resources necesary to complete the project.
Thus whiteboard or paper and pencil are ideal. |
| Sat 03 Jan | Mark Smith | AC:
You're assuming that coding is most of the work for a large project. It isn't; coding is the easy part. If someone wants to assume that coding is 90% done after seeing a mock-up, that's fine. That doesn't translate into the project being 90% done. |
| Sat 03 Jan | Anonymous Coward | Coding is about 15% of a large project. (Brooks, 1970, 1995)
However, a third to half the project comes before coding is started. By the time coding is 90% I'd expect the project to be well over 80%.
People who do not code are convinced that coding is 90% of a project.
Slick demos lead to grossly unrealistic expectations.
Similarly, demos must always use ridiculous data, otherwise the users will start analyzing the data and its presentation rather than the interface. |
| Sat 03 Jan | Chris Tavares | How about Powerpoint?
You can do some pretty sophisticated looking stuff, but since it's a powerpoint deck (which everyone will understand) you don't have the 'it looks done' problem. |
| Sun 04 Jan | Eric Debois | How about a HTA... HTML-application for IE5.0 or later? |
| Sun 04 Jan | Lennart Fridén | Paper and Pen plus REBOL (the difference between a fully working application and a prototype can be rather narrow when using REBOL). |
| Sun 04 Jan | Mark Smith | AC:
No one - NO ONE - who has been part of a large organization and who has any kind of seniority will expect that coding is 90% of a project. People who are new to a large organization may think this way; after about two projects they understand that budgetary process, resource acquistion, certification/deployment, and administration are much longer tasks (in terms of calendar time).
Our sales model (and the sales model of just about all corporate fulfillment firms) is to:
1. Forge a relationship with an IT executive (someone in the Director-AVP-VP range).
2. Come back to them with one good idea that is timely and solves multiple problems (not just business problems, but issues that may seem petty to others around personal ownership, timing, etc...).
3. Work with that executive to chisel out what the solution will entail. This normally involves lots of whiteboard time and creating a taxonomy.
4. Work through the IT executive to schedule a meeting with senior leaders in the business (in the Sr. Manager-Director range). We show that group of people something sexy; something that they can get excited about. We want them leaving the meeting demanding that what they just saw be deployed right now. If they think that it's already done, all the better. All of that pressure and discussion will drive the business senior management to open the checkbook and pull the trigger on the project.
The better the prototype looks, the more successful we are. This is akin to a child seeing a toy on TV that they can't live without and whining enough to their parents that the toy materializes. The child doesn't really care how the toy happens, they just want it to happen. For all they know it's Santa Claus.
Making a project happen in a large organization is much more social engineering than software engineering. 'Mythical Man Month' is more about the latter than the former. Frankly, it doesn't apply here. |
| Sun 04 Jan | Philo | And the child's reaction when they get the toy and are told they can't play with it for another eight months 'because it's not done yet'?
Philo |
|
| Cross UNIX Portability - Facts and Myths | Sat 03 Jan | Shlomi Fish |
| The purpose of this post is to specify the various issues that pertain
to writing cross-platform UNIX applications. It is not meant to tell
you exactly how to avoid these problems. That where books like
the excellent Porting UNIX Software by Greg Lehey
( http://www.oreilly.com/catalog/port/ ) or Advanced Programming in the
UNIX Environment by W. Richard Stevens (which I havent read yet but have
heard only positive things about). However it is meant to be exhaustive.
1. Cross-Architecture Programmers need to be aware of several things
Some architectures are little-endian (like Intel x86s), others are
big endian (like Power PCs or SPARCs). Some are 32-bit, others are 64-bit.
Padding of struct fields vary between the architectures as well. Running
into these things can easily be avoided by a clueful developer, but he
needs to be aware of them.
One incident that I remember was a Windows code where the content of the
struct was written straight to the disk, thus designating the file format
we used and distributed. (i.e: write(my_file_handle, &mystruct,
sizeof(mystruct));). This is one thing that an experienced UNIX programmer
wont do. And I was told the code was written by someone who was better at
Object Oriented Programming than anyone else in Tel Aviv.
2. Writing software that compiles everywhere is hard ; Writing software
that runs perfectly everywhere is trickier.
Getting software to compile on a different UNIX platform is _relatively_ easy.
Tools like GNU Autoconf/Automake/Libtool can help you with it.
Getting a software to run equally well everywhere is tricky. I recall a time
that a simple sockets program my partner and I wrote and executed on
perfectly on Linux, failed from some reason on Solaris. We did not know
what was the problem for a long time, until we Googled it and found that we
had a problem in our program that occurs only on Solaris and not on Linux,
and we were easily able to write a workaround that worked equally well on both platforms.
Of course, had it been a larger program with much more system calls, then
making sure it is portable would have been much harder.
However, if your program is written well, actively tested by your QA
engineers or volunteers, it should run equally well on every UNIX platform.
3. The GNU Autotools - a Two-Edged Sword
Autoconf/Automake/Libtool contain some very good functionality which is a
must for writing portable code. However, they are very, very hard to use as
they assume the greatest common denominator of a working UNIX system. One can
work with them, but it also take a lot of time and frustration to do so.
Recently, we have seen an inflation of open source start up projects to
replace them with something better. Most of them did not see a significant
use yet. For a partial list, check:
http://vipe.technion.ac.il/~shlomif/software-tools/
4. UNIXes come in all shapes and sizes
UNIXes vary in their quality, compatibility and feature set. It is generally
assumed that Linux and Solaris (and as far as I know the BSDs too) are the most
complete and just working of them, and from there it is going steadily
downhill. I once heard an experienced hacker say that HP-UX is not UNIX
and AIX is even less than that.
Again, the books I recommended may give some perspective on what to expect
in this regard.
5. Abstraction Libraries - a Partial Solution that is better than nothing.
Many abstraction libraries have been developed for UNIX (see
http://vipe.technion.ac.il/~shlomif/abstraction/) They abstract the
system functionality in a set of layers above them, that are usually
saner, and more well-documented and centrally documented. Several software
packages use them instead of implementing their own ad-hoc proprietary
abstraction logic, but its hard to tell whether this trend is growing or
not. It is up to you to evaluate the suitability of them for your projects.
6. Portability with Win32 - Impossible but Doable
So far, a great deal of prominent UNIX software was ported to Win32 (either
open source or commercial). Usually it involved a great deal of difficulty
as Win32 does not natively support a large number of UNIX mechanisms, that
purely UNIX hackers take for granted. Nevertheless, it is doable. However,
not all projects found it a high priority to do so, for various reasons.
7. C++ Portability - g++ or bust
C++ compilers vary a great deal in implementation of the C++ standards
and in which features are supported. Mozillas C++ Portability Guide define
what is the gcd of this:
http://www.mozilla.org/hacking/portable-cpp.html
As can be easily derived this is C++ that is not quite C++. An anecdote is
that a friend of mine (that I highly admire his skill as a programmer) got
burned once when he wrote code with friend methods that compiled fine on
Linux, and did not work properly in a certain proprietary compiler that
was needed to compile it for the Solaris target platform. He had to eliminate
the use of friends classes.
The only real solution is to restrict your use to the only cross-platform,
open source, compiler that implements a broad enough subset of the language
to have breathing air with - g++ of the GNU Compiler Collection. This compiler
is written in ANSI C and offers true compatibility across platforms, with
good code performance. So, my suggestion, is to restrict your work to g++
and possibly to relatively new versions of the other compilers as well.
8. Perl/Python/PHP/Ruby/Tcl - The Pot at the end of the Rainbow
Perl and friends are high-level P-code interpreted virtual machines which
transparently abstract all the systems functionality in neat convenient
packages. Each language like that, has its own advantages and disadvantages,
and discussing the pros and cons of them are out of scope of this document.
The important thing to remember is that it is much easier to write programs
that will work well on one modern platform as well as on any other. As such
, and because of their good support of other useful paradigms, they have seen
wide deployment by the hackers crowd, who used them for writing more and
more software. This trend seems to grow.
Note that sometimes, speed of execution prevents various distributable software
from being written in these languages, as they tend to perform quite poorly
compared to the most optimized C code. (or in many cases even a very sloppily
written one). Nevertheless, they do fill a growing niche quite competently.
Still, one has to stress that even with these languages, portability can
9. Java - nice try, but...
Java was over-hyped as a write once ; run everywhere solution. As someone
once noted it was more of a write once ; debug everywhere one, at least at
its beginning. Now it is much more stable, (and less hyped than it had been),
and so seems to be used appropriately.
Java tried to combine the best elements of C++ and those of high-level
languages like Smalltalk. It was a good attempt, but most Perl and Python
hackers felt it hardly went far enough for it to be usable. See for instance
Paul Graham analysis of it in his Javas Cover essay:
http://www.paulgraham.com/javacover.html
Java probably has its niche, but it seems that most of the uses Sun would
have wanted it to believe it would fit into, can better be fulfilled in
Perl, Python and friends, or alternatively in a carefully written C or C++
code. Add to that the licensing and availability issues than its vendor imposes
on them, and youll understand why it isnt very popular.
10. Conclusion
Writing a software that will run on most modern UNIX systems out there is
possible, but requires clueful, knowledgeable developers. (And users or
QA engineers who will assist him on testing it everywhere it needs to run on.
) Restricting yourself primarily to a certain number of UNIX flavours
(probably just Linux) will make your life much easier.
On the other hand, writing code that will run on Windows, requires testing
on a great deal of Windows variants after compilation. And when developing
solely for Windows, your code can probably never be able to run anywhere
except there. (not including the various recent .NET/Mono focus).
Writing software for UNIX or a particular UNIX flavour offers a more
open-source environment than Windows, reduced cost of tools (albeit perhaps
not reduced TCO - no one seems to know for sure), components that as a
general rule, just work, and if youre using the right tools and
methodologies, even portability to Win32. UNIX Portability is a fact and
not an ideal, as many open source packages are known to compile and
work on a large number of modern and legacy systems. |
| Sat 03 Jan | Shlomi Fish | Just to note that I wrote this comment by inspiration from what Joel said here:
http://www.joelonsoftware.com/articles/LordPalmerston.html
Namely:
<<<
I think this person was trying to say that in the Linux world they don't write setup programs. Well, I hate to disappoint you, but you have something just as complicated: imake, make, config files, and all that stuff, and when you're done, you still distribute applications with a 20KB INSTALL file full of witty instructions
>>>
First of all, Joel clearly shows that he's a bit out of date on where Linux is (most people now use Autoconf instead of imake). But otherwise, I just wanted to bring some facts into this. |
| Sat 03 Jan | Saruman | Yeah, unix portability is a very interesting problem indeed ;-).
THE Best Practice to reduce this to a minimum is to, from the start, write on more then one unix and have daily build and tests run so that you can be aware of problems early on. Personally, I think that one Linux flavor, one BSD flavor (especially Net/OpenBSD, they're more 'traditional') and a commercial unix or two (Solaris + one of your choice) is the best mix. Just get a cheap used sun ultra-30 or so and an SGI Indigo2 and you're set, 32-bit, 64-bit, indian-ness and ass-backward-ness are all covered... |
| Sat 03 Jan | John | Excellent article, Shlomi! |
| Sat 03 Jan | Dan Shappir | > And I was told the code was written by someone who was better at Object Oriented Programming than anyone else in Tel Aviv
I live in Tel Aviv and I don't recall participating in a poll to determine my relative rank as an OOP developer. Moreover, being good or bad in OOP does not necessarily improve your ability to write portable code. All I can say is that:
write(my_file_handle, &mystruct, sizeof(mystruct));
is not good OOP. I would expect the 'best Object Oriented Programmer' to write something like:
my_file << myclass;
Anyway, at the company I work for we managed to take a non-trivial win32 app, written in C++, and port it to Linux (tested on RedHat and Suse), Solaris, SCO UnixWare and OpenServer, HP-UX, AIX and OpenVMS. Easy no, doable yes. |
| Sat 03 Jan | Likes long walks, short piers | Just a note: For cross-platform scripting, the Rebol language is very impressive. This very tiny, quick interpreter runs identically on dozens of OSes:
http://www.rebol.com/platforms.shtml
http://www.rebol.com/view-platforms.shtml
Rebol prizes platform independence above all else, which is nice for some tasks. The flip side of this is that it comes at the expense of OS specific system calls. |
| Sat 03 Jan | Vince | Shlomi Fish, have you ever worked on a real java project? Its obvious to me that you havent, but correct me if i'm wrong. There are a lot of things that java sucks at, but a couple things its great at. The last two java projects i've worked on wouldn't have been possible in perl without some major, custom modules (which would probably have to be done in c or c++?), and yes, it could have been done in c++, but it would have taken 3 times as long. I'd also guess that the equivelant of 300k lines of java in C++ is something like 600k+. As for portability? all the developers have their own development enviorments on their WINDOWS laptops, and our staging and production envoirments are beefed up linux servers. And guess what? With the exception of one problem the first time we moved over, everything works! |
| Sat 03 Jan | Tom Hathaway | Another option is a combination of interpreted script with compiled code where speed is really needed. I suspect that for most applications, the need for optimized C is more in a C programmer's imagination. |
| Sat 03 Jan | Shlomi Fish | Dan Shappir: I realize mastery of Object Oriented Programming and knowing how to avoid the write struct stuff are orthogonal. But I specified it to show that the guy who wrote it was not very clueless, and still made this (possibly common) mistake.
Actually it was much worse, as he decided to use a padding of 1 byte in the internal DLL (to save space on the disk ?) and use 4 bytes padding by the application. This made me have to write an ugly conversion problem.
In any case, the safest UNIXish way to write a binary data file is to serialize each relevant member of the participating array individually. You can do it in C++ by declaring a stream operator (as you've demonstrated), and in C by declaring a couple of nifty functions. Not too hard, but still requires a clueful developer. |
| Sat 03 Jan | Shlomi Fish | vince: good for you and your Java project. In any case, I still think Java is used (mainly in the industry, but not only) for many tasks that are otherwise very easily done in Perl and friends. I worked on a Java project a while back:
MikMod for Java - http://t2.technion.ac.il/~shlomif/jmikmod/
It was written for JDK 1.0.x, but still can be easily ported to JDK 1.4.x. My impressions from the language were not entirely positive (but, OTOH, not entirely negative, either). Back then, I found it vastly incompatible with C or C++, it was very slow after I eliminated all pointer arithemtics, and it's quite verbose (even though I did not felt it too much). The fact all structs were references causes it to have a huge memory overhead sometimes. Its proprietary nature also is a huge drawback.
I'm not saying it does not have its uses, just that it doesn't go as far as Perl and friends do. For that matter, I also found C++ lacking in some respects and used ANSI C for one of my projects:
http://vipe.technion.ac.il/~shlomif/lecture/Freecell-Solver/slides/why_not_cpp.html
Finally, when I see a Java project in Freshmeat, I almost usually avoid trying it out. Those things are usually a dependency hell, difficult to debug, and cause too many problems. |
| Sat 03 Jan | Shlomi Fish | Tom Hathaway: most applications need not be very fast, and can easily be written in Perl. Some applications, however, seriously do.
When working with Perl, you need to understand that some operations are fast (like regexps search and replace or built-in functions), while stupid loops, conditionals, etc. have a lot of overhead. It's kind of like working in Matlab, where you have to think in matrix operations, and cannot simply use loops all over the place. (or it will be dog slow). |
| Sat 03 Jan | Curious Windows Kernel Programmer | As a windows programmer I have always been frustrated by windows mechanisms not available in unix. I hadnt really considered that it goes the other way also. What are these unix mechanisms your mention? |
| Sun 04 Jan | Shlomi Fish | Curious Windows Kernel Programmer: well, here are a few things off the top of the head:
1. A fork()-equivalent system call is not available in Win32. What fork() does is clone the current process into a parent
and a child that differ only in the function return value.
fork is very useful for creating Internet servers and for security, and the entire UNIX multi-processing is based on fork() and execve().
2. All major GUI libraries for UNIX have better geometry managers than X,Y. Like tables, or packing. (and naturally still support X,Y). The Win32 API suppports only X,Y, and creating
Windows that can be easily resized usually requires implementing this logic yourself. And different fonts can make your dialog unusable.
3. I personally find the Win32 API to be over-engineered and much less usable than the UNIX API. Why do you need to pass 7 arguments to the core function that opens a file? (In UNIX it's 3 or 2 for fopen).
4. There are much fewer signals available on Windows than on UNIX. (including the useful SIGUSR1 and SIGUSR2 signals).
5. Some user-id/process-id functions have no Windows equivalents.
6. Windows deviated from the 'everything is a file' philosophy of UNIX. As a result, working with drivers and coding such is much harder than on UNIX. On UNIX, a device driver is very straightforward to write, and you can later use open(), read(), write(), ioctl(), etc. to manipulate it (possibly even from Perl). In Windows, it is much more difficult.
There may be more. |
| Sun 04 Jan | Vince | I'm not anti-perl, I think it has some great uses, but it also has its limitations. I've seen them occur in complex, multi-server enviorments. Its true that a lot of people use Java when it would be way more appropriate to use perl, or something else. Not always though. I'm not sure what you meant about 'eliminating all pointer arithmetics'.
How does all 'structs' (I think you mean objects, btw) being refrences cause memory problems? The fact that they are refrences mean its easy to cache objects in a single JVM. Not only that, since when does memory matter. If the choices are have a team of programmers spend two weeks tuning for performance, or buy a couple gigs more of RAM, I'm sure the latter comes out cheaper.
Now, maybe we're talking about different types of projects. I think perl is going to be superior on any single server application. If your going to have multiple servers, possibly interacting with more then one database, I would definatly go with java.
I also disagree with your assesment of java being 'proprietary'. While it *was* developed by SUN, its currently supported by a number of companies, and in addition, almost EVERY major software company has an application server (macromedia, novell, oracle, ibm, apple, bea, etc.) Not only that, theres a huge open source following. And when SUN's shrinking empire finally comes crashing down, i'm sure IBM will pick up java. ;-)
MikMod for Java - http://t2.technion.ac.il/~shlomif/jmikmod/ |
| Sun 04 Jan | Mike | '1. A fork()-equivalent system call is not available in Win32. What fork() does is clone the current process into a parent
and a child that differ only in the function return value.
fork is very useful for creating Internet servers and for security, and the entire UNIX multi-processing is based on fork() and execve().'
As a general question it is my understanding that forking is more expensive on Windows, but threads are better on Windows than Unix. Is that true for the most part? |
| Sun 04 Jan | Shlomi Fish | Mike: a fork() system call is non-existent in the Win32 sub-system (as compilable by Visual C++, Mingw32 and friends). What cygwin does to emulate it, is by creating a new process, and passing through the memory contents by a pipe. As such it is extremely costy and inefficient. Just try to run a configure script (which uses fork() excessively) on cygwin and see how dog slow it is in comparison to Linux or FreeBSD.
As for threads: I don't know what do you mean by 'better' on Windows. The API on Windows is a bit better from what I was told. The semantics are rumoured to be vastly different.
Note that fork() and threads do not replace each other but rather each have its own place. As such the unwillingness of the Win32 designers to supply programmers with a good ForkProcess() system call, made it much less usable as a programming system.
I should also add that Win32 does not have symbolic links. One notable place where it is apparent is in keeping various versions of the same shared library. In UNIX it's a no brainer (using a symbolic links tree), but in Win32 it is very hard.
My friend conjectured that Microsoft did that on purpose so vendors of UNIX software will have a harder time porting their software to Win32, which will give Microsoft a fore. |
| Sun 04 Jan | Christopher Wells | > I should also add that Win32 does not have symbolic links.
There's an API (for NTFS) called CreateHardLink |
| Sun 04 Jan | Shlomi Fish | vince: re 'multi-server environments' - have you looked at Perl's POE or Python's Twisted. Maybe they can help.
'Eliminating all pointer arithmetics'. The MikMod code had a lot of pointer arithmetics used for optimizations. Something like that:
*(int_ptr++) = (int)*(short_ptr++);
And quite a lot of things similar. I converted MikMod from ANSI C to Java through several stages of C++. When I eliminated the pointer arithmetics and used plain arrays (or arrays+indices), I got a slowness factor of about times 6. My program used to consume 5% of the CPU on my Pentium 166 MHz computer, and afterwards it took 30%. (even in C++) It is possible that modern Java implementation can optimize this away, and it's probable that the faster computers that are common today would be able to handle this load without a squintch.
As for structs, I suppose it makes sense to designate them all as references (that is how it's done in Perl and friends as well). However, from my experience, reducing the memory consumption can actually increase speed considerably, due to less cache misses, less indirect access, etc. These are micro-optimizations which are usually not relevant for uses Java will be considered to.
My point here is that Java may appear to be C++-like, but is a radically different language.
As for its proprietary nature: Sun did not release the JRE and the JDK under an open source license, and the license (the SCCL) does not give allow too much colaboration similar to what open source technologies offer. I meant 'proprietary' in the Stallmanic/'Free Software Foundation' sense.
So, while there are many open source projects around Java, the core JDK and several core technologies are not open source and as such not distributed with many Linux distributions, and have to be installed explictly (in a much less convenient way than Perl's CPAN modules).
Regarding Sun's Future: I would not start mourning it right now. Sun recently won a very big contract to install a great deal of its Suse Linux+GNOME+Java desktops in China, and it's highly possible that its temporary losses in the past year or two will be reversed soon. One of the options I see happening is that when and if Linux becomes dominant, then computer vendors, other than Intel, will market their computers for the home and office market offering true source compatibility with x86 computers. With proper marketing and good prices, Sun, SGI, etc. can gain a large percentage of the market now owned by Intel and other vendors. (in a way Apple already does). |
| Sun 04 Jan | Dan Shappir | Shlomi: Actually it was much worse, as he decided to use a padding of 1 byte in the internal DLL (to save space on the disk ?) and use 4 bytes padding by the application.
This, the endian issue you also mentioned, and potentially different methods of representing data types, are what usually lead me to prefer textual formats over binary formats. Plus, it is always helpful to be able to view the data in a text editor. To a great extent, this is XML's reason for being. The same is true for communication protocols BTW.
Sure, text-based formats are slower but:
1. If you work correctly, they are often fast enough (e.g. use SAX instead of DOM)
2. In many cases you don't care (e.g. server start-time goes up by 10 seconds).
3. When you do care, you can compensate by caching data in memory.
4. Handling versions, errors, updates is a lot easier.
For example, we needed a routine to read data from very large files in the .ini format (format used for historical reasons). I rewrote the code in portable C++ (using STL). Time to read, parse, and construct a hash table from a 12MB file, with > 10000 sections:
1.2 seconds
Write file after any modifications, while preserving comments:
1.5 seconds
Ok, ran these tests on my fast laptop (2.4GHz Pentium 4 with 500MB RAM using Windows XP), but even if it ran 10 times slower, still good enough for me.
With regard to scripting: I love scripting, but I would not like to be the one required to maintain a significant server application written in Perl. |
| Sun 04 Jan | Tom Hathaway | 'With regard to scripting: I love scripting, but I would not like to be the one required to maintain a significant server application written in Perl'
I agree. But I expect we've all seen some pretty unmaintainable C programs as well. My point was that it doesn't have to be all one or the other; pick the right tool for the job. |
| Sun 04 Jan | Michael Popov | Shlomi, good article, thanks.
Regarding fork() on Windows. Could you think about good implementation of fork() for the process with multiple threads ? There is also no practical difference between fork+execv and CreateProcess.
Regarding fopen and CreateFile. First of all, fopen is available on Win as well. But the point is you should compare CreateFile to the system call open() plus one function I do not remember right now (Sunday morning :)) that allows to change behavour of a file descriptor.
Regarding signals. That really hurts. Console signals on Win are not even close to Unix signals. In my current project someone ported signals using Win32 events and additional thread with WaitForMultipleObjects. Ugly but it works. |
| Sun 04 Jan | i like i | the thing about writing raw structures to file got me a bit confused.
Is there a difference between 'portability' codewise and 'interoperability' e.g. datawise between different compiled versions?
If the said files were not intended to be portable, e.g. temp files or local config files or whatnot, then why are raw structures in files a bad thing? |
| Sun 04 Jan | foobarista | Two points:
1. A good way to deal with OS incompatibilities is to
abstract OS features (typically disk I/O and/or various
threads implementations) in an abstraction
library, which presents a typical interface paradigm, but
which has implementations for each platform. Good
abstraction libraries have runtime inquiry as to what's
supported by the particular library as well, ie 'do you
support ftruncate?' I have had to do this several times,
and have a FileOpen interface, an open() interface, an
fopen() interface (for a BIOS which is written using the
STDIO I/O calls and doesn't support the Posix calls
open(), etc), and a custom interface written in
assembly language to Flash.
2. As for binary files, these are tricky to do portably but
not impossible, although you have to impose some sort
of grammar on them and have some way to store
metadata. Also, it helps greatly if you have a header
(which never changes, at least up to the part where the
header lives) on the file which indicates the version of
your software that created it. This way, fancier software
can convert the files to the newer format, and less
fancy software can at least gracefully reject them
without a ton of expensive - and hard to QA - error
checking. |
|
| Consulting? | Sat 03 Jan | Henry G. |
| Can someone help me understand what really consulting means?
I mean what does it means that a software company does consulting besides software development?
Thanks. |
| Sat 03 Jan | Eric Debois | Well, I guess it can be many different things, but the stuff Ive been involved in is spec writing, giving second opinions on other peoples specs, datamodels... |
| Sat 03 Jan | T. Norman | 'Consulting' is generally used to describe the business relationship with the people who pay for the software they develop.
If you develop a product, which people come in to purchase after it's already been developed, that's not consulting. But if you develop something specifically tailored for a customer, that's generally considered consulting. |
| Sat 03 Jan | Simon Lucy | Well consulting doesn't necessarily mean you personally are going to develop anything or provide them with anything other than your experience, knowledge and considered opinion. But if that consultancy is going to be worth while then its likely going to be a significant factor in whatever the decision or implementation process is.
Consultancy can be at any stage of the development lifecycle and be on any specific or general area as agreed.
Consultancy can be directly for an end user organisation, the intermediate dealer/var or the publisher/author. |
| Sat 03 Jan | Dennis Forbes | Consultant = One who consults |
| Sat 03 Jan | NYC Consultant | It means providing a service as a non-employee.
That service can be anything from analysis, application development, system integration, to system administration.
There are three ways to be a consultant.
1) Independant Contractor (IC) - gets paid on a 1099 from many clients for small short term projects.
2) Employee of a consulting company or body shop (W2) - gets paid on W2 for longer term projects.
3) Employee of your own corporation providing services to either the client directly or to a body shop. This is called being Corp-to-Corp.
The safest from an IRS standpoint is #2. The next safest is #3. However, #1 isn't safe because the IRS can reclassify you as an employee of your client if you work for a particular client almost exclusively. |
| Sat 03 Jan | Bored Bystander | 'Consulting' as classically used in the engineering and professional services fields used to mean that you *consulted* - you *only* provided advice, and generally not deliverable work.
Used in the context of software development, the role of a 'real' consultant might be to provide architectural steering, generate system designs, design a database, etc. without doing much, if any, coding.
However, the term consultant has been mongrelized in our industry to be equivalent to the role of independent contractor. When someone tells you they are a consultant and they do hands-on development as a rule, chances are they are inflating their role just as everyone else is expected to do.
Also, the body shops tend to label their outsourced non-expert drones on their payroll 'consultants' as well, so there is a lot of clash in the name space.
An independent contractor performs work on a free lance, non permanent employee basis. This is a legal definition that influences how you report your earnings to the IRS (in the US).
The most proper description of what most self employed people in this industry do is independent contracting, and not consulting. |
| Sat 03 Jan | Indian Developer in India | Can a company Outsource Consulting to an Independent Contractor? |
| Sat 03 Jan | Bored Bystander | Let me put it this way: the territory of independent contracting and consulting can overlap but each can also be distinct from the other. Think of a venn diagram wherein the two circles describing each set overlap.
So you can have: IC but not a consultant (freelance programmer, say); 'consultant' but not an IC (bodyshop employee, or perhaps a true expert that is on someone else's payroll); or self employed consultant.
I don't think it makes that much difference functionally, though. Clients generally don't want to acknowledge that they need expert level external help. And most heads down programmers farmed out through the high tech temp agencies like EDS or Computer Horizons love the ego boost of being labeled a consultant. |
| Sat 03 Jan | Indian Developer in India | True.
But how is the onus differentiated; IC vis-a-vis Cons.? Is it on a cse by case basis, written down explicitly in the signed contracts or are there general legal assumptions as to what a IC should be responsible for and what a Cons. is accountable for? |
| Sat 03 Jan | Bored Bystander | >> are there general legal assumptions as to what a IC should be responsible for and what a Cons. is accountable for?
This is getting very pedantic.
An independent contractor is simply a worker who is not an employee of the party that is receiving his services. An IC is a separate business, a vendor.
A consultant is a subject matter expert whose classical role is to give advice and render judgements.
An IC is not a lesser grade of consultant, although many in our industry may treat the different situations in that manner. A consultant may or may not be an IC. An IC may or may not be a consultant.
As far as the degree of professional liability, my non-lawyer's guess is that the title is immaterial, it probably depends upon how much credence your client or employer places in your judgement. If they consider you a low grade code slinger, you probably have little professional liability. If the client considers your judgement 'make or break' of their profitability, you are probably facing some degree of professional liability for your actions.
It just all depends. |
| Sat 03 Jan | Anything else? | Henry G, when a software company is doing consulting, it usually means they're doing a specific task for another company, such as adapting a system for the customer, or sometimes writing one specifically for the customer. It usually implies they're getting paid by the hour. |
| Sun 04 Jan | Simon Lucy | Anything else:
Not necesarily true in any regard, see above. |
| Sun 04 Jan | Stephen Jones | --'Consultant = One who consults '----
Should be, after all the ant ending is the present particiiple which is active, but in current usage
consultant = one who is consulted |
| Sun 04 Jan | Anything else? | Simon Lucy, several replies here address the generic question of what is a consultant, rather than the question posed by the OP. |
|
| Performance Reviews:List 3 "areas for improvement" | Sat 03 Jan | Crimson |
| What do you do when you are forced to list 3 areas for improvement (either during the self-evaluation phase or for someone you manage)? I like Joels idea of just giving everyone gushing reviews, but at every company Ive worked at, the performance appraisal template always has the dreaded 3 (or however many) Areas Where Improvement is Needed section and it cant be ignored. This seems to undermine all the work you just did with the gushing review.
How do you guys handle this? |
| Sat 03 Jan | x | List three things that aren't relevant to your job. Example: 'become better at Unix'.
I *hate* those *stupid* questions. That's one reason why contracting is better. |
| Sat 03 Jan | Nick | I always thought this was the easy part of the review process.
First, take a look at your current projects that will be completed during the next review cycle and other upcoming projects that you know about. Are there things that you need to learn to do those projects? Are there things with which you will become more adept just by doing them?
Next, think of any job-related books that you'd like to buy. Since I'm always buying books this is an easy one f |