Monday, August 22, 2005
A rant on the writing of God's name
But, this concept gets reduced from a matter of respect to absurdity when it's taken too far. It has become fashionable to write “G-d” instead of “God,” despite the fact that God is not God's proper name. Artscroll wouldn't even write “Lord” in its translation of the siddur, instead using “Hashem ”. Despite the note hidden in the introduction, it probably causes people to pray using the filler, instead of the real name. Needless to say, the Hebrew text still contains words that refer to the attributes of God, making it questionable as to what they thought they'd gain, except making the text sound even more awkward than it already is.
Today, I got an email that thanked “Hash-m”. Does this matter have an end?
UPDATE: It's everywhere! (Look at the first comment.)
Technorati tags: God, Judaism, tetragrammaton
1 Aka, the “Ineffable Tetragrammaton,” which, coincidentally, would make a great name for a rock band.
2 DW and I disagree about whether the ד is used because people didn't want to write ה or because it, as the fourth letter of the alphabet, represents the missing 4 letters.
Sunday, August 21, 2005
Computer Maintainance
There are some maintainance tasks, though, that I should have done a long time ago, but never got around to.
The first: Reorganizing the disks. Here's why. From
mount
:/dev/hda2 on / type ext3 (rw,errors=remount-ro)
/dev/hda1 on /winxp type ntfs (ro,umask=0)
/dev/hdb1 on /biggig type vfat (rw,umask=0)
From
df
:Partition | Total size (kb) | Used space (kb) | Available space (kb) | Percent used | Mount point |
/dev/hda2 | 16342484 | 16342484 | 2014040 | 88% | / |
/dev/hda1 | 40957684 | 11611772 | 29345912 | 29% | /winxp |
/dev/hdb1 | 29296224 | 29345912 | 513264 | 99% | /biggig |
What this tells you is that I have one 16GB partition currently used as my main Debian drive, one 40GB partition used as a Windows XP C: drive (it's NTFS formatted), and a second 30GB hard drive that was used as a second Windows drive (it's VFAT formatted). When this machine was originally set up, I expected to use XP as my primary operating system and GNU/Linux as a toy. The reverse has actually happened, and I have no intention of going back to using Windows. It also means that my writable hard disks are nearly full, and I'm wasting gigabytes of space in a read-only Windows XP partition.1
Unfortunately, I've been stuck keeping the Windows partition, because annoying people who don't know any better2, keep sending me Word documents. Unfortunately, while OpenOffice.org, KOffice, and AbiWord are good, they aren't perfect, and they sometimes don't reproduce the layout of documents the same way Word does.3 They also can't handle import or export of equations produced in Microsoft equation editor4 This would force me to reboot. Some people have had success running Office under wine (free software), and it is definitely supported under CrossOver Office (proprietary), but I couldn't even get past the installation on wine. The instructions in this article (and its comments) allowed me to set up the ability to run a full copy of Windows XP and Microsoft Office under emulation. It's not super-fast, but, it works. For reference, I created a 2.5GB file to use as a disk (in
/biggig/windisk
), and I run qemu (from a script called /usr/local/bin/win
) with the following command line:qemu -boot c -hda /biggig/windisk/c.img -user-net -m 256 -localtime $*
If I need access to other files, I place them on a VFAT formatted floppy disk image, and run
win -fda a.img
The a.img file is mountable via the Linux loopback device.
In case you're interested, here's a screenshot of Word running under qemu with Mozilla and the KDE window manager in the background:
So, now that I have a way to read those pesky Word documents, I can finally reclaim my unused hard drive space and absorb it back into the Linux filesystem hierarchy, and perhaps, do a better partitioning job (Logical Volume Manager?) than I did last time. Yay!
Technorati tags: computers, Linux, Windows
1 The captive NTFS driver allows read-write access to NTFS partitions. But, NTFS and VFAT don't support the advanced features of *nix filesystems, such as the *nix permissions model, and symbolic links.
2 Or don't have a choice, by the constraints of their work.
3 The people who wrote the open source word processors have done a very good job at ensuring compatibility. The incompatibilties are a side-effect of Microsoft's closed formats that encourage vendor lock-in, and make users keep paying into the Microsoft money machine.
4 In their defence, sometimes, neither can Microsoft Word.
Thursday, August 18, 2005
Yet another note to Blogger support
1. It contains an unterminated <br> tag after the words "objectionable content." The tag should read: <br />. Other tags are correctly terminated.
2. It contains this img tag:
<img src="http://www.blogger.com/img/navbar/1/flag.gif" name="flag" alt="Flag Blog" width="55" height="15" />
The name attribute is no longer supported. The id attribute should be used instead.
You can see the errors that result from an attempt to validate a Blogger blog for XHTML 1.0 compliance
by clicking this link.
Technorati tags: Blogger, standards, XHTML
License change
The main reason is that if I'm quoted and attributed somewhere else in any amount larger than would normally be considered “fair use”, I would rather it be something I actually wrote, rather than a derivative of it. I may not automatically want to be associated with some derivative works of what I write. Of course, if anyone would like to create a derivative work of my blog, you can always ask my permission, and I will likely give it.
This change has no effect on comments posted by anyone other than myself. The copyrights to those are still retained by their authors. It also does not change the rights associated with posts that were already used under the previous, more liberal license.
Wednesday, August 17, 2005
Why not patent a movie?
Can someone tell me why this guy can't patent a movie? (link to Forbes magazine) The argument from the patent lawyers:
Patents generally cover "a machine, a process or a unique composition of matter," says William Heinze, an attorney with Thomas, Kayden, Horstemeyer & Risley in Atlanta who first wrote about Knight's idea on his Web site.
"Is a story line one of those? That would be a tough argument," Heinze says. "I'm all in favor of radical thinking, but that's a tough one."
So, that means that Andrew Knight can't patent the movie plot itself, but, what if the movie were part of a system involving a projector?
Richard Stallman described the idea of “literary patents” as a counter to the idea of software patents in June 2005. It was supposed to be a reduction to absurdity, and, his presentation of it probably wouldn't make it past anything but the sleepiest patent examiner (it could happen). But, as with reality television, it becomes ever harder to produce a satire of the US patent system. Now, we wait a couple of years to see if they reject the application.
Technorati tags: patents, software patents
Saturday, August 13, 2005
Reading Eicha and finding meaning in the Ninth of Av
And, yet, with the advent of the State of Israel with Jerusalem as its capital, and the downfall of reward and punishment theology, Tisha B'Av loses its “punch” as a day of national mourning. Even for those who observe the day by going to a service, the ritual can become something that takes place in the synagogue only. After leaving the building (or just the room), life continues normally — precisely what the rabbinic restrictions intended to avoid.
In order to increase awareness of the holiday and bring it modern relevance, many congregations incorporate kinot (mounful liturgical poems) for the Holocaust into their Tisha B'Av service, in keeping with the traditions to add commemoration of each generation's tragedies (destruction of the Temples, the Crusades, pogroms, etc.) to this day. We are now at the third generation after the Holocaust. Even that may be losing its power for us.
There is also a third theme of the megillah, pathos. Total helplessness in the face of the inevitable. The enemy is more powerful and chases us faster than the eagles. The city that once housed a living population is in ruins. Nobody is left to maintain order. The assurances of salvation from the prophets were false hopes. Those who didn't die fighting are slowly perishing from starvation. Pathos is the only way I can think to read this verse (Lam. 4:21):
שִׂ֤ישִׂי וְשִׂמְחִי֙ בַּת־אֱדֹ֔ום יֹושֶׁ֖בֶת בְּאֶ֣רֶץ ע֑וּץ גַּם־עָלַ֙יִךְ֙ תַּעֲבָר־כֹּ֔וס תִּשְׁכְּרִ֖י וְתִתְעָרִֽי׃
Rejoice and be glad, daughter of Edom, who dwells in the land of Uz: the cup shall pass over to you also; You too will drinking of it, and you will also make yourself naked.
Perhaps it calls for a new reading of Tisha B'Av. We avoid making requests in prayer on Tisha B'Av because the gates of prayer are closed (“שתם תפלתי”-- Lam. 3:8). The Ninth of Av does not have to be only about commemorating national tragedy, even though that is the vehicle through which it operates. It can also serve as a recognition of powerlessness in the face of the forces of history, a counterbalance to the national ego.
This year, the disengagement from Gaza is, as one friend put it, the “elephant in the room”. Some see it as the start of yet another 9 Av historical tragedy, others as the only chance for moral [and demographic] salvation. Either way, we do not know the outcome of this dangerous and powerful gamble. Is it a giveaway to the terrorists who want to destroy us or is it the first step on the road to (minimally, a cold) peace and a secure Jewish state?
Lam. 5:22 makes the request:
הֲשִׁיבֵ֨נוּ יְהוָ֤ה׀ אֵלֶ֙יךָ֙ וְֽנָשׁ֔וּבָה חַדֵּ֥שׁ יָמֵ֖ינוּ כְּקֶֽדֶם:
On its face, it is a request that God turn us back to Him through the observance of the commandments (specifically the ones that relate to human relations). But, it is also be an impassioned plea to return us to the certainty that we are under God's protection, and thus, our days “renewed” as of old.
Technorati tags: disengagement, Eicha, Judaism, Tisha BeAv
Wednesday, August 10, 2005
Computer Interfaces IV
First part: On people and machines
Second part: On dumb machines
Third part: And the people who program them
Last time, I said that I'd show you a real interface. well here it is, written in C *. Please don't run away now! Everything inside /* and */ marks are comments, human-readable, and ignored by the compiler.
And, finally, here's the demonstration user interface (skip the code):
/* A really simple interface. The computer will begin running the code at main() */
#include <stdio.h>
#include <ctype.h>
#include <string.h>
/* show the introductory/help page */
void
show_help() {
printf("Simple interface example (pocket calculator)\n"
"Performs an operation on numbers a and b.\n"
"Enter numbers or operations when prompted,\n"
"Valid operations are:\n"
"+ Addition\n"
"- Subtraction\n"
"* Multiplication\n"
"/ Division\n"
"Type \'h\' for this help message or \'q\' to quit at any prompt\n"
"Press ENTER after your response.\n");
}
/* Prompt the user for a number, return that number.
If the user presses q, set do_quit = 1.
Do nothing if do_quit is already nonzero (the user already selected to quit) */
double
prompt_number(char which_number, int *do_quit) {
char response[20];
double number;
int i;
int do_over = 0;
if (!*do_quit) {
do {
do_over = 0;
printf("Number %c? ", which_number);
gets(response);
for (i = 0; isblank(response[i]); i++);
switch (response[i]) {
case 'q':
*do_quit = 1;
number = 0;
break;
case 'h':
show_help();
do_over = 1;
break;
default:
sscanf(response, "%lf", &number);
}
} while (do_over);
}
return number;
}
/* Ask what operation to do and return the answer.
If the user chooses to quit, set do_quit = 1.
Do nothing if do_quit is already nonzero (the user already selected to quit) */
double
operations_math(double a, double b, int *do_quit) {
char response[20];
int i, return_value;
int do_over;
double answer;
if (!*do_quit)
do {
do_over = 0;
printf("Operation (+ - * / q h)? ");
fgets(response, 20, stdin);
for (i=0; isblank(response[i]) && (i < strlen(response)); i++);
switch(response[i]) {
case '+':
answer = a + b;
break;
case '-':
answer = a - b;
break;
case '*':
answer = a * b;
break;
case '/':
if (b == 0.0) {
printf("ERROR! Attempt to divide by zero!\n");
answer = 0.0;
}
else
answer = a / b;
break;
case 'q':
answer = 0;
*do_quit = 1;
break;
default:
show_help();
do_over = 1;
}
} while (do_over);
return answer;
}
/* The program starts running here */
int
main() {
int should_quit = 0;
double a, b, ans;
show_help();
do {
a = prompt_number('a', &should_quit);
b = prompt_number('b', &should_quit);
ans = operations_math(a, b, &should_quit);
if (!should_quit)
printf("Answer: %f\n", ans);
} while (!should_quit);
return 0;
}
(* A high level computer language; operating system, C compiler, and standard C libraries required)
It's a few very short lines of code, but, it includes most of the elements of a “real” modern user interface:
First, it simplifies the complexities of the computer. A typical user session might look like this:
Simple interface example (pocket calculator)
Performs an operation on numbers a and b.
Enter numbers or operations when prompted,
Valid operations are:
+ Addition
- Subtraction
* Multiplication
/ Division
Type 'h' for this help message or 'q' to quit at any prompt
Press ENTER after your response.
Number a? 1
Number b? 2
Operation (+ - * / q h)? +
Answer: 3.000000
Number a? 8
Number b? 90
Operation (+ - * / q h)? /
Answer: 0.088889
Number a? 10
Number b? 0
Operation (+ - * / q h)? /
ERROR! Attempt to divide by zero!
Answer: 0.000000
Number a? q
In fact, this particular program simplifies so much, that it turns your thousand-dollar computer into a pocket calculator. Even though this is reduction to absurdity, it is being used to demonstrate, by example, that user interfaces limit what the user can do to what the programmer intended. In some way, the user is faced with the same trade-off as a programmer: facility versus power. This will hopefully become more evident in a future part of this series, when we look at some common user interfaces, and how that tradeoff works.
Second, it has a help facility and error messages. Without the help facility, if a user were to just sit down with this program, he/she wouldn't have a clue what to do with it. As in: “what's a ‘Number a?’ and what's it going to do for me?” Error messages are also quite important. They tell you one of two things: (1) you did something wrong. (2) the computer did something wrong. In my experience, users have become so click-happy that they tend to just go right through the error messages or pop-up boxes that are thrown at them without a second thought. Sitting down a few seconds with an error message, and trying to understand what it means is a first step to learning to how to deal without panicking when things go bump in the night. Sometimes, your guess will be wrong.** But, it is the way to computer zen. In fact, the lack of appropriate error messages in a user interface is in itself problematic. Which is a perfect segue into element number three...
It's got bugs! (Did you see them?) This program, in fact, has about the level of error a programmer might make after only one week in a programming course. Not all of the bugs were in code that's strictly user interface code, but, I think it's illustrative. Surprisingly, similar errors form the majority of security holes in modern computer programs. In no particular order:
- Lack of error messages and error checking:
- The only error condition that is caught here is division by zero. But, it's not the only possible error that can happen. Each declaration like this:
double answer;
reserves a certain amount of temporary memory for a named variable. In this case, we're declaring that the variable we call “answer” holds a “double precision floating point” value. It also reserves a certain amount of memory space for it. But, let's say that we try to add 1x10309 (which can be represented by1e309
) to any number. The answer will be infinity. The double precision floating point format simply can't support any number above 1x10308. There is no indication of an overflow or underflow condition anywhere in this code.
Even worse, if you type a letter where it asks for a number, there will be no indication that you typed incorrectly. The program will output an answer, but the answer would be garbage! Next time you see an error message, just think of what worse things might have happened if the error weren't reported back to you. Only the operations_menu() function correctly checks if the user typed a response to the question that the computer was actually asking. - Bad assumptions:
- Notice these lines of code:
if (b == 0.0) {
printf("ERROR! Attempt to divide by zero!\n");
answer = 0.0;
}
You would think that they would catch all times that the variableb
, which would otherwise be used in division, is equal to zero. In fact, it won't. This is because of some quirks in how the double precision floating point numbers are stored internally in the computer. There is sometimes some inherent round-off in numbers that will make numbers close to zero effectively equivalent to zero. A better comparison would choose some arbitrarily small (but representable) number epsilon and compareif (fabs(b) < epsilon)
, where fabs(x) is the absolute value of the floating point value x. - Buffer overruns:
- Let's say I give you one sheet of paper to write on (and a pen) and a desk to sit at. I then bring a second person in the room who will dictate some text to you, and you write down whatever he said on your paper. The second person doesn't know that I only gave you one sheet of paper, so, he starts dictating the entire play Hamlet. At some point, you run out of space on the paper. One option for you is to stop dictation. Maybe you'd get another blank piece of paper. You could also start writing on the desk, and/or on any sheet of paper that happens to be sitting around, used or unused. Well, these two lines of code ask the user for a number and put the user's response into a variable helpfully called “response”:
printf("Number %c? ", which_number);
gets(response);
The variable was declared herechar response[20];
to be 20 characters long. What do you suppose happens when I type in more than 20 characters? Here, the computer will do the equivalent of writing on the desk. It will overwrite whatever happens to be in memory after the space I reserved for the response. If it contains something important, it'll be gone. The next line finds the first nonblank character in the response (that way, if someone types <space><space><enter>, it will still know to quit.for (i = 0; isblank(response[i]); i++);
Again, it doesn't have any bounds checking. If the whole string contains blanks, it will stop at some random point in memory. Notice how differently these lines are implemented in operations_menu():printf("Operation (+ - * / q h)? ");
fgets(response, 20, stdin);
for (i=0; isblank(response[i]) && (i < strlen(response)); i++);
The code asks the question, waits for a response which is limited to 20 characters, and finds the first nonblank character only if it exists within the memory reserved to hold the response. Buffer overruns are particularly dangerous, because the same memory that holds variables that the user can change also holds variables that are internal to the program, and the locations in memory that the computer may later execute as code. Bad input to a program that results in a buffer overrun is a common vector for the spread of computer viruses and worms. A Google search for “buffer overrun” reveals how many times this type of error happens in real programs (and how dangerous it can be).
It is likely that any sufficiently complex computer program has bugs. Bugs usually come about from the programmer not accounting for all possible inputs, and from logical errors. Sometimes, as is the case here, the logical errors can be subtle, and, even when testing the program, it will work. They usually aren't quite as trivial as the ones presented here. Bugs are a side effect of complexity.
Notice that the computer, at every time, would do exactly what it was told. The machine would be stupid enough to shoot itself in the foot if it were told to do so (provided that it had an external gun interface and a foot). Just something to keep in mind.
So, this time, I showed a simple example of how a user interface serves to limit what a user can do, and went into a tangential discussion about how bugs come about. Next time, we'll apply (hopefully, only the first of) those principles to a common user interface, and show just how the user interface will not only change the way you interact with the machine, but will change the way you think about what you can do with the machine in addition.
---
** A long, long time ago, in the dark ages of DOS, I got an "out of memory" message and thought that if I waited a few minutes and tried again, maybe the computer would somehow get its memory back. This makes no sense whatsoever, but, strangely enough, it worked. Go figure.
Technorati tags: computers, interfaces, end users
Thursday, August 04, 2005
Our own evil
The terrorist was subdued while changing magazines, but later lynched by a street mob. While I would have preferred to see this guy brought to justice in a court of law, I have to say, I don't really feel sorry for him.
Technorati tags: Shfaram, terrorism
Tuesday, August 02, 2005
Framing a debate
Note that the suggestion that this prohibition emanates from some sort of misogynist rabbinic bias or historical circumstance is insulting and bordering on heresy. (emphasis mine)
He then goes on to enumerate various positions on the issue in his usual style. I frequently disagree with Gil's conclusions, but, I usually respect him for presenting a reasonably complete, well-backed-up argument for his case. For comparison, look at his discussion on the documentary hypothesis, which is also a rather contentious area in Modern Orthodoxy (for the understatement of the century). The problem here is that one cannot be expected to have a reasonable debate on an issue when the conclusion is predetermined. It is the same issue that stunts the intellectual growth of the right-wing Orthodox. If they think the ideas presented by secular society (or, worse, by other Jews) are any threat, the ideas are not confronted, but banned. The adherents are then taught that the idea is wrong, and that any questioning of their interpretation is heresy (in case you ever wondered why DW puts up "Meredith warnings" on some of her posts, now you know). The adherents are then forced to forsake their communities, or to follow along like sheep.
Yes, it's true... if halacha is totally devoid of historical circumstance, then the position of women in the Jewish community can never change. Women will always be considered intellectually deficient beings (on par with children), and thus, in need of care by either father or husband. This is the plain reading of the sources, all apologetics aside. But, where is the proof that halacha is unlike any other legal or social construct, that is, that it is not informed by its historical context? Or, do all posekim (decisors) wear cultural blinders?
Gil, sorry for insulting you. Do I get my apikores pin now?
Technorati tags: gemara, Judaism, women
Monday, August 01, 2005
Standards compliance won't happen without you!
And, that's how we get to Blogger. Notice that I no longer use the automatically generated profile on the right. Why? A simple missing / character causes XHTML incompliance. I received an automated reply from Blogger support, and have heard nothing back since then. The cascading stylesheet (CSS) that I use on my page *is* standards-compliant CSS 2.0. But, the Blogger navbar has its own CSS that has a number of errors (try validating the CSS on my page, and you'll see the errors). After a Google search, I found that the problem was reported half a year ago and is still there. So, take a few moments to send a nice email over to Blogger support asking them to fix the navbar! Bug-fix priority is likely dependent on the number of complaints they get.
Technorati tags: Blogger, CSS, standards
First Impressions of Tanya
As of this posting, I've only read through the first 5 chapters of Sefer Shel Beynonim, and, as such I do not expect that all will have been explained; open questions are par for the course.
That said, the first chapters have already introduced a number of theologically troubling ideas.
The first, and perhaps the least important, is alluded to in DW's post on the subject. And, that is the soul-body dualism which is seeped with divisions of parts and explanations based on Aristotelian physics and assertions about biology that are obviously incorrect to anyone with a rudimentary modern knowledge of either discipline. It is possible, however, to get the physical explanation wrong, and still have a valid point. Chinese medicine, for example, is based on a self-consistent theory about energies flowing through the body. The theory likely has no basis in reality, but the practice of the techniques may work.
The second is that Torah, Prophets, Writings, and, seemingly *all* of Rabbinic literature are a unified whole that has to be harmonized. To the Ba'al HaTanya, disharmony must hide a deeper truth. This is an extension of the basic assumptions of the Talmud well beyond the works the Talmud considered to have such stature. Of course, this is by no means a polemical device that is unique to Tanya. The Torah's (presumably, including the whole body of Torah) place in the universal scheme is established circularly as the material incarnation of God's thoughts, brought down from above and taking the form of ink on paper. What is lost in this kind of philosophy, however, is the human element of struggle with the Torah's words, ideas and concepts. After all, if the rabbis were perfect tzaddikim and everything they said were truly harmonious, then, Torah itself is a stagnant document. Learning without the possibility of development becomes like running against a brick wall.
The ideas that I think should keep a student up at night*, however, are elitism and supremicism.
The Ba'al HaTanya intentionally redefines the terms of righteous (tzaddik), intermediate (beinoni), and wicked (rasha) in a way that makes the tzaddik a God-like figure himself. The tzaddik is not only someone who mostly chooses to do good, but rather, he is someone who is entirely motivated by his good nature. In other words, someone who does no wrong. Not only that, but the tzaddik, by the nature of his soul, has a special place in society:
in descending degree by degree, through the descent of the [heavenly] worlds . . . from His blessed Wisdom, ... the nefesh, ruach and neshama [divisions of the soul] of the ignorant and unworthy come into being. Nevertheless they remain bound and united with a wonderful and essential unity with their original essence and entity; namely the extension of the Chochmah Ila'ah (Supernal Wisdom), inasmuch as the nurture and life of the nefesh, ruach and neshama of the ignorant are drawn from the nefesh, ruach and neshama of the saints and sages, the heads of Israel in their generation. (ch. 2)
Respect for the tzaddik is not in itself problematic. What is troubling me at this point is the removal of free will from the equation. The soul descended from heaven, and its attributes are fixed in its descent. And, that is just the soul of Jew. The non-Jew fares even worse:
The souls of the nations of the world, however, emanate from the other, unclean kelipot [evil forces] which contain no good whatever, as it is written in Etz Chayim, Portal 49, ch. 3, that all the good that the nations do, is done from selfish motives. (ch. 1)**
So, Judaism (or Jewishness, or something like that) is an essential property of the individual from his ensoulment, and the only way the person could ever hope to be good for the sake of what is right. From my initial reading, then, it seems to me that what God created and called “good” is, in fact, pure evil. And, the basic ability to do good is denied to the majority of His creations, by His own actions. Troubling indeed.
* figuratively speaking (and, until they are satisfactorily resolved)
** Interestingly enough, the proof-text for the existence of the second soul, which only Jews have, is from Genesis, referring to Adam. Was Adam a Jew?
Technorati tags: Tanya, theology