KDE4's panel is one of those things that you figure out and then say "WhereTF was the tutorial for this?" That is, after you figure out that you have to manually add it because it's not there by default. You can right-click where it doesn't have any programs or on the edge, and there's a rectangle you can click+hold and drag to change size I think.
I call this the Microsoft Excel Charting experience: where you have to guess where and how (left-click, right-click,click-and-drag) to click to set various parameters. It's frankly exhausting, more like a crappy game of skill than configuration.
KDE3, conversely, gives me a tree view, and somewhere within that tree are all the settings I need. I may take a bit of time looking through the tree to find what want, but no magical clicking is required, and I don't have to guess what an option does: it's clearly labeled.
KDE4 is a massive step backwards; Gnome, which I've always detested because it's not configurable, is preferable to KDE4. I'm really at a loss as to what the KDE4 team was thinking.
KDE 4.1 looks like Gnome, only worse. The default font sizes are HUGE, and the default antialiasing is horrible. The launcher button on the kicker panel, instead of just showing applications, shows a tabbed panel that starts on the "favorites" tab; to actually launch an app, I have to chose the application tab, then get a list in a HUGE font, when menu, instead of cascading, are replaced by sub-panels, and the replacement is made slower by stupid animation.
The kicker panel itself is way too large, probably 50 pixels high.
The desktop isn't a normal desktop, instead there's some pseudo-transparent lozenge in which desktop items are grouped.
When I open "System Settings", I get some multi-applet container like MS-Windows or Gnome, not the tree-view I saw in KDE 3.5. I can't even find most things I want to change (like Window Decorations) or even a menu with an about which would tell me what app I'm running.
Did I screw up the install somehow? Am I still running Gnome (no, can't be, every app starts with "K").
What the hell??? If I wanted Gnome or Vista, I'd run that crap. Why can't KDE be KDE?
Help!
I liked KDE because it was clean and functional. KDE 4.1 is a travesty.
Ok, read this bullshit marketing drivel from KDE, it reads like an MBA's sales pitch:
However Plasma is more than just this familiar collection of utilities, it is a common framework for creating integrated interfaces. It is flexible enough to provide interfaces for mobile devices, media centres and desktop computers; to support the traditional desktop metaphor as well as well as designs that haven't yet been imagined.
Christ, man, I just want to launch an app, and occasionally glance down at the laucher to see how much battery life I have. I don't want a "framework" that can do everything.
But, says KDE:
Plasma takes a different approach, engaging the user by creating a dynamic and highly customizable environment.
I don't want to be engaged, I just want to launch an app. I'll probably maximize that app, so the desktop won't even be getting a look.
But, says KDE, you can get rid of the gee-whiz gee-gaws:
With Plasma, you can let your desktop (and accompanying support elements) act like it always did. You can have a task bar, a background image, shortcuts, etc. If you want to, however, you can use tools provided by Plasma to take your experience further, letting your desktop take shape based on what you want and need.
Oh, ok, that's cool. So can I get rid of the "cashew" control on the desktop?
Although putting an option to disable the cashew for desktops sounds reasonable, from a coding point of view it would introduce unnecessary complexity and would break the design. What has been suggested is, since the destkop itself (a containment) is handled by plugins, to write a plugin that would draw the desktop without the cashew itself. Currently some work ("blank desktop" plugin) is already present in KDE SVN. With containment type switching expected by KDE 4.2, it is not unreasonable to see alternative desktop types developed by then.
So let me get this straight: Plasma's a revolutionary framework that can do things "that haven't yet been imagined." But it also supports the traditional desktop.
But getting rid on a "cashew" on the desktop is too hard to code, but if you write a trivial plugin that redraws the entire desktop (which isn't so trivial, as it's a yet unready work in progress, and won't even be possible until the next release of KDE) you can get around this unwanted "feature".
Come on, guys, your super framework requires a plugin to be written just to present a blank desktop? And plugins won't work until 4.2? And a boolean "don't show" would break the design? You guys got seduced into major mission creep.
This isn't a desktop environment, it's the dev's toy. Which is great, but don't claim it's ready for end users.
Imagine there is this guy whose online curriculum says is a M.S. in Computer Science, Java Certified and whatnot. He finds and files a lot of bugs on Ubuntu, helps to create packages, contribute with code, and do such a great job that Canonical decides to hire him, just to discover that he is really only an undergraduated in C.S. Canonical hires him anyway.
Three questions: 1) Would it be the wrong decision? 2) Would your confidence on their product (Ubuntu) be diminished? 3) Would it make front page on Slashdot?
Hi! My name is EssJay, and I have a PhDs in Computer Science and Mathematics, specializing in Computational Cryptology.
I've submitted a patch to improve the linux "crpyt" function (char *crypt(const char *key, const char *salt);), by replacing the outdated DES encryption with something I read about in Cryrography for Dummies called "rot13". Oh, and to make the function more efficient, I return a pointer to locally allocated memory:
char* crypt(const char* key, const char* salt) {
char* buffer[3];
strcpy(key, buffer);// no possibility of overflowing the buffer, it's three whole bytes long!
strcpy(buffer, key);// two copies make it more secure
for(int i = 1; i <= 3; i++)
buffer[i] += 13;
buffer[i] %= 26;// this line executes each time through the loop!
return buffer + 3;//must have the "+ 3" here so that the Operating System knows how big the whole buffer is }
Now some trolls and vandals have claimed there are "errors" in my code, but remember, I'm a full professor and
"I offer as my reference the text "Cryptology for Dummies" by Alan Turing (Ph.D./Th.D.) and Dennis Ritchie (Ph.D.). The text offers a rot13 from Edsger W. Dijkstra, and an Imprimatur from Charles Babbage. This is a text I often require for my students, and I would hang my own Ph.D. on it's [sic]credibility.
I liked the explanation, but this seems great for inanimate objects. What about consciousness? I mean, you can 'teleport' a brain, but will the signals go with it and will the brain retain memories or will it be a exact copy of a body but no 'life force' in it?
I liked the explanation, but this seems great for non-burning objects. What about fire? I mean, you can 'teleport' a log or a charcoal briquette, but will the fire go with it and will the fire retain flames or will it be a exact copy of a log but no 'phlogiston' in it?
Dude: state is state. If you teleport an object's entire state, you end up with an object with the same state in a different location. Consciousness is just a property of (certain kinds of) matter in (certain kinds of) motion. It's nothing magic.
Alternately: when you move your head, does your consciousness or memories or "life force" or "soul" somehow "leak out" or get left behind? What would move with your brain but not teleport with it?
Yes, sure, that'll work, and yes it's O(n) once the database has sorted it, and yes, I've used that algorithm in cases when I didn't have a database handy, as on embedded systems. But if you need to do that with an RDBMS, you need to be questioning why you're using that RDBMS.
I'm not sure. The guy who hired me to consult explained that that was how he'd originally gone about it. Only after that took forever, did he write a self-join that took six days. But I didn't see his cursor code.
I recently did a little consulting project for a company with a MySQL database. I was left unimpressed.
Basically, they needed to aggregate data from about 56 million rows in table, and required a self-join as well. I got the consulting contract because this was taking at least six days to complete.
Inputting the 56 million records took about a hour; this included creating three indices.
So far so good. At that point, to make in run faster, I wanted to pre-calculate and deformalize the data the self-join would give. I'd already included columns for this denormalized data in the table, so it was pretty much
update datatable a set a.denormed = (select max( b.foo ) from datatable b where a.customer_id = b.customer_id)
A simple correlated subquery self-join in a update. Low and behold, MySQL doesn't allow this,. at all:
"Currently, you cannot update a table and select from the same table in a subquery." (MySQL official documentation, 13.2.10)
Ok, so instead of a subquery we can do a join, but that means we have to throw away the max() operation. Without the max predicate we're doing 1-to-Many joins on b where there is more than one row matching our criteria, and so we're potentially doing multiple updates (all but one of which gets "thrown away") to a row.
Ok, so far so good.
First time around, I included the demoralized column in an index, and of course the update changed the column values. If I dropped and re-created the index, MySQL took about four hours to re-index (four times the time it took to make the index when it BCP'd it in). But if I repaired the index, rather than dropping it, well, it never actually completed, becasue after two days I killed it. What the hell?
Finally, to display the data, I needed to do some date manipulation, a lot of it repeated. In pg, I'd have written the code once, in a user defined function. In MySQL, that requires compiling a shared library, so instead I repeated these rather long calculations in a select. Tedious and error prone. (In MySQL's favor, the built-in date functions are a lot cleaner than T-SQL's.)
Eventually I got a six-day or longer process down to three hours, but it wasn't pretty.
So long story short: a business goes with MySQL because it's "fast". At a certain point, it ceases to scale, and you have to perform "heroic measures", denormalizing and pre-calculating. The index repair is a mess. You can't easily encapsulate code in functions or, prior to 5.0, views. It's no longer fast, and your mission critical business requires calling a consultant to optimize what was perfectly good code before the table size grew.
Simply forcing request variables to the correct type and escaping all strings is pretty much the only thing you need to do.
I've got an even better idea: your front-end shouldn't be synthesizing SQL statements. Pass parameters to a middle-tier business objects in a language that allows for strict typing. Or call database stored procedures. Or use an Object-Relational Mapper (yeah, used to be these sucked, but Hibernate is actually pretty good)..
But whatever you do, your front-end (and except in exceptional cases your middle-tier) shouldn't be catenating strings of SQL statements. Yes, doing it that way may make your development cycle faster, but in the long run it's a disservice to your clients and it'll destroy your reputation.
Pavlik Morozov, supposedly killed by "kulak" relatives for denouncing his father to Stalin's secret police (OGPU-NKVD), was adopted as a patron saint by the "Young Pioneers," the Soviet equivalent to the "Boy Scouts." His life exemplified the duty of all good Soviet citizens to become informers, even at the expense of family ties.
You make some great general points, and I completely agree.
In this particular case, what I was trying to optimize with Duff's device was a low level video driver. And yes, profiling had indicated that was sucking down a good bit of the total time.
(Some other things were sucking down time too -- one was how screen updates worked, which I optimized in platform-independent C; the other was memcpy, which I optimized in assembly.)
Speaking directly to your first two points: 1. Does it really matter? Answer: Yes, significantly. Under the right conditions, the assembly takes half the time the C code does. Screen updates take a good proportion of total CPU time, and there's no good substitute for doing screen updates.
2. How does it work on another CPU (family)? Answer: that's why I went with Duff's device first; it works on all platforms, and on my particular platform, it gave about a 5% increase in speed (from a less unrolled loop)....especially in the IA32 architecture Just to be clear, this is on an ARM architecture.
Oh course, you're right. And yeah, I give gcc a pass on the loading of halfwords. But I have to ask, why would gcc produce the sub-optimal sub; cmp instructions rather than just subS, regardless of the optimization level?
(Also, and I admit this isn't the best excuse, I was compiling with a make file calls a bunch of other make files that compile a bunch of other files (.C and assembly) with the same, project-wide compiler options. Changing the optimization level for one file, while certainly possible, wouldn't have been something easy to pack up in a patch for other developers on this shared, open source project. Changing the optimization level for all files might have broken other parts of the project. Again, it's not the best excuse, but it's a real-world one.)
From the parent poster: It will be interesting to see how this is applied and to whom.
the courts would have almost unlimited discretion to impose the order if they believe it probable that a suspect had 'acted in a way which facilitated or was likely to facilitate the commissioning of serious crime'.
In all seriousness -- no, I'm not trolling here -- how soon until the UK's equivalent of the RIAA convinces a judge that non-Microsoft operating systems are used to "facilitate" circumventing DRM?
"We can't actually prove that the defendant^H^H^H respondent uses the linux operating system and perl to run DeCSS, but then, we don't have to prove anything. He has a DVD burner, Judge, and why wouldn't he be using Microsoft's DRM-ecumbered Media Player 10 unless he was up to no good?
All it takes is an overzealous RIAA-type organization (check) and a non-tech savvy judge (check).
You can no doubt come up with your own scenarios involving torrents ("but Judge, there's no legitimate use for torrent networks, except to distribute linux, and we know what that's used for"), encryption ("why would a private person use encryption, unless they had something to hide"), or even debuggers ("used to reverse-engineer and crack non-free software, Judge"). Not to mention network sniffers, disassemblers, and circuit testers.
And of course, real criminals will continue to break the law. All this will stamp out is any real innovation outside of corporate control.
I sped up some C code by unrolling a loop with Duff's Device. Duff's Device, for those who haven't encountered it, makes an ingenious use of the often-maligned C behavior that case statements, in the absence of a break or return statement, fall-through.
Duff's Device takes advantage of the fall-through by jumping into the middle of an unrolled loop of repeated instructions. If eight instructions are unrolled, Duff's Device iterates the loop
count divided by eight (count / 8 )
times, but enters the loop by jumping to the
count mod eight (count % 8)
'the unrolled instruction from the end of the loop. (This sounds complicated, but isn't; just look at the code and it becomes clear.)
The whole point of Duff's Device is speed and locality of code. Speed: because the loop is unrolled, more instructions are executed for each jump back to the top (and jumps are, relatively, expensive, because they mean any preloaded instructions must be tossed out ans re-read. Locality: (hopefully) all the instructions can be cached, so the processor doesn't have to re-read them from memory.
But what gcc does with Duff's Device on ARM targets is just bizarre. gcc uses a jump table (good) to directly change the Program Counter (good, so far). But instead of jumping into the loop (which would be good), gcc uses the jump table to jump to...
a redundant assignment and...
an unconditional jump.
Yes, gcc very smartly makes a jump table (which directly changes the Program Counter, just like a jump would) to jump to a jump. This is simply a waste of code and time:
I'd show you the entire assembly code gcc produces, but slashdot won't let me: "Your comment violated the "postercomment" compression filter. Try less whitespace and/or less repetition. Comment aborted." cmp r2, #7
ldrls pc, [pc, r2, asl #2] <-- directly modify the Program Counter making it pc + ( r2 << 2 )
b.L70 .p2align 2 .L79: <-- jump table .word.L71 .word.L72 .word.L73 .word.L74 .word.L75 .word.L76 .word.L77 .word.L78 .L72: <-- first jump table destination
mov r1, lr <-- redundant assignment made at every destination
b.L80 <-- actual jump into unrolled loop [ 7 repeats of the above, with differnt branch targets elided] .L87: <-- for each iteration of the loop, we're moving exactly 8 halfwords = 4 words
ldrh r3, [r0], #2 <-- what would be fastest is to load multiple four words,
<-- then shift high words down
strh r3, [ip, #0] @ movhi [6 repeats of the above elided] .L80:
ldrh r3, [r0], #2
strh r3, [ip, #0] @ movhi
sub r1, r1, #1 <-- a subs instruction here would obviate the need for the
cmp r1, #0 <-- cmp instruction that follows it, saving a cycle per iteration
bgt.L87
Why a jump table just to set up an unconditional jump? Why the redundant mov, which could have been done once, prior to the jump table jump? Who knows, that's what gcc does.
In this particular case, the object is to copy halfwords to a memory address, which address is really mapped to an output device. ARM processors, of course, are optimized for word addresses, so the "best" way to do this would be to load multiple words (LDM), shift the upper
I think Rosen's position is interesting considering that even Slashdot back in 2000 was very adamant that the RIAA should go after infringers (mostly because everyone thought it couldn't be done, so it was a safe position to take).
Parent poster's telling an uncomfortable truth; he's not trolling.
Let's have enough intellectual honesty to distinguish the two.
If Indian salaries and other costs increase 20% a year for a few more years, the advantages of outsourcing will have largely disappeared. In the long run, good for India and good for U.S. I.T. workers.
You're assuming the cost of outsourcing have gone up.
But maybe it's that American salaries and benefits are on the decline.
(Of course, since CEO compensation is up, we can look forward to great jobs as valets and stable-boys on the lush estates of our masters.)
Now all the foreign people can study this course for free. It has costed some big dollars to get that course material. Tax payers money! We pay - others benefit. Do you have ANY idea how much this costs?
How much are you paying the Sumerian guy (yes, and others) who invented writing? The Babylonian who invented the calendar? Hell, most of the early American industrial revolution depended on violating English patents on water-wheels and drive-shafts and various cogs and pulleys. That God there was no Berne Convention then, huh?
When you enjoy Bach's Musical Offering, do you send a buck to the descendants of Bach's patron, Frederick II of Prussia?
The truth is, every one of us -- even the most prolific and creative inventors -- benefit far more from our shared cultural patrimony than we contribute to it.
Most of Newton's genius would have been wasted if he'd had to spend his life chasing down gazelles to get his lunch. Little of that genius would have been transmitted to anyone without the efforts of the anonymous inventor of writing and thousands of others who refined that tool and so many other tools down through the ages.
Information, knowledge -- they are not, contrary to the more glib claims of the Open Source movement, free. Knowledge must be wrested from nature at great cost by discovers, and each of us to understand that knowledge must pay our own cost to learn it.
But the Open Source advocates aren't wrong either: knowledge can be transmitted at little marginal cost: developing the course did cost the tax- and tuition-payers of Washington State, but the additional cost to make it available to all is the negligible amount required to host it on a web server. Nor is it "free" to anyone -- anyone who wants to possess it must take the time and effort to learn it, to re-make his own mind by incorporating that new (to him) knowledge. There is no "royal road" to knowledge; commoner or king must wrestle it into his own head.
Don't be a Philistine: millions, alive and dead, your teachers and people entirely unknown to you have for fifty thousand years given you knowledge and indeed a rich material culture based on that knowledge. Don't begrudge passing it on.
Looks like good stuff, and even the textbook is freely available. I've also enjoyed podcasted courses from several sources. One thing I do miss, when auditing by podcast, is a chance to discuss the course material with others (and the tests that would allow me to know how much of the material I'm getting).
Anyone want to join me in taking the course as a group? We could "meet" in IRC or via a listserv. and we'd probably get more out of the course by having others to bounce ideas off of, to challenge our assumptions, and to correct our errors.
If you're interested in joining me in this, reply to this post, and I'll see about organizing things in my Slashdot Journal.
Let's understand that the FBI prefers not only to keep the DNA database (which records only thirteen "genes"), but also the original sample, from which the donor's entire genetic code can be recovered.
Nowadays, the government doesn't discriminate against Jews. On May 14th 1940, it would have been perfectly safe for Anne Frank to have her "Jewish DNA" recorded by the Dutch government. On the next day, the Dutch government surrendered to Nazi Germany, and suddenly any Dutch government records were, legally and in fact, German government records.
Someone will shout "Godwin!" at this point, and some other patriotic American will claim, "it can't happen here."
Oh?
Ask your Japanese-American friends what happened to their grandparents in the America West in 1942. Or ask the parents of any your black friends about how, even after World War II, a black man risked his life if he tried to vote and broke the law if he used the wrong water fountain in many of these United States.
Or ask a gay man about how before Bowers, he could be put in prison for what he did with other consenting adults behind the locked doors of his own house.
Plenty of zealots, scientifically correct or not, have claimed to find genes that mark for "Jewishness" or "Negro blood" or even "criminal tendencies" or "homosexuality". Plenty of times, these zealots have gotten their prejudices written into laws: Nuremberg laws, Jim Crow laws, or, in 1927, the U.S Supreme Court's upholding of the forced sterilisation of Americans based on then-prevailing genetic theories:
In 1924, a teenager in Charlottesville, Virginia, Carrie Buck, was chosen as the first person to be sterilized under the state's newly adopted eugenics law. Ms. Buck, whose mother resided in an asylum for the epileptic and feebleminded, was accused of having a child out of wedlock. She was diagnosed as promiscuous and the probable parent of "socially inadequate offspring."
A lawsuit challenging the sterilisation was filed on Ms. Buck's behalf. Harry Laughlin, having never met Ms. Buck, wrote a deposition condemning her and her 7-month old child, Vivian. Scientists from the ERO attended the trial to testify to Vivian's "backwardness." In the end, the judge ruled in the state's favor.
On appeal, the U.S. Supreme Court in the landmark case Buck v. Bell (1927), ruled 8-1 to uphold the sterilisation of Ms. Buck on the grounds she was a "deficient" mother. Chief Justice Oliver Wendell Holmes Jr., an adherent of eugenics, declared "Three generations of imbeciles are enough."
According to University of Virginia historian Paul Lombardo, evidence was later revealed that supports the claim that Carrie Buck's child was not the result of promiscuity; Ms. Buck had been raped by the nephew of her foster parents. School records also indicate her daughter Vivian was a solid student and had made the honor roll at age 7. A year later, Vivian died of an intestinal illness.
Then, the zealots' hobbyhorse was eugenics. Today the politicians keep the people worked up by riding the hobbyhorses of "the war against terrorists" and "homosexual marriage". But Big Government has demonstrated time and time again that there are things with which it cannot be trusted. Our genetic codes are clearly one of those things that Government will eventually misuse. Our only defense is to prevent Government from getting it
How did the dinosaurs get here? It is my theory that they rode in on that meteor, bringing with them the advanced technologies that our government is still unearthing today (Al Gore "invented" the internet by digging it up from an ancient dinosaurian city). Also, "rawr" I'm a dinosaur.
Mr. President, shouldn't you be working on a plan to get us out of Iraq, rather than posting on slashdot?
I just installed it and completed an hour long phone call to a landline. I used the cheap out-of-the-box microphone that came with my Dell, and my computer speakers (not headphones), just like a speakerphone.
Worked beautifully. Neither I nor my friend had any problem hearing, and it didn't sound like a speaker phone all -- none of those typical speakerphone "click on/click off" noises at all. We could even both tallk at the same time, with both of us more-or-less audible. It was just about as if my friend was in the same room as me. (Some of the credit is probably due to my soundcard.)
I did have a major CPU utilization problem with Skype until I uninstalled McAfee's firewall, which made the audio terrible. McAfee had long been disabled in favor of (the free, better, not reliant on IE and Active-X) Kerio, but I hadn't gotten around to removing it entirely. Once removed, no problem with Skype at all.
Also, as I have Windows XP SP2, it was necessary to install this TCPIP.sys patch to get around Microsoft's "helpfulness".
In other words, the KDE team destroyed a perfectly functioning desktop environment to build a better Weatherbug.
This is a perfect summary of may reaction to KDE4. Mod parent up.
I call this the Microsoft Excel Charting experience: where you have to guess where and how (left-click, right-click,click-and-drag) to click to set various parameters. It's frankly exhausting, more like a crappy game of skill than configuration.
KDE3, conversely, gives me a tree view, and somewhere within that tree are all the settings I need. I may take a bit of time looking through the tree to find what want, but no magical clicking is required, and I don't have to guess what an option does: it's clearly labeled.
KDE4 is a massive step backwards; Gnome, which I've always detested because it's not configurable, is preferable to KDE4. I'm really at a loss as to what the KDE4 team was thinking.
KDE 4.1 looks like Gnome, only worse. The default font sizes are HUGE, and the default antialiasing is horrible. The launcher button on the kicker panel, instead of just showing applications, shows a tabbed panel that starts on the "favorites" tab; to actually launch an app, I have to chose the application tab, then get a list in a HUGE font, when menu, instead of cascading, are replaced by sub-panels, and the replacement is made slower by stupid animation.
The kicker panel itself is way too large, probably 50 pixels high.
The desktop isn't a normal desktop, instead there's some pseudo-transparent lozenge in which desktop items are grouped.
When I open "System Settings", I get some multi-applet container like MS-Windows or Gnome, not the tree-view I saw in KDE 3.5. I can't even find most things I want to change (like Window Decorations) or even a menu with an about which would tell me what app I'm running.
Did I screw up the install somehow? Am I still running Gnome (no, can't be, every app starts with "K").
What the hell??? If I wanted Gnome or Vista, I'd run that crap. Why can't KDE be KDE?
Help!
I liked KDE because it was clean and functional. KDE 4.1 is a travesty.
Ok, read this bullshit marketing drivel from KDE, it reads like an MBA's sales pitch:
However Plasma is more than just this familiar collection of utilities, it is a common framework for creating integrated interfaces. It is flexible enough to provide interfaces for mobile devices, media centres and desktop computers; to support the traditional desktop metaphor as well as well as designs that haven't yet been imagined.
Christ, man, I just want to launch an app, and occasionally glance down at the laucher to see how much battery life I have. I don't want a "framework" that can do everything.
But, says KDE:
Plasma takes a different approach, engaging the user by creating a dynamic and highly customizable environment.
I don't want to be engaged, I just want to launch an app. I'll probably maximize that app, so the desktop won't even be getting a look.
But, says KDE, you can get rid of the gee-whiz gee-gaws:
With Plasma, you can let your desktop (and accompanying support elements) act like it always did. You can have a task bar, a background image, shortcuts, etc. If you want to, however, you can use tools provided by Plasma to take your experience further, letting your desktop take shape based on what you want and need.
Oh, ok, that's cool. So can I get rid of the "cashew" control on the desktop?
Although putting an option to disable the cashew for desktops sounds reasonable, from a coding point of view it would introduce unnecessary complexity and would break the design. What has been suggested is, since the destkop itself (a containment) is handled by plugins, to write a plugin that would draw the desktop without the cashew itself. Currently some work ("blank desktop" plugin) is already present in KDE SVN. With containment type switching expected by KDE 4.2, it is not unreasonable to see alternative desktop types developed by then.
So let me get this straight: Plasma's a revolutionary framework that can do things "that haven't yet been imagined." But it also supports the traditional desktop.
But getting rid on a "cashew" on the desktop is too hard to code, but if you write a trivial plugin that redraws the entire desktop (which isn't so trivial, as it's a yet unready work in progress, and won't even be possible until the next release of KDE) you can get around this unwanted "feature".
Come on, guys, your super framework requires a plugin to be written just to present a blank desktop? And plugins won't work until 4.2? And a boolean "don't show" would break the design? You guys got seduced into major mission creep.
This isn't a desktop environment, it's the dev's toy. Which is great, but don't claim it's ready for end users.
If Cory Doctorow thinks it's great, I can safely ignore it, right?
Hi! My name is EssJay, and I have a PhDs in Computer Science and Mathematics, specializing in Computational Cryptology.
I've submitted a patch to improve the linux "crpyt" function (char *crypt(const char *key, const char *salt);), by replacing the outdated DES encryption with something I read about in Cryrography for Dummies called "rot13". Oh, and to make the function more efficient, I return a pointer to locally allocated memory: Now some trolls and vandals have claimed there are "errors" in my code, but remember, I'm a full professor and
(Nah, no reason to lose confidence here!)
I liked the explanation, but this seems great for non-burning objects. What about fire? I mean, you can 'teleport' a log or a charcoal briquette, but will the fire go with it and will the fire retain flames or will it be a exact copy of a log but no 'phlogiston' in it?
Dude: state is state. If you teleport an object's entire state, you end up with an object with the same state in a different location. Consciousness is just a property of (certain kinds of) matter in (certain kinds of) motion. It's nothing magic.
Alternately: when you move your head, does your consciousness or memories or "life force" or "soul" somehow "leak out" or get left behind? What would move with your brain but not teleport with it?
Yes, sure, that'll work, and yes it's O(n) once the database has sorted it, and yes, I've used that algorithm in cases when I didn't have a database handy, as on embedded systems. But if you need to do that with an RDBMS, you need to be questioning why you're using that RDBMS.
I'm not sure. The guy who hired me to consult explained that that was how he'd originally gone about it. Only after that took forever, did he write a self-join that took six days. But I didn't see his cursor code.
Basically, they needed to aggregate data from about 56 million rows in table, and required a self-join as well. I got the consulting contract because this was taking at least six days to complete.
Inputting the 56 million records took about a hour; this included creating three indices.
So far so good. At that point, to make in run faster, I wanted to pre-calculate and deformalize the data the self-join would give. I'd already included columns for this denormalized data in the table, so it was pretty much
A simple correlated subquery self-join in a update. Low and behold, MySQL doesn't allow this,. at all:
Ok, so instead of a subquery we can do a join, but that means we have to throw away the max() operation. Without the max predicate we're doing 1-to-Many joins on b where there is more than one row matching our criteria, and so we're potentially doing multiple updates (all but one of which gets "thrown away") to a row.
Ok, so far so good.
First time around, I included the demoralized column in an index, and of course the update changed the column values. If I dropped and re-created the index, MySQL took about four hours to re-index (four times the time it took to make the index when it BCP'd it in). But if I repaired the index, rather than dropping it, well, it never actually completed, becasue after two days I killed it. What the hell?
Finally, to display the data, I needed to do some date manipulation, a lot of it repeated. In pg, I'd have written the code once, in a user defined function. In MySQL, that requires compiling a shared library, so instead I repeated these rather long calculations in a select. Tedious and error prone. (In MySQL's favor, the built-in date functions are a lot cleaner than T-SQL's.)
Eventually I got a six-day or longer process down to three hours, but it wasn't pretty.
So long story short: a business goes with MySQL because it's "fast". At a certain point, it ceases to scale, and you have to perform "heroic measures", denormalizing and pre-calculating. The index repair is a mess. You can't easily encapsulate code in functions or, prior to 5.0, views. It's no longer fast, and your mission critical business requires calling a consultant to optimize what was perfectly good code before the table size grew.
It confirmed my own experiences as founder of WikiFur.
You can type on a keyboard while wearing a fursuit?!!?
"I see," said he, "the elephant is very like a rope." ;)
"You don't get to choose when and how to use what you've paid for."
"Someone else gets to decide when and how you can play music you bought, watch the movies you're bought, play the games that you've paid for."
Simply forcing request variables to the correct type and escaping all strings is pretty much the only thing you need to do.
I've got an even better idea: your front-end shouldn't be synthesizing SQL statements. Pass parameters to a middle-tier business objects in a language that allows for strict typing. Or call database stored procedures. Or use an Object-Relational Mapper (yeah, used to be these sucked, but Hibernate is actually pretty good)..
But whatever you do, your front-end (and except in exceptional cases your middle-tier) shouldn't be catenating strings of SQL statements. Yes, doing it that way may make your development cycle faster, but in the long run it's a disservice to your clients and it'll destroy your reputation.
You make some great general points, and I completely agree.
...especially in the IA32 architecture
In this particular case, what I was trying to optimize with Duff's device was a low level video driver. And yes, profiling had indicated that was sucking down a good bit of the total time.
(Some other things were sucking down time too -- one was how screen updates worked, which I optimized in platform-independent C; the other was memcpy, which I optimized in assembly.)
Speaking directly to your first two points:
1. Does it really matter?
Answer: Yes, significantly. Under the right conditions, the assembly takes half the time the C code does. Screen updates take a good proportion of total CPU time, and there's no good substitute for doing screen updates.
2. How does it work on another CPU (family)?
Answer: that's why I went with Duff's device first; it works on all platforms, and on my particular platform, it gave about a 5% increase in speed (from a less unrolled loop).
Just to be clear, this is on an ARM architecture.
Oh course, you're right. And yeah, I give gcc a pass on the loading of halfwords. But I have to ask, why would gcc produce the sub-optimal sub; cmp instructions rather than just subS, regardless of the optimization level?
(Also, and I admit this isn't the best excuse, I was compiling with a make file calls a bunch of other make files that compile a bunch of other files (.C and assembly) with the same, project-wide compiler options. Changing the optimization level for one file, while certainly possible, wouldn't have been something easy to pack up in a patch for other developers on this shared, open source project. Changing the optimization level for all files might have broken other parts of the project. Again, it's not the best excuse, but it's a real-world one.)
In all seriousness -- no, I'm not trolling here -- how soon until the UK's equivalent of the RIAA convinces a judge that non-Microsoft operating systems are used to "facilitate" circumventing DRM?
"We can't actually prove that the defendant^H^H^H respondent uses the linux operating system and perl to run DeCSS, but then, we don't have to prove anything. He has a DVD burner, Judge, and why wouldn't he be using Microsoft's DRM-ecumbered Media Player 10 unless he was up to no good?
All it takes is an overzealous RIAA-type organization (check) and a non-tech savvy judge (check).
You can no doubt come up with your own scenarios involving torrents ("but Judge, there's no legitimate use for torrent networks, except to distribute linux, and we know what that's used for"), encryption ("why would a private person use encryption, unless they had something to hide"), or even debuggers ("used to reverse-engineer and crack non-free software, Judge"). Not to mention network sniffers, disassemblers, and circuit testers.
And of course, real criminals will continue to break the law. All this will stamp out is any real innovation outside of corporate control.
I sped up some C code by unrolling a loop with Duff's Device. Duff's Device, for those who haven't encountered it, makes an ingenious use of the often-maligned C behavior that case statements, in the absence of a break or return statement, fall-through.
Duff's Device takes advantage of the fall-through by jumping into the middle of an unrolled loop of repeated instructions. If eight instructions are unrolled, Duff's Device iterates the loop
times, but enters the loop by jumping to the
'the unrolled instruction from the end of the loop. (This sounds complicated, but isn't; just look at the code and it becomes clear.)
...
...
The whole point of Duff's Device is speed and locality of code. Speed: because the loop is unrolled, more instructions are executed for each jump back to the top (and jumps are, relatively, expensive, because they mean any preloaded instructions must be tossed out ans re-read. Locality: (hopefully) all the instructions can be cached, so the processor doesn't have to re-read them from memory.
But what gcc does with Duff's Device on ARM targets is just bizarre. gcc uses a jump table (good) to directly change the Program Counter (good, so far). But instead of jumping into the loop (which would be good), gcc uses the jump table to jump to
a redundant assignment and
an unconditional jump.
Yes, gcc very smartly makes a jump table (which directly changes the Program Counter, just like a jump would) to jump to a jump. This is simply a waste of code and time:
Why a jump table just to set up an unconditional jump? Why the redundant mov, which could have been done once, prior to the jump table jump? Who knows, that's what gcc does.
In this particular case, the object is to copy halfwords to a memory address, which address is really mapped to an output device. ARM processors, of course, are optimized for word addresses, so the "best" way to do this would be to load multiple words (LDM), shift the upper
Parent poster's telling an uncomfortable truth; he's not trolling.
Let's have enough intellectual honesty to distinguish the two.
If Indian salaries and other costs increase 20% a year for a few more years, the advantages of outsourcing will have largely disappeared. In the long run, good for India and good for U.S. I.T. workers.
You're assuming the cost of outsourcing have gone up.
But maybe it's that American salaries and benefits are on the decline.
(Of course, since CEO compensation is up, we can look forward to great jobs as valets and stable-boys on the lush estates of our masters.)
Now all the foreign people can study this course for free. It has costed some big dollars to get that course material. Tax payers money! We pay - others benefit. Do you have ANY idea how much this costs?
How much are you paying the Sumerian guy (yes, and others) who invented writing? The Babylonian who invented the calendar? Hell, most of the early American industrial revolution depended on violating English patents on water-wheels and drive-shafts and various cogs and pulleys. That God there was no Berne Convention then, huh?
When you enjoy Bach's Musical Offering, do you send a buck to the descendants of Bach's patron, Frederick II of Prussia?
The truth is, every one of us -- even the most prolific and creative inventors -- benefit far more from our shared cultural patrimony than we contribute to it.
Most of Newton's genius would have been wasted if he'd had to spend his life chasing down gazelles to get his lunch. Little of that genius would have been transmitted to anyone without the efforts of the anonymous inventor of writing and thousands of others who refined that tool and so many other tools down through the ages.
Information, knowledge -- they are not, contrary to the more glib claims of the Open Source movement, free. Knowledge must be wrested from nature at great cost by discovers, and each of us to understand that knowledge must pay our own cost to learn it.
But the Open Source advocates aren't wrong either: knowledge can be transmitted at little marginal cost: developing the course did cost the tax- and tuition-payers of Washington State, but the additional cost to make it available to all is the negligible amount required to host it on a web server. Nor is it "free" to anyone -- anyone who wants to possess it must take the time and effort to learn it, to re-make his own mind by incorporating that new (to him) knowledge. There is no "royal road" to knowledge; commoner or king must wrestle it into his own head.
Don't be a Philistine: millions, alive and dead, your teachers and people entirely unknown to you have for fifty thousand years given you knowledge and indeed a rich material culture based on that knowledge. Don't begrudge passing it on.
Looks like good stuff, and even the textbook is freely available. I've also enjoyed podcasted courses from several sources. One thing I do miss, when auditing by podcast, is a chance to discuss the course material with others (and the tests that would allow me to know how much of the material I'm getting).
Anyone want to join me in taking the course as a group? We could "meet" in IRC or via a listserv. and we'd probably get more out of the course by having others to bounce ideas off of, to challenge our assumptions, and to correct our errors.
If you're interested in joining me in this, reply to this post, and I'll see about organizing things in my Slashdot Journal.
This reminds me of a certain Unitary Executive and his henchmen.
Let's understand that the FBI prefers not only to keep the DNA database (which records only thirteen "genes"), but also the original sample, from which the donor's entire genetic code can be recovered.
Nowadays, the government doesn't discriminate against Jews. On May 14th 1940, it would have been perfectly safe for Anne Frank to have her "Jewish DNA" recorded by the Dutch government. On the next day, the Dutch government surrendered to Nazi Germany, and suddenly any Dutch government records were, legally and in fact, German government records.
Someone will shout "Godwin!" at this point, and some other patriotic American will claim, "it can't happen here."
Oh?
Ask your Japanese-American friends what happened to their grandparents in the America West in 1942. Or ask the parents of any your black friends about how, even after World War II, a black man risked his life if he tried to vote and broke the law if he used the wrong water fountain in many of these United States.
Or ask a gay man about how before Bowers, he could be put in prison for what he did with other consenting adults behind the locked doors of his own house.
Plenty of zealots, scientifically correct or not, have claimed to find genes that mark for "Jewishness" or "Negro blood" or even "criminal tendencies" or "homosexuality". Plenty of times, these zealots have gotten their prejudices written into laws: Nuremberg laws, Jim Crow laws, or, in 1927, the U.S Supreme Court's upholding of the forced sterilisation of Americans based on then-prevailing genetic theories:
Then, the zealots' hobbyhorse was eugenics. Today the politicians keep the people worked up by riding the hobbyhorses of "the war against terrorists" and "homosexual marriage". But Big Government has demonstrated time and time again that there are things with which it cannot be trusted. Our genetic codes are clearly one of those things that Government will eventually misuse. Our only defense is to prevent Government from getting it
How did the dinosaurs get here? It is my theory that they rode in on that meteor, bringing with them the advanced technologies that our government is still unearthing today (Al Gore "invented" the internet by digging it up from an ancient dinosaurian city). Also, "rawr" I'm a dinosaur.
Mr. President, shouldn't you be working on a plan to get us out of Iraq, rather than posting on slashdot?
I just installed it and completed an hour long phone call to a landline. I used the cheap out-of-the-box microphone that came with my Dell, and my computer speakers (not headphones), just like a speakerphone.
Worked beautifully. Neither I nor my friend had any problem hearing, and it didn't sound like a speaker phone all -- none of those typical speakerphone "click on/click off" noises at all. We could even both tallk at the same time, with both of us more-or-less audible. It was just about as if my friend was in the same room as me. (Some of the credit is probably due to my soundcard.)
I did have a major CPU utilization problem with Skype until I uninstalled McAfee's firewall, which made the audio terrible. McAfee had long been disabled in favor of (the free, better, not reliant on IE and Active-X) Kerio, but I hadn't gotten around to removing it entirely. Once removed, no problem with Skype at all.
Also, as I have Windows XP SP2, it was necessary to install this TCPIP.sys patch to get around Microsoft's "helpfulness".