I am working for a non-profit. Last Wednesday after popping by the office to pick up something after watching Nemesis on my way home, our monitor computer (which uses Festival as a speech synth) was literally yelling all over my office that our SMTP machine was dead.
And, alas, it was. After 8 years of faithful service the 100MHz Pentium was indeed dead. Luckily it was the PSU, not the HDD, so I parked the drive into a spare 200MHz PPro I had in the shelf and 5 minutes later she was up again. I expect the 200MHz box to last another 5 years. 64 Megs or RAM is plenty for the SMTP gateway.
Most of my machines are 133-200 MHz Vintage Pentiums, and they all work fine. Our domain controller is a dual Processor 90 MHz HP Box. That was once my workstation, our mailserver and the domain controller. In one. Still soldiers on, has never crashed. Ever. (and, scarily, it runs NT4. It has been faitfully doing the POP3 on all my Email for 7 years now.
The sweet part about this is that the icons do not have be an on-off affair. For instance, an emblem is an overlay that is either there or not. With this, it would be possible to dynamically scale the icon depending on some state. For instance, drawing an icon that has a sliding scale for each disk depending on the precentage of space left would be possible. One could have a sort of parameterized icon.
The icon could even change color, for instance it could gradually go from red to green through HSV space depending on the fullness of the disk (green at 0%, red at 100% and some inbetween color inbetween).
The problem with most computer systems is that they are like a finely tuned watch. Except the watch has a million parts, not 100. And just as a finely tunes machine breaks completely when one part is slightly out of alignment a program croaks if one small thing breaks.
Organic systems are not like that. The results, however are also not exactly precise. Perhaps what Lanier is saying is that we sould move away from the whole extremely brittle finely tuned machiens where all the parts fit exaclty or pretty much not at all to more organic sort of things.
Search google for "Feyerabend Project" for more on this.
One thing mentioned there is that software modules should communicate more with protocol streams than exactly correct rigidly typed structures that break if you cough close to them. In this way thow different pieces of software do not need to be recomiled if something changes on one side.
As an example, a HTTP server does no go south if an extra HTTP header is plugged into its interaction, while a function call would probably go bonkers if you add another parameter in a call to it.
The thing is that the data is stored as a 'blob'. Perhaps we should call it an 'object' but that term is so overloaded that I will rather call it a blob.
Files are an abstraction of the current storage hierarchy that computers use. A file is storted on disk (or some non-volatile medium) and is opened, read in (perhaps not all,) or written to (or appended to). And then closed. The transfer read and write goes from memory to disk.
However think now of a situation where memory in a computer is not volatile and you could have all the blobs you need in a sort of large virtual memory space without the read-write overhead. Perhaps some kind of bubble memory could do this or some sort of virtual memory system. Point is, you do not have to use the whole Open and Close semantic thing. You would just change the blob and it would stay there. There is no "Save" and "Load" command, the blob simply "is there".
Files are currently named by a hierarchical naming system. With a memory-blob archtecture they would still need to be named, but not all of them. For instance, a blob might have refernces to other blobs that are only used by itself but which do not have individual "names" something like temp files.
There was a discussion on Slashdot a while ago about radical UI's. there was a reference about a Word Processor that did not use files, called Yeah Write. Search on google and download the thing and play with it, its quite small.
The program does not have a save command. You have a set of letters and you just click on it and edit it. Its always "there". Its an interesting experience. Of course, behind the scenes it gets saved, but the user does not see it like that. Try it. I found it a eye-opener (and over-cute, alas).
Let see, Unix runs on what, a baziliion platforms? Windows run on 1 (used to run on Power PC and Alpha too, and CE runs on ARM). So make that perhaps 4.
Thing is, that anti-binary bias is
a) What makes Unix so multi-platform and
b) makes Unix so eminiently malleable and hackable. Think anything in/etc. Think registry in Windoze
It is much easier to edit a text file than a binary file. For one, you can read it. For two, the fact that a text file tends to make things like whitespace ignorable makes it easier and less brittle which leads to more relibale software. If the programs EXPECTS there to be variable amounts of whitespace it compensates which is not true of a binary-reading program which always expects the structures and bits in precisely the correct places and goes wahmmo when something is out of whack.
The difference is like that between a finely tuned racecar and your VW. The one can take more abuse because it is not so dependent on anything being precisley aligned.
Binary may be faster (like the racecar) but it is also more brittle and less reliable (again, racecar...)
The multiplatform thing is easy. Binary is dependent on byte order, the amount of bits-per-wors and such things. Many graphics programs on a PC can still not read Mac created TIFF files to this very day because of this.
A text file, as long as you use ASCII can be read on any friggin platform. There are some issues with character sets and Unicode and so, but that is much simpler to solve. For one, you can eyeball the file to see whats wrong with it.
Actually many of the developers on the Haskell spec now works for Microsoft, specifically AFAIK in the Intentional Programming Project that now seems to have been spun off.
This is pretty cool actually. FP is great, if Microsoft pushes it hard then it might become something that makes the world a better place.
God that is stupid. OK, let met put it another way.
Computer work with machine code. High level languages are for people who cannot program in machine code.
OK, Alan Cox gets my het off because DOES program in Machine code, and I have too, but the thing is, threads are easier to maintain than a state machine because usually the two things are separate while in a state machine the bloody states have a complicated interaction.
Obviously the model where you fork 10000 threads off to anything is not viable. But for many apps threads make it easier to maintain the thing and keep separate things separate. A UI which has a separate thread for the UI and a thread for the program for instance is a VASTLY better model to program in than the stupid Event based crap that you see everywhere. See Java Swing vs. Java AWT for an example. And definitely see BEOS for an example.
Thread reduce latency because a single process with a state machine has to wait in blocking IO while a thread can go on. See Netscape that hangs in all windows because a TCP connect blocks in pone window for a good and extremely irreitating example. And Mozilla does the same. For that matter, IE too but in IE you can switch it off!
In general, if things are logically different things that run on their own (The UI vs the program that does something in the background) they belong in different threads. If you do not believe me, install BeOS one day ons a 200 Mhz machine and see how much more snappy it than Linux on your multi Ghz machine because the UI things (in their own thread) repond immediately even then the background thing that they control do not. State machines are simply to difficult to handle than seprate threads but because everryon uses them all our programs have godawful latency in the User Interface.
Also, one important thing. ALL computer programs that have an active GUI have two processors in it. The computer AND the user's brain. The part that the user controls is the GUI. That belongs in another thread.
And one last thing. Thread spawning on Linux is very, very good. Mucho better than under most Unixes AFAIK and therefore the "too much overhead" is crap. On Linux at least. And most program will get along just fine with 2-10 threads.
If Civil Engineering is your thing, go to Switzerland and watch the Grand Dixence Dam in the Alps in Valais. This is the highest (as in altitude) dam in the world. The view is also pretty damn neat.
LISP Machines. SMalltalk. See any programs written those? Look at IBM Visual Age. THe most commonmoan (especially here on/.) is that the program is stuffed into a binary database and you cannot get to it with . Favourite tool is usually vi or emacs.
I agree with you. Fully. And I would like to add the idea of some kind of semi-automatic optimization systems (deforestation in functional langauges for instance, or perhaps some kind of genetic optimizer) to REALLY get you cooking.
However, there are some reasons why this is simply not flying. I think there must be some barrier here which we should try to overcome, but I do not know what. Here are some problems:
a) People get attached to tools. vi and emacs being classic examples. I myself use joe a lot. Why? Because the keystrokes are the same a Turbo Pascla, which, again, are the same as Wordstar. I learned this back in '82, and it got stuck into my little brain. Few of these fancy source systems let me use MY keystrokes.
b) If your components are all dumped individually into the filesystem you can bring the power of millions of man-hours and LOC's invested in pre-existing tools to bear on them. Think grep, CVS, make, M4, cut, tail, awk, sed, and god know what else. ALL these tools work on the simple paradigm of files in the filesystem. Dumping them into some database makes them invisible. And all of these tools are useful when constructing a large program, at times. Even newer things such as XSL transforming engines and such are useful here.
For instance, I wrote a program the other day that used a XSLT stylesheet to write some code. It was a simple sweet job and it worked. Try THAT in a fancy IDE, it would be difficult. IT worked because the XSLT output is the same standard thing: and ASCII (OK, Unicode) file.
The point is, the lingua franca for computers is ASCII files. Zillions of tools use and understand that.
One other problem in SE is that there is a deep problem with the idea that "easy to do steps" are just as easy if you do one of them, and if you do a million of them. An example. It is trivial to put one brick on top of each other with some cement and build a wall. It is much more difficult to build a house and extremely difficult to build a skyscraper. I have built a small wall. I would NEVER live in a house that I built though, not unless some pro looked at it. In software it seems that people are not like this.
In software, there is (with programmers as well as managers) the impression that, since the small things look simple designing a large system is too.
In programming, the simple building blocks are things such as while loops and if statements and so on. I can understand a if statement and a while statement and I could probably get my mom to understand it (mind you, she gets scared sh1less when the cellphone rings, because she does not know which button to press...). And these things are pretty trivial. However, there is motherless difference between parking a bunch of loops and simple statements together and building Oracle or the Linux kernel. But in the end, the large program is simply a conglomerate of the simple building blocks. You see this stupid idea in the press too with "Teach yourself Whatever in 21 days".
This whole problem, however, makes it difficult for me see how a professional software engineering accreditation is ever going to be successful. Where do you draw the line? Suppose it becomes law that only software engineers may make programs. Is writing an Excel spreadsheet programming? Is desigining a quick CGI script to let your mom upload a large file because her EMail program sucks programming? It certainly look like it from where I am. With accreditation this would be illegal, just as it is technically illegal for you to fix electrical things in your house (it should be done by a qualified electrician).
To get back to the example of the screwdriver and high abstractions, the guy who does the spreadsheet can sort his sheet, but does not have to know how a sorting algo works. But in desigining a spreadsheet he is in effect writing a declarative program. There is not much of a semantic jump between a complicated Excel sheet and a Haskell or LISP program. (Imperative programs are another matter, though).
Anyways, enough rambling. Its a bit off topic but the drill reminded me of the house example...
SO when do we get client support on most clients
on
XFORMS Approved by W3C
·
· Score: 3, Insightful
When, for instance, will Mozilla or IE support this? Useless (except for intranet apps) if its not widespread.
I can only concur with the poster above who said that Festival with MBrola is probably the bet OSS bet. Actually, The MBrola voice itself has a license for "non-commercial" use, but we are a nonprofit, so...
In particular, there is one high-res female voice in MBrola that is very good. If you need any help setting it up (I can happiyl give you my festival config file) just say mail me at netgrok @at@ yahoo . de
That said, I think text output is very underrated technology and is quite useful, if used in moderation for the right purposes. One sometimes reads overexcited hyping about reading your emails out loud in the car or at breakfast, but that ain't gonna happen with current technology.
For one, the synthesis is bit monotonous for long texts (but then, now that I think about it, having you SO or kids read out a letter out loud would probably be not any better...)
Secondly, you do not necessarily want a user interface where a computer reads out things the whole time (logs, for instance) because a) its annoying and b) it will not work in an office with multiple people.
Where it DOES work and is trivial to implement is for things that are singular events that occur during the day or alarms. Similar to the sort of PA announcements that you would get in a department store. They do not read loud the whole time, do they?
In our case we use festival with Mbrola for two things:
There is a small script that checks the main services on all our critical machines and if one goes down, the system moans. A loud voice that says "The http server on web1 is down" gets more attention than a little light.
Our backup system moans at specific times (about three times a day) about the next tape that needs to be put in. "Please insert the correct tape into the tape drive on backup. The tape needed is Unix 1.
The backup will start at 4 this afternoon" is the announcement I just heard. Sometimes I add "Please insert the tape, pleeeeease", just to hear the damn computer beg ME for a change:)
Also, if I FORGET to insert the tape the computer starts moaning continously about it. Nothing like a whining b.tch to convince you get off your butt to put the tape in:)
It is also trivial to insert this into a standard sysv start/stop script at boot time so that you have some tag when critical servers are shut down for some reason.
Costs for this setup? 2 hours of install time (installing MBrola on festival took some digging-through-the-docs. If you need it, mail me). Writing a script that "say x" instead of "echo x) took about 2 minutes. And putting these commands into the cron job took about 10. So for a bout 3 hours worth of time and set of very cheapo computer speakers you get a good useful functional system which works, and the voice is very, very good. This is pretty neat for critical or semi-critical announcement kind of events, not continuous interaction.
Since the only command I use to activate it is "say x" from unix shellscripts with your current setup is trivial.
Btw, the MBrola website has a demo of a german voice reading a weather and traffic report which is even better than the English one.
Of yeah, it was fun to watch the cleaning lady almost get a heart attack when the computer greeted her...
PDF is pretty much the same as Postscript. Open a PDF file in a text editor one day. It includes all kinds of things that are used in a interactive environment such as hyperlinks, bookmarks and forms handling as well as things such as those stupid security features and encryption. There is also some Javascript support.
The new PDF 1.5 (used in Acrobat 5) also has support for reflowing text across pages to make it more page-layout insensitive but I have never looked at that (or seen such a file).
The forms part of PDF is cute, it works exactly the same way as HTML forms and encodes the stuff you typed in in MIME and sends it off to a web server. The EU uses that sort of thing for many official forms, and they are directly fillable in the reader, and printable as well.
Postscript is meant to be streamed and not randomly accessed and therefore PDF also has some things that a PS file lacks such as an index that points to each object in the file. In that sense the overall structure of the file is somewhat different. Many PDF files are also encoded in binary, but mostly to save space (Base64 ASCII is NOT efficient in bit-density).
The file itself consists of some layers of fluff and pointers and indices and encoding not normally found in Postscript, but the rendering part that is used to paint the page in the end is pretty much Postscript. As far as I know it includes the whole Postscript programming language.
Think of PDF as Interactive Browsable Postscript and you are not too far off. Think of Postscript as PDF that is meant to be streamed in one shot to a RIP and you are not too far off.
This is why many OS programs that supposrt Postscript also support PDF, the idea is very similar, the actual file layout is somwhat different but no so much that it affects the main program. Rendering code is pretty much the same.
As far as I know PDF 1.5 also has SVG support (might be wrong though), and I know for a fact that Adobe is pushing SVG very hard into all of its products. The rendering model of SVG is similar to that of Postscript, Adobe was on the SVG committee.
I agree on the programming thing. I got fed-up with our idiotic secrataries posting low-res versions of our company logo in high-res docs so i programmed the logo in straigth Postscript and now it works just well, and is always perfect, no matter what the output system.
One thing that has happened in PL design is that they constrain the programmer more. This tends to increase the expressiveness, unlike what one qould expect at first.
At our firm we let new employees sign a letter before they start working that we archive ALL EMails they send. We treat Emails as business correspondence. We file letters that we send in an official capacity, EMails are the same.
Our sendmail server sends all mails going out (and coming in) to a central mailbox.
That said, we also provide peole with TWO addresses, one is private and is never tampered with, the other one is public and is put inthe files. They know this, and can decide which one to use to send the mails. We are also not anal retentive about sending personal mails and phone calls from work. I mean, they are people, not machines.
However, sending business mails under your personal account is frowned upon.
This systems works well and we never had any problems with it. Also, access to the central mail file is the same as access to business files in that only some managers may look into it. But generally business EMails are treated like any other busniess correspondence: filed as it should be.
This policy has helped us a lot when people leave, but they knew beforehand that their mailboxes are open.
Take a tip from me. If you are driving through Basel come down through Germany, but take the highway from Strasbourg in France to Basel. The A5 on the German side of the border is a !"!" nightmare. The French highway is better. As far as I know there are no tolls between Strassbourg and Basel (but I may be wrong. Make sure you cross over the Rhine just after Karlsruhe. I know this road, I live in Freiburg.
Watch swis motorways too, they charge you (40 euros or pounds, or franks I forget) to drive them They dont have tolls though:). Problem is when you're just passing through north to south for 3 hours, very expensive;)
The charge is yearly, so if you drive there a lot (my GF is there now) its not too bad. Two trips through France would cost more than this in Tolls, which you have to pay every time.
And it costs 38 Euros before the border, but in SFr it is cheaper if you buy it from the border guard. The problem is, if you speak somewhat bad foreign German (like me) he starts asking your passport when he hears you are a foreigner. Then the fun starts:)
If you already have the thing in your window they wave you through the border with a smile into Basel. The extra money for buying the Vignette in Germany compenstates for the hassle with the guards.
If you cross any border into or in Europe and you look European (like an American or Australian of European descent) the best policy is to shut up when you pass customs or a border guards. Generally they will assume you are a local and leave you alone. If you speak a non-local language (like English when landing in Frankfurt or crossing by train into Switzerland) the guards will stop you.
Of course, if you do not look European (especially if you look (to them) like an East european or, worse, Middle Eastern, you will get nailed for your passport EVERY time you get even CLOSE to the Swiss border. I have a Mexican frien who gets checked every time. I got checked twice, and crossed the border about 20 times a year for 8 years now.
There is just one problem here. Basic economic theory states that free markets are the most efficient way to allocate resources to people. Two problems in the Microsoft case.
First, the keyword here is free markets. In the case of a monopoly or a oligolopy the market is not free to start with! Any economics intro textbook will have something to say about this.
Basically, efficient distribution happens becaus of the price/demand equilibrium and this does NOT (quite) apply to a monopoly since they can ignore the pricing part of the curve and set whatever price they want.
As an aside, efficiency is not always what you want. It is more efficient for society to shoot all kids who are born blind/retarded. It is not necessarily humane to do this.
In the case of free-market efficient capitalism, this sort of inhumanity come for instance from firing masses of workers. Or sweatshops. Or forcing people to work unpaid overtime. I mean, if the goddamn shareholders cannot afford my time they cannot have it. If I cannot afford to buy a new car, I can't have it. Why should they force me to give them my time??
The problem here is that free-marketers claim that free markets are good for the welfare of humanity as a whole. But when the efficient allocation of resources as such result in inhumanity this is point where you should ask some questions.
This is of course, a complicated, debatable, gray area sort thing, but one should keep it in mind.
The other problem is that economic theory deals with price demand curves in accordance to the price of production. It is very difficult to apply this to something which can be made millions of copies of for fairly marginal cost.
OK, I will add another question to this. What are the chances of landing a similar position in Computer Science? Some theoretical stuff such as PL design or something like that. I heard that the.com boom pulled a load of gradschool people out of the universities pursuing the $$$ and that there was a shortage of researchers. I would love to do my PhD, but academic job availability afterwards is a issue I have to consider.
Some programs commits an action on a load of documents/entities. Sometimes this takes time. IT happens.
So I just selected 9512 docs, and ran the script just before I went home in the expectation that it will be finished tomorrow morning when I come back because it takes 4 hours. Fair enough.
Now at doc #1273 there was an error. Your program has 5 choices:
a) Simply give up and crash/stop without telling me what you already finished.
b) Pop up a dialog box to inform me, stopping the process.
c) Mark the things that are finished and stop, so I can continue
d) Mark the things that are in error and do the rest anyhow.
e) Rollback ALL the changes (or better, give me choice AT THE END)
So which do you pick? Here is a tip.
a = very bad. If you do this, I hope you burn in hell.
b = bad. VERY few things anny me as much as a program that stops in the middle for an innocuaous pice of crap with a dialog box. Pop up the thing AFTER the fact (if it is now serius and ask me if you should continue).
c = Semi-annoying
d = Good.
e = Excellent.
if you really want to goto the deepest level of hell, throw away my selection for a) and b) while you are at it, too. Really smart.
Netscape has this horrible habit of hanging ALL the open windows when ONE of them has problems with a TCP connection. This is because the windows share the event loop as far as I know. This is dumb. I think Galeon is the only browser that does this right, and you have to switch the behaviour on. (Someone correct me please).
Another peeve: Programs are sometimes like annoying marketing types who think they own you. I am a customer and I will bloody well do what I want on my machines, so deal with it.
Intrusive programs that install things in my Windows taskbar that pops up every 5 minute to ask for an update and (God forbid) install themselves as a taskbar on my desktop. (Hello, someone at Creative Labs!! Are you reading this???)
The same goes for programs (Hello, Apple Quicktime!) that simply assumes that it is now the default handler for GIF, PNG, BMP and everything else in the universe, just because it can vaguely handle it (after asking me EVERY time if I want to upgrade to the "pro" version. NO I DONT. SO FSCKOFF NOW).
To put in simple terms, MY DESKTOP DOES NOT BELONG TO YOU; AND I DO NOT THINK YOUR "!" PROGRAM IS THE END-ALL AND BE ALL OF EVERYTHING IN THE UNIVERSE.
Programs that send out info over the net without my permission. MY DATA DOES NOT BELONG TO YOU EITHER!
Capitalism is about the strong surviving. It is also about the weak going down and I fully intend to help the system by voting with my feet against programs that are written by power-hungry marketing types who want to take over my machine.
More rants: Games that do not let me change the keyboard mappings. I live in Germany, where the keyboard is weird. I like my games in English. I will happily remap my bloody keys, but please MAY I? And on a Jerry keyboard the a key is NOT above the z key!
And while we are on the subject, if you are going to do 3 language version of your program, just put ALL of them on the SAME CD from now on? Please? Few programs are so large that the multi-language stuff does not fit (possibly recorded speech in Games, I will give them that). I don't want to import all my games, and there are many expats here who like to play in good ol' Eengleesh.
I am working for a non-profit. Last Wednesday after popping by the office to pick up something after watching Nemesis on my way home, our monitor computer (which uses Festival as a speech synth) was literally yelling all over my office that our SMTP machine was dead.
And, alas, it was. After 8 years of faithful service the 100MHz Pentium was indeed dead. Luckily it was the PSU, not the HDD, so I parked the drive into a spare 200MHz PPro I had in the shelf and 5 minutes later she was up again. I expect the 200MHz box to last another 5 years. 64 Megs or RAM is plenty for the SMTP gateway.
Most of my machines are 133-200 MHz Vintage Pentiums, and they all work fine. Our domain controller is a dual Processor 90 MHz HP Box. That was once my workstation, our mailserver and the domain controller. In one. Still soldiers on, has never crashed. Ever. (and, scarily, it runs NT4. It has been faitfully doing the POP3 on all my Email for 7 years now.
The sweet part about this is that the icons do not have be an on-off affair. For instance, an emblem is an overlay that is either there or not. With this, it would be possible to dynamically scale the icon depending on some state. For instance, drawing an icon that has a sliding scale for each disk depending on the precentage of space left would be possible. One could have a sort of parameterized icon.
The icon could even change color, for instance it could gradually go from red to green through HSV space depending on the fullness of the disk (green at 0%, red at 100% and some inbetween color inbetween).
The problem with most computer systems is that they are like a finely tuned watch. Except the watch has a million parts, not 100. And just as a finely tunes machine breaks completely when one part is slightly out of alignment a program croaks if one small thing breaks.
Organic systems are not like that. The results, however are also not exactly precise. Perhaps what Lanier is saying is that we sould move away from the whole extremely brittle finely tuned machiens where all the parts fit exaclty or pretty much not at all to more organic sort of things.
Search google for "Feyerabend Project" for more on this.
One thing mentioned there is that software modules should communicate more with protocol streams than exactly correct rigidly typed structures that break if you cough close to them. In this way thow different pieces of software do not need to be recomiled if something changes on one side.
As an example, a HTTP server does no go south if an extra HTTP header is plugged into its interaction, while a function call would probably go bonkers if you add another parameter in a call to it.
The thing is that the data is stored as a 'blob'. Perhaps we should call it an 'object' but that term is so overloaded that I will rather call it a blob.
Files are an abstraction of the current storage hierarchy that computers use. A file is storted on disk (or some non-volatile medium) and is opened, read in (perhaps not all,) or written to (or appended to). And then closed. The transfer read and write goes from memory to disk.
However think now of a situation where memory in a computer is not volatile and you could have all the blobs you need in a sort of large virtual memory space without the read-write overhead. Perhaps some kind of bubble memory could do this or some sort of virtual memory system. Point is, you do not have to use the whole Open and Close semantic thing. You would just change the blob and it would stay there. There is no "Save" and "Load" command, the blob simply "is there".
Files are currently named by a hierarchical naming system. With a memory-blob archtecture they would still need to be named, but not all of them. For instance, a blob might have refernces to other blobs that are only used by itself but which do not have individual "names" something like temp files.
There was a discussion on Slashdot a while ago about radical UI's. there was a reference about a Word Processor that did not use files, called Yeah Write. Search on google and download the thing and play with it, its quite small.
The program does not have a save command. You have a set of letters and you just click on it and edit it. Its always "there". Its an interesting experience. Of course, behind the scenes it gets saved, but the user does not see it like that. Try it. I found it a eye-opener (and over-cute, alas).
Let see, Unix runs on what, a baziliion platforms? Windows run on 1 (used to run on Power PC and Alpha too, and CE runs on ARM). So make that perhaps 4.
/etc. Think registry in Windoze
Thing is, that anti-binary bias is
a) What makes Unix so multi-platform and
b) makes Unix so eminiently malleable and hackable. Think anything in
It is much easier to edit a text file than a binary file. For one, you can read it. For two, the fact that a text file tends to make things like whitespace ignorable makes it easier and less brittle which leads to more relibale software. If the programs EXPECTS there to be variable amounts of whitespace it compensates which is not true of a binary-reading program which always expects the structures and bits in precisely the correct places and goes wahmmo when something is out of whack.
The difference is like that between a finely tuned racecar and your VW. The one can take more abuse because it is not so dependent on anything being precisley aligned.
Binary may be faster (like the racecar) but it is also more brittle and less reliable (again, racecar...)
The multiplatform thing is easy. Binary is dependent on byte order, the amount of bits-per-wors and such things. Many graphics programs on a PC can still not read Mac created TIFF files to this very day because of this.
A text file, as long as you use ASCII can be read on any friggin platform. There are some issues with character sets and Unicode and so, but that is much simpler to solve. For one, you can eyeball the file to see whats wrong with it.
Actually many of the developers on the Haskell spec now works for Microsoft, specifically AFAIK in the Intentional Programming Project that now seems to have been spun off.
This is pretty cool actually. FP is great, if Microsoft pushes it hard then it might become something that makes the world a better place.
Yes, look on Google for the language SISAL. That apparently beats Fortran.
Sisal was developed at Los Alamos IIRC and those dudes have some of the fastest supercomputers in the world so they should know.
The thing with FL's is not to use a lazy language, but a stract one (SISAL being a good example) should be able to be optimized quite heavily.
God that is stupid. OK, let met put it another way.
Computer work with machine code. High level languages are for people who cannot program in machine code.
OK, Alan Cox gets my het off because DOES program in Machine code, and I have too, but the thing is, threads are easier to maintain than a state machine because usually the two things are separate while in a state machine the bloody states have a complicated interaction.
Obviously the model where you fork 10000 threads off to anything is not viable. But for many apps threads make it easier to maintain the thing and keep separate things separate. A UI which has a separate thread for the UI and a thread for the program for instance is a VASTLY better model to program in than the stupid Event based crap that you see everywhere. See Java Swing vs. Java AWT for an example. And definitely see BEOS for an example.
Thread reduce latency because a single process with a state machine has to wait in blocking IO while a thread can go on. See Netscape that hangs in all windows because a TCP connect blocks in pone window for a good and extremely irreitating example. And Mozilla does the same. For that matter, IE too but in IE you can switch it off!
In general, if things are logically different things that run on their own (The UI vs the program that does something in the background) they belong in different threads. If you do not believe me, install BeOS one day ons a 200 Mhz machine and see how much more snappy it than Linux on your multi Ghz machine because the UI things (in their own thread) repond immediately even then the background thing that they control do not. State machines are simply to difficult to handle than seprate threads but because everryon uses them all our programs have godawful latency in the User Interface.
Also, one important thing. ALL computer programs that have an active GUI have two processors in it. The computer AND the user's brain. The part that the user controls is the GUI. That belongs in another thread.
And one last thing. Thread spawning on Linux is very, very good. Mucho better than under most Unixes AFAIK and therefore the "too much overhead" is crap. On Linux at least. And most program will get along just fine with 2-10 threads.
If Civil Engineering is your thing, go to Switzerland and watch the Grand Dixence Dam in the Alps in Valais. This is the highest (as in altitude) dam in the world. The view is also pretty damn neat.
Sigh.
/.) is that the program is stuffed into a binary database and you cannot get to it with . Favourite tool is usually vi or emacs.
Been there, done that.
LISP Machines. SMalltalk. See any programs written those? Look at IBM Visual Age. THe most commonmoan (especially here on
I agree with you. Fully. And I would like to add the idea of some kind of semi-automatic optimization systems (deforestation in functional langauges for instance, or perhaps some kind of genetic optimizer) to REALLY get you cooking.
However, there are some reasons why this is simply not flying. I think there must be some barrier here which we should try to overcome, but I do not know what. Here are some problems:
a) People get attached to tools. vi and emacs being classic examples. I myself use joe a lot. Why? Because the keystrokes are the same a Turbo Pascla, which, again, are the same as Wordstar. I learned this back in '82, and it got stuck into my little brain. Few of these fancy source systems let me use MY keystrokes.
b) If your components are all dumped individually into the filesystem you can bring the power of millions of man-hours and LOC's invested in pre-existing tools to bear on them. Think grep, CVS, make, M4, cut, tail, awk, sed, and god know what else. ALL these tools work on the simple paradigm of files in the filesystem. Dumping them into some database makes them invisible. And all of these tools are useful when constructing a large program, at times. Even newer things such as XSL transforming engines and such are useful here.
For instance, I wrote a program the other day that used a XSLT stylesheet to write some code. It was a simple sweet job and it worked. Try THAT in a fancy IDE, it would be difficult. IT worked because the XSLT output is the same standard thing: and ASCII (OK, Unicode) file.
The point is, the lingua franca for computers is ASCII files. Zillions of tools use and understand that.
Good example with the Powerdrill.
One other problem in SE is that there is a deep problem with the idea that "easy to do steps" are just as easy if you do one of them, and if you do a million of them. An example. It is trivial to put one brick on top of each other with some cement and build a wall. It is much more difficult to build a house and extremely difficult to build a skyscraper. I have built a small wall. I would NEVER live in a house that I built though, not unless some pro looked at it. In software it seems that people are not like this.
In software, there is (with programmers as well as managers) the impression that, since the small things look simple designing a large system is too.
In programming, the simple building blocks are things such as while loops and if statements and so on.
I can understand a if statement and a while statement and I could probably get my mom to understand it (mind you, she gets scared sh1less when the cellphone rings, because she does not know which button to press...). And these things are pretty trivial. However, there is motherless difference between parking a bunch of loops and simple statements together and building Oracle or the Linux kernel. But in the end, the large program is simply a conglomerate of the simple building blocks. You see this stupid idea in the press too with "Teach yourself Whatever in 21 days".
This whole problem, however, makes it difficult for me see how a professional software engineering accreditation is ever going to be successful. Where do you draw the line? Suppose it becomes law that only software engineers may make programs. Is writing an Excel spreadsheet programming? Is desigining a quick CGI script to let your mom upload a large file because her EMail program sucks programming? It certainly look like it from where I am. With accreditation this would be illegal, just as it is technically illegal for you to fix electrical things in your house (it should be done by a qualified electrician).
To get back to the example of the screwdriver and high abstractions, the guy who does the spreadsheet can sort his sheet, but does not have to know how a sorting algo works. But in desigining a spreadsheet he is in effect writing a declarative program. There is not much of a semantic jump between a complicated Excel sheet and a Haskell or LISP program. (Imperative programs are another matter, though).
Anyways, enough rambling. Its a bit off topic but the drill reminded me of the house example...
When, for instance, will Mozilla or IE support this? Useless (except for intranet apps) if its not widespread.
In particular, there is one high-res female voice in MBrola that is very good. If you need any help setting it up (I can happiyl give you my festival config file) just say mail me at netgrok @at@ yahoo . de
That said, I think text output is very underrated technology and is quite useful, if used in moderation for the right purposes. One sometimes reads overexcited hyping about reading your emails out loud in the car or at breakfast, but that ain't gonna happen with current technology.
For one, the synthesis is bit monotonous for long texts (but then, now that I think about it, having you SO or kids read out a letter out loud would probably be not any better...)
Secondly, you do not necessarily want a user interface where a computer reads out things the whole time (logs, for instance) because a) its annoying and b) it will not work in an office with multiple people.
Where it DOES work and is trivial to implement is for things that are singular events that occur during the day or alarms. Similar to the sort of PA announcements that you would get in a department store. They do not read loud the whole time, do they?
In our case we use festival with Mbrola for two things:
The backup will start at 4 this afternoon" is the announcement I just heard. Sometimes I add "Please insert the tape, pleeeeease", just to hear the damn computer beg ME for a change
Also, if I FORGET to insert the tape the computer starts moaning continously about it. Nothing like a whining b.tch to convince you get off your butt to put the tape in
It is also trivial to insert this into a standard sysv start/stop script at boot time so that you have some tag when critical servers are shut down for some reason.
Costs for this setup? 2 hours of install time (installing MBrola on festival took some digging-through-the-docs. If you need it, mail me). Writing a script that "say x" instead of "echo x) took about 2 minutes. And putting these commands into the cron job took about 10. So for a bout 3 hours worth of time and set of very cheapo computer speakers you get a good useful functional system which works, and the voice is very, very good. This is pretty neat for critical or semi-critical announcement kind of events, not continuous interaction.
Since the only command I use to activate it is "say x" from unix shellscripts with your current setup is trivial.
Btw, the MBrola website has a demo of a german voice reading a weather and traffic report which is even better than the English one.
Of yeah, it was fun to watch the cleaning lady almost get a heart attack when the computer greeted her...
PDF is pretty much the same as Postscript. Open a PDF file in a text editor one day. It includes all kinds of things that are used in a interactive environment such as hyperlinks, bookmarks and
forms handling as well as things such as those stupid security features and encryption.
There is also some Javascript support.
The new PDF 1.5 (used in Acrobat 5) also has support for reflowing text across pages to make it more page-layout insensitive but I have never looked at that (or seen such a file).
The forms part of PDF is cute, it works exactly the same way as HTML forms and encodes the stuff you typed in in MIME and sends it off to a web server. The EU uses that sort of thing for many official forms, and they are directly fillable in the reader, and printable as well.
Postscript is meant to be streamed and not randomly accessed and therefore PDF also has some things that a PS file lacks such as an index that points to each object in the file. In that sense the overall structure of the file is somewhat different. Many PDF files are also encoded in binary, but mostly to save space (Base64 ASCII is NOT efficient in bit-density).
The file itself consists of some layers of fluff and pointers and indices and encoding not normally found in Postscript, but the rendering part that is used to paint the page in the end is pretty much Postscript. As far as I know it includes the whole Postscript programming language.
Think of PDF as Interactive Browsable Postscript and you are not too far off. Think of Postscript as PDF that is meant to be streamed in one shot to a RIP and you are not too far off.
This is why many OS programs that supposrt Postscript also support PDF, the idea is very similar, the actual file layout is somwhat different but no so much that it affects the main program. Rendering code is pretty much the same.
As far as I know PDF 1.5 also has SVG support (might be wrong though), and I know for a fact that Adobe is pushing SVG very hard into all of its products. The rendering model of SVG is similar to that of Postscript, Adobe was on the SVG committee.
I agree on the programming thing. I got fed-up with our idiotic secrataries posting low-res versions of our company logo in high-res docs so i programmed the logo in straigth Postscript and now it works just well, and is always perfect, no matter what the output system.
One thing that has happened in PL design is that they constrain the programmer more. This tends to increase the expressiveness, unlike what one qould expect at first.
"4 is not an int"
This was a message that was displayed by a financial program, but admittedly by one of the ddevelopers while debugging it.
At our firm we let new employees sign a letter before they start working that we archive ALL EMails they send. We treat Emails as business correspondence. We file letters that we send in an official capacity, EMails are the same.
Our sendmail server sends all mails going out (and coming in) to a central mailbox.
That said, we also provide peole with TWO addresses, one is private and is never tampered with, the other one is public and is put inthe files. They know this, and can decide which one to use to send the mails. We are also not anal retentive about sending personal mails and phone calls from work. I mean, they are people, not machines.
However, sending business mails under your personal account is frowned upon.
This systems works well and we never had any problems with it. Also, access to the central mail file is the same as access to business files in that only some managers may look into it. But generally business EMails are treated like any other busniess correspondence: filed as it should be.
This policy has helped us a lot when people leave, but they knew beforehand that their mailboxes are open.
Great idea. With so much beer hlaf will die of alcohol poisoning and the rest will certainly not get any work done :)
Take a tip from me. If you are driving through Basel come down through Germany, but take the highway from Strasbourg in France to Basel. The A5 on the German side of the border is a !"!" nightmare. The French highway is better. As far as I know there are no tolls between Strassbourg and Basel (but I may be wrong. Make sure you cross over the Rhine just after Karlsruhe. I know this road, I live in Freiburg.
Watch swis motorways too, they charge you (40 euros or pounds, or franks I forget) to drive them :). Problem is when you're just passing through north to south for 3 ;)
:)
They dont have tolls though
hours, very expensive
The charge is yearly, so if you drive there a lot (my GF is there now) its not too bad. Two trips through France would cost more than this in Tolls, which you have to pay every time.
And it costs 38 Euros before the border, but in SFr it is cheaper if you buy it from the border guard. The problem is, if you speak somewhat bad foreign German (like me) he starts asking your passport when he hears you are a foreigner. Then the fun starts
If you already have the thing in your window they wave you through the border with a smile into Basel. The extra money for buying the Vignette in Germany compenstates for the hassle with the guards.
If you cross any border into or in Europe and you look European (like an American or Australian of European descent) the best policy is to shut up when you pass customs or a border guards. Generally they will assume you are a local and leave you alone. If you speak a non-local language (like English when landing in Frankfurt or crossing by train into Switzerland) the guards will stop you.
Of course, if you do not look European (especially if you look (to them) like an East european or, worse, Middle Eastern, you will get nailed for your passport EVERY time you get even CLOSE to the Swiss border. I have a Mexican frien who gets checked every time. I got checked twice, and crossed the border about 20 times a year for 8 years now.
Basically, efficient distribution happens becaus of the price/demand equilibrium and this does NOT (quite) apply to a monopoly since they can ignore the pricing part of the curve and set whatever price they want.
In the case of free-market efficient capitalism, this sort of inhumanity come for instance from firing masses of workers. Or sweatshops. Or forcing people to work unpaid overtime. I mean, if the goddamn shareholders cannot afford my time they cannot have it. If I cannot afford to buy a new car, I can't have it. Why should they force me to give them my time??
The problem here is that free-marketers claim that free markets are good for the welfare of humanity as a whole. But when the efficient allocation of resources as such result in inhumanity this is point where you should ask some questions.
This is of course, a complicated, debatable, gray area sort thing, but one should keep it in mind.
Anyways, just some things to think about
A question: Can you recommend any good design books?
OK, I will add another question to this. What are the chances of landing a similar position in Computer Science? Some theoretical stuff such as PL design or something like that. I heard that the .com boom pulled a load of gradschool people out of the universities pursuing the $$$ and that there was a shortage of researchers. I would love to do my PhD, but academic job availability afterwards is a issue I have to consider.
Some programs commits an action on a load of documents/entities. Sometimes this takes time. IT happens.
So I just selected 9512 docs, and ran the script just before I went home in the expectation that it will be finished tomorrow morning when I come back because it takes 4 hours. Fair enough.
Now at doc #1273 there was an error. Your program has 5 choices:
a) Simply give up and crash/stop without telling me what you already finished.
b) Pop up a dialog box to inform me, stopping the process.
c) Mark the things that are finished and stop, so I can continue
d) Mark the things that are in error and do the rest anyhow.
e) Rollback ALL the changes (or better, give me choice AT THE END)
So which do you pick? Here is a tip.
a = very bad. If you do this, I hope you burn in hell.
b = bad. VERY few things anny me as much as a program that stops in the middle for an innocuaous pice of crap with a dialog box. Pop up the thing AFTER the fact (if it is now serius and ask me if you should continue).
c = Semi-annoying
d = Good.
e = Excellent.
if you really want to goto the deepest level of hell, throw away my selection for a) and b) while you are at it, too. Really smart.
Hell, I love this thread.
Netscape has this horrible habit of hanging ALL the open windows when ONE of them has problems with a TCP connection. This is because the windows share the event loop as far as I know. This is dumb. I think Galeon is the only browser that does this right, and you have to switch the behaviour on. (Someone correct me please).
Another peeve: Programs are sometimes like annoying marketing types who think they own you. I am a customer and I will bloody well do what I want on my machines, so deal with it.
Intrusive programs that install things in my Windows taskbar that pops up every 5 minute to ask for an update and (God forbid) install themselves as a taskbar on my desktop. (Hello, someone at Creative Labs!! Are you reading this???)
The same goes for programs (Hello, Apple Quicktime!) that simply assumes that it is now the default handler for GIF, PNG, BMP and everything else in the universe, just because it can vaguely handle it (after asking me EVERY time if I want to upgrade to the "pro" version. NO I DONT. SO FSCKOFF NOW).
To put in simple terms, MY DESKTOP DOES NOT BELONG TO YOU; AND I DO NOT THINK YOUR "!" PROGRAM IS THE END-ALL AND BE ALL OF EVERYTHING IN THE UNIVERSE.
Programs that send out info over the net without my permission. MY DATA DOES NOT BELONG TO YOU EITHER!
Capitalism is about the strong surviving. It is also about the weak going down and I fully intend to help the system by voting with my feet against programs that are written by power-hungry marketing types who want to take over my machine.
More rants: Games that do not let me change the keyboard mappings. I live in Germany, where the keyboard is weird. I like my games in English. I will happily remap my bloody keys, but please MAY I? And on a Jerry keyboard the a key is NOT above the z key!
And while we are on the subject, if you are going to do 3 language version of your program, just put ALL of them on the SAME CD from now on? Please? Few programs are so large that the multi-language stuff does not fit (possibly recorded speech in Games, I will give them that). I don't want to import all my games, and there are many expats here who like to play in good ol' Eengleesh.