Yeah, but then you'd have to use one of those excuses that people use when they go to the hospital with things in their butt ("I fell on it", "my friends played a prank on me", etc) - and no one ever buys those excuses.:)
Doh. But isn't it at least *mildly* interesting that a brick's terminal velocity is just about the same 130 MPH? Something needs to make me feel better about completely missing the point (and spending the time doing the math).:)
The coefficient of drag would be 2.1, according to this calculator site (which, incidentally, gives a nonsensical result of 3mph - which is why I did the math myself below)
The density of air at 35 celsius is 1.146 kg/m^3(ref), and 95 F seems pretty optimistic for the salt flats this time of year.
So, Let's do the math with Google so I don't have to convert units, using the formula here. Since Google complains about square roots with more than a number inside, we'll find the answer in mph^2 first, then take the square root of that. Here's the first calculation, which gives 15 932.3342 mph^2. Take the square root, and you get 126.2 mph. So, you're not going to do better with a common red brick. Maybe something with a smoother surface, higher density, or a smaller surface area would be better...:)
I bought a HP laptop on Amazon for under $400 a few months back (the prices have gone up since then, but there are newer models which cost less - Amazon's price actually beat HP's employee discount at the time). I installed 64-bit Ubuntu (9.10/Karmic), and everything worked out of the box. Including the webcam and sleep/suspend.
I don't know why people expect Linux to support every piece of junk ever made, past or future. But in my experience, it supports more than windows. Try to install Windows 7 on my old AMD 5x86-based system. It still runs current Linux distros...
Actually, now that I think about it, our workstations don't get to do recursive requests at all. Mail goes through our internal mail server, and web/ftp goes through the proxy - which does DNS lookups for the clients. They don't need to do anything else with the Internet, and therefore don't need external DNS...
Outgoing DNS traffic from servers other than the DNS servers is dropped. There's 0 reason to allow internal workstations to query arbitrary DNS servers.:)
Re:One person's myth is another person's fact.
on
Myths About Code Comments
·
· Score: 3, Insightful
To demonstrate why other people might be able to solve a problem you've been stumped by, lets look at the "mv | cat | grep" you provided.:)
First, that doesn't check the return value of the mv, so if the mv fails, you'll just clobber the original file. And, piping mv is just dirty. The Borne shells provide && for that:
mv && cat | grep
So, we have a check that the mv worked before clobbering the original now. This is a good start. But, that removes the original and recreates it - so you're probably mangling the permissions. If you do a cp, you have two gains - you preserve the original permissions of the file, and you guarantee that there will be enough space for the new file (since it'll be smaller or the same size without any comments). So, now we have
cp && cat | grep
Finally, the "cat | grep" construct bugs me. Grep takes filenames as arguments; it doesn't have to read stdin. So the cat and pipe is spawning a new process and setting up extra file descriptors which are superfluous. The performance difference is negligible on a one-liner, but if this same construct is used in a tight loop, it adds up. It's basically a bad habit. Just use grep.:) So, ultimately, we have an optimised version which is notably more robust and faster and less to type:
cp src src.orig && grep -v "^#" src.orig > src
But wait, there's more! If you're using bash or ksh93, you can use shell word expansion to reduce the chance of typos:
cp src{,.orig} && grep -v "^#" $_ > src
And then, say you're sick of all this junk and just want to do it with one command that's shell-independent. Well, lets use perl:
perl -i.orig -lne 'print unless/^#/' src
So anyway, don't assume that someone else can't solve a problem more elegantly than you.
I seem to have to appeal a health care claim roughly once a year, ignoring the claims which are not submitted with the "approved" coding. I have yet to have an appealed claim re-denied. Just a month or so ago, my doctor called up the insurance company to talk with a physician precisely because the phone droids aren't capable of making judgement calls (basically, the policy pays for a test if you pass out, but if you sense that you're going to pass out and take actions to prevent it, they don't pay for the test - which is a technicality as far as I'm concerned). It was a relatively painless process to appeal, and, as usual, worked out in my favor.
Insurance companies work like those mail-in rebate joints, looking for every possible typo in forms so they can reject things on technicalities. I know this as someone who has implemented and supported some of the claims processing software while working for a large insurance provider - the software's entire purpose in life was (is) to find errors in submission earlier in the process to reject the claims with minimal processing, thus saving the company a few bucks. It's technically better for the patient too, as they are notified of the errors sooner and can resubmit corrected paperwork more quickly.
As a Unix admin with a development background, I thank you for being competent. I'm technically a security admin (for a huge financial company), so I spend about half of my time arguing with people about how they could just tell me what they need to run as root and I could provide them a sudo rule set - which would reduce the passwords they have to remember *and* keep the environment more secure + auditable (which, due to various regulations like PCI, is more important to the business than cowtowing to lazy developers who don't know how to use the system they're developing).
But the main reason for responding: If you started the process, you can generally attach a debugger to it. The difficulty is in attaching to another user's process.:)
PS: I currently own a NeXT workstation. The pretty UI (and associated display postscript) only barely makes up for mixing the worst parts of BSD and SysV into that Devil's UNIX behind the scenes - I'd leave you alone with it too.;)
Luckily, competent developers use variables to store things like that, rather than hard-coding them everywhere. This includes the creations of shell aliases for things they just can't remember (yes, long crazy usernames can be included in your.ssh/config). I could work with those changes with almost 0 impact on my daily routine.
Awesome. The Illinois State Police's Sex Offender Registry is the *second* hit on the list (the first is "pornhub", which I assume is actually a porn site). The rest aren't porn sites (at least, not in the "creampie milf jailbait fisting" sense from comments earlier in the thread). And yes, I have safe search turned off - I'll censor my own web, thanks.
From my careful observation, everyone else on the road fall somewhere between "bafflingly stupid" and "asshole". This would seem to explain why such problems occur despite perfectly logical rules being in place.
Start [terminal of choice] on multi-X desktop system. Maximize (or, hopefully, enter "full screen mode" each one on a different screen. Ignore "this is evil" feeling, because window managers exist specifically to manage windows, which is what you want to do. Enjoy.
Have you ever wondered why the numbers in RAID levels are what they are? RAID-1 is level 1 because it's like the identity property; everything's the same (kinda like multiplying by 1). RAID-0 is level 0 because it is not redundant; ie, there's zero redundency (as in, multiplying by 0). It's an array of inexpensive disks, ure, but calling RAID-0 a RAID is a misnomer at best. RAID-0 was not in the original RAID paper, in fact.
No one talking about data protection uses RAID-0, and it's therefore irrelevant to the discussion.
Relevant to this discussion, though, are RAID2 and RAID6. RAID2 stripes at the bit level, and uses a hamming code for the parity, so it can actually correct errors down to a single bit automatically. RAID3, for what it's worth, is the same as RAID2 except that it works at the byte level. RAID6, basically since it adds a second pairity bit to RAID5, can also correct single bit-level errors automatically. Given that RAID2 and RAID3 generally require synchronized spindles and have crap performance, RAID6 is the only real current option...
Yeah - but that's the update service requesting a web page (which presumably had my approval at some point), just like any other update service does. It's not the same thing as me navigating to, say, Slashdot.org and Slashdot triggering a download that installs some other program without my approval.
I dunno - there's some disconnect here that one of us just isn't getting.:) I don't have either Google update service installed on either of my Windows machines, and the various Linux boxes don't use that junk, so I guess it doesn't matter...
That's what I suspected from the discussion. I looked briefly but couldn't find real confirmation one way or another on that - just people saying that's what it does and worrying (rightfully so if they're corect) about it.:)
None of those are in HTML format, but they're served via http from a web server - just like the Google updates. Also like the Google updates, the "update service" can be set to install updates found on those "web accessible pieces of data" (aka "web pages") with no user interaction.
Google updater installs either the "google pack" (which is not a web page) or just Google software (also, not a web page). It can be configured: http://www.google.com/support/pack/bin/answer.py?hl=en&answer=46708 and works pretty much the same way as synaptic, windows update service, adobe updater, java updater, symantec live update, etc etc etc.
They all work pretty much the same way. There's an initial setup - in which you chose what you want automatically installed - and then something that runs automatically thenceforth (is that a word?) and requests updates from a web site. If that site's hijacked, your DNS is comprmised, etc; there's varying levels of bad things which can happen.
Isn't that how MS wants you to configure windows update - so that a web page can trigger an update without your interaction? And isn't that an option in synaptic? And can't you turn the "silent updates" option off in all three of those situations? And aren't these rhetorical questions?
That extra semicolon between the "do" and "killall" (and lack of spaces between the test operator and condition - unless you have a binary named [$TRUE]) is a clever way to prevent X from starting as root, but it'd be easier to just not type startx at all. Putting syntax errors in the.xinitrc seems sketchy.
Yeah, but then you'd have to use one of those excuses that people use when they go to the hospital with things in their butt ("I fell on it", "my friends played a prank on me", etc) - and no one ever buys those excuses. :)
Minors don't generally go to jail, particularly for computer crimes. Aside from that, I'm on-board. :)
Doh. But isn't it at least *mildly* interesting that a brick's terminal velocity is just about the same 130 MPH? Something needs to make me feel better about completely missing the point (and spending the time doing the math). :)
What kind of brick?
So, Let's do the math with Google so I don't have to convert units, using the formula here. Since Google complains about square roots with more than a number inside, we'll find the answer in mph^2 first, then take the square root of that. Here's the first calculation, which gives 15 932.3342 mph^2. Take the square root, and you get 126.2 mph. So, you're not going to do better with a common red brick. Maybe something with a smoother surface, higher density, or a smaller surface area would be better... :)
I'll bet that's closer than you expected.. ;)
I bought a HP laptop on Amazon for under $400 a few months back (the prices have gone up since then, but there are newer models which cost less - Amazon's price actually beat HP's employee discount at the time). I installed 64-bit Ubuntu (9.10/Karmic), and everything worked out of the box. Including the webcam and sleep/suspend.
I don't know why people expect Linux to support every piece of junk ever made, past or future. But in my experience, it supports more than windows. Try to install Windows 7 on my old AMD 5x86-based system. It still runs current Linux distros...
Actually, now that I think about it, our workstations don't get to do recursive requests at all. Mail goes through our internal mail server, and web/ftp goes through the proxy - which does DNS lookups for the clients. They don't need to do anything else with the Internet, and therefore don't need external DNS...
I'd be suspicious about any clients requesting txt records. Workstations have no need for anything beyond a, ptr, and cname records. :)
Outgoing DNS traffic from servers other than the DNS servers is dropped. There's 0 reason to allow internal workstations to query arbitrary DNS servers. :)
isn't that why we like Unix? :)
To demonstrate why other people might be able to solve a problem you've been stumped by, lets look at the "mv | cat | grep" you provided. :)
First, that doesn't check the return value of the mv, so if the mv fails, you'll just clobber the original file. And, piping mv is just dirty. The Borne shells provide && for that:
mv && cat | grep
So, we have a check that the mv worked before clobbering the original now. This is a good start. But, that removes the original and recreates it - so you're probably mangling the permissions. If you do a cp, you have two gains - you preserve the original permissions of the file, and you guarantee that there will be enough space for the new file (since it'll be smaller or the same size without any comments). So, now we have
cp && cat | grep
Finally, the "cat | grep" construct bugs me. Grep takes filenames as arguments; it doesn't have to read stdin. So the cat and pipe is spawning a new process and setting up extra file descriptors which are superfluous. The performance difference is negligible on a one-liner, but if this same construct is used in a tight loop, it adds up. It's basically a bad habit. Just use grep. :) So, ultimately, we have an optimised version which is notably more robust and faster and less to type:
cp src src.orig && grep -v "^#" src.orig > src
But wait, there's more! If you're using bash or ksh93, you can use shell word expansion to reduce the chance of typos:
cp src{,.orig} && grep -v "^#" $_ > src
And then, say you're sick of all this junk and just want to do it with one command that's shell-independent. Well, lets use perl:
perl -i.orig -lne 'print unless /^#/' src
So anyway, don't assume that someone else can't solve a problem more elegantly than you.
And don't take this post too seriously. ;)
Telnet doesn't use ~/.ssh/config, either. :)
I seem to have to appeal a health care claim roughly once a year, ignoring the claims which are not submitted with the "approved" coding. I have yet to have an appealed claim re-denied. Just a month or so ago, my doctor called up the insurance company to talk with a physician precisely because the phone droids aren't capable of making judgement calls (basically, the policy pays for a test if you pass out, but if you sense that you're going to pass out and take actions to prevent it, they don't pay for the test - which is a technicality as far as I'm concerned). It was a relatively painless process to appeal, and, as usual, worked out in my favor.
Insurance companies work like those mail-in rebate joints, looking for every possible typo in forms so they can reject things on technicalities. I know this as someone who has implemented and supported some of the claims processing software while working for a large insurance provider - the software's entire purpose in life was (is) to find errors in submission earlier in the process to reject the claims with minimal processing, thus saving the company a few bucks. It's technically better for the patient too, as they are notified of the errors sooner and can resubmit corrected paperwork more quickly.
As a Unix admin with a development background, I thank you for being competent. I'm technically a security admin (for a huge financial company), so I spend about half of my time arguing with people about how they could just tell me what they need to run as root and I could provide them a sudo rule set - which would reduce the passwords they have to remember *and* keep the environment more secure + auditable (which, due to various regulations like PCI, is more important to the business than cowtowing to lazy developers who don't know how to use the system they're developing).
But the main reason for responding: If you started the process, you can generally attach a debugger to it. The difficulty is in attaching to another user's process. :)
PS: I currently own a NeXT workstation. The pretty UI (and associated display postscript) only barely makes up for mixing the worst parts of BSD and SysV into that Devil's UNIX behind the scenes - I'd leave you alone with it too. ;)
\hits snooze on the sarcasm meter
Luckily, competent developers use variables to store things like that, rather than hard-coding them everywhere. This includes the creations of shell aliases for things they just can't remember (yes, long crazy usernames can be included in your .ssh/config). I could work with those changes with almost 0 impact on my daily routine.
This just in - often it takes a short term loss to buy a long term gain. More at 11.
Awesome. The Illinois State Police's Sex Offender Registry is the *second* hit on the list (the first is "pornhub", which I assume is actually a porn site). The rest aren't porn sites (at least, not in the "creampie milf jailbait fisting" sense from comments earlier in the thread). And yes, I have safe search turned off - I'll censor my own web, thanks.
From my careful observation, everyone else on the road fall somewhere between "bafflingly stupid" and "asshole". This would seem to explain why such problems occur despite perfectly logical rules being in place.
Start [terminal of choice] on multi-X desktop system. Maximize (or, hopefully, enter "full screen mode" each one on a different screen. Ignore "this is evil" feeling, because window managers exist specifically to manage windows, which is what you want to do. Enjoy.
Have you ever wondered why the numbers in RAID levels are what they are? RAID-1 is level 1 because it's like the identity property; everything's the same (kinda like multiplying by 1). RAID-0 is level 0 because it is not redundant; ie, there's zero redundency (as in, multiplying by 0). It's an array of inexpensive disks, ure, but calling RAID-0 a RAID is a misnomer at best. RAID-0 was not in the original RAID paper, in fact.
No one talking about data protection uses RAID-0, and it's therefore irrelevant to the discussion.
Relevant to this discussion, though, are RAID2 and RAID6. RAID2 stripes at the bit level, and uses a hamming code for the parity, so it can actually correct errors down to a single bit automatically. RAID3, for what it's worth, is the same as RAID2 except that it works at the byte level. RAID6, basically since it adds a second pairity bit to RAID5, can also correct single bit-level errors automatically. Given that RAID2 and RAID3 generally require synchronized spindles and have crap performance, RAID6 is the only real current option...
Yeah - but that's the update service requesting a web page (which presumably had my approval at some point), just like any other update service does. It's not the same thing as me navigating to, say, Slashdot.org and Slashdot triggering a download that installs some other program without my approval.
I dunno - there's some disconnect here that one of us just isn't getting. :) I don't have either Google update service installed on either of my Windows machines, and the various Linux boxes don't use that junk, so I guess it doesn't matter...
That's what I suspected from the discussion. I looked briefly but couldn't find real confirmation one way or another on that - just people saying that's what it does and worrying (rightfully so if they're corect) about it. :)
The Windows Vista machine across the street requests this: http://www.update.microsoft.com/v9/windowsupdate/selfupdate/wuident.cab
And my Windows 7 workstation requests these:
http://download.windowsupdate.com/v9/windowsupdate/redir/muv4wuredir.cab
http://download.windowsupdate.com/v9/windowsupdate/a/selfupdate/WSUS3/x86/Other/wsus3setup.cab
Those are technically web pages, as is this one requested nightly by a bunch of Linux machines at my house:
http://us.archive.ubuntu.com/ubuntu/dists/karmic-updates/multiverse/source/Sources.bz2
None of those are in HTML format, but they're served via http from a web server - just like the Google updates. Also like the Google updates, the "update service" can be set to install updates found on those "web accessible pieces of data" (aka "web pages") with no user interaction.
Google updater installs either the "google pack" (which is not a web page) or just Google software (also, not a web page). It can be configured: http://www.google.com/support/pack/bin/answer.py?hl=en&answer=46708 and works pretty much the same way as synaptic, windows update service, adobe updater, java updater, symantec live update, etc etc etc.
They all work pretty much the same way. There's an initial setup - in which you chose what you want automatically installed - and then something that runs automatically thenceforth (is that a word?) and requests updates from a web site. If that site's hijacked, your DNS is comprmised, etc; there's varying levels of bad things which can happen.
Isn't that how MS wants you to configure windows update - so that a web page can trigger an update without your interaction? And isn't that an option in synaptic? And can't you turn the "silent updates" option off in all three of those situations? And aren't these rhetorical questions?
That extra semicolon between the "do" and "killall" (and lack of spaces between the test operator and condition - unless you have a binary named [$TRUE]) is a clever way to prevent X from starting as root, but it'd be easier to just not type startx at all. Putting syntax errors in the .xinitrc seems sketchy.
You're already modded up, so I'll just give you an "old here" smily face.