ときどきの雑記帖 リターンズ

最新ページへのリンク
目次ページへのリンク

一つ前のページへ 2007年1月(下旬)
一つ後のページへ 2007年12月(中旬)

ホームへ

2007年12月10日

■_ ところで

例のやさしいC++ですが、 全ページというのは論外として、 適当なページを(それなりの解像度で)スキャンして見てもらえれば どんな本なのかというのは一目瞭然だと思うのですが、 どこか適当な置き場所ないでしょうか?

といっても、スキャンしてpdfにはできるけどjpegとかpngは辛いなあ。 どうしよう(要はスキャナがありません)。

■_

昨日の夜にreddit日本語版の上位にいたけど。 第15回 誰でもプログラミング | WIRED VISION

黎明期のパソコンにはBASICインタプリタが標準搭載されていたため、画面に絵を描いたりして
楽しむ日曜プログラマが大量に出現したものですが、最近は計算機が高度化したのと同時にプロ
グラミングの敷居まで高くなってしまい、自分でプログラムを作って楽しむ人が昔に比べてかえ
って減ってしまいました。

すぐれたソフトウェアが大量に世の中に出回っているため、わざわざ自分で何か作ってみようと
いう気にならないのもプログラミングが流行らない理由のひとつかもしれません。プロが作る料
理の1/10のクオリティの料理を自分で作ることは可能かもしれませんが、市販ソフトの1/10のク
オリティのソフトウェアを自作することはほとんど不可能ですから、自分でソフトウェアを作っ
てみようという気持ちになりにくいでしょう。

(ry


■事情の変化

ところがこのような状況は最近になって変わりつつあります。まず、最近のWebブラウザには
JavaScriptが標準装備されていますから、特に開発環境をインストールしなくてもちょっとした
プログラミングを簡単に試してみることが可能になりましたし、MITで開発されている
Processing のようなシステムを利用すれば「line(10,10,100,100);」のようなプログラムを入
力して「再生ボタン」を押すだけで、画面上にウィンドウが表示されて直線が描画することがで
きます。このようなシステムは昔のBASIC並に手軽に使えるうえに、最新のプログラミング技術
やWeb技術も使うことができます。

絵を描くという点では(昔の)BASICに一歩及ばなかったけどその辺の事情も 変わる可能性があると。JavaScriptの天下?

■_ Pythonと××との比較

数日前に redditで拾ったネタ。 pdfへのリンクだったのでスルーしかかったけど、内容を読んでみると結構面白かった。

Python vs Erlang

Erlangとは

・関数型言語
・Fault tolerant
(ASCII.jp - アスキー デジタル用語辞典 - フォールトトレラント)
・大量のプロセスやスレッドに対してスケーラブルである
・並列なタスクや distibuted なタスク向けに作られた

Erlang Distinctions
Erlangの特長

・Pythonと同様対話的なシェルを持っている
・Single assignment “variables”
・強力なパターンマッチング
・“文字列”は int のリストの構文糖(syntactic sugar)
・文字列は Latin-1 が仮定されている
・Erlangは “=”をパターンマッチングのために使用している


Concurrency Support
並列性のサポート

・Erlangのプロセスは軽量スレッドのようなもの
・プロセスはメモリを共有しない
・プロセス間のやり取りはメッセージパッシングのみで行われる
・プロセスは非常に高速かつ安価に生成される
・プロセスはリンクすることが可能なので、一つのプロセスが他のプロセス
(それがたとえ別のマシン上のものであっても)のエラーを処理することができる

Pattern Matching
パターンマッチング

%% Patterns for multiple dispatch

% quicksort:qsort(List)
%% Sort a list of items
-module(quicksort).
-export([qsort/1]).

qsort([]) -> [];
qsort([Pivot|Rest]) ->
qsort([ X || X <- Rest, X < Pivot]) ++ [Pivot] ++ qsort([ Y || Y <- Rest, Y > Pivot]).

%% Binary Patterns


uuencode(BitStr) ->
<< (X+32):8 || <<X:6>> <= BitStr >>.


uudecode(Text) ->
<< (X-32):6 || <<X:8>> <= Text >>.


Erlang がPythonから取り入れるべきもの

・文字列の取り扱い、特にUnicode
・XMLの処理
・GUIツールに対するバインディング
・より良い構文 ;-)

Python がErlangから取り入れるべきもの

・複数のCPUをまたがるまたぐ軽量スレッド
(see http://wiki.python.org/moin/ParallelProcessing)
・ Hot-swappable code
#ナニモノ?
・パターンマッチング
(see PyLinda, CTypes, Candygram)


vs Icon and Tcl

Iconとは

・高水準な言語
・インタプリタ型
・バイトコードを使っている
・手続き型
・テキスト処理が得意
・アリゾナ大学で開発された

Why Do Pythonistas Care?
なぜPythonista達が注目するのか?

・ジェネレータをもらってきた元である
・Iconではyieldの代わりにsuspendを使っている
・実装に関する良い書籍がある
・Tim Petersがこの言語を愛している


Iconプログラムのサンプル

procedure main(args)
  writes("Hello, ")
  # Default.
  name := "World”
  # Try to get the first name.
  name := get(args)
  # If get'ing list fails, default is used.
  writes(name)

Iconに欠けているもの

・規模の大きな標準ライブラリ
・活発なコミュニティ
・手続き型パラダイム以外の何か
・UniconというOOPバージョンがある

Tcl

・テキスト操作をする言語
・Tkのためのもの(?)
・手続き型
・極端なインタプリタ型(VERY interpreted)
・どこでも使える

Cool Features
イカシた機能

・すべてが文字列である
・コードでさえも!
・非常に単純かつ一貫性のある構文
・すべては評価された文字列のようなもの

How Python Is Better


・ Tc.s syntax can be annoying.
Tclの構文にはいらいらするかもしれない
・ E.g., } else { only way to continue a command.
・ EVERYTHING being a string makes it slow.
すべてが文字列なので遅い

vs Ruby

Like Python, Ruby is a dynamically typed object
oriented language
Ruby is a bit more “pure” in its object orientation
(instance variables are not available outside of the
class)
Ruby’s syntax incorporates a mix of ideas from
Smalltalk, Lisp and Perl.


(Arguably) Nice Ruby Syntax
(議論の余地があるかもしれない)ナイスなRubyの構文

Implicit “self”
query_methods? - boolean by convention
danger_methods! - destructive in some way
map/filter/reduce chaining
irb> names = ["abcd", "efgh", "ijklm", "nopq", "stu", "vwx", "yz"]
=> ["abcd", "efgh", "ijklm", "nopq", "stu", "vwx", "yz"]

暗黙の“self”
?が末尾についた問い合わせメソッド - 規約により真偽値を返す
!が末尾についた危険なメソッド - なんらかの破壊的操作を行う
map/filter/reduce の連鎖


Map/filter/reduce chaining

> names = ["abcd", "efgh", "ijklm", "nopq", "stu", "vwx", "yz"]
=> ["abcd", "efgh", "ijklm", "nopq", "stu", "vwx", "yz"]

> names.find_all{|name| name.length>3}.map{|name| name.reverse}.inject({}){|hash, item| hash[item] = item.size; hash}
=> {"qpon"=>4, "mlkji"=>, "hgfe"=>4, "dcba"=>4}


What is a block?
ブロックとは何か?


A block is an anonymous function that closes over the surrounding variable state

ブロックとは、その外側にある変数の状態を包み込んだ名前のない関数(anonymous function)
である

implicitly returns its value passed to a method with special syntax

特殊な構文を有するメソッドに暗黙のうちに値を返す

Blocks in Ruby are kind of like...

Rubyにおけるブロックとはこんな感じのもの…

Lambda functions (except Ruby has a broken lambda too)
lambda関数(ただしRubyにはぶっ壊れたlambdaもある)
Functions as arguments to methods (except you can only have one per method)
メソッドに対する引数としての関数(ただしメソッド一つに対して一つしか渡せない)
Python 2.5 “with” statement and context_manager (except they can iterate)
Python 2.5 の“with”文とコンテキストマネージャ (ただしブロックは iterateできる)
Generators (except sort of reversed)
ジェネレータ (reveresd の類を除く)


Simple blocks versus lambda
単純なブロックと、lambadとの比較

Simple Ruby example:
names.find_all{|name| name.length>3}
Simple Python example with lambda:
names.find_all(lambda name: name.length > 3)

Ruby: bigger block

puts names.find_all{ |name|
   if name[0..0]=="a"
      length = count_whitespace(name)
   elsif name[-1..-1]=="b"
      length = count_control_chars(name)
   else
      length = count_vowels(name)
   end
   length>3
}


Python multiple lambda


myfunc(lambda x: x.dosomething(), lambda y: do_something(y))


Ugly Rubyisms
いただけないRubyイズム

Three ways to do everything
Massive class and method namespaces
“import *” by default
Global namespace for classes and “top-level”methods
....and many more...

何をやるにも三通りのやり方がある
規模の大きい(massive)クラスとメソッドの名前空間
デフォルトで "import *" の状態
クラスと“トップレベル”のメソッドに対するグローバルな名前空間と
他にもいろいろ…

■_ Python 3.0 alpha 2 Released!

パパのお言葉。 Python 3.0 alpha 2 Released!

This is just a quick post to let everyone know that Python 3.0a2 is released as of 
10:30am PST (18:30 UTC) today (Friday December 7, 2007).

I'm grateful to the many people who have contributed to this release, in particular 
new core developers Christian Heimes and Amaury Forgeot d'Arc.

I wish I could list the many things that are new since 3.0a1 was released on August 31, 
but there are already many places where you can read up on that, so I'll skip this now.

8月31日にリリースした 3.0a1からの数多くのことがらをリストアップしたいのですが
それはすでにいろいろなところで目にすることができるので、改めてわたしがここで
することはありません。

However, I do want to mention that based upon the feedback for 3.0a1, we've decided to 
make the 'bytes' type immutable, and create a separate mutable bytes type, 'bytearray'. 
These two types are mutually compatible, but in the majority of cases you'll be using 
bytes, not bytearray.

しかしここで、3.0aに対するフィードバックに基づいたものに言及したいと思います。
わたしたちは、'bytes’を変更不可能なものとし、変更可能なbyteの型である 'bytearray'
を別個に作ることにしました。
これら二つの型は互換性のあるものですが、通常は bytearray ではなく byteのほうを
使うことになるでしょう。

I should also note that we've run into an issue with the Windows installers -- see the 
release page above. If anyone can help this, please write to python-dev at python.org. 
(The script that creates the installer is in the distribution as Tools/msi/msi.py.)

ここでわたしは、わたしたちがWindowsのインストーラに関する問題に直面している
ことを書きとめておかなければなりません。詳しくはリリースページを参照してください。
もしこのことに協力できることがあれば、どうぞ python-dev at python.org
で発言してください(インストーラーを生成するスクリプトは Tools/msi/msi.pyに
あります)。

And finally, a word of thanks to all the GHOP contestants who contributed 
documentation updates, and to Georg Brandl for collecting these and submitting them to 
Subversion. There are still many more tasks available!

■_ 今日のRuby trunk

なんかダメすぎ。 あと二週間ちょっとの時期にこれでいいのかとても不安。

nmake すると ext/pty で引っかかるのでとりあえずディレクトリごと削除
(先週の時点では何の問題もなかったのに?)。


Microsoft(R) Program Maintenance Utility Version 7.10.3077
Copyright (C) Microsoft Corporation.  All rights reserved.

        rc -I. -I.  -I./../win32 -r -fomsvcr71-ruby19.res msvcr71-ruby19.rc
 dmyext.obj
        cl -nologo -LD main.obj dmyext.obj msvcr71-ruby19-static.lib  msvcr71-ru
by19.res oldnames.lib user32.lib advapi32.lib shell32.lib ws2_32.lib  -Femsvcr71-ruby19.dll -link -incremental:no -debug -opt:ref -opt:icf   -def:msvcr71-ruby19.def
   ライブラリ msvcr71-ruby19.lib とオブジェクト msvcr71-ruby19.exp を作成中
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "DllMain@12" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_Sleep@4" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_Sleep@4" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_accept@12" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_accept@12" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_bind@12" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_bind@12" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_connect@12" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_connect@12" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_gethostbyaddr@12" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_gethostbyaddr@12" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_gethostbyname@4" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_gethostbyname@4" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_gethostname@8" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_gethostname@8" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_getpeername@12" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_getpeername@12" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_getprotobyname@4" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_getprotobyname@4" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_getprotobynumber@4" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_getprotobynumber@4" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_getservbyname@8" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_getservbyname@8" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_getservbyport@8" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_getservbyport@8" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_getsockname@12" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_getsockname@12" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_getsockopt@20" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_getsockopt@20" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_ioctlsocket@12" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_ioctlsocket@12" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_listen@8" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_listen@8" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_recv@16" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_recv@16" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_recvfrom@24" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_recvfrom@24" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_select@20" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_select@20" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_send@16" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_send@16" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_sendto@24" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_sendto@24" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_setsockopt@20" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_setsockopt@20" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_shutdown@8" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_shutdown@8" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_socket@12" は未解決です。
msvcr71-ruby19.exp : error LNK2001: 外部シンボル "rb_w32_socket@12" は未解決です。
msvcr71-ruby19.dll : fatal error LNK1120: 外部参照 25 が未解決です。
NMAKE : fatal error U1077: 'cl' : リターン コード '0x2'
Stop.
NMAKE : fatal error U1077: '.\miniruby.exe' : リターン コード '0x2'
Stop.

調べてみると、msvcr71-ruby19.def ファイルに書き出しているシンボル名の一部で微妙に 違っているのが原因のようだが、プログラムを追いかけている余裕がないので とりあえず手作業で msvcr71-ruby19.def ファイルを修正して続行。

E:\ruby-src\ruby-trunk-20071210\win32>nmake install

Microsoft(R) Program Maintenance Utility Version 7.10.3077
Copyright (C) Microsoft Corporation.  All rights reserved.

        .\miniruby.exe  ./../instruby.rb --dest-dir=""  --extout=".ext"  --make="nmake"  --mflags=""  --make-flags="                  " --installed-list .instal
led.list --mantype=""
E:/ruby-src/ruby-trunk-20071210/lib/delegate.rb:279:in `each': invalid identifier !~ (NameError)
        from E:/ruby-src/ruby-trunk-20071210/lib/delegate.rb:279:in `DelegateClass'
        from E:/ruby-src/ruby-trunk-20071210/lib/tempfile.rb:13:in `<top (required)>'
        from ./../instruby.rb:12:in `require'
        from ./../instruby.rb:12:in `<main>'
NMAKE : fatal error U1077: '.\miniruby.exe' : リターン コード '0x1'
Stop.

ささださんがMLで言ってたあの変更に関係してたりする? ○| ̄|_

Java Expert #2

巻頭にゴスリングのインタビュー記事が載っていたので買ってみた。 第二特集がJRubyだってのもあったけど。 インタビューの最後の部分を引用。

日本の開発者に向けて
・楽しくないことやめる
「私の理念の一つに“楽しくないことはやめてしまう”というのがあります。楽しくも
ないことを続けるのは難しいからです。それがたとえ仕事だったとしても。
だから、ソフトウェア開発を仕事にしている方やこれから仕事にしていきたい方には、
ぜひコードを書いてモノを動かすことの楽しさを感じてもらいたいです。
“楽しさ”は非常に大きなモチベーションになることを忘れないでください」

・学ぶ姿勢を大切に
「楽しさが重要とは言っても、勉強することが苦手な人はこの業界には難しいと思います。
なぜなら、ソフトウェア開発のようにIT業界は一年先の動きが見えづらいからです。だから
こそ、つねに勉強する姿勢が大切です」

いろいろ

from reddit/PLNews

すみません、すみません

from バカ征く

http://www.jitu.org/~tko/cgi-bin/bakagaiku.rb?bakaid=200712091

でも、ほんとコードに無神経なヤツが多いな。

前にも書いたことあるけど、returnの行の前に必ず空行
入れるバカとかな。それに何の意味があるの? 空行と
いえども意味がなけりゃノイズなだけだろ。
  

必ず、ではないですが基本的に return ほげほげ; の行の前は 空行を入れることが多いです。ただし言語にもよりますが。 あと大体において、

int
関数名(引数リスト)
{
   変数の宣言部
   空行
   処理いろいろ
   ...

   return ほげほげ
}

な感じになります。関数の処理の最初でパラメータチェックするときは空行つけずに if のチェックを並べて

   if (invalid(ふが)) {
       ....
       return エラーコード
   }
   if (invalid(ふが)) {
       ....
       return エラーコード
   }

   /* 処理本体の開始 */

な感じですかね。if じゃなくて else if のときももちろんあります。

空行でひどいのになると:

doit();

dothat();

dothis();

なんて、1行おきに空行入れるバカ。だから、その空行に
何の意味があるっていうんだよ。読む人間のこと考えて
んのか? 気分だけで空行を入れるんじゃない。空行にも
意味を持たせろっつーの。

つーか、空行なんか、コメントといっしょで、ないに
越したことねぇんだから。
  
あと、カッコの内側にスペース入れるバカな。

doit( var );

とか。職業プログラマとして恥ずかしくないのかね。
カッコなんてスペースみたいなもんで、そんなもんを
わずらわしいと思ってるようじゃ修行が足んねぇって
ことだろ?
  

さすがにここまではやりません(^^; が、論理的な単位ごとに空行あけると良いよというのは Kernighan 大先生がどこかで書いていたように記憶しています。 どこだったろう?

って勘違いだったら大恥だなw

おまけ

Pythonのお勉強 Part22 

113 デフォルトの名無しさん [sage] Date:2007/12/10(月) 06:25:24  ID: Be:
    Python を誰かに教えるとしたら、
    どういう順番で教えるのがいいかな? 

114 デフォルトの名無しさん [sage] Date:2007/12/10(月) 06:51:25  ID: Be:
    チュートリアルの最初の方コピペ 

115 デフォルトの名無しさん [sage] Date:2007/12/10(月) 09:56:13  ID: Be:
    >>113
    なにはともあれ。
    「初めてのPython」と「はじめてのPython」の違いについて教えた方がいい。 

116 デフォルトの名無しさん [sage] Date:2007/12/10(月) 10:10:42  ID: Be:
    >>113
    全くプログラミング経験が無い相手なら『Pythonで学ぶプログラム作法』一択
    プログラミング経験がある相手なら「チュートリアル読め」で以上 

117 デフォルトの名無しさん [sage] Date:2007/12/10(月) 11:09:59  ID: Be:
    俺も >116 に一票 

本当に、何であんな書名にしたんですかねえ >「はじめてのPython」 (ひらがなの方)

2007年12月09日

柔軟?

【関数】Erlang【エリクソン】
http://pc11.2ch.net/test/read.cgi/tech/1176479959/290-

290 デフォルトの名無しさん [sage] Date:2007/12/08(土) 23:56:28  ID: Be:
    日本語が読めない人が読むコードのコメントに日本語で書くやつはバカ
    英語が不自由な人が読むコードのコメントに英語で書くやつはバカ 

291 デフォルトの名無しさん [sage] Date:2007/12/09(日) 00:55:22  ID: Be:
    >>290
    割と柔軟だなw"

柔軟かどうかはともかく、290のいうことには一理あるなw

今日の驚愕

無料で協力してくれる共同開発者の募集の仕方 -OKWave-

C 言語暦 10 年のプログラマです。
お金をできるだけかけずに(できれば無料で),
PHP でソフトウェアを開発したい案件があります。
簡単な PHP プログラムなら書けます。
自分でコーディングする以外に,
共同開発者を募る方法はありますでしょうか。
報酬はプログラム完成後に収益があった場合にのみ分配したいと考えています。

自分がそういう話を持ちかけられたとして、果たして参加するか あるいはどういう条件が満たされれば参加するかとか考えたことはないんだろうか?

ちまちまと

ごにょごにょ中。今日はあまり進まなかったけど、

The Future

Well, so what's the future of scripting?

In my completely unbiased opinion, that would be Perl 6. :-)
  

という部分を見つけて大笑いw これ、日本語に訳すのは大変だなあ(構文的に難しいという意味ではなく)。

from reddit

1.9 vs 1.8

Ruby1.9で遅くなる項目 - usagidropの日記 Ruby 1.8 vs. 1.9 Benchmarks

ささださんのコメントがついてますが。

ベンチマーク結果を見ると、Ruby1.8と比べてRuby1.9は全般的に高速化されていることが分かる。
しかしすべての項目で高速化されているわけではなく、以下のベンチマークでは逆に遅くなって
いる。

    * app_raise (+21%)
    * io_file_create (+13%)
    * io_file_read (+38%)
    * so_count_words (Ruby 1.9 too slow (> 8x))
    * so_pidigits (+15%)
    * so_reverse_complement (+44%)
    * vm2_mutex (+16%)
    * vm2_regexp (+37%)
    * vm3_thread_create_join (Ruby 1.9 too slow (> 8x))
    * lib_coderay (+6%)
    * interpreter_start (+118%)
    * interpreter_require (+67%)


これをふまえて、Ruby1.9の特徴を考えてみた。

(略)

    * vm2_regexp (+37%) により、正規表現が遅くなっていることが分かる。Ruby1.9では正規
      表現エンジンが新しくなって機能が強化されているかわりに、スピードが犠牲になってい
      るのだろう。個人的には、正規表現の機能は現状でも十分なので、スピードを落とすこと
      は止めてほしかった。

ここにちょっと疑問。 鬼車そのもに関しては、小迫さんが結構速度性能を気にして 折に触れて調査をしていて、はてな日記に何回か測定結果を書いていたと思う。 まあ対象が PCREだったりすることもあったけど、 そんなに遅くなるような結果が出てたかなあ? とはいえこのベンチマークもそれなりに説得力のあるもののようなので、 どのような検査をしてこの結果になったのかということは調査しても良いかもしれない。

正規表現の機能云々についてだけど、 従来のエンジンを使う限りは戻り読みを実装することは(多分)不可能なのと、 ライセンス的な問題でエンジンを変えることは大前提だった (だからこそ鬼車が開発されたともいえる)のでにんともかんとも。

今日の驚愕その2

Windowsで作った *.cgi ファイルを Linuxで動かすには(もう一度) -OKWave

現在は、Windows XPコンピュータ、Apache, activePerl で、やっていますが、
「*.cgi ファイルをWindows で作成, Webサーバは SuseLinux 10.01 OSS」
としたいのです。 Windows での作業に少しは慣れてきましたので、・・・。しかし、
Windows は、お金がかかりますので・・・。
よろしく、お願いいたします。

ANo.1

とりあえず、Apacheのログをご覧になったらどうでしょうか?
もうちょっと詳しいエラーの原因が出ていると思いますよ。

または、コマンドラインから0001Windows.cgiを実行してみるとか。
perl ./0001Windows.cgi

パーミッションの設定漏れなんて初歩的な原因ってことも考えられますよ。

この回答へのお礼
まことにありがとうございました。約3ヶ月間困っていたことが解決しました。takbee さんの
「パーミッション」の一言で救われました。Read と Execute にチェックをいれたら、できま
した。次は「日本語文字の文字化け」でピンチになりました。エンコード というのが 最初 
強制的に  ISO になってしまい困りました。
しかし、 print header(-charset => 'EUC-JP'); で解決しました。
takbee さん、救いの一言、ありがとうございました。

これにだけに専念してたってわけじゃあないんだろうけど、 三ヶ月困ってたって一体その間 ナニをやっていたのだよ… 人件費で考えたら、OSその他の料金なんて屁みたいなもんになるんじゃないのか?(^^;

2007年12月08日

アルゴリズム

ああ、この方面のアルゴリズムを失念していました。 なつたん: 好きなアルゴリズム

線形補完のアルゴリズム
y = 3/5 x のような直線を書くとき、順に3を足していって5を超えたところでyを1増やすと良い感じで直線が書ける。
足すのに使う変数をアキュムレータのaとして、5を超えるとオーバーフローして、超えた分だけの値を保持する。

x y a
0 0 0 aに3を足す
1 0 3 次にaに3を足すと6になってオーバーフローするので、yを1増やし、aは6-5で1になる。
2 1 1 aに3を足す
3 1 4 次にaに3を足すと7になってオーバーフローするので、yを1増やし、aは7-5で2になる
4 2 2 次にaに3を足すと5になってオーバーフローするので、yを1増やし、aは5-5で0になる
5 3 0 以下繰り返し
6 3 3
7 4 1
割り算しなくても、加算器+レジスタで直線が引ける不思議。
  

そうそう。グラフィック画面に斜めの直線をきれいに描画するって意外に難しいんですよね。 実際にやらせてみると、たいていの人はがたがたな線になってしまったり、 ところどころドットが跳んだり。 まあこれもロストテクノロジーなんですかねえ(de-culture (笑))

アルゴリズム大募集! C&R研究所 - コンテンツ募集 にもこの方面のアルゴリズムは挙げられてないかな?

py3k α2

jijixiさんが早速チェック入れているが、α2がリリースされた模様。 programming: Python 3000 Alpha 2 Is OutPython 3.0a2 Release んで、Windowsな方々は

Caveats for Windows Users

Read this first!

The MSI installers for Python 3.0a2 are compiled with the new Visual Studio 2008 
Professional version. Therefore Python depends on the Visual C++ runtime library 9.0. 
The runtime library must be installed prior to the installation of Python 3.0a2. 
Future releases of Python will automate this step.
  

というようにコンパイラが変更されているので要注意。 そういや Ruby 1.9.1はどうすんでしょう? VC++ 6のまま? ruby-core でも質問が出てたような (VC++6じゃあ拡張ライブラリ作る人が大変(もう手に入らないから)とか)。 まあ自分は基本的に自前でコンパイルしたのを使うので関係ないといえば関係ないのですが。

…つか、Perlのstrawberry(違ったかも)じゃないけど、 OpenWatcom あたりのコンパイラ指定にしちゃうとかしたほうがいいかも。 ってライセンスとかライブラリの実装状況調べとかないといけないな。 Main Page - Open Watcom Download - Open Watcom ぱっと見だけどライセンス (Open Watcom Public License - Open Watcom) も問題になるようなことはなさそう。

view のはなし

Pythonの話題が出てきたところで。

いろいろ情報を集めたところで、jijixiさんのところにコメントがついていたり jijixiさんも新しくエントリでまとめてたりするが 絶望はしない :)

PEP 3106 はまあすぐに見つかったんですが、 できれば views という名前にした経緯なんかが見つかればなあと いろいろ探してました。この views って、 少なくともハッシュとか二分木のようなメジャーなデータ構造じゃないですよね。

Dictionary .keys() and .values() should return a set [with Python 3000 in mind]
http://coding.derkeiler.com/Archive/Python/comp.lang.python/2006-07/msg00080.html

Re: Dictionary .keys() and .values() should return a set [with Python 3000 in mind]
http://coding.derkeiler.com/Archive/Python/comp.lang.python/2006-07/msg00130.html

Re: Dictionary .keys() and .values() should return a set [with Python 3000 in mind]
http://coding.derkeiler.com/Archive/Python/comp.lang.python/2006-07/msg00141.html


Re: Dictionary .keys() and .values() should return a set [with Python3000 in mind]
http://coding.derkeiler.com/Archive/Python/comp.lang.python/2006-07/msg00160.html

    * From: "Terry Reedy" 
    * Date: Sun, 2 Jul 2006 16:14:15 -0400

The meaning of dict.keys, etc, will not change for the 2.x series. For
3.0, I believe that Guido already intends that .keys() no longer return a
separate list. For one thing, a major, if not the main use, of the method
is for iteration, as in 'for keys in d.keys():'. For this, creating and
them discarding a separate list is inefficient and, in a sense, silly.

One option is to make .keys be what .iterkeys is today. Another, more
recent, is to make .keys return a new iterable dict view object, details
not yet worked out. Either way, one would make an independent set or list
with set(d.keys()) or list(d.keys)).

Terry Jan Reedy

とまあこの辺はすでに述べられていることなのでよしと。

[Python-3000-checkins] r58255 - python/branches/py3k/Objects/memoryobject.c
http://mail.python.org/pipermail/python-3000-checkins/2007-September/002075.html

python/branches/py3k/Modules/_ctypes/_ctypes.c .... Returns a new reference to a Memory
view object. If no copy is needed, - the memory view object points to the original
memory and ...

[Zopyrus] [Python-3000] PEP Draft: Enhancing the buffer protcol (fwd)
http://zopyrus.itconnection.ru/pipermail/zopyrus/2007-February/085293.html

Re: [Python-Dev] PEP 3118: Extended buffer protocol (new version)
http://www.mail-archive.com/python-dev@python.org/msg22378.html

After suggestions by Greg, I like the idea of the PyMemoryViewObject 
holding a pointer to another object (from which it gets memory on 
request) as well as information about a slice of that memory. 

Thus, the memory view object is something like:

typedef struct {
      PyObject_HEAD
      PyObject *base;     
      int ndims;
      Py_ssize_t *offsets;    /* slice starts */
      Py_ssize_t *lengths;   /* slice stops */
      Py_ssize_t *skips;       /* slice steps */
} PyMemoryViewObject;

It is more convenient to store any slicing information (so a memory view 
object could store an arbitrary slice of another object) as offsets, 
lengths, and skips which can be used to adjust the memory buffer 
returned by base.

PEP 3118 -- Revising the buffer protocol
http://www.python.org/dev/peps/pep-3118/

ということで結構大掛かりな仕様変更のようです。 が、なんで view object という名前なのかの謎は解けず。

OpenWatcom C/C++ Compiler

一応C99準拠らしいがライブラリのサポート状況とかを調べてみる。

C99 Compliance - Open Watcom

C99 Compliance
From Open Watcom
Jump to: navigation, search

There is an ongoing effort to improve compliance with the ISO/IEC 9899:1999 standard, 
also known as C99.

Watcom C/C++ version 11.0 already included a number of extensions that were later 
standardized in C99. That included:

    * C++ style comments
    * Non-constant initializers for local aggregrates or unions (-aa mode only)
    * Commas after last element in enumerator or initializer list 

After the Watcom tools were open sourced, many improvements have been made by contributors:

    * Variable argument macros (version 1.2, by JimB)
    * 64-bit long long integers, based on existing __int64 support (version 1.2, by BartO)
    * The __func__ identifier (version 1.2, by MichalN)
    * The inline keyword, based on existing __inline support (version 1.3, by BartO)
    * Improved wide char literal support (version 1.3, by BartO)
    * Runtime library functions dealing with long long objects (version 1.3, by BartO and MichalN)
    * Designated initializers (version 1.4, by BartO)
    * Support for restrict keyword (version 1.3, by JimS; -za99 mode only)
    * Partial support for _Bool, _Complex, _Imaginary keywords (version 1.3, by JimS; -za99 mode only)
    * Wide character memory manipulation routines, ie. wmemcpy() and friends (version 1.4, by MichalN)
    * Declarations in for loops and anywhere in compound statements (version 1.5, by MichalN)
    * Numerous updates to C library and headers (ongoing work by BartO, JiriM, MichalN, PeterC, and others) 


When and if other C99 features will be added depends purely on how much effort 
contributors want to invest. Some features are fairly esoteric and there appears to be 
little or no demand for them (eg. complex math). The features most likely to be 
implemented are the ones that add new functionality that cannot be achieved through 
other means (eg. hex floating-point constants).

Detailed table:
からざっと目に付くところを抜き出し。

variable length arrays 	- 	


universal character names (\u and \U) 	- 	

compound literals 	- 	

extended integer types and library functions in <inttypes.h> and <stdint.h> 	1.3-1.5 	

__func__ predefined identifier 	1.2 	
va_copy macro 	1.3 	
additional strftime conversion specifiers 	1.6 	

  

んー可変長配列がない? あ、compound literals もないな。

Excel2007表示バグ

ようやっとまとめができました。 ってほとんどもとの文章の翻訳に手間取っていただけなんですが。 結果はこちら→ Excel 2007における数値の表示バグのまとめ

ひとことでいうと、「16ビットコードのわな」ですか。 見た感じCコンパイラが生成したコードじゃなくて、 人がアセンブリ言語で書いたルーチンに(多分高速化しようとして)手を入れて その結果バグった。というところでしょうか。 この修正をした人もこんな結果になるとは思わなかっただろうなあ(笑)

逆アセンブラを駆使して詳細なレポートをしてくれた Chris Lomont に改めて賞賛の拍手を。

from reddit

redditに訊け: これは読んでおけという本を教えてください

programming: Ask programming.reddit: Must-read programming books? ざっと抜き出してみました。 重複は取り除いたつもりですが、まだ残っているかも知れません。

  • 具体的な書名ではなくシリーズタイトルを挙げたのもいくつか
  • で書名のリスト。順不同(大体ページに登場した順です。 TAPLの正式名称って何だっけ? Type ほげほげ Programming Lanuguage? あまりにも面倒なのでアサマシリンクを張る気にもなりませんw

    翻訳版でもいいのなら、結構読んでるのがあるなあ。

    興味深い流れだw

    推薦図書/必読書のためのスレッド 37
    http://pc11.2ch.net/test/read.cgi/tech/1190192944/767-
    
    767 デフォルトの名無しさん [sage] Date:2007/12/08(土) 09:26:43  ID: Be:
        今あえてCのみをがっつり勉強する意味ってあるんかいな? 
    
    768 デフォルトの名無しさん [sage] Date:2007/12/08(土) 09:34:34  ID: Be:
        >>767
        Cは組み込み関係で奴隷が必要だから
        必要っていうくだらない理由以外で
        必要とされていない言語
    
        絶対覚えない方がいい 
    
    769 デフォルトの名無しさん [sage] Date:2007/12/08(土) 09:38:51  ID: Be:
        冗談にしては笑えん 
    
    770 デフォルトの名無しさん [sage] Date:2007/12/08(土) 09:55:19  ID: Be:
        うーん、ハードとやり合うような人たち以外はほとんど使う機会ないよね
        もちろん知っとくのは悪くないけど、K&Rみたいのでがっつりやる意味はないと思うんだ 
    
    771 デフォルトの名無しさん [sage] Date:2007/12/08(土) 10:03:44  ID: Be:
        直接使う機会は無いが、知っておいたほうがいい知識もあるんだよ 
    
    772 デフォルトの名無しさん [sage] Date:2007/12/08(土) 10:22:47  ID: Be:
        そりゃ知識はあればあるだけいいだろうけど、優先度としては決して高くない 
    
    773 デフォルトの名無しさん [sage] Date:2007/12/08(土) 10:24:43  ID: Be:
        スレ違いです。
        馬鹿はマ板に行ってください。 
    
    774 デフォルトの名無しさん [sage] Date:2007/12/08(土) 10:26:20  ID: Be:
        人が書いたコード読んだりしないのかな?
        Cのコードサンプルは多いと思うよ
        書籍の中でも使われてるし 
    
    775 デフォルトの名無しさん [sage] Date:2007/12/08(土) 10:33:04  ID: Be:
        とりあえず、K&Rも読んでねーのプギャー
        とか言う輩は消滅して頂きたい 
    
    776 デフォルトの名無しさん [sage] Date:2007/12/08(土) 10:49:06  ID: Be:
        K&Rの演習が解けるレベルなら読む必要ないだろうな 
    
    777 デフォルトの名無しさん [sage] Date:2007/12/08(土) 11:00:46  ID: Be:
        C++をやりたいならまずCからやるべき、とかいう有害な情報を流す輩は無視したほうがいい 
    
    778 デフォルトの名無しさん [sage] Date:2007/12/08(土) 11:14:16  ID: Be:
        Cは危険な言語だって
        某独法様も仰られているわけで 
    
    779 デフォルトの名無しさん [sage] Date:2007/12/08(土) 11:44:24  ID: Be:
        だって難しいんだもん
        でも大学とかだといきなりCを教えてたりするな 
    
    780 デフォルトの名無しさん [sage] Date:2007/12/08(土) 11:48:03  ID: Be:
        本の話をやれ 
    
    781 デフォルトの名無しさん [sage] Date:2007/12/08(土) 12:02:29  ID: Be:
        あれか?
        「大人になって使うことなんて一切ないから、数学なんて勉強しなくてもいい!」
        って、考えるヤツらがプログラマやってる、ってことか? 
    
    782 デフォルトの名無しさん [sage] Date:2007/12/08(土) 12:09:36  ID: Be:
        買ってきた 
    
    783 デフォルトの名無しさん [sage] Date:2007/12/08(土) 12:10:08  ID: Be:
        ゆとり厨ばっか 
    
    784 デフォルトの名無しさん [sage] Date:2007/12/08(土) 12:17:13  ID: Be:
        >>783
        はいはい、ゆとりゆとり。 
    
    785 デフォルトの名無しさん [sage] Date:2007/12/08(土) 12:55:26  ID: Be:
        >>777
        C++ の C 的な部分からやれば別に C からやる必要も無いし、
        参照とかあるから C より覚えやすいと思うよな。 
    
    786 デフォルトの名無しさん [sage] Date:2007/12/08(土) 13:03:54  ID: Be:
        >>785
        C++の参照は参照で、また話をヤヤコしくしてるけどな 
    
    787 デフォルトの名無しさん [sage] Date:2007/12/08(土) 13:04:38  ID: Be:
        こばけんはどうなの 
    
    788 デフォルトの名無しさん [sage] Date:2007/12/08(土) 14:27:30  ID: Be:
        たしかにCが糞なのは同意するが、
        C++の解説はほとんどがCの知識を前提としてるから、結局Cからやるのが一番の近道。
        俺はC++から勉強したんだが、どこまでがCの機能でどこ以上がC++の機能なんかわからんかった。
        あと、突然typedefとか出てきても、Cの下積みがないから混乱したりとか、ろくなことなかったよ。 
    
    789 デフォルトの名無しさん [sage] Date:2007/12/08(土) 14:29:41  ID: Be:
        こげぱん? 
    
    790 デフォルトの名無しさん [sage] Date:2007/12/08(土) 14:35:50  ID: Be:
        c#でおすすめの入門書はありますか? 
    
    791 デフォルトの名無しさん [sage] Date:2007/12/08(土) 14:58:01  ID: Be:
        >>790
        ほかの言語やったことあるなら、@itの改訂版C#入門で十分。後は手元で引くためにオライリー本が一冊あれば便利。
        プログラミング自体が初めてなら、C#の入門書は少ないと思うよ。 
    
    792 デフォルトの名無しさん [sage] Date:2007/12/08(土) 15:18:05  ID: Be:
        >>791
        ありがとうございます。@it読んでみます。
    
    793 デフォルトの名無しさん [sage] Date:2007/12/08(土) 15:25:37  ID: Be:
        >>788
        後悔してるんかい?分からなかったらその時に知ればいいんでは? 
    
    794 デフォルトの名無しさん [sage] Date:2007/12/08(土) 15:50:21  ID: Be:
        >>790
        VBやってたなら
        VBプログラマのためのC#入門ってのもおすすめ
        ただしこれ一冊でどうにかなるってんじゃなくて
        あくまでほかの本を読むための下準備的なものだと思ってもらいたい
        >>791同様、@itの改訂版C#入門をお勧めするが
        実は@itのHPにほとんどの内容がのってるので
        金かけたくなければそちらで勉強してもいいかもね 
    
    795 デフォルトの名無しさん [sage] Date:2007/12/08(土) 16:06:01  ID: Be:
        Java:原付自転車
        C++:オートマ車
        C:マニュアル車 
    
    796 デフォルトの名無しさん [sage] Date:2007/12/08(土) 16:25:25  ID: Be:
        >>793
        今思えばもちろんそうすべきだったんだろうけど、満足に検索もできない初心者の時にはそれも難しかった。
        それなら、最初から全部わからないことが前提のC本読んだら良かった、と確かに後悔したね。
        まあそれでも、C++は俺の一番好きな言語だけど。 
    
    797 デフォルトの名無しさん [sage] Date:2007/12/08(土) 16:55:51  ID: Be:
        >>794
        どうもです
        一応delphiをやっていたので大丈夫だと思います。
        金よりも時間を重視したいので@itがひととおり読み終わったらオライリーを買ってみようと思います 
    
    798 デフォルトの名無しさん [sage] Date:2007/12/08(土) 18:18:27  ID: Be:
        Java: 世界初の*実用的*OOP言語。弱点はGUIだが、ブラウザがあれば
        GUIなんていらない時代になったので王者に。
    
        C++: CにOOPLのパラダイムを盛りこんだキメラ。
        工業用なので顧客の要望をなんでもほいほい入れたらこうなった。
           最近は関数型が加わってますます化け物に。
    
        C: 高級アセンブリ。読みながらそのまま機械語に変換できるのが強み。 
    
    799 デフォルトの名無しさん [sage] Date:2007/12/08(土) 18:55:37  ID: Be:
        >>798
        C#についての評価もお願いします。 
    
    800 デフォルトの名無しさん [sage] Date:2007/12/08(土) 19:04:06  ID: Be:
        明解JAVA入門の目次には例外が載ってないんですが
        例外についての解説は無いんですか?
        入門レベルでは必要ない? 
    
    801 デフォルトの名無しさん [sage] Date:2007/12/08(土) 19:35:07  ID: Be:
        >C: 高級アセンブリ。読みながらそのまま機械語に変換できるのが強み。
    
        ねーよw
    
    802 デフォルトの名無しさん [sage] Date:2007/12/08(土) 20:22:48  ID: Be:
        >>798
        Cの解説ワロタw
        C++のキメラ化はプログラム言語の中でも際だってるからな。
        関数型言語をそのまま使える状態でOOPを取り込もうって言うのがすでに無理なんだよ。 
    
    803 デフォルトの名無しさん [sage] Date:2007/12/08(土) 20:47:17  ID: Be:
        >>800
        Javaって例外なげるメソッドがあったらキャッチするなり、うえに通すなりしなきゃならない仕様だろ?
        初心者だからって、スルーできないんじゃないの? 
    
    804 デフォルトの名無しさん [sage] Date:2007/12/08(土) 20:48:37  ID: Be:
        関数型っぽい機能を取り込むってのは、世の中の流れだろ。 
    
    805 デフォルトの名無しさん [sage] Date:2007/12/08(土) 20:55:06  ID: Be:
        >>803
        なるほど。なら解説があるべきですよね。
        何でないんだろ。 
    
    806 デフォルトの名無しさん [sage] Date:2007/12/08(土) 20:55:09  ID: Be:
        C# F#があれば他は不要
        LinuxなんてゴミOSは当然不要 
    
    807 デフォルトの名無しさん [sage] Date:2007/12/08(土) 21:07:50  ID: Be:
        ここは釣り堀ではありません。
    
    

    謎メカUSBハブ

    ふと立ち寄った某コンビニで、例のガンダムくじびきがあったんですよ。 で、あのUSBハブも残ってた。 ということで5000円(10回分)つぎ込んで挑戦してみましたが、 ことごとく外しました○| ̄|_ 湯飲みとか三つも四つもあってもうれしくねー(デザイン違うけどさ)w

    くじの紹介ページ発見。謎メカUSBハブの写真もあります ITmedia +D LifeStyle:「ファースト世代」をくすぐるコンビニくじ GUNDAM.INFO 面白グッズが必ず当たる!「一番くじ機動戦士ガンダム 脱戦士編」特集1

    誰かわたしの代わりにあたりを引いてくれえええw こんなものHUB (一番くじ 機動戦士ガンダム 脱戦士編) - 関心空間

    2007年12月07日

    ■_ しっずっかなこはんのもりのかげから♪

    Erlangで毒電波送信 (リリカル☆Lisp 開発日記)

    数日前、『Lispの歌』という言葉を目にし、一体何なのかと思ったら、
    『かっこうの歌』のことだったんですね。(「かっこう→括弧」という洒落)
    某所でネタとしてLisperが実際に歌った由緒正しきモノだそうです。
    

    (たぶん)同時代に作られたものにFORTRANのうたもあります。

    やっほー FORTRAN らららん♪

    ■_ SP3 (xp)

    Windows XP SP3 RCを試してみた - @IT

    P3を圧縮された350MBの実行可能ファイルからインストールするのは、503GRでは30分かからなかった。
    だがa350nではもっと長くかかり、2 時間弱で終わった。オフィスで古い、遅めのシステムを使って
    いるなら、週末を使ってSP3にアップデートする準備をした方がいい。
    

    伸張したらどれくらいの大きさになって、どのくらいCドライブの容量を喰らってくれるのかが すげー気になるんですが(笑) 大丈夫かなあ、わしのシステム…

    参考: Open Tech Press | Vista:問題点を一括修正 「SP1」の試験版公開へ
    そうか、Vistaもリリースから一年になるのね。

    ■_ Perl6

    どんだけ演算子があるんだッ(笑) → tutorial index / Perl 6

        * ! - logische Verneinung, erzwingt Binärkontext; sekundäre Sigil privater
              Klassenvariablen
        * !! - zweiter Teil des ternären Operators
        * !!! - yadda Operator
        * ! - Synonym für >=
        * != - abgedrehtes Synonym für >
        * != - prüft Ungleichheit im numerischen Kontext, kurz für !==
        * !=:= - prüft negiert auf Binding
        * !== - prüft Ungleichheit im numerischen Kontext, negierte Form
        * !=== - prüft Identität, negierte Form
        * !> - Synonym für <=
        * !>= - Synonym für <
        * !~~ - negierter smartmatch Operator
        * !eq - Synonym für ne
        * !eqv - negierte Form, der dynamischen Eqvivalenz
        * !ge - Synonym für lt
        * !gt - Synonym für le
        * !le - Synonym für gt
        * !lt - Synonym für ge
        * # - leitet Kommentar ein der bis zum Ende der Zeile geht
        * $ - Sigil der Skalare; dereferenziert
        * % - gibt Rest einer Modulo-Division, erzingt numerischen Kontext; Sigil der Hashes
        * & - junctives and, verlangt das alle Bedingungen erfüllt sind; liefert subref
        * && - logisches and, verknüpft Aussagen, beendet Auswertung bei erstem
                       Ausdruck mit unwahrem, leerem Ergebnis und liefert es zurück
        * () - Gruppierung von Werten (Parametern)
        * *** - multipliziert Zahlen und erzwingt numerischen Kontext; kennzeichnet slurpy
                Arrays in Signaturen; sekundäre Sigil globaler Variablen; Synonym für Inf in
                Verbindung mit einem Bereichsoperator (..); kennzeichnet Ende eines Arrays im
                Sliceopertor um auf Indizes relativ vom Ende des Arrays zuzugreifen
        * **** - potenziert Zahlen und erzwingt numerischen Kontext
        * + - addiert Zahlen und erzwingt numerischen Kontext
        * +& - bitweises und, numerischer Kontext
        * ++ - Autoincrement
        * + - link shiften, numerischer Kontext
        * +> - rechts shiften, numerischer Kontext
        * +^ - bitweises xor, numerischer Kontext
        * +| - bitweises oder, numerischer Kontext
        * , - Arrayoperator
        * * subtrahiert Zahlen und erzwingt numerischen Kontext
        * -- - Autodecrement
        * --> - alternativer Syntax um Parameter zu typisieren
        * >* weist Block benannte Parameter zu (pointy block)
        * . - sekundäre Sigil öffentlicher Accessoren (getter/setter)
        * .. - arrayerzeugender Bereichsoperator; im Skalarkontext erstellt es ein
              Bereichsobjekt, siehe smartmatch
        * ... - yadda Operator
        * / - Division, numerischer Kontext
        * // - err Operator, liefert ersten definierten Wert
        * : - konvertiert Dezimalzahl auf andere Basis; pair generation operator
        * :: - Namespacetrenner wie in Perl5
        * ::= - Binding zur Compiletime
        * := - erzeugt Alias auf Variable (Binding)
        * ; - trennt Befehle (Ausdrücke) oder Arrayindizes wie z.B. @a[2;3] statt @a[2]3
        * - kleiner als, numerischer Vergleichsoperator
        * ** - double pointy Syntax um einem Block rw Parameter zuzuweisen
        * < - wendet den Operator links als Hyperoperator auf den Array rechts an
        * <== - linker feed-Operator im append-mode
        * > - circumfixer Operator zum gruppieren mit autoquoting (vormals qw()),
              jedoch interpolierend wie ""
        * = - kleiner gleich, numerischer Vergleichsoperator
        * == - nach links zuweisender feed-Operator
        * ** - numerischer Vergleichsoperator, benutzt Order Klasse
        * ** circumfixer Operator zum gruppieren mit autoquoting (vormals qw())
        * = - infix: Zuweisung; präfix:Zeile aus einem Datenstrom im Skalarkontex.
              Ähnlich wie früher Diamantoperator '<>', siehe
        * =:= - prüft auf Binding
        * == - Gleichheit von Zahlen
        * === - Gleichheit von Inhalt und Typ
        * ==> - nach rechts zuweisender feed-Operator
        * ==>> - feed-Operator, der Werte an vorhande Liste anhängt (append-mode)
        * > - grösser als, numerischer Vergleichsoperator; beendet Gruppierung mit
              autoquoting (vormals qw())
        * >= - grösser gleich, numerischer Vergleichsoperator
        * >> - bindet Operator (rechts) als Hyperoperator an einen Array (links);
        * ? - konvertiert Wert in Binärkontext; kennzeichnet optionale Parameter in Signaturen;
              sekundäre Sigil von konstanten Kompiler-Info-Variablen
        * ?& - and-Verknüpfung, erzwingt Binärkontext
        * ?? !! - ternärer Operator
        * ??? - yadda Operator
        * ?^ - xor-Verknüpfung, erzwingt Binärkontext
        * ?| - or-Verknüpfung, erzwingt Binärkontext
        * @ - Sigil der Arrays
        * @@ - Sigil für Multislice-Kontext
        * [] - circumfixer Operator der eine Arrayreferenz erstellt, wenn er eine Liste
               umschließt; hinter einem Array liefert der Ausdruck einen Teilarray (slice),
              der diejenige Elemente des originalen Arrays enthält, deren Index innerhalb
              der eckigen Klammern steht; umhüllt auch Reduktionsoperatoren
        * \ - Capture Operator, erzeugt Referenz auf folgende Struktur
        * ^ - junctives xor, verlangt das ein Wert der Menge die Bedingung erfüllt; bei
              Bereichsangaben (..) schliesst es Grenzwerte aus. Im Skalarkontext siehe smartmatch,
              im Arraykontext siehe Arrayerzeugende Operatoren; sekundäre Sigil der automatisch
              benannten Parameter eines Blocks
        * ^^ - logisches xor, verknüpft Aussagen, ist nur einer der verknüpften Werte wahr,
               wird dieser zurückgegeben, ansonst liefert er unwahr
        * { } - circumfixer Operator: umschließt Blöcke und erstellt eine coderef oder eine
                Hashref wenn es als hash gekennzeichnet ist oder ein '=>' enthält
        * | - dereferenziert Capture; junctives or, verlangt das eine Bedingung erfüllt ist;
        * || - logisches oder, verknüpft Aussagen, beendet Auswertung bei erstem Ausdruck mit
               wahrem Ergebnis und liefert es zurück
        * ~ - verknüpft Texte und erzwingt String Kontext, Synonym für cat
        * ~& - zeichenweises and, erzwingt String Kontext
        * ~ - zeichenweiser linksshift, erzwingt String Kontext
        * ~> - zeichenweiser rechtsshift, erzwingt String Kontext
        * ~^ - zeichenweises xor, erzwingt String Kontext
        * ~| - zeichenweises or, erzwingt String Kontext
        * ~~ - smartmacht Operator, sucht, ersetzt und prüft (fast) alles
    

    ■_ あろはさーんよばれてるYO!

    871 デフォルトの名無しさん [sage] Date:2007/12/07(金) 07:53:46  ID: Be:
        あーごめんなさい。意味不明だったな。
        xyzzy lisp で xyzzy scheme 作ってもあんまりうれしくない気がする。
        新しく Scheme ベースのエディタ作ったほうがいいんじゃない?
    
    872 デフォルトの名無しさん [sage] Date:2007/12/07(金) 08:35:53  ID: Be:
        >>871
        どっかの院生がgauche+gtkのemacsライクなエディタ作ってなかったっけ?
        挫折したのか最近情報がないけど。 
    

    【入門】Common Lisp その3【質問よろず】

    で、どうなんですか? 本業に忙しくて関わっている暇がない?

    from reddit/PLNews

    いろいろ

    gawk for windows

    ネットワーク部分の拡張が動いてなかった。 たぶんipv6対応のところでしくっているのだと思う。 調査開始。

    2007年12月06日

    本日の購入

    シグルイ HALF-BOX 竜 【期間限定生産】
    シグルイ HALF-BOX 竜 【期間限定生産】
    YURIA2
    YURIA2

    from reddit/PLNews

    まとめを書いている時間がNEEE

    misc

    view

    jijixi's diary - Erlang 5.6 , Common Test 事始め , Haskellなんかだとデバッグがえらい大変なイメージがあるんですが、 OCamlはその辺りはどう..

     [clip][Python] 3.0a1の新機能 (2) (プログラミング日記)
    
    と書いてある、"views" ってなんじゃ?とりあえず『文字列』ではないみたいですが?
    

    SQLの問い合わせのときに出てくる「カーソル」みたいなものじゃないでしょうか? >view

    ちなみにこの本、内容はお薦めなんですが、『anonymous function』の訳語が『匿名関数』にな
    っているのが某一部の方には不評かもしれません :-p
    

    それはいけませんねえ(笑) まあ訳語だけで本の価値が決まるわけでなく、自分は編集者でもなんでもないですから。

    コンパイラのバグ

    http://www.page.sannet.ne.jp/hirasho/diary/diary0712.html#4p2
    
      Visual C++にバグを見つけた。泣く泣く設計を変更する。コンパイルできないのではどうし
      ようもない。gccなら通るのに。
    
    

    コンパイルできる/できないのならまだましで、 なまじしれっとコンパイルするんだけど実は生成したコードがバグってました というほうが怖いと思うんだけどどうでしょうか(一回はまった)。

    Ruby 1.9

    今までこういう質問が出なかったのが不思議といえば不思議。

    ruby-core: 13887
    
    Hi,
    
    I understand this question is a little bit "earlier" before Ruby 1.9.x debut in Dec. 2007.
    
    There will be many big changes in 1.9 release like new VM and M17N based strings. Matz 
    has explained that after 1.9 release the following deliveries will be the version to 
    patch on 1.9 to include people's feedback for 1.9.
    
    However, if we look further through year 2008, is there any other big changes ( like 
    VM or M17N ) for Ruby that are going to happen?
    
    Is there any place I can find the "roadmap" or "release plan" for the evolution of Ruby?
      

    1.9.x の間はさすがにそんなにでかい変更は入れないんじゃないかなあ。 入るとしたら、2.0になるタイミングでしょう(ってのはどこかでまつもとさんも 云っていたような気がする)。 VMとかに匹敵するほどのでかい変更というとキーワード引数とか?

    2007年12月05日

    ■_ from 2ch

    【えっ】Perlに未来はあるのか?【終わり?】
    http://pc11.2ch.net/test/read.cgi/tech/1180713251/181-
    
    181 デフォルトの名無しさん [sage] Date:2007/12/04(火) 14:53:45  ID: Be:
        Perl6が別言語覚えるような手間が必要だとすると、
        RubyでもPerl6でも新しく使おうとするなら、
        たいして差が無いような気もして来るな。 
    
    182 デフォルトの名無しさん [] Date:2007/12/04(火) 18:03:04  ID: Be:
        ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::。:::::::::::::::::::::::::::::::::::::::::::::
        :::::::::::::::::::::::::::::::::。::::::...... ...   --─-  :::::::::::::::::::: ..::::: . ..::::::::
        :::::::::::::::::...... ....:::::::゜::::::::::..   (___ )(___ ) ::::。::::::::::::::::: ゜.::::::::::::
        :. .:::::。:::........ . .::::::::::::::::: _ i/ = =ヽi :::::::::::::。::::::::::: . . . ..::::
        :::: :::::::::.....:☆彡::::   //[||    」  ||]  ::::::::::゜:::::::::: ...:: :::::
         :::::::::::::::::: . . . ..: :::: / ヘ | |  ____,ヽ | | :::::::::::.... .... .. .::::::::::::::
        ::::::...゜ . .:::::::::  /ヽ ノ    ヽ__/  ....... . .::::::::::::........ ..::::
        :.... .... .. .     く  /     三三三∠⌒>:.... .... .. .:.... .... ..
        :.... .... ..:.... .... ..... .... .. .:.... .... .. ..... .... .. ..... ............. .. . ........ ......
        :.... . ∧∧   ∧∧  ∧∧   ∧∧ .... .... .. .:.... .... ..... .... .. .
        ... ..:(   )ゝ (   )ゝ(   )ゝ(   )ゝさようなら perl… ..........
        ....  i⌒ /   i⌒ /  i⌒ /   i⌒ / .. ..... ................... .. . ...
        ..   三  |   三  |   三  |   三 |  ... ............. ........... . .....
        ...  ∪ ∪   ∪ ∪   ∪ ∪  ∪ ∪ ............. ............. .. ........ ...
          三三  三三  三三   三三
         三三  三三  三三   三三 
    
    183 デフォルトの名無しさん [sage] Date:2007/12/04(火) 18:23:21  ID: Be:
        >>181
        CPANモジュールが使えるかどうか、という大きな差があるよ。 
    
    184 デフォルトの名無しさん [sage] Date:2007/12/04(火) 22:51:31  ID: Be:
        Perl6は確かに演算子が置き換わったりするけど、こうなるとよりPerlらしくなるなあ、
        というPerlプログラマーの願望通りの変化なので抵抗は少ないと思う。 
    
    185 デフォルトの名無しさん [] Date:2007/12/05(水) 02:02:11  ID: Be:
        隊長、我々はいつまで絵に描いたモチ(Perl6)を待ち続ければ良いんですか! 
    
    186 デフォルトの名無しさん [sage] Date:2007/12/05(水) 09:58:40  ID: Be:
        全線で包囲されたまま補給が途絶え、援軍のアテもないまま玉砕への道を辿る日本兵の集団かよw 
    
    187 デフォルトの名無しさん [] Date:2007/12/05(水) 18:00:54  ID: Be:
        長い間ごくろうさまでした。ありがとう。 
    
    
    

    どういう流れだw 今年のクリスマスにも補給はなさそうだしねえ。

    ■_ Haskellプログラミングでのデバッグ

    第15回 Haskellでのデバッグのコツをつかむ:ITpro

    プログラムが思った通りに動かないとき,あるいは他の人が書いたプログラムを理解したいとき
    には,プログラムの挙動を調べてみるでしょう。例えば,「入力」に対する「出力」を調べたり,
    プログラムが保持する「状態」を確認することで,挙動を理解しようとするはずです。そうした
    ときに使う手法が,プログラム動作中の変数の値といった情報を適宜出力する,いわゆるトレース
    (trace)です。C言語では情報の表示によくprintfを利用することから, printfデバッグとも呼
    ばれます。
    
     Haskellでトレースを使うには,二つの問題があります。一つは,Haskellの型は必ずしも値を
    表示できるものばかりではない点です。これは回避が容易なので,さほど問題ではないでしょう。
    より深刻なのは「Haskellでは,副作用によるバグの発生を防ぐために,I/Oの扱いに対して制約が
    ある」という点です。この結果,Haskellではトレースが行いにくくなっています。Haskellでは,
    値を表示するprintのような副作用を持つ処理を,I/Oモナドなどを通して明示的に扱う必要があり
    ます。しかし,トレースの対象になるコードがI/Oアクションであるとは限りません。
    
     一体どうすればいいのでしょうか? 今回はこうした疑問に対する答えを提示したいと思います。
    

    こういうのを待ってました。

    ■_ つまづきの元

    Cのポインタで躓く人が多いが、Javaの参照で躓く人が少ない理由

    Cのポインタは多目的に使われたり、演算が可能だったり 配列と可換のようで微妙に違う場合があるとかで混乱しているのかなあ と思ったり。

    これはひ(ry

    MSN相談箱 PHP 正規表現 数字又は数字以外を判別MSN相談箱 電話番号 正規表現 ときてこれ。

      MSN相談箱 電話番号入力確認 やっぱり分かりません。
      
    以前電話番号の入力に関する質問をしていて、いろいろご回答頂き自分で取り組んだのですが、
    やはり分かりません。一様、下記のコードを制作したのですが、まだ、ちゃんと動かない状態です。
    なぜちゃんと動かないかお分かりの方、おられましたら教えて下さい。
    
    電話番号の判定に関する正規表現
    $tel1は市外局番、 $tel2は市内局番、 $tel3はお客様番号 ついでに$tel4は内線番号としたい。
    
    それでどのような判定を正規表現でしたいかというと
    1)まず、この電話番号入力欄は入力しても空欄でもよい。
    2)ただし、$tel1、 $tel2又は$tel3の一つにでも入力した場合は、他の二つにも(たとえば、
    $tel1に入力した場合には$tel2及び$tel3にも)必ず入力しなければならない。
    3)$tel4は空欄でも入力しても良いが、$tel4を入力する場合は必ずtel1、 $tel2及び$tel3が
    入力されている必要がある。
    4)tel1、 $tel2、$tel3及び$tel4に入力がある場合は、数字のみ可能。
    これらの判定は、ばらばらに行なうのではなくまとめて行ないます。そのため結果は「電話番号
    正確」又は「電話番号不正確」のどちらかが1回のみ出力されるようにします。
    
    以下は、目指す表示結果です。
    この場合、「電話番号不正確」としたい。
    $tel1 = 123
    $tel2 = 空欄
    $tel3 = 789
    $tel4 = 空欄
    
    この場合、「電話番号不正確」としたい。
    $tel1 = a
    $tel2 = 456
    $tel3 = 789
    $tel4 = 空欄
    
    この場合、「電話番号不正確」としたい。
    $tel1 = 空欄
    $tel2 = 空欄
    $tel3 = 空欄
    $tel4 = 101
    
    この場合、「電話番号不正確」としたい。
    $tel1 = 123
    $tel2 = 456
    $tel3 = 789
    $tel4 = a
    
    この場合、「電話番号正確」としたい。
    $tel1 = 123
    $tel2 = 456
    $tel3 = 789
    $tel4 = 空欄
    
    この場合、「電話番号正確」としたい。
    $tel1 = 123
    $tel2 = 456
    $tel3 = 789
    $tel4 = 101
    
    この場合、「電話番号正確」としたい。
    $tel1 = 空欄
    $tel2 = 空欄
    $tel3 = 空欄
    $tel4 = 空欄
    
    以下の私のコードはちゃんと動作しません。なぜか分かりません。
    
    <?php
    $tel_flg1 = 0;
    $tel_flg2 = 0;
    $mix = $tel1 . $tel2 . $tel3;
    if ($tel1 != "" or $tel2 != "" or $tel3 !="" or $tel4 !=""){
    if (!ereg("^[0-9]+$", $mix)) {
    $tel_flg1 = 1;
    }
    }
    if ($tel4 != ""){
    if (!ereg("^[0-9]+$", $tel4)) {
    $tel_flg2 = 1;
    }
    }
    if ($tel_flg1 == 1 or $tel_flg2 == 1) {
    echo '電話番号不正確';
    }else{
    echo '電話番号正確';
    }
    ?>
    
    コードを修正していただくか、正しいコードを教えていただければ幸いです。
    コードが修正可能なら、修正していただいた方がどこを間違えていたのか理解しやすいです。
    よろしくお願いします。
      
    
      

    で、つきあいのいい回答者がいてアドバイスをしたりするんだけど

    ×××さん
    ご回答ありがとうございました。
    
    不足している部分が存在しているのは気が付いていますが、実際コードをどのように修正して
    よいものやら分かりません。修正コードを教えて下さい。そうしないと、いたちごっこです。
    
    このスレッドでは修正コードをお聞きしています。
    実際にコードを試してみてどのような動作が不足しているかは理解できているため、どのような
    処理が足りていないかの言葉の表現は余り必要ではありませ。足りない動作が分かっていても
    コードをどのように修正したらよいか分からないからお聞きしています。
    

    もうね、窓からPC投げ捨てて(以下略)

    UPS

    オラが部屋にも UPS が

    Amazon から到着。想像以上に重くて驚いた。UPS ってこんなに重量級なハードなのか…。
      

    UPSは実質鉛蓄電池の塊ですからね。駆動時間が長ければ長いほどヘビーになりますね。 某社でサーバーPC用のUPSを設置したときは泣けた。 が、こーゆー動きもあるようです(Yahooのなんでしばらくすると消えます)

    デンセイ・ラムダ、リチウムイオンバッテリ搭載の2kgを切るUPS(Impress Watch) - Yahoo!ニュース
    http://headlines.yahoo.co.jp/hl?a=20071204-00000045-imp-sci
    
    デンセイ・ラムダ株式会社は4日、重量1.9kgの小型UPS「DL3120-072JW」を発表した。出荷開始は
    2008年1月31日の予定。
    
     本体サイズが200×285×44mm(幅×奥行き×高さ)と、業界最小/最薄/最軽量を謳うUPS。
    IP電話/アクセスポイント/監視カメラなど、小型デバイスのバックアップ電源としての利用が
    想定されている。
    
     バッテリに従来の鉛充電池ではなくリチウムイオン充電池を使用したことで、8年間メンテ
    ナンスフリーとした。常時商用給電方式と正弦波出力を組み合わせ、出力容量は72VAと小容量
    ながら、災害時でも確実な駆動を実現可能という。
    
     運転モード切替時間は10ms以下、バックアップ時間は30分/50W、50分/35W。
    
      

    まだPCとかに使うのは無理そうですが (シャットダウンへの時間稼ぎくらいならできる?)。

    Impress Watchでのページ発見→ デンセイ・ラムダ、リチウムイオンバッテリ搭載の2kgを切るUPS

    jijixiさんとOCaml(とその仲間)

    jijixi's diary - F# とか
    や、随分前に手を出してますよと言ってみるテスト。この辺の RSS も登録してますし。まあ、
    最近はあんまり追い掛けてないですが。
    
    なんでかっていうと、メインの環境 (Mac OS X/ppc + Mono) で動かないから。一応 Mono に
    配慮したファイルとかも入ってるんで動く環境もあるんだろうけど、ともかくウチでは動かな
    いのでショボンなのです。サブの Windows 機にはたまに気が向いたときに、その時点で一番新
    しいのを入れ直したりしてます。
    

    F#の紹介のところに、Objective Camlと云々とあったのと、記憶の片隅に 結構この言語を買っている人がいたというのがあったのでちょっとネタ振りしてみました (2005年のあたりは読んでねーっす(^^;)。 CLR上で動くものなので多分…と思ってましたがやはりそうですか。 Mono上で動かないというのは、Mono側の問題なんでしょうか(未実装な機能があって それが使われちゃってるとか)?

    ついでに

    http://jijixi.azito.com/cgi-bin/diary/index.rb?date=20071205#p02
    ◆ [OCaml,DouKaku] 文字列の八方向検索 2007/12/5 16:25 jijixi
    [OCaml,DouKaku] 文字列の八方向検索
    
    昨日引用した
    
    
        思った通りの型の関数が定義できただけで, それが正しい定義になっている可能性が高い
    
    というフレーズにインスパイアされて、一発実行プレイをしてみた。要するに書き上げるまで一 度も実行せずに (さすがに ocamlc -i で型は確かめるよ)、最初の実行で思ったとおり出力され てバンザーイ……というのをやろうと。 で、ほぼうまく行ったので、そのままリファクタリングとかせずに投稿してみた→#4616 こういうカタルシスは強い静的型付け言語じゃないと味わえないと思う。比較的感触が近いのは テスト駆動開発かな。あれはある意味、型検査に類する何かを自分であらかじめ書いてるような もんだと思うんだよね。で、テストを実行するのは OCaml で言えば ocamlc -i するのと同じよ うなもんで、ちょっとずつ型 (とか、それに類する何か) の整合性を高めていくことで、プログ ラムを完成させていくというか。 スーパーハッカーな人だと、動的型付け言語でもこれくらいの問題なら一発で書けちゃうのかも 知れないけど、わしのような凡人にはそれは無理なわけよ。でも、OCaml ならわりとできちゃう。 「おれってすげぇー」感を感じることができちゃう。そんなところも、わしが OCaml の好きな ところの一つだなーと思う。

    なるほど。 Haskellなんかだとデバッグがえらい大変なイメージがあるんですが、 OCamlはその辺りはどうなんでしょうか。って三冊も本買ってるんだから とっとと処理系インストールして試しやがれ。ってとこですね(^^;

    from reddit

    たくさんあって絞るのが大変

    その他

    2007年12月04日

    ■_ Re: Why should I use Perl 5.10?

    reddit経由で。 Re: Why should I use perl 5.10?

    Here are some things of the top of my head that I think are pretty cool:
    
        * state variables 
          No more scoping variables with an outer curly block, or the naughty my $f if 0 trick.
          state 変数 (状態変数でよい?)
    
          もはや変数のスコーピングのための外側にあるブロックは必要なくなりました。
          my $f if 0 というオマジナイも同様。
    
        * defined-or 
          No more $x = defined $y ? $y : $z, instead you can write $x = $y // $z
    
          $x = defined $y ? $y : $z は $x = $y // $z と書けるようになりました。
    
        * regexp improvements 
          Lots of work done by dave_the_m to clean up the internals, which paved the way 
          for demerphq to add all sorts of new cool stuff.
    
          内部構造の整理に対するdave_the_m による多大な努力により
    
        * smaller variable footprints
          Nicholas Clark worked on the implementations of SVs, AVs, HVs and other data
          structures to reduce their size to a point that happens to hit a sweet spot on
          32-bit architectures
    
          変数のフットプリントの縮小
          Nicholas Clark はSV, AV, HV その他のデータ構造の実装において
          32bitアーキテクチャにおいてsweet spot であったそれらのサイズを
          縮小することに注力しました
        * smaller constant sub footprints 
          Nicholas Clark reduced the size of constant subs (like use constant FOO => 2).
          The result when loading a module like POSIX is significant.
    
          定数 sub のフットプリントの縮小
          Nicholas Clark は 定数 sub (use constant FOO => 2 のようなもの)のサイズを
          小さくしました。このことは、POSIXのようなモジュールをロードするときに顕著に
          効果が現れます。
    
        * stacked filetests
          you can now say if  (-e -f -x $file). Perl 6 was supposed to allow this, but they
          moved in a different direction. Oh well.
    
          if (-e -f -x $file) のように記述することが可能になりました。
          Perl 6は以前からこのようにできましたが、
        * lexical $_ 
          allows you to nest $_ (without using local).
    
          local を使うことなく $_ をネスとして使うことができるようになりました。
        * _ prototype 
          you can now declare a sub with prototype _. If called with no arguments, gets fed
          with $_ (allows you to replace builtins more cleanly).
    
          _ というプロトタイプを使ってサブルーチンを宣言することができるようになりました。
          引数なしで呼ばれた場合に $_ で受け取ります。
          組み込み関数をより明快に置き換えることができます。
        * x operator on a list (リストに対する x 演算子)
          you can now say my @arr = qw(x y z) x 4. (Update: this feature was backported to
          the 5.8 codebase after having been implemented in blead, which is how Somni notices
          that it is available in 5.8.8).
    
          @arr = qw(x y z) x 4 のように記述できるようになりました。
        * switch 
          a true switch/given construct, inspired by Perl 6
    
          Perl 6にインスパイアされた本当の switch/given 構造です。
        * smart match operator (スマートマッチ演算子)
          (~~) to go with the switch
        * closure improvements (クロージャの改良)
          dave_the_m thoroughly revamped the closure handling code to fix a number of buggy
          behaviours and memory leaks.
        * faster Unicode (Unicode関連の高速化)
          lc, uc and /i are faster on Unicode strings. Improvements to the UTF-8 cache.
        * improved sorts (sortの改良)
          inplace sorts performed when possible, rather than using a temporary. Sort
          functions can be called recursively: you can sort a tree
    
          可能であれば、一時領域を使わずにその場でのソート(inplace sort)を行います。
          sort関数は再帰的に呼び出すことが可能です。これにより木のソートができます。
        * map in void context is no longer evil. Only morally.
    
          void コンテキストにおけるmapはもはや邪悪なものではなくなりました。
        * less opcodes
          used in the creation of anonymous lists and hashes. Faster pussycat!
        * tainting improvements
          More things that could be tainted are marked as such (such as sprintf formats)
        * $# and $* removed
          Less action at a distance
        * perlcc and JPL removed 
          These things were just bug magnets, and no-one cared enough about them.
    
    update: ok, in some ways that's just a rehash of perldelta, here's the executive summary:
    
    There has been an awful lot of refactoring done under the hood. Andy "petdance" Lester 
    added const to just about everything that it was possible to do, and in the process 
    uncovered lots of questionable practices in the code. Similarly, Nicholas Clark and 
    Dave Mitchell nailed down many, many, many memory leaks.
    
    Much of the work done to the internals results in a much more robust engine. Far 
    likelier err, less likely, to leak, or, heavens forbid, dump core. If you have long 
    running processes that chew through datasets and/or use closures heavily, that is a 
    good reason to upgrade.
    
    For new developments, there are a number of additions at the syntax level that make 
    writing Perlish code even better. Things like Mark-Jason Dominus's book on Higher 
    Order Perl makes heavy use of constructs such as closures that tend to leak in 5.8. If 
    this style of programming becomes more widespread (and I hope it does, because it 
    allows one to leverage the power of the language in extraordinary ways) then 5.10 will 
    be a better fit.
    
    Years ago, having been bitten by nasty things in 5.6, I asked Does 5.8.0 suck?. As it 
    turns out, it didn't. I think that 5.10 won't suck, either. One big thing that has 
    changed then is that far more people are smoking all sorts of weird combinations of 
    build configurations on a number of different platforms, and many corrections are 
    being made as a result of that. Things that otherwise would have forced a 5.10.1 to be 
    pushed out in short order.
    

    『なぜワタシは Ruby 1.9.1を使うべきなのか?』 とか書いたら受けるだろうか?

    ■_ What is “モジュール化プログラミング”?

    第7回 名前空間のエイリアス修飾子と外部アセンブリ - @IT

    プログラミング言語の歴史をひもとくと、構造化プログラミングとオブジェクト指向プログラ
    ミングの中間に、モジュール化プログラミングという言葉が出てくることがある。例えば、
    Modula-2が代表的なモジュール化プログラミング言語である。また、C言語はモジュール化プロ
    グラミング可能な言語とされる。
    
    
    さて、説明によっては、オブジェクト指向プログラミングはモジュール化プログラミングの進化
    形であるかのように説明されることもある。しかし、すべてにおいてオブジェクト指向プログラ
    ミングはモジュール化プログラミングよりも強力とは限らない。スコープの制御という観点で見
    ると、モジュール化プログラミングの方が強力という解釈もあり得るからだ。
    

    へ? なにそれ? と思いつつも自分が不勉強なせいかもしれないと調べてみる。 とりあえずぐぐる先生に訊いてみる。

    http://www.google.co.jp/search?q=%22%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E5%8C%96%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0&btnG=%E6%A4%9C%E7%B4%A2&hl=ja
    
    パーソナライズ "モジュール化プログラミング の検索結果 約 608 件中 1 - 10 件目 (0.22 秒) 
    

    …えーと。

    めげずに英語方面に当たってみる。構造化プログラミングが“Structured Programming”だから “Modulized Programming”とかか?

    http://www.google.co.jp/search?hl=ja&rlz=1B3GGGL_jaJP241JP241&q=%22modulized+programming&btnG=%E6%A4%9C%E7%B4%A2&lr=
    
    
    "modulized programming の検索結果 約 0 件中 1 - 3 件目 (0.17 秒) 
    

    どうしろとw

    “module programming”で検索すると、そこそこ引っかかるように見えますが実は落とし穴が。 “Linux Kernel Module Programming” のように他の言葉の一部が引っかかっただけでした。

    WikipediaのModula-2の項目には

    Modula-2 is a general purpose procedural language, sufficiently flexible to do systems 
    programming, but with much broader application. In particular, it was designed to support 
    separate compilation and data abstraction in a straightforward way. Much of the syntax is 
    based on Wirth's earlier and better-known language, Pascal. Modula-2 was designed to be 
    broadly similar to Pascal, with some elements removed and the important addition of the 
    module concept, and direct language support for multiprogramming.
    

    の最後にある“module concept”を指して云ってるのかなあ>モジュール化プログラミング

    Programming paradigm - Wikipedia, the free encyclopedia の最後に「なんちゃらプログラミング」ってののリストがありますが、 “モジュール化プログラミング”に当たりそうなものは見当たりません。 すみません。この“モジュール化プログラミング”なるものの正体をご存知の方が いらっしゃいましたらご教示くださいませ。

    ■_ メタ

    Japan.internet.com コラム/CodeGuru

    メタプログラミングとは、別のプログラムを生成できるプログラムを書くことです。この技法は
    さまざまな言語においてさまざまな目的で使用されています。メタプログラミングは、部分的な
    評価を行うことによって1つのプログラムを別のプログラムに変換する方法、言い換えれば、プ
    ログラミングを自動化する手段であるとも言えます[11]。メタプログラミングの典型例の1つは、
    出力としてプログラムを生成するLexやYACCなどのコンパイラ構築ツールです。コンパイラ自体
    もこのカテゴリに含めることができますが、コンパイラの場合は一般にホスト言語とドメイン言
    語が異なります[3]。通常、コンパイラは特定の文法に従って書かれたソースを入力として受け
    取り、CやC++、Javaなどのプログラムを出力します。
    
     C++ではテンプレートとマクロを使用してコードを作成することができます。ただし、この方
    法は綿密に設計された機能というよりはむしろコンパイラの乱用に近いという面が多少あります
    [12]。 C++コンパイラは、テンプレートがインスタンス化される時点でコードを生成します。同
    様に、メタプログラミングの手段として多分最も古いものであるプリプロセッサも、マクロを展
    開してコードを生成します。C++のメタプログラムでは、プログラムのホスト言語とドメイン言
    語はどちらもC++であり、テンプレートがインスタンス化される時点で、C++のコンパイラによっ
    てC++のコードが生成されます。つまり、テンプレートによるメタプログラムの実行は、プログ
    ラムの実行時ではなくコンパイル時に行われます。従って、C++は2つのレベルから成る言語であ
    るとも考えられます[6][12][15]。
    

    この方面で日本語で読める適当な(できれば入門レベルの)本なんてでてないですよねえ(^^;

    ■_ あとで(風呂にでも浸かりながら)考える

    バカが征く メッセージ。 - 社員と役員の違いはなにか

    ひょっとしたらこの辺も関係するかもしれないのでぺたり。 ヒトデはクモよりなぜ強い 21世紀はリーダーなき組織が勝つ - 目指せ一人前のプログラマ

    ■_ やれやれ

    ご苦労なこって。

    コピペしたかのごとく改行位置まで同じでやがるw 探せば他でも投稿しているかも知れんな。

    ぐぐってみたら プログラミング総合掲示板 が引っかかった。

    ■_

    メッセージ。 - 会社のパソコン&会社の回線

    twitterって、みんな会社のパソコン&会社の回線で更新してるの? どうしてるの?
    そうだとしたら、仕事中に遊んでるみたいでなんとなくやりづらいんだけど。
    

    これはわたしも気になるところです。 つか、twitter関連はブロックされてるから仕事中は見聞きできないw

    from reddit/PLNews

    2007年12月03日

    父さん、酸素欠乏症にかかって…

    のシーンででてくる謎のメカ(笑)ってあるじゃないですか。 一部のコンビニでやっている、ガンダム関連グッズのくじの景品に あの謎メカの外見をしたUSBハブがあるんですよね。 実に欲しいんですが、店に入っている1セットにつき一つしかないらしく 何枚か買ってみてのですが当然のごとくはずしました。

    んで、今日行ってみたらあたりが引かれてしまっていてなくなっていました○| ̄|_

    んーいくらかなら出しても良いけど、 ヤフオクあたりにでても高い値になりそうだしなあ。

    ■_

    ガンダムねたでもう一つ。 G20買ってたなあ。薄い本だったから多分捨ててないと思うんだけど どこに潜り込んでいるやら(笑)
    くねくね科学探検日記
    くねくね科学探検日記
    くねくね科学探検日記
    くねくね科学探検日記
    くねくね科学探検日記
    くねくね科学探検日記
    くねくね科学探検日記

    過去において文明は、周りの環境を壊しながら、手近な資源を使い尽くし、滅びていった。この 轍を、今の文明にも踏ませてはならない。  宇宙へと到達できる可能性を獲得した文明は、この宇宙でもかなり貴重なもののはずだ。この レベルに育った文明超生命体を、宇宙へ産まれ落とすことが、これから50年あまりの大きな課 題だと思う。上手にやらなければ、この超生命体の胎児は、宇宙へ産まれることなく流産してし まうだろう。  そうなったとき、文明は過去とおなじように、環境を壊し手近な資源を取り尽くして、徐々に 崩壊していく他なくなる。

    ■_ わかるかっ(笑)

    問題編 「n と n+1 が等しくなるような n は何」問題を Forth で(反則) - �ヨ言己
    解答編 種明かし - �ヨ言己

    解答を見た瞬間脱力感に包まれましたw

    ■_ ん?

    2007-12-03 - プログラミング言語を作る日記

    LL(1)パーサってのは、1トークン読むだけで、それがどの構文に相当するのか確定できなきゃいけ
    ないわけで、識別子を読んだ時点でそれが手続き呼び出しか代入文かわからないPascalは、LL(1)で
    はないですよね。
    
    CがLALR(1)であるというのと同程度にはPascalもLL(1)なんだろうと思うけど、ちょっとGoogleしたら、
    そのへんの補足なしに「PascalはLL(1)」と書いてあると思える記事がいくつかあって気になったので。
    

    LL(1) の (1) って、先読みトークンが一個あるって意味じゃなかったっけ? 先読みトークンがあれば、識別子を読み取ってなおその先にある

     id ;
     id := var;
    

    で区別がつくと思うんだけど、わし、何か勘違いしてるかな?

    12/4 追記:
    勘違いでした。LL(1)の場合、上記の例は文法の外にある情報を使わなければ 手続き呼び出しと代入文とを識別子を読んだ段階で一意に決定することができません。

    ■_

    Schemeをつくろう(6) GCCの関数評価順序 - ボクノス

    GCCで表示される値は?
    
    printf("test> ", printf("1 "), printf("2 "), printf("3 "), printf("4 "));
    
    4 3 2 1 test>
    
    勘弁して(泣
    

    そんなにひっかかりやすいかなあ。 確かにこの辺は規格でも規定されていない(しようがない)ぶぶんだけど、 x86あたりに限定して考えれば(他のCPUでも大概は該当すると思うけど)、 後ろの引数から評価していくのはむしろ自然だと思うんだけど。

    ■_

    Ruby 1.9.0開発版、大幅な性能向上 - 12月末のリリースか | エンタープライズ | マイコミジャーナル

    ベンチマークの結果が実際のアプリケーションの実行速度にそのまま反映されるわけではないが、
    多くの結果で数倍から十数倍の実行速度向上が測定されており、1.8.6から1.9.0への移行で充分
    に期待できる速度向上が実現されるのは確実といえそうだ。1.9.0の正式版は2007年12月末ごろ
    にリリースされるのではないかとみられている。
    

    大丈夫かなあ、リリース。って、リリースされるのは1.9.0ぢゃないよっ (1.9.0は常にHEAD扱いになって、stableは1.9.1から番号が振られる)

    from reddit

    misc

    アマゾンさん

    アマゾンも日通なんか切ってヤマトにしろよ。いまだに
    週末配達指定すらできねーんだから。あきれる。
    

    プレミアム会員になって、お急ぎ便で購入するとクロネコできますよ♪

    …ってそれでは意味がないのか。

    2007年12月02日

    がべこれ

    半日自室のガーベジコレクトをしておりました。 だいぶごみが出ましたが、にもかかわらず世代別GCのため ふるーいオブジェクトが残ったままです。 どうしましょうw

    Objective-C vs C++

    人間ガーベジコレクタしながら考えていたのですがw、 もし C++ ではなく Objective-C がWindows等のプログラム開発における 主流になっていたらどうなっていただろうか、とか。 というのもちょっと前に reddit経由で読んだどこかのblogで、 OS X のあのインターフェースは Objective-C の動的性があってこそ云々とか いうのを読んだのが記憶に残っていたからなんですが、 まあ思考実験としては面白いかもしれませんが、 現実にありえたかどうかという点ではほぼ0%でしょうねえ。

    というのも、C++には Zortech C++を嚆矢としてDOS時代からコンパイラがあり (たぶんZortechが最初の商用C++コンパイラで間違いないと思うんですが 違ってたら何かしらの形で指摘してください)、Windows 3.1あたりの ハードウェアスペックでは、Objective-C で開発したプログラムが パフォーマンス的に満足できるものができたかどうかに疑問があるためです。 C++はすっぽすっぽ先生(by あろはさん)が明言しているように パフォーマンスをできるだけ下げない方向で言語仕様を決めてますしね。 その結果が MFCってのは良いのか悪いのかはわたしにはちと判断できかねますがw (功罪相半ば。罪勝ちと多いか?くらいか)

    例によって結論はありません(笑)

    from reddit

    ぼそっ

    previewだせってのも急かしたほうがいいのかなあ。 少なくともインストールがらみの問題はつぶせるだけつぶしといた方が良いと思うのだけど。

    2007年12月01日

    JRuby

    ソースを見る。 JRubyのソースアーカイブ自体に jregex というディレクトリがあって、 そこに正規表現関連のソースが置かれていた。 しまった、本家Javaのソースと同じかどうかわからんw

    /**
     * Copyright (c) 2001, Sergey A. Samokhodkin
     * All rights reserved.
     * 
     * Redistribution and use in source and binary forms, with or without modification, 
     * are permitted provided that the following conditions are met:
     * 
    
    

    ソース冒頭のクレジットはこんな感じ。

    Joniってやつのほうはどこでソースが手に入るのだろう? ぐぐってもなんか関係ないページが多くてよくわかんね。

    JRubyの正規表現エンジンを鬼車ベースのものにするってのは mputさんのRubyConf2007レポートにもあった。あう。

    JRubyのデザインについて 
      ・jruby.jarに必要なランタイムが全部入っている 
      ・bin/jrubycってのがあるんだね 
      ・パーサは手書きでやっていたが今はBisonベースLALRに移行 
      ・パーサ自家製なのでNetBeans IDEで補完やシンタックスハイライトができる。 
      ・おお、メソッド/変数のリネームとかまでできるのか。これは結構がんばるな。 
      ・コアクラスの実装はJavaで書いてあるかC#で書いてあるかが違うだけでIronRubyとほとんど
        同じだな 
      ・評価機はASTを走査する方式でとてもシンプル 
      ・JRuby1.1からJava Bytecodeへのバイトコードコンパイラが入る予定 
      ・コンパイラの最適化で3倍くらい速くなってるなあ 
      ・ただしeval不可。 
      ・ObjectSpaceはJVMのGCとタイトに関連してくるのでとても難しい。 
      ・ObjectSpace.each_objectは普段は無効になっていて、フラグを付けると有効になる(Java
        レベルですべてのWeakReferenceを追跡するようになる。パフォーマンスインパクト大) 
      ・StringBufferによるRubyStringの実装など独自のコアクラス実装をしたようだ 
      ・正規表現エンジンはいろいろの変遷を経て1.1ではJoni(Java版鬼車)になりそうとのこと 
      ・あー、さっきからMRIってなにかなーと思ってたけどMatz's Implementation of Rubyの略かー 
      ・OSネオティブスレッド利用可能。スレッドプールを利用して起動時間の短縮をはかっている
      

    あなたは自分を優秀なプログラマであると考えていますか?

    from reddit。 Programatic - Post details: Take the data literacy test にチェックリストなるものがあります。

    1. abstract data type
    2. array
    3. bitmap
    4. boolean variable
    5. B-tree
    6. character variable
    7. container class
    8. double precision
    9. elongated stream
    10. enumerated type
    11. floating point
    12. heap
    13. index
    14. integer
    15. linked list
    16. named constant
    17. literal
    18. local variable
    19. lookup table
    20. member data
    21. pointer
    22. private
    23. retroactive synapse
    24. referential integrity
    25. stack
    26. string
    27. structured variable
    28. tree
    29. typedef
    30. union
    31. value chain
    32. variant

    以上の各項目のそれぞれについて、 よく理解しているのであれば1点。 どういう意味の言葉かは知っているけど詳しくはしらないということなら0.5点 として加算していってその合計を求めろということのようです。

    合計が求まったら次の一覧で当てはまるところをチェック。

    0-14
    You are a beginning programmer, probably in your first year of computer science 
    in school or teaching yourself your first programming language. You can learn a lot by 
    reading one of the books listed in the next subsection. Many of the descriptions of 
    techniques in this part of the book are addressed to advanced programmers, and you'll 
    get more out of them after you've read one of these books.
    
    
    15-19
    You are an intermediate programmer or an experienced programmer who has forgotten a 
    lot. Although many of the concepts will be familiar to you, you too can benefit from 
    reading one of the books listed below.
    
    20-24
    You are an expert programmer. You probably already have the books listed below 
    on your shelf.
    
    25-29
    You know more about data types than I do. Consider writing your own computer 
    book. (Send me a copy!)
    
    30-32
    You are a pompous fraud. The terms "elongated stream," "retroactive syn­apse," 
    and "value chain" don't refer to data types-I made them up. Please read the 
    "Intellectual Honesty" section in Chapter 33, "Personal Character"!
    

    わたし? 怖くてまだチェックしてませんw

    from reddit

    昨日チェックした分

    本日の購入

    その数学が戦略を決める
    その数学が戦略を決める
    訳者が山形さんだったのでぱらぱらとあとがきやらを読んでみたところ 結構面白そうだったので購入。
    プログラミング言語Erlang入門
    プログラミング言語Erlang入門
    無事購入。


    一つ前のページへ 2007年11月(下旬)
    一つ後のページへ 2007年12月(中旬)

    ホームへ


    Copyright (C) 2007 KIMURA Koichi (木村浩一)
    この文書の無断転載はご遠慮ください(リンクはご自由にどうぞ)。

    メールの宛先はこちらkbk AT kt DOT rim DOT or DOT jp