For smallish systems, I often find that fewer lines of code translates well to increased readability and maintainability.
While I agree that software engineers are not often writing quick one-off hacks, sometimes they are and Java isn't the best language.
My work mainly involves writing custom software to contract, not producing boxed software. I suspect many developers are doing this, or in-house development rather than working on boxed products.
I'm certainly not advocating that you should use Javascript if you're trying to write boxed software that will (hopefully) be sold to millions of people. But if you're trying to profitably knock out a little widget that someone's willing to pay $20,000 for it isn't automatically a bad choice.
Yeah I couldn't remember the name, 8 years now since I learnt functional programming stuff. My uni course was 99% Java, and I realised during that one course just how many features were lacking - until then I hadn't really appreciated how much could be gained from learning multiple languages.
The problem as I see it with Java is that it really isn't easy to hack something together quickly. It forces you to do everything properly. I'm sure as overall project size goes up, so do the problems caused by little hacks. I've no doubt Java is a good language for a big application project, or a platform.
Now I've seen problems using C with all kinds of horrible hacks to get stuff done quickly. But from a commercial point of view, I'm not sure if the effort spent on the occasional problems outweighs the effort saved by the quick hacks on projects the size that I'm working on (upto a few man-years of effort on a system).
The horrid problems with Javascript tend to be getting browser stuff working on Firefox and IE etc. at the same time. It looks like a neat solution to quick little programs that just aren't big enough to warrant a heavy architecture.
A lot of the comments are pointing out the problems in Javascript, and ignoring the problems in the big heavyweight languages like Java and C#.
It's not really in praise of Javascript, but a very good read is Joel's article 'Can Your Programming Language Do This?' It accurately points out a number of ways in which Java development very quickly takes up a lot of lines of code compared to more lightweight approaches. I personally prefer the light weight approach for many applications.
For a while in the UK, the government has been spending billions of pounds on NHS IT systems. There is enormous potential to improve the situation, but so far it just hasn't been used. The prime example is electronic medical notes as mentioned in the article.
Currently, I live and work 22 miles apart. I'm only allowed to use the doctor near my home, even though they are only open during working hours. The reason for this is my medical notes - f I need an emergency home visit (I never have) they will need my medical notes. Therefore it's essential my doctor is the one near my home. The government has spent millions on electronic systems for keeping these medical notes electronically, instead of paper based. Yet they somehow can't share the notes between two surgeries. If they could, it would vastly improve patient care. I could have a half hour trip to the doctor for my asthma checkup, instead of needing half a day off work. And if I ever visited hospital they would be able to see all notes taken about me by my GP. Although in my case there's nothing really to know.
In terms of saving money, I actually agree with the current intended usage. Computers currently will only be able to save money on administration type work. I don't think they will be able to significantly help doctors save money on direct patient care. That task is too difficult for computers right now, which is why we pay doctors a lot of money to do the job. I suppose it depends on where you draw the line between admin / patient care. What would scheduling operations, along with marshalling the resources of operating rooms, and correctly trained doctors and nurses fall under? I'd call that admin and say that it's the sort of thing a computer could probably do better than a person.
Surely you should at least read the linked article? It explains 1998 had the strongest El Nino of the century, making it an unusally warm year. Looking at the average trend line shows the warming clearly has not stopped.
Looking at any individual data point will not give you much information, because global temperature is affected by more factors than just atmospheric carbon dioxide. On average, global temperature moves upwards as atmospheric CO2 increases. That's just correlation. However, the greenhouse theory then provides a mechanism by which the CO2 traps increasing amounts of heat as it's concentration rises.
At that point we have a theory why increased CO2 should cause warming, we can measure that atmospheric CO2 is increasing, and we can measure that global average temperature is rising. You have to draw your own conclusions though.
The thing is I agree with you theoretically, but not in practice - on a project trying to get stuff done effectively, in minimal time, in code unlikely to be heavily re-used, a lot of the reasons don't apply. On Joel on Software, there's a good article about the kind of development you're doing, and he says a lot of his advice applies mainly to developers of boxed software.
In a similar vein, I'd say this advice only applies to the sort of one-off custom developments I'm usually working on. Code that's got a specific purpose, is unlikely to be reused with a different purpose, and relatively unlikely to be changed significantly.
For my uses, point 2 very rarely happens without me knowing it right from the start. That's just an argument to refactor the 2% of cases where it occurs. Point 3 is irrelevant since I'm writing multi-process, not multi-threaded apps - and I doubt that will change. 1 and 4 are theoretically true, but rarely seem to happen much. Generally, there just isn't any reason to update the variable in some random bit of code.
For example there is a global variable for the current logged in user for the process. In theory, any random bit of code could set the current user to something invalid. But why would anyone write that code?
I could make it not a global, and either write get and set functions for it or pass it around the stack as needed - but it would be extra work to guard against something that just never really happens in the real world.
But in an admission of guilt, I do have vim set up to map Ctrl-F to grep for the word under the cursor just in case:)
Thirdly, what is so wrong with global variables. I think a lot of it is dogma. A one line comment by the variable can say where it's used. I remember my coding style kind of changed overnight when I saw someone else's code which threw a lot of dogma out the window and was much easier to deal with as a result. The main ones were globals, breaks, continues and returns, and not using variables where it possibly should.
In theory it's hideous code littered with breaks, continues and returns, but somehow it's really readable to me:
for( each stock of product ) { if stock state is not stored continue
if stock is held continue
if stock already reserved continue
if stock in ideal location return stock// best we're going to do
// ok but not perfect - remember for later add stock to list }
For many years I would have said that was terrible. But after 7 years doing warehouse systems, I've seen different people writing this code in all sorts of ways and the supposedly horrible way is by far the best I've seen. But horses for courses. If you've taken a lock out at the top of the loop, you've got to drop the lock before returning etc, so then the single point of return rule does tend to simplify things for you.
Firstly, most of these functions are accessing the database and are fairly self contained. For instance, RecalcOrderQueue checks the orders and updates the priorities of the outstanding orders in the database. Then ReleaseOrders makes a sorted list of outstanding orders from the database, and releases them.
Secondly it's plain old C, which removes a lot of options for avoiding them - it's much more often the cleanest solution compared to OO languages, so there are quite a lot of them.
To guess at the GPs intention, he's giving a trivial but universally understandable example of self documenting code. In real code, the functions will generally be more complex than this. Here's some real code from the order manager of a warehouse, but to understand it as well compared to the simple distance example, you need to know what all the elements are e.g. AbandonVolumetrics probably doesn't sound like a great name!
At lower levels the code does look more like your example:/* remove this TM from the list - we've got to sort it again anyway */
TmList[ 0 ] = TmList[ TmListSize - 1 ];
TmListSize--;
I'm not going to write a nicely named function at that level because a one line comment is easier.
This isn't impossible except for the official SLA bit, it's kind of how it's done in my office, and I suspect many others. We've got a number of servers all built with standard off the shelf components from an internet parts shop that happens to also be locally based. We've got one spare server, and if anything other than hard discs fail, we just move the discs into the spare server and switch it straight back on. If the hard discs fail, someone switches on the appropriate services on the spare and sets it going (it's got every service configured up but switched off).
Not necessarily saying this is a perfect idea - we recently had a run of hardware failures, which to me suggests that while you can build a server for £200, you probably shouldn't. We're now I believe looking at better standard motherboards, and proper hard discs for all the servers. It will push up the costs to about £400 / server, excluding KVMs which were got in the computer room budget. And it's all run by one person (thankfully, not me!)
It's not really a lame duck government in comparison to the last republican government after the midterms. Most of the recent local elections have gone to the conservatives, but the vast majority of seats are still occupied by Labour - according to parliament.uk: Labour: 350 Conservative: 193 Liberal Democrat: 63 Total Seats: 646
The government still has a substantial absolute majority - enough to push through just about any laws they want as long as they can pressure their own MPs into voting along party lines.
Somehow the current government has tweaked the voting areas to give themselves an ever bigger advantage and not many people seem to have noticed or care - and they already had a substantial advantage in this regard before the changes.
At the 2005 general election, Labour won just 36% of the popular vote, which gave them 355 seats. Conservatives won 33% to get 198 seats. So a fairly close result gave Labour a massive parliamentary majority. By comparison in 1992, when the Conservatives last won a general election, they took 42% of the vote (much better than Labour in 2005) and won 336 seats (only just a majority and less than Labour gets from a 36% vote!). Labour's 34% gave them 271 seats (nearly 50% more for 1% of popular vote).
Factors like this mean the Conservatives aren't yet 100% sure they can win the next election, even though the popular vote looks certain.
I've recently started going to the gym on a regular basis, but didn't really expect to lose much weight from it at least in the short term. I've been 19 stones for quite a while and I've temporarily lost weight a few times before through dieting but I always seem to just return to the same weight. However I've got a set of body composition scales to monitor what's going on more than just plain weight. In the two months I've been going to the gym, my weight has dropped half a pound (i.e. none, since my water weight changes by that much if I have a cup of coffee), however I've lost 5 pounds of fat.
The main benefit I'm hoping with my weight is longer term, since muscle burns through calories faster. I can see from the calorie counters on the aerobic equipment at the gym, my morning workout will only get through about 400 calories, and it usually leaves me feeling hungry and so I probably eat that much extra food. But in the longer term I should be burning more calories just sitting around throughtout the day.
My bank does this and quite well also. Their email always asks me to visit their website, doesn't provide any information about why, and doesn't provide a link, and also doesn't contain the website address. It does contain a note saying the reasons why and reminds you not to follow links in emails etc.
Strangely, banks don't always treat letters with the same thought. I once received a letter from a bank I was setting up a savings account with, asking me to supply the account details of my current account, and post them off to an anonymous PO Box address. The letter was inkjet printed and the colour of the header was off compared to the other correspondance.
Naturally, I called up the bank, expecting them to confirm it was fraudulent. But actually it was a completely legitimate letter from the bank. It would have been sent from my local small branch where they might not have spare laser printers if the main one packed in. I gave them details over the phone since I still wasn't happy mailing account details to a PO Box, but I was still surprised that they appear to consider the post as 100% secure.
Well of course a lot of the stuff Joel promotes in his articles are about building a community and marketing - and generally, pointing out that good engineering isn't all that is required to make successful software. Although of course, good engineering is required for all the other stuff to work.
The thing I like about Joel is he just has a lot of opinions. His writing style isn't telling you what to do or think - it's just saying his own beliefs. A lot of stuff I agree with, a lot I think doesn't apply to my situation (custom software rather than boxed software).
I remember when I was first introduced to the Joel On Software blog, I wasn't really a fan - by chance the first few articles I read made me think he was rabidly anti-UNIX, and pro-Microsoft. But he isn't really - I think he believes Windows is just the better choice for his products, and I think he's right if he believes that. I've been reading it for a few years now and although its made me a bit sad that I don't get my own private office with a nice view where I work, there is a lot I have learned.
They were also the best ISP I ever used. Eventually I switched because I was paying £25/month for broadband, and other companies had taken prices down to £10 for the same speed. I never got the same level of service since, but then maybe you get what you pay for.
I'm now with Sky, since they offer £5/month broadband for TV subscribers and their customer service is acceptable. There is a usage cap, but it was 60GB/month last I checked, which is certainly more than I have ever needed. Also, having everything from one company has been pretty good for getting service, because you can leverage threats of cancelling the total package due to broadband problems (I think also Sky are a bit worried about the Freesat HD service).
I think in the UK someone has actually written that law. When you sell a house you have to provide a home information pack. I was astounded that the HIP inspector was making notes about the types of lightbulb installed, to calculate the house's energy efficiency ratings.
I asked about it since I thought bulbs are so easy to replace and might well be replaced by the time we actually moved house. The answer was it's part of the fittings and the bulbs are included in the sale (since the energy performance certificate is now a non-optional part of the sale). In theory you are now breaching the terms of the sale if you take the lightbulbs.
Despite this, when we moved in to our new house, we found the sellers had taken the lightbulbs and also a significant number of light fittings i.e. expensive decorative light fittings replaced with a standard ceiling rose. Thankfully the previous house had old wiring and bulbs kept blowing, so I'd got a decent stock of CFLs ready.
FWIW, my electricity company sent me some excellent Philips bulbs that immediately are at full brightness. The impressive bit was that even the fairly compact 11W bulbs switch straight on. I've generally not found problems with the big 20W bulbs, but smaller CFLs still sometimes suffer from a slow warm up time.
Also, if you're in the UK, the cheap B&Q value 4 pack of 20W bulbs go immediately to full brightness and, to me at least, look comparable with 100W incandescents. On the downside, one of my B&Q bulbs has blown - the only CFL I've lost since I started using them about 6 years ago.
If initial outlay isn't too much of an issue, consider Envirolight bulbs. I've tried various cheap LEDs (the type with a cluster of standard looking LED units) and been very unimpressed and returned them for refunds. These bulbs are over £10 each, but I'm very happy with the results. Until these Panasonic ones from the article, I've not seen any that look to have the same construction as these. It's a really smooth wall of light.
I've got these in my bathroom, and the photo isn't misleading - when switched on, the front of the bulb is a consistent wall of light. I don't much like the look of halogen reflector bulbs, the 6 would use 300W anyway, and I haven't seen GU10 CFLs that don't stick out from the standard size recess.
There's 6 to light the room (13.8W) and so given the total cost (£70 - about $100) I don't really see LEDs taking over from CFLs for mainstream usage until some further breakthrough on price is made. As the article points out, the power saving over incandescents is worthwhile, but unless you've got an incandescent hatred of CFLs, the power saving vs those doesn't make sense at this price.
Probably the direction evolution took on New Zealand wasn't best in the long run. Some of these birds were so vulnerable that a single cat wiped out an entire species:
It's not extreme - I'd have got an IBM T-221 (3840x2400) if I could find one to buy:)
It's a Dell 3007WFP-HC (reconditioned, which worried me initially, but it's got no dead pixels yet). I've considered getting a second, but it would probably have to go in front of the window and I've got a nice view:)
FWIW Windows 7 does have a few nice features in terms of window management. As you drag windows towards edges it guesses you want to dock them exactly to the edge. Also, if you resize the window top towards the display top, it guesses you're trying to maximise vertically.
Not sure what other stuff it might have in there, as I'm still on XP, but for me the maximise vertically feature would be very useful.
My 2560x1600 display is big enough that I don't even run Eclipse maximised all that often. I'd guess I typically have it sized around 1600x1500 - maximised vertically, but not horizontally. That leaves aronud 1000 pixels at the side which is enough for either the Java API docs or system design docs to be on screen also. More often I'm still programming using plain old vim / gcc / gdb, and the code standards say keep lines to 80 characters wide. I can fit 3 80-char wide Putty sessions side by side and leave plenty of room for the design docs at the side of that.
At work I've got a 1920x1200 plus 1280x1024 display, and I do tend to use maximise a lot more on the 1280 screen.
I'm not sure an absolute figure for previous salary is that interesting, but I would think that salary progression would be quite an interesting data point. I've worked at the same place for 7 years now, and since it's very project-based, I've not exactly had any official promotions. My job title is still Software Engineer, same as ever. But I'm now paid over 3x what I was before, and that is probably something I would want to use in an interview far more than the actual figure that I'm currently paid.
When I buy a proper paper like the Telegraph, not much of the money is going to reporters. A telegraph subscription currently costs £5.90 a week - including the Sunday paper with it's masses of sections and magazines. Out of that, they've got to print copies every day of the week, and deliver them to my house 7 days a week. By the time you take out the cost of paper, ink, upkeep of the presses and delivery costs, there isn't exactly a lot left to support an army of journalists.
The journalism is ad-supported, I'm only paying the cost to get the physical media to my door. With the internet, that cost is zero.
Disclaimer: neither me nor the company I work for are developing little $20,000 widgets in Javascript!
For smallish systems, I often find that fewer lines of code translates well to increased readability and maintainability.
While I agree that software engineers are not often writing quick one-off hacks, sometimes they are and Java isn't the best language.
My work mainly involves writing custom software to contract, not producing boxed software. I suspect many developers are doing this, or in-house development rather than working on boxed products.
I'm certainly not advocating that you should use Javascript if you're trying to write boxed software that will (hopefully) be sold to millions of people. But if you're trying to profitably knock out a little widget that someone's willing to pay $20,000 for it isn't automatically a bad choice.
Yeah I couldn't remember the name, 8 years now since I learnt functional programming stuff. My uni course was 99% Java, and I realised during that one course just how many features were lacking - until then I hadn't really appreciated how much could be gained from learning multiple languages.
The problem as I see it with Java is that it really isn't easy to hack something together quickly. It forces you to do everything properly. I'm sure as overall project size goes up, so do the problems caused by little hacks. I've no doubt Java is a good language for a big application project, or a platform.
Now I've seen problems using C with all kinds of horrible hacks to get stuff done quickly. But from a commercial point of view, I'm not sure if the effort spent on the occasional problems outweighs the effort saved by the quick hacks on projects the size that I'm working on (upto a few man-years of effort on a system).
The horrid problems with Javascript tend to be getting browser stuff working on Firefox and IE etc. at the same time. It looks like a neat solution to quick little programs that just aren't big enough to warrant a heavy architecture.
A lot of the comments are pointing out the problems in Javascript, and ignoring the problems in the big heavyweight languages like Java and C#.
It's not really in praise of Javascript, but a very good read is Joel's article 'Can Your Programming Language Do This?' It accurately points out a number of ways in which Java development very quickly takes up a lot of lines of code compared to more lightweight approaches. I personally prefer the light weight approach for many applications.
http://www.joelonsoftware.com/items/2006/08/01.html
For a while in the UK, the government has been spending billions of pounds on NHS IT systems. There is enormous potential to improve the situation, but so far it just hasn't been used. The prime example is electronic medical notes as mentioned in the article.
Currently, I live and work 22 miles apart. I'm only allowed to use the doctor near my home, even though they are only open during working hours. The reason for this is my medical notes - f I need an emergency home visit (I never have) they will need my medical notes. Therefore it's essential my doctor is the one near my home. The government has spent millions on electronic systems for keeping these medical notes electronically, instead of paper based. Yet they somehow can't share the notes between two surgeries. If they could, it would vastly improve patient care. I could have a half hour trip to the doctor for my asthma checkup, instead of needing half a day off work. And if I ever visited hospital they would be able to see all notes taken about me by my GP. Although in my case there's nothing really to know.
In terms of saving money, I actually agree with the current intended usage. Computers currently will only be able to save money on administration type work. I don't think they will be able to significantly help doctors save money on direct patient care. That task is too difficult for computers right now, which is why we pay doctors a lot of money to do the job. I suppose it depends on where you draw the line between admin / patient care. What would scheduling operations, along with marshalling the resources of operating rooms, and correctly trained doctors and nurses fall under? I'd call that admin and say that it's the sort of thing a computer could probably do better than a person.
Surely you should at least read the linked article? It explains 1998 had the strongest El Nino of the century, making it an unusally warm year. Looking at the average trend line shows the warming clearly has not stopped.
Looking at any individual data point will not give you much information, because global temperature is affected by more factors than just atmospheric carbon dioxide. On average, global temperature moves upwards as atmospheric CO2 increases. That's just correlation. However, the greenhouse theory then provides a mechanism by which the CO2 traps increasing amounts of heat as it's concentration rises.
At that point we have a theory why increased CO2 should cause warming, we can measure that atmospheric CO2 is increasing, and we can measure that global average temperature is rising. You have to draw your own conclusions though.
The thing is I agree with you theoretically, but not in practice - on a project trying to get stuff done effectively, in minimal time, in code unlikely to be heavily re-used, a lot of the reasons don't apply. On Joel on Software, there's a good article about the kind of development you're doing, and he says a lot of his advice applies mainly to developers of boxed software.
In a similar vein, I'd say this advice only applies to the sort of one-off custom developments I'm usually working on. Code that's got a specific purpose, is unlikely to be reused with a different purpose, and relatively unlikely to be changed significantly.
For my uses, point 2 very rarely happens without me knowing it right from the start. That's just an argument to refactor the 2% of cases where it occurs. Point 3 is irrelevant since I'm writing multi-process, not multi-threaded apps - and I doubt that will change. 1 and 4 are theoretically true, but rarely seem to happen much. Generally, there just isn't any reason to update the variable in some random bit of code.
For example there is a global variable for the current logged in user for the process. In theory, any random bit of code could set the current user to something invalid. But why would anyone write that code?
I could make it not a global, and either write get and set functions for it or pass it around the stack as needed - but it would be extra work to guard against something that just never really happens in the real world.
But in an admission of guilt, I do have vim set up to map Ctrl-F to grep for the word under the cursor just in case :)
Thirdly, what is so wrong with global variables. I think a lot of it is dogma. A one line comment by the variable can say where it's used. I remember my coding style kind of changed overnight when I saw someone else's code which threw a lot of dogma out the window and was much easier to deal with as a result. The main ones were globals, breaks, continues and returns, and not using variables where it possibly should.
// best we're going to do
// ok but not perfect - remember for later
In theory it's hideous code littered with breaks, continues and returns, but somehow it's really readable to me:
for( each stock of product )
{
if stock state is not stored
continue
if stock is held
continue
if stock already reserved
continue
if stock in ideal location
return stock
add stock to list
}
For many years I would have said that was terrible. But after 7 years doing warehouse systems, I've seen different people writing this code in all sorts of ways and the supposedly horrible way is by far the best I've seen. But horses for courses. If you've taken a lock out at the top of the loop, you've got to drop the lock before returning etc, so then the single point of return rule does tend to simplify things for you.
I knew that would come up!
Firstly, most of these functions are accessing the database and are fairly self contained. For instance, RecalcOrderQueue checks the orders and updates the priorities of the outstanding orders in the database. Then ReleaseOrders makes a sorted list of outstanding orders from the database, and releases them.
Secondly it's plain old C, which removes a lot of options for avoiding them - it's much more often the cleanest solution compared to OO languages, so there are quite a lot of them.
To guess at the GPs intention, he's giving a trivial but universally understandable example of self documenting code. In real code, the functions will generally be more complex than this. Here's some real code from the order manager of a warehouse, but to understand it as well compared to the simple distance example, you need to know what all the elements are e.g. AbandonVolumetrics probably doesn't sound like a great name!
AssignDUsToChutes();
BalanceSorterLoad();
RecalcOrderQueue();
ReleaseOrders();
FinishDUs();
AbandonUnpickables();
AbandonVolumetrics();
At lower levels the code does look more like your example: /* remove this TM from the list - we've got to sort it again anyway */
TmList[ 0 ] = TmList[ TmListSize - 1 ];
TmListSize--;
I'm not going to write a nicely named function at that level because a one line comment is easier.
This isn't impossible except for the official SLA bit, it's kind of how it's done in my office, and I suspect many others. We've got a number of servers all built with standard off the shelf components from an internet parts shop that happens to also be locally based. We've got one spare server, and if anything other than hard discs fail, we just move the discs into the spare server and switch it straight back on. If the hard discs fail, someone switches on the appropriate services on the spare and sets it going (it's got every service configured up but switched off).
Not necessarily saying this is a perfect idea - we recently had a run of hardware failures, which to me suggests that while you can build a server for £200, you probably shouldn't. We're now I believe looking at better standard motherboards, and proper hard discs for all the servers. It will push up the costs to about £400 / server, excluding KVMs which were got in the computer room budget. And it's all run by one person (thankfully, not me!)
It's not really a lame duck government in comparison to the last republican government after the midterms. Most of the recent local elections have gone to the conservatives, but the vast majority of seats are still occupied by Labour - according to parliament.uk:
Labour: 350
Conservative: 193
Liberal Democrat: 63
Total Seats: 646
The government still has a substantial absolute majority - enough to push through just about any laws they want as long as they can pressure their own MPs into voting along party lines.
Somehow the current government has tweaked the voting areas to give themselves an ever bigger advantage and not many people seem to have noticed or care - and they already had a substantial advantage in this regard before the changes.
At the 2005 general election, Labour won just 36% of the popular vote, which gave them 355 seats. Conservatives won 33% to get 198 seats. So a fairly close result gave Labour a massive parliamentary majority. By comparison in 1992, when the Conservatives last won a general election, they took 42% of the vote (much better than Labour in 2005) and won 336 seats (only just a majority and less than Labour gets from a 36% vote!). Labour's 34% gave them 271 seats (nearly 50% more for 1% of popular vote).
Factors like this mean the Conservatives aren't yet 100% sure they can win the next election, even though the popular vote looks certain.
I've recently started going to the gym on a regular basis, but didn't really expect to lose much weight from it at least in the short term. I've been 19 stones for quite a while and I've temporarily lost weight a few times before through dieting but I always seem to just return to the same weight. However I've got a set of body composition scales to monitor what's going on more than just plain weight. In the two months I've been going to the gym, my weight has dropped half a pound (i.e. none, since my water weight changes by that much if I have a cup of coffee), however I've lost 5 pounds of fat.
The main benefit I'm hoping with my weight is longer term, since muscle burns through calories faster. I can see from the calorie counters on the aerobic equipment at the gym, my morning workout will only get through about 400 calories, and it usually leaves me feeling hungry and so I probably eat that much extra food. But in the longer term I should be burning more calories just sitting around throughtout the day.
My bank does this and quite well also. Their email always asks me to visit their website, doesn't provide any information about why, and doesn't provide a link, and also doesn't contain the website address. It does contain a note saying the reasons why and reminds you not to follow links in emails etc.
Strangely, banks don't always treat letters with the same thought. I once received a letter from a bank I was setting up a savings account with, asking me to supply the account details of my current account, and post them off to an anonymous PO Box address. The letter was inkjet printed and the colour of the header was off compared to the other correspondance.
Naturally, I called up the bank, expecting them to confirm it was fraudulent. But actually it was a completely legitimate letter from the bank. It would have been sent from my local small branch where they might not have spare laser printers if the main one packed in. I gave them details over the phone since I still wasn't happy mailing account details to a PO Box, but I was still surprised that they appear to consider the post as 100% secure.
Well of course a lot of the stuff Joel promotes in his articles are about building a community and marketing - and generally, pointing out that good engineering isn't all that is required to make successful software. Although of course, good engineering is required for all the other stuff to work.
The thing I like about Joel is he just has a lot of opinions. His writing style isn't telling you what to do or think - it's just saying his own beliefs. A lot of stuff I agree with, a lot I think doesn't apply to my situation (custom software rather than boxed software).
I remember when I was first introduced to the Joel On Software blog, I wasn't really a fan - by chance the first few articles I read made me think he was rabidly anti-UNIX, and pro-Microsoft. But he isn't really - I think he believes Windows is just the better choice for his products, and I think he's right if he believes that. I've been reading it for a few years now and although its made me a bit sad that I don't get my own private office with a nice view where I work, there is a lot I have learned.
They were also the best ISP I ever used. Eventually I switched because I was paying £25/month for broadband, and other companies had taken prices down to £10 for the same speed. I never got the same level of service since, but then maybe you get what you pay for.
I'm now with Sky, since they offer £5/month broadband for TV subscribers and their customer service is acceptable. There is a usage cap, but it was 60GB/month last I checked, which is certainly more than I have ever needed. Also, having everything from one company has been pretty good for getting service, because you can leverage threats of cancelling the total package due to broadband problems (I think also Sky are a bit worried about the Freesat HD service).
I think in the UK someone has actually written that law. When you sell a house you have to provide a home information pack. I was astounded that the HIP inspector was making notes about the types of lightbulb installed, to calculate the house's energy efficiency ratings.
I asked about it since I thought bulbs are so easy to replace and might well be replaced by the time we actually moved house. The answer was it's part of the fittings and the bulbs are included in the sale (since the energy performance certificate is now a non-optional part of the sale). In theory you are now breaching the terms of the sale if you take the lightbulbs.
Despite this, when we moved in to our new house, we found the sellers had taken the lightbulbs and also a significant number of light fittings i.e. expensive decorative light fittings replaced with a standard ceiling rose. Thankfully the previous house had old wiring and bulbs kept blowing, so I'd got a decent stock of CFLs ready.
FWIW, my electricity company sent me some excellent Philips bulbs that immediately are at full brightness. The impressive bit was that even the fairly compact 11W bulbs switch straight on. I've generally not found problems with the big 20W bulbs, but smaller CFLs still sometimes suffer from a slow warm up time.
Also, if you're in the UK, the cheap B&Q value 4 pack of 20W bulbs go immediately to full brightness and, to me at least, look comparable with 100W incandescents. On the downside, one of my B&Q bulbs has blown - the only CFL I've lost since I started using them about 6 years ago.
If initial outlay isn't too much of an issue, consider Envirolight bulbs. I've tried various cheap LEDs (the type with a cluster of standard looking LED units) and been very unimpressed and returned them for refunds. These bulbs are over £10 each, but I'm very happy with the results. Until these Panasonic ones from the article, I've not seen any that look to have the same construction as these. It's a really smooth wall of light.
http://www.ledteck.co.uk/led1.php
You must not have seen this one :)
http://www.ledteck.co.uk/led1.php
I've got these in my bathroom, and the photo isn't misleading - when switched on, the front of the bulb is a consistent wall of light. I don't much like the look of halogen reflector bulbs, the 6 would use 300W anyway, and I haven't seen GU10 CFLs that don't stick out from the standard size recess.
There's 6 to light the room (13.8W) and so given the total cost (£70 - about $100) I don't really see LEDs taking over from CFLs for mainstream usage until some further breakthrough on price is made. As the article points out, the power saving over incandescents is worthwhile, but unless you've got an incandescent hatred of CFLs, the power saving vs those doesn't make sense at this price.
Probably the direction evolution took on New Zealand wasn't best in the long run. Some of these birds were so vulnerable that a single cat wiped out an entire species:
http://en.wikipedia.org/wiki/Stephens_Island_Wren
It's not extreme - I'd have got an IBM T-221 (3840x2400) if I could find one to buy :)
It's a Dell 3007WFP-HC (reconditioned, which worried me initially, but it's got no dead pixels yet). I've considered getting a second, but it would probably have to go in front of the window and I've got a nice view :)
FWIW Windows 7 does have a few nice features in terms of window management. As you drag windows towards edges it guesses you want to dock them exactly to the edge. Also, if you resize the window top towards the display top, it guesses you're trying to maximise vertically.
Not sure what other stuff it might have in there, as I'm still on XP, but for me the maximise vertically feature would be very useful.
My 2560x1600 display is big enough that I don't even run Eclipse maximised all that often. I'd guess I typically have it sized around 1600x1500 - maximised vertically, but not horizontally. That leaves aronud 1000 pixels at the side which is enough for either the Java API docs or system design docs to be on screen also. More often I'm still programming using plain old vim / gcc / gdb, and the code standards say keep lines to 80 characters wide. I can fit 3 80-char wide Putty sessions side by side and leave plenty of room for the design docs at the side of that.
At work I've got a 1920x1200 plus 1280x1024 display, and I do tend to use maximise a lot more on the 1280 screen.
I'm not sure an absolute figure for previous salary is that interesting, but I would think that salary progression would be quite an interesting data point. I've worked at the same place for 7 years now, and since it's very project-based, I've not exactly had any official promotions. My job title is still Software Engineer, same as ever. But I'm now paid over 3x what I was before, and that is probably something I would want to use in an interview far more than the actual figure that I'm currently paid.
When I buy a proper paper like the Telegraph, not much of the money is going to reporters. A telegraph subscription currently costs £5.90 a week - including the Sunday paper with it's masses of sections and magazines. Out of that, they've got to print copies every day of the week, and deliver them to my house 7 days a week. By the time you take out the cost of paper, ink, upkeep of the presses and delivery costs, there isn't exactly a lot left to support an army of journalists.
The journalism is ad-supported, I'm only paying the cost to get the physical media to my door. With the internet, that cost is zero.