This comment made me flash on the scene in the musical "Oliver!" where Oliver Twist asks Mr. Bumble for more gruel. "Please sir, may I have some more?"
And it is so easy now to see the american public as those workhouse boys, intellectually scrawny, minds all malnourished, forced to spend all day on the treadmills of the corporations, every so often peeking in at the big shots, feeding themselves richly on the profits but always whining about how poorly used they are.
And just in case you read this wrongly, I'm all in favor of free enterprise, but I think the kinds of corporate consolidation, monopoly and cartelling that we see now is far from being free enterprise as we need it. And the way the government and corporations are colluding is closer to communism and fascism than I'm comfortable with.
I'm a college professor type (CS) and my experience is that for notes, paper works best. If you need to draw pictures, copy equations - anything but straight text, its easier to do it on paper. Maybe someday we'll have the kind of tablet machine that will allow us to scribble on a screen and have things translated to nice text - but not yet.
For myself, the process of going to class and taking notes was an important factor in getting good grades. However, I almost never referred to those notes after taking them. It was the process of having to listen well enough, watch the blackboard, and filter it through my brain and onto the paper that mattered. Of course, not everyone's brain works the same way. (I also always took books and crosswords to class, crosswords are great for looking studious and busily note-taking.)
If you're doing computer science (IT or whatever) and do programming or computer labs, and if the school has a lab available, spend your time there as much as you can rather than on your own. You'll be able to ask people for help and (as important if not more so), offer help. Once you know a bit, the time you spend trying to help others will advance you much more than the time you spend being helped. But don't just give answers - thats a waste of time for both of you. I personally spend a fair amount of time talking to students in lab areas and I think that time is probably as important or more important than class time in many cases.
That being said, if you want/need a computer, get the best desktop you can for the money you have. If you're doing CS get one that dual boots windows and linux. If the campus IT people insist on windows only, make noise about it, talk to your professors about the problems - remember you are paying them to provide services . Also remember, They won't think so. They'll believe they're doing you a big favor by giving you anything at all.
I think something like this would be a great thing to do. And it could be interesting - I'm not sure it would be easy to find a good way to describe all the options people might want. For example, describing that you want a tiled wm vs not tiled, or an infinite virtual desktop with a hyperbolic view of the world.
I dont think it would be impossible though and (despite all the screams of "bloat") it could be feasible to set it up to read the description once and compile/link together different modules and such to produce an efficient executable which could be cached. Scripting could be enabled in any of several languages and the scripts compiled to byte code or native code for speed.
A few common configurations could be made widely available so someone having to use another persons setup could reset it dynamically to a known setup.
GWM a (sadly) deceased window manager was my favorite although I never did quite get the hang of the scripting. I got enough of it to be able to set up my windows just the way I liked, with good keybindings and not just virtual desktops, but essentially infinite virtual desktops.
GWM was very extensible and very cool. If I had a pile more time I'd spend some of it trying to get gwm to compile again.
When I'm doing serious work on my machine I often have twenty or more windows active and doing one thing or another. (Hmm, right now, even though I'm not doing anything major I have at least 10 windows open - one is rendering, one is running a program, one is monitoring the program/render by watching a log file, a web browser, three emacs windows, a mail window...). Having a window manager with virtual workspaces and virtual desktops in those virtual workspaces makes it possible to organize this and navigate easily. I've also had occasion to use very, very wide windows - on the order of a thousand or so characters and spanning multiple desktops - in database development. Not being able to do so, or being able to do so only with a lot of jiggery-pokery, can be a serious pain and impediment.
One persons "bloat" or "crackrock" (the metacity term for "whatever I don't think you should want") is another persons essential tool. I want a window manager to help me cope with the complexity of trying to do complex things - so my brain can work on the good stuff. For me, just adding more "skins" to a WM, adding yet another design for a button, adding spiffy gradients - thats bloat (albeit cheap bloat) of its own sort. Adding the ability to pan around an infinite desktop, start specific programs with keybindings i specify, use either keyboard or mouse to navigate, zoom in (like PAD++), set location markers and be able to move easily to them - thats all good stuff. Not bloat - even if you don't use it.
I currently have a procedure that iterates over every element of a two dimensional array (call it xy) and for each such element it iterates over every element of another array (call it g), and for each such element it iterates over every element in another array (call it c). n^4
There's another way to structure the code that rearranges this to iterate over all the elements of
g and then over every element in the associated c array. And then iterates in a double nested loop that didn't appear above.
There are a couple other ways to do it too, but they require substantially more code complexity and its not worth it here - there are a number of other things that currently dominate the runtime.
So I'm using the simplest one to hand. If its a problem and this ends up the bottleneck I'll worry about it then.
So, I could define a function that returns a object in a class that implements SimpleIterator : RandomArrayIterator(int a[])
with an iterator named iterator and then do something like :
for (int i : RandomArrayIterator(a) ) {... }
But the spec (yes, I did read it) implies that the result of RandomArrayIterator must be an object that defines iterator. so this is really shorthand for :
for (SimpleIterator sit = RandomArrayIterator(a).iterator() ; sit.hasNext() ; )
{ int i = (int) sit.next() ;... }
I think two things about this make me uncomfortable. First is the fact that I need a class with the right type to return from "RandomArrayIterator" which defines "iterator()",
(at least, this is the implication of section III "Semantics") then I need a class for the result of the "iterator()". (Yes, I do realize that these can indeed be the same class.) The second is the "specialness" of the defaults (which is actually the second call there "iterator()").
Since the authors are calling attention to a type of attack, not just a single attack against a single server type, it is quite appropriate that they publish it. And quite appropriate that slashdot call it to our attention.
That specific attacks are given doesn't change this as the attacks given cover a variety of platforms and software - indeed, such attacks are not limited to network service software, but might be used against software that might be considered secure (behind firewalls with limited access).
The attacks given are not likely to be of general use to network script kiddies. They might be of use to the more technically adept. might.
Its also worth noting that the authors give enough information to build one or more defenses against such attacks. And carrying their hints a bit further would almost certainly enable developers to build a class of such defenses. But for the most part these defenses would still be tailored for the specific application in question and hence a general "one patch fits all" is unlikely to help many.
And if I might be permitted a specific response. The real dipshits are those who would, for whatever reasons, put a priori constraints on what someone might or might not publish. Let enough of these (evidently Divinely Inspired) idiots have their way and no one will be able to say anything.
OK. I'll go you one further and say that Java (and c# for that matter) have done lots of non-innovation and are still nowhere near as good as Sather was a decade ago.
Sather had a mechanism to use constrained genericity to handle the problems that templates are used for - and it worked well.
Everything was an object and a member of a class - though there were two kinds of objects and that did introduce a bit of complexity.
Sather also had preconditions/postconditions/class invariants that did the "by contract" thing well and that I'll bet cut my debugging time by 75% or more - at the cost of a bit more up front thought time ("Just what is the class invariant here?")
Sather had a very, very, very nice iteration mechanism. A class could define multiple iterators (syntacticly they had to end in "!"). Since these were defined in the class they had access to class variables without any "friend" or "public"/"private" jiggery pokery. As an example, since an array was an object, it defined an iterator elts!. So if "a" represents an array the following does exactly what you'd expect:
sum:= 0; loop sum:= sum + a.elts! ; end;
would do the Right Thing.
Sather also had operator overloading (rather limited and pythonesque "a + b" translated to
"a.plus(b)"), ways to skip variable declarations in some cases, a very simple inheritance structure
and some odd syntax.
While most of these changes are quite positive, I think the iteration mechanism still could use some changes. Most simply, along with :
for (int i : C) {... }
also allow :
for (int i : C.iterator) { }
so that iterators other than the default (the SimpleIterator named "iterator") could be used.
This would not complicate the iterator syntax much and would make using different iterators easy - and thats something that is often needed.
Since the "C" above is an expression, it could be a function that returns an "Iterable" - allowing interesting hackery to provide alternate iterators using inner classes or other fun. However while I think this allows programmers to do about what they need, it does not make things exactly readable and that is a bit bothersome.
Another thing I'd like, and would like to have efficient and easy to use, is a way to iterate over the indexes of an array - in particular a multidimensional array. I get tired of doing things like the following (which I can't get to indent easily):
for (int i = 0 ; i < ilim ; i++) for (int j = 0 ; j < jlim ; j++) for (int k = 0 ; k < klim ; k++) b[i][j][k] = a[i][j][k] + 1
From the article, Mr. (Threaten to Sue Everyone to Get Rich) Sontag says :
Anything is always a possibility.
You've gotta just sit back and admire the precision, generality, and sheer wonderfulness of that statement. It says everything and nothing in five words.
"An Intellectual Carrot - the mind boggles" (From the film "The Thing From Another World")
I have just one work - a fantasy series - to recommend here :
A Song of Ice and Fire by George R. R. Martin.
This is a three volume series (so far) starting with "A Game of Thrones" - the three volumes would probably fill your month nicely. I picked up the first volume having read a very positive review, but expecting I'd read it, find it uninspired and drop it.
Instead I ended up bying the second volume before I'd finished the first - because I didn't want to have to wait - and the third volume before I finished the second. And knowing that the third volume was all that I'd get for a bit, I read the last third or so of it very slowly - rationing it out. Now I have to wait for the next volume. (Taps foot impatiently.)
Its long (each volume is 800 or so pages), filled with characters (there are pages in the back with information on who belongs to which faction, and you're likely to need them), and the story jumps from one main character to another quickly. Each chapter is told focussing on one of the main characters and the viewpoint switches with every chapter so it felt a bit fragmented until I started to put the world together - and then it just feels right, although rather frustrating sometimes.
The story told is fascinating. It would probably be more
correct to say "stories", all interwoven, often separate, but woven together to produce a real tapestry of the world Martin creates. And the world so created is compelling. Politics and war predominate and magic pays a relatively small part for a fantasy novel - but magic and the fantastic are never far away - but they do not overwhelm the story as told.
Martin managed to keep me interested (maybe obsessed is a good word) in the story and the characters. He has a talent for making the characters multi-dimensional - few of them are all good or all bad, but mixes of both. Enough to make their behavior surprising. He does have a habit of pulling rabbits out of hats - but I never knew where or how - though I did grow to expect it often enough.
Martin does not shy away from the brutal and this may disturb some people. People in this book die - lots of them - and many of them die rather, even extremely, unpleasantly. If that kind of thing bothers you - go somewhere else.
I'd also like better maps - you'll need the maps in the books often enough - I really wanted one big enough to carry with the books and that I could stick pins into to show who was where.
This is the best fantasy series I have read in a long, long time. I already think the series will end up in my list of top books (though I rarely put anything there till at least five years after I first read it). If its a choice between Robert Jordan and this, pick this.
Dan Simmons is a fantastic writer and well worth reading. Its not all that techno/geek oriented but my favorite novel of his is "Song of Kali" which has a fantastic opening page which is too long to quote here - but the opening paragraph gives a bit of the flavor :
Some places are too evil to be allowed to exist. Some cities are too wicked to be suffered. Calcutta is such a place. Before Calcutta I would have laughed at such an idea. Before Calcutta I did not believe in evil--certainly not as a force separate from the actions of men. Before Calcutta, I was a fool.
Not that many undergrad CS students are exposed to the wonders of linear programming and simplex. So, its not altogether surprising that it does not attract that much interest.
Another factor may be that until you get a ways into advanced problems most of the applications linear programming and the simplex method are pretty much cookbook these days - but most courses in linear programming are a semester long - so its hard to tell a cs major that taking a course in LP is more important than taking a course in Visual Something-or-Other.
As a professor type though, I always try to mention some of the techniques and ideas I've seen in other areas - even when not necessarily applicable to the class I'm currently teaching. This includes things like LP - but also things like cryptic crosswords, Intercal and so on. Something seen by some students as a Good Thing, by others (most, probably) as a Waste of Time.
Me, I'm going to take a look at the paper and see what I can get from it. The posted information on what is said looks very interesting indeed.
I posted something to a recent slashdot article on spam suggesting that we might be treating open relays in the wrong way.
If there were a bunch of open relays that would accept and relay mail and on the way run it through a spam filter - and instead of dropping it, just label it with "SPAM (was...) " in the subject line,
we could accomplish exactly the same thing - but without requiring the spammers to do anything.
the slashdot article
The notion of rewriting the mail (though my suggestion is more about putting a wrapper on the mail) is in the second article.
Ah, that was a bit too much of a troll - and I try to avoid trolls at a personal level when I can. So, I apologize.
I understand your experiences with the linux community and I've had similar myself. I got seriously angry and abusive email once from someone to whom I'd sent a bug fix. Go fig. Me, I try to be helpful when I can - for people having trouble with whatever system - but its not always possible and sometimes I (we all) respond a bit more rudely and condescendingly than we'd like.
I'd still suggest you give linux another look. If you think you might be spending a fair amount of time with computers, learning new systems is a good way to learn more about the systems you use.
That is, even if all you ever want to use is Windows, learn linux and macos. (There are other different OS's out there, but you're unlikely to find them somewhere where you can use them.) By doing so you'll pick up a level of abstraction which will help you in better using all the systems. And, of course, if you ever need to, you can claim you know those other systems. Similarly, even if all you expect to ever use is Photoshop, learn Gimp and any similar systems you might find.
I run linux on any computer I use that I can put linux on (sometimes not possible for administrative reasons). I like linux - it suits me fine - but I do very little word processing and only a bit of spreadsheeting (and I do wish I had Lotus Improv again). I do a lot of software development, a fair amount of web browsing and a fair amount of web page writing.
And I encourage people to use Linux. And I think people should at least consider changing. But I recognize that Linux is not for everyone. Probably not my parents. Nor lots of other people. I do encourage organizations to use linux when possible. I think if users spent the time to learn another system it would be better for them - and probably much better for the organization as they'd have more options for the future.
Do I hate Microsoft and wish that they'd just go away? No. I dislike their OS's. I dislike their Office suite (to be fair, I don't like Open Office much either). But for most people MS may be the only viable alternative - because they've already bought in to MS, learned how to use Office and Outlook and IE and all - and they're unwilling to learn anything new.
But I also feel very uncomfortable indeed with the idea that MS has a stranglehold on software. I don't want to have to pay for a Windows OS with my computer that I don't want to use. I don't want to find myself stuck with a video card that Linux can't use because the only drivers are for Windows. I really dislike getting MS Word format email. I get very frustrated when there is software written for Windows and the Mac and only a second rate version for Linux (though more and more frequently the Linux version is better than the others). I think the "update office every year" marketing ploy is pretty sleazy (and very clever). I get quite annoyed at the web pages that work on IE only. I've heard personally from people whose companies were destroyed by MS's corporate slash and burn strategies. And so on. And the assumption that "All the world's running Windows" helps to create just those situations.
So, yes. I admit it. Over the years I've developed a dislike of MS which has become fairly intense. And lots of linux people I know have come to feel the same way for much the same reasons. And I've also come to find that most seriously pro-MS people have a stake in MS of one sort or another. Whats yours?
Now - to respond to your comments :
company doesn't have to choose to use microsoft products Not true in most cases. Most of the time companies have already purchased computers with Windows and Office installed and hired some MSCE types to run them. Changing systems would piss off the MSCE guys big time so they'll resist like hell. It would scare most of the users so they'll resist like hell. Microsoft will resist like hell. The organization will have to worry about changeover costs. If you say they don't have to choose MS, you demonstrate just a bit of ignorance. The pressures to use MS are immense - almost to the point where there is no viable choice.
MS is easy to use Completely untrue. (I hope I'm not quoting out of context - but I'm not sure what the context was - your sentence got a bit confused there.) With the possible exception of the Mac, most computer systems are difficult to use and to learn. But all the users are taught MS by default (because MS has an effective monopoly on end user computer software), so users think its easy. They only remember enough of the learning process to know they don't want to do it again.
The users are your number one enemy in terms of security
This was worth repeating.
But you should also know that users have needs and wants - some legitmate, some not so much, but if someone in the organization is not responsive they'll start looking for ways to do it themselves and this is a very good way to get insecure.
"responsive" (above) does not mean "I'm the sysadmin and you have to do things my way." Making users angry is probably going to make them try to break things even faster. Very very hazardous with knowledgable users - but hazardous enough even with average users.
Case in point: I worked for a university with a seriously paranoid network admin. A bit of paranoia in a network admin is a good thing. But there can be too much of a good thing. He had a very tight firewall - no telnet, ssh, pop and so on - which meant (among other things) that there was no way to read your mail from off campus - not even a webmail type application. Since there were a number of sites on campus that ran web servers, port 80 was open. So anyone who knew much of anything had sshd running on port 80 on some convenient machine. While sshd is probably reasonably secure, you can just imagine running telnetd in the same way. This got closed up after a while. About a week later it was closed I was told that people had set up two or three other fun ways around the firewall, but as they may still be there and in use, I'll not mention them. So, by trying to increase security and by not listening to legimate needs of the users he managed to actually seriously weaken security.
I can see it now. They'll make it a rule that all the candidates must be checked out and approved by appropriate groups - like the American Bar Association gets to check out nominees to courts.
And the "appropriate groups" will undoubtedly primarily include major corporations with clearly established expertise in the field - you can make your own list, this is/. after all. Maybe the ACM and IEEE Computer Society will get a vote each (as long as they behave and don't vote against the others).
And of course, each major party will have its own requirements or the nominee will end up in congressional approval limbo. The Republicans will undoubtedly check out their views to ensure they're big on long, exclusive and seriously enforced copyrights, patents for software even of the simplest sort, restrictions on anything they find does not meet the right approval of the religious right. The Democrats will make sure that the nominee is in favor of long, exclusive and seriously enforced copyrights, patents on software even of the simplest sort and banning all speech that is not appropriately politically correct.
Might it be possible to set things up so that the complete code as placed in the box is digitally signed with some PK system, then include in the code a routine that would accept from user input a number , try to resign the code with that number and print out the result. (Not just a yes/no, but the signature.)
Maybe even do it so that the major parties and some independent group get to sign the code independently with different keys - so they can convince themselves.
Of course, this does not address the possibility of hardware/firmware tampering.
Perhaps "Freedonian" would be better - though it isn't quite "Freedom" and doesn't quite follow the usual naming convention ("ium"). Its a bit more pronounceable and rather more euphonious.
But best of all, it not only swats those durn Freedomch types, it commemerates the great citizens of Freedonia, ever fighting for their country - led by the most excellent Rufus T. Firefly, and Mrs. Teasdale.
And in time of war never forget the immortal words of President Firefly : "And remember while you're out there risking life and limb through shot and shell, we'll be in here thinking what a sucker you are."
I haven't searched through itunes, but emusic does not impress me at all - first of all their search interface sucks badly - it should not continually reset to "artist search" once i've selected another kind of search - my assumption is that I'm going to be able to modify my current search after getting a result.
Worse yet, I searched for the kind of music that I'm interested in - and the kind of music that stands to gain most from this kind of distribution. That is, the stuff that is a bit out of the mainstream. I'd love a place that I could download samples of Messiaen, Ligeti and the like to sample and see if I want more, a place that I could get several variants of (fer example) Steve Reich's "Music for 18 Musicians" - I already have all the published CD's of that, I think - making performances available - even if not the best quality - would be wonderful.
Being able to download a sample of an artist or composer cheaply enables people to taste things that they might not otherwise try. Making the fringe, obscure stuff available relatively inexpensively could encourage recordings of performances that would otherwise vanish at the doors.
So I did a bunch of searches (probably 50 or so) and got exactly zero matches. Some of the things I was looking for were :
Steve Reich - Music for 18 Musicians
Einstein on the Beach - Philip Glass
Nixon in China - John Adams
Harmonielehre - John Adams
- Axiom of Choice
- Carla Bley
Passion - Steven Sondheim
Sweeney Todd - Steven Sondheim
- Messiaen
Crawl - Ulcer
"Waiting for the Electrician" - Firesign Theater
Some of this stuff is obscure. But thats probably the best area for such services to work in. If Celine Dion (say - or whoever is the manufactured popular choice of the day) puts out a new song, everyone will listen to it and there's a guaranteed set of buyers already. And I expect that that audience is pretty much saturated already. But there's much to be gained by building new audiences off on the fringes a bit - its risky, of course. But making some of this music more widely available could pay off nicely.
And it is so easy now to see the american public as those workhouse boys, intellectually scrawny, minds all malnourished, forced to spend all day on the treadmills of the corporations, every so often peeking in at the big shots, feeding themselves richly on the profits but always whining about how poorly used they are.
And just in case you read this wrongly, I'm all in favor of free enterprise, but I think the kinds of corporate consolidation, monopoly and cartelling that we see now is far from being free enterprise as we need it. And the way the government and corporations are colluding is closer to communism and fascism than I'm comfortable with.
For myself, the process of going to class and taking notes was an important factor in getting good grades. However, I almost never referred to those notes after taking them. It was the process of having to listen well enough, watch the blackboard, and filter it through my brain and onto the paper that mattered. Of course, not everyone's brain works the same way. (I also always took books and crosswords to class, crosswords are great for looking studious and busily note-taking.)
If you're doing computer science (IT or whatever) and do programming or computer labs, and if the school has a lab available, spend your time there as much as you can rather than on your own. You'll be able to ask people for help and (as important if not more so), offer help. Once you know a bit, the time you spend trying to help others will advance you much more than the time you spend being helped. But don't just give answers - thats a waste of time for both of you. I personally spend a fair amount of time talking to students in lab areas and I think that time is probably as important or more important than class time in many cases.
That being said, if you want/need a computer, get the best desktop you can for the money you have. If you're doing CS get one that dual boots windows and linux. If the campus IT people insist on windows only, make noise about it, talk to your professors about the problems - remember you are paying them to provide services . Also remember, They won't think so. They'll believe they're doing you a big favor by giving you anything at all.
I dont think it would be impossible though and (despite all the screams of "bloat") it could be feasible to set it up to read the description once and compile/link together different modules and such to produce an efficient executable which could be cached. Scripting could be enabled in any of several languages and the scripts compiled to byte code or native code for speed.
A few common configurations could be made widely available so someone having to use another persons setup could reset it dynamically to a known setup.
Could be quite a fun project.
GWM was very extensible and very cool. If I had a pile more time I'd spend some of it trying to get gwm to compile again.
When I'm doing serious work on my machine I often have twenty or more windows active and doing one thing or another. (Hmm, right now, even though I'm not doing anything major I have at least 10 windows open - one is rendering, one is running a program, one is monitoring the program/render by watching a log file, a web browser, three emacs windows, a mail window ...). Having a window manager with virtual workspaces and virtual desktops in those virtual workspaces makes it possible to organize this and navigate easily. I've also had occasion to use very, very wide windows - on the order of a thousand or so characters and spanning multiple desktops - in database development. Not being able to do so, or being able to do so only with a lot of jiggery-pokery, can be a serious pain and impediment.
One persons "bloat" or "crackrock" (the metacity term for "whatever I don't think you should want") is another persons essential tool. I want a window manager to help me cope with the complexity of trying to do complex things - so my brain can work on the good stuff. For me, just adding more "skins" to a WM, adding yet another design for a button, adding spiffy gradients - thats bloat (albeit cheap bloat) of its own sort. Adding the ability to pan around an infinite desktop, start specific programs with keybindings i specify, use either keyboard or mouse to navigate, zoom in (like PAD++), set location markers and be able to move easily to them - thats all good stuff. Not bloat - even if you don't use it.
There's another way to structure the code that rearranges this to iterate over all the elements of g and then over every element in the associated c array. And then iterates in a double nested loop that didn't appear above.
There are a couple other ways to do it too, but they require substantially more code complexity and its not worth it here - there are a number of other things that currently dominate the runtime. So I'm using the simplest one to hand. If its a problem and this ends up the bottleneck I'll worry about it then.
"Premature optimization is the root of all evil."
RandomArrayIterator(int a[])
with an iterator named iterator and then do something like :
for (int i : RandomArrayIterator(a) ) {
But the spec (yes, I did read it) implies that the result of RandomArrayIterator must be an object that defines iterator. so this is really shorthand for : ... }
for (SimpleIterator sit = RandomArrayIterator(a).iterator() ; sit.hasNext() ; )
{ int i = (int) sit.next() ;
I think two things about this make me uncomfortable. First is the fact that I need a class with the right type to return from "RandomArrayIterator" which defines "iterator()", (at least, this is the implication of section III "Semantics") then I need a class for the result of the "iterator()". (Yes, I do realize that these can indeed be the same class.) The second is the "specialness" of the defaults (which is actually the second call there "iterator()").
That specific attacks are given doesn't change this as the attacks given cover a variety of platforms and software - indeed, such attacks are not limited to network service software, but might be used against software that might be considered secure (behind firewalls with limited access).
The attacks given are not likely to be of general use to network script kiddies. They might be of use to the more technically adept. might.
Its also worth noting that the authors give enough information to build one or more defenses against such attacks. And carrying their hints a bit further would almost certainly enable developers to build a class of such defenses. But for the most part these defenses would still be tailored for the specific application in question and hence a general "one patch fits all" is unlikely to help many.
And if I might be permitted a specific response. The real dipshits are those who would, for whatever reasons, put a priori constraints on what someone might or might not publish. Let enough of these (evidently Divinely Inspired) idiots have their way and no one will be able to say anything.
Sather had a mechanism to use constrained genericity to handle the problems that templates are used for - and it worked well.
Everything was an object and a member of a class - though there were two kinds of objects and that did introduce a bit of complexity.
Sather also had preconditions/postconditions/class invariants that did the "by contract" thing well and that I'll bet cut my debugging time by 75% or more - at the cost of a bit more up front thought time ("Just what is the class invariant here?")
Sather had a very, very, very nice iteration mechanism. A class could define multiple iterators (syntacticly they had to end in "!"). Since these were defined in the class they had access to class variables without any "friend" or "public"/"private" jiggery pokery. As an example, since an array was an object, it defined an iterator elts!. So if "a" represents an array the following does exactly what you'd expect :
would do the Right Thing.Sather also had operator overloading (rather limited and pythonesque "a + b" translated to "a.plus(b)"), ways to skip variable declarations in some cases, a very simple inheritance structure and some odd syntax.
Because there are so many bridges.
for (int i : C) {... }
also allow :
for (int i : C.iterator) { }
so that iterators other than the default (the SimpleIterator named "iterator") could be used.
This would not complicate the iterator syntax much and would make using different iterators easy - and thats something that is often needed.
Since the "C" above is an expression, it could be a function that returns an "Iterable" - allowing interesting hackery to provide alternate iterators using inner classes or other fun. However while I think this allows programmers to do about what they need, it does not make things exactly readable and that is a bit bothersome.
Another thing I'd like, and would like to have efficient and easy to use, is a way to iterate over the indexes of an array - in particular a multidimensional array. I get tired of doing things like the following (which I can't get to indent easily) :
It would be much easier to do something like
I posted the WASTE reference on the original announcement - but doubt anyone got it. And I just can't manage an ascii art horn.
Anything is always a possibility.
You've gotta just sit back and admire the precision, generality, and sheer wonderfulness of that statement. It says everything and nothing in five words.
"An Intellectual Carrot - the mind boggles" (From the film "The Thing From Another World")
We Await Silent Tristero's Empire!
Obscure, off topic and odd. (The three essential "O"'s)
This is a three volume series (so far) starting with "A Game of Thrones" - the three volumes would probably fill your month nicely. I picked up the first volume having read a very positive review, but expecting I'd read it, find it uninspired and drop it.
Instead I ended up bying the second volume before I'd finished the first - because I didn't want to have to wait - and the third volume before I finished the second. And knowing that the third volume was all that I'd get for a bit, I read the last third or so of it very slowly - rationing it out. Now I have to wait for the next volume. (Taps foot impatiently.)
Its long (each volume is 800 or so pages), filled with characters (there are pages in the back with information on who belongs to which faction, and you're likely to need them), and the story jumps from one main character to another quickly. Each chapter is told focussing on one of the main characters and the viewpoint switches with every chapter so it felt a bit fragmented until I started to put the world together - and then it just feels right, although rather frustrating sometimes.
The story told is fascinating. It would probably be more correct to say "stories", all interwoven, often separate, but woven together to produce a real tapestry of the world Martin creates. And the world so created is compelling. Politics and war predominate and magic pays a relatively small part for a fantasy novel - but magic and the fantastic are never far away - but they do not overwhelm the story as told.
Martin managed to keep me interested (maybe obsessed is a good word) in the story and the characters. He has a talent for making the characters multi-dimensional - few of them are all good or all bad, but mixes of both. Enough to make their behavior surprising. He does have a habit of pulling rabbits out of hats - but I never knew where or how - though I did grow to expect it often enough.
Martin does not shy away from the brutal and this may disturb some people. People in this book die - lots of them - and many of them die rather, even extremely, unpleasantly. If that kind of thing bothers you - go somewhere else.
I'd also like better maps - you'll need the maps in the books often enough - I really wanted one big enough to carry with the books and that I could stick pins into to show who was where.
This is the best fantasy series I have read in a long, long time. I already think the series will end up in my list of top books (though I rarely put anything there till at least five years after I first read it). If its a choice between Robert Jordan and this, pick this.
Another factor may be that until you get a ways into advanced problems most of the applications linear programming and the simplex method are pretty much cookbook these days - but most courses in linear programming are a semester long - so its hard to tell a cs major that taking a course in LP is more important than taking a course in Visual Something-or-Other. As a professor type though, I always try to mention some of the techniques and ideas I've seen in other areas - even when not necessarily applicable to the class I'm currently teaching. This includes things like LP - but also things like cryptic crosswords, Intercal and so on. Something seen by some students as a Good Thing, by others (most, probably) as a Waste of Time.
Me, I'm going to take a look at the paper and see what I can get from it. The posted information on what is said looks very interesting indeed.
If there were a bunch of open relays that would accept and relay mail and on the way run it through a spam filter - and instead of dropping it, just label it with "SPAM (was ...) " in the subject line,
we could accomplish exactly the same thing - but without requiring the spammers to do anything.
the slashdot article
The notion of rewriting the mail (though my suggestion is more about putting a wrapper on the mail) is in the second article.
I understand your experiences with the linux community and I've had similar myself. I got seriously angry and abusive email once from someone to whom I'd sent a bug fix. Go fig. Me, I try to be helpful when I can - for people having trouble with whatever system - but its not always possible and sometimes I (we all) respond a bit more rudely and condescendingly than we'd like.
I'd still suggest you give linux another look. If you think you might be spending a fair amount of time with computers, learning new systems is a good way to learn more about the systems you use.
That is, even if all you ever want to use is Windows, learn linux and macos. (There are other different OS's out there, but you're unlikely to find them somewhere where you can use them.) By doing so you'll pick up a level of abstraction which will help you in better using all the systems. And, of course, if you ever need to, you can claim you know those other systems. Similarly, even if all you expect to ever use is Photoshop, learn Gimp and any similar systems you might find.
And I encourage people to use Linux. And I think people should at least consider changing. But I recognize that Linux is not for everyone. Probably not my parents. Nor lots of other people. I do encourage organizations to use linux when possible. I think if users spent the time to learn another system it would be better for them - and probably much better for the organization as they'd have more options for the future.
Do I hate Microsoft and wish that they'd just go away? No. I dislike their OS's. I dislike their Office suite (to be fair, I don't like Open Office much either). But for most people MS may be the only viable alternative - because they've already bought in to MS, learned how to use Office and Outlook and IE and all - and they're unwilling to learn anything new.
But I also feel very uncomfortable indeed with the idea that MS has a stranglehold on software. I don't want to have to pay for a Windows OS with my computer that I don't want to use. I don't want to find myself stuck with a video card that Linux can't use because the only drivers are for Windows. I really dislike getting MS Word format email. I get very frustrated when there is software written for Windows and the Mac and only a second rate version for Linux (though more and more frequently the Linux version is better than the others). I think the "update office every year" marketing ploy is pretty sleazy (and very clever). I get quite annoyed at the web pages that work on IE only. I've heard personally from people whose companies were destroyed by MS's corporate slash and burn strategies. And so on. And the assumption that "All the world's running Windows" helps to create just those situations.
So, yes. I admit it. Over the years I've developed a dislike of MS which has become fairly intense. And lots of linux people I know have come to feel the same way for much the same reasons. And I've also come to find that most seriously pro-MS people have a stake in MS of one sort or another. Whats yours?
Now - to respond to your comments :
company doesn't have to choose to use microsoft products
Not true in most cases. Most of the time companies have already purchased computers with Windows and Office installed and hired some MSCE types to run them. Changing systems would piss off the MSCE guys big time so they'll resist like hell. It would scare most of the users so they'll resist like hell. Microsoft will resist like hell. The organization will have to worry about changeover costs. If you say they don't have to choose MS, you demonstrate just a bit of ignorance. The pressures to use MS are immense - almost to the point where there is no viable choice.
MS is easy to use
Completely untrue. (I hope I'm not quoting out of context - but I'm not sure what the context was - your sentence got a bit confused there.) With the possible exception of the Mac, most computer systems are difficult to use and to learn. But all the users are taught MS by default (because MS has an effective monopoly on end user computer software), so users think its easy. They only remember enough of the learning process to know they don't want to do it again.
This was worth repeating.
But you should also know that users have needs and wants - some legitmate, some not so much, but if someone in the organization is not responsive they'll start looking for ways to do it themselves and this is a very good way to get insecure.
"responsive" (above) does not mean "I'm the sysadmin and you have to do things my way." Making users angry is probably going to make them try to break things even faster. Very very hazardous with knowledgable users - but hazardous enough even with average users.
Case in point: I worked for a university with a seriously paranoid network admin. A bit of paranoia in a network admin is a good thing. But there can be too much of a good thing. He had a very tight firewall - no telnet, ssh, pop and so on - which meant (among other things) that there was no way to read your mail from off campus - not even a webmail type application. Since there were a number of sites on campus that ran web servers, port 80 was open. So anyone who knew much of anything had sshd running on port 80 on some convenient machine. While sshd is probably reasonably secure, you can just imagine running telnetd in the same way. This got closed up after a while. About a week later it was closed I was told that people had set up two or three other fun ways around the firewall, but as they may still be there and in use, I'll not mention them. So, by trying to increase security and by not listening to legimate needs of the users he managed to actually seriously weaken security.
And the "appropriate groups" will undoubtedly primarily include major corporations with clearly established expertise in the field - you can make your own list, this is /. after all. Maybe the ACM and IEEE Computer Society will get a vote each (as long as they behave and don't vote against the others).
And of course, each major party will have its own requirements or the nominee will end up in congressional approval limbo. The Republicans will undoubtedly check out their views to ensure they're big on long, exclusive and seriously enforced copyrights, patents for software even of the simplest sort, restrictions on anything they find does not meet the right approval of the religious right. The Democrats will make sure that the nominee is in favor of long, exclusive and seriously enforced copyrights, patents on software even of the simplest sort and banning all speech that is not appropriately politically correct.
(*) or Freedomch, if you prefer
Maybe even do it so that the major parties and some independent group get to sign the code independently with different keys - so they can convince themselves.
Of course, this does not address the possibility of hardware/firmware tampering.
Hmm, have to think about it a bit more.
This is the kind of thing that more of us should do.
But best of all, it not only swats those durn Freedomch types, it commemerates the great citizens of Freedonia, ever fighting for their country - led by the most excellent Rufus T. Firefly, and Mrs. Teasdale.
And in time of war never forget the immortal words of President Firefly :
"And remember while you're out there risking life and limb through shot and shell, we'll be in here thinking what a sucker you are."
Hail, Hail Freedonia! Land of the Brave and Free!
Worse yet, I searched for the kind of music that I'm interested in - and the kind of music that stands to gain most from this kind of distribution. That is, the stuff that is a bit out of the mainstream. I'd love a place that I could download samples of Messiaen, Ligeti and the like to sample and see if I want more, a place that I could get several variants of (fer example) Steve Reich's "Music for 18 Musicians" - I already have all the published CD's of that, I think - making performances available - even if not the best quality - would be wonderful.
Being able to download a sample of an artist or composer cheaply enables people to taste things that they might not otherwise try. Making the fringe, obscure stuff available relatively inexpensively could encourage recordings of performances that would otherwise vanish at the doors.
So I did a bunch of searches (probably 50 or so) and got exactly zero matches. Some of the things I was looking for were :
- Steve Reich - Music for 18 Musicians
- Einstein on the Beach - Philip Glass
- Nixon in China - John Adams
- Harmonielehre - John Adams
- - Axiom of Choice
- - Carla Bley
- Passion - Steven Sondheim
- Sweeney Todd - Steven Sondheim
- - Messiaen
- Crawl - Ulcer
- "Waiting for the Electrician" - Firesign Theater
Some of this stuff is obscure. But thats probably the best area for such services to work in. If Celine Dion (say - or whoever is the manufactured popular choice of the day) puts out a new song, everyone will listen to it and there's a guaranteed set of buyers already. And I expect that that audience is pretty much saturated already. But there's much to be gained by building new audiences off on the fringes a bit - its risky, of course. But making some of this music more widely available could pay off nicely.