I like having the safety of knowing that if I'm having a really unlucky day and somebody tries to hijack my plane, I'm well-equipped to do something about it. If you're okay with not, that's entirely your call.:)
You know, I used to fly a lot and always carried my leatherman. I would often fantasize a hijacking and know that I, at least, had some weapon with which I could defend myself. It made me feel better to be prepared for anything.
Then the hijackers came, and the government decided they should win, so now I can't defend myself. While it may be a nice day to be one of the ignorant majority who doesn't think about how things actually work, it's unpleasant for those of us who realize that disarming law-abiding citizens doesn't do a lot to keep criminals from committing their crimes.
* Unbuffered queries
- When you're returning a result set that might be (literally!) gigabytes in size, storing the results in RAM is unfortunately, not an option.
Sounds like a cursor. It's as buffered as you want it to be.
* MYSQL's optimised count() function.
- "Select Count(*) from table" is very fast on mysql due to internal jiggery-pokery. Postgres is a touch slower unfortunately.
When I've needed this, I've just determined the count in a more optimized way. I've done this with tens of millions of rows in such a way that returned roughly instantly. There are talks of optimizations to this, but the reason it works the way it does makes a lot of sense considering MVCC and the isolation levels it provides.
* Insert LOW_PRIORITY - No equivalent in PG
I have no idea what this could mean.
* phpmyadmin
- phppgadmin is nice, but still missing a few nice things (renaming table fields, or changing data types, for example)
Have you compiled a list of what's required to make it acceptable for you?
* mysqldiff
- An application that takes one database structure, compares it against the current database structure, and outputs the SQL statements required to 'upgrade' the current DB structure to the 'new' DB structure.
That sounds rather seductive, but not terribly useful. I can write my alters as I make changes, but I really can't expect a tool to generate the quereis required to migrate my data based on the semantics of the changes I made. We usually just create migration scripts as we go to deal with the schema and data at the same time. This does seem like a nice tool to get such a script started, though.
About crypt() vs MD5, I don't think that they make much different when it comes to cracking actual passwords, all MD5 does is allow you to use longer passwords, it doesn't enforce it by any means. If your password is in a dictonary, no matter what hashing algo you use, I can brute force it in a few seconds.
Uh, no. The last time I used OpenBSD, it gave the choice between crypt, md5, and multiple rounds of blowfish. In the blowfish model, there was a user class based configuration entry that specified how many rounds of blowfish to perform (2^n rounds for a given value of n). Turning it up just a little on that machine made for a root password that took 5 or 10 seconds to validate. i.e. just to do enough iterations of blowfish to find the match, it cost 5 to 10 seconds. It took twice as long for every value of n. On that particular machine, it wouldn't be hard to have the amount of time it took to validate a password exceed the password change policy. That gives plenty of room to just turn it up on a faster machine.
So yeah, I'll send you an eight character password (all lowercase ASCII, even) blowfish password from an OpenBSD box. You can go ahead and tell me what it is a few seconds later.:)
I'm talking about atomicity. You can't make a stored procedure that can atomically store my data.
Another example from my current application:
I've got something like six rows of state for every entity I maintain (something around 2 million currenetly). Those six or so rows represent the state (three or four columns) of six different feature on the device I'm dealing with.
The SQL to do this is pretty straightforward:
start transaction insert/update device_table [...] where dev_id = 83284842 insert/update state [...] where dev_id = 83284842 [one for each different type of state] commit
That's a pretty simple one, but I'm not sure how you'd accomplish it with an SP.
Even less-so when you consider that the actual transaction *may* perform an insert or update in up to five or so tables, conditionally, depending on whether stuff changed or not.
Because as soon as you rely on an external process to maintain data integrity, you're bound to fall prey to some sloppy programmer who does not understand the data relationships and will not properly maintain the data integrity.
This doesn't make sense. At my last job, I built what's essentially an ERP system. We did order capture and processing. An order was basically the following:
* billing address
* shipping address
* list of one or more line items
* list of one or more payment methods
* detail on how much each method pays
[more stuff]
OK, make me a stored procedure that can take this kind of structure all at once and do all the appropriate inserts/updates.
I had a design that made it quite easy to add new concepts to the order object and store, retrieve, and update it atomically without any one person having to know about all of the elements that might make up an order.
There are many reasons to use them. Performance is always one of the first reasons that people give. When we have applications that run in our enterprise, it is very easy to update a stored procedure if you find a problem.
Wow, that almost sounds like a bug. I hope you have a good process around that.
That's where I've always had a problem. Rolling out a new version of my code requires some DB support. The DB support has to be synchronzied and sometimes reversable. When dealing with stored procedures, there are two simultaneous code pushes that must occur during the same schedule. We have the code that updates our servers, and the code that code relies on in the database.
Nowadays, we have a package of code that goes out which may require some schema changes or a bit of migration, but that's about it.
Personally, I rarely put SQL commands in my code. I leave it all in the procedures on the server....and how do you access those commands? What I did was create a language that allows you to express a query in pretty much plain SQL, define formal inputs and outputs (with types) and generates a class to interface that particular query.
Instantiating the class in code looks like dealing with any other class. You get an instance, call a few setBlah methods with the appropriate types, and tell it to go. It validates you provided enough parameters, and submits the query for you.
It acts a lot like stored procedures, except they act more like application code, *and* you can chain them together transactionally.
I built this abstraction layer with the intention of using it for accessing stored procedures originally...however, I found that the DB I was using wouldn't allow me to call more than one SP in a transaction. That was an immediate show-stopper.
SQL 2005 will allow the use of C# in stored procedures which should increase their usefulness.
Wow, not to me. All that does is make it so you can never ever use a better database. Our current application runs on SQL Server, but we have customer requirements to run on Oracle. Good luck with that when your DB has to run C# application code.
In a team environment it is easy to have someone work on the procedures while you work on the code. (I know this can be done with interfaces and classes, but this is also very convenient)
Sure, and on my team, the DB guy can write and maintain the classes in this language I made without knowing the language the rest of the application is written in (another original design decision). We end up doing most of them ourselves, though.
Actually, i recall fiddling around with a mac once.. I seem to remember that typing "LS" would result in the same thing as "ls", but if you typed the direct path to it (/bin/LS (i think) instead of/bin/ls) it would say it wasn't found. Also if you were in the same directory as all the executable commands, sometimes it would recognize them in uppercase, sometimes it wouldn't.
It's really strange, and followed no reason.
You've got this backwards and it makes absolute perfect sense:
HFS+ does not distinguish case. open(2)/stat(2)/exec(3)/etc... would not when used on an HFS+ partition. It does, however, remember case. tcsh knows that/bin/ is in my path, and ls is in/bin, so it hashes ls to/bin/ls so it knows what to do. There is no hash for LS, so it'll fail if you try to run it. However, if you type/bin/LS, then exec* will open exactly what you asked for, and execute it. The open will open the file with the case insensitive match.
As far as being in the same directory, that would only apply if you have . in your path (you don't, do you?)...but the same basic rules would apply.
BTW, I like case sensitivity, but given the rules, the behavior is expected.
That's your minimum airspeed required to maintain lift. If you're going slower than that, you'll begin to fall.
Also, how many mph is 120 knots? or 45?
Well, according to google (120 knots in miles per hour), 120 knots = 138.093534 miles per hour.
Doesn't seem to be much of a mile/cost benefit there.
Depends on how you look at it. I don't get to go over 100Mph when I drive to my grandma's house down 101. It ends up being something like a five hour drive depending on traffic and road conditions. Now, let's say wind's good and all, and I'm doing about 125Mph in a straight line with no traffic all the way there. That could get close to cutting my travel time in half. It'd certainly make for a less stressful and more scenic trip as well.
Re:the protection of NAT
on
IPv6 is Here
·
· Score: 2, Insightful
of course, if we all have ip addresses and are directly on the internet, dont we loose the nat protection for all our windows os ! i depend on my linksys to save me from the internet!!
It just amazes me that so many people think that NAT provides some kind of protection. Your firewall provides protection. An egress-only firewall filter provides the same ``protection'' that people think they get from NAT, but makes it far easier to get all of your P2P type services working when you have more than one computer.
Quick review:
NAT (PAT) just causes communication problems, many of which seem convenient from a security point of view. Its benefit is that it provides an easy way to work around not having enough IP addresses.
Your firewall keeps stuff you don't want to pass into or out of your network in or out of your network.
I don't see how governments "wasting" money on paying people to write software or do any other job is a bad thing. The government should be more than happy to spend money on commercial software if it suits their needs. Or pay people to write it for them.
It's nice that they're using OSS but pretending it's not going to result in less jobs is silly.
I pay my government to pay you for the software you write. Since the government works for me[0], why in the hell should they be allowed to pay people to write something I can't have access to?
This is a rather short-sighted argument. There's still a need for specialty software, but there is *NO NEED* to continuously reproduce the same stuff in order to preserve your job or to keep it from the people who paid for it.
Write something that doesn't already exist, let the rest of us (and other departments) benefit from it, and move on. Don't pretend like you can't work unless you're reproducing perfectly good software every day.
I mean, honestly, I can't believe you're justifying having the government *not* use OSS because it means you don't get to produce a clone of some OSS project and make money off of it. It's this mentality that keeps our government slow and expensive.
I also kept logs - and that was my undoing. I was too busy focusing on the numbers coming out of the logs to have my shopping cart completely up to date.
Haha! I did the same thing:
http://bsdboy.west.spy.net/itunes/
Plus a WAP version, both of which were predicting the moment that the 100Mth song would be sold.
My wife and I were fighting to get the cart up...hopefully she made in time (mine never came back).
GIF files are often a bit smaller than the equivalent PNG.
I've only seen one case where a GIF is smaller than the equivalent PNG[0], and that was with a 1 pixel image which has no practical use in a standard web site, anyway.
If you have another counter-example, I'd be interested in seeing it.
[0] OK, so you can play with compression parameters in PNG and essentially turn off compression, leaving you with a very big file, but I'm referring to optimal compression.
Im often ammused at people who seem to think vi and grep etc is all they need for programming. And are too stubborn to look at anything else. Pretty much 100% of the time these people have never tried VS, and it shows.
Oddly enough, I tend to be one of those guys who annoys people around the office who show me some crazy new feature in some cool IDE they're trying to learn, and I show them how I've been doing it in vim.
Tab completion? I tried it, but I much prefer ^P and ^N for forward and backwards searching through my symbol completions in general. I'm not big on the wavy lines thing, but I use quickfix mode with java with ant integration to have vim help me fix up any whole-project problems I create with ``minor'' changes.
And when debugging, you can drag the current execution spot up a few lines, change some code, then let it run over the spot again without re-compiling or restarting the process! Thats fuckin unbelievable.
OK, I admit it, sometimes I use xcode (formerly project builder) when doing objective C work. It does all this kind of stuff as well as automatic compile farms. Of course, the UI isn't required once you get your project set up.
The development tools under windows blow everything else out of the water.
NeXTSTEP's offerings were always superior to MS's offerings. If VS is any better than xcode in this regard, it can't possibly be significant enough to make a difference.
I still use vim for any work I do that doesn't have an actual GUI. I'm still more productive than anyone on my team who uses an IDE. I do have an emacs user on my team who is embarassing me at times, though. She's late for work today, though, so I have a competitive advantage.
Re:I don't actually care hugely about performance
on
Java Faster Than C++?
·
· Score: 1
there's no well-supprted Obj-C compiler that tagets x86 (that I know of).
gcc's been The objective C compiler for as long as I've known about it.
I do think they're going to sell a lot of them, but my slimp3 does stuff I don't see this doing...in particular, it allows more than one person to manage the music that's going on in the house. When we're listening to music, it's rare that only one of us is contributing to the play list. My wife will add some tracks, I'll add some tracks, maybe a kid will add a couple...
Before the slimp3, I had an ad-hoc system with ssh and a NetBSD box hooked up to the stereo that did it. We'd always fight for control of the thing. I'd like to avoid that (as well as having another machine that just does the music since we currently run the slimp3 server on a Solaris box in another room and operate it from our powerbook/ibooks).
I kinda dig the UI on the slimp3, too. It's nice being able to see what's going on.
Now, a remote controlled itunes to operate the thing might make things better.
Five points for excellent use of buzzwords. I would say compress messages older than 90 days and save them.
I get something like 50% compression on all of my mail with my zlib patch to cyrus. This does pretty good stuff for me. I batch compress them nightly since decompression comes at a very low cost, there's no need to wait 90 days.
The cyrus guys have rejected my patch a few times because ``disk is cheap.'' Personally, I don't understand the sentiment. Disk is cheap, but it's twice as cheap with 50% compression for people who want it. It's half as cheap for those who don't.
Will these and other instavirii (such as the windows RPC worms) affect machines behind a router.
If it's not on the same physical subnet as you, it's behind a router.
NAT does not add protection, nor does your router. Your firewall adds protection. Your firewall *may* NAT, but it's not the NAT that's protecting you. A mostly-closed ingress firewall policy provides you exactly as much protection with exactly as much effort. With egress filtering, you also prevent your computer from reporting those keystrokes back to the author (which your NAT will not in any way help you with).
Security at the hardware layer is definately important, but don't under-estimate the power of a cheap NAT router.
NAT is not a security device, it's only there to work around address limitation problems at the cost of making communication more difficult for legitimate services. What you're describing is the job of a basic firewall blocking ingres traffic.
I just wish I could turn that damn middle-click off and use it for autoscroll, and have copying of text, images and other data work ubiquitously using C-x, C-v, C-z.
C-v is quote, C-z is suspend, C-c is break (I know you had C-x there, but I'm not sure what that is, and others have mentioned it).
This paradigm makes sense on the mac with the command key since it doesn't prevent me from using the keys I need to use for terminal apps.
The extra required to cut/copy and paste when I started using macs was a bit annoying, but it didn't interfere with any apps I had, so I got used to it. It's still kind of funny watching Windows users in their ssh clients.
(Saluton, superdan!)
:)
I like having the safety of knowing that if I'm having a really unlucky day and somebody tries to hijack my plane, I'm well-equipped to do something about it. If you're okay with not, that's entirely your call.
You know, I used to fly a lot and always carried my leatherman. I would often fantasize a hijacking and know that I, at least, had some weapon with which I could defend myself. It made me feel better to be prepared for anything.
Then the hijackers came, and the government decided they should win, so now I can't defend myself. While it may be a nice day to be one of the ignorant majority who doesn't think about how things actually work, it's unpleasant for those of us who realize that disarming law-abiding citizens doesn't do a lot to keep criminals from committing their crimes.
* Unbuffered queries
- When you're returning a result set that might be (literally!) gigabytes in size, storing the results in RAM is unfortunately, not an option.
Sounds like a cursor. It's as buffered as you want it to be.
* MYSQL's optimised count() function.
- "Select Count(*) from table" is very fast on mysql due to internal jiggery-pokery. Postgres is a touch slower unfortunately.
When I've needed this, I've just determined the count in a more optimized way. I've done this with tens of millions of rows in such a way that returned roughly instantly. There are talks of optimizations to this, but the reason it works the way it does makes a lot of sense considering MVCC and the isolation levels it provides.
* Insert LOW_PRIORITY
- No equivalent in PG
I have no idea what this could mean.
* phpmyadmin
- phppgadmin is nice, but still missing a few nice things (renaming table fields, or changing data types, for example)
Have you compiled a list of what's required to make it acceptable for you?
* mysqldiff
- An application that takes one database structure, compares it against the current database structure, and outputs the SQL statements required to 'upgrade' the current DB structure to the 'new' DB structure.
That sounds rather seductive, but not terribly useful. I can write my alters as I make changes, but I really can't expect a tool to generate the quereis required to migrate my data based on the semantics of the changes I made. We usually just create migration scripts as we go to deal with the schema and data at the same time. This does seem like a nice tool to get such a script started, though.
About crypt() vs MD5, I don't think that they make much different when it comes to cracking actual passwords, all MD5 does is allow you to use longer passwords, it doesn't enforce it by any means. If your password is in a dictonary, no matter what hashing algo you use, I can brute force it in a few seconds.
:)
Uh, no. The last time I used OpenBSD, it gave the choice between crypt, md5, and multiple rounds of blowfish. In the blowfish model, there was a user class based configuration entry that specified how many rounds of blowfish to perform (2^n rounds for a given value of n). Turning it up just a little on that machine made for a root password that took 5 or 10 seconds to validate. i.e. just to do enough iterations of blowfish to find the match, it cost 5 to 10 seconds. It took twice as long for every value of n. On that particular machine, it wouldn't be hard to have the amount of time it took to validate a password exceed the password change policy. That gives plenty of room to just turn it up on a faster machine.
So yeah, I'll send you an eight character password (all lowercase ASCII, even) blowfish password from an OpenBSD box. You can go ahead and tell me what it is a few seconds later.
Don't mix up data integrity with business logic.
I'm talking about atomicity. You can't make a stored procedure that can atomically store my data.
Another example from my current application:
I've got something like six rows of state for every entity I maintain (something around 2 million currenetly). Those six or so rows represent the state (three or four columns) of six different feature on the device I'm dealing with.
The SQL to do this is pretty straightforward:
start transaction
insert/update device_table [...] where dev_id = 83284842
insert/update state [...] where dev_id = 83284842
[one for each different type of state]
commit
That's a pretty simple one, but I'm not sure how you'd accomplish it with an SP.
Even less-so when you consider that the actual transaction *may* perform an insert or update in up to five or so tables, conditionally, depending on whether stuff changed or not.
Because as soon as you rely on an external process to maintain data integrity, you're bound to fall prey to some sloppy programmer who does not understand the data relationships and will not properly maintain the data integrity.
This doesn't make sense. At my last job, I built what's essentially an ERP system. We did order capture and processing. An order was basically the following:
* billing address
* shipping address
* list of one or more line items
* list of one or more payment methods
* detail on how much each method pays
[more stuff]
OK, make me a stored procedure that can take this kind of structure all at once and do all the appropriate inserts/updates.
I had a design that made it quite easy to add new concepts to the order object and store, retrieve, and update it atomically without any one person having to know about all of the elements that might make up an order.
There are many reasons to use them. Performance is always one of the first reasons that people give. When we have applications that run in our enterprise, it is very easy to update a stored procedure if you find a problem.
...and how do you access those commands? What I did was create a language that allows you to express a query in pretty much plain SQL, define formal inputs and outputs (with types) and generates a class to interface that particular query.
Wow, that almost sounds like a bug. I hope you have a good process around that.
That's where I've always had a problem. Rolling out a new version of my code requires some DB support. The DB support has to be synchronzied and sometimes reversable. When dealing with stored procedures, there are two simultaneous code pushes that must occur during the same schedule. We have the code that updates our servers, and the code that code relies on in the database.
Nowadays, we have a package of code that goes out which may require some schema changes or a bit of migration, but that's about it.
Personally, I rarely put SQL commands in my code. I leave it all in the procedures on the server.
Instantiating the class in code looks like dealing with any other class. You get an instance, call a few setBlah methods with the appropriate types, and tell it to go. It validates you provided enough parameters, and submits the query for you.
It acts a lot like stored procedures, except they act more like application code, *and* you can chain them together transactionally.
I built this abstraction layer with the intention of using it for accessing stored procedures originally...however, I found that the DB I was using wouldn't allow me to call more than one SP in a transaction. That was an immediate show-stopper.
SQL 2005 will allow the use of C# in stored procedures which should increase their usefulness.
Wow, not to me. All that does is make it so you can never ever use a better database. Our current application runs on SQL Server, but we have customer requirements to run on Oracle. Good luck with that when your DB has to run C# application code.
In a team environment it is easy to have someone work on the procedures while you work on the code. (I know this can be done with interfaces and classes, but this is also very convenient)
Sure, and on my team, the DB guy can write and maintain the classes in this language I made without knowing the language the rest of the application is written in (another original design decision). We end up doing most of them ourselves, though.
Actually, i recall fiddling around with a mac once.. I seem to remember that typing "LS" would result in the same thing as "ls", but if you typed the direct path to it (/bin/LS (i think) instead of /bin/ls) it would say it wasn't found. Also if you were in the same directory as all the executable commands, sometimes it would recognize them in uppercase, sometimes it wouldn't.
/bin/ is in my path, and ls is in /bin, so it hashes ls to /bin/ls so it knows what to do. There is no hash for LS, so it'll fail if you try to run it. However, if you type /bin/LS, then exec* will open exactly what you asked for, and execute it. The open will open the file with the case insensitive match.
It's really strange, and followed no reason.
You've got this backwards and it makes absolute perfect sense:
HFS+ does not distinguish case. open(2)/stat(2)/exec(3)/etc... would not when used on an HFS+ partition. It does, however, remember case. tcsh knows that
As far as being in the same directory, that would only apply if you have . in your path (you don't, do you?)...but the same basic rules would apply.
BTW, I like case sensitivity, but given the rules, the behavior is expected.
"stall speed of 45 knots"
That's your minimum airspeed required to maintain lift. If you're going slower than that, you'll begin to fall.
Also, how many mph is 120 knots? or 45?
Well, according to google (120 knots in miles per hour), 120 knots = 138.093534 miles per hour.
Doesn't seem to be much of a mile/cost benefit there.
Depends on how you look at it. I don't get to go over 100Mph when I drive to my grandma's house down 101. It ends up being something like a five hour drive depending on traffic and road conditions. Now, let's say wind's good and all, and I'm doing about 125Mph in a straight line with no traffic all the way there. That could get close to cutting my travel time in half. It'd certainly make for a less stressful and more scenic trip as well.
of course, if we all have ip addresses and are directly on the internet, dont we loose the nat protection for all our windows os ! i depend on my linksys to save me from the internet!!
It just amazes me that so many people think that NAT provides some kind of protection. Your firewall provides protection. An egress-only firewall filter provides the same ``protection'' that people think they get from NAT, but makes it far easier to get all of your P2P type services working when you have more than one computer.
Quick review:
NAT (PAT) just causes communication problems, many of which seem convenient from a security point of view. Its benefit is that it provides an easy way to work around not having enough IP addresses.
Your firewall keeps stuff you don't want to pass into or out of your network in or out of your network.
I don't see how governments "wasting" money on paying people to write software or do any other job is a bad thing. The government should be more than happy to spend money on commercial software if it suits their needs. Or pay people to write it for them.
It's nice that they're using OSS but pretending it's not going to result in less jobs is silly.
I pay my government to pay you for the software you write. Since the government works for me[0], why in the hell should they be allowed to pay people to write something I can't have access to?
This is a rather short-sighted argument. There's still a need for specialty software, but there is *NO NEED* to continuously reproduce the same stuff in order to preserve your job or to keep it from the people who paid for it.
Write something that doesn't already exist, let the rest of us (and other departments) benefit from it, and move on. Don't pretend like you can't work unless you're reproducing perfectly good software every day.
I mean, honestly, I can't believe you're justifying having the government *not* use OSS because it means you don't get to produce a clone of some OSS project and make money off of it. It's this mentality that keeps our government slow and expensive.
OT: I absolutely hate people who seem to think .tgz is just a substitution for .tar.gz, it's not!
What's this supposed to mean? gzip thinks they're the same:
dustin2wti:/tmp 531% touch myself
dustin2wti:/tmp 532% tar cf - myself | gzip -9c > blah.tgz
dustin2wti:/tmp 533% ls -l blah.*
-rw------- 1 dustin wheel 116 15 Jul 15:58 blah.tgz
dustin2wti:/tmp 534% gzip -d blah.tgz
dustin2wti:/tmp 535% ls -l blah.*
-rw------- 1 dustin wheel 10240 15 Jul 15:58 blah.tar
I also kept logs - and that was my undoing. I was too busy focusing on the numbers coming out of the logs to have my shopping cart completely up to date.
Haha! I did the same thing:
http://bsdboy.west.spy.net/itunes/
Plus a WAP version, both of which were predicting the moment that the 100Mth song would be sold.
My wife and I were fighting to get the cart up...hopefully she made in time (mine never came back).
Too bad the Apple Newton didn't come with WiFi... ;)
The very first time I saw wireless ethernet was on a Newton.
GIF files are often a bit smaller than the equivalent PNG.
I've only seen one case where a GIF is smaller than the equivalent PNG[0], and that was with a 1 pixel image which has no practical use in a standard web site, anyway.
If you have another counter-example, I'd be interested in seeing it.
[0] OK, so you can play with compression parameters in PNG and essentially turn off compression, leaving you with a very big file, but I'm referring to optimal compression.
Combined with the fact that you can't actually see beyond your desk with two huge monitors in your way, how would this be practical for most people?
The cube wall isn't as interesting as what is on my display.
Don't forget 802.11d, which is country code, channel, and power mappings. Of course.
Im often ammused at people who seem to think vi and grep etc is all they need for programming. And are too stubborn to look at anything else. Pretty much 100% of the time these people have never tried VS, and it shows.
Oddly enough, I tend to be one of those guys who annoys people around the office who show me some crazy new feature in some cool IDE they're trying to learn, and I show them how I've been doing it in vim.
Tab completion? I tried it, but I much prefer ^P and ^N for forward and backwards searching through my symbol completions in general. I'm not big on the wavy lines thing, but I use quickfix mode with java with ant integration to have vim help me fix up any whole-project problems I create with ``minor'' changes.
And when debugging, you can drag the current execution spot up a few lines, change some code, then let it run over the spot again without re-compiling or restarting the process! Thats fuckin unbelievable.
OK, I admit it, sometimes I use xcode (formerly project builder) when doing objective C work. It does all this kind of stuff as well as automatic compile farms. Of course, the UI isn't required once you get your project set up.
The development tools under windows blow everything else out of the water.
NeXTSTEP's offerings were always superior to MS's offerings. If VS is any better than xcode in this regard, it can't possibly be significant enough to make a difference.
I still use vim for any work I do that doesn't have an actual GUI. I'm still more productive than anyone on my team who uses an IDE. I do have an emacs user on my team who is embarassing me at times, though. She's late for work today, though, so I have a competitive advantage.
there's no well-supprted Obj-C compiler that tagets x86 (that I know of).
gcc's been The objective C compiler for as long as I've known about it.
It's $70 cheaper than the SliMP3
I do think they're going to sell a lot of them, but my slimp3 does stuff I don't see this doing...in particular, it allows more than one person to manage the music that's going on in the house. When we're listening to music, it's rare that only one of us is contributing to the play list. My wife will add some tracks, I'll add some tracks, maybe a kid will add a couple...
Before the slimp3, I had an ad-hoc system with ssh and a NetBSD box hooked up to the stereo that did it. We'd always fight for control of the thing. I'd like to avoid that (as well as having another machine that just does the music since we currently run the slimp3 server on a Solaris box in another room and operate it from our powerbook/ibooks).
I kinda dig the UI on the slimp3, too. It's nice being able to see what's going on.
Now, a remote controlled itunes to operate the thing might make things better.
It's certainly a cool device, though.
Five points for excellent use of buzzwords. I would say compress messages older than 90 days and save them.
I get something like 50% compression on all of my mail with my zlib patch to cyrus. This does pretty good stuff for me. I batch compress them nightly since decompression comes at a very low cost, there's no need to wait 90 days.
The cyrus guys have rejected my patch a few times because ``disk is cheap.'' Personally, I don't understand the sentiment. Disk is cheap, but it's twice as cheap with 50% compression for people who want it. It's half as cheap for those who don't.
Will these and other instavirii (such as the windows RPC worms) affect machines behind a router.
If it's not on the same physical subnet as you, it's behind a router.
NAT does not add protection, nor does your router. Your firewall adds protection. Your firewall *may* NAT, but it's not the NAT that's protecting you. A mostly-closed ingress firewall policy provides you exactly as much protection with exactly as much effort. With egress filtering, you also prevent your computer from reporting those keystrokes back to the author (which your NAT will not in any way help you with).
As someone who used to run sendmail (from the late 80's to 2002 before switching to exim) it gives you native support for UUCP
I can't speak for EXIM, but I use postfix' native UUCP support out of the box. Works great and is very easy to set up.
Security at the hardware layer is definately important, but don't under-estimate the power of a cheap NAT router.
NAT is not a security device, it's only there to work around address limitation problems at the cost of making communication more difficult for legitimate services. What you're describing is the job of a basic firewall blocking ingres traffic.
I just wish I could turn that damn middle-click off and use it for autoscroll, and have copying of text, images and other data work ubiquitously using C-x, C-v, C-z.
C-v is quote, C-z is suspend, C-c is break (I know you had C-x there, but I'm not sure what that is, and others have mentioned it).
This paradigm makes sense on the mac with the command key since it doesn't prevent me from using the keys I need to use for terminal apps.
The extra required to cut/copy and paste when I started using macs was a bit annoying, but it didn't interfere with any apps I had, so I got used to it. It's still kind of funny watching Windows users in their ssh clients.
And their cars still handle like bats out of hell. :)
While I can agree to this point, I can't trust any aspect of my safety to an operating system designed for day planners.
Luckily, there are other car vendors, so if I ever wear out my BMW and find out there aren't any non-windows models, I've got some good options.