I'm planning to buy that exact Powerbook in the next couple of weeks, but there are a few things that stick out in the ThinkPad that are better than what Apple offers
1600x1200 -- Why, oh why can't Apple bump up their display resolution!
Pentium M -- Battery life on the Powerbooks isn't bad, but from what I hear it's nothing near what the new mobile Pentia can do.
Other than that, I'm amazed the IBM machine is so expensive.
Argh. I'm glad I can tweak the card. Don't get me wrong. I just hate that POS app.
First of all, you have to somehow call the app every time you log-in, instead of it just being automatic. That mostly works, but not always.
Then there's the "forgetting the settings" part. In theory, you don't need to bring up the GUI once you've configured it right, but every time I play a SDL game (TuxRacer, Stepmania) and then return to X, all the settings are lost. The only way to recover them that I've found is to reopen the nvidia-settings GUI and twiddle the numbers. Somehow that will trigger the thing to reapply those settings.
Is there some reason you can't set these params from xorg.conf? Sure, it is nice to be able to override them on a per-user basis, but they sure don't make it easy.
If you sell only 1 track, yeah, it does cost more than 65 cents per track to create (unless it's all done by volunteers). Can you honestly claim that the albums that go platinum cost more than 65 cents a track?
Overall, a given album may or may not cost more than 65 cents per track to create. The median album probably costs more, because more than half the albums made probably do poorly. On the other hand, the few that do really well pay for the losers.
Not that I expect them to do this, but say Apple decided to change the iTunes policy and sell all tracks for 25c. Would you be completely unable to find good music on Apple's site? You'd probably find no britney spears or john coltrane, OTOH there are thousands of extremely talented artists who would love to have their stuff up on iTunes, even at only 25c a track.
I hope any price increase drives more people to p2p networks. I don't think copyright infringement is a very serious crime, and would love to see the music and film industries get a rude awakening.
It's not theft though. Theft implies that the original owner is deprived of something. This is copyright infringement. It's different. Other than that, great post!
Will it, or any other motherboard, really, truly, fully support Linux anytime soon?
I'm strongly considering buying the pcHDTV HTDV card even though I don't really care about watching HDTV. Why? Because it's designed for Linux.
This weekend I had to haul a 5ish year old SB Live card out of an old server and install it on a new machine, because the onboard sound card on the new nForce2 motherboard wasn't properly supported in Linux.
I think there's a huge untapped market for hardware that's fully open. It doesn't even need to be the latest and greatest stuff. My SB Live is a prime example. If someone were selling new sound cards with a 5-year-old feature set, but with completely open hardware and APIs I'm sure they'd do great. Same with network cards and even graphic cards. Sometimes full support is more important than performance. Linux users may only be 1% of the market, but that market share is growing.
Firstly, most people wouldn't care at all. Secondly, TiVo has been doing it for years, and although the *potential* for them to do evil things exists, it just hasn't manifested itself.
Having your TiVo spy on you is kinda like having your mom spy on you. Sure, she could potentially embarrass you and do all kinds of other awful things, but you're pretty sure she won't, so you don't bother to hide things from her.
Besides, if the remote-monitoring bothers you *you can opt out!*
Yup, statically typed languages are superior because nobody would *ever* cast anything. They especially would never cast from one type to an unrelated type.
I agree that there is some use to the "sanity checking" that statically typed languages give you, but that type checking can easily be rendered useless when someone casts from one type to another. Believe me, that can be a royal PITA. I've had to spend hours trying to understand why I was seeing meaningless results coming out of a program before discovering that someone was doing a cast from a foo_response_t pointer to a struct foo_response pointer. The two were similar, but not identical, and the results were completely evil. Of course, most statically typed languages are weakly typed (i.e. the variable defines the type, not the object to which the variable refers). Because of that, I wasn't able to look at the object and say "hey, that's not really a struct foo_response!".
As for web pages, I think interpreting broken pages in the way that the author probably intended is the right behaviour, with two caveats. First, obviously, is security. The browser can decide that an unclosed table tag was probably supposed to be closed at a given point in the document without risking any security issues, but the same can't be said for Javascript code. Secondky, I think the user should be warned that the browser is interpreting broken code, so that if the browser guesses wrong, the user has some notion of *why* things are not working right.
I got a Motorola V600 phone from AT&T because it had bluetooth. Unfortunately, Apple never got iSync over Bluetooth working with the phone. I've heard that the phone doesn't properly comply with bluetooth specs, but I'm still really surprised that a year later, the only way I've found to get iSync working is to buy a USB cable. Kinda defeats the whole bluetooth feature.
If I download "Britney.mp3" at what stage is "Jive records", the copyright holder, deprived of anything? They still have all their money, they still have all the recordings, they have not been deprived of anything.
What you're doing is depriving the copyright owner from the opportunity to make *more* money. All your hand-waving about "in effect", and "legitimate sales (money)" won't cut it. That definition of theft, no matter how broad it is, doesn't include copyright infringement.
If it did, then is libel or slander theft? If you claim that Britney is a heroin addict and that she funnels money to Al Qaeda, are you committing theft? You're depriving her record label of sales, aren't you? That's all your definition of theft seems to require.
What if you give her album a really bad review? That could reduce its sales. Is that theft?
A key clause of every definition of theft includes depriving other people of something. You can't get away from that, and the "something" isn't a theoretical future benefit, it's a tangible asset. They had it, they don't have it anymore.
I have an iBook, and much as I love OS X, sometimes I just need Linux. Apparently there was just a Gnoppix release for PPC. All the KDE live CD releases I can find are anywhere from 9 months to 1.5 years old.
irb(main):001:0> pets = ["dog", "cat", "fish"] => ["dog", "cat", "fish"] irb(main):002:0> pets.each { |pet| puts pet.upcase } DOG CAT FISH => ["dog", "cat", "fish"] irb(main):003:0> pets.each { |pet| if pet.length < 4 then puts pet.upcase end } DOG CAT => ["dog", "cat", "fish"] irb(main):004:0> pets.each { |pet| puts pet.upcase if pet.length < 4 } DOG CAT => ["dog", "cat", "fish"] irb(main):005:0> pets.sort.grep(/^...$/).collect {|pet| pet.upcase }.each {|pet| puts pet } CAT DOG => ["CAT", "DOG"]
But anyhow, the point wasn't whether Rython's list comprehensions or Ruby's block-based iterators were better, it was that Ruby blocks allow you to do pre and post block operations, like opening and shutting a DB connection.
If you like seaside, take a look at Borges. I'm pretty sure it's a reimplementation of seaside in Ruby (and think it might have been done by the same ppl who did seaside).
How do you run that Hello World app in smalltalk? Do you need to have the environment running, and have to type it into an interpreter window, or can you have a script starting with a "shebang" line that looks like the following?
I've tried Squeak, and that's the part I couldn't figure out. If all I want is a script, a little executable program I can have sitting on its own in a "/home/me/bin" directory on my machine, can I do that?
I'm not completely familliar with the DBI code, I haven't used it in a long time, but it's a really good example of how things should work. I imagine it's written something like:
Hmm, slashdot won't do the indentation right, but that's what I'm aiming at. "ensure" is like "finally" in Java. It's always called, so in this case, it makes sure the dbh is always properly disconnected. The errors would probably be handled more cleanly than that, but I hope you get the idea. I found
a site with more info on using the DBI that might answer your question better.
Psst. Python people -- how do you get slashdot to properly indent your python code snippets?
Tis true, that this demo didn't use any of the above, but it can. Ruby works much better on a POSIX platform than Windows, but it does work very well on Windows. Linux is no problem. It works fine with Apache, either as CGIs or using mod_ruby. It doesn't use PHP/Python/Perl, that's true, but someone else suggested that the P in OnLAMP was for Postgres, which works great with Ruby.
If so, it seems to leave the db handle, and the cursor handle dangling. That was the main point I was making, is that when wrapped in a block, these things are cleaned up for you when you're done. Other than that though, this is basically a good Python translation of what the Ruby code was doing (although the Ruby version is database-independent, I imagine Python also has a DB abstraction layer).
Btw, how'd you get the indentation right? Manually inserting entities?
Smalltalk is great and all, but it's not so easy to write a "hello world" script in Smalltalk, at least in my limited experience. This isn't a problem with Smalltalk, it's just that the two were intended for different things.
Ruby shares its OOness with Smalltalk, but the environment and runability of it comes from Perl. It's much more of the standard "write a script, then pass the script to the interpreter" kind of a language.
Once you get used to the idea of passing blocks of code around, you'll love it, and won't be able to go back to Python... er... I mean, won't be able to go without it.
The canonical example is the iterator. Given an array pets containing ["dog", "cat", "fish"]:
pets.each { |pet| puts pet }
Will return
dog
cat
fish
If you want to print out the uppercase versions
pets.each { |pet| puts pet.upcase }
Or if you want to add some text:
pets.each { |pet| puts "I love my pet #{pet}" }
Big deal, right? Not much different from a for loop. But blocks are amazing when dealing with things like a database. You can put all the setup, teardown and error-handling code in a method that's hidden from the user, and all they have to do is pass in the block they want the DB object to execute:
require 'dbi'
DBI.connect('DBI:Mysql:test', 'testuser', 'testpwd') do | dbh |
puts "inserting..." sql = "insert into simple01 (SongName, SongLength_s) VALUES (?, ?)" dbh.prepare(sql) do | sth | 1.upto(13) { |i| sth.execute("Song #{i}", "#{i*10}") } end
puts "selecting..." dbh.select_all('select * from simple01') do | row | p row end
puts "deleting..." dbh.do('delete from simple01 where internal_id > 10')
end
Unfortunately, slashdot eats my indentation, but fortunately, Ruby not being as picky about whitespace as *some languages*, that doesn't matter. Note that all that code is wrapped in a DBI.connect() call, which connects before it starts executing the block, and disconnects after. There's no "close" call required, it's all wrapped up for you.
Yeah, wasn't one of the promises of a PDF-based display manager that the entire system would be vector-based, not pixel-based, so resolution wasn't important? It's sad that I have more control over those things in Windows and Linux. Heck, the ultimate for that was OS/2. In OS/2 it was sort-of disturbing. When you changed the resolution nothing changed size, you just had higher/lower res icons, fonts, etc.
Anyhow, my eyes can handle higher than 100dpi without difficulty, afterall paper has much higher than 100dpi.
Speaking of resolution, I'm more excited by higher resolution than a speed bump. They need a speed bump, true, but 1280x854 in a 15 inch screen is relatively low resolution
compared to the offerings by Dell. For a company that likes to market to graphic artists, you'd think they'd try to sell an ultra high DPI display.
The difference is that in a grocery store, people don't come in, take pictures of the products, then leave. Instead, they actually deprived the store of a product that the store was then unable to sell. That's why copyright infringement and theft are not the same.
I wouldn't be surprised if copyright infringment hurts the record companies a bit. On the other hand, nobody has ever actually proven it does. It may actually be the reverse. It could be that it ends up as advertising and that people end up buying more than they otherwise would have. But right now, that's a big unknown.
Even if it can be proven that Joe Blow having Gigli.mpg shared from his computer actually cost the record company $100 in lost sales, I still wouldn't say that Joe Blow deserves to be punished. The idea of "intellectual property" is fundamentally wrong. I've never seen any proof that copyright or patents actually help the public more than they hurt it. Drug companies claim that patents result in new drugs... but what if that drug is Viagra? Is that a benefit for the public or just a cash cow for the company? And what if the drug is actually useful, like an AIDS drug. Is it a benefit to the public to prevent other companies from saving people's lives while the patent is in force?
Music existed before copyright. Penicillin was invented without the assistance of patents. Current IP laws only serve to give more power to huge corporations and take it away from individuals. Copyright infringment isn't piracy, it isn't theft, and it hasn't been proven to necessarily hurt the infringed party.
That's one thing that people often forget / ignore. Tags are often put in plastic sleeves and can be removed and reprogrammed and slapped on another box / pallet later.
Like you said though, the technology is in its infancy. The problem isn't that there is no standard, the problem is that there are lots of standards, and lots of "additions" to those standards. It's almost like the early days of the web. The tags are the web pages, and the readers are the web browsers. Some "graphic designer" may use a <blink> tag which shows up in Netscape browsers but not in Mosaic.
The companies that make both tags and readers tend to be the worst offenders. They may propose a standard, but it's too easy for them to violate it since the tag team and the reader team both twiddle their products. The purely tag and purely reader companies do a much better job of publishing and adhering to standards.
It's a moving target, and Wal*Mart would be dumb to latch on to any one given tag type or or protocol standard that's currently out there. But Wal*Mart is smart to get in the game early. When all the kinks are worked out, not having to hand-scan every item entering or leaving a warehouse is bound to save lots of dollars.
I'm planning to buy that exact Powerbook in the next couple of weeks, but there are a few things that stick out in the ThinkPad that are better than what Apple offers
Other than that, I'm amazed the IBM machine is so expensive.
Argh. I'm glad I can tweak the card. Don't get me wrong. I just hate that POS app.
First of all, you have to somehow call the app every time you log-in, instead of it just being automatic. That mostly works, but not always.
Then there's the "forgetting the settings" part. In theory, you don't need to bring up the GUI once you've configured it right, but every time I play a SDL game (TuxRacer, Stepmania) and then return to X, all the settings are lost. The only way to recover them that I've found is to reopen the nvidia-settings GUI and twiddle the numbers. Somehow that will trigger the thing to reapply those settings.
Is there some reason you can't set these params from xorg.conf? Sure, it is nice to be able to override them on a per-user basis, but they sure don't make it easy.
And you'd think he'd have lots to spare.
If you sell only 1 track, yeah, it does cost more than 65 cents per track to create (unless it's all done by volunteers). Can you honestly claim that the albums that go platinum cost more than 65 cents a track?
Overall, a given album may or may not cost more than 65 cents per track to create. The median album probably costs more, because more than half the albums made probably do poorly. On the other hand, the few that do really well pay for the losers.
Not that I expect them to do this, but say Apple decided to change the iTunes policy and sell all tracks for 25c. Would you be completely unable to find good music on Apple's site? You'd probably find no britney spears or john coltrane, OTOH there are thousands of extremely talented artists who would love to have their stuff up on iTunes, even at only 25c a track.
I hope any price increase drives more people to p2p networks. I don't think copyright infringement is a very serious crime, and would love to see the music and film industries get a rude awakening.
Russian Mafia or RIAA... Russian Mafia or RIAA... damn. This is a hard choice.
Well at least the Mafia is honest about being criminals. They get my dollars!
It's not theft though. Theft implies that the original owner is deprived of something. This is copyright infringement. It's different. Other than that, great post!
Will it, or any other motherboard, really, truly, fully support Linux anytime soon?
I'm strongly considering buying the pcHDTV HTDV card even though I don't really care about watching HDTV. Why? Because it's designed for Linux.
This weekend I had to haul a 5ish year old SB Live card out of an old server and install it on a new machine, because the onboard sound card on the new nForce2 motherboard wasn't properly supported in Linux.
I think there's a huge untapped market for hardware that's fully open. It doesn't even need to be the latest and greatest stuff. My SB Live is a prime example. If someone were selling new sound cards with a 5-year-old feature set, but with completely open hardware and APIs I'm sure they'd do great. Same with network cards and even graphic cards. Sometimes full support is more important than performance. Linux users may only be 1% of the market, but that market share is growing.
Firstly, most people wouldn't care at all. Secondly, TiVo has been doing it for years, and although the *potential* for them to do evil things exists, it just hasn't manifested itself.
Having your TiVo spy on you is kinda like having your mom spy on you. Sure, she could potentially embarrass you and do all kinds of other awful things, but you're pretty sure she won't, so you don't bother to hide things from her.
Besides, if the remote-monitoring bothers you *you can opt out!*
Yup, statically typed languages are superior because nobody would *ever* cast anything. They especially would never cast from one type to an unrelated type.
I agree that there is some use to the "sanity checking" that statically typed languages give you, but that type checking can easily be rendered useless when someone casts from one type to another. Believe me, that can be a royal PITA. I've had to spend hours trying to understand why I was seeing meaningless results coming out of a program before discovering that someone was doing a cast from a foo_response_t pointer to a struct foo_response pointer. The two were similar, but not identical, and the results were completely evil. Of course, most statically typed languages are weakly typed (i.e. the variable defines the type, not the object to which the variable refers). Because of that, I wasn't able to look at the object and say "hey, that's not really a struct foo_response!".
As for web pages, I think interpreting broken pages in the way that the author probably intended is the right behaviour, with two caveats. First, obviously, is security. The browser can decide that an unclosed table tag was probably supposed to be closed at a given point in the document without risking any security issues, but the same can't be said for Javascript code. Secondky, I think the user should be warned that the browser is interpreting broken code, so that if the browser guesses wrong, the user has some notion of *why* things are not working right.
I got a Motorola V600 phone from AT&T because it had bluetooth. Unfortunately, Apple never got iSync over Bluetooth working with the phone. I've heard that the phone doesn't properly comply with bluetooth specs, but I'm still really surprised that a year later, the only way I've found to get iSync working is to buy a USB cable. Kinda defeats the whole bluetooth feature.
If I download "Britney.mp3" at what stage is "Jive records", the copyright holder, deprived of anything? They still have all their money, they still have all the recordings, they have not been deprived of anything.
What you're doing is depriving the copyright owner from the opportunity to make *more* money. All your hand-waving about "in effect", and "legitimate sales (money)" won't cut it. That definition of theft, no matter how broad it is, doesn't include copyright infringement.
If it did, then is libel or slander theft? If you claim that Britney is a heroin addict and that she funnels money to Al Qaeda, are you committing theft? You're depriving her record label of sales, aren't you? That's all your definition of theft seems to require.
What if you give her album a really bad review? That could reduce its sales. Is that theft?
A key clause of every definition of theft includes depriving other people of something. You can't get away from that, and the "something" isn't a theoretical future benefit, it's a tangible asset. They had it, they don't have it anymore.
I have an iBook, and much as I love OS X, sometimes I just need Linux. Apparently there was just a Gnoppix release for PPC. All the KDE live CD releases I can find are anywhere from 9 months to 1.5 years old.
Intuitive to you maybe. I prefer the OO syntax.
But anyhow, the point wasn't whether Rython's list comprehensions or Ruby's block-based iterators were better, it was that Ruby blocks allow you to do pre and post block operations, like opening and shutting a DB connection.
If you like seaside, take a look at Borges. I'm pretty sure it's a reimplementation of seaside in Ruby (and think it might have been done by the same ppl who did seaside).
How do you run that Hello World app in smalltalk? Do you need to have the environment running, and have to type it into an interpreter window, or can you have a script starting with a "shebang" line that looks like the following?
I've tried Squeak, and that's the part I couldn't figure out. If all I want is a script, a little executable program I can have sitting on its own in a "/home/me/bin" directory on my machine, can I do that?
I'm not completely familliar with the DBI code, I haven't used it in a long time, but it's a really good example of how things should work. I imagine it's written something like:
Hmm, slashdot won't do the indentation right, but that's what I'm aiming at. "ensure" is like "finally" in Java. It's always called, so in this case, it makes sure the dbh is always properly disconnected. The errors would probably be handled more cleanly than that, but I hope you get the idea. I found a site with more info on using the DBI that might answer your question better.
Psst. Python people -- how do you get slashdot to properly indent your python code snippets?
Is that what LAMP means? I'd always wondered.
Tis true, that this demo didn't use any of the above, but it can. Ruby works much better on a POSIX platform than Windows, but it does work very well on Windows. Linux is no problem. It works fine with Apache, either as CGIs or using mod_ruby. It doesn't use PHP/Python/Perl, that's true, but someone else suggested that the P in OnLAMP was for Postgres, which works great with Ruby.
In the end though, you do have a point.
And while you're mentioning _why_'s stuff, there's also the RedHanded Ruby blog:
http://redhanded.hobix.com/
If so, it seems to leave the db handle, and the cursor handle dangling. That was the main point I was making, is that when wrapped in a block, these things are cleaned up for you when you're done. Other than that though, this is basically a good Python translation of what the Ruby code was doing (although the Ruby version is database-independent, I imagine Python also has a DB abstraction layer).
Btw, how'd you get the indentation right? Manually inserting entities?
Smalltalk is great and all, but it's not so easy to write a "hello world" script in Smalltalk, at least in my limited experience. This isn't a problem with Smalltalk, it's just that the two were intended for different things.
Ruby shares its OOness with Smalltalk, but the environment and runability of it comes from Perl. It's much more of the standard "write a script, then pass the script to the interpreter" kind of a language.
Once you get used to the idea of passing blocks of code around, you'll love it, and won't be able to go back to Python... er... I mean, won't be able to go without it.
The canonical example is the iterator. Given an array pets containing ["dog", "cat", "fish"]:
Will return
dog
cat
fish
If you want to print out the uppercase versions
Or if you want to add some text:
Big deal, right? Not much different from a for loop. But blocks are amazing when dealing with things like a database. You can put all the setup, teardown and error-handling code in a method that's hidden from the user, and all they have to do is pass in the block they want the DB object to execute:
Unfortunately, slashdot eats my indentation, but fortunately, Ruby not being as picky about whitespace as *some languages*, that doesn't matter. Note that all that code is wrapped in a DBI.connect() call, which connects before it starts executing the block, and disconnects after. There's no "close" call required, it's all wrapped up for you.
Yeah, wasn't one of the promises of a PDF-based display manager that the entire system would be vector-based, not pixel-based, so resolution wasn't important? It's sad that I have more control over those things in Windows and Linux. Heck, the ultimate for that was OS/2. In OS/2 it was sort-of disturbing. When you changed the resolution nothing changed size, you just had higher/lower res icons, fonts, etc.
Anyhow, my eyes can handle higher than 100dpi without difficulty, afterall paper has much higher than 100dpi.
Speaking of resolution, I'm more excited by higher resolution than a speed bump. They need a speed bump, true, but 1280x854 in a 15 inch screen is relatively low resolution compared to the offerings by Dell. For a company that likes to market to graphic artists, you'd think they'd try to sell an ultra high DPI display.
The difference is that in a grocery store, people don't come in, take pictures of the products, then leave. Instead, they actually deprived the store of a product that the store was then unable to sell. That's why copyright infringement and theft are not the same.
I wouldn't be surprised if copyright infringment hurts the record companies a bit. On the other hand, nobody has ever actually proven it does. It may actually be the reverse. It could be that it ends up as advertising and that people end up buying more than they otherwise would have. But right now, that's a big unknown.
Even if it can be proven that Joe Blow having Gigli.mpg shared from his computer actually cost the record company $100 in lost sales, I still wouldn't say that Joe Blow deserves to be punished. The idea of "intellectual property" is fundamentally wrong. I've never seen any proof that copyright or patents actually help the public more than they hurt it. Drug companies claim that patents result in new drugs... but what if that drug is Viagra? Is that a benefit for the public or just a cash cow for the company? And what if the drug is actually useful, like an AIDS drug. Is it a benefit to the public to prevent other companies from saving people's lives while the patent is in force?
Music existed before copyright. Penicillin was invented without the assistance of patents. Current IP laws only serve to give more power to huge corporations and take it away from individuals. Copyright infringment isn't piracy, it isn't theft, and it hasn't been proven to necessarily hurt the infringed party.
That's one thing that people often forget / ignore. Tags are often put in plastic sleeves and can be removed and reprogrammed and slapped on another box / pallet later.
Like you said though, the technology is in its infancy. The problem isn't that there is no standard, the problem is that there are lots of standards, and lots of "additions" to those standards. It's almost like the early days of the web. The tags are the web pages, and the readers are the web browsers. Some "graphic designer" may use a <blink> tag which shows up in Netscape browsers but not in Mosaic.
The companies that make both tags and readers tend to be the worst offenders. They may propose a standard, but it's too easy for them to violate it since the tag team and the reader team both twiddle their products. The purely tag and purely reader companies do a much better job of publishing and adhering to standards.
It's a moving target, and Wal*Mart would be dumb to latch on to any one given tag type or or protocol standard that's currently out there. But Wal*Mart is smart to get in the game early. When all the kinks are worked out, not having to hand-scan every item entering or leaving a warehouse is bound to save lots of dollars.
Copyright infringement != theft
Poor Noone! But they say Noone lives forever!? It's also strange, Noone doesn't seem like a very Chinese name...