I'm most excited about a central place that does code reveiw of open-source projects. That's really a tedious process when you're wading around in sourceforge trying to find a shared lib for your project. Usually you can tell by the level of polish applied to the project's website how organized the code will be, but I'm certain some well-engineered software gets passed over if this is your only criteria for quality. Someone designing an open-source product shouldn't need to design a flashy website to promote it.
If there were a comprehensive site I could visit that had evaluated (albeit briefly) some of these packages, that could be a big time-saver.
Exactly my experience too. We develop java apps, and needed some C++ work for a small part of a project. I posted on craigslist, and googled, and most C++ consultants available on a per-project basis seemed to be in India. So I contacted them. Out of 6 people I contacted, nobody could even compile the stock sample framework that came with the DTK for the app we were developing with. It was quite a frustrating experience.
My hunch is that the Indian office overpromised and started working on some shoddy hacked together stuff. When it saw the light of day, the plug was pulled.
I think a lot of the benefits of RoR mentioned in the article can be achieved with a good IDE like IntelliJ.
I can recompile any changed java classes on the fly (unless changing class structure). No need to recompile and restart the entire application.
Autocomplete kicks ass. When invoking a method that takes a Foo object, autocomplete can show a list of all methods that return Foo or its subclasses. This is impossible in rails for several reasons. Lack of type-safety means you can pass any object as a parameter. Also, the auto-magic method names in ruby (like find_by_last_name_and_department) make this impossible, since the methods don't really even exist until invoked.
Immediate feedback about syntax errors: If I misspell a method name, the editor flags it instantly. Contrast to a rails application where you won't see the bug until you invoke the action.
Compile catches bugs at compile-time instead of runtime. If I refactor a method and it's still used somewhere, the compiler will find it. I suppose writing good tests in your rails app should catch this, if you have 100% test method coverage, but that seems like a pretty steep tradeoff.
Namespace conflict! This single issue pretty much soured a friend of mine who was trying to learn ruby on rails. He was writing a simple test app for a trouble ticketing system. On the request edit page, he defined a @request global var, which mucked up the @request used by rails. Unclear "missing method" error messages popped up, and it took quite a while to figure out.
There are some serious benefits to rails as well, the list you have is a good overview of the subtler advantages. I love the way you generate XML in rails, it fits the language so perfectly, because of the variable args, code blocks, and on-the-fly hashtable generation. It's definitely gratifying to see how much you can do with how little code, although in some places (like error checking) I think the concepts may have been overextended a bit. After evaluating my list of gripes with rails, and how it could be fixed, I came right back to what looked pretty much like WebObjects + IntelliJ (except for the hideous URLs in WO apps).
Which is apparent to anyone who has ever done video-conferencing. Everyone is always looking down, not making eye contact! The built-in iSight helps matters, because it's very close to the screen, but it's still unsettling. The only way for both parties to make "eye contact" would be having some sort of bulky teleprompter-like device, or if the screen you were looking at were also the camera.
This is really rather clever. Seems like they learned a lot from the iPod design. This mouse is analogous to the transition from the movable scroll wheel in older iPods to the touch-sensitive scroll wheel in newer ones. Much easier to customize. Much cleaner looking.
They also did a good job of making this ambidextrous. I'm sure that the default setting will be set for "primary button" for both left and right buttons. You go into the prefs and change whichever one you want to "secondary button"
Also, anyone read the little side bar about how there's a speaker in the mouse? It makes the click sounds and "scroll" sounds when you use the mouse. I love the idea of being able to disable the "click" sound that your mouse makes. Or even customize the sound of the clicking.
Questions: How do you reposition the mouse while holding down the button? That would probably trigger the side buttons if you lifted it up. Maybe the mouse ignores those if they're pressed while the top button is being held down.
Also, won't the little scroll wheel on the top get all filled up with shmutz from your finger? Seems like they could have used an extension of the piezo surface here too. Just make the whole top surface of the mouse like a trackpad on a laptop, with pressure-sensitive points.
Plus, San Francisco is one of the more interesting cities, topographically speaking. All the hills make for a lot more 3-dimensional variation than, say, Copenhagen.
I guarantee that apple has been working on an office suite for some time now, in the event that MS cancels updates on mac versions of office. Exactly the same as IE for mac led to Safari. And probably how they keep an X86-compatible version of OS X on hold as well.
Ok, so now we add WOTW to the list: LOTR FOTR ROTK ROTJ WOTW
The movie acronym namespace is getting overcrowded! I predict that soon movies will start being made with FIVE words in the title, maybe by throwing an adjective or expletive into the mix. War of the Doggone Worlds.
Re:Maintainance nightmare
on
Decompiling Java
·
· Score: 2, Interesting
What's fun about decompiling obfuscated code is when you end up with variables and classes that have reserved names, e.g. a class called "if".
I had to decompile and patch a ridiculously buggy JDBC driver for a commercial database which had been run through an obfuscator, and ran into that issue. Renaming was rather a hassle, I must say.
I came to the conclusion that they had obfuscated their driver out of shame at the embarrasingly bad code, rather than to protect any intellectual property therein.
I tried topCoder for a while. Seems that writing obfuscated code is actually an advantage, since people challenging it will be intimidated by its complexity, and reluctant to challenge it. Possible mistakes are buried in junk.
Somewhat unrelated, but one of the funnier rounds I saw was for a problem which had a small possible set of results. I don't remember the specifics, but someone posted the following code, baiting someone to challenge the result:
public class CorrectDoor { public int whichDoor(String[] args) { return (int) (Math.random() * 10); // Do you feel lucky, punk? // Go ahead, then, challenge } }
Surprised to see this on slashdot, because just today I wanted to play around with some parameters for a function to generate a curve. Trig is a very fuzzy memory for me, so I wanted to try some things out on a graphing calculator.
I tried VersionTracker, and I googled for a graphing calculator. Google won, this has a nice applet that works great: http://gcalc.net/
Having your computer control your music just makes so much sense. I think I'm going to need to get one of these suckers.
Lots of fun possibilities here. Using the Salling Clicker software to control iTunes from your phone, or pause (or lower the volume on) the music when you pick up the phone.
Having 60-some Gigs of space for music, instead of the 5 on our tired old iPod is a nice thing too.
Anyone who lives in the Bay Area and is a Mr. Bungle fan recognize the similarity between the BART trains in the east bay and the sound of nitrogen bubbles a-popping in "The Bends"? It's easily the most painful song I've ever heard (and sadly missing from the iTunes store, or I'd provide a link).
I suspect that the "bends" sound at the end of the song is actually just a sample of the BART trains which has been digitally tweaked a bit. Seems like a somewhat telling relationship about the nerve-grating qualities of the sound of trains.
How about hooking up some sort of biometric meter to the camera, which records your pulse rate, or some other gauge of how interested you are in what you're seeing (brain waves? adrenaline?). Then when you're sifting through footage you can look at a graph of your biometric information and automatically cull the 99% of your life where you are staring slackjawed at asinine, unrealistic slashdot posts...
Isn't it possible that we just have an over-simplified formula for gravitation?
I read something about this, but only dimly recall the specifics. I don't believe it was M.O.N.D., but rather an idea that the force of gravity did not diminish over great distances quite as rapidly as assumed. The researcher plugged in a constant to account for this, which handily negated the "need" for dark matter to explain the orbits of galaxies.
This seems quite a bit more plausible to me than a universe full of dark matter.
It strikes me that this is more about branding than anything. What sets any big-name real world product apart from its identical counterpart? The brand name.
Imagine an interviewer with a Nike exec, asking why consumers should pay more for their products than a functionally equivalent (maybe even better-built) shoe. I doubt the suit would even acknowledge such a question as being valid. It is not a question companies feel obligated to answer.
It seems that software companies are behind the game with respect to their peers in tangible goods in this aspect, but expect to see a lot more of this stuff. It sounds to me like HP is really just beginning to construct their own.Net bandwagon. Just as with physical products, corporations know that it's not about the quality of the product, or the list of features. It's about brand saturation and recognition. If someone sees a billboard for product A 100X more often than product B, some gullible part of his mind believes that product A is better. Who cares what it does?
I wish there were something like topcoder which graded on elegance of coding. topcoder basically rewards you for writing abstruse, incomprehensible code very very quickly.
Understandability is obviously way to subjective of a thing to use in an automated code competition, as it would require some human to look at it. Or would it?
I've been bitching in feedback to Apple about their poor app-switching interface since the initial beta of OS X, and am thrilled to see they are finally addressing the problem. The old dock-switcher was terrible and unfriendly, and my least-favorite thing about using OS X. As soon as LiteSwitch X was released I bought a copy, and have been happily wearing down my apple-tab keys ever since.
I think the pattern here with Watson and then LiteSwitch X has some interesting parallels to Linux vs. Unix, except w.r.t. which party has more clout. Rewriting costly unix apps workalikes and charging less for them in Linux is seen as perfectly acceptable, because Linux is the underdog. Apple is the overdog, and is catching flak for imitating some other company's well-designed ideas and charging less for it (by bundling it in with the OS).
That said, I'll continue to use LiteSwitch X (of course, I've already paid for it) because it has some nice improvements over the OS X version. Same with Watson, I much prefer it over Sherlock. It seems that the apple versions are the "lite" version of the commercial apps. If you want more, the 3rd-party developer is there to provide you with more powerful, feature-laden versions of the apps. But buying OS X shouldn't necessitate the purchase of several 3rd party apps to be as usable as possible.
This article doesn't talk about scaling, but about performance. As one poster commented on the article, performance measures how long it takes to process a single request. Scaling is how well it handles many concurrent requests.
Also, the lack of any solid numbers is annoying. The author basically points to various levels of abstraction in the Java model and says "See! This is slowing things down" without any concrete comparison to PHP.
I use both Java (WebObjects) and PHP, and I actually really like both of them. As has been said many times before by sensible people, use the right tool for the right job. For a low-traffic website with a lot of static content and a couple dynamic forms, I'd much rather use PHP. For a huge app with a very large database, I'd rather do something in WebObjects.
PHP performs well, except for the fact that each page hit re-parses the script into executable php "bytecode". Using Zend Optimizer can make this much less of an issue.
However, the other big downside to PHP is that it's difficult to share data at the application level. Session-level storage works well, using $_SESSION variables, but if you want to have some application-wide information, your choices are to either: * Store it in the database * Use the filesystem * Use some 3rd party application-level cache, or roll your own.
The first option leads to, you guessed it, NONSCALABILITY. By making the database the bottleneck, it makes it much more difficult to add extra servers to handle the load.
The second or third option would probably work O.K. but it's not quite as self-contained (or speedy) as using shared Java objects. Also, tacking on 3rd party shared-memory solutions to handle what should be a very simple thing seems, well, tacky.
Disclaimer: I've not used J2EE or JSP, nor do I want to. I'm a WebObjects programmer. Which uses Java. I think a lot of confusion results in people who say "Java" and really mean "JSP".
A more likely scenario is some sort of legalese at the beginning of the film, a license agreement for watching the film. You, the watcher, agree not to publicly disparage the film, and may not distribute any reviews of the film without the studio's approval...
Sort of along the lines of the Bose tactics w/r/t their audio equipment. Sue the audiophile magazines for informing their readers of the sub-optimal quality of the Bose products. Now that the RIAA is going after the individual consumers, it's time for other *IAs to go after them too!
If you don't want prostate cancer. Speaking of dubious research...
in a finding likely to be welcomed by teenage boys worldwide, Australian researchers say frequent masturbation could help protect against prostate cancer.
All I can think while reading this story is, why can't our schools have this kind of buying power? I suppose in a way it's good, because they'd end up buying MS crap. But this seems like some flagrant flaunting of an over-budgeted organization.
I'm most excited about a central place that does code reveiw of open-source projects. That's really a tedious process when you're wading around in sourceforge trying to find a shared lib for your project. Usually you can tell by the level of polish applied to the project's website how organized the code will be, but I'm certain some well-engineered software gets passed over if this is your only criteria for quality. Someone designing an open-source product shouldn't need to design a flashy website to promote it.
If there were a comprehensive site I could visit that had evaluated (albeit briefly) some of these packages, that could be a big time-saver.
Exactly my experience too. We develop java apps, and needed some C++ work for a small part of a project. I posted on craigslist, and googled, and most C++ consultants available on a per-project basis seemed to be in India. So I contacted them. Out of 6 people I contacted, nobody could even compile the stock sample framework that came with the DTK for the app we were developing with. It was quite a frustrating experience.
My hunch is that the Indian office overpromised and started working on some shoddy hacked together stuff. When it saw the light of day, the plug was pulled.
I think a lot of the benefits of RoR mentioned in the article can be achieved with a good IDE like IntelliJ.
I can recompile any changed java classes on the fly (unless changing class structure). No need to recompile and restart the entire application.
Autocomplete kicks ass. When invoking a method that takes a Foo object, autocomplete can show a list of all methods that return Foo or its subclasses. This is impossible in rails for several reasons. Lack of type-safety means you can pass any object as a parameter. Also, the auto-magic method names in ruby (like find_by_last_name_and_department) make this impossible, since the methods don't really even exist until invoked.
Immediate feedback about syntax errors: If I misspell a method name, the editor flags it instantly. Contrast to a rails application where you won't see the bug until you invoke the action.
Compile catches bugs at compile-time instead of runtime. If I refactor a method and it's still used somewhere, the compiler will find it. I suppose writing good tests in your rails app should catch this, if you have 100% test method coverage, but that seems like a pretty steep tradeoff.
Namespace conflict! This single issue pretty much soured a friend of mine who was trying to learn ruby on rails. He was writing a simple test app for a trouble ticketing system. On the request edit page, he defined a @request global var, which mucked up the @request used by rails. Unclear "missing method" error messages popped up, and it took quite a while to figure out.
There are some serious benefits to rails as well, the list you have is a good overview of the subtler advantages. I love the way you generate XML in rails, it fits the language so perfectly, because of the variable args, code blocks, and on-the-fly hashtable generation. It's definitely gratifying to see how much you can do with how little code, although in some places (like error checking) I think the concepts may have been overextended a bit. After evaluating my list of gripes with rails, and how it could be fixed, I came right back to what looked pretty much like WebObjects + IntelliJ (except for the hideous URLs in WO apps).
Which is apparent to anyone who has ever done video-conferencing. Everyone is always looking down, not making eye contact! The built-in iSight helps matters, because it's very close to the screen, but it's still unsettling. The only way for both parties to make "eye contact" would be having some sort of bulky teleprompter-like device, or if the screen you were looking at were also the camera.
I wonder how the focus on this thing works...
This is really rather clever. Seems like they learned a lot from the iPod design. This mouse is analogous to the transition from the movable scroll wheel in older iPods to the touch-sensitive scroll wheel in newer ones. Much easier to customize. Much cleaner looking.
They also did a good job of making this ambidextrous. I'm sure that the default setting will be set for "primary button" for both left and right buttons. You go into the prefs and change whichever one you want to "secondary button"
Also, anyone read the little side bar about how there's a speaker in the mouse? It makes the click sounds and "scroll" sounds when you use the mouse. I love the idea of being able to disable the "click" sound that your mouse makes. Or even customize the sound of the clicking.
Questions: How do you reposition the mouse while holding down the button? That would probably trigger the side buttons if you lifted it up. Maybe the mouse ignores those if they're pressed while the top button is being held down.
Also, won't the little scroll wheel on the top get all filled up with shmutz from your finger? Seems like they could have used an extension of the piezo surface here too. Just make the whole top surface of the mouse like a trackpad on a laptop, with pressure-sensitive points.
Or how about:
Microsoft: More Suck for your Buck
Plus, San Francisco is one of the more interesting cities, topographically speaking. All the hills make for a lot more 3-dimensional variation than, say, Copenhagen.
I guarantee that apple has been working on an office suite for some time now, in the event that MS cancels updates on mac versions of office. Exactly the same as IE for mac led to Safari. And probably how they keep an X86-compatible version of OS X on hold as well.
Ok, so now we add WOTW to the list:
LOTR
FOTR
ROTK
ROTJ
WOTW
The movie acronym namespace is getting overcrowded! I predict that soon movies will start being made with FIVE words in the title, maybe by throwing an adjective or expletive into the mix. War of the Doggone Worlds.
What's fun about decompiling obfuscated code is when you end up with variables and classes that have reserved names, e.g. a class called "if".
I had to decompile and patch a ridiculously buggy JDBC driver for a commercial database which had been run through an obfuscator, and ran into that issue. Renaming was rather a hassle, I must say.
I came to the conclusion that they had obfuscated their driver out of shame at the embarrasingly bad code, rather than to protect any intellectual property therein.
I tried topCoder for a while. Seems that writing obfuscated code is actually an advantage, since people challenging it will be intimidated by its complexity, and reluctant to challenge it. Possible mistakes are buried in junk.
// Do you feel lucky, punk?
// Go ahead, then, challenge
Somewhat unrelated, but one of the funnier rounds I saw was for a problem which had a small possible set of results. I don't remember the specifics, but someone posted the following code, baiting someone to challenge the result:
public class CorrectDoor {
public int whichDoor(String[] args) {
return (int) (Math.random() * 10);
}
}
Surprised to see this on slashdot, because just today I wanted to play around with some parameters for a function to generate a curve. Trig is a very fuzzy memory for me, so I wanted to try some things out on a graphing calculator.
I tried VersionTracker, and I googled for a graphing calculator. Google won, this has a nice applet that works great: http://gcalc.net/
Having your computer control your music just makes so much sense. I think I'm going to need to get one of these suckers.
Lots of fun possibilities here. Using the Salling Clicker software to control iTunes from your phone, or pause (or lower the volume on) the music when you pick up the phone.
Having 60-some Gigs of space for music, instead of the 5 on our tired old iPod is a nice thing too.
Anyone who lives in the Bay Area and is a Mr. Bungle fan recognize the similarity between the BART trains in the east bay and the sound of nitrogen bubbles a-popping in "The Bends"? It's easily the most painful song I've ever heard (and sadly missing from the iTunes store, or I'd provide a link).
I suspect that the "bends" sound at the end of the song is actually just a sample of the BART trains which has been digitally tweaked a bit. Seems like a somewhat telling relationship about the nerve-grating qualities of the sound of trains.
How about hooking up some sort of biometric meter to the camera, which records your pulse rate, or some other gauge of how interested you are in what you're seeing (brain waves? adrenaline?). Then when you're sifting through footage you can look at a graph of your biometric information and automatically cull the 99% of your life where you are staring slackjawed at asinine, unrealistic slashdot posts...
Isn't it possible that we just have an over-simplified formula for gravitation?
I read something about this, but only dimly recall the specifics. I don't believe it was M.O.N.D., but rather an idea that the force of gravity did not diminish over great distances quite as rapidly as assumed. The researcher plugged in a constant to account for this, which handily negated the "need" for dark matter to explain the orbits of galaxies.
This seems quite a bit more plausible to me than a universe full of dark matter.
vim: ctrl-v to go into rectangular visual mode, select the text you want, perform the appropriate action.
It strikes me that this is more about branding than anything. What sets any big-name real world product apart from its identical counterpart? The brand name.
.Net bandwagon. Just as with physical products, corporations know that it's not about the quality of the product, or the list of features. It's about brand saturation and recognition. If someone sees a billboard for product A 100X more often than product B, some gullible part of his mind believes that product A is better. Who cares what it does?
Imagine an interviewer with a Nike exec, asking why consumers should pay more for their products than a functionally equivalent (maybe even better-built) shoe. I doubt the suit would even acknowledge such a question as being valid. It is not a question companies feel obligated to answer.
It seems that software companies are behind the game with respect to their peers in tangible goods in this aspect, but expect to see a lot more of this stuff. It sounds to me like HP is really just beginning to construct their own
I wish there were something like topcoder which graded on elegance of coding. topcoder basically rewards you for writing abstruse, incomprehensible code very very quickly.
Understandability is obviously way to subjective of a thing to use in an automated code competition, as it would require some human to look at it. Or would it?
I've been bitching in feedback to Apple about their poor app-switching interface since the initial beta of OS X, and am thrilled to see they are finally addressing the problem. The old dock-switcher was terrible and unfriendly, and my least-favorite thing about using OS X. As soon as LiteSwitch X was released I bought a copy, and have been happily wearing down my apple-tab keys ever since.
I think the pattern here with Watson and then LiteSwitch X has some interesting parallels to Linux vs. Unix, except w.r.t. which party has more clout. Rewriting costly unix apps workalikes and charging less for them in Linux is seen as perfectly acceptable, because Linux is the underdog. Apple is the overdog, and is catching flak for imitating some other company's well-designed ideas and charging less for it (by bundling it in with the OS).
That said, I'll continue to use LiteSwitch X (of course, I've already paid for it) because it has some nice improvements over the OS X version. Same with Watson, I much prefer it over Sherlock. It seems that the apple versions are the "lite" version of the commercial apps. If you want more, the 3rd-party developer is there to provide you with more powerful, feature-laden versions of the apps. But buying OS X shouldn't necessitate the purchase of several 3rd party apps to be as usable as possible.
This article doesn't talk about scaling, but about performance. As one poster commented on the article, performance measures how long it takes to process a single request. Scaling is how well it handles many concurrent requests.
Also, the lack of any solid numbers is annoying. The author basically points to various levels of abstraction in the Java model and says "See! This is slowing things down" without any concrete comparison to PHP.
I use both Java (WebObjects) and PHP, and I actually really like both of them. As has been said many times before by sensible people, use the right tool for the right job. For a low-traffic website with a lot of static content and a couple dynamic forms, I'd much rather use PHP. For a huge app with a very large database, I'd rather do something in WebObjects.
PHP performs well, except for the fact that each page hit re-parses the script into executable php "bytecode". Using Zend Optimizer can make this much less of an issue.
However, the other big downside to PHP is that it's difficult to share data at the application level. Session-level storage works well, using $_SESSION variables, but if you want to have some application-wide information, your choices are to either:
* Store it in the database
* Use the filesystem
* Use some 3rd party application-level cache, or roll your own.
The first option leads to, you guessed it, NONSCALABILITY. By making the database the bottleneck, it makes it much more difficult to add extra servers to handle the load.
The second or third option would probably work O.K. but it's not quite as self-contained (or speedy) as using shared Java objects. Also, tacking on 3rd party shared-memory solutions to handle what should be a very simple thing seems, well, tacky.
Disclaimer: I've not used J2EE or JSP, nor do I want to. I'm a WebObjects programmer. Which uses Java. I think a lot of confusion results in people who say "Java" and really mean "JSP".
A more likely scenario is some sort of legalese at the beginning of the film, a license agreement for watching the film. You, the watcher, agree not to publicly disparage the film, and may not distribute any reviews of the film without the studio's approval...
Sort of along the lines of the Bose tactics w/r/t their audio equipment. Sue the audiophile magazines for informing their readers of the sub-optimal quality of the Bose products. Now that the RIAA is going after the individual consumers, it's time for other *IAs to go after them too!
No, give your arch nemesis an A+++ 150% average, then sit back and watch. Everything will sort itself out nicely.
All I can think while reading this story is, why can't our schools have this kind of buying power? I suppose in a way it's good, because they'd end up buying MS crap. But this seems like some flagrant flaunting of an over-budgeted organization.