Ah, ok, I see. I had a "minimum font size" set. But I also had "Allow pages to choose their own fonts instead of my selection above" which I would have expected to override my minimum, but obviously not. (And that site does specify its own font).
Thanks!
In 1.5.0.3 if you go to http://news.bbc.co.uk/ and scroll to the bottom, the "Contact us" link is all messed up. Much as I like Firefox, I see loads of stuff like this.
In the article, Tanenbaum spends several pages explaining in some detail how such a pure language approach works in the Singularity system. But of course, knowing that would require reading TFA...
Whoa, if you read TFA yourself you'd discover that the explanation you're referring to isn't actually in TFA but in a paper linked from TFA. Sheesh.
Anyway, it just goes to show that great minds think alike:-)
Seriously. Maybe not Java itself, but a kind of system level version of Java. Andy Tanenbaum says:
Once you have decided to have each module keep its grubby little paws off other modules' data structures, the next logical step is to put each one in a different address space to have the MMU hardware enforce this rule.
You only need to do this if you're writing both kernel and application code in a language like C that allows arbitrary access to the entire address space. But imagine if everything was written in something like Java that doesn't have pointers. You might not even need a "kernel" as such, everything could run in supervisor mode - the protection would be provided by the language, not by MMU hardware.
In case you think this is all pie in the sky, check out JNode which is an OS written in Java.
Oddly, NeXT (and later Apple) picked up the Mach kernel and used it in their products. Performance was fixed partly through a series of hacks, and partly through raw horsepower.
No, Apple partly "fixed" it by making Mac OS X' kernel run in one big address space, and "message passing" in the kernel now consists of plain function calls.
Not quite true. Apple inherited the monolithic Mach kernel from NeXT. NeXT in turn used the 2.5 version of Mach which was already monolithic (ie Mach and BSD were all munged together in the same kernel). More details on the history here.
The Java spec is open for anybody the re-implement, the source code is viewable by all, and the JDK is a free download.
Not quite anybody. If you've ever seen Sun's source code (or even worse, like me, worked on it) then you can't for instance contribute to Harmony. (See here for details on the restrictions). There's a lot of paranoia around about IP contamination from exposure to Sun's code.
I recently benchmarked ten of my applications in c++ and java, java is about 2x slower for most of the cases I tried, and never faster.
Did you remember to do a "warm-up" phase for java to enable all JIT-compilation to take place before doing the real test? (See here for more tips on this).
There are fundamental mathematical limits to the amount you can compress data in a lossless format
Try this: write a program to output to a file the integers from 1 to a million using some universal code. Then try compressing the file using (eg) gzip. I bet that comes close to what you refer to as the mathematical limit. But as you can see it's nowhere near. The program itself is the optimum compression.
So really, it all depends on how much structure is inherent in the data and how easy it is to detect that structure.
Another related line you often hear is that not everyone can do work they love-- that someone has to do the unpleasant jobs. Really? How do you make them? In the US the only mechanism for forcing people to do unpleasant jobs is the draft, and that hasn't been invoked for over 30 years. All we can do is encourage people to do unpleasant work, with money and prestige.
Oh yeah? So the guy that comes round to empty his bins either a) loves his work, b) does it for the money, or c) does it for the prestige! Assuming that it's the money, this "encouragement" basically takes the form of "if you do this job you won't starve".
Honestly, what a load of smug complacent middle-class rubbish.
Kidding aside, I don't buy music online, because I consider a rip-off. CDs have better quality, do not have DRM*, comes with liner notes, and is itself a physical backup. I know many people who feel the same way. IMO, online music needs to be much cheaper to make up for these shortcomings; the only benefit it has is immediate delivery.
Try AllOfMp3. You can if you want get CD quality there but most people settle for MP3s at 192 Kbps. There is no DRM and they work out at least 5x cheaper than CDs.
That is almost exactly backwards. At first everyone thought the speed of light was relative depending on how you traveled in relation to the light source. Then experiments showed that the speed of light through a vacuum was constant no matter how the observer traveled, putting a wrench into the whole ether theory. Instead of trying to work around it like everyone else, Einstein explained away the ether.
I think you know what I meant which is that it was thought there was an absolute frame of reference in which light travelled at a constant speed. And then Einstein said "what if it travels at a constant speed relative to every observer?".
Which is in keeping with my observations of physicists: they are essentially applied mathematicians. Mathematicians (like Einstein) are a different sort.
You are completely wrong about Einstein - he was famously bad at maths. That was was part of the reason his General Theory Of Relativity took so long to formulate, it required very complex maths that he needed help with. It was his physical intuition that allowed him to formulate his relativity theories, this was pure philosophical reasoning based on thought experiments entirely divorced from maths. At the time everyone thought the speed of light was absolute and couldn't understand why they couldn't detect the ether that light was presumed to travel through. Einstein simply said "well what if the speed of light is relative to every observer?" and only then did he use maths as a tool to work out the effect on physical laws.
In fact part of the reason Einstein couldn't accept Quantum Mechanics was his need to imagine the underlying physical universe. He couldn't accept using the maths of the Schrodinger Equation as a tool without worrying about what it "really meant".
I've been wondering whether to plunge into RoR for a simple AJAX app I'm planning, but all the talk about automatic code generation and mySQL worries me a bit. For an example of the kind of AJAX interaction my app will perform, imagine a remote file directory browser that does the usual kind of explorer things: you click on a directory and it expands to show what's below etc. The files and directories are on the server of course. The expanding/collapsing of the tree is all done in Javascript by manipulating (eg) nested lists.
Is that fairly easy to do in RoR or is that not how RoR is meant to be used?
Another nice thing about the new classfile specification is that it's going to make certain new kinds of optimization possible. The more you can prove about what's on the stack at any given point, the more you can inline.
No, it won't make any difference to the optimizations you can do. You already know what's on the stack at a given point, that's the point of the verifier: to make sure that at a given point in the bytecode you're always dealing with the same types on the stack. This is to prevent (eg) an integer being popped off the stack and treated like an object ref. The new classfile specification just makes it faster to verify because you no longer need to calculate all the possible execution paths and their resultant stack types.
Also bear in mind that the really useful inlining takes place in JIT-compiled code by which time you've got rid of the notion of the bytecode operand stack anyway.
You can and should avoid that cost by processing the data first at the SQL Server (hey, stored procedures again! Why return 100,000 rows that you're going to process down to 1,000 when you could just return the 1,000 processed rows in the first place?
But if you're using Python then chances are you're not going to be doing heavy duty stuff with hundreds of thousands of rows! This is small scale web apps we're talking about. I bet you can't write your stored procedures in Python can you, so it's just more Stuff You Have To Learn.
Additionally, even if it takes more instructions per call, glibc malloc() will return freshly used "hot" memory to you, while the JVM will return the coldest memory to you--the author of the article admits that this is a problem, but it is worse than they say.
The JVM does not return the "coldest" memory to you. The vast majority of small to medium allocations are satisfied from a thread local heap which is effectively a stack. So the memory for your current allocation is hot, it's just a few bytes beyond the location of the last object you allocated.
The one question I have is this: Why just students?
Because this is basically a clever recruitment exercise. From the mentoring FAQ: "
What is the role of a mentoring organization? [...]
Be able to tell us about the developer, how they worked with the group, if they should be invited back should we do another summer of code, etc.."...and if they're any good Google will offer them a job when they finish college.
GEB was mentioned above, and I just had to post about it.. It's one of the best books I've ever read.
Ugh... I thought GEB was just intellectual masturbation. A few years ago I voiced the same opinion on some newsgroup and a lurker emailed me to say that he'd attended lectures given by Hofstadter and the guy was just so smug and full of his own cleverness.
By contrast Emperor's New Mind is one of the best books I've ever read, rich and fertile and full of ideas that actually lead somewhere other than the ooh! aah! of intellectual fireworks.
There is a website called BTOpenWoe where people can go to moan about BT Openworld. You can still find my own tale of woe there from three years ago:
My Business 500 account was supposed to have been activated 3 weeks ago but I keep getting Error 691. There is no physical problem because when I eventually got through to tech service the test user name worked fine. They reckon it may be because my username has been "registered twice" or some such baloney. This is a bog standard new account so I don't understand why this isn't an automated standard procedure. I have had no reply to the emails I have sent to the orders and billing email addresses. It is completely impossible to get through on the phone to the billing dept, you are left listening to music (eg "Yesterday, all my troubles seemed so far away...") with no indication of how many people are ahead of you in the queue. And this is a phone company! I HAVE however received a bill for £175! The level of service is absolutely appalling, I only wish I'd come across this site before I placed my order.
It actually took months to get them to cancel the order and stop them from sending me ever more threatening demands for the £175.
I hope they choose JamVM for the VM. It's a fairly new VM but impressively lean and mean (100k executable that still supports the full spec). From the JamVM web site, here is a list of the main features:
Uses native threading (posix threads). Full thread implementation including Thread.interrupt()
Object references are direct pointers (i.e. no handles)
Supports class loaders
Efficient thin locks for fast locking in uncontended cases (the majority of locking) without using spin-locking
Two word object header to minimise heap overhead (lock word and class pointer)
Execution engine supports basic switched interpreter and threaded interpreter, to minimise dispatch overhead (requires gcc value labels)
Stop-the-world mark and sweep garbage collector
Thread suspension uses signals to reduce suspend latency and improve performance (no suspension checks during normal execution)
Full object finalisation support within the garbage collector (with finaliser thread)
Garbage collector can run synchronously or asynchronously within its own thread
String constants within class files are stored in hash table to minimise class data overhead (string constants shared between all classes)
Supports JNI and dynamic loading for use with standard libraries
Uses its own lightweight native interface for internal native methods without overhead of JNI
JamVM is written in C, with a small amount of platform dependent assembler, and is easily portable to other architectures.
If you want to know more about Search Engine Optimization, the definitive (only?) book on the subject has just been published: www.abcseo.com. The draft version is also available online.
So please tell me, how do you enter the phone number/ address/ important piece of information you've just been told into your cell phone while you are talking on it?
Er... you use a pen and a piece of paper and then type it in when you finish the call. Sooo last century I know but if it saves you $200...
So to answer your question: for this particular job if you didn't have Ruby on your resume it wouldn't get a second look. If you had Ruby on your resume, but it became apparent in the interview that you didn't know Ruby... well, the interview was over.
Well I wouldn't want to work for a company so blinkered as not to be aware that a good programmer can be up and running in a language such as Ruby in days if not hours.
And if you can't be programming in Ruby within days then I'd have to question whether it's the right language to be using.
Back in the Apple II/Commodore/Altair days, programmers (who else was there?) used to tune a radio to a dead band and place it by the computer as a debugging aid. You can tell a lot by listening to the EMI that a computer put out. Infinite loops caused a continuous tone, different stages of processing produced different characteristics in the static, etc.
There were also programs designed just to place music on the radio with their EMI.
The first computer I ever worked on was a Marconi Myriad, a 24-bit computer that had a little speaker. The speaker made a different tone according to which instruction was executing. When our large (at least back then!) real-time air traffic control system was running correctly, it made a very complex noise. But it was a bit like listening to a car engine, you could tell immediately when something went wrong. And of course when it went into a loop there would be just a continuous tone.
Some of the engineers had created programs to play complete Bach Fugues and the like.
Ah, ok, I see. I had a "minimum font size" set. But I also had "Allow pages to choose their own fonts instead of my selection above" which I would have expected to override my minimum, but obviously not. (And that site does specify its own font). Thanks!
In 1.5.0.3 if you go to http://news.bbc.co.uk/ and scroll to the bottom, the "Contact us" link is all messed up. Much as I like Firefox, I see loads of stuff like this.
Whoa, if you read TFA yourself you'd discover that the explanation you're referring to isn't actually in TFA but in a paper linked from TFA. Sheesh.
Anyway, it just goes to show that great minds think alike :-)
Once you have decided to have each module keep its grubby little paws off other modules' data structures, the next logical step is to put each one in a different address space to have the MMU hardware enforce this rule.
You only need to do this if you're writing both kernel and application code in a language like C that allows arbitrary access to the entire address space. But imagine if everything was written in something like Java that doesn't have pointers. You might not even need a "kernel" as such, everything could run in supervisor mode - the protection would be provided by the language, not by MMU hardware.
In case you think this is all pie in the sky, check out JNode which is an OS written in Java.
No, Apple partly "fixed" it by making Mac OS X' kernel run in one big address space, and "message passing" in the kernel now consists of plain function calls.
Not quite true. Apple inherited the monolithic Mach kernel from NeXT. NeXT in turn used the 2.5 version of Mach which was already monolithic (ie Mach and BSD were all munged together in the same kernel). More details on the history here.
Not quite anybody. If you've ever seen Sun's source code (or even worse, like me, worked on it) then you can't for instance contribute to Harmony. (See here for details on the restrictions). There's a lot of paranoia around about IP contamination from exposure to Sun's code.
Did you remember to do a "warm-up" phase for java to enable all JIT-compilation to take place before doing the real test? (See here for more tips on this).
Try this: write a program to output to a file the integers from 1 to a million using some universal code. Then try compressing the file using (eg) gzip. I bet that comes close to what you refer to as the mathematical limit. But as you can see it's nowhere near. The program itself is the optimum compression.
So really, it all depends on how much structure is inherent in the data and how easy it is to detect that structure.
Oh yeah? So the guy that comes round to empty his bins either a) loves his work, b) does it for the money, or c) does it for the prestige! Assuming that it's the money, this "encouragement" basically takes the form of "if you do this job you won't starve".
Honestly, what a load of smug complacent middle-class rubbish.
Try AllOfMp3. You can if you want get CD quality there but most people settle for MP3s at 192 Kbps. There is no DRM and they work out at least 5x cheaper than CDs.
I think you know what I meant which is that it was thought there was an absolute frame of reference in which light travelled at a constant speed. And then Einstein said "what if it travels at a constant speed relative to every observer?".
You are completely wrong about Einstein - he was famously bad at maths. That was was part of the reason his General Theory Of Relativity took so long to formulate, it required very complex maths that he needed help with. It was his physical intuition that allowed him to formulate his relativity theories, this was pure philosophical reasoning based on thought experiments entirely divorced from maths. At the time everyone thought the speed of light was absolute and couldn't understand why they couldn't detect the ether that light was presumed to travel through. Einstein simply said "well what if the speed of light is relative to every observer?" and only then did he use maths as a tool to work out the effect on physical laws.
In fact part of the reason Einstein couldn't accept Quantum Mechanics was his need to imagine the underlying physical universe. He couldn't accept using the maths of the Schrodinger Equation as a tool without worrying about what it "really meant".
Is that fairly easy to do in RoR or is that not how RoR is meant to be used?
No, it won't make any difference to the optimizations you can do. You already know what's on the stack at a given point, that's the point of the verifier: to make sure that at a given point in the bytecode you're always dealing with the same types on the stack. This is to prevent (eg) an integer being popped off the stack and treated like an object ref. The new classfile specification just makes it faster to verify because you no longer need to calculate all the possible execution paths and their resultant stack types.
Also bear in mind that the really useful inlining takes place in JIT-compiled code by which time you've got rid of the notion of the bytecode operand stack anyway.
But if you're using Python then chances are you're not going to be doing heavy duty stuff with hundreds of thousands of rows! This is small scale web apps we're talking about. I bet you can't write your stored procedures in Python can you, so it's just more Stuff You Have To Learn.
The JVM does not return the "coldest" memory to you. The vast majority of small to medium allocations are satisfied from a thread local heap which is effectively a stack. So the memory for your current allocation is hot, it's just a few bytes beyond the location of the last object you allocated.
Because this is basically a clever recruitment exercise. From the mentoring FAQ: " What is the role of a mentoring organization? [...] Be able to tell us about the developer, how they worked with the group, if they should be invited back should we do another summer of code, etc.." ...and if they're any good Google will offer them a job when they finish college.
Ugh... I thought GEB was just intellectual masturbation. A few years ago I voiced the same opinion on some newsgroup and a lurker emailed me to say that he'd attended lectures given by Hofstadter and the guy was just so smug and full of his own cleverness.
By contrast Emperor's New Mind is one of the best books I've ever read, rich and fertile and full of ideas that actually lead somewhere other than the ooh! aah! of intellectual fireworks.
It actually took months to get them to cancel the order and stop them from sending me ever more threatening demands for the £175.
Disclaimer: the author is a mate of mine.
The whole problem of Wiki Island is here in a nutshell. There are just too many Wikis.
Er... you use a pen and a piece of paper and then type it in when you finish the call. Sooo last century I know but if it saves you $200...
Well I wouldn't want to work for a company so blinkered as not to be aware that a good programmer can be up and running in a language such as Ruby in days if not hours.
And if you can't be programming in Ruby within days then I'd have to question whether it's the right language to be using.
Back in the Apple II/Commodore/Altair days, programmers (who else was there?) used to tune a radio to a dead band and place it by the computer as a debugging aid. You can tell a lot by listening to the EMI that a computer put out. Infinite loops caused a continuous tone, different stages of processing produced different characteristics in the static, etc.
There were also programs designed just to place music on the radio with their EMI.
The first computer I ever worked on was a Marconi Myriad, a 24-bit computer that had a little speaker. The speaker made a different tone according to which instruction was executing. When our large (at least back then!) real-time air traffic control system was running correctly, it made a very complex noise. But it was a bit like listening to a car engine, you could tell immediately when something went wrong. And of course when it went into a loop there would be just a continuous tone.
Some of the engineers had created programs to play complete Bach Fugues and the like.
Eeeh them were days.