Are you the Webmaster of an IE-only Web site?

Then the following is a must read for you:

How Not To Do Market Research

Web sites, which support only IE, would not be visited by people, who use other browsers. So OF COURSE, they would not “report enough traffic to justify” support for W3C standards and/or other browsers.

By the way, my Web site’s browser statistics since the start of November 2007 indicate the following browser percentages (disclaimer for Israeli Webmasters: my Web site’s audience is international):

MS Internet Explorer 42.6%
Mozilla 31.7%
Unknown 12.5%
Firefox 9.7%
All the rest 3.5%

Blogging About Disabilities

I write in this blog not only about crazy ideas, but also about accessibility and deafness.

Lorelle on WordPress wrote a blog article about people who blog about disabilities. This article repeats the old stuff (known to people with disabilities, but not widely known otherwise) about the percentage of people disabilities in the general population, mentions the relevant legal issues (specific to USA), and links to several relevant and interesting blogs.

The above article also refers the readers to Globe of Blogs – Disabled Blogs for more disabled blog links.

Videoclips with subtitles – Halelujah!

Ilan Shavit publicized three videoclips about Israel.

I was happy to be surprised to see that those videoclips have subtitles in Hebrew, making them accessible to the hearing impaired, who know Hebrew!

The links to the videoclips are:

  1. Israel – Part 1
  2. Israel – Part 2
  3. Israel – Part 3

"Do you need assistance?"

Recently I flew with British Airways.
They seem to have recently made commitment to provide accessible experience to passengers with special needs.
At any case, when checking in for flights, I was now asked if I need special assistance. The accessibility program seems to be relatively new – they now know how to deal with passengers with difficulties in walking, but deaf passengers are relatively new experience for them. So I had my turn at educating the airline employees that deaf passengers need a way to see the captain’s messages in writing, especially in emergencies.
The airplanes, in which I flew both directions, had plasma TVs for each seat. However the video programs were suspended whenever there were announcements – with no written rendition of the announcements. This is something, which can be improved.
An hilarious experience was when the airplane neared landing. I was asked by two stewards if I need assistance. I explained that I’ll need assistance, only if we crash land, and the captain gives instructions to the passengers. We all laughed.

Rabbi Eliashiv declared war on the deaf!

Rabbi Eliashiv, an Haredi rabbi, issued a ruling forbidding schools under his control to admit children, whose parents are using non-“kosher” cellphones (cellphones with intact ability to use SMS, Internet and video).

This ruling adversely affects deaf people, who need to be in contact those parents due to reasons like:

  1. They work with those parents and need to communicate them as part of their job.
  2. They themselves are deaf children of those parents.

It is necessary to take legal action, with the aim of outlawing cellphones without functional SMS, and outlawing discrimination against deaf parents of haredi school children, who use video for Sign Language communication via 3G cellphones.

Sources (in Hebrew for the time being):

Needed: an USB socket in computer keyboards

I had a chat with , in which he told me about http://mkweb.bcgsc.ca/carpalx/?perl. This Web page proposes that qwertyists and dvorakists, who program in perl, switch to yet another keyboard layout, which is optimized for this task.

The problem is that if someone, who trained himself to use a customized keyboard layout, needs to temporarily work with another computer, which does not already have his layout – he needs to mentally switch to the standard keyboard layout. Very difficult and highly error-prone.

A solution to the problem would be for people to carry around personalized keyboards. When they need to work on another PC, they plug their keyboard into it and start typing. This calls for standards, and for hardware+software design, which allows keyboards to be plugged and unplugged at any time.

A first step could be for a standard keyboard to provide an USB socket, which allows an user to plug in his own USB keyboard. When a customized keyboard (which, by the way, could be also a chord keyboard for very rapid text entry) is plugged in, the standard keyboard will just pass on the keycodes from the user’s customized keyboard to the PC.

Another problem, which the proposed USB socket in standard keyboards would solve, is that people, who need to use special keyboards due to motor disabilities, are no longer confined to the single PC provided to them at work with suitable keyboard.

My Internet connection was down for two days

The cause was that my ADSL connection got stuck due to sudden disconnection.
The problem was solved by resetting the ADSL connection from Bezeq’s side.

For future reference, I am writing some information which I collected during the process.

I use the following script to connect to ADSL:

#!/usr/bin/perl
#
# Supports hidden pap-secrets and chap-secrets files.
#
# Copyright (C) 2004 by Omer Zak, all rights reserved.
# Licensed under the GPL (version 2 or later).
#

($prog = $0) =~ s/.*///;
$usage = <<EOT;
Usage: $prog [ start | stop ]
  OPTIONS:
    start - Starts the connection
    stop - Stops it
    !!! implement also clean - to clean if the script
    !!! was aborted and did not clean up its act
EOT

######### Parameters ################################################
## 1. Hardwired parameters needed for both adsl.pl start and adsl.pl stop
$ramdisk = "/dev/ram2";
$ramdisk_mountpoint = "/tmp/ram_adsl";
$ramdisk_log = "/tmp/ramdisk_log$$";   # For messages created by RAMdisk related commands
$pap_secrets = "$ramdisk_mountpoint/alternate-pap-secrets";
$chap_secrets = "$ramdisk_mountpoint/alternate-chap-secrets";
$fw_adsl = "fw-adsl.sh";
## 2. User configurable parameters
$username = "your-username";
$ispname = "your-ISP";  # iactcom, to connect to Actcom
$debug = 0;
######### End of Parameters #########################################

######### Prepare RAMdisk for the secrets files #####################
sub prepare_ramdisk {
    $old_umask = umask(0177);
    $rc = system("dd if=/dev/zero of=$ramdisk bs=1k count=256 >& $ramdisk_log");    # RAMdisk size = 256K
    die "RAMdisk clear operation failed!n" unless (($rc/256) == 0);
    $rc = system("/sbin/mke2fs -vm0 $ramdisk 256 >> $ramdisk_log 2>&1");
    die "Filesystem construction in RAMdisk failed!n" unless (($rc/256) == 0);
    die "Could not make RAMdisk mountpoint!n" unless mkdir($ramdisk_mountpoint,0600);
    $rc = system("mount $ramdisk $ramdisk_mountpoint");
    die "Attempt to mount the RAMdisk failed!n" unless (($rc/256) == 0);
    umask($old_umask);
}
######### End of RAMdisk preparation ################################

######### Create a secrets file in RAMdisk ##########################
sub write_secrets_file {
    local($secret_type,$ramdisk_filename,$psw) = @_;
    # $secret_type is either "pap" or "chap"
    # $ramdisk_filename is the actual RAMdisk filename to which we
    #      establish a symbolic link.
    # $psw is the password which we do not want to actually save on disk.

    $old_umask = umask(0177);

    # Replace /etc/ppp/$secret_type-secrets (if any) by link into the RAMdisk.
    if (-e "/etc/ppp/$secret_type-secrets")
    {
	die "Could not rename existing /etc/ppp/$secret_type-secrets!n" unless rename("/etc/ppp/$secret_type-secrets","/etc/ppp/$secret_type-secrets.old.$$");
	print "Existing /etc/ppp/$secret_type-secrets was renamed as /etc/ppp/$secret_type-secrets.old.$$n";
    }
    die "Could not set up symbolic link at /etc/ppp/$secret_type-secrets!n" unless symlink($ramdisk_filename,"/etc/ppp/$secret_type-secrets");

    ######### Write secrets file ########################################

    die "Failed to open the alternate $secret_type secrets file!n" unless open(SECRETS,">$ramdisk_filename");
    print SECRETS "\"$username@$ispname\" \"10.0.0.138 RELAY_PPP1\" $pswn";
    die "Failed to close the alternate $secret_type secrets file!n" unless close(SECRETS);
    umask($old_umask);
}
###### End of procedure for creation of a RAMdisk secrets file ######

unless ($ARGV[0]) {
    die $usage;
}
if ($ARGV[0] =~ /^start/) {
    $start = 1;
}
elsif ($ARGV[0] =~ /^stop/) {
    $stop = 1;
}
elsif ($ARGV[0] =~ /^clean/) {
    die "The clean option is not implemented yet.n"
}
else {
        die $usage;
}

if ($start) {

    ##### Validate ##################################################
    $who = `whoami`;
    die "Only the superuser is permitted to run this script!n" unless ($who eq "rootn");

    ##### Obtain user's password ####################################
    if (-t STDIN) {
	system 'stty', '-echo';
    }
    $| = 1;   # Unbuffer STDOUT
    print "Password: ";
    chop($password = );
    print "n";
    if (-t STDIN) {
	system 'stty', 'echo';
    }
    # NOTE:  !!! The above is not protected against signals.
    #        !!! Aborting the script file at this point will
    #        !!! cause the terminal to enter Helen Keller mode.

    ##### Debian Addition:  need to create /dev/ppp if nonexistent ##
    if (!-e "/dev/ppp") {
	print "/dev/ppp does not exist, creating it.n";
	$rc = system("mknod /dev/ppp c 108 0");
	die "Attempt to create /dev/ppp failed!n" unless (($rc/256) == 0);
    }
    else {
	die "/dev/ppp is not a character special file!n" unless(-c "/dev/ppp");
    }

    ##### Prepare RAM disk and links ################################
    prepare_ramdisk();

    # Replace /etc/ppp/pap-secrets (if any) by link into the RAMdisk.
    write_secrets_file("pap",$pap_secrets,$password);
    # Replace /etc/ppp/chap-secrets (if any) by link into the RAMdisk.
    write_secrets_file("chap",$chap_secrets,$password);

    # Now can start the ADSL connection.
    print "Calling Actcom via ADSL...n";
    system("/usr/sbin/pptp 10.0.0.138 --quirks=BEZEQ_ISRAEL debug user $username@$ispname remotename \"10.0.0.138 RELAY_PPP1\" defaultroute mtu 1452 mru 1452 noauth &");
    sleep 5;  # Should wait until a connection is really established.
    system($fw_adsl);
}

if ($stop) {

    print "Disconnecting from Actcom...n";
    system("/sbin/ifconfig ppp0 down");
    system("killall pppd");
    sleep 2;
    print "Restoring regular iptables settings...n";
    system("/etc/rc.d/init.d/iptables restart");

    # Now wipe out the PAP secrets and chat script files and do
    # other cleanup activities.
    die "Could not remove the symbolic link at /etc/ppp/pap-secrets!n" unless unlink("/etc/ppp/pap-secrets");
    die "Could not remove the symbolic link at /etc/ppp/chap-secrets!n" unless unlink("/etc/ppp/chap-secrets");
    $rc = system("umount $ramdisk_mountpoint");
    die "Attempt to unmount the RAMdisk failed!n" unless (($rc/256) == 0);
    die "Could not remove RAMdisk mountpoint!n" unless rmdir($ramdisk_mountpoint);
    $rc = system("dd if=/dev/zero of=$ramdisk bs=1k count=256 >> $ramdisk_log 2>&1");    # RAMdisk size = 256K
    die "RAMdisk wipe operation failed!n" unless (($rc/256) == 0);
    #### End of hidden pap-secrets support ##############################
}

######## Hidden pap-secrets file support code ###########################
if ($debug < = 0)
{
    die "Could not remove $ramdisk_log!n" unless unlink($ramdisk_log);
}
######## End of hidden pap-secrets support ##############################

# End of adsl.pl perl script.

(The above script calls another script – fw-adsl.sh – to configure the firewall. This script is not reproduced here.)

When my ADSL connection was stuck, pppd yielded the following error-message:

[pppd] LCP: timeout sending Config-Requests_

I took the following steps:

  1. Turned off and back on the ADSL modem.
  2. Ensured that the two rightmost lights in the modem are green and light steadily. Other lights blinked when there were connection attempts.
  3. Pinging the ADSL modem itself worked.
  4. Bezeq provides a special username for testing – 1@1, with empty password. If you can connect to this special username, but not to your ISP then the problem is with your ISP’s infrastructure. I could not connect to 1@1, proving that the problem was with Bezeq’s infrastructure.
  5. Since Bezeq does not support Linux, they need the user to connect a MS-Windows PC to ADSL and try to connect via it, and to note the error message given by MS-Windows! Since I do not have such a machine at home, I was stuck.
  6. I turned to a friend who might have such a laptop. He did not have a laptop, but told me his war story and advised me to ask Bezeq to reset my ADSL connection from their side. This advice worked!

Moral: we need a table relating pptp/pppd error messages to MS-Windows error codes, which Bezeq support personnel know.

The following FAX numbers are relevant to the problem resolution efforts:

  • Actcom – FAX 04-8676116 – active both during daytime and at night, but support personnel must be notified some other way to look at the FAX machine.
  • Bezeq Internet support center – FAX 03-6829048 – not clear if they answer FAX messages also at night and during weekend, because I contacted them also by alternative means (an hearing person making a phone call in my behalf).

Memorial Event to Commemorate 11th anniversary of Itzhak Rabin's Assassination

Tonight, I was physically present in the memorial event held to commemorate 11th anniversary of Itzhak Rabin’s assassination. The event was held in Rabin Square, Tel Aviv.

I was physically present, but not really present there.

I did not see the Sign Language interpreter, nor was a podium for her to stand on was to be seen. I have the interpreter’s cellular phone number, so I SMSed her. After about half an hour, I walked away and indulged in some dead tree shopping (15th issue of “Dreams at Aspamia”). Later I got her reply (she cannot answer SMS messages in middle of interpreting).

Turns out that she was to be shown only on the big screens which show what is happening on the podium. And even then – only when there are speeches rather than songs and music (even though she is expert also in rendering music in Sign Language). This explanation was accompanied by two short words about the IQ level of the event’s organizers.

Most of the people present in the rally was Leftists, of the “Peace Now” variety. I came there because war for accessibility is my 1st priority, and trumps other political considerations. However, once I was present and saw their slogans, I poignantly recalled how the Palestinians forced the Israelis to elect Bibi Netanyahu (from the camp which opposed Rabin’s peace policies) rather than Shimon Peres (who encouraged Rabin to adopt the peace policies which provoked his assassin) in the elections held after Rabin’s assassination. The Palestinians accomplished this by putting bombs in few busses and exploding them, killing passengers – including Arabs who happened to ride on the busses with Jews.

Links to previous Web pages about Rabin and accessibility:

August Penguin 5 – Preliminary Impressions

The conference has been held.

It was organized with haste, as long time was lost without anyone volunteering to lead the effort of organizing it, until volunteered to fill this role.

As a consequence of the haste, some events, which have traditionally been held in previous years, were not held at all this time, or if scheduled, were canceled. There was no hacking contest, something which needs long lead time to adequately prepare. The trivia contest was squeezed out of the schedule. A short movie was supposed to be shown, but was not shown after all. The Hamakor Prize was not given this year. There was no booth with technical books sold by Combooks, even though they donated some books to the event.

The most important parts of the event – the panels about Free Software in education and Free Software in business – were held.

In my particular area of responsibility, there was some activity, which was triggered by people with disabilities having pre-registered to the event almost at the last moment. A blind man asked for an escort, and thanks to an extra mile from two of the event’s organizers (Shachar Shemesh and Sagiv Barhoom), he was provided with transportation and escort without my having to do anything more difficult than few E-mail messages. There was also an hard-of-hearing guy, and it can be said that he was screwed by not having registered earlier. During the time I knew I will be the only one needing a notetaker for the conference, I did not bother to inspect the hall as it did not matter to me where the notetaker, laptop and me will sit. However, once we had to serve also an hard-of-hearing person, we should have sat near the podium rather than the far end of the hall. The shortage of time also did not allow me to arrange for a FM assistive listening system for the event, but this was OK, because the guy could cope if he sat near the lecturers (which he did).

I still have some homework to do – arrange for the conference’s presentations to find their way to the blind guy (the second accessibility provision which he asked for), edit the notetaker’s transcript, and post it on the Wiki for other people to review it, fill in missing information, correct errors – and finally use it to help caption the short movie planned by Ram-on Agmon to commemorate the event.