I would say that "magnitudes" is unreasonable. Many government programs have high levels of administration overhead. This is a fact. Government overheads are also much higher than corporate ones, in general. Logically, a company with a profit motive has much more reason to be efficient than a government program run by bureucrats with no personal stake in the matter.
Conservatives often claim numbers like 70% as far as administrative overhead goes. "Orders of magnitude" would imply that the real numbers are more like 0.7% (two orders of magnitude). This is ridiculous. If you're going to claim that conservative's claims are ridiculous then at least don't make unreasonable claims doing so.
He wants the campus to build a $50M building with it. Sound like a math problem? yeah. His money is appreciated, but he's asking the campus to build more than he's willing to support, which is mildly questionable.
Even better, though, the proposed location for the new building is on top of this really shitty excuse for a building that looks like a few mobile homes shoved up against eachother and is generally an eyesore. In the artist's rendering of the plans, it apppears to be styled like many of the more nice looking new and old campus buildings (Green roof, light colored brick, etc) which is definitely a good thing. CMU has some pretty buildings, but it also has some impressive eyesores. Good to see one of them go away.
Also consider that Microsoft is the #1 employer of CS grads from CMU. This school's students and expertise have served him well, so I'm glad to see that he's willing to give something back.
How convenient to think that it's a straight up allegory...
Of course Lewis did not become a Christian until after he wrote those books...he was quite outspoken against Christianity at the time...so I doubt the symbolism could be as you represent it under the circumstances
Re:X in Windows?
on
The Power of X
·
· Score: 4, Insightful
You're kidding Right?
Filesystem permissions on NTFS are a joke. In theory, they'd be great, but In reality, XP opens up everything wide for you upon install. They could take the OS X approach and prompt you for a password upon installing things and have a more secure desktop with no user inconvenience, but as it stands, Spyware X can be installed by a user and affect other users because generally, a user has way too much write permission the way MS has set up XP.
Home directories are worthless unless they A. work right and B. Come with well-implemented and executed file permissions. Again, this is an area in which XP is capable, but the issue of most users in an XP system having far too much power weakens it.
The Dos/Windows command prompt was, is, and always will be a joke. It feels like it was written by someone who never had to be productive at a command prompt. It hasn't had command completion until recently, it doesn't have 10% of the utilities (packaged with windows) that one needs to be productive, and it doesn't have enough device/file mappings to be able to truly take advantage of it. Just cause you can do ls doesn't mean you can do du -md 1 | sort -n or dd if=cf_img of=/dev/sdb bs=2k. As an additional kludge, the cmd.exe window is awful for running an editor in and doesn't resize well.
Just because Microsoft provides some of these features doesn't mean it does it well. Truthfully, I think they should give up on the command prompt. they'll never get it right, and remote administration can be done in a web browser anyhow (webmin, anyone?) It's not like they're going to build software remotely as source code is not a popular distrubution method on windows.
Basically, saying that Windows has a command prompt is like saying that linux has direct rendering support. They're both true, but in such useless ways.
For $800 she should have just bought a whole new computer. These days, $800 buys you a fairly decent one.
Granted, she didn't know that before she started, but once it turns into 3 or 4 hours, you may as well quit while you're behind and shell out for a new system. She could still have done better.
Computers running windows 98 should not be on today's internet. No one who would run 98 is also conscientious enough for taking the steps to protect themselves online. Most people who actually care enough to take precautions also care enough about upgrading.
Would you leave your car doors unlocked downtown? How about paint a sign on your roof indicating that your car is in this status?
Thank you for your thoughtful reply. As for the id/object distinction, there are a few major differences.
Id isn't a 'base class', but exists at a different level than the object system itself. It is used to pass an object whose type might not be determined until runtime. Methods can be called on this object and are bound at call time. For projects where all internal interfaces aren't set in stone early, this can add a lot of flexibility. In Java, you'd have to explicitly cast the object into a type which had a particular method, then call that method. The Java response to this is to use interfaces. Indeed, this provides a moderately clean, if overly legalistic, solution.
id is not as powerful as python's 'everything is an object' principle (As far as I know, it can not contain primitive types, the handling of which is one of Java's major weaknesses, IMHO), but it does help to get closer. I don't have much experience with reflection in Java, but would it be possible to resolve a method at runtime, by its name represented as a string? Making everything an object induces significant overhead (which python only escapes partially).
Objective C can also be used in a statically typed way (similar to that of C/C++/Java), allowing performance in the general case, without limiting dynamicism, at the cost of a hashtable lookup, in the special ones. Keep in mind that python does a dictionary lookup on each function call, so this is not an unreasonable overhead.
My concern with anonymous classes is the same that is expressed in the SUN documentation for them--load time overhead. They each compile to a separate file that has to be loaded. Since a common implementation pattern in swing involves attaching an event handler using an inline anonymous class, else using a messy event handler with a switch statement by implementing an event handler interface and passing this. Neither are particularly clean. I see how reflection could circumvent this problem, but it is a much messier API than it should be. If you were implementing an event system yourself, however, I can see how you could abstract away much of the mess.
Stack based allocation, now that I think about it, would be difficult to implement, but I don't think it's impossible, and as time goes on, reference implementations will probably do something about this performance problem.
"But same goes for every other language out there -- the only difference is in degree."
Even if that is the difference, that is quite a difference to be belittling. Extremely mundane and mildly mundane are very different. Yesterday I was writing documentation. Do I classify that as mundane? Of course, but I only do it every six months or so when we near a release (User documentation, not code documentation). If I were doing mundane work each day, I would probably be searching for another job, but the vast majority of the time, I'm doing very interesting development with a lot of design freedom, incedentally, in python.
What Java gives you that python doesn't is insurance. On a run of the mill design-by-committee java project, the amount of damage a single programmer can do is minimal. This makes it a good investment for large corporations. Employees can be completely replaceable and the project will not die. If I left my job, the project would be dead in the water. At the same time, a much smaller team has accomplished much more for much less money than we could have using a more legalistic, less flexible tool like java.
I would be much happier with java if it had a few things--first off, a dynamic typing construct a la 'id' in objective C. 'object' just isn't powerful enough. Secondly, callables a la python. This includes class methods and statics (not merely function pointers like C). The fact that you have to jump through hoops to attach an event handler using a callback model (a la Swing) is inexcusable. Are anonymous classes really a solution? How about in an application with hundreds of event handlers? A programming language should enable the use of different techniques, not restrict them.
Additionally, the overhead of object allocation in Java is awful. Simple objects whose only attributes are primitive types should be stack allocated under a certain size. Heap allocations across the board are just too costly for a language that encourages the use of lots of small objects (by not providing list/dict/tuple style semantics). This sums up the chief scalability concern that I've encountered using Java. Can it be worked around? Yes. I found that fewer, larger objects accomplished that, but why shouldn't the language bridge that gap? If the concepts are best expressed with smaller primitives, why force the use of large ones? Isn't that what optimization is for?
The accountability that Java offers for the largest projects is indispensable in the industry. Very few people will argue with you on that, but Graham's main point is that a small, tight team, with a project based more flexible/powerful languages (usually he's praising lisp, but occasionally python gets some attention as well), will be much more productive than a large one using java.
A good programmer using the tool he/she feels best for the task at hand is seldom a bad thing, and if that is Java for you, then by all means, write java.
While python 'operator overloading' is good, it's not quite good enough. I am a python programmer. I work full time maintaining 15,000 or so lines of it for an in-house project. I designed most of the system I'm working on so I've had to make thousands of decisions along the way. One of them was to use python, a decision I do not regret. In fact, it has enabled us to do much more then we ever could have hoped to had we decided to implement similar functionality in C.
What python is missing is infix functions (a la Standard ML). I am not the biggest standard ML fan, but I have to say, infix functions are incredible. Here's how they work (copy/pasted from an interpreter interaction):
- fun times (x,y) = x*y; val times = fn : int * int -> int - infix times; infix times - 6 times 7; val it = 42 : int
By simply informing the interpreter environment that times is an 'infix function', it can be used as an operator. This is, lamentably, one of the few really cool things in ML. As another lose, it's statically typed...which is very annoying coming from the dynamic typing of python.
If you could dynamically define new operators in any way in python using a similar system, then define them for arbitrary objects (like operator overloading), then you could come up with some very interesting syntaxes that would be a bit more explicit *and* avoid confusing operations that don't correspond to the operators chosen to represent them (the c++/python weakness). Combined with decorators (yet to be introduced) and metaclasses, this could enable some very interesting and thus uncharted techniques.
Brian
I haven't used yahoo's mail in a few years, but as I remember the interface was clunky, slow, and painful, and there were adds above and/or below.
Regardless of the space they give you, that's probel number one. GMail has a very slick interface. It's as responsive as a web based user interface as any of the standalone mail programs I have used, which is very impressive. From what I hear, there is an 80kb.js file that is cached locally and after that everything is very very quick.
There isn't any difference between one gigabyte and one hundred megabytes to 99.9% of the people out there who could fit their mail in a few megs easily. It's really only power-users/mailing list subscribers who'll even approach one hundred. Heck, at my school I'm capped at $150 and after a year of deleting nothing I'm only at 30%. I'm a member of python-dev and wxpython-users which are both moderately trafficked groups and used to belong to python-users which is a very high traffic group. All these messages (thousands) are still around. It would take me a lot of time to fill that 150M, much less a gigabyte.
In any case, Yahoo should follow google's lead in the ad policies/user interface, rather than raw space. You could offer a terabyte and no one would even approach it, *it doesn't matter* If you're using a gig on gmail right now, chances are you are either being gratuitously inefficient or somehow abusing the system (using it for backup or something). There's just no way.
I don't know what schools you see people coming from, at but the school I go to (CMU), we're exposed to, at minimum:
-Java -Standard ML -C -i386 Assembler
Additionally, I've already run into python in one of my courses, and C++ in another. No we don't learn every language on the planet, but any emphasis on "Java programming" is pretty much over after you're second semester.
I disagree. I think java is an excellent first language. Why?
Well, first of all, there's a good, free, cross platform implementation and lots of usable free environments (Eclipse, etc). Eclipse from Linux to Mac to Windows is almost completely self-consistent. This is very impressive. To add to it, the java standard libraries are the SAME. No worries about which implementation you're using really have to come into play like they do with say the STL (compare code warrior to g++, for instance...at least a few years ago). A very small subset of the standard libraries are needed for this type of course, but that's fairly irrelevant.
Even more importantly than that, it's better to teach the theory of computer science without worrying about the mechanics of the language. Java implements a concept called a class, a comcept called an interface, a concept called an iterator. These concepts can be generalized. Knowledge of how C++ classes behave based on the assembly code they reduce to in one implementation does not build the concept in the same way.
I think the basics of computer science are in basic alforithm design. C and assembler are horrible for that. If you want to teach basic algorithm design, pull out Standard ML, an excellent language for the purpose of teaching computer science ideas, or java, which is at least simple.
You can know very little about java and still use it. The same is not true for assembley or C. In both of those languages, for example, you have to manipulate strings as memory regions. Again, a string is a concept in computer science and discrete math, not a 'memory region'. It shouldn't matter to a student how a specific implementation does them. Learning how to manipulate strings via pointers is not material for an intro to programming class.
For intro, I'd say Java or Python. Two high level languages that insulate you from the computer a bit so you can learn how to write a loop before you have to learn how to use a debugger.
Other possible reasons for these include tracebacks on failure, consistent error messages across platforms, etc.
The idea is not to confuse or discourage the students, while teaching them something. Python in particular lets you get results fast and is very satisfying to work with. Java is almost as good in that regard.
View java as a formal declaration of pseudocode. You can't expect people grading the exam to interpret what different students' ideas of pseudocode are, and you don't want to stuck the students with a BNF description of "pseudocode" before the test just so they can write it acceptably. Not all of the graders are familiar with everything out there, in fact many of them are high school math teachers, and familiar with only java and/or c++.
For problems in my theoretical discrete math course involving pseudocode, I usually write something that falls closest to python with a tinge of ML (functional concepts lend themselves well to theoretical problems) or Pascal (distinction between:= and =, for example), but really in between several languages that I'm familiar with. The difference, is that I know my TAs. They know java, they know C, they know ML. Python is pretty inherently readable, if you're not stupid. This does not accurately represent AP test graders.
Though in retrospect, a BNF description would truly test quite a bit more of essential computer science (formal language concepts required just to fill out the test completely:)
Yes I agree that the understanding of major algorithms should be the emphasis. I think more meaningful recursive ideas should be present too, but I just finished up a functional programming course, so I'm in that sort of mode.
I don't know what the exact credit count is, but here at CMU the math requirements for CS are considerably heavier:
Minimum for CS: - Calc 1 - Calc 2 - Matrix or Linear Algebra - Concepts of Math (intro to discrete math) - Great theoretical ideas in computer science (much much more difficult discrete math, with a computer science emphasis) - a Probability/Statistics course (ranging from easy to impossible) - One 'higher' math elective (such as graph theory, topology, combinatorics, etc.)
Calc 3 is *highly* recommended and the vast majority of CS majors take it as well, even though it only counts as a general elective. Lots of higher CS courses require it as a prereq.
As for my opinion about this, I think that the more math I come away with the better. Computer science seems to be a highly transient field, built upon mathematics. If I can conceptualize computer science concepts in terms of the much much more generally applicable ideas of mathematics then I am that much better off.
The department here, however, strongly emphasizes the theoretical side of CS (though it's a large enough department that there's plenty of everything). This would probably explain the seemingly heavy math requirements.
Well, 30 seconds for a laptop might not be so reasonable, but how about ten minutes? It seems that if the technology is there for such an ultrafast recharge, it should be possible to slow it down (obviously only very special 120VAC outlets in the US will allow you to draw 70 amps). This would knock down our consumption to a much more reasonable 3.5 amps for ten minutes. Still quite a few watts, but not as unreasonable.
Also, laptop batteries have multiple cells. Perhaps they could be charged in series in an ordering such that adjacent batteries were not recharged in direct sequence, spreading the 'hot spots' out over time.
There seem to be a lot of ways to potentially slow down the recharge to make the technology more reasonable/scalable, while still having a relatively fast recharge. I'd love to be able to recharge my laptop in the ten minutes between classes, or go halfway in five. It would extend my percieved battery life incredibly. Getting to an outlet for a few minutes at a time is easy. An hour or two is more difficult, as lecture halls aren't wired.
At the time, every other GUI programming method used messages.
I don't know what it is that you're calling a message, but the MacOS X (previously NextStep) api (around since 1989, yes with an eight) has been using method calls (termed messages on objc) since the early days.
Most GUI programming environments work through some form of callbacks. Qt is no exception, though signals and slots are sort of like callbacks on steroids (and definitely more akin to the messages in the NS api than anyhting else, again, your usage of messages is somewhere between narrow and uninformed)...GTK also has callbacks, as does Tkinter, both which have been around.
Today's C++ compilers are generally nearly as fast and stable as their C counterparts. Seriously, they've been stable since at least 1999, and the good ones were stable before that. Qt deliberately created moc and avoided the STL to dodge the sketchy C++ issues of the early days so it was never much of an issue. Quite frankly you should be making the compiler choice for your students and suggesting that they work in a campus lab set up for it if they don't feel like dealing with compiler issues. You should be able to test an environment before they do. As the teacher of the course that is your responsibility.
GTK+ is in no way winning. Qt is a much much cleaner implementation of GUI (somewhat comparable to the object oriented GTK wrappers, except it also provides the foundation classes that GTK lacks). Qt is also a win for portability as it provides a common layer for a large range of functionalities from networking to GUI to openGL across the three major platforms. Last time I checked, gtk2 for windows was less than perfect and a native gtk2 port for mac os X is not even on the horizon yet. is Gnome very popular? yes. is KDE? yes. They're both out there and they're both up there. Just cause you prefer gnome doesn't mean that it's time to declare a winner.
You're making some awfully harsh statements here that appear to have no real backing. Yes you tried to teach Qt and failed. perhaps the student's weren't ready for it? perhaps your campus computing environment wasn't ready for it? perhaps you weren't prepared to teach it? I wouldn't go blaming the GUI toolkit first thing.
What is neccesary to really work with Qt is an understanding of Object oriented *concepts*, not lanugage features. If you understand a given concept then the process of translating it into syntax can be learned in a few hours.
Signals and slots are probably the biggest hurtle to jump over for basic application development in Qt. They're somewhat different than run of the mill callbacks. The event-driven programming paradigm takes a bit of getting used to.
My advice to you, however, is to learn more languages. There is nothing that teaches a concept as well as seeing how it manifests itself in multiple languages. C++ is not all there is to object oriented programming. At the very least, python and objective-C have lots to teach you about OOP. As far as your Qt-learning goals, you'll see in part how the problems solved by signals and slots in Qt have been dealt with in other languages with less cumbersome object orientated features, and in that way gain a deeper understanding of and appreciation for the design decisions made in the tools you use.
In short the answer to your question is that you need to understand object oriented concepts with a little bit of depth. Class hierarchies, private, protected, friend, etc., Polymorphism both via operator overloading (which is used extensively in the Qt base classes), and via the 'common parent class (QObject)' approaches is also good to have a handle on.
Really, though. Learn more languages. There's lots of fun stuff to be done in languages with large standard libraries like java and python (and objective-c if you happen to be a mac user), even without getting into user interfaces.
My reccomendation if you're going to run apache on your mac is to build from source. The preinstalled one is pretty stripped down and the config fairly nondefault, not to mention that it's a 1.3.x version.
Building from source is pretty painless (configure,make,make install), and you can put the files wherever you want (./configure --help).
At that point, the apache docs should suit you fine. I feel like the apache configuration as shipped should be for mac's concept of "personal web sharing" only.
The fact that you even thought to bring up the idea of looking at it in financial terms betrays to anyone in music that you are most certainly not.
Besides....what do you think a DJ setup costs compared to a quality violin, bassoon, etc? Violins can cost millions...a bassoon in the hands of players in most symphony orchestras costs on the order of $50,000+. I can see a high end DJ rig costing $20-30k, but that's a far cry from a $50,000 bassoon. I have over $5,000 in horns as a _student_. My teacher has easily over $100,000 in horns (saxophones, flutes, clarinets, etc.). I can't see a DJ setup costing on that order.
Musical understanding can be had in different ways. Does a DJ need good ears, rhythmic sense? yes. Does he need to be able to improvise? yes. That's part of the point of the art form.
Having a vast repertoire of tracks, beats, etc. is impressive, but it doesn't even begin to compare with the amount of vocabulary that a jazz performer must have. I am a saxophonist, for example. I'm expected to be able to play _any tune_ in _any key_ from memory. Not to mention have taste in doing so, improvise effectively, understand complex harmonic structures, etc.
It takes years to grasp classical harmony and more years to grasp some of the more all-encompassing theories (such as lydian chromaticism). "How music works" is something that you gain through study of such things. Saying otherwise is like saying that every pro dj has the same theoretical knowledge as a pro musician. Compare this to math. How many people do you know who learned math without consulting a textbook or other people, just deriving it on their own? An intuition about math does not equate to formal study any more than an intuition about music implies that that intuition has been developed into expertise.
In short, foormal study is neccesary to grasp 'how music works'. In the end if you understand that you should be able to create on any medium. The musician is versatile. The DJ is not.
If one truly understands music, then they can compose it. That means from scratch. They can improvise. They can perform...ideally the same repertoire on several instruments (media?). If I learn a tune on the saxopohone, I can play it on the clarinet and piano. The transformations neccesary to do that take a lot of work. This is something a DJ never works on, and by doing so, misses a deeper understanding of music.
Are there exceptions? certainly. But the level of general musical understanding in general is lacking.
(Much of what i said is lacking can also be applied to strictly classical musicians as well. Yes I am aware.)
Guess what? Different unixes have different dynamic linkers. This is no big surprise.
If you're from linux, be aware that this is BSDish and linux tends towards the sysV style of things. I migrated my personal settings from my linux box and sync them regularly with *no* effort. Just copy vimrc, bashrc, etc.
It is very much unixlike. The file system, even. Yes, the apple stuff is in a seperate place. They keep it out of the unix tree cause it is distinctly non-unixlike. Really, the biggest difference I noticed is that there is no/lib. So what, they decided to keep libraries in/usr/lib? this doesnt really present too much of a problem, as it takes about five seconds to notice and adjust to that.
The naming conventions are UNIX and MAC. what did you expect but a combination? Mac OS X currently ships with an X server that can run fullscreen or managed as apple windows (I use both on different occasions). It's relatively stable, as fast as linux, and very very convenient.
Does it integrate perfectly? no. But it is certainly good enough for everyday use. I use a mac laptop and a headless linux machine. I run apps over X forwarding *all the time* with no trouble, as well as run things like gimp and gnome locally.
Install fink and it gets even more unix-y, if that is what you want. Most common unix apps are available and easy to install using fink, of course even without that, you're stil running something that's very very BSDish.
I think the FBI man was speaking of a few things- -Auto hard disk encryption at the click of a button makes it too easy for someone engaged in illegal activities to hide their tracks. -Macs resemble unix machines in many many ways and I'd imagine it's hard to tell the difference over a network at first glance. -Their equipment is probably not well equipped for HFS+ yet. That will take little time as darwin is open source and supports it (via changes that apple folded in) and it should be simple to use that code in order to make support for other operating systems, if they are so inclined.
Parent obviously is not aware of the realities of Mac OS X today. It practically./configure ; make; make install's out of box. It's posix compliant, it comes with X, etc...
Calculators are why students can't do math by themselves anymore. Whoever had the idea that in my sophomore year of high school, I should be required to purchase a TI-89 calculator should be shot.
In my senior year of high school, I took calc 1 and 2 from a decent state school. This course also integrated the TI-89.
Once I got to college, I entered the land of multi-variable calculus. Since the school I'm going to is a high-end private institution, of course they don't allow us to use calculators at all in Calc 3. Silly me. I haven't taken an integral since we first learned about each method of integration. Why? "here's how you can take an integral on your TI-89" were the first words out of the teacher's mouth as soon as we'd learned the basic concepts.
So I spent the first two weeks of school here cramming calculus 1 and 2 into my head *again*. 2-3 hours a night just to get caught up with the rest of the students (often sophomores), who had learned it right.
Now I shun the calculator for all purposes except straight calculations (in a physics course, for example). For mathematics either you can do it with your head/on paper, or it's a big enough task that you need a full fledged CAS. There's really no place for a calculator in math.
The real question isn't "why can't we have a multiplatform fully-featured filesystem standard," it's "despite the freedom from standards and ability to create their own implementations, why do our filesystems as a whole suck?"
Think about it. No mainstream perating system right now has a metadata/database type fs supported in any sort of default configuration (no Be is not mainstream)...
It's not that we have multiple different but good solutions to the problem, it's that we have multiple bad ones, and no standard to even unite them in their badness. Seriously, do you think that the common denominator of HFS/NTFS/EXT3 is really that much more than ISO9660?
I'm a CS student and I can't cound the numberr of people I know who leave BackOrifice installed on their machines for the very reason of deniability in this sense. For them, it's so they can blame their p2p activity on 'evil hackers'...of course, it's a flawed plan since the university just cuts you for 45 days if they are able to download from you (They only make an attempt after the RIAA notifies them that your IP is delinquent. If they fail, they tell the RIAA that they were wrong. If they succeed, they take away your connection and tell the RIAA that the problem was resolved on the inside...up until this point, this has done a pretty good job of protecting the students here from litigation).
I would say that "magnitudes" is unreasonable. Many government programs have high levels of administration overhead. This is a fact. Government overheads are also much higher than corporate ones, in general. Logically, a company with a profit motive has much more reason to be efficient than a government program run by bureucrats with no personal stake in the matter.
Conservatives often claim numbers like 70% as far as administrative overhead goes. "Orders of magnitude" would imply that the real numbers are more like 0.7% (two orders of magnitude). This is ridiculous. If you're going to claim that conservative's claims are ridiculous then at least don't make unreasonable claims doing so.
He wants the campus to build a $50M building with it. Sound like a math problem? yeah. His money is appreciated, but he's asking the campus to build more than he's willing to support, which is mildly questionable.
Even better, though, the proposed location for the new building is on top of this really shitty excuse for a building that looks like a few mobile homes shoved up against eachother and is generally an eyesore. In the artist's rendering of the plans, it apppears to be styled like many of the more nice looking new and old campus buildings (Green roof, light colored brick, etc) which is definitely a good thing. CMU has some pretty buildings, but it also has some impressive eyesores. Good to see one of them go away.
Also consider that Microsoft is the #1 employer of CS grads from CMU. This school's students and expertise have served him well, so I'm glad to see that he's willing to give something back.
How convenient to think that it's a straight up allegory...
Of course Lewis did not become a Christian until after he wrote those books...he was quite outspoken against Christianity at the time...so I doubt the symbolism could be as you represent it under the circumstances
You're kidding Right?
Filesystem permissions on NTFS are a joke. In theory, they'd be great, but In reality, XP opens up everything wide for you upon install. They could take the OS X approach and prompt you for a password upon installing things and have a more secure desktop with no user inconvenience, but as it stands, Spyware X can be installed by a user and affect other users because generally, a user has way too much write permission the way MS has set up XP.
Home directories are worthless unless they A. work right and B. Come with well-implemented and executed file permissions. Again, this is an area in which XP is capable, but the issue of most users in an XP system having far too much power weakens it.
The Dos/Windows command prompt was, is, and always will be a joke. It feels like it was written by someone who never had to be productive at a command prompt. It hasn't had command completion until recently, it doesn't have 10% of the utilities (packaged with windows) that one needs to be productive, and it doesn't have enough device/file mappings to be able to truly take advantage of it. Just cause you can do ls doesn't mean you can do du -md 1 | sort -n or dd if=cf_img of=/dev/sdb bs=2k. As an additional kludge, the cmd.exe window is awful for running an editor in and doesn't resize well.
Just because Microsoft provides some of these features doesn't mean it does it well. Truthfully, I think they should give up on the command prompt. they'll never get it right, and remote administration can be done in a web browser anyhow (webmin, anyone?) It's not like they're going to build software remotely as source code is not a popular distrubution method on windows.
Basically, saying that Windows has a command prompt is like saying that linux has direct rendering support. They're both true, but in such useless ways.
Brian
For $800 she should have just bought a whole new computer. These days, $800 buys you a fairly decent one.
Granted, she didn't know that before she started, but once it turns into 3 or 4 hours, you may as well quit while you're behind and shell out for a new system. She could still have done better.
Computers running windows 98 should not be on today's internet. No one who would run 98 is also conscientious enough for taking the steps to protect themselves online. Most people who actually care enough to take precautions also care enough about upgrading.
Would you leave your car doors unlocked downtown? How about paint a sign on your roof indicating that your car is in this status?
Brian
Thank you for your thoughtful reply. As for the id/object distinction, there are a few major differences.
Id isn't a 'base class', but exists at a different level than the object system itself. It is used to pass an object whose type might not be determined until runtime. Methods can be called on this object and are bound at call time. For projects where all internal interfaces aren't set in stone early, this can add a lot of flexibility. In Java, you'd have to explicitly cast the object into a type which had a particular method, then call that method. The Java response to this is to use interfaces. Indeed, this provides a moderately clean, if overly legalistic, solution.
id is not as powerful as python's 'everything is an object' principle (As far as I know, it can not contain primitive types, the handling of which is one of Java's major weaknesses, IMHO), but it does help to get closer. I don't have much experience with reflection in Java, but would it be possible to resolve a method at runtime, by its name represented as a string? Making everything an object induces significant overhead (which python only escapes partially).
Objective C can also be used in a statically typed way (similar to that of C/C++/Java), allowing performance in the general case, without limiting dynamicism, at the cost of a hashtable lookup, in the special ones. Keep in mind that python does a dictionary lookup on each function call, so this is not an unreasonable overhead.
My concern with anonymous classes is the same that is expressed in the SUN documentation for them--load time overhead. They each compile to a separate file that has to be loaded. Since a common implementation pattern in swing involves attaching an event handler using an inline anonymous class, else using a messy event handler with a switch statement by implementing an event handler interface and passing this. Neither are particularly clean. I see how reflection could circumvent this problem, but it is a much messier API than it should be. If you were implementing an event system yourself, however, I can see how you could abstract away much of the mess.
Stack based allocation, now that I think about it, would be difficult to implement, but I don't think it's impossible, and as time goes on, reference implementations will probably do something about this performance problem.
Brian
Ok. I'll take the bait.
"But same goes for every other language out there -- the only difference is in degree."
Even if that is the difference, that is quite a difference to be belittling. Extremely mundane and mildly mundane are very different. Yesterday I was writing documentation. Do I classify that as mundane? Of course, but I only do it every six months or so when we near a release (User documentation, not code documentation). If I were doing mundane work each day, I would probably be searching for another job, but the vast majority of the time, I'm doing very interesting development with a lot of design freedom, incedentally, in python.
What Java gives you that python doesn't is insurance. On a run of the mill design-by-committee java project, the amount of damage a single programmer can do is minimal. This makes it a good investment for large corporations. Employees can be completely replaceable and the project will not die. If I left my job, the project would be dead in the water. At the same time, a much smaller team has accomplished much more for much less money than we could have using a more legalistic, less flexible tool like java.
I would be much happier with java if it had a few things--first off, a dynamic typing construct a la 'id' in objective C. 'object' just isn't powerful enough. Secondly, callables a la python. This includes class methods and statics (not merely function pointers like C). The fact that you have to jump through hoops to attach an event handler using a callback model (a la Swing) is inexcusable. Are anonymous classes really a solution? How about in an application with hundreds of event handlers? A programming language should enable the use of different techniques, not restrict them.
Additionally, the overhead of object allocation in Java is awful. Simple objects whose only attributes are primitive types should be stack allocated under a certain size. Heap allocations across the board are just too costly for a language that encourages the use of lots of small objects (by not providing list/dict/tuple style semantics). This sums up the chief scalability concern that I've encountered using Java. Can it be worked around? Yes. I found that fewer, larger objects accomplished that, but why shouldn't the language bridge that gap? If the concepts are best expressed with smaller primitives, why force the use of large ones? Isn't that what optimization is for?
The accountability that Java offers for the largest projects is indispensable in the industry. Very few people will argue with you on that, but Graham's main point is that a small, tight team, with a project based more flexible/powerful languages (usually he's praising lisp, but occasionally python gets some attention as well), will be much more productive than a large one using java.
A good programmer using the tool he/she feels best for the task at hand is seldom a bad thing, and if that is Java for you, then by all means, write java.
Brian
While python 'operator overloading' is good, it's not quite good enough. I am a python programmer. I work full time maintaining 15,000 or so lines of it for an in-house project. I designed most of the system I'm working on so I've had to make thousands of decisions along the way. One of them was to use python, a decision I do not regret. In fact, it has enabled us to do much more then we ever could have hoped to had we decided to implement similar functionality in C.
What python is missing is infix functions (a la Standard ML). I am not the biggest standard ML fan, but I have to say, infix functions are incredible. Here's how they work (copy/pasted from an interpreter interaction):
By simply informing the interpreter environment that times is an 'infix function', it can be used as an operator. This is, lamentably, one of the few really cool things in ML. As another lose, it's statically typed...which is very annoying coming from the dynamic typing of python.If you could dynamically define new operators in any way in python using a similar system, then define them for arbitrary objects (like operator overloading), then you could come up with some very interesting syntaxes that would be a bit more explicit *and* avoid confusing operations that don't correspond to the operators chosen to represent them (the c++/python weakness). Combined with decorators (yet to be introduced) and metaclasses, this could enable some very interesting and thus uncharted techniques. Brian
I haven't used yahoo's mail in a few years, but as I remember the interface was clunky, slow, and painful, and there were adds above and/or below.
.js file that is cached locally and after that everything is very very quick.
Regardless of the space they give you, that's probel number one. GMail has a very slick interface. It's as responsive as a web based user interface as any of the standalone mail programs I have used, which is very impressive. From what I hear, there is an 80kb
There isn't any difference between one gigabyte and one hundred megabytes to 99.9% of the people out there who could fit their mail in a few megs easily. It's really only power-users/mailing list subscribers who'll even approach one hundred. Heck, at my school I'm capped at $150 and after a year of deleting nothing I'm only at 30%. I'm a member of python-dev and wxpython-users which are both moderately trafficked groups and used to belong to python-users which is a very high traffic group. All these messages (thousands) are still around. It would take me a lot of time to fill that 150M, much less a gigabyte.
In any case, Yahoo should follow google's lead in the ad policies/user interface, rather than raw space. You could offer a terabyte and no one would even approach it, *it doesn't matter* If you're using a gig on gmail right now, chances are you are either being gratuitously inefficient or somehow abusing the system (using it for backup or something). There's just no way.
Brian
I'm confused as to whether "Redhate" refers to "Redhat" or is some play on "Redmond."
I don't know what schools you see people coming from, at but the school I go to (CMU), we're exposed to, at minimum:
-Java
-Standard ML
-C
-i386 Assembler
Additionally, I've already run into python in one of my courses, and C++ in another. No we don't learn every language on the planet, but any emphasis on "Java programming" is pretty much over after you're second semester.
Brian
I disagree. I think java is an excellent first language. Why?
Well, first of all, there's a good, free, cross platform implementation and lots of usable free environments (Eclipse, etc). Eclipse from Linux to Mac to Windows is almost completely self-consistent. This is very impressive. To add to it, the java standard libraries are the SAME. No worries about which implementation you're using really have to come into play like they do with say the STL (compare code warrior to g++, for instance...at least a few years ago). A very small subset of the standard libraries are needed for this type of course, but that's fairly irrelevant.
Even more importantly than that, it's better to teach the theory of computer science without worrying about the mechanics of the language. Java implements a concept called a class, a comcept called an interface, a concept called an iterator. These concepts can be generalized. Knowledge of how C++ classes behave based on the assembly code they reduce to in one implementation does not build the concept in the same way.
I think the basics of computer science are in basic alforithm design. C and assembler are horrible for that. If you want to teach basic algorithm design, pull out Standard ML, an excellent language for the purpose of teaching computer science ideas, or java, which is at least simple.
You can know very little about java and still use it. The same is not true for assembley or C. In both of those languages, for example, you have to manipulate strings as memory regions. Again, a string is a concept in computer science and discrete math, not a 'memory region'. It shouldn't matter to a student how a specific implementation does them. Learning how to manipulate strings via pointers is not material for an intro to programming class.
For intro, I'd say Java or Python. Two high level languages that insulate you from the computer a bit so you can learn how to write a loop before you have to learn how to use a debugger.
Other possible reasons for these include tracebacks on failure, consistent error messages across platforms, etc.
The idea is not to confuse or discourage the students, while teaching them something. Python in particular lets you get results fast and is very satisfying to work with. Java is almost as good in that regard.
Brian
View java as a formal declaration of pseudocode. You can't expect people grading the exam to interpret what different students' ideas of pseudocode are, and you don't want to stuck the students with a BNF description of "pseudocode" before the test just so they can write it acceptably. Not all of the graders are familiar with everything out there, in fact many of them are high school math teachers, and familiar with only java and/or c++.
:= and =, for example), but really in between several languages that I'm familiar with. The difference, is that I know my TAs. They know java, they know C, they know ML. Python is pretty inherently readable, if you're not stupid. This does not accurately represent AP test graders.
:)
For problems in my theoretical discrete math course involving pseudocode, I usually write something that falls closest to python with a tinge of ML (functional concepts lend themselves well to theoretical problems) or Pascal (distinction between
Though in retrospect, a BNF description would truly test quite a bit more of essential computer science (formal language concepts required just to fill out the test completely
Yes I agree that the understanding of major algorithms should be the emphasis. I think more meaningful recursive ideas should be present too, but I just finished up a functional programming course, so I'm in that sort of mode.
Brian
I don't know what the exact credit count is, but here at CMU the math requirements for CS are considerably heavier:
Minimum for CS:
- Calc 1
- Calc 2
- Matrix or Linear Algebra
- Concepts of Math (intro to discrete math)
- Great theoretical ideas in computer science (much much more difficult discrete math, with a computer science emphasis)
- a Probability/Statistics course (ranging from easy to impossible)
- One 'higher' math elective (such as graph theory, topology, combinatorics, etc.)
Calc 3 is *highly* recommended and the vast majority of CS majors take it as well, even though it only counts as a general elective. Lots of higher CS courses require it as a prereq.
As for my opinion about this, I think that the more math I come away with the better. Computer science seems to be a highly transient field, built upon mathematics. If I can conceptualize computer science concepts in terms of the much much more generally applicable ideas of mathematics then I am that much better off.
The department here, however, strongly emphasizes the theoretical side of CS (though it's a large enough department that there's plenty of everything). This would probably explain the seemingly heavy math requirements.
Brian
Well, 30 seconds for a laptop might not be so reasonable, but how about ten minutes? It seems that if the technology is there for such an ultrafast recharge, it should be possible to slow it down (obviously only very special 120VAC outlets in the US will allow you to draw 70 amps). This would knock down our consumption to a much more reasonable 3.5 amps for ten minutes. Still quite a few watts, but not as unreasonable.
Also, laptop batteries have multiple cells. Perhaps they could be charged in series in an ordering such that adjacent batteries were not recharged in direct sequence, spreading the 'hot spots' out over time.
There seem to be a lot of ways to potentially slow down the recharge to make the technology more reasonable/scalable, while still having a relatively fast recharge. I'd love to be able to recharge my laptop in the ten minutes between classes, or go halfway in five. It would extend my percieved battery life incredibly. Getting to an outlet for a few minutes at a time is easy. An hour or two is more difficult, as lecture halls aren't wired.
I like the direction this is going...
Brian
This thread wasn't chosen by editors to create a Debian/Gentoo flamewar. Nope. Not at all.
I don't know what it is that you're calling a message, but the MacOS X (previously NextStep) api (around since 1989, yes with an eight) has been using method calls (termed messages on objc) since the early days.
Most GUI programming environments work through some form of callbacks. Qt is no exception, though signals and slots are sort of like callbacks on steroids (and definitely more akin to the messages in the NS api than anyhting else, again, your usage of messages is somewhere between narrow and uninformed)...GTK also has callbacks, as does Tkinter, both which have been around.
Today's C++ compilers are generally nearly as fast and stable as their C counterparts. Seriously, they've been stable since at least 1999, and the good ones were stable before that. Qt deliberately created moc and avoided the STL to dodge the sketchy C++ issues of the early days so it was never much of an issue. Quite frankly you should be making the compiler choice for your students and suggesting that they work in a campus lab set up for it if they don't feel like dealing with compiler issues. You should be able to test an environment before they do. As the teacher of the course that is your responsibility.
GTK+ is in no way winning. Qt is a much much cleaner implementation of GUI (somewhat comparable to the object oriented GTK wrappers, except it also provides the foundation classes that GTK lacks). Qt is also a win for portability as it provides a common layer for a large range of functionalities from networking to GUI to openGL across the three major platforms. Last time I checked, gtk2 for windows was less than perfect and a native gtk2 port for mac os X is not even on the horizon yet. is Gnome very popular? yes. is KDE? yes. They're both out there and they're both up there. Just cause you prefer gnome doesn't mean that it's time to declare a winner.
You're making some awfully harsh statements here that appear to have no real backing. Yes you tried to teach Qt and failed. perhaps the student's weren't ready for it? perhaps your campus computing environment wasn't ready for it? perhaps you weren't prepared to teach it? I wouldn't go blaming the GUI toolkit first thing.
Brian
What is neccesary to really work with Qt is an understanding of Object oriented *concepts*, not lanugage features. If you understand a given concept then the process of translating it into syntax can be learned in a few hours.
Signals and slots are probably the biggest hurtle to jump over for basic application development in Qt. They're somewhat different than run of the mill callbacks. The event-driven programming paradigm takes a bit of getting used to.
My advice to you, however, is to learn more languages. There is nothing that teaches a concept as well as seeing how it manifests itself in multiple languages. C++ is not all there is to object oriented programming. At the very least, python and objective-C have lots to teach you about OOP. As far as your Qt-learning goals, you'll see in part how the problems solved by signals and slots in Qt have been dealt with in other languages with less cumbersome object orientated features, and in that way gain a deeper understanding of and appreciation for the design decisions made in the tools you use.
In short the answer to your question is that you need to understand object oriented concepts with a little bit of depth. Class hierarchies, private, protected, friend, etc., Polymorphism both via operator overloading (which is used extensively in the Qt base classes), and via the 'common parent class (QObject)' approaches is also good to have a handle on.
Really, though. Learn more languages. There's lots of fun stuff to be done in languages with large standard libraries like java and python (and objective-c if you happen to be a mac user), even without getting into user interfaces.
Brian
My reccomendation if you're going to run apache on your mac is to build from source. The preinstalled one is pretty stripped down and the config fairly nondefault, not to mention that it's a 1.3.x version.
Building from source is pretty painless (configure,make,make install), and you can put the files wherever you want (./configure --help).
At that point, the apache docs should suit you fine. I feel like the apache configuration as shipped should be for mac's concept of "personal web sharing" only.
Brian
The fact that you even thought to bring up the idea of looking at it in financial terms betrays to anyone in music that you are most certainly not.
Besides....what do you think a DJ setup costs compared to a quality violin, bassoon, etc? Violins can cost millions...a bassoon in the hands of players in most symphony orchestras costs on the order of $50,000+. I can see a high end DJ rig costing $20-30k, but that's a far cry from a $50,000 bassoon. I have over $5,000 in horns as a _student_. My teacher has easily over $100,000 in horns (saxophones, flutes, clarinets, etc.). I can't see a DJ setup costing on that order.
Musical understanding can be had in different ways. Does a DJ need good ears, rhythmic sense? yes. Does he need to be able to improvise? yes. That's part of the point of the art form.
Having a vast repertoire of tracks, beats, etc. is impressive, but it doesn't even begin to compare with the amount of vocabulary that a jazz performer must have. I am a saxophonist, for example. I'm expected to be able to play _any tune_ in _any key_ from memory. Not to mention have taste in doing so, improvise effectively, understand complex harmonic structures, etc.
It takes years to grasp classical harmony and more years to grasp some of the more all-encompassing theories (such as lydian chromaticism). "How music works" is something that you gain through study of such things. Saying otherwise is like saying that every pro dj has the same theoretical knowledge as a pro musician. Compare this to math. How many people do you know who learned math without consulting a textbook or other people, just deriving it on their own? An intuition about math does not equate to formal study any more than an intuition about music implies that that intuition has been developed into expertise.
In short, foormal study is neccesary to grasp 'how music works'. In the end if you understand that you should be able to create on any medium. The musician is versatile. The DJ is not.
If one truly understands music, then they can compose it. That means from scratch. They can improvise. They can perform...ideally the same repertoire on several instruments (media?). If I learn a tune on the saxopohone, I can play it on the clarinet and piano. The transformations neccesary to do that take a lot of work. This is something a DJ never works on, and by doing so, misses a deeper understanding of music.
Are there exceptions? certainly. But the level of general musical understanding in general is lacking.
(Much of what i said is lacking can also be applied to strictly classical musicians as well. Yes I am aware.)
Brian
"Denver Man Sues Penis-Enlargment Firms"
..."
"The Denver Post reports that 'A California man on Thursday sued a slew of
Guess what? Different unixes have different dynamic linkers. This is no big surprise.
/lib. So what, they decided to keep libraries in /usr/lib? this doesnt really present too much of a problem, as it takes about five seconds to notice and adjust to that.
./configure ; make; make install's out of box. It's posix compliant, it comes with X, etc...
If you're from linux, be aware that this is BSDish and linux tends towards the sysV style of things. I migrated my personal settings from my linux box and sync them regularly with *no* effort. Just copy vimrc, bashrc, etc.
It is very much unixlike. The file system, even. Yes, the apple stuff is in a seperate place. They keep it out of the unix tree cause it is distinctly non-unixlike. Really, the biggest difference I noticed is that there is no
The naming conventions are UNIX and MAC. what did you expect but a combination? Mac OS X currently ships with an X server that can run fullscreen or managed as apple windows (I use both on different occasions). It's relatively stable, as fast as linux, and very very convenient.
Does it integrate perfectly? no. But it is certainly good enough for everyday use. I use a mac laptop and a headless linux machine. I run apps over X forwarding *all the time* with no trouble, as well as run things like gimp and gnome locally.
Install fink and it gets even more unix-y, if that is what you want. Most common unix apps are available and easy to install using fink, of course even without that, you're stil running something that's very very BSDish.
I think the FBI man was speaking of a few things-
-Auto hard disk encryption at the click of a button makes it too easy for someone engaged in illegal activities to hide their tracks.
-Macs resemble unix machines in many many ways and I'd imagine it's hard to tell the difference over a network at first glance.
-Their equipment is probably not well equipped for HFS+ yet. That will take little time as darwin is open source and supports it (via changes that apple folded in) and it should be simple to use that code in order to make support for other operating systems, if they are so inclined.
Parent obviously is not aware of the realities of Mac OS X today. It practically
Brian
Calculators are why students can't do math by themselves anymore. Whoever had the idea that in my sophomore year of high school, I should be required to purchase a TI-89 calculator should be shot.
In my senior year of high school, I took calc 1 and 2 from a decent state school. This course also integrated the TI-89.
Once I got to college, I entered the land of multi-variable calculus. Since the school I'm going to is a high-end private institution, of course they don't allow us to use calculators at all in Calc 3. Silly me. I haven't taken an integral since we first learned about each method of integration. Why? "here's how you can take an integral on your TI-89" were the first words out of the teacher's mouth as soon as we'd learned the basic concepts.
So I spent the first two weeks of school here cramming calculus 1 and 2 into my head *again*. 2-3 hours a night just to get caught up with the rest of the students (often sophomores), who had learned it right.
Now I shun the calculator for all purposes except straight calculations (in a physics course, for example). For mathematics either you can do it with your head/on paper, or it's a big enough task that you need a full fledged CAS. There's really no place for a calculator in math.
Brian
The real question isn't "why can't we have a multiplatform fully-featured filesystem standard," it's "despite the freedom from standards and ability to create their own implementations, why do our filesystems as a whole suck?"
Think about it. No mainstream perating system right now has a metadata/database type fs supported in any sort of default configuration (no Be is not mainstream)...
It's not that we have multiple different but good solutions to the problem, it's that we have multiple bad ones, and no standard to even unite them in their badness. Seriously, do you think that the common denominator of HFS/NTFS/EXT3 is really that much more than ISO9660?
Brian
Brian
I'm a CS student and I can't cound the numberr of people I know who leave BackOrifice installed on their machines for the very reason of deniability in this sense. For them, it's so they can blame their p2p activity on 'evil hackers'...of course, it's a flawed plan since the university just cuts you for 45 days if they are able to download from you (They only make an attempt after the RIAA notifies them that your IP is delinquent. If they fail, they tell the RIAA that they were wrong. If they succeed, they take away your connection and tell the RIAA that the problem was resolved on the inside...up until this point, this has done a pretty good job of protecting the students here from litigation).
Brian