I thought that the operating system doled out the memory... that's the reason that once Firefox uses 300 MB of memory, it will always use 300 (on windows, I haven't bother to check under any other OSes). So, even if the JVM deallocated the GC'ed memory, Windows will keep that chunk of memory earmarked in case the JVM asks for it again. All that being said, you are correct, everything is a time/space tradeoff and the logical choice is usually to trade off space for time.
Never heard that before, but it makes sense. What about dynamic libraries? If the program in virtual memory (on disk) uses a dynamic library, is the whole thing actually loaded, or just the functions that the one program needs?
I know we've spoke a few times on Java and you're fairly knowledgeable on quite a few aspects of it; what's your take on JavaFX? I looked at some of the code and it looked like refactored XML. While I both love and hate Java, I try to avoid 'enterprise' Java like the plague... it's becoming an ugly monster. The concepts are solid, but the implementation leaves you feeling like Sun is in dire straights for some guys with beards.
Care to go out on a limb about the future of JavaFX?
[...] Either way, I have zero faith in the UN being able to put together anything bigger or more complex than a boy scout weekend camping trip without massive corruption, waste and/or bad blood being created between member nations.
You, sir, are an optimist. I'd set the bar at a boy scout picnic, and would be pleasantly surprised if they managed to pull it off.
You make a good point, but the way I see it the authors were tasked with taking a very hard subject and making it bearable, if not enjoyable. I think they did reasonably well. That being said, the topic of AI is just like file systems; unless you're the (special) kind of person that finds it to be a sexy topic, there just isn't anything that's going to make a textbook on the subject anything more than bearable. It kind of comes with the territory, I guess.
FWIW, my current top 3 books are:
Code Complete
Mythical Man Month
Unix Haters Handbook
While not course text books, I think they should be recommended reading for software development/IT students.
In my AI class, last semester, we used Stuart Russell and Peter Norvig's Artificial Intelligence A Modern Approach, 2nd Ed.. It's fairly dry, but good for theory nonetheless. If you're a physics geek, it should be right up your alley; they approach everything from a mathematical angle and then have a bit of commentary on the theory, but never seem to get to the practical uses for the theory.
If you're in the US, send me an email and I'll send you my copy. They charge an arm and a leg for these books and then buy them back for 1/10 the price. I usually don't even bother selling them back.
[...]Every time I try to do something in C++ now, I feel like I'm spending more time on defining types than on solving the problem.
That's actually the point of OOP. You shouldn't be 'forcing' anything to happen the way you would with a functional language. The point of OOP (pure object oriented programming... we're talking ivory tower for the moment) is that you define your objects and then define how they should interact with each other and then put the 'glue' in to interface them to each other on events.
You pay more time up front to define the model and interactions for increased development speed as you move 'up' your interface stack. Done correctly, you should also have less edge cases and a more flexible framework because you've broken down your problem in to many, many smaller generic problems which have an encapsulated object that deals with them and other objects that can interface with first said object.
The vast majority of single use code/quick fixes don't really need to be programmed in an OO language; but it pays off exponentially once you start getting over a few thousand lines of code. Like everything else in software development, there is no silver bullet, every project is unique, there usually isn't a single correct way to do something, but if you find yourself trying to screw in a lightbulb with a hammer, you're doing it the wrong way. Use whatever works for you that doesn't leave you muttering "... there must be a better way to do this!"
I'd agree. I've found much less 'politicing' in the CS area than almost any other section. For the most part, if you see something that isn't cited, but more than obvious to anyone in the field, it doesn't get a "citation needed" by some anal editor. Furthermore, most of the articles have less of the drive-by insults/bickering that seems to be so common when companies or (somewhat) famous people are the subject. I guess that most of us geeks are more interested in commonly-known (no citation needed if the fact is generally accepted) knowledge than gossip. That, and I guess we all kind of know each other to some degree or another through slashdot, open source projects, blogs, etc. It would be somewhat silly to speak out of turn about someone you're going to run in to online within a month, anyways.
Funny, that. I'm working on a Java front end for a GPL'ed command line program. I haven't released it just yet, but I was going to use GPL v2... This whole episode is making me reconsider. I find me asking myself, "self, do I really want to be associated with the FSF at this point, and do I trust that Stallman hasn't jumped the shark with this move?"
While I appreciate what Stallman has done, I find the new Free Distro Guidelines to be, frankly, oppressive. At this point, I'm not sure if I even want to deal with the FSF and their nonsense.
I thought that was only true for 'higher' level partitioning (LVM, etc.). I partition using (c)fdisk mapping cylinder ranges to disk slices and then put the FS right on top of the partition. Do you mean that the hardware doesn't actually correspond cylinders to 'addresses' relative to other cylinder addresses (the 1024 BIOS cylinder limit non withstanding)? I assumed that this was the case from my understanding of the Linux I/O schedulers. This would surprise me, but probably mostly because I've never really considered it before.
Then again, I'm not sure that any mobo chipset/harddrive firmware that I've ever run was open source, so I probably couldn't verify that it's doing what I would assume it's doing.
FWIW, I think the FAA uses ADA for most (all? I'm too lazy to look it up, free mod points if anyone wants to link the wiki) of their systems. For me ADA-95 is a guilty pleasure language; it's really well thought out and it almost won't let you shoot yourself in the foot. I'd give it a thumbs up from the programming department.
The question is, what's the leading opinion from the network guys/gals? If I program a bulletproof solution, it doesn't mean a thing if the heavy metal goes down hard and isn't redundant. Anyone know anything about airport NOCs?
Try htop, on top of being even more impressive looking, it has real functionality; it's basically top with ncurses interface. It's the first package I put on every box I use.
Yeah... I was taking that for granted. I've got 4 500GB WD-AAKS', identically split to 9 partitions. The 'outside' (beginning of disk) two are RAID 10, the next two are RAID 1, and the remaining five are RAID 5. The very 'inside' (end of disk) is filled with dd'ed.img that I mount on a loopback to benefit from RAM page caching in the kernel. The raw images are great for virtualBox, since it's over iSCSI I can use the disks with a either Windows or Linux. The RAID 1's hold ISOs for distros, and the RAID 5's are general purpose. The iSCSI server itself is just a high end gaming board with 3 gigs of RAM and a bunch of NICs running BlueWhite64... it's somewhat hacked together, but it works (I'm a student so I had to eat a lot of off-brand Ramen to afford the rig).
At any rate, it can easily handle 5 or 6 VMs beating it down along with serving up regular files to my desktops. But I'm in the opposite side of the spectrum from you; I'm tuned for raw throughput and low IOPS... this setup would fall flat on its face with a database load. Tuning for throughput is much easier than tuning for IOPS. I'm sure you won't be missing spinning disks when you can delegate them to mass storage for backups and run on SSD at a 100th the latency.
I've found that for VMs it's best to short stroke the drive. Partition it so that your VMs are in the middle of the drive, all together, in a somewhat narrow section of the disk. That way, even while doing high IO/sec, you're at most half a disk seek from anything else on the disk. Also, always pre-allocate your VM disks; the performance difference is huge. If you're running a *nix distro, it pays to put your swap on one side of the VM partition and/var on the other, this way you shouldn't have to stray out of the center of the disk too much. The anticipatory IO scheduler in Linux helps a good deal here, you'll get much more throughput for a sub millisecond latency cost. With NCQ/NTQ, and only using 1/3 of the disk surface, you can feel the difference... especially as compared to a single partition that's running low on space and doing a full stroke to get from the VM to your OS.
Just to avoid confusion, we're using base 2 units, correct? Where a KB = 1024 bytes and a MB is 1024 KB, etc. At the PB level, the difference between a KB being 1000 bytes adds up.
FWIW, SUSE was originally in the Slackware family. That's why the 'big 3' are Red Hat, Debian and Slackware. SUSE jumped to the Red Hat family, but it still, IIRC, has BSD init instead of sysV. I always feel like SUSE is Slackware with 'official' (Slackware has it out of the box, too) RPM support and YaST. It doesn't feel like Red Hat, but it behaves like Red Hat. Gentoo is the cousin of Slackware with the BYOC (Bring Your Own Compiler) mindset.
The way I see things flushing out right now, the Red Hat family is considered enterprise, the Debian family is considered desktop, and the Slackware family is the 'roll your own' (notably with Slax based live cds) for any niche that Red Hat or Debian aren't a good fit.
I thought that the operating system doled out the memory... that's the reason that once Firefox uses 300 MB of memory, it will always use 300 (on windows, I haven't bother to check under any other OSes). So, even if the JVM deallocated the GC'ed memory, Windows will keep that chunk of memory earmarked in case the JVM asks for it again. All that being said, you are correct, everything is a time/space tradeoff and the logical choice is usually to trade off space for time.
Never heard that before, but it makes sense. What about dynamic libraries? If the program in virtual memory (on disk) uses a dynamic library, is the whole thing actually loaded, or just the functions that the one program needs?
I know we've spoke a few times on Java and you're fairly knowledgeable on quite a few aspects of it; what's your take on JavaFX? I looked at some of the code and it looked like refactored XML. While I both love and hate Java, I try to avoid 'enterprise' Java like the plague... it's becoming an ugly monster. The concepts are solid, but the implementation leaves you feeling like Sun is in dire straights for some guys with beards.
Care to go out on a limb about the future of JavaFX?
[...] Either way, I have zero faith in the UN being able to put together anything bigger or more complex than a boy scout weekend camping trip without massive corruption, waste and/or bad blood being created between member nations.
You, sir, are an optimist. I'd set the bar at a boy scout picnic, and would be pleasantly surprised if they managed to pull it off.
FWIW, my current top 3 books are:
While not course text books, I think they should be recommended reading for software development/IT students.
Oh... yeah, my email is moc.liamg@grebnevol.ttocs (reversed for spam protection).
In my AI class, last semester, we used Stuart Russell and Peter Norvig's Artificial Intelligence A Modern Approach, 2nd Ed.. It's fairly dry, but good for theory nonetheless. If you're a physics geek, it should be right up your alley; they approach everything from a mathematical angle and then have a bit of commentary on the theory, but never seem to get to the practical uses for the theory.
If you're in the US, send me an email and I'll send you my copy. They charge an arm and a leg for these books and then buy them back for 1/10 the price. I usually don't even bother selling them back.
[...]Every time I try to do something in C++ now, I feel like I'm spending more time on defining types than on solving the problem.
That's actually the point of OOP. You shouldn't be 'forcing' anything to happen the way you would with a functional language. The point of OOP (pure object oriented programming... we're talking ivory tower for the moment) is that you define your objects and then define how they should interact with each other and then put the 'glue' in to interface them to each other on events.
You pay more time up front to define the model and interactions for increased development speed as you move 'up' your interface stack. Done correctly, you should also have less edge cases and a more flexible framework because you've broken down your problem in to many, many smaller generic problems which have an encapsulated object that deals with them and other objects that can interface with first said object.
The vast majority of single use code/quick fixes don't really need to be programmed in an OO language; but it pays off exponentially once you start getting over a few thousand lines of code. Like everything else in software development, there is no silver bullet, every project is unique, there usually isn't a single correct way to do something, but if you find yourself trying to screw in a lightbulb with a hammer, you're doing it the wrong way. Use whatever works for you that doesn't leave you muttering "... there must be a better way to do this!"
I'd say he should use the chopper and the JAG... in that order. The cannon is called the 'avenger' for a reason :)
Unfortunately, the middle class has been poached to the brink of extinction.
Would you mind converting to "Olympic Sized Pool" for us laymen?
Unless you're on the Samba team ;)
Never have I been so happy and so angry in such a short period of time. I salute you, yet still shake my fist angrily in your general direction.
I'd agree. I've found much less 'politicing' in the CS area than almost any other section. For the most part, if you see something that isn't cited, but more than obvious to anyone in the field, it doesn't get a "citation needed" by some anal editor. Furthermore, most of the articles have less of the drive-by insults/bickering that seems to be so common when companies or (somewhat) famous people are the subject. I guess that most of us geeks are more interested in commonly-known (no citation needed if the fact is generally accepted) knowledge than gossip. That, and I guess we all kind of know each other to some degree or another through slashdot, open source projects, blogs, etc. It would be somewhat silly to speak out of turn about someone you're going to run in to online within a month, anyways.
Erm... which one has the Xen modules? You know, there's never a Gentoo user around when you need one!
Funny, that. I'm working on a Java front end for a GPL'ed command line program. I haven't released it just yet, but I was going to use GPL v2... This whole episode is making me reconsider. I find me asking myself, "self, do I really want to be associated with the FSF at this point, and do I trust that Stallman hasn't jumped the shark with this move?"
While I appreciate what Stallman has done, I find the new Free Distro Guidelines to be, frankly, oppressive. At this point, I'm not sure if I even want to deal with the FSF and their nonsense.
I thought that was only true for 'higher' level partitioning (LVM, etc.). I partition using (c)fdisk mapping cylinder ranges to disk slices and then put the FS right on top of the partition. Do you mean that the hardware doesn't actually correspond cylinders to 'addresses' relative to other cylinder addresses (the 1024 BIOS cylinder limit non withstanding)? I assumed that this was the case from my understanding of the Linux I/O schedulers. This would surprise me, but probably mostly because I've never really considered it before.
Then again, I'm not sure that any mobo chipset/harddrive firmware that I've ever run was open source, so I probably couldn't verify that it's doing what I would assume it's doing.
FWIW, I think the FAA uses ADA for most (all? I'm too lazy to look it up, free mod points if anyone wants to link the wiki) of their systems. For me ADA-95 is a guilty pleasure language; it's really well thought out and it almost won't let you shoot yourself in the foot. I'd give it a thumbs up from the programming department.
The question is, what's the leading opinion from the network guys/gals? If I program a bulletproof solution, it doesn't mean a thing if the heavy metal goes down hard and isn't redundant. Anyone know anything about airport NOCs?
Try htop, on top of being even more impressive looking, it has real functionality; it's basically top with ncurses interface. It's the first package I put on every box I use.
Yeah... I was taking that for granted. I've got 4 500GB WD-AAKS', identically split to 9 partitions. The 'outside' (beginning of disk) two are RAID 10, the next two are RAID 1, and the remaining five are RAID 5. The very 'inside' (end of disk) is filled with dd'ed .img that I mount on a loopback to benefit from RAM page caching in the kernel. The raw images are great for virtualBox, since it's over iSCSI I can use the disks with a either Windows or Linux. The RAID 1's hold ISOs for distros, and the RAID 5's are general purpose. The iSCSI server itself is just a high end gaming board with 3 gigs of RAM and a bunch of NICs running BlueWhite64... it's somewhat hacked together, but it works (I'm a student so I had to eat a lot of off-brand Ramen to afford the rig).
At any rate, it can easily handle 5 or 6 VMs beating it down along with serving up regular files to my desktops. But I'm in the opposite side of the spectrum from you; I'm tuned for raw throughput and low IOPS... this setup would fall flat on its face with a database load. Tuning for throughput is much easier than tuning for IOPS. I'm sure you won't be missing spinning disks when you can delegate them to mass storage for backups and run on SSD at a 100th the latency.
I've found that for VMs it's best to short stroke the drive. Partition it so that your VMs are in the middle of the drive, all together, in a somewhat narrow section of the disk. That way, even while doing high IO/sec, you're at most half a disk seek from anything else on the disk. Also, always pre-allocate your VM disks; the performance difference is huge. If you're running a *nix distro, it pays to put your swap on one side of the VM partition and /var on the other, this way you shouldn't have to stray out of the center of the disk too much. The anticipatory IO scheduler in Linux helps a good deal here, you'll get much more throughput for a sub millisecond latency cost. With NCQ/NTQ, and only using 1/3 of the disk surface, you can feel the difference... especially as compared to a single partition that's running low on space and doing a full stroke to get from the VM to your OS.
Scratch that, Fedora 10 is due in 3 days, dude.
Where do you work, and how can I apply?
Just to avoid confusion, we're using base 2 units, correct? Where a KB = 1024 bytes and a MB is 1024 KB, etc. At the PB level, the difference between a KB being 1000 bytes adds up.
FWIW, SUSE was originally in the Slackware family. That's why the 'big 3' are Red Hat, Debian and Slackware. SUSE jumped to the Red Hat family, but it still, IIRC, has BSD init instead of sysV. I always feel like SUSE is Slackware with 'official' (Slackware has it out of the box, too) RPM support and YaST. It doesn't feel like Red Hat, but it behaves like Red Hat. Gentoo is the cousin of Slackware with the BYOC (Bring Your Own Compiler) mindset.
The way I see things flushing out right now, the Red Hat family is considered enterprise, the Debian family is considered desktop, and the Slackware family is the 'roll your own' (notably with Slax based live cds) for any niche that Red Hat or Debian aren't a good fit.