Personally, I think it'd be better if the entire world started using C/R
I'm a shareware author who send license keys by email when people pay for my shareware and I really do not think it's good usage of my time to "confirm" that I want to send the key each time someone uses a C/R system.
Already people forget that they stated an outdated E-mail address etc., so I'm quite sure a lot would also forget to white list my sending address (since those currently using C/R already do forget this).
Re:Does /. want endorsements from the NY Times?
on
Buggy Voting Machines
·
· Score: 1
The draft is a disgusting practice. I can't think of anything more revolting then a nation demanding that its citizens surrender their lives against their will
How about a nation that goes to war and kill thousands of other people with money being the sole motivation?
The problem with a professional army is seen currently in Iraq where some soldiers clearly get a kick out of torturing and even killing innocent people as have been documented on numerous occasions.
I'm a coder who administers multiple Windows and Linux machines and codes in a variety of different languages. Usability problems piss me off more than most users, because I realise they're the fault of a programmer who just said, "It's good enough for me!"
What pisses me off is that no-one really tries to understand the problem.
Programming is difficult, it's a huge amount of work, every program has hundreds of "to do" items (bug fixes, requested features etc.)
Requirement more or less always change throughout the process, a lot of things needs to be tested in practice before it can be said if it's a good or bad idea.
Showing the proper error message, not making a requester modal, adding undo to some window/editor etc. can sometimes be days of work.
Personally I have a reputation for being good at the usability aspect, I have a minor in psychology, I have at least a decade of experience and it's no problem for me to point at the many things which are just plain wrong in programs and come up with very constructive criticism to improve the situation.
Still I've been involved in several projects where the usability was suboptimal in the final product, I knew it was suboptimal, but I also knew why it ended that way, and how many resources would be required to improve it and how many resources where required to fix other things, and how these other things generally had higher priority than fixing the usability stuff.
I really wish all the usability gurus would get involved in some real projects instead of watching from the sideline.
The shell is a programming language with which you can do basically what you want, e.g. you mention 'wc' also counts HTML tags, well, for that you have 'sed' to strip them and perhaps 'tr' afterwards to collapse double spaces etc.
So the task at hand, at least when working with text or automating some process (e.g. synching files with a server, performing a database query and react upon the result etc.) can more or less always be done in the shell (programming language).
A GUI is someone picking the most common actions and making these more easy to accomplish than having to do them from the shell (although the shell also have ways to introduce shortcuts), and also to make the actions possible for users without prior knowledge about the inner-workings of the "command".
Most of the time most users are really doing the same things, and for this a GUI certainly is the best solution.
I think a lot of people do get this point, and that's part of Apples success, because they offer us both.
I use OS X myself btw and share equal love for both the command line and the Aqua/Cocoa interface.
Spotlight is not really like ReiserFS -- with Spotlight all metadata is automatically extracted from the file each time it's updated (using file type specific importers).
So you can't store arbitrary metadata for your files (like with ReiserFS and BeFS) -- Spotlight is a uniform way to access metadata already in the file format, e.g. you can query the width of an image, but you can't attach a location comment to your images if the file format doesn't already support it.
Let's say one guy can read 6 meters per hour (intentionally low)
In a full day's work, he can read 48 meters.
He works 5 days/week, 4 weeks/month, so that's 960 meters per month.
We'll say he gets paid $15 (intentionally high)per hour.
That's $2400 for reading 960 meters, or $2.50 per meter.
In the future, if you know how many meters he can read pr. hour and you know what he's paid pr. hour, it doesn't really matter how many hours pr. week, weeks pr. month or money pr. year that all this amounts to, as the price pr. unit is just 15$/6units = 2.5 $/unit;)
If one company produced 95% of the power sockets on the marked, they surely would not be interested in standardization, so that others could easier interoperate with them or not have to worry about future compatibility etc.
Your argument by example (5 examples, actually) is just flawed logic
I fully agree with your post and just wanted to add, that the OP also do not know what would happen, if these people got an education. Even though they perform better than the average graduate, does not mean that they cannot improve.
I myself have programmed since I was 12, and when I started at the university, I had already proven that I could handle large software projects, and probably better than the average bachelor.
But was the education redundant? certainly not. The first year I was a little bored, but later I realized that I actually did learn a lot, even though I did not realize it at first, the second, third, fourth, and fifth year was certainly some of the best time I've ever spent!
And actually, they didn't even teach programming per se...
Until now I have sticked with tcsh for one single reason: history substition!
Basically it lets me insert text from my history (including the current line) using few symbols (e.g. !$ is the last argument of the previous line) -- it's extremely powerful, e.g. it allows to search in the history and can do substitutions in results, or head/tail for paths etc.
I use it a lot to keep down the number of characters I need to type, and I have even assigned hotkeys to some of the substitutions I use the most.
This is really the make-or-break feature for wether or not I want to use a shell, so I really hope zsh has something similar!?!
Unfortunately, designing UI before writing code is seen as heresy by the Unix Culture that dominates Open Source, often being referred to as a "proprietary" development methodology
How on earth did you get to that conclusion?
The reason why the UI is not designed as the first thing is simple: people like to do rapid prototyping, learning by doing, evolutionary design, or whatever it is called.
You are talking about people who think it is fun to *program*, and who *program* in their free time to solve their *own* problems, often w/o a clue about what the final program will evolve into being.
If I write a program to scratch my personal itch, and I put it out as GPL but say, it works for me so I don't give a rats ass about wether or not it has bad usability for Joe Average, is that then selfish of me?
Why aren't we bashing normal people for putting up their homepages? many of the pages out there probably has just as low usability as some of the bad open source projects, so why don't we see all sorts of articles talking about when the internet will be mature for the average user, what the problem is with all these people putting out bad pages, and how we can educate them to make better pages?
90% of anything is crap, I am puzzled that only Linux programmers has to be made aware of it -- why don't we start bashing books, movies, groceries, which are actually consumer goods we *pay* for, unlike Linux software, and the quality here is often just as low, if not much lower!
if the developers would actually take into consideration how the interface is going to be used in the Real World, not the world where everyone is a techno-whiz-bang-'puter-gu-ru-genius.
Which software are you talking about?
Most of what I use (on OS X) is well designed!
The problem with Linux software is probably less with the individual developer and more with the lack of one GUI framework to rule them all and one set of detailed human interface guidelines which all developers should follow.
When I meet bad interfaces on OS X, they are mostly bad because they do not act like the rest of the interfaces I use, i.e. it is that interfaces act the same which gives them "high usability" -- I recall the same from when I used AmigaOS (which also had detailed guidelines for UI design which 90% of the programs would follow).
Jakob Nielsen has a good point about web design, namely that users spent most of their time on other peoples site, so conform to the standard rather than do it your own way, even if you think it's better.
On Linux there really is very little of a standard to follow, and that makes it all look so inconsistent -- also, there are no overall rules which are enforced by the framework, i.e. on OS X when I write a Cocoa application, even the simplest document based application will get dozen of features for free, like naming unnamed documents for 'untitled', show a proxy icon in the titlebar, maintan a "Open Recently" menu, provide a list of open windows in the Windows menu, provide a standard about window, provide filetype bindings with the declared document types, use standard load and save panels for document I/O etc. etc.
All this means that even though I only have one hour to come up with a prototype for an application, the usability will be very high -- this is untrue of Linux, here I must add all these things manually, and I'd probably be too lazy to do so in 9 out of 10 projects, if I were just to scratch my own personal itch (not to forget that there really are no common standard for e.g. managing recent documents, there are no standard for drag'n'drop between applications etc. etc.).
My thoughts exactly... In denmark we pay as much as $20 for a movie ticket, and we pay a fee to order the ticket in advance.
This coupled with the fact that "going to the movies" is just sitting in a dark room with your friends where you are not allowed to talk and following a story which is often forgotten one hour after leaving the cinema, has made me avoid these "social gatherings", and when ever some of my friends suggest going to the movies, I always come up with a counter-suggestion, unless there is something *really* interesting showing.
Improved Quartz Extreme. The core image API that was demo'ed included QE enhancements and performance increases.
QE will do more in hardware and according to an Apple engineer, it should give 2x speedup for windows not using the legacy QuickDraw API, not really sure what the hardware acceleration is though.
Core Image OTOH will require a recent GeForce to use the GPU, otherwise it'll use the CPU, so for most existing Macs this will not show any improvements (but then, no current programs use Core Image).
Ah, didn't realize you were 14. Well, I don't think it was that much different when I was 14, i.e. I didn't go to more than perhaps 2 or 3 parties in total in public school and regarding friends, well, from school I really only made one friend from my own class, he was transferred to our school in 7th grade and also had computer (back then it wasn't as common), and he was probably socially worse than me, so we hit it off.
I did however make other friends outside school, some because I was active on my computer (back then we had demos and demo-groups, so many of these friends did not live near me, and we only saw each other at computer parties or group meetings), and I also made one friend because I signed up for an electronics class at evening school, and one from an older class when I signed up for pupils council (who was basically also w/o friends partly because he transferred to our school in such a late grade, and partly because he just wasn't one of the cool kids).
So I think if I can give you any advice it would be to sign up for some activities outside school, it doesn't have to be sports. At least here in Denmark they teach psychology, electronics and other geeky stuff at "evening school" and it's free to sign up for, and you might meet someone with whom you have a common interest -- I guess the main reason that I never really felt isolated was, that I always had one close friend (I never had a group of friends, nor did I ever "hang out" with my friends -- and today, even though I have maybe 4-5 close friends, I rarely see them w/o a reason, but I regularly talk with them over ICQ though).
in high school, despite me still having the same interests, the things changed slightly, i.e. I was invited to the parties and I did socialize more with my class mates, although like in public school I really only made one real friend (who was also into computers) and I did not particularly seek out the things the others from my class did.
And the same pattern repeated at the university, here I did make 2 or 3 friends (and that was computer science I studied), but I didn't participate in all those extra social activities or frequented our local university bar.
Often I think the act of being invited to a party by the cool kids are worth much more for the geek than actually going to the party. So consider if you really want to hang out with the kids from your class, i.e. would you prefer to play soccer with your class mates over something geeky? because if you do, then I am 90% sure that they will allow you to play. If they don't ask you, it's most likely because they think that you don't care about it (the few times I did ask to join my class mates in activities I normally did not find interesting, they reacted with a certain doze of surprise, but never negatively).
But if they for some reason do not like you, then just join some other club where none from your school is at -- I also signed up for self defense when I was around your age. There are really lots of options for you to meet with other people even w/o having them to like you;)
Also, keep in mind that you're probably starting a new school in a few years (?), and here you'll have the chance of resetting the image your current class mates have of you, plus everybody will be on the same level, becaause no-one knows each other, so everybody needs to make new friends -- just be sure not to act desperate or be pushy/trying to hard etc.
And do try to get the best out of your situation, rather than moan about it (not to imply that you were!).
And for the records, no I do not currently have a girl friend, and I rarely go to parties -- maybe 2-3 times a year, but I do other things with my friends, although probably not more than once a month (and almost always one-on-one) -- and I am quite happy with my situation! The only problem is that I would like to have children sometime (I am 28), and I don't meet an awful lot of girls with my current behavior, those I meet are either unintelligent, with a boyfriend, live in another country, or simply not interested in me;)
if I didn't, I would probably be at a party now with my girlfriend [...] Well I'd like to be anyway
Well, keep in mind that regular sex is only one of many things which can happen with a girlfriend -- and most girls expect a lot more, including having you give up some of the time you currently use with computers.
So while the norm might be being with a girl saturday night and perhaps even at a party, is it really the things that "the norm" do which stimulate *you*?
I personally get a lot more "fun" out of spending time on my own, doing what I like, than to small talk at a party.
It is also a rather large advantage in a job interview that you actually show a passion for what you do (and using your spare time in the field) -- at least I am contacted with attractive jobs and can more or less dictate my salary.
I doubt this had been the case, if I'd spend my days talking about how my day went with my girl friend and spending my weekends getting drunk with my friends, talking about how drunk we got last weekend;)
Of cause there are girls which do not fall into this typical role that I describe, and there are friends who do other than talk about how drunk they were at the last party (or some story about one of their friends which did something really crazy...) -- but regarding the friends who are not like this, these are typically not the types who will go to parties, and regarding the girls, dam they are hard to find! I am still searching:)
First of all your statement is circular logic, yes something didn't get wide-spread use before it was common. Isn't that like the definition of common?
GIF and JPEG at least predate the internet (web) that I know here in Denmark, so it was not lack of these formats that kept users from using them, and I actually do remember a lot of awkward GIFs on the initial batch of personal homepages.
The actual reason to why the web has become more graphical is probably not just about bandwidth, but also the commercial interests and the fact that this is no longer just academics who publish their knowledge.
Back in the early days (1996 IIRC) my modem could retrieve 3.1 KB of data, and I was told by a company (who's web-page I helped create) that their goal was to have the entire thing load in 30 seconds. That's an 256 colors *uncompressed* image of 300 x 300 pixels -- and that was approximately half my resolution back then. Still it would have been stupid of them to waste the page with one big image, and today you actually see the successful designs cut down on graphics!
I didn't mean to insult you, but I do have to point out that most of the people I see bitching about threads are usually older programmers used to the 1:1 input/output paradigm of yore.
Don't worry, I wasn't insulted. And I'm certainly not an older programmer;)
[...] work in research. Nowadays, threading is commonplace and is taught much better than 10 years ago
It has probably been 6 years since I had the course in question. I don't know if things has since improved, but it's not like I have a problem writing a consumer/producer architecture (using threads) or solving the dinning philosophers problem. The problems arise in complex programs.
Working in research, how complex programs have you been involved with where threads were used? I am asking not because I have prejudices against researches (heck, I am very close to going back to a ph.D. myself, as I sometimes favor research over the practical work), but my aversion toward threads have come through practical work, on the paper I can also agree to how "beautifully" it solves a problem, but practice have taught me otherwise (and the paper doesn't always show the code-overhead required for proper synchronization, and code-overhead add to complexity).
Java's excellent thread implementation have helped in this respect.
Here I hole heartily agree (despite my lack of fondness for Java in other contexts), but remember, most modern GUI applications are *not* written in Java.
Deadlocking isn't an issue if you design it right. Theres no good reason an app will deadlock.01% of the time if you know how to use your threading tools properly, and how to implement the threads.
Well, nothing is really a problem if you design it right!
I don't know if you agree with me, but in my experience most causes of failure in programs (apart from off-by-one and other "typos") are, that a situation arise which the programmer did not consider (and thus did not explicitly write code to gracefully handle, or he did not prevent the situation from arising in the first place).
My claim with threads is that you basically get an exponential number of program flows. E.g. if you spawn 3 threads, and they each send a single message to the main process, then the order of arrival has 3! cases -- and thus the program flow quickly gets difficult to overview. Adding to this are the other subtle details, like a thread sending a shutdown message, but when that message arrive, the thread might actually still live, or when the application needs to quit, but it needs to wait for threads to shutdown, but some thread is waiting for a response from a main-thread service (which is no longer running, because the application is about to shutdown) etc.
Actually, I have still not found a good solution to the later problem, i.e we have a worker thread which frequently communicate with the main thread. When the main thread quits, it needs to ensure that the worker thread also quits (it may need to do cleanup).
This problem is also littered with implementation specific problems, because how an application quits depends on the framework used -- you can probably solve the above in an isolated Java program, but when it has to be written using ATL, Qt, Cocoa or another GUI library, then suddenly it has to play nice with these as well (and a quit signal might come as a ctrl-c (interrupt), a menu choice, a scripting command etc.)...
The problem with putting everything in central loops is the OS is going to switch the process out in the middle of those extremely long loops. With threads, in many cases another thread will get the CPU time (assuming your OS is handling thread scheduling).
Which OS handles thread scheduling? Those I know all let that happen in user space.
Further more, if they did handle thread-scheduling, how would
[threads] Maybe if you have no idea what you're doing or how to use threads properly... I will admit, one does need adequate training to use them correctly. Once you have this though, all other methods are downright ugly and much more bugridden
I think this is a bit harsh. I have been programming on a multitasking operating system for 10+ years where I have occasionally used threads. Through my degree in computer science I also have theoretical knowledge about semaphores, monitors, deadlocks and similar (it was a rather large portion of the OS course which ended with us writing a kernel allowing user programs to spawn threads).
Still I do all in my power to avoid threads, because it requires a very good overview to design it correctly if threads need to share resources (and it needs a very good understanding of what is safe and not safe when multiple threads work in parallel, I'm tempted to say "on the instruction level"), and debugging is as said very hard, because you may be using the program for half an hour, and suddenly it deadlocks, or it crashes because some thread is releasing a resource that another one used or similar, and it's nearly impossible to reproduce these conditions because of timing issues.
I have seen a lot feel exactly like I do, who were all skilled programmers, and I see recommendations to use asynchronous OS functions rather than do ones own threading. So I do not think this is just learning to master it. Every programmer makes mistakes (I would at least think), and threads introduce a wealth of problems to solve, and if you don't do it correct, you may never notice, because the problem will only arise in 0.01% of the runs (because of timings), and that results in software which seems unstable or freezes for only 0.01% of the users, which I actually think is not an uncommon phenomenon;)
(not that I blame threads on the non-deterministic instability found in some programs)
In a modern GUI app, at the very least, input and display will be running in separate threads. That is, while its waiting for you to click on a button, and anything that causes a display change.
I am not entirely sure what you mean by this. Generally the OS takes care of waiting for hardware devices, it gets an interrupt when there is data on a device, and it then sends a message to the proper program (which directly or indirectly is "waiting" for that device).
How the application then handles the input depends, but in most of the GUI kits I have worked with, there is one central event loop which waits for these IPC messages, and take the proper action. This "waiting" is done in the main thread, and all GUI work is also done in that thread.
So I do not see any multithreading here, nor do I see the advantage. It would mean extra communication, and there is a serial flow between receiving input and performing the action they prescribe.
There is generally one "input" and one "output" to a program. For a command it would be stdin/stdout, for a GUI application it would be IPC messages and a GUI-kit as output. So if there is a 1:1 mapping between input and output (i.e. press "e", see an "e" character in the active text field), there is absolutely no reason to use threads.
Only if e.g. pressing "e" will result in a fractal image being generated, which takes 2 seconds, and is then displayed, then it is an advantage to offload that to another thread.
If you add different ways of input (such as network), that will also run in its own thread.
Certainly not by default. Generally the program will receive a message about new input, and it makes sense to direct all messages to the same message port and then have one dispatcher.
The problem of the network not supplying data fast enough is exactly why threading is needed. Would you want your browser to be completely non-responsive
You say any modern GUI application. This is far from my experience.
All I know avoid threads like the plague, since it introduce a lot of synchronization problems and makes debugging very difficult since the program will in effect behave non-deterministic.
It's true that a GUI application which will need to do some long calculations (like ray-trace an image, compile a source, translate a LaTeX document etc.) will often spawn a thread to do this, but a) how many modern GUI apps work like this? b) the main thread (running the GUI) will have close to no load and c) it spawns only one thread, so the task will not complete in shorter time.
Even an application like a browser could very well be single threaded and use select() to wait for socket activity, and then dispatch new data to the proper page-parser, image-decoder or similar, since the network is unlikely to provide data so fast that the cpu will get a 100% load.
Furthermore, many operating systems move an entire process, with all its threads, from cpu to cpu, but not individual threads (since the communication overhead would affect performance).
If you happen to use C++ you'll probably have to shell out big bucks for a linter or be out of luck because there are only commercial linters available.
What I generally do is overwrite new to place a 64 bytes marker before and after the memory block, which is then checked during delete, and will exit with a stack dump (and a hex dump of the block) if corrupted.
At exit I dump all blocks not deleted (to catch leaks), and I litter my code with asserts (which also do stack dumps) plus have a printf-kind of system, where the level of output can be toggled (often at run-time, if the application i am working on has a user interface (I have a debug-menu component which I just link on my application)).
Due to all the run-time checks, I generally catch mistakes the minute I make them -- I have debugged/resourced lots of other programs and have also programmed in assembler, so it's not a skill I lack, but I honestly never have a need to debug my own programs (except when the compiler produce the wrong instructions, but this is mainly just looking at the assembler output, rather than using the debugger).
My memory system doesn't watch for stack-corruption. This however never really happens, because I only place objects on the stack or const arrays -- if I need a mutable array I use std::vector
I also define _GLIBCXX_DEBUG, which turns on all sorts of sanity checks in the standard library.
Well said! My sister has on a few occasions proudly told me how her child (a boy at 9) is able to turn on the computer by himself and load the games he wants to play.
Maybe it's more than she is capable of (because she has no interest in the computer), but it is really nothing to be proud of, on the contrary, I'd be sort of concerned if games is all he does with it when he has reached the age of 14, of cause a computer today is much more un-inviting than my first Commodore 64, where the option to write my own game was just as appealing than loading a pre-made one...:)
Re:This is how much we pay for 43 Mac in 3 labs
on
Fix a Troubled Mac
·
· Score: 1
Sounds to me like it would be a nice job for a student (who is perhaps underaged), given that not much work really needs to be done, and thus they could use any free time for student-related stuff.
Honestly, what does 24 hours matter in getting your grades?
Why wait for information when you can get it now? And probably it's easier for most to get them by SMS than look at some board at their school or whatever means they use to communicate the grades.
I'm a shareware author who send license keys by email when people pay for my shareware and I really do not think it's good usage of my time to "confirm" that I want to send the key each time someone uses a C/R system.
Already people forget that they stated an outdated E-mail address etc., so I'm quite sure a lot would also forget to white list my sending address (since those currently using C/R already do forget this).
How about a nation that goes to war and kill thousands of other people with money being the sole motivation?
The problem with a professional army is seen currently in Iraq where some soldiers clearly get a kick out of torturing and even killing innocent people as have been documented on numerous occasions.
What pisses me off is that no-one really tries to understand the problem.
Programming is difficult, it's a huge amount of work, every program has hundreds of "to do" items (bug fixes, requested features etc.)
Requirement more or less always change throughout the process, a lot of things needs to be tested in practice before it can be said if it's a good or bad idea.
Showing the proper error message, not making a requester modal, adding undo to some window/editor etc. can sometimes be days of work.
Personally I have a reputation for being good at the usability aspect, I have a minor in psychology, I have at least a decade of experience and it's no problem for me to point at the many things which are just plain wrong in programs and come up with very constructive criticism to improve the situation.
Still I've been involved in several projects where the usability was suboptimal in the final product, I knew it was suboptimal, but I also knew why it ended that way, and how many resources would be required to improve it and how many resources where required to fix other things, and how these other things generally had higher priority than fixing the usability stuff.
I really wish all the usability gurus would get involved in some real projects instead of watching from the sideline.
The shell is a programming language with which you can do basically what you want, e.g. you mention 'wc' also counts HTML tags, well, for that you have 'sed' to strip them and perhaps 'tr' afterwards to collapse double spaces etc.
So the task at hand, at least when working with text or automating some process (e.g. synching files with a server, performing a database query and react upon the result etc.) can more or less always be done in the shell (programming language).
A GUI is someone picking the most common actions and making these more easy to accomplish than having to do them from the shell (although the shell also have ways to introduce shortcuts), and also to make the actions possible for users without prior knowledge about the inner-workings of the "command".
Most of the time most users are really doing the same things, and for this a GUI certainly is the best solution.
I think a lot of people do get this point, and that's part of Apples success, because they offer us both.
I use OS X myself btw and share equal love for both the command line and the Aqua/Cocoa interface.
Spotlight is not really like ReiserFS -- with Spotlight all metadata is automatically extracted from the file each time it's updated (using file type specific importers).
So you can't store arbitrary metadata for your files (like with ReiserFS and BeFS) -- Spotlight is a uniform way to access metadata already in the file format, e.g. you can query the width of an image, but you can't attach a location comment to your images if the file format doesn't already support it.
In the future, if you know how many meters he can read pr. hour and you know what he's paid pr. hour, it doesn't really matter how many hours pr. week, weeks pr. month or money pr. year that all this amounts to, as the price pr. unit is just 15$/6units = 2.5 $/unit ;)
If one company produced 95% of the power sockets on the marked, they surely would not be interested in standardization, so that others could easier interoperate with them or not have to worry about future compatibility etc.
I fully agree with your post and just wanted to add, that the OP also do not know what would happen, if these people got an education. Even though they perform better than the average graduate, does not mean that they cannot improve.
I myself have programmed since I was 12, and when I started at the university, I had already proven that I could handle large software projects, and probably better than the average bachelor.
But was the education redundant? certainly not. The first year I was a little bored, but later I realized that I actually did learn a lot, even though I did not realize it at first, the second, third, fourth, and fifth year was certainly some of the best time I've ever spent!
And actually, they didn't even teach programming per se...
All the things I love about C++ is missing from Java
Generic code/templates, operator overloading, implicit type conversion, RAII, introduce own types which feel 100% as "build into the language" etc.
Probably you only view C++ as the ability to have member functions...
I will certainly give it a try then!
Until now I have sticked with tcsh for one single reason: history substition!
Basically it lets me insert text from my history (including the current line) using few symbols (e.g. !$ is the last argument of the previous line) -- it's extremely powerful, e.g. it allows to search in the history and can do substitutions in results, or head/tail for paths etc.
I use it a lot to keep down the number of characters I need to type, and I have even assigned hotkeys to some of the substitutions I use the most.
This is really the make-or-break feature for wether or not I want to use a shell, so I really hope zsh has something similar!?!
How on earth did you get to that conclusion?
The reason why the UI is not designed as the first thing is simple: people like to do rapid prototyping, learning by doing, evolutionary design, or whatever it is called.
You are talking about people who think it is fun to *program*, and who *program* in their free time to solve their *own* problems, often w/o a clue about what the final program will evolve into being.
If I write a program to scratch my personal itch, and I put it out as GPL but say, it works for me so I don't give a rats ass about wether or not it has bad usability for Joe Average, is that then selfish of me?
Why aren't we bashing normal people for putting up their homepages? many of the pages out there probably has just as low usability as some of the bad open source projects, so why don't we see all sorts of articles talking about when the internet will be mature for the average user, what the problem is with all these people putting out bad pages, and how we can educate them to make better pages?
90% of anything is crap, I am puzzled that only Linux programmers has to be made aware of it -- why don't we start bashing books, movies, groceries, which are actually consumer goods we *pay* for, unlike Linux software, and the quality here is often just as low, if not much lower!
Which software are you talking about?
Most of what I use (on OS X) is well designed!
The problem with Linux software is probably less with the individual developer and more with the lack of one GUI framework to rule them all and one set of detailed human interface guidelines which all developers should follow.
When I meet bad interfaces on OS X, they are mostly bad because they do not act like the rest of the interfaces I use, i.e. it is that interfaces act the same which gives them "high usability" -- I recall the same from when I used AmigaOS (which also had detailed guidelines for UI design which 90% of the programs would follow).
Jakob Nielsen has a good point about web design, namely that users spent most of their time on other peoples site, so conform to the standard rather than do it your own way, even if you think it's better.
On Linux there really is very little of a standard to follow, and that makes it all look so inconsistent -- also, there are no overall rules which are enforced by the framework, i.e. on OS X when I write a Cocoa application, even the simplest document based application will get dozen of features for free, like naming unnamed documents for 'untitled', show a proxy icon in the titlebar, maintan a "Open Recently" menu, provide a list of open windows in the Windows menu, provide a standard about window, provide filetype bindings with the declared document types, use standard load and save panels for document I/O etc. etc.
All this means that even though I only have one hour to come up with a prototype for an application, the usability will be very high -- this is untrue of Linux, here I must add all these things manually, and I'd probably be too lazy to do so in 9 out of 10 projects, if I were just to scratch my own personal itch (not to forget that there really are no common standard for e.g. managing recent documents, there are no standard for drag'n'drop between applications etc. etc.).
My thoughts exactly... In denmark we pay as much as $20 for a movie ticket, and we pay a fee to order the ticket in advance.
This coupled with the fact that "going to the movies" is just sitting in a dark room with your friends where you are not allowed to talk and following a story which is often forgotten one hour after leaving the cinema, has made me avoid these "social gatherings", and when ever some of my friends suggest going to the movies, I always come up with a counter-suggestion, unless there is something *really* interesting showing.
QE will do more in hardware and according to an Apple engineer, it should give 2x speedup for windows not using the legacy QuickDraw API, not really sure what the hardware acceleration is though.
Core Image OTOH will require a recent GeForce to use the GPU, otherwise it'll use the CPU, so for most existing Macs this will not show any improvements (but then, no current programs use Core Image).
Ah, didn't realize you were 14. Well, I don't think it was that much different when I was 14, i.e. I didn't go to more than perhaps 2 or 3 parties in total in public school and regarding friends, well, from school I really only made one friend from my own class, he was transferred to our school in 7th grade and also had computer (back then it wasn't as common), and he was probably socially worse than me, so we hit it off.
I did however make other friends outside school, some because I was active on my computer (back then we had demos and demo-groups, so many of these friends did not live near me, and we only saw each other at computer parties or group meetings), and I also made one friend because I signed up for an electronics class at evening school, and one from an older class when I signed up for pupils council (who was basically also w/o friends partly because he transferred to our school in such a late grade, and partly because he just wasn't one of the cool kids).
So I think if I can give you any advice it would be to sign up for some activities outside school, it doesn't have to be sports. At least here in Denmark they teach psychology, electronics and other geeky stuff at "evening school" and it's free to sign up for, and you might meet someone with whom you have a common interest -- I guess the main reason that I never really felt isolated was, that I always had one close friend (I never had a group of friends, nor did I ever "hang out" with my friends -- and today, even though I have maybe 4-5 close friends, I rarely see them w/o a reason, but I regularly talk with them over ICQ though).
in high school, despite me still having the same interests, the things changed slightly, i.e. I was invited to the parties and I did socialize more with my class mates, although like in public school I really only made one real friend (who was also into computers) and I did not particularly seek out the things the others from my class did.
And the same pattern repeated at the university, here I did make 2 or 3 friends (and that was computer science I studied), but I didn't participate in all those extra social activities or frequented our local university bar.
Often I think the act of being invited to a party by the cool kids are worth much more for the geek than actually going to the party. So consider if you really want to hang out with the kids from your class, i.e. would you prefer to play soccer with your class mates over something geeky? because if you do, then I am 90% sure that they will allow you to play. If they don't ask you, it's most likely because they think that you don't care about it (the few times I did ask to join my class mates in activities I normally did not find interesting, they reacted with a certain doze of surprise, but never negatively).
But if they for some reason do not like you, then just join some other club where none from your school is at -- I also signed up for self defense when I was around your age. There are really lots of options for you to meet with other people even w/o having them to like you ;)
Also, keep in mind that you're probably starting a new school in a few years (?), and here you'll have the chance of resetting the image your current class mates have of you, plus everybody will be on the same level, becaause no-one knows each other, so everybody needs to make new friends -- just be sure not to act desperate or be pushy/trying to hard etc.
And do try to get the best out of your situation, rather than moan about it (not to imply that you were!).
And for the records, no I do not currently have a girl friend, and I rarely go to parties -- maybe 2-3 times a year, but I do other things with my friends, although probably not more than once a month (and almost always one-on-one) -- and I am quite happy with my situation! The only problem is that I would like to have children sometime (I am 28), and I don't meet an awful lot of girls with my current behavior, those I meet are either unintelligent, with a boyfriend, live in another country, or simply not interested in me ;)
Well, keep in mind that regular sex is only one of many things which can happen with a girlfriend -- and most girls expect a lot more, including having you give up some of the time you currently use with computers.
So while the norm might be being with a girl saturday night and perhaps even at a party, is it really the things that "the norm" do which stimulate *you*?
I personally get a lot more "fun" out of spending time on my own, doing what I like, than to small talk at a party.
It is also a rather large advantage in a job interview that you actually show a passion for what you do (and using your spare time in the field) -- at least I am contacted with attractive jobs and can more or less dictate my salary.
I doubt this had been the case, if I'd spend my days talking about how my day went with my girl friend and spending my weekends getting drunk with my friends, talking about how drunk we got last weekend ;)
Of cause there are girls which do not fall into this typical role that I describe, and there are friends who do other than talk about how drunk they were at the last party (or some story about one of their friends which did something really crazy...) -- but regarding the friends who are not like this, these are typically not the types who will go to parties, and regarding the girls, dam they are hard to find! I am still searching :)
First of all your statement is circular logic, yes something didn't get wide-spread use before it was common. Isn't that like the definition of common?
GIF and JPEG at least predate the internet (web) that I know here in Denmark, so it was not lack of these formats that kept users from using them, and I actually do remember a lot of awkward GIFs on the initial batch of personal homepages.
The actual reason to why the web has become more graphical is probably not just about bandwidth, but also the commercial interests and the fact that this is no longer just academics who publish their knowledge.
Back in the early days (1996 IIRC) my modem could retrieve 3.1 KB of data, and I was told by a company (who's web-page I helped create) that their goal was to have the entire thing load in 30 seconds. That's an 256 colors *uncompressed* image of 300 x 300 pixels -- and that was approximately half my resolution back then. Still it would have been stupid of them to waste the page with one big image, and today you actually see the successful designs cut down on graphics!
Don't worry, I wasn't insulted. And I'm certainly not an older programmer ;)
It has probably been 6 years since I had the course in question. I don't know if things has since improved, but it's not like I have a problem writing a consumer/producer architecture (using threads) or solving the dinning philosophers problem. The problems arise in complex programs.
Working in research, how complex programs have you been involved with where threads were used? I am asking not because I have prejudices against researches (heck, I am very close to going back to a ph.D. myself, as I sometimes favor research over the practical work), but my aversion toward threads have come through practical work, on the paper I can also agree to how "beautifully" it solves a problem, but practice have taught me otherwise (and the paper doesn't always show the code-overhead required for proper synchronization, and code-overhead add to complexity).
Here I hole heartily agree (despite my lack of fondness for Java in other contexts), but remember, most modern GUI applications are *not* written in Java.
Well, nothing is really a problem if you design it right!
I don't know if you agree with me, but in my experience most causes of failure in programs (apart from off-by-one and other "typos") are, that a situation arise which the programmer did not consider (and thus did not explicitly write code to gracefully handle, or he did not prevent the situation from arising in the first place).
My claim with threads is that you basically get an exponential number of program flows. E.g. if you spawn 3 threads, and they each send a single message to the main process, then the order of arrival has 3! cases -- and thus the program flow quickly gets difficult to overview. Adding to this are the other subtle details, like a thread sending a shutdown message, but when that message arrive, the thread might actually still live, or when the application needs to quit, but it needs to wait for threads to shutdown, but some thread is waiting for a response from a main-thread service (which is no longer running, because the application is about to shutdown) etc.
Actually, I have still not found a good solution to the later problem, i.e we have a worker thread which frequently communicate with the main thread. When the main thread quits, it needs to ensure that the worker thread also quits (it may need to do cleanup).
This problem is also littered with implementation specific problems, because how an application quits depends on the framework used -- you can probably solve the above in an isolated Java program, but when it has to be written using ATL, Qt, Cocoa or another GUI library, then suddenly it has to play nice with these as well (and a quit signal might come as a ctrl-c (interrupt), a menu choice, a scripting command etc.)...
Which OS handles thread scheduling? Those I know all let that happen in user space.
Further more, if they did handle thread-scheduling, how would
I think this is a bit harsh. I have been programming on a multitasking operating system for 10+ years where I have occasionally used threads. Through my degree in computer science I also have theoretical knowledge about semaphores, monitors, deadlocks and similar (it was a rather large portion of the OS course which ended with us writing a kernel allowing user programs to spawn threads).
Still I do all in my power to avoid threads, because it requires a very good overview to design it correctly if threads need to share resources (and it needs a very good understanding of what is safe and not safe when multiple threads work in parallel, I'm tempted to say "on the instruction level"), and debugging is as said very hard, because you may be using the program for half an hour, and suddenly it deadlocks, or it crashes because some thread is releasing a resource that another one used or similar, and it's nearly impossible to reproduce these conditions because of timing issues.
I have seen a lot feel exactly like I do, who were all skilled programmers, and I see recommendations to use asynchronous OS functions rather than do ones own threading. So I do not think this is just learning to master it. Every programmer makes mistakes (I would at least think), and threads introduce a wealth of problems to solve, and if you don't do it correct, you may never notice, because the problem will only arise in 0.01% of the runs (because of timings), and that results in software which seems unstable or freezes for only 0.01% of the users, which I actually think is not an uncommon phenomenon ;)
(not that I blame threads on the non-deterministic instability found in some programs)
I am not entirely sure what you mean by this. Generally the OS takes care of waiting for hardware devices, it gets an interrupt when there is data on a device, and it then sends a message to the proper program (which directly or indirectly is "waiting" for that device).
How the application then handles the input depends, but in most of the GUI kits I have worked with, there is one central event loop which waits for these IPC messages, and take the proper action. This "waiting" is done in the main thread, and all GUI work is also done in that thread.
So I do not see any multithreading here, nor do I see the advantage. It would mean extra communication, and there is a serial flow between receiving input and performing the action they prescribe.
There is generally one "input" and one "output" to a program. For a command it would be stdin/stdout, for a GUI application it would be IPC messages and a GUI-kit as output. So if there is a 1:1 mapping between input and output (i.e. press "e", see an "e" character in the active text field), there is absolutely no reason to use threads.
Only if e.g. pressing "e" will result in a fractal image being generated, which takes 2 seconds, and is then displayed, then it is an advantage to offload that to another thread.
Certainly not by default. Generally the program will receive a message about new input, and it makes sense to direct all messages to the same message port and then have one dispatcher.
No, a network a
You say any modern GUI application. This is far from my experience.
All I know avoid threads like the plague, since it introduce a lot of synchronization problems and makes debugging very difficult since the program will in effect behave non-deterministic.
It's true that a GUI application which will need to do some long calculations (like ray-trace an image, compile a source, translate a LaTeX document etc.) will often spawn a thread to do this, but a) how many modern GUI apps work like this? b) the main thread (running the GUI) will have close to no load and c) it spawns only one thread, so the task will not complete in shorter time.
Even an application like a browser could very well be single threaded and use select() to wait for socket activity, and then dispatch new data to the proper page-parser, image-decoder or similar, since the network is unlikely to provide data so fast that the cpu will get a 100% load.
Furthermore, many operating systems move an entire process, with all its threads, from cpu to cpu, but not individual threads (since the communication overhead would affect performance).
Ahh... finally a way to sort my porn collection into brunettes and blondes...
What I generally do is overwrite new to place a 64 bytes marker before and after the memory block, which is then checked during delete, and will exit with a stack dump (and a hex dump of the block) if corrupted.
At exit I dump all blocks not deleted (to catch leaks), and I litter my code with asserts (which also do stack dumps) plus have a printf-kind of system, where the level of output can be toggled (often at run-time, if the application i am working on has a user interface (I have a debug-menu component which I just link on my application)).
Due to all the run-time checks, I generally catch mistakes the minute I make them -- I have debugged/resourced lots of other programs and have also programmed in assembler, so it's not a skill I lack, but I honestly never have a need to debug my own programs (except when the compiler produce the wrong instructions, but this is mainly just looking at the assembler output, rather than using the debugger).
My memory system doesn't watch for stack-corruption. This however never really happens, because I only place objects on the stack or const arrays -- if I need a mutable array I use std::vector
I also define _GLIBCXX_DEBUG, which turns on all sorts of sanity checks in the standard library.
Well said! My sister has on a few occasions proudly told me how her child (a boy at 9) is able to turn on the computer by himself and load the games he wants to play.
Maybe it's more than she is capable of (because she has no interest in the computer), but it is really nothing to be proud of, on the contrary, I'd be sort of concerned if games is all he does with it when he has reached the age of 14, of cause a computer today is much more un-inviting than my first Commodore 64, where the option to write my own game was just as appealing than loading a pre-made one... :)
Sounds to me like it would be a nice job for a student (who is perhaps underaged), given that not much work really needs to be done, and thus they could use any free time for student-related stuff.
Why wait for information when you can get it now? And probably it's easier for most to get them by SMS than look at some board at their school or whatever means they use to communicate the grades.