2011年2月12日土曜日

歌詞を写すタイピング練習でも

タイピングの練習ソフトで、タイプウェル憲法というとかなり有名なソフトです。日本国憲法のタイピング練習というソフトですが、なかなか楽しめます。

ですが、私は憲法を打つことに楽しみを覚えないので、このソフトはやはり練習という感じがしてしまってあまり好きではありません。タイピングは楽しく練習したいものですが、打つだけのプログラミングは最近あまりしていないので(楽しくないですし)、練習に少し困っていました。

そんな折にひらめいたのがMP3打へのデータ作成と自分の好きな曲の歌詞をまとめた本がほしいということ。私は中島みゆきの歌が好きですが、その歌集は少し古いものしかなく、I Love you,答えてくれなどのアルバムの曲はありません。それらを自分なりに一つのファイルにまとめて、ちょっとした本にしてみたいなと思ったのです。

アルバムを適宜揃えながらの作業ですが、それなりの数のアルバムはあるので、そんなに進捗が遅いことはないでしょう。それらによって、タイピングの練習が出来れば、一石二鳥であると思うのです。

タイピングの練習は楽しくやりたいものなので、ゲームを使いたいところなのですが、どうにも楽しいと感じられてちょうどいいレベルのゲームが少ないので、ひとまず自分でタイピングを要求する仕事を与えて、それをこなしていくことでレベルをあげようと思います。普段あまりマウスを使わず、タイピング中心の私だからこそ、タイピングを十分に練習したいと思います。もちろん、腱鞘炎にならないような程度ではありますが。

2011年2月11日金曜日

挨拶と返事

挨拶や返事は人とのコミュニケーションの基本手段であり、これらに人となりが出るといいます。これに異を唱える気はないのですが、それにしては私の友人…私が一方的に友人と思っているだけで向こうは私に友人面されるだけ迷惑かもしれませんが・・・は寂しすぎやしないかと思うのです。

返事がない。挨拶がない。いつものことと流してしまう自分が情けないのです。時間に遅れるのも茶飯事です。

挨拶・返事なしで時間に遅れるけど約束だけはいつの間にか承認を得ているという状態が多くあります。時間に遅れる連絡がある人はまだマシで、その連絡がない人も決して少なくありません。

昔、ネチケットを学んだとき、連絡のメールには最低限返事を書くのがマナーだと習いました。うっかり忘れていて注意を受けたこともありました。でも、それは常識ではないのでしょうか。非常に多くの人がメールを使うようになって「メールが迷子になることもある」ということが忘れられつつある昨今、「連絡のメールには受け取ったぐらいの返事を返す」のはもう古びた話なのでしょうか。返して欲しいなら開封通知をつけろ、と(でも、開封通知は付けられるソフトと付けられないソフトがありますし、送付した先で拒否することも可能です。)

手紙について色々な本を読んでいて、受け取ったら返事を書くのが、すぐに会うならばあったときにでも礼を言うのがマナーだと学びました。昨今ならメールでも良いので、ありがとうとかえすものだと。こちらが個人的に、別に用事もなく近況報告で送っている手紙ならどうでもいい(と思うことにした)のですが、重要な連絡を書いた手紙だと、返事がなくて困ります。

挨拶も同じ事。挨拶をするということが忘れられているように思うのです。

私自身、挨拶や返事を忘れないようにしなければならないと肝に銘じています。挨拶や返事がないということはどれほど人に嫌な思いをさせるかということを身を持って体験しているから「自分が嫌がることを人にするな」と言うとおり、挨拶や返事をしない、返さないというのをなくさねばと思います。

誘いがない事より、もっとずっと嫌な思いをする挨拶や返事。自分はそれで人を不快な気持ちにしていないかと少し心配です。

誘いがずっとないことは、ただ自分が相手を好意的に思っているだけで、相手からすれば取るに足らない人間であるということを表しているだけです(それでも十分不幸かもしれませんが)。でも、挨拶や返事がない、失礼に値することをしても何を思われていないというのは、そもそも自分という存在を人間として捉えられていないということです。

会話は必ずキャッチボールだから、コメントの一回目という会話の始まりには返事をします。私は、このパソコン的な世界でも、コメントをくれる人を血の通った人間だと思うからです。逆に、ここにコメントをくれる人を始め、私の意見を興味深く見てくれる人には、多分私のことが人間として見えているのではないかと思います。

挨拶や返事がないということが少なくない日々。私は人間という存在として捉えられない、あるいは非存在として捉えられるべき人間なのでしょうか。

そんな人ばかりいれば、中島みゆきの「異国」が身の隅々まで行き渡るのではないか。そう思います。

2011年2月10日木曜日

プログラミング関連書籍の会社別分析 マイコミの場合

今回はマイコミ(http://book.mycom.co.jp/)を紹介します。

マイコミ、毎日コミュニケーションズは少し変わったプログラミング書籍を出している会社です。Code readingやプログラミングコンテストチャレンジブック、ロベールのC++入門講座など、他の会社とは違った切り口の本が多く出ています。

切り口は変わっていますが、意外とプログラミングの力を底上げすることのできる”トレーニングブック”が多いことに気が付きます。また、比較的わかり易い本が多く、価格もリーズナブルです。ただ、第1歩というよりは、一通りプログラムを学んだ人が、それを用いていかに楽しんでいくかに重点が置かれているように感じます。

実用というよりも、楽しむプログラミング関連書籍を出す会社、それがマイコミであると考えています。

2011年2月9日水曜日

二度同じことを教えるカリキュラム

小中学校、あるいは高校の話を聞いていて非常にしばしば感じることとして、なぜ同じことを何度にもわたって教えるのだろうということです。

もっともそれを感じるのは歴史です。小学校6年生で歴史を学び、その記憶新しいまま中学校1年生でまた縄文時代からスタートする。歴史を教えるべきか教えないべきかで言えば、私は教えるべきだという意見ですが、それでも2度も同じことを教えるのは、それも少なくない時間を使って教えるのはあまりよいとは思わないのです。

小学校で歴史を学び、中学校で歴史を再度学ぶ。この時、中学校の歴史では小学校で学んだことなど何も覚えていないような、そんな授業を受けます。でも、「これは小学校で習ったから、もう一度確認してみなさい」とすれば、ずいぶん授業時間数に余裕ができて、他の内容をもっと多くできるようになるのではないかと思います。簡単な例として
「645年に大化の改新というものが起きました。これは中大兄皇子と中臣鎌足が蘇我氏を倒した事件です。」
と小学校で習うのですから
「蘇我氏は政治的に権力が集中する場所にいました。そのため、大化の改新というものが起きたのです。この後、中臣鎌足は後に藤原鎌足となり、平安時代の藤原氏の祖先となるのです。」
と中学校で「大化の改新は既知である」として授業をすればいいように思います。

同じように中学校の数学も同じことをなんども教えています。文字式がその最たる例で
a(x+b)=ax+ab
とするのを1年生で学んだのに、2年生でもまた同じことを習います。さらに、
(x+a)(x+b)=(x+a)x+(x+a)b=x^2+(a+b)x+ab
と、上の式の応用である括弧の展開は3年生です。このために復習で再度学び、結局3度学ぶことになります。

英語もそうで、過去形は中学校1年生の最後で学び、今度はまた、中学校2年生の最初に学びます。助動詞もまとめて学ぶのではなく、中学1年生でcanを学び、2年生になってからwillなどを学ぶという形式です。

中高一貫校では高校の内容まで含めて一貫して教える学校もあるようですが、そもそも小中学校のカリキュラムを一貫させることはできないのでしょうか。同じことを学んでいる時間というのはひどく退屈だったことを覚えています。復習が大切だという意見は否定しませんが、別にそれを学校の授業でやる必要はなく、それこそ長期休暇なり何なりの宿題としてやれば良いのではないでしょうか。

同じことをまとめてやると、その流れがよくわかって頭に入るという人もいます。私の友人たちも、方程式は方程式、恒等式の計算方法は恒等式の計算方法、とまとめてやっていました。高校の物理でも、電磁気学や力学は物理Iと物理IIにまたがっていますが、それらをまとめて学習しました。化学でも、有機化学などをまとめて学習した覚えがあります。私はそうではありませんでしたが、高校の微分積分は、文系の人は数学IIの教科書でやるけれど、理系の人は数学IIの部分は飛ばしてまず数学IIIの極限を学び、そのとき一緒に数学IIの内容も学んだ、という人がいます。集合関連を数学Aの最初でやり、途中でまた論理と集合で同じことを学ぶから、と、先に論理と集合を学んでから個数の処理・確率を学んだ人もいるようです。

一貫している部分は、まとめたほうが良い。高校の物理や化学でそれを実践していておもいました。とりわけ、基本的には一貫して学ぶ義務教育や、数学Aのように同じ範囲、あるいは学校のカリキュラム上理系なら両方を学ぶ、というところでは、同じことを2度教える必要はないと感じます。

土曜日が無くなって、行事などを削り、それでも時間不足という様子だった学校を今でも覚えています。一貫して教えることと、同じことを2度教えるのをなくすことで、ずいぶんと時間にも余裕ができるのではないかと思います。

2011年2月8日火曜日

お節介と取られれば

お節介というのは厄介なものです。当人が好意でやっているにもかかわらず、相手には迷惑だったり鬱陶しかったりするからです。頭でわかっていても、自分のやってることがお節介かどうかというのは判別がつきにくいものです。

自分が良かれと思ってやっていることは少なくありません。でも、人間には考え方の違いがありますから、それが必ずしも良いとはいい切れません。単純な例として、私は後輩に自分から話しかけていますが、これをどう取るかは後輩次第です。先輩の方から話しかけてくれてありがたい、ととってくれればいいのですが(私は基本的にそう取ります)、先輩の方から話しかけられると気をつかって返事をしなければならないし、と取られるとこれは迷惑です。そんな些細なレベルからお節介というのがありますから、お節介を焼かない様にしようと思うと、何もできない様な状況になってしまいます。

でも、普段の様子を見ていると、私が良かれと思ってやっていることは大抵お節介になってしまっているのではないかと思うのです。
自分から話しかけてくれることはない人々。
"わざわざ"用意までして書いてくれる手紙。
バイトの後になるのに遊んでくれる友人。
そんなのを見ていて、自分のやっていることがお節介になっているように、迷惑になっているように見えてしまいます。

結局のところ、自分がいなければ丸く収まっているかもしれない。その人々にとっては自分とであったことが迷惑な"好意"を受ける不幸の始まりだったかもしれない。そう思うと、自分という存在がなくなってしまったほうがいいのではないかとすら思うのです。

少しさびしさを感じるような静かな曲を部屋で聞きます。その時には、ただ聞いているだけで、他の人には何の影響も与えません。結局のところ、それが一番なのではないかと。何もせず、ただひとり自分の世界に閉じこもっている方が他の人にとっても自分にとっても良いのではないだろうかと思います。どれほどお節介と取られているか、どれほど悪意と取られているか。気が滅入るという言葉がぴったりです。

ある(ゲームですが)物語の言葉に
"It is far safer to be feared than loved."
というものがあります。
実際に、この言葉を使う人は、恐れられるがゆえに、畏敬されるがゆえに愛されるよりもよほど安全な場所にいるのですが、現実世界においてもある意味では正しい訳です。
あいつは変なやつだからと、ある意味で恐れられて、誰からも敬遠されていれば、寂しいでしょうが安全です。少なくとも、誰もが自分を必要としていないということがわかるから、平穏です。ずいぶん昔に、色々な人から嫌われていた頃、いや、今も嫌われているのでしょうが、一人ぼっちで家族以外に話せなかった頃、寂しくもどれほど安全だったことか。

結局のところ、自分という存在などない方が、世のため人のためではないかと思ってしまうのです。自分のやっていることがお節介にとられているのであれば、何をもなせないのですから。

2011年2月7日月曜日

テキストブラウザ at Linux

リナックスのHTML向けテキストブラウザをCで作りました。意外と情報がなく、結構苦労したので、そのソースを載せておきます。
なお、以下のソースはHTML以外にも対応できるように改造中のものです。また、インクルードするべきファイルは

stdio.h
string.h
stdlib.h
sys/types.h
sys/socket.h
netdb.h
netinet/in.h
sys/param.h
sys/uio.h
unistd.h

で、Linux向けです。

#define BUF_LEN 256

int main(int argc, char *argv[]){
  int s,sw,i;
  struct hostent *servhost;
  struct sockaddr_in server;
  struct servent *service;
  FILE *fp,*save;
  char buf[BUF_LEN];
  char host[BUF_LEN]="localhost";
  char path[BUF_LEN]="/";
  unsigned short port=0;
  char output[1024],character,hoge;

  if(argc>1){
    char host_path[BUF_LEN];

    if(strlen(argv[1])>BUF_LEN-1){
      fprintf(stderr,"URL is too long!\n");
      return 1;
    }
    if(strstr(argv[1],"http://")&&
       sscanf(argv[1],"http://%s",host_path)&&
       strcmp(argv[1],"http://")){
      char *p;
      p=strchr(host_path,'/');
      if(p!=NULL){
strcpy(path,p);
*p='\0';
strcpy(host,host_path);
      }else{
strcpy(host,host_path);
      }
      p=strchr(host,':');
      //puts(p);
      if(p!=NULL){
port=atoi(p+1);
*p='\0';
      }
      if(port<=0) port=80;
    }else{
      fprintf(stderr,"please input http://host/path... to URL\n");
      return 1;
    }
  }
  printf("get http://%s%s\n\n",host,path);
  servhost=gethostbyname(host);
  if(servhost==NULL){
    fprintf(stderr,"failed to get IP address from [%s]\n",host);
    return 0;
  }

  bzero((char *)&server,sizeof(server));
  server.sin_family=AF_INET;
  bcopy(servhost->h_addr,(char *)&server.sin_addr,servhost->h_length);

  if(port!=0){
    server.sin_port=htons(port);
  }else{
    service=getservbyname("http","tcp");
    if(service!=NULL){
      server.sin_port=service->s_port;
    }else{
      server.sin_port=htons(80);
    }
  }

  if((s=socket(AF_INET,SOCK_STREAM,0))<0){
    fprintf(stderr,"failed to make socket.\n");
    return 1;
  }

  if(connect(s,(struct sockaddr *)&server,sizeof(server))==-1){
    fprintf(stderr,"failed to connect.\n");
    return 1;
  }

  if((fp=fdopen(s,"r+"))==NULL){
    fprintf(stderr,"failed to fopen.\n");
    return 1;
  }

  setvbuf(fp,NULL,_IONBF,0);
  if(port==0) port=80;

  //fprintf(fp,"GET %s HTTP/1.0\r\nHost:%s:%d\r\n\r\n",path,host,port);
  /*
  //fprintf(fp,"testing");
  fprintf(fp,"GET %s HTTP/1.0\r\n\r\n",path);
  fprintf(fp,"User-Agent:MC_test\r\n\r\n");
  */
  //fprintf(fp,"Accept:*/*\r\n\r\n");
  //fprintf(fp,"Host:%s\r\n",host);
  /*  fprintf(fp,"Host:%s:%d\r\n\r\n",host,port);
  fprintf(fp,"Connection:Keep-Alive\r\n\r\n");
  //fprintf(fp,"\r\n");
*/
  sprintf(output,"GET %s HTTP/1.0\r\n",path);
  sprintf(buf,"User-Agent:MC_test\r\n");
  strcat(output,buf);
  sprintf(buf,"Accept:*/*\r\n");
  strcat(output,buf);
  //fprintf(fp,"Host:%s\r\n",host);
  sprintf(buf,"Host:%s:%d\r\n",host,port);
  strcat(output,buf);
  sprintf(buf,"Connection:Keep-Alive\r\n\r\n");
  strcat(output,buf);
  fprintf(fp,output);
  //fprintf(fp,"\r\n");

  fprintf(stdout,"Save File? :");
  scanf("%c%c",&character,&hoge);
  if(character=='y'){
    fprintf(stdout,"Please input save file name :");
    fgets(buf,sizeof(buf)/sizeof(char),stdin);
    buf[strlen(buf)-1]='\0';
    if((save=fopen(buf,"w"))==NULL){
      fprintf(stderr,"Save file cannot open\n");
      return -1;
    }
  }else{
    save=stdout;
  }
  fprintf(stdout,"html mode? :");
  scanf("%c",&hoge);
  scanf("%c",&character);
  sw=(character=='y')?0:1;
  if(sw==1){
    for(i=0;i<10;i++) fgets(buf,sizeof(buf),fp);
    while(1){
      if(fgets(buf,sizeof(buf),fp)==NULL) break;
      fprintf(save,"%s",buf);//Binary reading!
    }
  }else{
     while(1){
      if(fgets(buf,sizeof(buf),fp)==NULL) break;
      if(strncmp(buf,"<",1)==0) sw=1;
      if(sw!=1) continue;
      fprintf(save,"%s",buf);
      if(!(strncmp(buf+1,"/html",5))) break;
    }
  }



  fclose(fp);
  fclose(save);
  close(s);
  putchar('\n');

  return 0;
}

2011年2月6日日曜日

久しぶりにWAGNER!

ものすごく久しぶりにWAGNERの大宮大会に行ってきました。楽しかったです。

今回は私のカトウ2000(ペン先も交換し、キャップの特殊な修理もあってもはやカトウと言いがたいペン)の調整をお願いしました。調整師はパコさん。こんなお父さんいいなぁ、と思える、優しい感じの素敵な調整師様です。いいなぁ…。

今度はこのカトウ2000、コンコルド風味になりました。コンコルド風味で、さらに細字スタブという大変”ヘンタイ”なペンでございます。新しいインクを入れてようやく使えそうです。素敵素敵。

その他、懐中時計カバンやら、大阪からの参加者やらで、今回も大変楽しいWAGNERでした。

実は、大宮大会は私が現在住んでいるところから一番気軽に参加できる場所なのです。電車一本往復1000円なので、参加費合わせて2000円。恵比寿に行くよりよほど楽です。そこで楽しめるのですから、実に素敵です。大宮・神戸・恵比寿当たりは顔を出すことがありますので…。

今月末には恵比寿開催があります。最近万年筆の世界から少し離れていたのですが、久しぶりにWAGNERに参加して、やはり私は万年筆の世界の一員だということを強く感じた次第です。