« 2007年12月 | メイン | 2008年02月 »

2008年01月 アーカイブ

2008年01月02日

@new_harizonの喋る言語「Yharian」について

Twitter上に突如出現した@new_harizonが喋る新しい人工言語「Yharian」について考察してみる。
人工言語
人工言語とは、まさに人によって人為的に作成された言語を意味し、自然言語の対局にあたる。エスペラント語は最も有名であろう。ハングル語も人工言語と思われるかも知れないが、これはハングル文字が人工なのであってハングル語はどの系統なのかは定かではない。異色な例ではクリンゴン語もある。人工言語にはコンピュータ言語も含まれるが、ここでは人的コミュニケーション、つまり人と人の意思伝達に用いる人工言語を議論の対象とする。
「Yharian」の文字表記
「Yharian」は昨年末に作成された人類史上一番新しい人工言語で、文字にアルファベットの「y」と「hara」を用いる。「yhara」の5文字ではなく、発音に由来する「y」と「hara」の2種類である点に注意されたい。「y」と「hara」だけなので単純に推測すると2進法で表現する言語ということになる。「y」と「hara」の間にはスペースが入り、文の最後は「.」「!」「?」の何れかの約物をとる。言語的にはモールス信号に近いイメージを持つであろうが、これは正確ではない。モールス信号は「・」と「ー」の組み合わせでアルファベットを表し、生成されたアルファベット群より文章を生成する。しかし「Yharian」は「y」と「hara」で文章そのものを生成するのである。
文字種と文字長
「Yharian」は「y」と「hara」と3種類の約物で構成される事は既に述べた。では約物を除いた2つの表記、「y」と「hara」でどれほどの意思疎通が可能なのであろうか。一般的に文字種が少ない言語は「語彙」を表す単語や複合語が長くなり、表現可能な「語彙」は「文字種の文字長乗」で算出可能である。但し、言語特性によりありえない組み合わせが存在するためこれよりも少なくはなる。クリンゴン辞書(The Klingon Dictionary)には約2000種の語彙が収録されているらしいので、これをもとに「Yharian」の日常会話における必要な文字長を推測すると11文字長となる。しかし、「Yharian」は「hara」を一字とし、区切りにスペースも必要とするため「hara hara hara hara hara hara hara hara hara hara hara」のアルファベット換算で54文字となる。
「Yharian」の意思疎通方法
「Yharian」の解説をここまで行ってきたが、このような変わった特徴をもつ言語で本当に意思疎通が可能なのであろうか。実は「Yharian」では「y」と「hara」の順序等には特に意味を持たない。声の強弱・高低、相手の表情、そして身振り手振り等が特に大きな役割を果たす言語なのである。簡単に言うと「空気を読む」という超高度なスキルを要する。日本語の「行間を読む」スキルよりも遥かにレベルが高い。では何故このような顛末に至ったのであろうか。要するに現時点では「Yharian」は歴史上もっとも文字化に向かない言語という事である。文字化する上で欠落される情報が余りにも多すぎるのだ。
「Yharian」の未来
将来的には「Yharian」表示方法の更なる発展が推測される。これまでのウムラウトやリガチャに代表される合字等は文字の組み合わせに重点が置かれている。発音記号もアクセントまでしか表現できない。音程・表情・身振り・手振りを「y」と「hara」と共に表記する方法が必要なのである。但し、「Yharian」のネイティブスピーカーや研究者はとても少
長いな...。

2008年01月09日

PostScriptは実はプログラミング言語

PostScriptはページ記述言語だと思っていた。
一般的な認識もそうだと思う。
でも、実はかなり高度な事ができるらしく、過去には「リバーシ」を実装した人や「Web Server」を実装した人がいるらしい。
これにはかなりショックを受けた。
追記:2008/01/09
某所経由で情報を貰った。詳細は下記URLを参照の事。

Kanasan.JS JavaScript第5版読書会#2やります

告知が遅れましたが「Kanasan.JS JavaScript第5版読書会#2」開催します。申し込み受付中です。詳しくは下記URLでどうぞ。

2008年01月16日

Kanasan.JS JavaScript第5版読書会#2終了しました

参加された方々、おつかれさまです。そしてありがとうございます。
今回もなんとか無事に終了しました。
端から見ていてもわかったかと思いますが、毎回パニクっております。
大体、舌のまわりが悪い自分がマイクを持つことなど、よくスタッフが許していると思います。
これまでも大所帯と思っていましたが、今回の読書会はなんと40人を超える規模となってしまいました。
今回も、主催者のスキルを遥かにこえる能力の持ち主が大勢参加されておりました。
単なる勉強会・読書会というだけでなく、各方面で名を馳せる方々の交流の場も提供できた事をうれしく思っています。
ボランティア主体の勉強会ですので、大成功をおさめる時と大失敗で終わる時、非常に落差があるかとは思います。
たとえ失敗に終わったとしても懲りずに続けていく所存でありますので今度ともKanasan.JSを宜しくお願いします。
最後に。
参加者の皆様、本当にありがとうございます。当日色々動いて頂き感謝しております。受付をかってでて下さったshogo4405さん、ありがとうございました。
急に開催が決まったのに本当に素早く動いて下さったスタッフの皆様、ご苦労様でした。そしてありがとうございます。特に、今回は多忙のためスタッフをしないと宣言していたにも関わらず結局マイクを持たせる事になってしまったujihisa氏、当日の裏の作業をほとんど一人でこなしてくださった37to氏、至らない主催者ですいません。精進します。
そして、ほとんど表には出ていませんが、今回に限らずこれまでも主催者よりも遥かに動いてくれているyukky、迷惑をかけるかと思いますが今後とも宜しくお願いします。
最後の最後に。
「最後に。」が異常に長い。

Kanasan.JS JavaScript第5版読書会#2で使ったTimer

読書会で使ったTimerです。LT等に使いました。大急ぎで作ったのでぐちゃぐちゃですが、せっかくなのでさらしておきます。
Timer
<html>
<head>
<script>
function init(){
    var sec=location.search;
    var bg=document.getElementById("body");
    var ft=document.getElementById("time");
    if(/^\?[0-9]+$/.test(sec)){
        if(confirm("ready...")){
        }else{
            return;
        }
    }else{
        alert("Error:Parameter is not Number."+sec);
        return;
    }

    sec=parseInt(sec.match(/^\?([0-9]+)$/)[1]);

    var limitTime=(new Date()).getTime()+sec*1000;

    setInterval(function(_bg,_ft,_limitTime){
        var bg=_bg;
        var ft=_ft;
        var limitTime=_limitTime;
        return function(){
            var nowTime=(new Date()).getTime();
            var restTime=limitTime-nowTime;
            if(false){
            }else if(restTime>60000){
                bg.style.backgroundColor="#ffffff";
            }else if(restTime>0){
                bg.style.backgroundColor="#ffff00";
            }else{
                bg.style.backgroundColor="#ff0000";
            }
            ft.innerHTML=Math.floor(Math.abs(restTime/60000))+":"+(("00"+(Math.floor(Math.abs(restTime/1000)%60))).slice(-2));
        }
    }(bg,ft,limitTime),100);

}
window.onload=init
</script>
</head>
<body id="body">
<div id="time" style="font-size:360px;text-align:center;height:100%;vertical-align:middle;"></div>
</body>
</html>

2008年01月19日

「第22回 Ruby/Rails勉強会@関西」の課題への一回答

こなみ先生の「ショートな課題でジャムプログラミング」の課題のひとつに「配列をシャッフルする」関数の作成があった。
そのときLingr上で「sort_byもrandも使わずに実装するには?」というような話があったので実装してみた。
#!/usr/bin/ruby
def shuffle(a)
  rtn = Array.new
  ary = a.clone
  rnd=0
  while(ary.size>0)
    rnd = (rnd+Time.now.to_f).hash.to_i
    idx = rnd % ary.size
    rtn<<ary.slice!(idx)
  end
  rtn
end

testary = [1,2,3,4,5]
p shuffle(testary)
肝はTime.nowをseedに使用している点と、Time.nowによる偏りが出ないようにhashを使用している点かと思う。まあ、たいした事はしていないけど。
追記
何故かTB送っても受け取ってもらえない...。

JavaScriptで作ったマインスイーパ

正月にハードディスクの整理をしていたらずいぶんと前にJavaScriptで作ったマインスイーパが出てきた。
せっかくなので晒す。
Firefoxでは動かなかったがSafariでは動作した。
タイムスタンプが2003年8月となっていてかなりの年代物。
coding styleがあまりにも古いので見るに耐えないが、歴史的遺物として修正はしない。
DLして書き換えたり修正したりご自由にどうぞ。
わかりにくいところだけちょっと説明
フラグのON/OFFはShift+Clickで。
code欄に文字列をいれinputをclickすると、ディレクトリを見に行きその配下の画像を使用するようになる。
urlParameterでも渡す事ができるようになっている。
2008/03/13追記
新版を作成しました。

2008年01月25日

hosts・lmhosts.sam・networks・protocol・servicesの所在

たまにしか使わないせいか、「hosts」「lmhosts.sam」「networks」「protocol」「services」のある場所を忘れる。
ので、メモ。
WindowsXPの場合
C:\WINDOWS\system32\drivers\etc
何故「drivers」の配下なのかいまだにわからない。

IISのLogの出力先

IISのログの保存場所をいつも忘れる。
のでメモ。
WindowsXPの場合
C:\WINDOWS\system32\LogFiles
IISの既定値なので変更されている可能性がある。

血液型の色

血液型には色がある。
A型 => 黄色
B型 => 白色
O型 => 青色
AB型 => 赤色(ピンクに近い)
実はこれ、輸血用の血液パックに貼られるシールの色である。
献血に行かれる時に注意してみれもらえればわかるが、採血時からこの色を使用してる。
医療関係の人なら色を見れば一瞬で血液型を判断できるという訳だ。
(稀血の場合もいずれかの血液型の亜種とみなされるらしいが詳細は不明。)
システムを設計する場合、この色を取り入れることを提案すれば喜ばれるかもしれない。

2008年01月26日

Haskell Hackathonに参加する

Haskellを全く知らないにも関わらず、Haskell Hackathonと言うイベントに参加する事にした。Haskellに興味を持った事、ここ最近何故か流行している言語の実装に興味を持った事等が理由だ。自分のプログラミングスキルをはかる良い機会にもなると思う。何にせよ、頑張ってみようと思う。

2008年01月31日

Kanasan.JS prototype.js CodeReading#3

今回も突然ですが、「Kanasan.JS prototype.js CodeReading#3」開催します。既に申込受付中です。今年に入って早くも二回目です。本当は読書会からもう少し間隔をあけたいのですが、会場確保の関係でこのようになってしまっています。この機会を逃すと、早くても2月末になってしまうので...。
Google