We don't have any particular problem with Creationists here in Australia (yet), but we do have the same failing of not teaching children about the scientific method as a part of their basic education.
I studied physics at university, and what shocked me was that in second year only a very few people could explain what science is when asked by the lecturer.
Even I didn't know! The meaning of the word was simply never explained to me.
And you wonder why the average person thinks science is guys in white labcoats torturing small fuzzy animals(*) -- that's what they get from Hollywood, and nobody else is there to give a more accurate definition.
* "There's more to science than just hurting small animals, but it's the part that's the most fun" - Scott Adams
Computers, for most of us, exist to accomplish other tasks. The users really don't care about the underlying architecture, or how comp sci awesome it might be, they just care about feature parity when big chunks are replaced.
Sadly, many developers never figure this part out.
The entire IPv6 standards group never figured this out.
It's buzzword compliant and has features than can only be expressed in scientific notation, but can you get to your favorite websites with it? No, you can't. You can send email with it? No, you can't.
People wonder why only internet engineers get excited about it.
The "poor utilization" in the article is a relative term. For most apps running under Windows, scalability to multiple CPUs is not hampered by the kernel. There have been improvements to I/O and networking on many-CPU servers, but it's just a fine tuning, not a massive leap forward.
But clearly I'm an idiot. I run Windows XP 64-bit on a quad-core CPU, and I really do get 4x the WinRar compression speed. I've timed it, because I use it to compress my backups, so it matters. It's 4x faster. Am I an idiot? Do I have difficulty telling time? You tell me.
Another issue is the core of the Novell-MS partnership: interoperability. AFAIK, that part is working well.
Not so much.
The last time I played with SLES/SLED was about a year ago, and interoperability was not hugely better than any other generic Linux. They just don't have the manpower now to rewrite core stuff themselves. They do have a nice distro with well chosen components, and a default desktop that is very "Windows-Like", which is nice. They even had the start-bar at the bottom!
However, in the environment where I worked, it all broke down in testing. For example, joining a domain was painful, broken, and flat out didn't work in my client's environment (multi-domain, multi-forest, with users and machines all over the place). It could talk to one domain, most of the time, until you removed a domain controller, which would break it.
A note to Linux devs working on Active Directory compatibility: When 'joining' an AD domain, a Linux desktop is allowed to ask exactly 3 questions:
- The name of the domain (either the 'short NT4 name' or 'long DNS name') - A user name to connect with - A password
Lets compare this to instructions I randomly found on Ubuntu's support site:
That's about 2 pages of config files! NO. Just NO. It's not even slightly correct. I have nothing against config files as such, but "hard coding" parameters that MUST be looked up dynamically is WRONG. You can't state "compatible with Active Directory" when it is clearly NOT COMPATIBLE.
What happens when the machine and the user are in different domains? What happens if domain controllers move? Why doesn't it automatically locate the nearest servers using Sites & Services?
Correct behavior isn't even one of those Microsoft secret proprietary things. The API for dynamically obtaining configuration data for a desktop's AD connection is well documented:
I agree, although I would go one step further and create a split-system. Not for the cooling, but for the PC.
I'd put all of the noisy components away from me, say in a cupboard (with an external-wall fan) or an adjacent room, then use long cables and USB hubs to connect the peripherals. Back in the analog component days (VGA and whatnot) this was difficult, but USB has a significant reach, and there's DVI amplifiers/repeaters now. I'd get a USB DVD drive and a monitor with an integrated memory card reader so I could load media, and that's all you really need. You don't need or want the rest in the same room!
That's a SPECIFIC application, which was not performance optimized, even by Microsoft's own admission.
The next version of that APPLICATION, released as part of.NET 4.0 has "10x" the performance. That SCREAMS unoptimized to me.
I've seen benchmarks of properly multi-threaded applications like video and image rendering software scale 1.9x or better on Windows.
Realistically, the NT kernel has something like a 1% overhead, if that, especially for CPUs other than the primary. User-mode applications can cheerfully use 100% of each core, the kernel will not get in the way, so why would you think scalability is anything less than 1.9x for the second core over the first one?!? Do you seriously think there's some task it's running on that core at 50% load ALL OF THE TIME? Or that it'll schedule 50% of the time and throw the rest away?
Even if you get into inefficient applications that do a lot of locks, message passing, and I/O, take a look at SQL Server scalability. My experience is that it only begins to lose steam at 16 cores or so, and that's probably an application issue as well.
There's people running Windows on 128 and even 256 CPU machines (google "HP Superdome").
My father asked me the same question once too.. why are PCs so slow and why is software so bloated?
I used a simple example of a text input field. You know, a text box, like the one you used to enter your Slashdot comment. Back in the 386 days, this was implemented using fixed point ASCII text, usually in text mode, and ran fast with a memory usage of a few kilobytes. These days, the total code & libraries required to implement a 'simple' text box might be over several dozen megabytes and would have taken many man-years of effort to develop. The code won't even LOAD on a 386 because it wouldn't fit into memory, let alone run at an acceptable pace.
But I hear you ask... why so complicated? It's just a text box! It doesn't need to do anything other than poll for keyboard input and display some characters.
Well... not quite. In a modern OS or application, even really trivial things like text input fields are fantastically complicated, and hence big and slow.
For example, a modern application would use a text box widget that can do most, or all, of the following:
- Undo and redo. - Cut & paste, with automatic conversion of multiple formats. - Mouse and keyboard based selection, highlighting, with automatic entire word selection. - Alternate keyboard input (such as multiple keystrokes for a single asian character). - Right-to-left and left-to-right text, including MIXING of the two, with proper handling of caret movement and selection highlights. - Scrolling, horizontally, vertically, or both. - text alignment, updated on the fly while typing - support for all 40,000+ characters in the unicode character set, including various automatic conversions, font substitutions, and related processing. The lookup tables for Unicode and a basic font is several megabytes by itself. - Combined characters. You know, like in tamil or arabic, where characters look different depending on adjacent characters or position in a word.
Newer controls ( as in WPF, for example ) can even do things like use your GPU to accelerate sub-pixel precision font rendering, kerning computations, and do full justification in real time as you type.
In the good old 386 days, almost none of that worked. You couldn't mix languages. You couldn't mix left-to-right and right-to-left. You couldn't use a mouse. You couldn't mix fonts on the screen, let alone within a control. Cut and paste was often unavailable, or limited in capability. Editing typographically complex languages was either impossible, or not WYSIWYG.
Examples like that abound. The inter-process memory protection that makes modern PCs relatively stable has a price. Virtual memory comes with its own overhead. Abstract driver models that let you "plug and play" aren't free either (remember IRQs? DIP switches?).
Get used to it, or go buy a 386 and try browsing the web with it.
Am I the only one who doesn't quite see how they intend to make this profitable?
I assume they're planning on geosynchronous orbit (the article mentions they are), since anything else will mean intermittent power and moving collectors. In that case, the typical launch cost is $20,000/kg, and the there are serious total weight restrictions per launch. Solar cells come in two varieties: Heavy and inefficient. Trucking and installation costs of solar cells here on Earth are what, $200/kg, if that?
The big advantage? Something like 3x the total incident power per unit area. Even if they somehow get more power (by utilizing UV light, for example, which the atmosphere mostly absorbs), you can't ignore transmissions losses, which are going to be nontrivial from geosynchronous orbit.
So let me get this straight... they're planning on spending about 100x the cost of a terrestrial system for 3x the power gain? Wow, what a business case! Let me sign right up, I want to buy their stock *NOW* before anyone else gets wind of this!
Even if we're incredibly generous and let them have a 10x reduction in launch costs (wishful thinking), then they're still off by a factor of 3x from matching, let alone beating, terrestrial solar power costs.
And no wait.. I forgot.. they still need a stupid huge ground station to collect the power! So, all that money they saved having to install ground based equipment? Still have to spend it! My back-of-the-envelope maths (probably wrong) is that if they use a 1 mm wavelength microwave beam, they're looking at a receiver over 1 km wide due to diffraction limits. Mmm... cheap.
The $1,000 cost saving on the license (or possibly less for an educational license) is absolutely NOT worth it. Don't drink the FOSS koolaid, MS Active Directory is stable and scales. I've seen 1 million account domains runs fine on a couple of pretty average boxes. Your tiny little education environment will work fine on anything. There are netbooks that could handle the load for a "large" school environment.
If you MUST have a single physical Linux server (why?), then just run up a MS Windows based AD controller in a virtual machine. Your problems are then solved, and you won't be chasing down bizarre compatibility issues at 7pm on a Friday because some MS patch or Samba patch didn't like each other.
Not to mention that with ANY domain technology, single servers are just insane. Patching single-server domains is a nightmare, while you can pretty much arbitrarily turn off AD domain controllers at any time if you have two set up correctly. If physical hardware is too expensive, again, virtual machines are your friend.
Also, as others have pointed out, multiple domains just cause a maintenance headache, and do not add significant security. The access control lists in AD are very fine grained, and allow total lockdown, down to the attribute/object level.
As a case in point, I've build ASP style AD/Exchange solutions where the client companies could see their own users, global address lists, etc... but weren't even aware of any other clients or users. This is well documented and supported. Lots of Exchange email hosting companies do this, or more paranoid organizations, such as education, where you don't want your students sending emails to staff mailing lists, or calling the hot female teacher's mobile phone at 3 am in the morning.
Well, I do know what goes into a game like Crysis, being a 3D game programmer and all. Those programmers were very, very good, believe me. Some of the stuff they pulled off is just amazing.
The reason Crysis is slow is because of the artistic direction. Outdoor environments full of plants and shadows with a huge viewing distance is very hard to implement in a 3D engine. I mean really fucking hard. Making a game like that playable at all is a tradeoff between two scraggly trees on a flat green carpet that pretends to be grass, OR an enormous amount of research into optimization techniques that are very hard and time consuming to implement. The Crysis engine is pretty much the state of the art in optimization. And these guys managed to squeeze in fantastic shader effects on top of that, depth of field, and even some basic radiosity shadowing for the characters!!! That's just insane.
Most reviewers and players with the right hardware thought the game looked amazing, way better than its peers at the time, or even now. I thought the effects (especially in the spaceship) looked better than most Sci-Fi movies, which is a stunning achievement for a 3D game running on a $500 video card. I upgraded my PC just to play the game, and I thought it was worth it. Lots of people did too:
I don't know where I read this, but I once heard an excellent explanation of why pomp and ceremony is important: It's important because our primitive mammal brains forget things. All sorts of ordinary, day to day things. We forget almost everything, really -- very little sticks. To make something stick in someone's mind as "this mattered", it has to be not-ordinary. Pomp and ceremony achieves this very effectively.
This is why many important transitions, events, and rewards in our life are often a ceremony. Think of marriage or graduation.
And hey, the method works! It even made Slashdot's readers notice. You noticed. And you might even remember that Terry Pratchett contributed to the world of literature, and it matters.
I learned Pascal and Assembler when I was 10. You'd be amazed at what kids can pick up.
However, if you want to give them something where they can get "something going quickly", I strongly recommend languages that have an "interactive" mode, because it lets them build on a simple foundation and receive immediate feedback.
My vote goes for Mathematica. It's a trivial language to start with: "5 + 5" is a program that outputs "10". The output is visually pretty, and it can draw pictures and graphs. However, it's not a toy language, it actually allows for incredibly complex programs in several different paradigms. The advantage it has over even simple languages like Java or BASIC is that it is more abstract, and hides several details that are very difficult to explain to a beginner programmer, no matter how smart. For example, calculating "42^42" works in Mathematica ("150130937545296572356771972164254457814047970568738777235893533016064"), but will produce either an error, or an invalid result in most languages that use 32-bit integers. Even with floating point maths, the result will merely be approximate, which is yet another complex discussion to have with a beginner. The educational licenses are not too bad, I think, but may be an issue with some schools.
As an added benefit, Wolfram has gone to enormous lengths to build a huge library or tiny educational snippets of Mathematica code, including lots of fun topics like fractals, image manipulation, the game-of-life, etc... For a teacher, this saves an enormous amount of time:
Alternatively, there are dozens of languages designed for education that have interactive interpreters. Haskell comes to mind, but it has a steep learning curve.
I have my entire server provisioning procedure in a single shell script. I run the installer, update everything, and then run my "magic" shell script. When it's done, the system is ready for action.
I think of the shell script as a TODO list, but it's bash that's doing the work instead of me.
I wouldn't have it any other way. Human memory is too fallible, and even written instructions are open to interpretation.
Yeah, of course, scripts are usually the best method. Computers don't make mistakes, people do.
Not always practical though, and trying to script everything is a nightmare, irrespective of platform. Even if you script or automate, a checklist is still vital, because there's more to it than just "run script". E.g.:
[ ] Redirect users to other cluster node [ ] Lock server [ ] Wait for server to clear [ ] Reboot and run F12 build script [ ] Check script log file and test server [ ] Add server to cluster [ ] Verify users are logging on with no errors [ ] Update server spreadsheet
So in the end, the checklist is MUCH shorter, but there still needs to be a checklist.
Checklists certainly aren't just for medicine, they work great in IT too. As a system integrator / contractor, I've found that lots of IT people have a somewhat.. haphazard approach to day-to-day tasks like building servers or provisioning users. This inevitably leads to mistakes and forgotten steps, which then results in angry users and system failures. Of course, the same IT people then apply the fix with the same lax methodology, and the result is yet another failure, and an even angrier user. I've seen this cycle repeat as often as 3 or 4 times, until managers get involved, and fingers are pointed. It's very unpleasant for everyone after that.
My method is trivially simple, and required nothing other than a text editor, even Notepad works fine, but a more robust editor is even better.
I call it: "Pete's Patented TODO List System". (Patent not pending).
Simply open a new file, and create a line for every single step of the task you're about to do, even if it's blindingly obvious. Prefix each step with a pair of square braces as a placeholder for a check box. E.g.:
=== BUILD SERVER === [o] Back up existing data from drives [.] Patch BIOS to latest version [ ] Reset BIOS settings to platform defaults [ ] Boot installer from \\foo\bar\... [ ] Configure drives
[ ] Clean existing RAID
[ ] Create mirror pair
[ ] Configure block size to 64KB...
Once you have the file, as you build the server, you tick steps off by filling in the checkboxes. E.g.:
[ ] Not done [.] Started / partially done [o] Done. [!] Issue / problem [?] May not need doing / optional / ask [-] Cancelled / no need.
So you ask.. why is "Pete's Patented TODO List System" so awesome? Because it works, it's free, and it's flexible. I found my error rate plummeted, and I could then email the list to someone else, and they could reproduce a successful procedure flawlessly by simply following the steps. There's actually a whole range of reasons why a text-based TODO list system is the best for IT:
- It can be cut & pasted back and forth between local and remote systems. - After a task is complete, you can email it to managers or coworkers as a "record of activity". - Others can read your list without requiring a client such as Microsoft Project. - Any idiot can use a text editor without special training. Quickly reorganising the structure and order of a complex multi-step task in dedicated Project management software takes effort, and may cumbersome. - It's easy to cut & paste parameters, values, scripts and command in and out of the TODO file. - You can reset a file to "blank" by doing this Regex search and replace: \[.\] => [ ] - Did I mention it's free? (I do accept PayPal donations, however)
In general, TODO lists rock, especially in environments where scripting everything is not practical. For example, if you build multiple servers in parallel, simply open two Notepad windows, and track the progress of each server. If you're interrupted by a phone call or a user, you WILL forget what exactly you have or haven't done, and that's when fuckups occur.
Not to mention that most IT people just don't do "all the steps", which is one of the main points in the article. For example, do you, or the people working with you, do ALL of the following when configuring a server:
- Wipe all of the existing configuration, including BIOS settings? - Run a memory check? - Set the date and time in the BIOS? - Patch up all components to the correct / latest levels, including obscure things like the network card firmware? - Install, configure, and TEST the antivirus, backup, and monitoring modules? Did you run a test backup AND a test restore? - Verify that every step worked?
If the answer is no to ANY of those, you or your people are fucking up on a regular basis, whether you know it or not. I've lost count of the number of times I've seen "enterprise clusters" where 2 of the 5 nodes have a different date & time. It's a trivial thing, yes, but MY GOD DOES IT BREAK THINGS if you forget.
I think you completely and totally misunderstood what Shadow Copy does.
It's not a mirroring technology, and it does not require application cooperation.
It is a backup/snapshot technology that has the capability to quiesce applications using a plugin framework built into the OS, so that backup vendors don't all have to reinvent the wheel for every application.
ISPs just have to start charging $a per month + $b per domestic_GB + $c per international_GB, and locality-aware BT clients will show up the next day.
They already do, here in Australia. The Internet is not confined to the United States. Over here, bandwidth is capped as low as 10 GB per month, but many ISPs ignore traffic to peers when counting bytes transferred.
However, BitTorrent is developed in the US, where there is no such price structure yet. Over here, P2P protocols are already starting to be severely throttled by ISPs because Australia has only a few undersea links to the outside world, but underutilized internal bandwidth.
Note also that downloading from your neighbor in most cases in North America will yield only a small upload speed as most residential lines have pitifully small caps on upload speeds. I highly doubt you will see 500Kbps from your neighbor unless hes paying for a t1 line, in which case location is irrelevant.
This is exactly the arrogant attidue I'm speaking of. To the BitTorrent user the source is irrelevant. To the ISP it is NOT irrelevant, and this what's angering them.
The greedy "it's faster for me, so I don't care about the impact to your business" attidue is why BitTorrent is going to be throttled into nonexistence, or declared illegal. Then it WILL matter to the BitTorrent users, but it'll be too late to go back and fix things.
It's time for the BitTorrent developers to grow up and cooperate.
The probablem with BitTorrent is not that it uses a large amount of bandwidth, but that it's using the wrong bandwidth. In every country other than the United States, international bandwidth is substantially more expensive than local bandwidth, and often in short supply. Local bandwidth is cheap, or even free. Even in the US, inter-ISP bandwidth has the same cost issues, but is plentiful.
What I've never understood is what's the excuse for not implementing a peer selection algorithm that prioritises nearby users. Even a naive algorithm is going to be vastly better than a purely random selecton. Simply selecting peers based on, say, the length of the common prefix of the IP address will often produce excellent results. Why in God's name should I transfer at 0.1 kbps from some guy in Peru, when a peer down the road could be uploading to me at 500 kbps?
The truth is that the BitTorrent folks are not playing ball with ISPs. In reality, I think most major ISP could care less about copyright violation, or excessive bandwidth - it makes people pay for more expensive monthly plans - but they DO care about international bandwidth costs.
If they just took 10 minutes to revamp the peer selection algorithm, they would reduce the impact in ISPs enormously, and then they woudldn't be villified and throttled.
It's easier to pretend that there are no ways whatsoever that anything can go wrong with your code because when you tested it it worked right.
Not if the QA guy is even halfway competent. I had a website tested recently by a pro, and the first thing he did was enter various horrible things into every textbox, including all of the fun variants of "DROP DATABASE". Then he started doing even worse things to the URL. If your web app can't stand up to things a human being can enter, don't expect to last long against the internet and script kiddies!
Except there's several ways of monitoring traffic even on switches.
You can spoof ARP packets and confuse the client, confuse the switch, or use any one of several DNS vulnerabilities. That's not even mentioning WiFi networks!
Except as the grandparent pointed out, you are now doing your own job, and your bosses' job too, and the best possible outcome is that you merely keep your old pay while working harder to hold on to it.
The worst outcome is that you're fired anyway, despite years of contribution to the operation of the business, because your boss is an idiot. Believe me, he'll keep his job. He'll even get a bonus for reducing IT costs.
When everything goes to shit a few months later, he'll hire contractors to do your job for 3x the cost.
Except both LINQ-to-SQL and LINQ-to-Entities are broken and incomplete.
Really basic things aren't supported, and probably won't be until the "2.0" versions (I imagine that'll be.NET 4.0).
I recently took some real-world practical databases, and tried to map them to LINQ using both LINQ-to-SQL and the Entity Models. Both failed miserably on all of the databases I tried.
As a random example: You can't have a many-to-mapping relationship between two entities (with a linking table) where all three tables have composite keys. In some of the databases I work with, that's an instant fail.
Not to mention that the GUI Entity designer in Visual Studio 2008 can't implement 50% of the features that DO work, and if you edit the XML mapping file by hand, then you'll never be able to open it again in the GUI. The whole point of these mappings is to improve programmer productivity! As soon as I have to get elbow-deep in XML, it's just not worth it any more. It's not like you can even gloss over the non-GUI editable parts, they're required for most real-world databases.
LINQ to me looks like a good theory that hasn't actually been tested sufficiently outside of Microsoft's stupid little sample Northwind databases, but was released as production-ready anyway. In the real world, where most programmers live, there are databases where every single table has a composite key. Are they all shit-out-of-luck? What about all of the other corner-case schemas that Microsoft just couldn't be bothered "supporting"? What happens if you spend months planning some huge LINQ-to-Entities based software development project and then it doesn't work? What do you do then?
As fun as cockatrices are, they're just too dangerous to leave in the game. I've been killed more than once by glove-wearing humanoid monsters like soldiers hitting me with cockatrice corpses. I've had a Nymph steal my gloves while I was wielding a cocktrice corpse!
I've only ascended twice, both times after only a very long game of grinding for genocide scrolls.
Dragons are fun individually, but there's dozens and dozens of them in the last level all in one big room, and no amount of armor seems to protect against that.
I tend to play a rather xenocidal game and wipe out most classes of dangerous monsters. Mindflayers and cockatrices are very nasty, so I wipe them out first, but I often leave dragons last because they drop good items, and tins of dragon meat are a great way of gaining intrinsic abilities.
Plus, dragons are nutritious. They taste like chicken!
It's just amazing how many strange combinations of items and effects have been thought of by the dev team.
My favorite Nethack moment ever was when I had used a blessed scroll of genocide to permanently wipe out all dragons from the game, but I was still wearing a suit of silver dragon scale mail I had acquired earlier. I stepped on a polymorph trap, and discovered a little known game mechanic that if you're wearing dragon armor while polymorphing uncontrollably, you turn into that kind of dragon. However, dragons were already wiped out, so I couldn't. The message the game gave me was:
Exactly!
We don't have any particular problem with Creationists here in Australia (yet), but we do have the same failing of not teaching children about the scientific method as a part of their basic education.
I studied physics at university, and what shocked me was that in second year only a very few people could explain what science is when asked by the lecturer.
Even I didn't know! The meaning of the word was simply never explained to me.
And you wonder why the average person thinks science is guys in white labcoats torturing small fuzzy animals(*) -- that's what they get from Hollywood, and nobody else is there to give a more accurate definition.
* "There's more to science than just hurting small animals, but it's the part that's the most fun" - Scott Adams
Computers, for most of us, exist to accomplish other tasks. The users really don't care about the underlying architecture, or how comp sci awesome it might be, they just care about feature parity when big chunks are replaced.
Sadly, many developers never figure this part out.
The entire IPv6 standards group never figured this out.
It's buzzword compliant and has features than can only be expressed in scientific notation, but can you get to your favorite websites with it? No, you can't. You can send email with it? No, you can't.
People wonder why only internet engineers get excited about it.
Try not to speak authoritatively about things you clearly know nothing about:
http://www.rungeek.com/blog/wp-content/uploads/2008/04/taskmanager2.jpg
And if you want detail:
http://technet.microsoft.com/en-us/library/cc768048.aspx
The "poor utilization" in the article is a relative term. For most apps running under Windows, scalability to multiple CPUs is not hampered by the kernel. There have been improvements to I/O and networking on many-CPU servers, but it's just a fine tuning, not a massive leap forward.
600% scalability on 8 CPUs - this is SQL 7 on NT4 mind you!
http://h18000.www1.hp.com/products/servers/technology/images/performancepreview-chart1.gif
Is that a nice linear scalability graph of a Windows application I see?
http://4.bp.blogspot.com/_oGCeAi-2i3Q/RuWC4LFEeQI/AAAAAAAAAD0/7B6g8tYUVac/s1600-h/BarcaWinrar.gif
But clearly I'm an idiot. I run Windows XP 64-bit on a quad-core CPU, and I really do get 4x the WinRar compression speed. I've timed it, because I use it to compress my backups, so it matters. It's 4x faster. Am I an idiot? Do I have difficulty telling time? You tell me.
Another issue is the core of the Novell-MS partnership: interoperability. AFAIK, that part is working well.
Not so much.
The last time I played with SLES/SLED was about a year ago, and interoperability was not hugely better than any other generic Linux. They just don't have the manpower now to rewrite core stuff themselves. They do have a nice distro with well chosen components, and a default desktop that is very "Windows-Like", which is nice. They even had the start-bar at the bottom!
However, in the environment where I worked, it all broke down in testing. For example, joining a domain was painful, broken, and flat out didn't work in my client's environment (multi-domain, multi-forest, with users and machines all over the place). It could talk to one domain, most of the time, until you removed a domain controller, which would break it.
A note to Linux devs working on Active Directory compatibility: When 'joining' an AD domain, a Linux desktop is allowed to ask exactly 3 questions:
- The name of the domain (either the 'short NT4 name' or 'long DNS name')
- A user name to connect with
- A password
Lets compare this to instructions I randomly found on Ubuntu's support site:
http://ubuntuforums.org/showthread.php?t=91510
That's about 2 pages of config files! NO. Just NO. It's not even slightly correct. I have nothing against config files as such, but "hard coding" parameters that MUST be looked up dynamically is WRONG. You can't state "compatible with Active Directory" when it is clearly NOT COMPATIBLE.
What happens when the machine and the user are in different domains? What happens if domain controllers move? Why doesn't it automatically locate the nearest servers using Sites & Services?
Correct behavior isn't even one of those Microsoft secret proprietary things. The API for dynamically obtaining configuration data for a desktop's AD connection is well documented:
http://msdn.microsoft.com/en-us/library/ms684291(VS.85).aspx
I agree, although I would go one step further and create a split-system. Not for the cooling, but for the PC.
I'd put all of the noisy components away from me, say in a cupboard (with an external-wall fan) or an adjacent room, then use long cables and USB hubs to connect the peripherals. Back in the analog component days (VGA and whatnot) this was difficult, but USB has a significant reach, and there's DVI amplifiers/repeaters now. I'd get a USB DVD drive and a monitor with an integrated memory card reader so I could load media, and that's all you really need. You don't need or want the rest in the same room!
That's a SPECIFIC application, which was not performance optimized, even by Microsoft's own admission.
The next version of that APPLICATION, released as part of .NET 4.0 has "10x" the performance. That SCREAMS unoptimized to me.
I've seen benchmarks of properly multi-threaded applications like video and image rendering software scale 1.9x or better on Windows.
Realistically, the NT kernel has something like a 1% overhead, if that, especially for CPUs other than the primary. User-mode applications can cheerfully use 100% of each core, the kernel will not get in the way, so why would you think scalability is anything less than 1.9x for the second core over the first one?!? Do you seriously think there's some task it's running on that core at 50% load ALL OF THE TIME? Or that it'll schedule 50% of the time and throw the rest away?
Even if you get into inefficient applications that do a lot of locks, message passing, and I/O, take a look at SQL Server scalability. My experience is that it only begins to lose steam at 16 cores or so, and that's probably an application issue as well.
There's people running Windows on 128 and even 256 CPU machines (google "HP Superdome").
My father asked me the same question once too.. why are PCs so slow and why is software so bloated?
I used a simple example of a text input field. You know, a text box, like the one you used to enter your Slashdot comment. Back in the 386 days, this was implemented using fixed point ASCII text, usually in text mode, and ran fast with a memory usage of a few kilobytes. These days, the total code & libraries required to implement a 'simple' text box might be over several dozen megabytes and would have taken many man-years of effort to develop. The code won't even LOAD on a 386 because it wouldn't fit into memory, let alone run at an acceptable pace.
But I hear you ask... why so complicated? It's just a text box! It doesn't need to do anything other than poll for keyboard input and display some characters.
Well... not quite. In a modern OS or application, even really trivial things like text input fields are fantastically complicated, and hence big and slow.
For example, a modern application would use a text box widget that can do most, or all, of the following:
- Undo and redo.
- Cut & paste, with automatic conversion of multiple formats.
- Mouse and keyboard based selection, highlighting, with automatic entire word selection.
- Alternate keyboard input (such as multiple keystrokes for a single asian character).
- Right-to-left and left-to-right text, including MIXING of the two, with proper handling of caret movement and selection highlights.
- Scrolling, horizontally, vertically, or both.
- text alignment, updated on the fly while typing
- support for all 40,000+ characters in the unicode character set, including various automatic conversions, font substitutions, and related processing. The lookup tables for Unicode and a basic font is several megabytes by itself.
- Combined characters. You know, like in tamil or arabic, where characters look different depending on adjacent characters or position in a word.
Newer controls ( as in WPF, for example ) can even do things like use your GPU to accelerate sub-pixel precision font rendering, kerning computations, and do full justification in real time as you type.
Take a look at "Typography in WPF" for an idea: http://msdn.microsoft.com/en-us/library/ms742190.aspx
In the good old 386 days, almost none of that worked. You couldn't mix languages. You couldn't mix left-to-right and right-to-left. You couldn't use a mouse. You couldn't mix fonts on the screen, let alone within a control. Cut and paste was often unavailable, or limited in capability. Editing typographically complex languages was either impossible, or not WYSIWYG.
Examples like that abound. The inter-process memory protection that makes modern PCs relatively stable has a price. Virtual memory comes with its own overhead. Abstract driver models that let you "plug and play" aren't free either (remember IRQs? DIP switches?).
Get used to it, or go buy a 386 and try browsing the web with it.
Am I the only one who doesn't quite see how they intend to make this profitable?
I assume they're planning on geosynchronous orbit (the article mentions they are), since anything else will mean intermittent power and moving collectors. In that case, the typical launch cost is $20,000/kg, and the there are serious total weight restrictions per launch. Solar cells come in two varieties: Heavy and inefficient. Trucking and installation costs of solar cells here on Earth are what, $200/kg, if that?
The big advantage? Something like 3x the total incident power per unit area. Even if they somehow get more power (by utilizing UV light, for example, which the atmosphere mostly absorbs), you can't ignore transmissions losses, which are going to be nontrivial from geosynchronous orbit.
So let me get this straight... they're planning on spending about 100x the cost of a terrestrial system for 3x the power gain? Wow, what a business case! Let me sign right up, I want to buy their stock *NOW* before anyone else gets wind of this!
Even if we're incredibly generous and let them have a 10x reduction in launch costs (wishful thinking), then they're still off by a factor of 3x from matching, let alone beating, terrestrial solar power costs.
And no wait.. I forgot.. they still need a stupid huge ground station to collect the power! So, all that money they saved having to install ground based equipment? Still have to spend it! My back-of-the-envelope maths (probably wrong) is that if they use a 1 mm wavelength microwave beam, they're looking at a receiver over 1 km wide due to diffraction limits. Mmm... cheap.
I can second this.
The $1,000 cost saving on the license (or possibly less for an educational license) is absolutely NOT worth it. Don't drink the FOSS koolaid, MS Active Directory is stable and scales. I've seen 1 million account domains runs fine on a couple of pretty average boxes. Your tiny little education environment will work fine on anything. There are netbooks that could handle the load for a "large" school environment.
If you MUST have a single physical Linux server (why?), then just run up a MS Windows based AD controller in a virtual machine. Your problems are then solved, and you won't be chasing down bizarre compatibility issues at 7pm on a Friday because some MS patch or Samba patch didn't like each other.
Not to mention that with ANY domain technology, single servers are just insane. Patching single-server domains is a nightmare, while you can pretty much arbitrarily turn off AD domain controllers at any time if you have two set up correctly. If physical hardware is too expensive, again, virtual machines are your friend.
Also, as others have pointed out, multiple domains just cause a maintenance headache, and do not add significant security. The access control lists in AD are very fine grained, and allow total lockdown, down to the attribute/object level.
As a case in point, I've build ASP style AD/Exchange solutions where the client companies could see their own users, global address lists, etc... but weren't even aware of any other clients or users. This is well documented and supported. Lots of Exchange email hosting companies do this, or more paranoid organizations, such as education, where you don't want your students sending emails to staff mailing lists, or calling the hot female teacher's mobile phone at 3 am in the morning.
Well, I do know what goes into a game like Crysis, being a 3D game programmer and all. Those programmers were very, very good, believe me. Some of the stuff they pulled off is just amazing.
The reason Crysis is slow is because of the artistic direction. Outdoor environments full of plants and shadows with a huge viewing distance is very hard to implement in a 3D engine. I mean really fucking hard. Making a game like that playable at all is a tradeoff between two scraggly trees on a flat green carpet that pretends to be grass, OR an enormous amount of research into optimization techniques that are very hard and time consuming to implement. The Crysis engine is pretty much the state of the art in optimization. And these guys managed to squeeze in fantastic shader effects on top of that, depth of field, and even some basic radiosity shadowing for the characters!!! That's just insane.
Most reviewers and players with the right hardware thought the game looked amazing, way better than its peers at the time, or even now. I thought the effects (especially in the spaceship) looked better than most Sci-Fi movies, which is a stunning achievement for a 3D game running on a $500 video card. I upgraded my PC just to play the game, and I thought it was worth it. Lots of people did too:
http://www.penny-arcade.com/comic/2007/10/15/
Take your head out of your ass and stop belittling other people's achievements until you have some of your own to compare it to, OK?
I don't know where I read this, but I once heard an excellent explanation of why pomp and ceremony is important: It's important because our primitive mammal brains forget things. All sorts of ordinary, day to day things. We forget almost everything, really -- very little sticks. To make something stick in someone's mind as "this mattered", it has to be not-ordinary. Pomp and ceremony achieves this very effectively.
This is why many important transitions, events, and rewards in our life are often a ceremony. Think of marriage or graduation.
And hey, the method works! It even made Slashdot's readers notice. You noticed. And you might even remember that Terry Pratchett contributed to the world of literature, and it matters.
I learned Pascal and Assembler when I was 10. You'd be amazed at what kids can pick up.
However, if you want to give them something where they can get "something going quickly", I strongly recommend languages that have an "interactive" mode, because it lets them build on a simple foundation and receive immediate feedback.
My vote goes for Mathematica. It's a trivial language to start with: "5 + 5" is a program that outputs "10". The output is visually pretty, and it can draw pictures and graphs. However, it's not a toy language, it actually allows for incredibly complex programs in several different paradigms. The advantage it has over even simple languages like Java or BASIC is that it is more abstract, and hides several details that are very difficult to explain to a beginner programmer, no matter how smart. For example, calculating "42^42" works in Mathematica ("150130937545296572356771972164254457814047970568738777235893533016064"), but will produce either an error, or an invalid result in most languages that use 32-bit integers. Even with floating point maths, the result will merely be approximate, which is yet another complex discussion to have with a beginner. The educational licenses are not too bad, I think, but may be an issue with some schools.
As an added benefit, Wolfram has gone to enormous lengths to build a huge library or tiny educational snippets of Mathematica code, including lots of fun topics like fractals, image manipulation, the game-of-life, etc... For a teacher, this saves an enormous amount of time:
http://demonstrations.wolfram.com/
Alternatively, there are dozens of languages designed for education that have interactive interpreters. Haskell comes to mind, but it has a steep learning curve.
Awesome!!!
I have my entire server provisioning procedure in a single shell script. I run the installer, update everything, and then run my "magic" shell script. When it's done, the system is ready for action.
I think of the shell script as a TODO list, but it's bash that's doing the work instead of me.
I wouldn't have it any other way. Human memory is too fallible, and even written instructions are open to interpretation.
Yeah, of course, scripts are usually the best method. Computers don't make mistakes, people do.
Not always practical though, and trying to script everything is a nightmare, irrespective of platform. Even if you script or automate, a checklist is still vital, because there's more to it than just "run script". E.g.:
[ ] Redirect users to other cluster node
[ ] Lock server
[ ] Wait for server to clear
[ ] Reboot and run F12 build script
[ ] Check script log file and test server
[ ] Add server to cluster
[ ] Verify users are logging on with no errors
[ ] Update server spreadsheet
So in the end, the checklist is MUCH shorter, but there still needs to be a checklist.
Checklists certainly aren't just for medicine, they work great in IT too. As a system integrator / contractor, I've found that lots of IT people have a somewhat.. haphazard approach to day-to-day tasks like building servers or provisioning users. This inevitably leads to mistakes and forgotten steps, which then results in angry users and system failures. Of course, the same IT people then apply the fix with the same lax methodology, and the result is yet another failure, and an even angrier user. I've seen this cycle repeat as often as 3 or 4 times, until managers get involved, and fingers are pointed. It's very unpleasant for everyone after that.
My method is trivially simple, and required nothing other than a text editor, even Notepad works fine, but a more robust editor is even better.
I call it: "Pete's Patented TODO List System". (Patent not pending).
Simply open a new file, and create a line for every single step of the task you're about to do, even if it's blindingly obvious. Prefix each step with a pair of square braces as a placeholder for a check box. E.g.:
=== BUILD SERVER === ...
[o] Back up existing data from drives
[.] Patch BIOS to latest version
[ ] Reset BIOS settings to platform defaults
[ ] Boot installer from \\foo\bar\...
[ ] Configure drives
[ ] Clean existing RAID
[ ] Create mirror pair
[ ] Configure block size to 64KB
Once you have the file, as you build the server, you tick steps off by filling in the checkboxes. E.g.:
[ ] Not done
[.] Started / partially done
[o] Done.
[!] Issue / problem
[?] May not need doing / optional / ask
[-] Cancelled / no need.
So you ask.. why is "Pete's Patented TODO List System" so awesome? Because it works, it's free, and it's flexible. I found my error rate plummeted, and I could then email the list to someone else, and they could reproduce a successful procedure flawlessly by simply following the steps. There's actually a whole range of reasons why a text-based TODO list system is the best for IT:
- It can be cut & pasted back and forth between local and remote systems.
- After a task is complete, you can email it to managers or coworkers as a "record of activity".
- Others can read your list without requiring a client such as Microsoft Project.
- Any idiot can use a text editor without special training. Quickly reorganising the structure and order of a complex multi-step task in dedicated Project management software takes effort, and may cumbersome.
- It's easy to cut & paste parameters, values, scripts and command in and out of the TODO file.
- You can reset a file to "blank" by doing this Regex search and replace: \[.\] => [ ]
- Did I mention it's free? (I do accept PayPal donations, however)
In general, TODO lists rock, especially in environments where scripting everything is not practical. For example, if you build multiple servers in parallel, simply open two Notepad windows, and track the progress of each server. If you're interrupted by a phone call or a user, you WILL forget what exactly you have or haven't done, and that's when fuckups occur.
Not to mention that most IT people just don't do "all the steps", which is one of the main points in the article. For example, do you, or the people working with you, do ALL of the following when configuring a server:
- Wipe all of the existing configuration, including BIOS settings?
- Run a memory check?
- Set the date and time in the BIOS?
- Patch up all components to the correct / latest levels, including obscure things like the network card firmware?
- Install, configure, and TEST the antivirus, backup, and monitoring modules? Did you run a test backup AND a test restore?
- Verify that every step worked?
If the answer is no to ANY of those, you or your people are fucking up on a regular basis, whether you know it or not. I've lost count of the number of times I've seen "enterprise clusters" where 2 of the 5 nodes have a different date & time. It's a trivial thing, yes, but MY GOD DOES IT BREAK THINGS if you forget.
I think you completely and totally misunderstood what Shadow Copy does.
It's not a mirroring technology, and it does not require application cooperation.
It is a backup/snapshot technology that has the capability to quiesce applications using a plugin framework built into the OS, so that backup vendors don't all have to reinvent the wheel for every application.
ISPs just have to start charging $a per month + $b per domestic_GB + $c per international_GB, and locality-aware BT clients will show up the next day.
They already do, here in Australia. The Internet is not confined to the United States. Over here, bandwidth is capped as low as 10 GB per month, but many ISPs ignore traffic to peers when counting bytes transferred.
However, BitTorrent is developed in the US, where there is no such price structure yet. Over here, P2P protocols are already starting to be severely throttled by ISPs because Australia has only a few undersea links to the outside world, but underutilized internal bandwidth.
This is exactly the arrogant attidue I'm speaking of. To the BitTorrent user the source is irrelevant. To the ISP it is NOT irrelevant, and this what's angering them.
The greedy "it's faster for me, so I don't care about the impact to your business" attidue is why BitTorrent is going to be throttled into nonexistence, or declared illegal. Then it WILL matter to the BitTorrent users, but it'll be too late to go back and fix things.
It's time for the BitTorrent developers to grow up and cooperate.
The probablem with BitTorrent is not that it uses a large amount of bandwidth, but that it's using the wrong bandwidth. In every country other than the United States, international bandwidth is substantially more expensive than local bandwidth, and often in short supply. Local bandwidth is cheap, or even free. Even in the US, inter-ISP bandwidth has the same cost issues, but is plentiful.
What I've never understood is what's the excuse for not implementing a peer selection algorithm that prioritises nearby users. Even a naive algorithm is going to be vastly better than a purely random selecton. Simply selecting peers based on, say, the length of the common prefix of the IP address will often produce excellent results. Why in God's name should I transfer at 0.1 kbps from some guy in Peru, when a peer down the road could be uploading to me at 500 kbps?
The truth is that the BitTorrent folks are not playing ball with ISPs. In reality, I think most major ISP could care less about copyright violation, or excessive bandwidth - it makes people pay for more expensive monthly plans - but they DO care about international bandwidth costs.
If they just took 10 minutes to revamp the peer selection algorithm, they would reduce the impact in ISPs enormously, and then they woudldn't be villified and throttled.
It's easier to pretend that there are no ways whatsoever that anything can go wrong with your code because when you tested it it worked right.
Not if the QA guy is even halfway competent. I had a website tested recently by a pro, and the first thing he did was enter various horrible things into every textbox, including all of the fun variants of "DROP DATABASE". Then he started doing even worse things to the URL. If your web app can't stand up to things a human being can enter, don't expect to last long against the internet and script kiddies!
Except there's several ways of monitoring traffic even on switches.
You can spoof ARP packets and confuse the client, confuse the switch, or use any one of several DNS vulnerabilities. That's not even mentioning WiFi networks!
Sounds like typical Microsoft arrogance.
Except as the grandparent pointed out, you are now doing your own job, and your bosses' job too, and the best possible outcome is that you merely keep your old pay while working harder to hold on to it.
The worst outcome is that you're fired anyway, despite years of contribution to the operation of the business, because your boss is an idiot. Believe me, he'll keep his job. He'll even get a bonus for reducing IT costs.
When everything goes to shit a few months later, he'll hire contractors to do your job for 3x the cost.
I should know. I'm one of those contractors!
Except both LINQ-to-SQL and LINQ-to-Entities are broken and incomplete.
Really basic things aren't supported, and probably won't be until the "2.0" versions (I imagine that'll be .NET 4.0).
I recently took some real-world practical databases, and tried to map them to LINQ using both LINQ-to-SQL and the Entity Models. Both failed miserably on all of the databases I tried.
As a random example: You can't have a many-to-mapping relationship between two entities (with a linking table) where all three tables have composite keys. In some of the databases I work with, that's an instant fail.
Not to mention that the GUI Entity designer in Visual Studio 2008 can't implement 50% of the features that DO work, and if you edit the XML mapping file by hand, then you'll never be able to open it again in the GUI. The whole point of these mappings is to improve programmer productivity! As soon as I have to get elbow-deep in XML, it's just not worth it any more. It's not like you can even gloss over the non-GUI editable parts, they're required for most real-world databases.
LINQ to me looks like a good theory that hasn't actually been tested sufficiently outside of Microsoft's stupid little sample Northwind databases, but was released as production-ready anyway. In the real world, where most programmers live, there are databases where every single table has a composite key. Are they all shit-out-of-luck? What about all of the other corner-case schemas that Microsoft just couldn't be bothered "supporting"? What happens if you spend months planning some huge LINQ-to-Entities based software development project and then it doesn't work? What do you do then?
As fun as cockatrices are, they're just too dangerous to leave in the game. I've been killed more than once by glove-wearing humanoid monsters like soldiers hitting me with cockatrice corpses. I've had a Nymph steal my gloves while I was wielding a cocktrice corpse!
I've only ascended twice, both times after only a very long game of grinding for genocide scrolls.
Dragons are fun individually, but there's dozens and dozens of them in the last level all in one big room, and no amount of armor seems to protect against that.
I tend to play a rather xenocidal game and wipe out most classes of dangerous monsters. Mindflayers and cockatrices are very nasty, so I wipe them out first, but I often leave dragons last because they drop good items, and tins of dragon meat are a great way of gaining intrinsic abilities.
Plus, dragons are nutritious. They taste like chicken!
It's just amazing how many strange combinations of items and effects have been thought of by the dev team.
My favorite Nethack moment ever was when I had used a blessed scroll of genocide to permanently wipe out all dragons from the game, but I was still wearing a suit of silver dragon scale mail I had acquired earlier. I stepped on a polymorph trap, and discovered a little known game mechanic that if you're wearing dragon armor while polymorphing uncontrollably, you turn into that kind of dragon. However, dragons were already wiped out, so I couldn't. The message the game gave me was:
"You feel slightly silver dragon-ish."