ときどきの雑記帖 めぐりあい電脳空間編

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

一つ前へ 2010年12月(中旬)
一つ後へ 2011年1月(上旬)

ホームへ

2010年12月31日

■_

著者の一人、いげ太さんから献本をいただきました。感謝。 実践 F# 関数型プログラミング入門
等価交換のルールによりなんか書かないといけないので書きます。

まずこの本は(日本語で読める) F#の本としては三冊目になると思うのですが、 やさしいF#入門―関数型言語を始める は論外として、 プログラミングF# と比べてもF#入門者には薦めやすいのではないかと思います (いい本ですけどね)。

■_ 実践F#

「実践」と謳うには言語(と関数プログラミング)の説明の分量の方が多かったような。

第1章 関数型言語の潮流
第2章 F#の基本
第3章 F#へようこそ
第4章 土台を超えて
第5章 強い静的型付け
第6章 不純の価値は
第7章 コレクション!コレクション!コレクション!
第8章 OOP Mix
第9章 .NET Frameworkのライブラリを使用する
第10章 モジュールとシグネチャ
第11章 ワークフローと非同期ワークフロー
第12章 F#を拡張するライブラリ
Appendix A 本書の用語集 B 参考資料 C コード クオート式 D イベントについて

章のタイトルになんかネタがそれぞれ仕込まれているような気がしたんですが 考え過ぎだったかなあ

以下ちょっと気になった部分を(たぶん)順不同で。 誤記等ですでに他で指摘されているものがあったりしたらごめんなさい。


「シンタックスシュガー」

p21
「インテルのMPU4040(4ビット)以降」という記述がありますが、これは4004の間違いですよね?
あと、インテルはMPUって言い方はしてなかったような。

p22
低級言語/高級言語 とありますが、low/high level lanugae の訳語としてこれは
どうかなあと思います(広く使われてるとは思いますが)。JIS的にはどうなんだっけか。
関連して、p27の図には「高級水準言語」という謎の語句が


p24
「パラダイム」の説明にちょっと引っかかりが

p29
「art」

p30
MLとは、1973年にエジンバラ大学で開発された Edinburgh LCF (Logic for Computable Functions)
という定理証明を支援するメタ言語として開発された。

という文章がありますが、頭と尻尾があってません。
MLは~開発された。か、MLとは~開発されたものであるといった感じでは?

併記されている原文では
It began as the metalanguage for the Edinburgh LCF (Logic for Computable Functions) proof assistant.


p32
この状況を鑑みて、「不遇の関数型言語」と呼んでいます
→誰が?
~と呼ばれています。?

p41
HaskellやScalaなども、関数型言語です。
とありますが、その要素はあるとはいえ関数型言語であると言い切っていいのか?>Scala

p73
代入と束縛の違いの説明は良いと思う

p100
パイプ演算子はよくわかった。

p104
「金額計算にはdecimal型を使用する」
float型は、内部表現に2進数を用いるので、10進数で行われる金額計算に使用した
場合では誤差が問題になります。

「誤差」にも色々種類があるので、ひとまとめに「誤差」としてしまうのは
不親切な気がします。10進で演算しても誤差が出る場合もあります。

4.18
末尾再帰の説明が良かった。


5章
sprint関数
書式指定文字列に*は? ないんだろうけど

「ボクシング」
ボックス化としなかったのは良いと思う。


6.11
冗語構文←→軽量構文
「返り値」

参照渡し→ 用語として適切か?
「参照」によって管理する変数が主流となってきているのだから、
誤解を招くような用語は止めた方がよいのではないか?
#この本での使い方が間違っているということでなく


7章
::は、リストの先頭に要素を追加する特殊な中置演算子で、コンスと読みます。
「コンス」が唐突では
Lispを知っている人なら連想できるだろうけど

p207
要素値をセミコロンで区切ってブラケット (角括弧、bracket)で囲って示すシンプルな記述も可能です。
→ブラケット初出?

判別共用体

7.4
「挿入ソート」はinsertion sort では?
→関数名が insertSort になっている
##プログラミング in OCamlを確認したら insertion_Sort 


7.7
内包的記法

F#では flatten ではなく concat なのか

リスト「から」変換
toArray
toSeq
リスト「へ」変換
ofArray
ofSeq

ofってのは英語話者には自然に感じられる使い方なんだろうか?

8章

p267
「コンストラクター」
#音引きつき p338では「コンビネータ」で音引きなし

キャスト
アップキャスト演算子
ダウンキャスト演算子

インターフェースとは実装のないクラス

p287
null(ヌル)

p291
無名匿名

アクティブパターン

8.16
構造体
値型←→参照型
#値渡し/参照渡し

8.19 型拡張
内在的拡張 intrinsic extension
任意的拡張 optional extension

フレキシブル型

9章

i18n 化したプログラムはどう書くの?


11.2にあるサンプルリストですが、リスト11-15をのぞき
open Sytem.IO の行がありません。
これないとエラーになるのでは?
スペースの都合で削ったのかもしれませんが

12章では、GUIの電卓を作っても良かったかも「実践」だし。


あと、どこだったか思い出せませんが
保証と書くべきところを保障としているところが何ヶ所かあったと思います。

ケチつけてる方が圧倒的に多い ○| ̄|_

■_ えどさっくん

EDSAC 好きなんですよw


EDSAC Rebuild

The EDSAC Rebuild Project

The CCS are in the early stages of planning a rebuild of the original EDSAC computer.

EDSAC was developed at Cambridge University and ran its first program in 1949.

At this stage, the society are researching as much of the history of the machine as we 
can find - early articles, original artifacts and memories of the engineers involved 
in the construction of the machine.

We will keep updating this web page as we make more information available.

 

■_

■_

振り返りはしません(笑)

2010年12月30日

■_

作業中

とりあえず読みましたがまとめるのに時間がががが○| ̄|_

■_ i18n とか l10n とか

Visual C#でのWindowsアプリの国際化 - Nikep's blog

時間ねーっ F#でも当然↑と同じことはできますよね?

■_ Why Teach Programming with BASIC

先送り

■_ For Perl programmers - What would make you move away from the language? Is there a language that you would consider moving to?

先送り

■_ マ板から

このスレッドには気がつかなかった。


プログラマ的にエリア88 
1 仕様書無しさん [] 2005/07/31(日) 02:11:27 ID: Be:
    ここはプログラマ板・・・
    プロジェクト名
    プログラマ的にエリア88・・・

    最前線中の最前線!
    地獄のプロジェクト
    プログラマ的にエリア88!!

    デスマらず納期を
    守れる運は
    すべてSEの仕様書まかせ!!

    おれたちゃ、Intelと
    手をきって、
    AMDのAthlonと手をとった・・・

    命知らずのプログラマ!! 

2 仕様書無しさん [sage] 2005/07/31(日) 02:12:13 ID: Be:
    関連スレ

    ・自作PC
    もうこうなったらマッコイ商会から買い物しようぜ
    http://pc7.2ch.net/test/read.cgi/jisaku/1115429468/l50

    ・エロゲネタ
    エロゲ的にエリア88【その4】
    http://pie.bbspink.com/test/read.cgi/erog/1120268576/l50

    ・同人
    コミケ的にエリア88
    http://comic6.2ch.net/test/read.cgi/doujin/1091660429/l50

    関連サイト(2ch各地のエリ8スレがまとめられている)
    http://area88threads.hp.infoseek.co.jp/ 

3 仕様書無しさん [sage] 2005/07/31(日) 03:11:32 ID: Be:
    おい>>1、外泊証明書にサインしろ。 

8 1 [] 2005/08/01(月) 11:32:15 ID: Be:
    いまさらだが少し修正

    ここはプログラマ板・・・
    プロジェクト名
    プログラマ的にエリア88・・・

    最前線中の最前線!
    地獄のプロジェクト
    プログラマ的にエリア88!!

    デスマらず納期を
    守れる運は
    すべてSEの仕様書まかせ!!

    おれたちゃ、技術系SEと
    手をきって、
    体育会系のバカSEと手をとった・・・

    命知らずのプログラマ!!

9 1 [sage] 2005/08/01(月) 12:58:29 ID: Be:
    ×体育会系のバカSEと手をとった・・・
    ○体育会系のバカSEの手をとった・・・

    orz 

12 仕様書無しさん [sage] 2005/08/02(火) 03:14:43 ID: Be:
    「せんぱーい、新しい派遣先って大きいんですか?」
    「そうだな…ウォーレン、どう思う?」
    「派遣先なんてのは、大きかろうと小さかろうと、糞みたいな所さ…」 

13 仕様書無しさん [sage] 2005/08/02(火) 22:43:22 ID: Be:
    ラ「電算室よりミッキー!!
      おまえをのぞいてホストを使うのは初めての連中ばっかしだ。
      一人で喜んでテープ交換してないで、ちゃんとめんどー見るんだぞ。」
    ミ「わーってますよ。ラウンデル副室長。」
    ラ「たく・・・」
    サ「ラウンデル!!
      電算室掃除は私が変わろう。ホストはミッキーとお前しか経験がない。」
    ラ「はあ・・・しかし・・・」
    サ「配置転換組の88メンバーは厚木のセンターでダウンサイジングを担当していたから、
      ミッキーがコツさえ教えればすぐホストに慣れる。
      問題は武裸死亜スタッフ(人材派遣)のメンバーだ。幕張でCS構築していた連中だ。
      COBOLは初歩からやりなおしのようなもんだ。
      阿修羅無システム外人部隊教育担当の腕をひさびさに見せてもらおうか、ラウンデル。」



    ・・・88ってN88BASIC? 

14 仕様書無しさん [sage] 2005/08/02(火) 23:03:36 ID: Be:
    N88BASICとは、また随分古い言語で戦争しに来たもんだ 

15 仕様書無しさん [sage] 2005/08/03(水) 19:15:33 ID: Be:
    いつの時代でも
    最新のものが
    最高だとは限らない・・・

    エリア88・・・BASICに
    救われた貴重な一日・・・
    母は子どもたちのために
    GOTOで道を開いた・・・ 

21 仕様書無しさん [sage] 2005/08/03(水) 23:44:12 ID: Be:
    じいさん、シンは!?

    朝からのミーティングに参加して、まだ帰ってこねえよ。

    なんだと!
    あいつ、きのうの夜のテストにも出てたんだぜ。

    そりゃすごい。徹夜でがんばっているのかね。

    おい、サキ!!
    じょうだんじゃないぜ!! なんでシンをとめなかった!?
    過重労働だぜ!!

    ミッキー、ここじゃどの作業に何時間従事しようが、個人の勝手だ。
    自分の体力や技能を考えたうえでのあき時間の利用なら、
    私が口を出すところじゃない・・・・・・

    このルーム88からでていくには・・・
    3年間の派遣期間を勤め上げるか・・・
    150万ステップのコーディングを完成させて出るか・・・
    失踪するか・・・

24 仕様書無しさん [sage] 2005/08/04(木) 01:01:02 ID: Be:
    「再現性もないバグを、よく直せたもんだなサキは…」

    「パケットに流れるバイナリデータをトレースしたのさ。
     自分で作った解析ツールかましてな」

    「神業だぜまったく」

    「神業か…違うな。
     神様ならとっくの昔にこんなプロジェクト破綻させてらぁな!
     デスマ地獄に戻ってくるために使う神業なんてあるかよ!
     悪魔が味方してんだよ…あいつら…」 

25 仕様書無しさん [] 2005/08/04(木) 01:33:21 ID: Be:
    かすかに聞こえる回転音(ディスク・ノイズ)
    妖しく光る警告灯(ワーニング・ランプ)
    突然固まる運用機(アプリ・サーバ)

    その夜、上司は「泊まれ!」と言った… 

48 仕様書無しさん [sage] 2005/08/12(金) 16:05:14 ID: Be:
    ウォーレンさんが言ってました。
    月が赤い夜は、世界のどこかで仕変を考えてる客がいるんだそうです。 

49 仕様書無しさん [sage] 2005/08/12(金) 16:30:48 ID: Be:
    >48

    「世の中不景気なんてウソよっっ」 

50 仕様書無しさん [sage] 2005/08/15(月) 17:56:09 ID: Be:
    でもなあ・・・
    俺はオブジェクト指向はできねえんだ・・・

    近頃はJavaだの
    なんだかんの、いろいろな言語が多すぎてな・・・
    老いた頭じゃついていけねえ。

    ヘッダ一つふえただけで、もう混乱しちまうんだ・・・

    俺はCOBOLと一生を共にするよ・・・ 

67 仕様書無しさん [sage] 2005/08/25(木) 10:01:25 ID: Be:
    こんな所こなけりゃ もう少し
    ましな人生歩めたはずだが
    もう遅い
    なんの因果かPG稼業
    派遣一筋超一流
    文句もいえずにおちこぼれ

    こんな所こなけりゃ もう少し
    ましな人生歩めたはずだが
    もう遅い
    なんの因果か外注部隊
    父ちゃん母ちゃんりっぱな人だが
    せがれはとうとうおちこぼれ

    こんな所こなけりゃ もう少し
    ましな人生歩めたはずだが
    もう遅い
    バグの書き方消し方
    なまじプログラムが書けたら
    仕様書一枚でデスマ行き・・・ 

70 仕様書無しさん [sage] 2005/09/01(木) 21:07:10 ID: Be:
    マッコイじいさん、PC8001用の増設メモりあるかい? 

73 仕様書無しさん [sage] 2005/09/02(金) 23:02:59 ID: Be:
    >70
    金さえ出しゃ、CRAY-1でも地球シミュレータでも持ってきてやるよ。

    って、今時16KbitのD-RAMどこから持ってくるんだよ。 

74 仕様書無しさん [sage] 2005/09/02(金) 23:09:51 ID: Be:
    ドイツの企業の伝票を書き換えて 不良品だった奴と摩り替えて、
    東南アジアに輸出されるはずだった奴をインドの倉庫からかすめとってきたんだ! 

75 仕様書無しさん [sage] 2005/09/02(金) 23:11:49 ID: Be:
    >74
    「努力と汗の結晶ね・・・これ。」

76 仕様書無しさん [sage] 2005/09/02(金) 23:15:38 ID: Be:
    だからコレ、お前の1G DIMMより高くついてるんだよ。 

77 仕様書無しさん [sage] 2005/09/03(土) 00:25:56 ID: Be:
    わかんねェなぁ、どうしてそこまでして・・・ 

136 仕様書無しさん [sage] 2005/10/25(火) 19:09:09 ID: Be:





           炎
           炎
           驚

           炎

           炎

           涙

       炎炎     炎炎
      炎  崩   炎  怒
     怒    炎 炎    炎
      炎  炎   憂  炎
       炎炎     炎炎
     叫   諦   焦   迷
    炎     炎  炎     炎
    炎     炎  炎     虚
     震   怒    疑   炎
      炎 炎       炎 怒

137 仕様書無しさん [sage] 2005/10/26(水) 23:27:25 ID: Be:
    「それより、このソースを再利用するのに問題はなさそうだ。」

    「でも・・・バグが・・・」

    「ばか!!」

    「枯れ木も山のにぎわいというだろうが!!
     このテの処理には、バグの10や20、アクセサリーだと思え!!」 

142 仕様書無しさん [] 2005/11/04(金) 12:59:11 ID: Be:
    ケン「なあ、グレッグ…」
    グレッグ「ん?」

    ケン「何でプログラマになった?」
    グレッグ「お前は何でだ?」



    ケン「さあ…。なんとなく、かな…」


    グレッグ「おれも…なんとなく、さ…」 

158 仕様書無しさん [sage] 2005/11/19(土) 12:30:55 ID: Be:
    平均年齢高そうだな… 

159 仕様書無しさん [sage] 2005/11/19(土) 17:51:31 ID: Be:
    そりゃそうさ、年中デスマ 大好き中年だし




    いやだっ帰りたい家に帰りたい… 

218 ファントム無頼 [sage] 2006/06/22(木) 01:35:53 ID: Be:
    プログラムってのは、不思議なもんだ。精密になればなるほど手がかかる。
    常に最高の性能をだしたければ、常に改造してやらにゃあならん。
    記号1文字かわっていても、性能に差が出る……
    なかなかデリケートな美人だよなあ…お前ってやつは… 

小一時間ほどうけまくってしまった。 若い衆すまんw

エリア88 (1) (MFコミックス―フラッパーシリーズ)
地上空母のエピソードの最後の方で、エリア88基地の滑走路半分犠牲にして(当然基地として使用不可能に) ドリルミサイル(笑)の爆破をサキが指示する辺りが好きなんですよね。 以前見返したら、えらくあっさりした感じ(コマも小さい)で拍子抜けした覚えが。

■_

■_

明日もまともに書けない(まとめられない)ような気がするなあ…○| ̄|_ ということで保険で「良いお年を~」

2010年12月29日

■_

人間はガジェットではない (ハヤカワ新書juice)
を読んで色々もやもやしたものを感じ続けていたのですが 高橋会長の 『人間はガジェットではない』は、伊藤計劃『ハーモニー』を読んだ後ではなにやら古ぼけた本に見えてしまうのは仕方ないか (Twitter / @masayoshi takahashi: 『人間はガジェットではない』は、伊藤計劃『ハーモニー ...) というのを見かけてハーモニーを読むことにしました (実は伊藤計劃の作品は一つも読んでなかった)。 なにか答えにつながるものでも見つかるだろうか。 といいつつ
コンピュータが仕事を奪う
というのもあったりする。

・クリスマスツリー
時期は過ぎましたがw、 JavaScript ネタで。 Román Cortés » How I did the 1kb Christmas Tree

■_


おもしろいコピペがあったら貼るスレinマ板part22 
469 仕様書無しさん [] 2010/12/20(月) 17:30:26 ID: Be:
    ケンジおじさん「ごめんなぁ、ゆうすけ君。昔お年玉は年齢x1000円あげるっていったけど3万円で打ち止めだわ。」

470 仕様書無しさん [sage] 2010/12/20(月) 18:04:41 ID: Be:
    ユウスケェ… 

471 仕様書無しさん [sage] 2010/12/20(月) 18:15:28 ID: Be:
    ヨウスケは悪くねーよ、あいつは騙されたんだ! 

えーと…w

■_ gawk

つづき。

これ、「対応」ってレベルじゃねーだろう(^^; とりあえず ifdef __EMX__ なところを __MINGW32__ でも引っかかるようにしてビルドしようとしたら

>make mingw32
make  all \
        CC=gcc O=.o CF="-O2 -gdwarf-2 -g3" OBJ=popen.o \
        LNK=LMINGW32 PLNK=PLMINGW32 DLNK=DLMINGW32 \
        LF="-gdwarf-2 -g3" LF2=-lmsvcp60 RSP=
make[1]: Entering directory `/cygdrive/c/Users/hoge/work/gawk-3.1.76'
gcc -c -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H  gawkmisc.c
gcc -c -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H  io.c
io.c: In function `two_way_open':
io.c:1892: error: `SIGKILL' undeclared (first use in this function)
io.c:1892: error: (Each undeclared identifier is reported only once
io.c:1892: error: for each function it appears in.)
io.c: In function `wait_any':
io.c:1941: error: `SIGHUP' undeclared (first use in this function)
io.c:1943: error: `SIGQUIT' undeclared (first use in this function)
io.c: In function `inetfile':
io.c:3219: error: `AF_UNSPEC' undeclared (first use in this function)
io.c:3225: error: `AF_INET' undeclared (first use in this function)
io.c:3231: error: `AF_INET6' undeclared (first use in this function)
make[1]: *** [io.o] Error 1
make[1]: Leaving directory `/cygdrive/c/Users/hoge/work/gawk-3.1.76'
make: *** [mingw32] Error 2

エラーになってるシグナルは mingw じゃ使えないやつだし、 AF_* の方も、たぶん必要なヘッダファイルを include してないせい。 まあどちらにしても、ネットワークアクセスの機能を mingw で使うように するにはほかにも(VC用でやったように)いろいろやらなくちゃあならんので どうでもいいっちゃいいのか。

続く。のか?

■_

ム板からネタ拾い。


【Lisp】プログラミング言語 Clojure【JVM】
477 デフォルトの名無しさん [sage] 2010/12/27(月) 21:19:01 ID: Be:
    (AA略)
    Clojureのプロジェクトを開始する前に言っておくッ!
    おれは今やつの設計思想をほんのちょっぴりだが体験した
    い…いや…体験したというよりはまったく理解を超えていたのだが……

    あ…ありのまま 今 起こった事を話すぜ!
    『おれはClojureのコードを書いていたと
    思ったらいつのまにかJavaのコードを書いていた』
    な… 何を言ってるのか わからねーと思うが
    おれも何をされたのかわからなかった…
    頭がどうにかなりそうだった…
    FFIだとかインラインコードだとか
    そんなチャチなもんじゃあ 断じてねえ
    もっとおもしろあぶないものの片鱗を味わったぜ… 

478 デフォルトの名無しさん [sage] 2010/12/28(火) 00:48:23 ID: Be:
    >>447
    それclojureやない、clojureの皮を被ったjavaや!

479 デフォルトの名無しさん [sage] 2010/12/28(火) 17:10:25 ID: Be:
    もしかして:Scalaを使うと聞いたのに蓋を開けたらvarの嵐 C++なのにテンプレートどころかクラスさえ使ってない 

480 デフォルトの名無しさん [sage] 2010/12/28(火) 20:18:50 ID: Be:
    >>479
    もしかして:辛そうで辛くないちょっと辛いScala

    #一応書くけどからいじゃなくてつらいだからね!

■_ Perl 6

2010 年は Perl 6関連で色々ありましたねという話。


blog | Perlgeek.de :: Perl 6 in 2010

Tue, 28 Dec 2010

Perl 6 in 2010

2010 has been a busy year for the Perl 6 developers, and came with a noticeable distribution
release, many new modules and much fun for the people involved. Here's a short, subjective
reflection of this year's Perl 6 events.

2010年はPerl 6開発者たちにとって多忙な一年であり、noticable な distribution と
多くの新規モジュール、そして大いに人々を楽しませることがありました。
以下に今年あった Perl 6 に関する出来事の簡単な subjective reflection をまとめました。

Specification
仕様

While some specification changes had substantial impact on the compiler writers (and were
usually in turn triggered by their worries), the user mostly saw maturing of experimental
features, smoothed APIs and some few new features.

一部の仕様の変更がコンパイラー作者たちに substantial な衝撃を与えはしましたが、
ユーザーは実験的な機能、smoothed API、さらにはいくつかの新機能を目にすることとなりました。


Lists, lists, lists
リストリストリスト

Just as last year, there were a lot of discussions on how lists and related types worked.
Much of it was driven by the efforts to implement proper lazy lists in Rakudo.

昨年と同様、リストと関連する型がどのように動作するかについて多くの議論が交わされました。
そのほとんどはRakudoにおける proper で lazy なリストの実装に対する effort により
drive されたものでした。

The result is a much more solid list model, which uses immutable iterators under the hood
- a fact that is hidden quite well from the user.

その結果が、陰で仕事をする (ユーザーの目が届かないところで行う)
immutable なイテレーターを使ったより一層 solid なリストのモデルです。

The sequence operator (previously known as "series operator") is a powerful 
tool for creating lazy lists. It has been extensively refactored to solve problems 
both with its implementation and usage. It now takes an optional closure left of the ... 
operator, and a limit that terminates the sequence if it matches true:

シーケンス演算子(以前はシリーズ演算子として知られていたもの)は遅延リストを作るための
強力な道具となりました。この演算子は実装と使用法両方の問題を解決するために
extensively にリファクタリングされました。現在、... 演算子の左辺に optional なクロージャを
取るようになり、そのクロージャは true とマッチしたときにシーケンスを終了させます。

# Lazy list of Fibonacci numbers up to (but excluding) 100:
my @fib := 1, 2, *+* ...^ * >= 100;

Date and Time

After several iterations, excessive bikeshedding and serious hacking, Perl 6 now has 
built-in classes for handling times and dates. They are inspired by the DateTime and 
Date::Simple Perl 5 modules. The biggest difference is probably that DateTime objects 
are immutable in Perl 6.

数回のイテレーションと excessive bikeshedding、serious hacking のあと、
Perl 6 は時間と日付を扱う組み込みのクラス群を持つことになりました。
それらは Perl 5モジュールの DateTime と Date::Simple にインスパイアされたものです。
最大の相違点は、Perl 6 における DateTime オブジェクトは immutable だということです。


This part of the specification is implemented completely in Rakudo.

この part of the specification は Rakudo で完全に実装されています。

Zip meta operator
Zip メタ演算子

The Z zip operator can now also act as a meta operator. Thus an easy way to add two 
lists pairwise and lazily is now

Z zip 演算子はメタ演算子として振る舞うことも可能となりました。
したがって、二つのリストを pairwise に lazy に加算する簡単な方法は次のようになります

my @sum = @list1 Z+ @list2;

Other changes
そのほかの変更

    * The .pick method, which randomly takes one or more elements from lists and hashes, has
      been split up into two: @a.pick(3) returns 3 distinct, random items from array @a, while
      @a.roll(3) does three independent random choices, resulting in possible duplicates in
      the result list.

      リストやハッシュから一つ以上の要素をランダムに取り出す .pick メソッドは、配列 @a から別々の
      三つの要素をランダムに取り出す @a.pick(3) と独立したランダムな選択を三回行い結果リストで要
      素の重複があり得る @a.roll(3) とのふたつに分割されました。

    * The scoping of lexical multi routines and their protos has been clarified and overhauled
      (see this discussion of what was wrong previously, and the resolution).

      lexical multi routines のスコーピングと protos が明確にされ、オーバーホールされました

    * The numeric roles, buffers and Whatever type have received significant updates
      numeric roles とバッファー、received significant を持つ型が更新されました。

Community
コミュニティ

In 2010 we had a remarkable influx of friendly, interested, skilled and enthused newcomers to
the Perl 6 community. This is the result of increased marketing outside the Perl community,
well publicized releases, great technology and a friendly community.

Community expansion
コミュニティの拡大

Two challenges or contests have been announced this year.

Moritz Lenz published a series of "weekly" challenges, guided tasks to 
implement something that the Perl 6 community needs: A website for the ecosystem, a 
feature in a compiler and other small things that could be tackled without much prior 
knowledge.

The overall response was very good, and several people used it as a quick start into 
the Perl 6 community, and stayed.

Towards the end of the year, Carl Mäsak announced his Perl 6 coding contest. The 
submitter with the best solutions to five well known programming tasks is to win 100€ 
worth of books.

Another far-reaching project was the Perl 6 advent calendar for 2010, which attracted 
more than forty thousand visitors .

In an attempt to make Perl 6 compilers easier available to the masses, John Harrison 
implemented a web frontend to the Rakudo REPL and made it available at try.rakudo.org.

Conferences

There was a big Perl 6 hackathon (though we had more discussions than hacking) at 
YAPC::EU 2010 in Pisa. Many Perl 6 contributors, compiler writers and users met and 
discussed pressing topics in the realms of specification, implementation roadmap, 
measuring progress and community management. See the meeting notes for details.

Of course there were also some Perl 6 talks at YAPC::EU, many of which seemed well 
received by the audience.

Perl 6 talks were also held at the Netherlands Perl Workshop, YAPC::Russia, Norway 
Unix User Group and OSDC France, as well as many other conferences which the author 
forgot :-).

Repository changes

Due to neglected maintenance, the Pugs repository had to be shut down. It has been 
migrated to git, and split up into several repositories under the perl6 organization 
on github. Notable parts include:

メンテナンスがnglectされていたために、Pugsのリポジトリはshut down せざるを得ませんでした。
リポジトリはgitにmigrateされ、githubにある perl6 organization の下の
いくつかのリポジトリへと split up されました。特筆すべきパーツには以下のようなものが
あります:


roast
    the Perl 6 test suite
specs
    the specification
perl6.org
    the main Perl 6 website
modules.perl6.org
    the Perl 6 modules website
ecosystem
    the module list repository
mu
    the remnants of the old pugs repository

While the transition was mostly ad-hoc and not really planned for, most of the 
resulting confusion could be resolved fairly quickly.

Module ecosystem
モジュールエコシステム

While we still lack a proper module distribution system, we now have a website of 
known Perl 6 modules and a module installer.

But most importantly the number of modules and module authors is steadily increasing 
(82 known Perl 6 modules at the time of writing, compared to 45 last year). While we 
still lack the wealth of the Perl 5 ecosystem, there are now database modules, HTTP 
client and server modules, serialization, file handling tools and so on.

Implementations
実装

Rakudo

Most importantly, this year saw the first Rakudo Star release. Rakudo star is a 
distribution of the Rakudo compiler, modules and documentation. While it is still a 
kind of preview release, some few production usages of the Rakudo Perl 6 compiler and 
distribution have been spotted in the wake of this release.

最も重要なこととして、今年は Rakudo Star の初めてのリリースがありました。
Rakudo Star はRakudo コンパイラー、モジュール、ドキュメントのディストリビューションです。
現状ではまだプレビューリリースといったものですが、

Also a good part of the Rakudo code based has been replaced during a major refactor, 
which bases Rakudo on top of a new grammar engine.

Major improvements to the compiler include
コンパイラーに対する大きな改良には以下のものが含まれます

    * an implementation of lazy lists
      遅延リストの実装

    * lexical classes and roles
      レキシカルなクラスと roles

    * Perl 6 level stack traces
      Perl 6レベルのスタックトレース

    * much more solid meta object model, which allows the user to create and modify classes
      programmatically at run time
      ユーザーにクラスの生成と変更を実行時にプログラム的に許すような、より solid なメタオブジェクトモデル

    * implementation of the s/search/replace/ and s[search] = replace() syntactic features,
      along with several new regex adverbs and variable interpolation into regexes

      付随していくつかの新しい regex adverbs と正規表現への variable interpolaiton (変数展開)

    * improved interpolation in double-quoted strings: array and hash variables now 
      properly interpolate when the expression ends in a bracketing construct

      ダブルクォートで囲まれた文字列でのinterpolationの改良:
      配列変数とハッシュ変数は、式が bracketing construct の終端にあるときに
      適切に interpolate されるようになりました

    * an improved read-evaluation-print loop, which now remembers variables from previous
      lines, and also automatically prints the result if no output was produced

      read-evaluation-print ループが改良され、直前の行の変数を記憶しておくようになり
      また、出力が生成されないときに結果が自動的に表示されるようになりました。

    * multi level array and hash autovivification

      マルチレベルの配列やハッシュの autovification

    * binding and read-only binding of variables

      変数の binding (束縛) や read-only binding

    * a solid implementation of the DateTime and Date classes
      DateTime クラスおよび Date クラスの solid な実装

    * MAIN and USAGE subroutines
      MAIN サブルーチンと USAGE サブルーチン

    * the magic $*ARGFILES file handle and get (comparable to while (<>) { ... } 
      in Perl 5)

      マジックファイルハンドル $*ARGFILES と マジック get (Perl 5における
      while (<>) { ... } に相当)

    * an implementation of basic feed operators
      基本的な feed 演算子の実装

During YAPC::EU the Rakudo contributors decided to target multiple virtual machines: 
besides the current parrot backend we want to support at least the CLR (.NET).

YAPC::EU の間に、Rakudo contributor たちは複数の virtual machine をターゲットと
することを決定しました。現状の parrot バックエンドの他に、少なくとも
CLR (.NET) をサポートすることをわたしたちは要望しています。

With this goal in mind, and the need for major performance improvements, Jonathan 
Worthington prototyped a new, efficient meta object model for parrot in C#, and used 
that as a base for the new CLR backend. He got help from Matthew Wilson, and Martin 
Berends started porting the effort to the JVM. Jonathan explained some of his work 
nicely on the 6guts blog.

この目標を念頭に置き、また、major performance improvement の必要性から、
Jonathan Worthington は C# での parrot と新しい CLR バックエンドの base として使うために
新しい効率的なメタオブジェクトモデルのプロトタイプを作成しました。
彼は Matthew Wilson の助力を得ました。
また Martin Berends は JVM への移植作業を開始しました。
Jonathan は彼の作業の一部を 6guts blog 上で解説しています。

In 2011 we will likely see a port of the meta object implementation to parrot, and the 
beginnings of a Rakudo port to the CLR and JVM.

2011年にわたしたちはメタオブジェクトの実装の parrot への移植を見ることになるでしょう。
また、Rakudo の CLR および JVM への移植が開始されるでしょう。

Niecza

In June, Stefan O'Rear started taking notes on how to compile Perl 6 to the Common 
Language Runtime (CLR). In November he announced the Niecza Perl 6 compiler, focused 
on the generation of efficient code.

It already has an impressive list of features, including proper Longest Token Matching, 
a feature of regexes and grammars that no other Perl 6 compiler has implemented so far.

Summary
まとめ

2010 was a very rewarding year for the Perl 6 community. With Rakudo there was a compiler
available, with which small and medium scale projects can be fun to write. Niecza is quickly
catching up.

2010年は Perl 6 コミュニティにとって非常に rewarding な年でした。
Rakudo によってコンパイラーが使えるようになり、小中規模のプロジェクトを書くのを
楽しめるようになりました。Niecza はすぐにキャッチアップするでしょう。

People experiment with Perl 6, join the community and bring fresh ideas. There is still a
long road ahead of us, but the author feels that this road is getting broader and more
accessible with each step.

Perl 6を経験した人たちはコミュニティに参加して新しいアイデアを持ち込みました。


This page may be used under the terms of the Creative Commons Attribution 3.0 Germany License.
Please place a link to the pages you use for your derivative work.


■_ What is the best way to learn a new programming language?

新しいプログラミング言語を学ぶ (to leran) のに一番良い方法って?


On learning Go - nf.id.au

I'm often asked about the best way to learn Go. My advice is to take the same approach 
you should to learn any language: pick a real problem and solve it. It doesn't have to 
be big.

(略)

以下 reddit での反応。


On learning Go - Or "What is the best way to learn a new programming language?" : programming

Write a compiler for it.


Actually, pretty good suggestion!


You're fucking right it's a good suggestion. Walter Bright is one of the foremost 
compiler writers in the whole goddamn world. He has worked on some pioneering C++ 
compilers, as well as designed and implemented the D programming language, among many 
other accomplishments. When he makes a suggestion, I listen, and then I do what he 
says.


what if you dont know the techniques to achieve that


What the fuck sort of answer were you expecting? Seriously.

When you don't know how to do something, you really only have two options:

1) Remain ignorant.

2) Learn.

Choose one.

I think there are two ways to learn a language.

1: Pick a problem you know well

Which is something that the OP already stated, mine is my bachelor thesis project.

2: Implement some data structures and algorithms

There should be enough common data structures and algorithms to keep oneself busy. 
Such as: lists, queues, heaps, stacks, trees, tri's; and Graph traversal, sorting 
algorithms, huffman encoding...the lists are endless. While there may already be some 
collections/std lib for the language their implementation should give you some idea of 
how to use the language.


Read specification, write code.


Use it, use it some more, and then use it even more.

コンパイラー書けとかw まあ、その言語で Scheme インタープリター書いて覚えるとかいう人もいますしねえ。

■_

■_

とある本を買って、確かにいいこと書いてあるようだけど ここではその本については書かない。なぜなら(ry

2010年12月28日

■_

・近代麻雀
ムダヅモ なんじゃこりゃああw そして次回最終回 哭きの竜外伝 最終回 ひぐらし 最終回 ワシズ様 引っ張るなあ

・MOMO
わびれもの 限定で復活。

・イブニング
しばちゅーさん よいw

■_

中国語訳が。 Day 24 – Yule the Ancient Troll-tide Carol « Perl 6 Advent Calendar Pugs: 小白與 Perl 6:華麗的冒險 誰か日本語ば(ry

完走したということで項目一覧のページも


Merry Christmas! « Perl 6 Advent Calendar

Merry Christmas!

By carl

The people who brought you this year's Advent Calendar had a blast doing so — it's 
exciting to get to present new and old Perl 6 features to new and old readers. Thanks 
everyone! And Merry Christmas!

Day 1 – Reaching the Stars
Day 2 – Interacting with the command line with MAIN subs
Day 3 – File operations
Day 4 – The Sequence Operators
Day 5 – Why Perl syntax does what you want
Day 6 – The X and Z metaoperators
Day 7 – Lexical variables
Day 8 – Different Names of Different Things
Day 9 – The module ecosystem
Day 10 – Feed operators
Day 11 – Markov Sequence
Day 12 – Smart matching
Day 13 – The Perl6 Community
Day 14 – nextsame and its cousins
Day 15 – Calling native libraries from Perl 6
Day 16: Time in Perl6
Day 17 – Rosetta Code
Day 18 – ABC Module
Day 19 – False truth
Day 20 – The Perl 6 Synopses
Day 21 – transliteration and beyond
Day 22 – The Meta-Object Protocol
Day 23 – It's some .sort of wonderful.
Day 24 – Yule the Ancient Troll-tide Carol
Day 25 – Merry Christmas!

結構面白い題材が多かったような。

■_ IronPerl?

CLRに乗っければなんでもIronってわけでもないでしょうが。


Announce: Niecza v1 - nntp.perl.org
From: Stefan O'Rear
Date: December 27, 2010 23:58
Subject: Announce: Niecza v1
Message ID: 20101228071451.GA10352@localhost.localdomain

    Announce: Niecza Perl 6 v1

To mark one month since the first announcement of Niecza, to be known
retroactively as v0, this is another announcement, to be known as v1.
Further announcements will occur at intervals on the last Monday of
each month.

You have my assurance that the 'v1' tag, available at [1], passes all
of the current tests and has a bunch of cool features.  What you will
not necessarily have is an easy time installing it; Niecza depends on
several non-pure-Perl modules from CPAN, which you'll need to set up
in order to be able to use Niecza.  I recommend trying cpanminus
first.

Niecza is a Perl 6 compiler project studying questions about the
efficient implementability of Perl 6 features.  It currently targets
the Common Language Runtime in the form of Mono.

    List of changes
(ry

    Getting involved

Contact sorear in irc.freenode.net #perl6 or via the sender address of
this mailing.  Also see docs/lhf.txt for a list of things that need to
be done in no particular order.

    Future directions

To simplify deployment and make &eval easier to implement, I'd like to
take Perl 5 out of the loop.  Therefore I am engineering a way to allow
the compiler to be moved to Perl 6; this will probably be finished by
v2 or v3.  After that, expect lots of spectest work.

[1] https://github.com/sorear/niecza/zipball/v1


    * Announce: Niecza v1 by Stefan O'Rear


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About 

■_ gawk

mingw でやってみる。

>make
Enter make  target
 where 'target' is chosen from
  djgpp ... DOS 32-bit exe [GNU C, Delorie, v2]
  emx ..... OS/2 32-bit exe [emx/gcc; uses emxlibc.dll]
  emxnt ... NT exe [emx/gcc with RSXNT]
  emxbnd .. OS/2 and DOS 32-bit exe [emx/gcc]
  mingw32 . Windows32 exe [Mingw32 GNU C]
  -----------------------------------------------------
  test .... Perform tests (see README_d/README.pc)
  install . Install gawk under c:/gnu/

>make mingw32
make  all \
        CC=gcc O=.o CF="-O2 -gdwarf-2 -g3" OBJ=popen.o \
        LNK=LMINGW32 PLNK=PLMINGW32 DLNK=DLMINGW32 \
        LF="-gdwarf-2 -g3" LF2=-lmsvcp60 RSP=
make[1]: Entering directory `/cygdrive/c/Users/hoge/work/gawk-3.1.76'
gcc -c -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H  array.c
gcc -c -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H  builtin.c
builtin.c: In function `do_bindtextdomain':
builtin.c:2403: warning: assignment discards qualifiers from pointer target type

gcc -c -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H  eval.c
gcc -c -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H  field.c
gcc -c -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H  floatcomp.c
gcc -c -O2 -gdwarf-2 -g3 -DGAWK -I. -DHAVE_CONFIG_H  gawkmisc.c
In file included from gawkmisc.c:41:
posix/gawkmisc.c: In function `optimal_bufsize':
posix/gawkmisc.c:136: error: structure has no member named `st_blksize'
posix/gawkmisc.c:136: error: structure has no member named `st_blksize'
posix/gawkmisc.c:140: error: structure has no member named `st_blksize'
posix/gawkmisc.c:140: error: structure has no member named `st_blksize'
posix/gawkmisc.c: In function `os_close_on_exec':
posix/gawkmisc.c:178: error: `F_GETFD' undeclared (first use in this function)
posix/gawkmisc.c:178: error: (Each undeclared identifier is reported only once
posix/gawkmisc.c:178: error: for each function it appears in.)
posix/gawkmisc.c:190: error: `F_SETFD' undeclared (first use in this function)
make[1]: *** [gawkmisc.o] Error 1
make[1]: Leaving directory `/cygdrive/c/Users/hoge/work/gawk-3.1.76'
make: *** [mingw32] Error 2


なぜにコンパイルエラー… cygwin じゃないんだから、posix/gawkmisc を見に行くのは違う気がするなあ。 F_GETFD やら F_SETFD ってのも。

問題のファイルの問題の関数を。

/* gawkmisc.c --- miscellaneous gawk routines that are OS specific.
 
   Copyright (C) 1986, 1988, 1989, 1991 - 1998, 2001 - 2004 the Free Software Foundation, Inc.

(ry)

/* optimal_bufsize --- determine optimal buffer size */

/*
 * Enhance this for debugging purposes, as follows:
 *
 * Always stat the file, stat buffer is used by higher-level code.
 *
 * if (AWKBUFSIZE == "exact")
 * 	return the file size
 * else if (AWKBUFSIZE == a number)
 * 	always return that number
 * else
 * 	if the size is < default_blocksize
 * 		return the size
 *	else
 *		return default_blocksize
 *	end if
 * endif
 *
 * Hair comes in an effort to only deal with AWKBUFSIZE
 * once, the first time this routine is called, instead of
 * every time.  Performance, dontyaknow.
 */

size_t
optimal_bufsize(fd, stb)
int fd;
struct stat *stb;
{
	char *val;
	static size_t env_val = 0;
	static short first = TRUE;
	static short exact = FALSE;

	/* force all members to zero in case OS doesn't use all of them. */
	memset(stb, '\0', sizeof(struct stat));

	/* always stat, in case stb is used by higher level code. */
	if (fstat(fd, stb) == -1)
		fatal("can't stat fd %d (%s)", fd, strerror(errno));

	if (first) {
		first = FALSE;

		if ((val = getenv("AWKBUFSIZE")) != NULL) {
			if (strcmp(val, "exact") == 0)
				exact = TRUE;
			else if (isdigit(*val)) {
				for (; *val && isdigit(*val); val++)
					env_val = (env_val * 10) + *val - '0';

				return env_val;
			}
		}
	} else if (! exact && env_val > 0)
		return env_val;
	/* else
	  	fall through */

	/*
	 * System V.n, n < 4, doesn't have the file system block size in the
	 * stat structure. So we have to make some sort of reasonable
	 * guess. We use stdio's BUFSIZ, since that is what it was
	 * meant for in the first place.
	 */
#ifdef HAVE_ST_BLKSIZE
#define DEFBLKSIZE	(stb->st_blksize > 0 ? stb->st_blksize : BUFSIZ)
#else
#define DEFBLKSIZE	BUFSIZ
#endif

	if (S_ISREG(stb->st_mode)		/* regular file */
	    && 0 < stb->st_size			/* non-zero size */
	    && (stb->st_size < DEFBLKSIZE	/* small file */
		|| exact))			/* or debugging */
		return stb->st_size;		/* use file size */

	return DEFBLKSIZE;
}

(ry)

/* os_close_on_exec --- set close on exec flag, print warning if fails */

void
os_close_on_exec(fd, name, what, dir)
int fd;
const char *name, *what, *dir;
{
	int curflags = 0;

	if (fd <= 2)	/* sanity */
		return;

	/*
	 * Per POSIX, use Read/Modify/Write - get the flags,
	 * add FD_CLOEXEC, set the flags back.
	 */

	if ((curflags = fcntl(fd, F_GETFD)) < 0) {
		warning(_("%s %s `%s': could not get fd flags: (fcntl F_GETFD: %s)"),
			what, dir, name, strerror(errno));
		return;
	}

#ifndef FD_CLOEXEC
#define FD_CLOEXEC	1
#endif

	curflags |= FD_CLOEXEC;

	if (fcntl(fd, F_SETFD, curflags) < 0)
		warning(_("%s %s `%s': could not set close-on-exec: (fcntl F_SETFD: %s)"),
			what, dir, name, strerror(errno));
}

/* os_isdir --- is this an fd on a directory? */

#if ! defined(S_ISDIR) && defined(S_IFDIR)
#define	S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
#endif

int
os_isdir(fd)
int fd;
{
	struct stat sbuf;

	return (fstat(fd, &sbuf) == 0 && S_ISDIR(sbuf.st_mode));
}

/* os_is_setuid --- true if running setuid root */

int
os_is_setuid()
{
	long uid, euid;

	uid = getuid();
	euid = geteuid();

	return (euid == 0 && euid != uid);
}

/* os_setbinmode --- set binary mode on file */

int
os_setbinmode(fd, mode)
int fd, mode;
{
#ifdef __CYGWIN__
	setmode (fd, mode);
#endif
	return 0;
}

/* os_restore_mode --- restore the original mode of the console device */

void
os_restore_mode (fd)
int fd;
{
	/* no-op */
	return;
}
 
/* files_are_same --- return true if files are identical */

int
files_are_same(struct stat *f1, struct stat *f2)
{
	return (f1->st_dev == f2->st_dev && f1->st_ino == f2->st_ino);
}

#ifdef __CYGWIN__
#include <stdio.h>
#include <sys/cygwin.h>

extern int _fmode;
void
cygwin_premain0 (int argc, char **argv, void *myself)
{
  static struct __cygwin_perfile pf[] =
  {
    {"", O_RDONLY | O_TEXT},
    /*{"", O_WRONLY | O_BINARY},*/
    {NULL, 0}
  };
  cygwin_internal (CW_PERFILE, pf);
}

void
cygwin_premain2 (int argc, char **argv, void *myself)
{
  setmode (fileno (stdin), O_TEXT);
}
#endif

どうもcygwinと同じと見なされている?

pc/gawkmisc.pc を見ると

/* optimal_bufsize --- determine optimal buffer size */

size_t
optimal_bufsize(fd, stb)
int fd;
struct stat *stb;
{
	/* force all members to zero in case OS doesn't use all of them. */
	memset(stb, '\0', sizeof(struct stat));

	/*
	 * DOS doesn't have the file system block size in the
	 * stat structure. So we have to make some sort of reasonable
	 * guess. We use stdio's BUFSIZ, since that is what it was
	 * meant for in the first place.
	 */
#define	DEFBLKSIZE	BUFSIZ

	if (fstat(fd, stb) == -1)
		fatal("can't stat fd %d (%s)", fd, strerror(errno));
	if (S_ISREG(stb->st_mode)
	    && 0 < stb->st_size && stb->st_size < DEFBLKSIZE) /* small file */
		return stb->st_size;
	return DEFBLKSIZE;
}

/* ispath --- return true if path has directory components */

int
ispath(file)
const char *file;
{
#ifdef __EMX__
	return (strpbrk(file, "/\\") != NULL ||
		(toupper(file[0]) >= 'A' && toupper(file[0]) <= 'Z' && file[1] == ':'));
#else
	for (; *file; file++) {
		switch (*file) {
		case '/':
		case '\\':
		case ':':
			return 1;
		}
	}
	return 0;
#endif
}

/* isdirpunct --- return true if char is a directory separator */

int
isdirpunct(c)
int c;
{
	return (strchr(":\\/", c) != NULL);
}

/* os_close_on_exec --- set close on exec flag, print warning if fails */

void
os_close_on_exec(fd, name, what, dir)
int fd;
const char *name, *what, *dir;
{
#if ! defined(_MSC_VER) && ! defined(__MINGW32__)
# if (defined(__DJGPP__) && (__DJGPP__ > 2 || __DJGPP_MINOR__ >= 4)) || defined __EMX__
	if (fd <= 2)	/* sanity */
		return;

	if (fcntl(fd, F_SETFD, 1) < 0)
		warning("%s %s `%s': could not set close-on-exec: %s",
			what, dir, name, strerror(errno));
# endif
#endif
}

(ry)

#ifdef __MINGW32__

extern void *xmalloc (size_t);

int
setenv (const char *name, const char *value, int rewrite)
{
  char *entry;

  if (*value == '=')
    ++value;

  if (getenv (name) && !rewrite)
    return 0;

  entry = xmalloc (strlen (name) + 1 + strlen (value) + 1);
  strcat (strcat (strcpy (entry, name), "="), value);
  if (putenv (entry) != 0)
    {
      free (entry);
      return -1;
    }
  return 0;
}

int
unsetenv (const char *name)
{
  if (!name || !*name || strchr (name, '=') != NULL)
    return -1;

  return setenv (name, "", 1);
}

#endif	/* __MINGW32__ */

こっちだよなあ。

■_

2010年12月27日

■_

・ガンダム創世
ダムエーで連載されているやつではこれも好き。 完結するまで(ってどこまでやるんだ?)単行本は無理かなあ。

・Prologの技芸
ついったのTLに復刊リクエストが流れてきたんですが。 原著はその後改訂されているし、復刊というのもどうかなあと (内容的にどれほど今でも「使える」のだろうかとか)。 書籍として(確かハードカバーだよね、あれ。そこまでやるかどうかはともかく) 「復刊」するよりはむしろ海外の本でよくあるように、 無料でWebに公開というわけにはいかんのかしらん (いろいろ難しいんだろうな。きっと)。

■_ gawk

昨日の

28. Many code cleanups. Removed code for many old, unsupported systems:
	- Atari
	- Amiga
	- BeOS
	- Cray
	- MIPS RiscOS
	- MS-DOS with Microsoft Compiler
	- MS-Windows with Microsoft Compiler
	- NeXT
	- SunOS 3.x, Sun 386 (Road Runner)
	- Tandem (non-POSIX)
	- Probably others that I've forgotten

が気になったのでちょっと調べてみた。

まずは tar 玉といたディレクトリの一覧

total 3281
drwx------+ 1 kbk None  16384 2010-12-27 19:52 .
drwx------+ 1 kbk None 131072 2010-12-27 20:51 ..
-rwx------+ 1 kbk None  93787 2010-12-23 04:09 ABOUT-NLS
-rwx------+ 1 kbk None    495 2010-10-31 19:25 AUTHORS
-rwx------+ 1 kbk None  35147 2010-10-31 19:25 COPYING
-rwx------+ 1 kbk None 348539 2010-12-24 20:00 ChangeLog
-rwx------+ 1 kbk None   3375 2010-12-02 03:36 FUTURES
-rwx------+ 1 kbk None   9416 2010-10-31 19:25 INSTALL
-rwx------+ 1 kbk None    891 2010-10-31 19:25 LIMITATIONS
-rwx------+ 1 kbk None   5064 2010-11-30 05:05 Makefile.am
-rwx------+ 1 kbk None  35318 2010-12-24 19:52 Makefile.in
-rwx------+ 1 kbk None  88183 2010-12-24 19:56 NEWS
-rwx------+ 1 kbk None   1619 2010-12-02 04:51 POSIX.STD
-rwx------+ 1 kbk None    678 2010-10-31 19:25 PROBLEMS
-rwx------+ 1 kbk None   3621 2010-10-31 19:25 README
drwx------+ 1 kbk None   4096 2010-12-27 19:51 README_d
-rwx------+ 1 kbk None    572 2010-12-22 03:59 TODO
-rwx------+ 1 kbk None  35924 2010-12-24 19:52 aclocal.m4
-rwx------+ 1 kbk None  32418 2010-12-19 03:11 array.c
-rwx------+ 1 kbk None  38360 2010-12-20 05:49 awk.h
-rwx------+ 1 kbk None 234341 2010-12-24 19:57 awkgram.c
-rwx------+ 1 kbk None 141200 2010-12-19 03:11 awkgram.y
drwx------+ 1 kbk None   4096 2010-12-27 19:51 awklib
-rwx------+ 1 kbk None  24669 2010-11-17 15:45 awkprintf.h
-rwx------+ 1 kbk None   1216 2010-10-31 19:25 bisonfix.awk
-rwx------+ 1 kbk None  56728 2010-12-19 02:54 builtin.c
-rwx------+ 1 kbk None   5582 2010-11-23 04:03 cmd.h
-rwx------+ 1 kbk None 100148 2010-11-23 04:04 command.c
-rwx------+ 1 kbk None  38614 2010-11-23 04:03 command.y
-rwx------+ 1 kbk None  44208 2010-10-31 19:25 config.guess
-rwx------+ 1 kbk None  18442 2010-12-23 04:09 config.rpath
-rwx------+ 1 kbk None  32560 2010-10-31 19:25 config.sub
-rwx------+ 1 kbk None  12887 2010-12-24 19:52 configh.in
-rwx------+ 1 kbk None 359624 2010-12-24 19:52 configure
-rwx------+ 1 kbk None   9482 2010-12-24 19:51 configure.ac
-rwx------+ 1 kbk None   2182 2010-12-24 19:56 custom.h
-rwx------+ 1 kbk None 137173 2010-12-06 03:34 debug.c
-rwx------+ 1 kbk None  17574 2010-10-31 19:25 depcomp
-rwx------+ 1 kbk None 124836 2010-10-31 19:25 dfa.c
-rwx------+ 1 kbk None   4274 2010-10-31 19:25 dfa.h
drwx------+ 1 kbk None   8192 2010-12-27 19:51 doc
-rwx------+ 1 kbk None  63416 2010-12-19 02:54 eval.c
-rwx------+ 1 kbk None    964 2010-10-31 19:25 eval_d.c
-rwx------+ 1 kbk None    968 2010-10-31 19:25 eval_p.c
-rwx------+ 1 kbk None   7435 2010-12-20 05:49 ext.c
drwx------+ 1 kbk None   4096 2010-12-27 19:51 extension
-rwx------+ 1 kbk None  41399 2010-12-20 05:49 field.c
-rwx------+ 1 kbk None   3226 2010-12-19 02:53 floatcomp.c
-rwx------+ 1 kbk None   1879 2010-10-31 19:25 floatmagic.h
-rwx------+ 1 kbk None   1561 2010-12-19 03:11 gawkmisc.c
-rwx------+ 1 kbk None  33419 2010-10-31 19:25 getopt.c
-rwx------+ 1 kbk None   6740 2010-10-31 19:25 getopt.h
-rwx------+ 1 kbk None   4778 2010-10-31 19:25 getopt1.c
-rwx------+ 1 kbk None   4828 2010-10-31 19:25 getopt_int.h
-rwx------+ 1 kbk None  10098 2010-12-23 04:16 gettext.h
-rwx------+ 1 kbk None   2023 2010-10-31 19:25 hard-locale.h
-rwx------+ 1 kbk None  13184 2010-10-31 19:25 install-sh
-rwx------+ 1 kbk None  81571 2010-12-19 03:11 io.c
drwx------+ 1 kbk None   8192 2010-12-27 19:51 m4
-rwx------+ 1 kbk None  38219 2010-12-20 05:49 main.c
-rwx------+ 1 kbk None   1948 2010-10-31 19:25 mbsupport.h
-rwx------+ 1 kbk None  11135 2010-10-31 19:25 missing
drwx------+ 1 kbk None   4096 2010-12-27 19:51 missing_d
-rwx------+ 1 kbk None   3495 2010-10-31 19:25 mkinstalldirs
-rwx------+ 1 kbk None   3156 2010-11-17 15:45 msg.c
-rwx------+ 1 kbk None  20405 2010-12-20 05:49 node.c
drwx------+ 1 kbk None   4096 2010-12-27 19:52 pc
drwx------+ 1 kbk None   8192 2010-12-27 19:51 po
drwx------+ 1 kbk None      0 2010-12-27 19:51 posix
-rwx------+ 1 kbk None  30344 2010-12-06 03:31 profile.c
-rwx------+ 1 kbk None    977 2010-10-31 19:25 profile_p.c
-rwx------+ 1 kbk None   3565 2010-12-08 05:14 protos.h
-rwx------+ 1 kbk None  18853 2010-10-31 19:25 random.c
-rwx------+ 1 kbk None   1477 2010-10-31 19:25 random.h
-rwx------+ 1 kbk None  16819 2010-12-14 03:19 re.c
-rwx------+ 1 kbk None 112259 2010-10-31 19:25 regcomp.c
-rwx------+ 1 kbk None   3117 2010-12-19 03:11 regex.c
-rwx------+ 1 kbk None  21676 2010-10-31 19:25 regex.h
-rwx------+ 1 kbk None  47664 2010-10-31 19:25 regex_internal.c
-rwx------+ 1 kbk None  22344 2010-12-19 03:11 regex_internal.h
-rwx------+ 1 kbk None 128913 2010-10-31 19:25 regexec.c
-rwx------+ 1 kbk None   2696 2010-11-30 03:08 replace.c
drwx------+ 1 kbk None 131072 2010-12-27 19:52 test
-rwx------+ 1 kbk None     72 2010-12-24 19:52 version.c
-rwx------+ 1 kbk None     74 2010-11-17 15:45 version.in
drwx------+ 1 kbk None   4096 2010-12-27 19:52 vms
-rwx------+ 1 kbk None   9295 2010-10-31 19:25 xalloc.h
-rwx------+ 1 kbk None   6193 2010-10-31 19:25 ylwrap

pc というDOS や Windows 向けのファイルを収めているディレクトリはまだあるので、 そこを見る。

total 160
drwx------+ 1 kbk None  4096 2010-12-27 19:52 .
drwx------+ 1 kbk None 16384 2010-12-27 19:52 ..
-rwx------+ 1 kbk None 18727 2010-12-19 05:14 ChangeLog
-rwx------+ 1 kbk None  9997 2010-12-19 05:14 Makefile
-rwx------+ 1 kbk None 60810 2010-11-12 19:36 Makefile.tst
drwx------+ 1 kbk None     0 2010-12-27 19:52 awklib
-rwx------+ 1 kbk None 14250 2010-12-19 03:11 config.h
-rwx------+ 1 kbk None    65 2010-10-31 19:25 gawk.def
-rwx------+ 1 kbk None 12307 2010-12-19 03:12 gawkmisc.pc
-rwx------+ 1 kbk None   442 2010-12-19 03:11 getid.c
-rwx------+ 1 kbk None  1988 2010-10-31 19:25 install.awk
-rwx------+ 1 kbk None   706 2010-10-31 19:25 mkinstal.sh
-rwx------+ 1 kbk None  5227 2010-12-19 03:11 popen.c
-rwx------+ 1 kbk None   317 2010-12-19 03:11 popen.h

良くわからないので、Makefile を見てみる。

# Makefile for gawk (GNU awk)                                      Dec 2010
#
# - for GNU C (djgpp)         [32bit protected-mode executable for DOS]
# - for GNU C (emx)           [32bit executable for OS/2 or DOS or Windows32]
# - for GNU C (mingw32)	      [Windows32 executable for Windows 9x/NT/2K/XP/7]

# Tested with GNU make on Windows, OS/2 and DOS.

default:
	@echo "Enter $(MAK) target "
	@echo " where 'target' is chosen from                          "
	@echo "  djgpp ... DOS 32-bit exe [GNU C, Delorie, v2]         "
	@echo "  emx ..... OS/2 32-bit exe [emx/gcc; uses emxlibc.dll] "
	@echo "  emxnt ... NT exe [emx/gcc with RSXNT]                 "
	@echo "  emxbnd .. OS/2 and DOS 32-bit exe [emx/gcc]           "
	@echo "  mingw32 . Windows32 exe [Mingw32 GNU C]                   "
	@echo "  ----------------------------------------------------- "
	@echo "  test .... Perform tests (see README_d/README.pc)      "
	@echo "  install . Install gawk under $(prefix)/               "

# Support dropped in 4.0
# - for DJGPP v1.x            [DOS 32bit protected-mode executable]
# - for MS-Visual C/C++ 4.x   [Windows32 executable for Windows 9x/NT]
# - for Microsoft C 7         [16bit ececutable for DOS]
# - for Microsoft C 6.00A     [16bit executable for OS/2 or DOS]
#	@echo "  djgppv1 . DOS 32-bit exe [GNU C, Delorie, v1]         "
#	@echo "  msc ..... DOS exe [Microsoft C 7 & 8 (AKA 1.52)]      "
#	@echo "  msc6 .... DOS exe [Microsoft C 6.00a]                 "
#	@echo "  msc6os2 . OS/2 exe [Microsoft C 6.00a]                "
#	@echo "  msc6bnd . OS/2 and DOS exe [Microsoft C 6.00a]        "
#	@echo "  vcWin32 . Windows32 exe [Microsoft Visual C]              "
# Support dropped in 3.0
# - for Microsoft C 5.1       [16bit executable for OS/2 or DOS]
#	@echo "  msc51     DOS exe [Microsoft C 5.1]                   "
#	@echo "  msc51bnd  OS/2 and DOS exe [Microsoft C 5.1]          "

#======================= Configuration ==================================
RSPFILE = gawk.rsp
PRSPFILE = pgawk.rsp
DRSPFILE = dgawk.rsp

mingw 使えってことなのね。やっぱり。 正月休みにでもちょっといじってみるか。

■_ ネタ

これもクリスマスネタ?


Win32API質問箱 Build91
970 デフォルトの名無しさん [sage] 2010/12/24(金) 23:15:31 ID: Be:
    SetMerryXmas() 

971 デフォルトの名無しさん [sage] 2010/12/24(金) 23:57:19 ID: Be:
    Destroy(reaju) 

972 デフォルトの名無しさん [sage] 2010/12/25(土) 00:16:41 ID: Be:
    xmas->Release() 

973 デフォルトの名無しさん [sage] 2010/12/25(土) 00:25:01 ID: Be:
    santakuro-su->tonakai->release();
    santakuro-su->open(purezento); 

974 デフォルトの名無しさん [sage] 2010/12/25(土) 00:32:53 ID: Be:
    virtual void lover() const; 

975 デフォルトの名無しさん [sage] 2010/12/25(土) 00:45:46 ID: Be:
    WaitForSingleXmas() 

976 デフォルトの名無しさん [sage] 2010/12/25(土) 00:46:49 ID: Be:
    >>974
    永遠の愛は絵空事でしかなく、ただ虚しさだけ残るか 

977 デフォルトの名無しさん [sage] 2010/12/25(土) 03:32:05 ID: Be:
    WaitForSingleXmas() 

978 デフォルトの名無しさん [sage] 2010/12/25(土) 03:42:26 ID: Be:
    DestroyXmas() 

979 デフォルトの名無しさん [sage] 2010/12/25(土) 03:46:45 ID: Be:
    GetXmasPresent() 

980 デフォルトの名無しさん [sage] 2010/12/25(土) 04:32:19 ID: Be:
    クリスマスプレゼント欲しい奴って意外といるのか?w 

981 デフォルトの名無しさん [sage] 2010/12/25(土) 04:56:58 ID: Be:
    HANDLE WINAPI GetXmasPresent()
    {
      return INVALID_HANDLE_VALUE ;
    } 

988 デフォルトの名無しさん [sage] 2010/12/25(土) 21:15:58 ID: Be:
    while (!IsPresent(L"MonsterHunter", L"Portable", 3))
    {
            Sex();
            GetXmasPresent();
    } 

989 デフォルトの名無しさん [sage] 2010/12/25(土) 23:13:07 ID: Be:
    ほらよ
    http://msdn.microsoft.com/ja-jp/library/cc428323.aspx 

990 デフォルトの名無しさん [sage] 2010/12/25(土) 23:15:40 ID: Be:
    失敗するのか、この関数w 

991 デフォルトの名無しさん [sage] 2010/12/25(土) 23:17:18 ID: Be:
    そりゃNULLとか渡したら失敗するだろう 

992 デフォルトの名無しさん [sage] 2010/12/25(土) 23:23:16 ID: Be:
    これだけ頭悪そうな関数だと確認せずに書き込みそうで・・・ 

993 デフォルトの名無しさん [sage] 2010/12/25(土) 23:25:37 ID: Be:
    ぬるぽ 


■_


年収1500万円超えたフリーのプログラマだけど何か質問ある? - 痛い信者(ノ∀`)
215 以下、名無しにかわりましてVIPがお送りします [] 2010/12/27(月) 09:32:15.12 ID:fkm8cAZeP
    乗りかかった船で答えておくと、
    入門書でなく参考書で言うなら、本屋でパラパラ開いて自分で把握出来る内容が書かれている物を買うといい
    例えそれが幼稚園レベルでも、あるいはそうでなくても構わないから、「私が欲しい情報が、そこに書かれている事」 だけが条件

    そして多分最後まで持っている本は、大抵は辞書のようなリファレンスになると思う
    文章でまっすぐ書かれた物でなく、断片的に、網羅された、カタログのようなリファレンス本 

218 以下、名無しにかわりましてVIPがお送りします [] 2010/12/27(月) 09:44:34.83 ID:fkm8cAZeP
    プログラミングは前提知識の嵐なので、例えば最終的にグラフィクスがやりたかった、としても
    その手前に必要な知識が嵐のように出てくる。 だからもしも求めるなにかが自分にとって初学だった場合、
    例え過去に何年違う概念で知識を持っていたとしても、必要な前提の答えを探して、それが書かれている物を追うといい

    スキップすればするほど迷いが増える。これは本当。急がば周れば最速で答えに辿り着く 

215 の内容には同意。

■_ あとで(プログラムを)読む


jkff/ire - GitHub
What's this

ire is a library for incremental regular expression matching, based on further 
development of the ideas from Dan Piponi's famous blogpost Fast Incremental Regular 
Expression Matching with Monoids.

    * ire is for "incremental", "regular", "expressions"
    * incremental means "fast recomputation of results according to changes of
      input string" (not pattern)
    * regular means "regular" - t.i. no backrefs or other Perl magic.

incremental というのがよくわからん。って、リストの二番目か。

■_

2010年12月26日

■_

・ポメラ
ランバ・ラルモデルを買ってしまったわけで。 三日ばかし使った感想。 1) 格納状態だと思ったより厚みがある 2) ちょっと重い? 3) 電車なんかで使うときには親指打ちができるキーボードのほうが良いかとも思いましたが、 これはまあどういう目的で使うかにもよりますから、今のものでも悪くはないかと。 キーボードの感触は悪くないです。

・Computer History Channel
YouTube にそういうチャンネルがあるらしく。 結構面白そうなのがそろってますね。全部観ていくのは大変だなあ(英語だし)。 YouTube - The Atanasoff-Berry Computer In Operation

■_

↑の YouTube のリンク先にある動画について。


The first electronic digital computer. : programming

This isn't really programming, but i do recommend checking out /ECE/


You might want to check out the youtube channel of the computer history museum.

I don't understand most of this video, but I still find it fascinating.

最初期のコンピューターについてはいろいろ見解があって、 何が最初のコンピューターかというのも意見が分かれてるのですよね。 とはいえ、ABCを(今日的な意味での)コンピューターと呼べるかというと… 無理筋な気が。確か、ENIAC の特許のどれだかを無効にする根拠には なってたと記憶しています。

誰がどうやってコンピュータを創ったのか?
…あれ、この本今絶版状態?

ENIAC神話の崩れた日 ブレインズ―コンピュータに賭けた男たち (1) (ヤングジャンプ・コミックスBJ) ブレインズ―コンピュータに賭けた男たち (2) (ヤングジャンプ・コミックスBJ)

ブレインズの続き書いてくれないかなあ…

■_ gawk

次はやはり 4.0 になるらしく。


Next gawk test release available - comp.lang.awk | Google Groups
Newsgroups: comp.lang.awk
From: arn...@skeeve.com (Aharon Robbins)
Date: Fri, 24 Dec 2010 11:24:23 +0000 (UTC)
Subject: Next gawk test release available

Get it at http://www.skeeve.com/gawk/gawk-3.1.76.tar.gz.  It reflects
the current state of the Savannah Git repo, at least as of the moment.

I've been working mostly on documentation, but the code has also been
getting some attention.

Here are the most recent additions to the NEWS file:

21. Arrays of arrays added. See the doc.

22. Per the GNU Coding Standards, dynamic extensions must now define
    a global symbol indicating that they are GPL-compatible. See
    the documentation and example extensions.
    THIS CHANGES BEHAVIOR!!!!

23. In POSIX mode, string comparisons use strcoll/wcscoll.
    THIS CHANGES BEHAVIOR!!!!

24. The option for raw sockets was removed, since it was never implemented.

25. If not in POSIX mode, gawk turns ranges of the form [d-h] into
    [defgh] before compiling a regexp.  Maybe this will stop all the
    questions about [a-z] matching uppercase letters.
    THIS CHANGES BEHAVIOR!!!!

26. PROCINFO["strftime"] now holds the default format for strftime().

27. Updated to latest infrastructure: Autoconf 2.68, Automake 1.11.1,
    Gettext 0.18.1, Bison 2.4.3.

Happy Holidays All!

Enjoy,

Arnold

23 の変更って影響でかそうだなあ…。 とはいえすでに wcscoll は正規表現のマッチングでは使われてたりするんだけど。 POSIX モードで、ってことはデフォルトでは違うということなのかな。

■_ で

NEWS ファイル見てみたら

   Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
   2005, 2006, 2007, 2009, 2010 Free Software Foundation, Inc.
   
   Copying and distribution of this file, with or without modification,
   are permitted in any medium without royalty provided the copyright
   notice and this notice are preserved.
 
Changes from 3.1.8 to 4.0.0 (3.1.8 から 4.0.0 での変更点)
---------------------------

1. The special files /dev/pid, /dev/ppid, /dev/pgrpid and /dev/user are
   now completely gone. Use PROCINFO instead.
   特殊ファイル /dev/pid, /dev/ppid, /dev/pgrpid, /dev/user は完全に除去されました。
   PROCINFO を使ってください。

2. The POSIX 2008 behavior for `sub' and `gsub' are now the default.
   THIS CHANGES BEHAVIOR!!!!
   POSIX 2008の振る舞いが `sub' と `gsub' の新しいデフォルトとなりました。

3. The \s and \S escape sequences are now recognized in regular expressions.
   正規表現中で、エスケープシーケンス \s および\S が認識されるようになりました。

4. The split() function accepts an optional fourth argument which is an array
   to hold the values of the separators.

   split() 関数は、セパレーター群の値を格納する配列を指定する省略可能な第四引数を
   受け付けるようになりました。

5. New -b / --characters-as-bytes option that means "hands off my data"; gawk
   won't try to treat input as a multibyte string.

   "hands off my data" を意味する新しい -b / --characters-as-bytes オプションが
   追加されました。このオプションにより gawk は入力をマルチバイト文字列として
   扱わないようにします。

6. New --sandbox option; see the doc.

7. Indirect function calls are now available.
   間接的な関数呼び出しが可能になりました。

8. Interval expressions are now part of default regular expressions for
   GNU Awk syntax.

   interval expression は GNU awk シンタックスの正規表現のデフォルトとなりました。
   (注: interval expression とは {1,4}のような表記です)

9. --gen-po is now correctly named --gen-pot.

10. switch / case is now enabled by default. There's no longer a need
    for a configure-time option.

11. Gawk now supports BEGINFILE and ENDFILE. See the doc for details.
    BEGINFILE と ENDFILE がサポートされました。詳しくはドキュメントを参照してください。

12. Directories named on the command line now produce a warning, not
    a fatal error, unless --posix or --traditional.

13. The new FPAT variable allows you to specify a regexp that matches
    the fields, instead of matching the field separator. The new patsplit()
    function gives the same capability for splitting.

14. All long options now have short options, for use in `#!' scripts.

    `#!' スクリプトで使うために、すべての長オプションは対応する短オプションを
    持つようになりました。

15. Support for IPv6 added via /inet6/... special file. /inet4/... forces
    IPv4 and /inet chooses the system default (probably IPv4).

16. Added a warning for /[:space:]/ that should be /[[:space:]]/.

    /[[:space:]]/ とすべきところを  /[:space:]/ と書いた場合の警告が追加されました。
 
17. Merged with John Haque's byte code internals. Adds dgawk debugger and
    possibly improved performance.

18. `break' and `continue' are no longer valid outside a loop, even with
    --traditional.

    `break' と `continue' は --traditional が指定されている場合であっても
     ループの外側では使えなくなりました。

19. POSIX character classes work with --traditional (BWK awk supports them).
    POSIX文字クラスが --traditional オプション指定があるときにも有効になりました
    (BWK awkがサポートしています)。

20. Nuked redundant --compat, --copyleft, and --usage long options.

21. Arrays of arrays added. See the doc.
    配列の配列が追加されました。詳しくはドキュメントを参照してください。

22. Per the GNU Coding Standards, dynamic extensions must now define
    a global symbol indicating that they are GPL-compatible. See
    the documentation and example extensions.
    THIS CHANGES BEHAVIOR!!!!

23. In POSIX mode, string comparisons use strcoll/wcscoll.
    THIS CHANGES BEHAVIOR!!!!
    POSIXモードでは、文字列比較で strcoll/wcscollを使うようになりました。

24. The option for raw sockets was removed, since it was never implemented.
    raw ソケットのためのオプションはそれが実装されることが決してなかったので削除されました。

25. If not in POSIX mode, gawk turns ranges of the form [d-h] into
    [defgh] before compiling a regexp.  Maybe this will stop all the
    questions about [a-z] matching uppercase letters.
    THIS CHANGES BEHAVIOR!!!!

26. PROCINFO["strftime"] now holds the default format for strftime().

27. Updated to latest infrastructure: Autoconf 2.68, Automake 1.11.1,
    Gettext 0.18.1, Bison 2.4.3.

28. Many code cleanups. Removed code for many old, unsupported systems:
	- Atari
	- Amiga
	- BeOS
	- Cray
	- MIPS RiscOS
	- MS-DOS with Microsoft Compiler
	- MS-Windows with Microsoft Compiler
	- NeXT
	- SunOS 3.x, Sun 386 (Road Runner)
	- Tandem (non-POSIX)
	- Probably others that I've forgotten

  

28 のリストにMS-Windows with Microsoft Compiler とかいうのがあるんですけど… いつの間にかメンテナーいなくなったのか、 cygwin なり使えということなんだろか。

■_

■_

夕方からちょっと調子が悪くて休んでたりしたので、中途半端なネタがががが。

2010年12月25日

■_

・tree の rotate
Binary Search Tree library in Python | Laurent Luce Blog を見ててふと思い出したのですが、AVL木やら赤黒木を Lisp (Scheme だったかも)で実装した 例をどこかで見たときに、回転 (rotate) の処理がえらく簡単に見えてびっくりした覚えが。 C なんかで書くと結構面倒だと思うんですが。

・だむえー
ジオング撃墜。ラストシューティング。 キシリア「総帥」がア・バオア・クーを ×× させようとするとか。 そいや、ドロスどうなってんだ?

今月の皇帝陛下
…えーと?

■_ 丸投げ


C言語プログラミングソースについての質問です | OKWave

数値を入力してその数値が10以上ならその数値に3足して2乗するプログラムを表しそれ以外の数値には不可能と表す(課題)
プログラミングを作りたいのですが。どなたかご教授お願いします
C言語はまだ授業で3カ月程度かじった程度でたいして知識もありません。
本当はこんな質問するべきではないのですが

すでについている回答にもありますが、「三ヶ月」やっててこれはないような。 ん、「ご教授」とあるからゼロから教えてくれということなんだろうかw

あー、でもあれか。自分の大学時代も、言語は FORTRAN だったけど このくらいのレベルの問題で苦労してたのがいたなあ。 さすがに自分とは違う学科だったか。

■_ 関数型言語は何故普及しないのかを考える

ぶっちゃけ、あまりマイナーなのも困るけど一般的になりすぎるのも困るんじゃないかと(笑)


関数型言語は何故普及しないのかを考える 
692 デフォルトの名無しさん [sage] 2010/12/23(木) 21:25:59 ID: Be:
    純粋関数型が流行るとして主として何に使われるの?
    >>622は論理回路、金融デリバティブと書いてるが他にもある? 

693 デフォルトの名無しさん [sage] 2010/12/23(木) 21:31:32 ID: Be:
    要するに
    科学技術計算ではFORTRANに勝てず
    低水準の仕事ではCやアセンブラに勝てず
    事務計算ではCOBOLに勝てず
    WebではJavaやLLに勝てないから
    きんゆうでりばてぃぶとかになるのか? 

694 デフォルトの名無しさん [sage] 2010/12/23(木) 21:39:23 ID: Be:
    構文解析 

695 デフォルトの名無しさん [sage] 2010/12/23(木) 22:00:50 ID: Be:
    >>692
    おもちゃとして遊びに使われるに決まってる

    おれは Haskell で遊んでるぞ 

696 デフォルトの名無しさん [sage] 2010/12/23(木) 22:09:14 ID: Be:
    結論 : 実用に使えない高級なおもちゃ 

700 デフォルトの名無しさん [sage] 2010/12/23(木) 22:49:11 ID: Be:
    >>693
    さすがにCOBOLには勝ってるのでは…

    それと、低水準の処理でアセンブラに「勝てる」言語など、永遠に登場しないだろう。
    コンピュータ・アーキテクチャが変わりでもしない限り。 

701 デフォルトの名無しさん [sage] 2010/12/23(木) 23:21:24 ID: Be:
    >>700
    いやマジでつっこまれてもw

    COBOLって任意桁数のBCD演算やらISAMやらを組み込みで持ってて
    メインフレームの固定長データセットに非常に相性が良いようだし
    COBOLが使われてる分野では未だに圧倒的なシェアを誇る言語だと
    思っていたけど、何しろ全然詳しくないので…

    事務処理の世界はもう関数型の独壇場だったのか? 

702 デフォルトの名無しさん [sage] 2010/12/23(木) 23:30:17 ID: Be:
    そんなことない。絶賛Javaで書き直しまたはそのままCOBOLで放置プレイ中だよ。 

703 デフォルトの名無しさん [sage] 2010/12/23(木) 23:33:43 ID: Be:
    関数型で事務処理は聞いた事がないが、探せばあると思う。 

704 デフォルトの名無しさん [sage] 2010/12/23(木) 23:36:57 ID: Be:
    あんまよく知らないんだけどいわゆる事務処理って何?
    例えば給与明細の紙を出力するためにデータベースからデータを取ってきて
    それを整形表示して印刷とかそんなの? 

705 デフォルトの名無しさん [sage] 2010/12/23(木) 23:38:50 ID: Be:
    会社が事務処理をコンピュータ化したものが事務処理の定義でいいだろう。
    相当範囲は広い。 

706 デフォルトの名無しさん [sage] 2010/12/23(木) 23:44:16 ID: Be:
    やはり今時なら、Webアプリが簡単に組めるよ!と言い張れないと流行らないな。 

707 デフォルトの名無しさん [sage] 2010/12/23(木) 23:46:38 ID: Be:
    まあ科学技術計算、低水準、組み込み、事務、webで
    勝てないのに普及させるのは相当難しくないか? 

708 デフォルトの名無しさん [sage] 2010/12/23(木) 23:48:49 ID: Be:
    >>704
    うん俺もそんなんをイメージしていた
    汎用機にもツリー型とかリレーショナルなデータベースはあるはずだけど
    固定長のISAMファイルって要するに簡易的なデータベースだから
    ただのISAMでやってるケースも多いのではと思われ
    バッチだけでなくオンライン的な処理が必要な場合は
    資源管理のためにトランザクションモニタとかジョブキューとか使うんだろう

    Javaは特別にその種の仕事に特化した言語じゃないから、
    J2EEあたりのブクブクに太ってた頃のJavaでリプレースしようとして
    泣いた会社は結構あるのでは
    全然詳しく無いし、ただの想像だけど 

717 デフォルトの名無しさん [sage] 2010/12/24(金) 05:45:44 ID: Be:
    >>700-701
    http://www.indeed.com/jobtrends?q=Perl,PHP,Python,Ruby,COBOL,Fortran,Lisp,SML,Haskell
    COBOLの求人はLLに抜かれましたが、関数型言語の数十倍あります。

    http://www.indeed.com/jobtrends?q=Lisp,SML,Haskell,Scala,Clojure
    古参をごぼう抜きしたScalaは普及が続くかも知れません。 

718 デフォルトの名無しさん [sage] 2010/12/24(金) 07:46:13 ID: Be:
    なんで関数型の「流行る分野」を考えようとするのか分らんな
    プログラムしてて楽しければ、役に立たなくてもいいじゃん

    (応用じゃない)純粋な数学と同じだよ 

719 デフォルトの名無しさん [sage] 2010/12/24(金) 07:48:44 ID: Be:
    >>718
    なんで考えるかというとそういう趣旨のスレだから 

721 デフォルトの名無しさん [sage] 2010/12/24(金) 07:52:41 ID: Be:
    俺はこんな難解な言語もマスターしているんだぜ!
    数学的思考が出来ないドカタは理解出来なくて当然!

    こういう上から目線が多いから、いつまでたっても普及しない。

723 デフォルトの名無しさん [sage] 2010/12/24(金) 07:54:35 ID: Be:
    >>721
    それは、はっきりいって、あると思う。 

727 デフォルトの名無しさん [sage] 2010/12/24(金) 10:58:42 ID: Be:
    >>721
    そもそも関数型を本当に普及させたいのかと疑問に思う
    自分はポルシェを乗り回せるぜ、というひとは、ポルシェがカローラになるより
    ポルシェのままのほうがうれしいのでは? 

728 デフォルトの名無しさん [sage] 2010/12/24(金) 12:36:18 ID: Be:
    >>727
    それもあるし、関数型が普及する必要があるとみんな思ってるのかも疑問

    普及する必要あるのか?

    無ければ普及しないぞ 

729 デフォルトの名無しさん [sage] 2010/12/24(金) 13:23:24 ID: Be:
    >>721
    Haskellは、IOモナドが分かりにくいのが一番の理由じゃないかな。
    副作用を分かりやすく形式化したもののはずなのに、これが分かりにくくて普及しないって、にんともかんとも。 

730 デフォルトの名無しさん [sage] 2010/12/24(金) 15:37:43 ID: Be:
    >>728
    部分評価とか非正格評価は分散サーバとかに使える。
    純粋ナンタラで美しいィィ!とか
    モナドはストリームより表現力が上ェェェ!
    とかはどうでもいい。 

731 デフォルトの名無しさん [sage] 2010/12/24(金) 15:56:03 ID: Be:
    >>728
    普及した方が、給料は上がる。 

732 デフォルトの名無しさん [sage] 2010/12/24(金) 16:29:50 ID: Be:
    >>731
    一般に、普及すると仕事は増えるけど給料は下がるのでは

    需要「だけ」が増えれば給料も上がるかもしれないが
    そういう都合のいい普及の仕方ってあるのだろうか 

733 デフォルトの名無しさん [sage] 2010/12/24(金) 16:49:37 ID: Be:
    >>732
    普及の程度にもよるけど。10年後に世の中の主流が
    Haskellになると周知されたら、今、ソフトウェアハウス
    で月給40万のHaskellプログラマの月給は転職前提で
    100万を超える。そういう意味で。それを夢見て。 

■_

なんかひっかけだったらしく。

【ナポレオン】長谷川哲也30【アイゼンファウスト】
692 名無しんぼ@お腹いっぱい [sage] 2010/12/21(火) 10:25:57 ID:tX4nlpM60 Be:
    えーっ、ほんとに終わっちゃうの? >作者ブログ
    やっぱりアウステルリッツにループで終了ということだったのか 

693 名無しんぼ@お腹いっぱい [sage] 2010/12/21(火) 10:27:51 ID:L1Mumrw60 Be:
    今日のにっきは実にウィットに富んだネタですね
    ですよね?
    ふつーに第一執政編始まるんですよね? 

694 名無しんぼ@お腹いっぱい [sage] 2010/12/21(火) 11:12:33 ID:kUjyDSrV0 Be:
    嘘だろおい 

695 名無しんぼ@お腹いっぱい [sage] 2010/12/21(火) 12:06:29 ID:8k6n1IoE0 Be:
    頭真っ白orz

    嘘だと言ってよバーニィ……。 

702 名無しんぼ@お腹いっぱい [sage] 2010/12/21(火) 13:05:35 ID:tX4nlpM60 Be:
    「ナポレオン 獅子の時代」が完結で、
    次からは「ナポレオン ◯◯の時代」が始まるんじゃね?
    わざわざ副題ついてんだし
    獅子の次って何だろ 

745 名無しんぼ@お腹いっぱい [sage] 2010/12/22(水) 08:33:16 ID:nbvEkF020 Be:
    12月1日時点では、新章突入ってあるのに、
    その後、事態が急展開したってこと?
    フデタニンのtwitterアイコンはナポのままだけど、
    変わっちゃうのかよ 

747 名無しんぼ@お腹いっぱい [] 2010/12/22(水) 11:07:38 ID:DsDd7+600 Be:
    はせがー先生のブログコメント見たか?
    本気で最終回だぞ!! 本気で!!

    世界が終わった・・・orz 

751 [―{}@{}@{}-] 名無しんぼ@お腹いっぱい [sage] 2010/12/22(水) 11:20:26 ID:7bf7BS1FP Be:
    なんかブログに悲壮感があんまりないなあ
    ジョジョ6部みたいにタイトル変えて1巻からやり直しって目がまだあるような
    ちょうど次で6話たまって15巻分だし
    25日くらいには早売りゲットできると思うので、
    即報告するね 

752 名無しんぼ@お腹いっぱい [sage] 2010/12/22(水) 11:22:14 ID:4YJHmAlG0 Be:
    >>751
    いつもならフラゲ報告は全力回避するんだが、今回ばかりは耐えられそうにない 

753 名無しんぼ@お腹いっぱい [sage] 2010/12/22(水) 11:34:34 ID:ahbB8IB70 Be:
    >>751
    あのコメントで新章前の冗談の目はほとんど消えたと思う
    後はどっかが拾ってくれるのを願うだけだがアワーズが既に場末だからな…

785 名無しんぼ@お腹いっぱい [sage] 2010/12/23(木) 00:45:03 ID:5n3PJiB20 Be:
    まさか、ネイが出ないまま終わるとは。 

796 名無しんぼ@お腹いっぱい [sage] 2010/12/23(木) 01:02:44 ID:usku/o170 Be:
    >>785
    それはネイよな... 

807 名無しんぼ@お腹いっぱい [sage] 2010/12/23(木) 07:40:59 ID:mRiJcr6o0 Be:
    ブログ何度も読みかえした。
    「獅子の時代」は最終回だけど、
    長谷川漫画がアワーズから消えるとはどこにも書いてないんだ。
    炎上云々も、読者ページのノリで読解すると
    どこまで本気かわからないんだよな。
    ハセガーとしては、ブリュメールもマレンゴもじっくり描きたかったのに
    編集サイドの意向で、第一部は切り上げ
    いきなり皇帝編やれとか言われショボーンなんじゃね。
    読者としてはそれでも全然OKだけど。 

810 名無しんぼ@お腹いっぱい [sage] 2010/12/23(木) 08:44:20 ID:/dUiJFzX0 Be:
    >>807
    マレンゴは漫画としても一番盛り上がるイベントなんだから
    それを飛ばせと命じるのはマジでありえないと思う

    つーか円満な打ち切り(そんなモノがあるとは思わないが)なら、マレンゴの終わりまでは続けさせると思う
    あまりにもタイミングとして中途半端
    なにか事件があったとしか思えない 

857 名無しんぼ@お腹いっぱい [sage] 2010/12/24(金) 08:59:53 ID:kgl6wM1X0 Be:
    だいたいナポとドリフしか読むとこないから買わずに立ち読みで済ますんだよな。
    これに風雲児たちとヒストリエとヴィンランドサガくらい載ってたら買ってるよ。 

858 名無しんぼ@お腹いっぱい [sage] 2010/12/24(金) 09:40:12 ID:Lij2CuoD0 Be:
    >>857
    俺もヒストリエ、ヴィンサガ、ナポレオン、あと伊藤真美の秘身譚とか引き抜いて、
    歴史マンガ専門雑誌作ったら絶対購読するのにとよく妄想するわ
    日本枠と中華枠、ギャグ枠も充実させてさー 

864 名無しんぼ@お腹いっぱい [sage] 2010/12/24(金) 14:33:21 ID:wng/S7p+0 Be:
    ブログ読んだけど、山崎邦正の名前が出るっていってることはつまり終わる終わる詐欺だな
    ああよかったよかった アルプス越え期待してるよ 

865 名無しんぼ@お腹いっぱい [sage] 2010/12/24(金) 14:53:32 ID:5fQNf9sj0 Be:
    うん、ブログの文言をよく読めば、
    題名はどうあれ、ナポレオン漫画が打ち切りになるとは
    一言も書いてない。

    作者もたて読みくらいしこんでおいてくれよ。

    自分の予想では第二部いきなりアウステルリッツに戻る。
    あれ、トラファルガーは。。。 

868 名無しんぼ@お腹いっぱい [sage] 2010/12/24(金) 17:46:50 ID:6Ey3iLWK0 Be:
    >>858
    あとチェーザレとへうげものを加えたら俺の本棚が一冊の雑誌になるわ 

877 名無しんぼ@お腹いっぱい [sage] 2010/12/25(土) 00:01:45 ID:kprtdGJQ0 Be:
    ガンダムだけの雑誌が存在できるのだから
    歴史漫画専門でもいけるべ 

883 名無しんぼ@お腹いっぱい [sage] 2010/12/25(土) 13:17:17 ID:KwpKyVdQ0 Be:
    >>877
    あれはガンダムだけってよりガンダムオリジンだけで存続してる雑誌だからなあ 

884 名無しんぼ@お腹いっぱい [sage] 2010/12/25(土) 16:01:23 ID:5c0eQSCqO Be:
    そのオリジンも既に星一号作戦の真っ只中、物語は作中時間で
    約1日で終わってしまう訳だが。 

886 名無しんぼ@お腹いっぱい [sage] 2010/12/25(土) 18:09:11 ID:Sdq9+hgSP Be:
    という訳で、ただのタイトル変更でした。
    http://www4.ocn.ne.jp/~davout/napohado.jpg 

なんだったんた ○| ̄|_

■_ くりすますつりー


Twitter / @Camille Roux: ruby -e "((1..20).to_a+[6] ...

  ruby -e "((1..20).to_a+[6]*4).each{|i|puts ('#'*i*2).center(80)};puts;puts 'Merry Christmas'.center(80) #Ruby #Christmas "

実行してみた。

                                       ##                                       
                                      ####                                      
                                     ######                                     
                                    ########                                    
                                   ##########                                   
                                  ############                                  
                                 ##############                                 
                                ################                                
                               ##################                               
                              ####################                              
                             ######################                             
                            ########################                            
                           ##########################                           
                          ############################                          
                         ##############################                         
                        ################################                        
                       ##################################                       
                      ####################################                      
                     ######################################                     
                    ########################################                    
                                  ############                                  
                                  ############                                  
                                  ############                                  
                                  ############                                  

                                Merry Christmas                                 

ツリーというよりはむしろ ↑ だろうという気がする。

■_

■_ Seven Languages in Seven Weeks

まつもとさんが http://twitter.com/yukihiro_matz/statuses/17573811415154690 で 来たと発言していたので、ああもう出たんだなあと Amazon さんをチェックしたところ

"通常2~5週間以内に発送します。 " ぐはっ ○| ̄|_

com の方で買うかなあ。いくらになるんだろ。

2010年12月24日

■_

進撃の巨人読んだ。

■_


推薦図書/必読書のためのスレッド 60 

310 デフォルトの名無しさん [sage] 2010/12/22(水) 13:01:44 ID: Be:
    There should be no hestation about learning a machine language; indeed, the author onece found it not
    uncommon to be writing programings in a half dozen different machine languages during the
    same week!
    これはこのスレ無理だろうな。
    辞書に載ってない単語もあるし 

311 デフォルトの名無しさん [sage] 2010/12/22(水) 13:33:53 ID: Be:
    辞書に載ってない単語というか、ただのスペルミスじゃないか? 

312 デフォルトの名無しさん [] 2010/12/22(水) 14:12:44 ID: Be:
    まぁ、英語は英語のまま理解してしまうようになってくると、
    自然な日本語にするのがかえってメンドーだったりするのはありがち。

316 デフォルトの名無しさん [sage] 2010/12/22(水) 14:47:13 ID: Be:
    機械語を学ぶことに躊躇いはないでしょう
    実のところ、著者はかつて珍しくないということが分かったthat
    半ダースの違った機械語でプログラミングのことを書くことがduring同じ週に

    ニッコマ以下でもこのくらい読めんだろ 

317 デフォルトの名無しさん [sage] 2010/12/22(水) 14:51:15 ID: Be:
    自動翻訳丸出しだな
    ↓excite翻訳
    機械語を学ぶことに関してhestationが全くあるはずがありません。
    本当に、作者oneceは同じ週に、1半ダースの異なった機械語でプログラミングを書くのが珍しくないのがわかりました! 

318 デフォルトの名無しさん [sage] 2010/12/22(水) 14:55:14 ID: Be:
    ところでhestationはその訳であっているのかね? 

320 デフォルトの名無しさん [sage] 2010/12/22(水) 15:03:13 ID: Be:
    >>318
    hesitation 

321 デフォルトの名無しさん [sage] 2010/12/22(水) 15:04:53 ID: Be:
    なんだよoneceって 

322 デフォルトの名無しさん [sage] 2010/12/22(水) 15:05:20 ID: Be:
    可哀想だから、もうそっとしておいてあげよう。 

323 デフォルトの名無しさん [] 2010/12/22(水) 15:20:07 ID: Be:
    >>314
    スレチに構ってもらってるだけありがたいと思え。

325 デフォルトの名無しさん [sage] 2010/12/22(水) 15:51:44 ID: Be:
    hesitation ぐらいの簡単な単語も知らないやつがいるのにびっくり 

326 デフォルトの名無しさん [sage] 2010/12/22(水) 16:11:13 ID: Be:
    もうちょっと煽りがうまくなったらまた来てね 

329 デフォルトの名無しさん [sage] 2010/12/22(水) 17:58:44 ID: Be:
    で、>>310を翻訳できる人はひとりもいない、と。
    それどころか翻訳された日本語の本を読んでいる人すらいない、と。 

330 デフォルトの名無しさん [sage] 2010/12/22(水) 18:04:46 ID: Be:
    なーんだ、翻訳された日本語を所有してる奴がドヤ顔してるだけか 

331 デフォルトの名無しさん [sage] 2010/12/22(水) 18:40:22 ID: Be:
    excite翻訳がほとんど正解じゃん
    優秀だね 

339 デフォルトの名無しさん [sage] 2010/12/22(水) 23:59:28 ID: Be:
    機械語を学ぶことに躊躇してはならない。
    実際著者はかつて、同じ週に6つもの異なる機械語を用いて
    プログラミングすることが珍しくないと知った。 

340 デフォルトの名無しさん [sage] 2010/12/23(木) 00:32:48 ID: Be:
    「writing programings」は「writing programs」の間違いだな
    多分、>>310を

    「機械語を学ぶということに躊躇があってはならない。実際、著者はかつて、
    同じ週のうちに半ダースの別々の機械語を用いてプログラムを書くのが
    珍しいわけではないとわかったのだ。」

    みたいに訳す人が分かりにくい糞訳者だと言われて

    「機械語を積極的に学ぼう。実際、一週間で6個の機械語を使うのも
    珍しくないことなんです。」

    と訳す人が、わかりやすくて最高の訳者だって評価されるんだろうねw 

341 デフォルトの名無しさん [sage] 2010/12/23(木) 00:43:36 ID: Be:
    >>340
    上のは糞訳者って言われても仕方ないと思う。 

342 デフォルトの名無しさん [sage] 2010/12/23(木) 00:47:40 ID: Be:
    >>340みたいな男の人に抱かれたい! 

    実際、多いときには週に6本のマシン語を書いていることに、
    あるとき気が付いた。

345 デフォルトの名無しさん [] 2010/12/23(木) 02:00:36 ID: Be:
    間違えた。
    6種類の異なる(アーキテクチャ向けの)
    機械語で、プログラムを書いていることに、
    気が付いた。 

346 デフォルトの名無しさん [sage] 2010/12/23(木) 02:24:07 ID: Be:
    出典はクヌースの著書か何かか? 

んー、元ねたに心当たりがない。なんだろう。

とはいえ、なんとも言い回しを考えるのが面倒な文だな。

■_

むずい。


Day 24 – Yule the Ancient Troll-tide Carol « Perl 6 Advent Calendar

Day 24 – Yule the Ancient Troll-tide Carol
By timtoady

When you open your gift on Christmas Eve, you discover a mirror in which you can see 
yourself. On the mirror is etched the statement:

    SUBJECTS IN MIRROR ARE CLOSER THAN THEY APPEAR

It doesn't look at all like a car mirror though. It seems quite flimsy, in fact, 
though it's made of some rather tough material that seems to defy breakage despite 
your best efforts as a two-year old…

(略)

Perl 6 continues this fine tradition of “positive trolling”. You know, in the olden 
days you could say “troll” to mean something happy and boisterous, as in “troll the 
ancient yuletide carol”. That's the kind of trolling we do, especially here in the 
Advent Calendar (one of the finest examples of the community recursively constructing 
itself). There are many other examples as well.

If you look at perl6.org, you will see several cultural hacks right there on the front 
page. The most obvious one is the butterfly, Camelia, but she represents a number of 
other hacks through image and words. As an image, she says:

    * Perl 6 is fun.
    * Perl 6 is organic.
    * Perl 6 is attractive.
    * Perl 6 is about clarity.
    * Perl 6 is personal and relational.
    * Perl 6 is a result of metamorphosis.
    * Perl 6 is both primitive and elaborate.
    * Perl 6 is friendly to women and children.

On the flip side, the image also says:

    * Perl 6 is not about sterile corporate image.
    * Perl 6 is not achingly beautiful, just pretty.
    * Perl 6 is not ill-behaved like a camel.
    * Perl 6 is not friendly to grinches.

It is on this visceral level that Camelia has turned out to be a most useful cultural 
hack, that tells us with a fair degree of certainty who the grinches are who want to 
steal Christmas. Every community has to deal with an influx of potentially poisonous 
people, and having an obvious target like Camelia to complain about induces such 
people to wave a flag reading: “Hey, I'm a troll. Hug me.”

And that's another cultural hack in the Perl 6 community. We believe in hugging 
trolls. Up to a point.

(略)

■_


programming languages - Is there any reason to use C++ instead of C, Perl, Python, etc? - Programmers - Stack Exchange

As a linux (server side) developer, I don't know where and why should I use C++.

Linux の (サーバーサイドの) 一開発者として、自分はどこでC++を使うべきなのかがわかりません。

When I'm going to performance, the first and last choice is C.

性能を主眼に置いた場合、最初の選択肢も最後の選択肢も C となります。

When "performance" isn't the main issue, programming languages like perl and 
python would be good choices.

“性能”が main issue でない場合には、Perl や Python のようなプログラミング言語は
良い選択肢となるでしょう。

Almost all of open source applications I know in this area has been written in C, perl 
and python, bash script, awk and even php, but no one goes to use C++.

この領域においてわたしが知っているほぼすべてのオープンソースのアプリケーションは
C で書かれているか、あるいは Perl、Python、bash スクリプト、awk、果ては PHP
というもので書かれていますか、C++ は使われていません。

I'm not discussing about some other areas like GUI or Web application, I'm just 
talking about Linux and about CLI and daemons.

GUI とか Webアプリケーションのような some other areas について議論するつもりはなく、
わたしが話題にしたいのは Linux についてかあるいは CLI やデーモンについてです。

Is there any satisfiable reason to use C++?

C++ を使うに足る理由というものはあるのでしょうか?

Thanks

I presume "server-side" in this context means headless services, and not the 
kernel itself? – sdg


Yes, just about CLI shell apps. – Ehsan


So something that can be done using C, perl and python together can be done using C++ 
only. And you are asking why to use C++? – Manoj R 


    When I'm going to performance, the first and last choice is C.

And that's where you should back up. Now, I cannot, at all, speak for server development.
Perhaps there is indeed no compelling reason to prefer C++ over the alternatives.

But generally speaking, the reason to use C++ rather than other languages is indeed performance.
The reason for that is that C++ offers a means of abstraction that has, unlike all other
languages that I know, no performance overhead at runtime.

This allows writing very efficient code that still has a very high abstraction level.

Consider the usual abstractions: virtual functions, function pointers, and the PIMPL 
idiom. All of these rely on indirection that is at runtime resolved by pointer 
arithmetic. In other words, it incurs a performance cost (however small that may be).

C++, on the other hand, offers an indirection mechanism that incurs no (performance) 
cost: templates. (This advantage is paid for with a (sometimes hugely) increased 
compile time.)

Consider the example of a generic sort function.
ここで汎用のソート関数を例に考えてみましょう。

In C, the function qsort takes a function pointer that implements the logic by which 
elements are ordered relative to one another. Java's Arrays.sort function comes in 
several variants; one of them sorts arbitrary objects and requires a Comparator object 
be passed to it that works much like the function pointer in C's qsort. But there are 
several more overloads for the “native” Java types. And each of them has an own copy 
of the sort method – a horrible code duplication.

Java illustrates a general dichotomy here: either you have code duplication or you 
incur a runtime overhead.

In C++, the sort function works much like qsort in C, with one small but fundamental 
difference: the comparator that is passed into the function is a template parameter. 
That means that its call can be inlined. No indirection is necessary to compare two 
objects. In a tight loop (as is the case here) this can actually make a substantial 
difference.

Not surprisingly, the C++ sort function outperforms C's sort even if the underlying 
algorithm is the same. This is especially noticeable when the actual comparison logic 
is cheap.

Now, I am not saying that C++ is a priori more efficient than C (or other languages), 
nor that it a priori offers a higher abstraction. What it does offer is an abstraction 
that is very high and incredibly cheap at the same time so that you often don't need 
to choose between efficient and reusable code.


    Is there any satisfiable reason to use C++?

   1. Templates and the STL. You trade a little build time (and some potentially
      incomprehensible error messages) for a lot of useful abstraction and labor-saving
      tools, with no appreciable run-time performance hit (although the binary footprint
      may be a little larger).

      It takes a while to wrap your head around (took me a couple of years before it
      clicked), but once you do it can make life a lot simpler.

   2. Text processing in C++ is orders of magnitude less painful than it is in C. 


STL is the only reason I ever consider using C++. – dan_waterworth

STL はわたしに C++ を使おうとさせるただ一つの理由です。

Heh I found especially text processing painful compared to let's say Python.. – Nils


Boost is the only reason I still use C++. – Ferruccio yesterday

Boost はわたしが今でも C++ を使う唯一の理由です。

C++ is about as fast as C (some things are faster, some slower), and it offers better 
abstractions and organization. Classes work similarly to primitive types, allowing 
large amounts of code to be used without being held in mind. Operator overloading and 
templates make it possible to write code that functions better if data representations 
change. Exceptions can allow easier error-handling. The compiler can be used to check 
more stuff at compile-time.

The price you pay for this is a fairly nasty learning curve, and it's easier to make 
subtle mistakes in it than most other languages I'm familiar with.

So, I can't tell whether it would be worthwhile for you to learn it for what you're 
doing now. You can certainly get by with combinations of Python or Perl and C, but C++ 
offers both abstraction and performance in one hard-to-get-used-to package.


RAII for teh win baby.

Seriously deterministic destruction in C++ makes code much clearer and safer with no 
overhead whatsoever.


I'm just switching from C to C++ and I think the gain is considerable, even if you 
don't have a need for Templates and OOP.

reddit でも大反響→ Is there any reason to use C++ instead of C, Perl, Python, etc? - Programmers - Stack Exchange : programming

で、たとえばの話、C++ が情報処理技術者試験で使われるプログラミング言語として 採用されるようなことはあるんでしょうか。とか (試験自体が以下略というのはなしで)。

■_

2010年12月23日

■_

・読んだ
プログラミング原論 人間はガジェットではない (ハヤカワ新書juice)
オススメ。 とはいえどうオススメなのか書くのが大変だな(笑) プログラミング原論は、思いっきり数学方面な内容です。 群だの半群だのモノイドとかでてくるし。 後者は いわゆるデジタルガジェットのひとつ、バーチャルリアリティの父と呼ばれる著者自らが、ウェブ上の「集合知」を全体主義と批判し、IT技術の「固定化」がはらむ危険に警鐘を鳴らす超話題作登場。小飼弾氏、廣瀬通孝氏推薦! つーことなんで、書評がすぐにでも書かれるんでないですかね。

・そろそろ 自宅サーバー派も見逃せない、月額1000円切る“格安VPS”2社を試す - Linuxレポート:ITpro
どうするかなあ。ここだとディスク容量が厳しいのだよね。 特にWebでなにやるということもないのだけど、ディスクが厳しいのはきつい。

Is there any reason to use C++ instead of C, Perl, Python, etc? - Programmers - Stack Exchange : programming programming languages - Is there any reason to use C++ instead of C, Perl, Python, etc? - Programmers - Stack Exchange

そいや、昨日は冬至だったので銭湯に行ってゆず湯に入ったのだった。

■_ sort

今日も Perl 6 Advent Calendar から。


Day 23 – It's some .sort of wonderful. « Perl 6 Advent Calendar

Continuing on our Perl 6 adventure.

Sorting various lists of things is an extremely common programming task, and Perl 6 
beefs up its sort function to help you get it done.

さまざまなリストをソートすることは、とても一般的なプログラミングのタスクであり、
あなたの手助けをするために Perl 6 はそのソート関数を beefs up しています。

It has your everyday, garden variety sort:

    # default type sensitive sort
    my @sorted = @unsorted.sort; # or sort @unsorted;

And, like Perl 5, allows you to use custom comparator functions:

そして、Perl 5 のように比較関数をカスタマイズできます。

    # numeric comparison
    my @sorted = @unsorted.sort: { $^a <=> $^b };

    # or if you prefer to use function calling semantics
    my @sorted = sort { $^a <=> $^b }, @unsorted;

    # string comparison ( similar to Perl 5 cmp )
    my @sorted = @unsorted.sort: { $^a leg $^b };

    # type dependent comparison
    my @sorted = @unsorted.sort: { $^a cmp $^b };

These can also be written with parenthesis around the comparator, in which case you 
don't need the colon. Handy for when you want to chain other methods after the sort:

    my @topten = @scores.sort( { $^b <=> $^a } ).list.munch(10);

A Small Aside… In Perl 6 the variables $a and $b don't have any special global 
significance like they do in Perl 5. Use normal named variables ($var), positional 
variables ($^var) or whatever variables (*) in the sort comparison block just like any 
other code block.

略


Natural Sorting

Standard lexical sorting returns items in “ASCIIbetical” order. Digits sort before 
upper case characters and both sort before lower case characters. People are often 
surprised / dismayed when they sort a list of strings and get something like:

    0
    1
    100
    11
    144th
    2
    21
    210
    3rd
    33rd
    AND
    ARE
    An
    Bit
    Can
    and
    by
    car
    d1
    d10
    d2

Which is perfectly correct, but not very intuitive for humans, especially for 
non-programmers.

“Natural” sorting would order numbers (strings of digits) sorted by order of 
magnitude then by magnitude before alphabetical position (upper or lower case).

Here is the same group of strings shown above sorted naturally:

    0
    1
    2
    3rd
    11
    21
    33rd
    100
    144th
    210
    An
    AND
    and
    ARE
    Bit
    by
    Can
    car
    d1
    d2
    d10

To do that, we want a simple transform we can apply to each term.

I'll use a subst method. It an analogue of the familiar s/// operator in method form.

    .subst(/(\d+)/, -> $/ { 0 ~ $0.chars.chr ~ $0 }, :g)

略

Merry Christmas, Happy sorting, and

May the Schwartz be with you!

■_


Perlについての質問箱 45箱目
511 デフォルトの名無しさん [] 2010/12/17(金) 22:49:36 ID: Be:
    Perlの処理で質問です.
    以下のようなdatファイルを読み込み,
    右側の数値が同じ場合,左側の数値をすべて足して(グループ化して)
    出力する,といった処理がしたいのですが,
    どのようにすればいいのでしょうか?

    --1st_out.dat--
    7 12
    10 12
    12 12
    10 12
    9 12
    9 12
    6 12
    6 12
    11 13
    9 13
    12 13
    11 13
    10 14
    10 14
    15 14
    12 14
    7 14

    希望する出力結果

    69 12
    43 13
    54 14 

512 デフォルトの名無しさん [sage] 2010/12/17(金) 22:58:41 ID: Be:
    まずsplitを使います
    ↓ 

513 デフォルトの名無しさん [sage] 2010/12/17(金) 22:59:28 ID: Be:
    次にハッシュでまとめます
    <終わり>

514 デフォルトの名無しさん [sage] 2010/12/17(金) 23:30:29 ID: Be:
    twitterのハッシュタグはどこらへんがハッシュなんだ? 

515 デフォルトの名無しさん [] 2010/12/17(金) 23:38:15 ID: Be:
    >>512-513
    どういったコードを書けばよいのでしょうか? 

516 デフォルトの名無しさん [] 2010/12/17(金) 23:38:24 ID: Be:
    >>510
    おぉ。そうだったんだ・・。 

517 デフォルトの名無しさん [] 2010/12/17(金) 23:50:03 ID: Be:
    my %h = ();
    foreach(split(/\r?\n/, $data)){
     my($k,$v) = split(/ +/, $_);
     $h{$v} += $k-0;
    }

    foreach(sort {$a-$b} keys %h){
     print "$h{$_} $_\n";
    } 

518 デフォルトの名無しさん [sage] 2010/12/17(金) 23:52:12 ID: Be:
    open (FH , "dat.txt" ) ;

    while (<FH>)
    {
    chomp ;
    @a = split / /;
    $h{$a[1]} += $a[0] ;
    }
    close (FH) ;

    print %h ; 

519 デフォルトの名無しさん [] 2010/12/17(金) 23:54:44 ID: Be:
    my %h = ();
    while($data =~ /(\d+) (\d+)/g){
     $h{$2} += $1-0;
    }
    for(sort {$a-$b} keys %h){
     print "$h{$_} $_\n";
    } 

520 512 [sage] 2010/12/17(金) 23:54:52 ID: Be:
    >>515
    こういったコードを書きゃいいんだ!!
    1st_out.datは適当にdat.txtとかなってる!
    chompとかsplitとかの引数の省略がわかりゃ初心者脱出だ!
    print %hは良く見てみればお望みの出力になってる!
    出力ぐらいは自分でやれ!

521 512 [sage] 2010/12/17(金) 23:56:59 ID: Be:
    間違った!
    こういうコードってのは>>518みたいなまるでクズのようなコードだ!
    ハッシュをまとめるってのは
    $h{$a[1]} += $a[0] ;
    だ!
    そんくらいは理解してくれ!
    何の統計か知らんか卒論落とすな! 

522 デフォルトの名無しさん [] 2010/12/17(金) 23:57:29 ID: Be:
    あ、-0 要らないんだった。 

523 デフォルトの名無しさん [sage] 2010/12/18(土) 00:02:07 ID: Be:
    どれが正しいのか分からんぞw 

524 デフォルトの名無しさん [sage] 2010/12/18(土) 00:05:41 ID: Be:
    >>520
    ありがとうございます.
    でもこんな出力結果がでました.

    211332610117914810142712253188346942352134316874410025422796508528424072411051269478614541589207349934511524844310619103 

525 512 [sage] 2010/12/18(土) 00:06:58 ID: Be:
    一番ただしいのはオレだ!
    ファイル名も直したぞ!
    コピペでいけるぞ!
    print のとこは自分で工夫しろ!


    open (FH , "1st_out.dat" ) ;

    while (<FH>)
    {
      chomp ;
      @a = split / /;
      $h{$a[1]} += $a[0] ;
    }
    close (FH) ;

    print %h ; 

526 512 [sage] 2010/12/18(土) 00:09:32 ID: Be:
    >>524
    それは
    print %h;
    の部分が悪いんだ!
    そこ改良すればちゃんと意味が通るはずだ!

    他の人のforeachでの出力を参考にしてくれ! >>517 >>519
    改行やらが無いのが俺の手抜きだ!
    もう寝る!!!! 

527 デフォルトの名無しさん [] 2010/12/18(土) 00:13:15 ID: Be:
    >>526
    しょぼーん(´・ω・`) 

528 デフォルトの名無しさん [] 2010/12/18(土) 00:16:26 ID: Be:
    もっと奇抜なコードを書いてくれ 

529 デフォルトの名無しさん [sage] 2010/12/18(土) 00:22:23 ID: Be:
    ワンライナーまだー 

530 デフォルトの名無しさん [sage] 2010/12/18(土) 00:24:13 ID: Be:
    >>527
    open (FH , "1st_out.dat" ) ;

    while (<FH>)
    {
    chomp ;
    @a = split / /;
    $h{$a[1]} += $a[0] ;
    }
    close (FH) ;

    foreach $k (sort {$a-$b}keys(%h)){
    print "$k $h{$k}\n";
    } 

531 デフォルトの名無しさん [] 2010/12/18(土) 00:48:38 ID: Be:
    みなさま,ありがとうございます.
    >>511の望み通りの出力結果を得ることができました.

    ちなみに,以下のファイルの場合も同じことはできるのでしょうか?

    --2nd_out.dat--
    7 12 ワンピース
    10 12 ワンピース
    12 12 ワンピース
    10 12 ワンピース
    9 12 ワンピース
    9 12 ワンピース
    6 12 ワンピース
    6 12 ワンピース
    11 13 ナルト
    9 13 ナルト
    12 13 ナルト
    11 13 ナルト
    10 14 ブリーチ
    10 14 ブリーチ
    15 14 ブリーチ
    12 14 ブリーチ
    7 14 ブリーチ

    希望する出力結果

    69 12 ワンピース
    43 13 ナルト
    54 14 ブリーチ 

532 デフォルトの名無しさん [sage] 2010/12/18(土) 00:55:30 ID: Be:
    mt %h;
    open (my $fh ,">","1st_out.dat" ) ;

    while (<$fh>)
    {
      chomp ;
      @foo = split / /;
      $h{"$foo[1] $foo[2]"} += $foo[0] ;
    }
    close ($fh) ;

    print %h ;

533 デフォルトの名無しさん [sage] 2010/12/18(土) 00:56:01 ID: Be:
    最初typoした
    myね 

534 デフォルトの名無しさん [sage] 2010/12/18(土) 01:08:29 ID: Be:
    >>529


    $ perl -lane '$h{$F[1]}+=$F[0];END{print "$h{$_} $_"foreach(sort{$a-$b}keys%h)}' 1st_out.dat
    69 12
    43 13
    54 14

535 デフォルトの名無しさん [sage] 2010/12/18(土) 01:09:31 ID: Be:
    >>533
    2行めもデータ消しにかかってる。 

536 デフォルトの名無しさん [] 2010/12/18(土) 01:15:11 ID: Be:
    >>532
    ありがとうございます.
    これでバイト先の漫画管理がかなり楽になります! 

537 デフォルトの名無しさん [sage] 2010/12/18(土) 01:17:01 ID: Be:
    >>535
    あー、マジだ
    横になりながらコード書いちゃいかんね 

538 デフォルトの名無しさん [sage] 2010/12/18(土) 01:17:52 ID: Be:
    データによっては期待通りにならないと思うが、お手軽に

    $ perl -lane '$h{"$F[1] $F[2]"}+=$F[0];END{print "$h{$_} $_"foreach(sort{$a cmp $b}keys%h)}' 2nd_out.dat
    69 12 ワンピース
    43 13 ナルト
    54 14 ブリーチ

    2カラム目でちゃんとソートするならこんな感じ?

    $ perl -lane '$h{$F[1]}+=$F[0];$n{$F[1]}=$F[2];END{print "$h{$_} $_ $n{$_}"foreach(sort{$a-$b}keys%h)}' 2nd_out.dat
    69 12 ワンピース
    43 13 ナルト
    54 14 ブリーチ

539 デフォルトの名無しさん [] 2010/12/18(土) 01:24:17 ID: Be:
    >>521 がちょっと気になったんだけど、今でも大学で perl 教えるところあるの?

540 529 [sage] 2010/12/18(土) 01:31:59 ID: Be:
    >>534
    一行兄貴サンクス
    変数宣言と数値への型変換が不要なPerlはやっぱりワンライナーに強いね 

541 デフォルトの名無しさん [sage] 2010/12/18(土) 01:47:12 ID: Be:
    perlスレで言うのもなんだが、こういうのはawkの仕事じゃないのか。
    awk '{cnt[$2]+=$1}END{for (x in cnt){print x,cnt[x]}}' 

542 デフォルトの名無しさん [] 2010/12/18(土) 01:54:26 ID: Be:
    そうかな? 

543 デフォルトの名無しさん [sage] 2010/12/18(土) 05:36:23 ID: Be:
    どっちでも構わんだろべつに 

544 デフォルトの名無しさん [sage] 2010/12/18(土) 06:30:20 ID: Be:
    >>539
    俺の大学ではさわりだけやった
    大学の講義で使う言語=教授が使ってる言語みたいなもんだから学校によってまちまちだろう 

まあ、awk でやっちゃうかな。自分も。

■_

■_ 正規表現は万能じゃないし


正規表現 Part7
731 726 [sage] 2010/12/22(水) 23:40:04 ID: Be:
    すみません、後ひとつ聞きたいんですが

    2桁以上の整数を、すべて+1する置き換えかたはありますか?
    5
    50
    100
    134
    1295
    ↓
    5
    51
    101
    135
    1296
    って感じです
    よろしくお願いします。 

732 デフォルトの名無しさん [sage] 2010/12/22(水) 23:44:09 ID: Be:
    正規表現だけじゃ無理 

733 デフォルトの名無しさん [sage] 2010/12/23(木) 00:30:05 ID: Be:
    >>731
    cygwin導入して、sedとかの文章整形ツールを考えた方が良さそう。
    windowsだけでやるならperl。 

734 デフォルトの名無しさん [sage] 2010/12/23(木) 07:19:35 ID: Be:
    >>731
    それはExcelでやれ 

736 デフォルトの名無しさん [sage] 2010/12/23(木) 11:40:21 ID: Be:
    ああ、よく考えたらファイル名ってわけじゃないのか。
    だったらExcelの関数で
    =IF(A1>=10,A1+1,A1)
    整数かどうかは自分で調べて。 

737 デフォルトの名無しさん [sage] 2010/12/23(木) 12:57:36 ID: Be:
    1.tabを別の文字列に置換

    2.数字の前後にtabを挿入

    3.エディタからExcelにコピペ

    4.数字以外と数字の列に分かれるているのを確認

    5.Excelの機能(関数とか)を使って数字に+1

    6.Excelからエディタにコピペ

    7.1で置換した文字列をtabに戻す 

738 デフォルトの名無しさん [sage] 2010/12/23(木) 13:16:45 ID: Be:
    $ ruby -ne 'n = $_.to_i.abs; n += 1 if n >= 10; puts n' < numbers.txt

    sedやawkわかんないんでRubyでやったけど正規表現関係なすね 

739 デフォルトの名無しさん [sage] 2010/12/23(木) 16:15:28 ID: Be:
    awk '{ print $1 + ($1 >= 10) }' file 

まあこれは、Excel でってのもありか。

■_

アコースっ クラッカーだっ!

2010年12月22日

■_

・なんてことだ
Togetter - 「「ナポレオン~獅子の時代」 終了のお知らせを全員で嘆きまくるTL」 にっき 原稿アップ。ありがとうございます。

■_ 伸びる伸びる

1000まで行くか?


Dream jobs that you're glad you didn't pursue: computer programmer : programming

I have been writing software since 1971.

Have had ups, and downs...but nothing as bad as the article describes.

Overall, I still love it.

And, I am still making good money at 57.

And yeah...users can appear really stupid. Of course what this really means is not 
that users are stupid, but instead that software is hard.


How do you stay relevant? Or are you just working on old languages that nobody else 
knows?

I am 31 and am worried I am going to hit a salary cap as it gets harder to keep up 
with the younger ones, so I am really looking to move into either a leadership, 
management or architectural role.

    How do you stay relevant?

Now I'm only 37, and not 60, but the mainstream technology is quite different from 
when I graduated. Then almost nobody used Java for anything but for useless applets, 
the main application programming language was C++ (C on unix). The web was new and hot, 
and the few dynamic web pages was programmed using CGI and Perl, or even in 
shellscript and C. Most of these are more or less legacy technologies today.

The answer is that you need to continue to learn new technologies during your entire 
career. Try to keep an overview of what is new an upcoming technologies. Read on-line 
tutorials and buy books about these technologies. Make prototypes for new projects 
using these new technologies (but think before you move them to production). The old 
saying that you must never stop learning is definitely true in this industry. The last 
two years I have read myself up on data compression and codecs, as well as about 
multimedia network standards. I have also leaned new programming languages (Lua and 
Clojure, but the latter would not say I know yet).

わたしの回答は、あなたは御自分のキャリアすべてに渡って新しい技術を学び続けなければならない
ということです。

Another important point is to learn about about domains worth writing software for. If 
you can talk the language of the experts in the domain you are writing software for, 
you are able to produce much better stuff than you can if you just know software 
development. The value of that is often not sufficiently appreciated by many software 
developers.

Wow, you're 37 and still have the energy to not only stay informed about new and 
upcoming technologies, but also read books and implement prototypes just to try them 
out? I'm 28 and I'm already losing the ability (and willpower) to have a life outside 
my career and keep myself current at the same time. I'm not looking forward to the 
prospects of constantly being under pressure to learn the latest trend when all I want 
to do is maybe stare at a ceiling, or go for a walk without feeling guilty of wasting 
time. So how do you do it and stay sane? :) Also, don't you ever have a feeling that 
spending more time on keeping on top of everything instead of focusing of one thing 
potentially has the danger of making you a jack of all trades but a master of none?


40 here. The key is not to try to stay on top of everything as an expert. Stay on top 
of everything as a generalist so you know whats out there and which way the wind is 
blowing.

Armed with the knowledge you get by simply paying attention, you can pick one or two 
things to actually try-out and possibly deep-dive every year. From my perspective, the 
technology of software development changes slowly. However, if you try to keep up with 
the changes in a few dozen areas keeping up with the slow rate of change is impossible 
because you have a big multiplier.

If you religiously invest enough time each year to learn one or two new things then 
over time you become a guru. That's the advantage I have over someone who is 28. You 
would have to be a genius with no life and invest a couple of years studying and 
building to match me. You'd have to do it on your own time too, because there are very 
few jobs that let you work with a wide-swath of technologies.

Don't try. Have a life. Take your time and build up your knowledge slowly.


It's actually comforting to hear that, and it makes sense.There is no denying that the 
IT world moves at a relentless pace and I often feel fear of becoming complacent 
unless I sift through my RSS feeds every single day, get all the latest from the blogs 
and complete that brand new project with the brand new framework I started last week. 
But when you take one step back and look at the bigger picture, it starts to look like 
Sisyphus' battle, and a good way towards early burnout :)

*

"The key is not to try to stay on top of everything as an expert. Stay on top of 
everything as a generalist so you know whats out there and which way the wind is 
blowing."

Just turned 43. I'm self taught (no formal education) and have been in software for 
the past 15 years. Being a generalist resonates with me and my career personally and 
I've given this advice to many folks through the years: Stay current. Focus on 
improving overall skills. Avoid specializing too much in any tech.

Just wanted to agree with this post and I don't post on Reddit enough :)

I'm 37 as well.

If you don't enjoy keeping up, you're fucked. I've worked with hundreds of "who 
moved my cheese" old guys. The nice thing is when I work on contracts my 
experience allows me to get paid a shitload to do migrations (although I'm on the 
windows side more so than the *nix side of things).

My stroke of luck/genius was to get finance (accounting/econ) as well as MIS degrees. 
I started off in accounting/finance (audit for both financial and computer systems 
~as/400, netware, etc) and decided 60-80 hours a week of financial work was fun but 
not as rewarding as software development.

I consider myself an intermediate programmer at best, but I'm also well rounded well 
beyond just software development (I love OSes and just computer shit in general, so 
learning isn't a chore, it's a pleasure).

I've got 3 startups going right now (1 is profitable the other two are in the initial 
development phases). I'm looking at contributing more to a 3rd after the new year and 
I'm seriously considering doing it solely based on the tools available that 
facebook/google/etc have put out there for clustered systems. We'll see, I need about 
36 hours in a day to do everything I want to do (including reading reddit :)

全部読んでいくのはちと…○| ̄|_

■_

で、↑の reddit スレ(?)の話題の元。


Timothy McSweeney's Internet Tendency: Dream Jobs That You're Glad You Didn't Pursue.

For as long as you can remember, computers and electronics fascinated you. Your future 
as a computer programmer seemed fated by the timing of your entry into adulthood. The 
first Internet gold rush was in full swing and all around you nerds were being touted 
as heroes of the New Economy on the covers of Fast Company and Wired, and they were 
making money hand over fist doing what you loved to do.

You dropped out of college and started looking for a job at a startup. Leaving school 
to launch the next big thing was a rite of passage rooted in the mythos of geek icons 
like Steve Jobs and Bill Gates. Companies were hiring anyone with a basic grasp of 
Boolean logic and the hunger to create, and college dropouts seemed more willing to go 
the extra mile for less pay as long as there were stock options involved.

You landed a job with an e-commerce site that sold computer parts that they sourced 
from wholesalers and drop-shipped to the customer. You were right in the thick of the 
dotcom boom working at a company that embodied all that the era stood for:

    • Find a quasi-legal niche that probably doesn't actually exist
    • Exploit people who want to be on the bleeding edge
    • Profit, however briefly (optional step)
    • Sell or otherwise disband company
    • Repeat as desired or until the government catches on
以下略

んーー微妙に訳しにくい

■_ MOP

直近の shibuya.lisp でも話題に出たなあ >Meta Object Protocol


Day 22 – The Meta-Object Protocol « Perl 6 Advent Calendar

Have you ever wondered how to create a class in your favorite programming language, 
not by writing a class definition, but by running some code? Some languages allow that 
by simple API calls. The API behind it is called the Meta-Object Protocol, short MOP.

あなたはこれまでに、自分の好きなプログラミング言語で、クラス定義を書くのではなく
ちょっとしたコードを実行することによってどのようにクラスを生成するのか
疑問に思ったことはありませんか?
一部の言語では、それを単純なAPI呼び出しで行えます。
そのAPIには背後に Meta-Object Protocol 、略して MOP と呼ばれるものが隠されています。

Perl 6 has a MOP, and it allows you to create classes, roles and grammars, add methods 
and attributes, and to introspect classes. For example we can use calls to the MOP in 
Rakudo to find out how the Rat type (rational numbers) is implemented. Calls to 
methods of the MOP generally start with .^ instead of just .:

Perl 6 には MOP があり、それによりあなたはクラスや roles、grammars を生成することが
できますし、メソッドやアトリビュートを追加するとか introspcet classes にすることも
可能です。たとえば Rakudo にある MOP を呼び出して Rat type (有理数)がどのように
実装されているのかを見つけ出すことができます。MOP メソッドの呼び出しは通常、
. ではなく .^ から始まります。


 $ perl6
 > say join ', ', Rat.^attributes
 $!numerator, $!denominator
 > # the list of all methods is a bit long,
 > # so here is a random selection
 > say join ', ', Rat.^methods(:local).pick(5)
 unpolar, ceiling, reals, Str, round
 > say Rat.^methods(:local).grep('log').[0].signature.perl
 :(Numeric $x: Numeric $base = { ... };; *%_)

Most of these lines should be fairly self-explanatory: objects of class Rat has two 
attributes, $!numerator and $!denominator, as well as many methods. The log method 
takes a Numeric value as invocant (marked by the colon after the parameter name), and 
an optional second parameter called $base, which has a default value (but which Rakudo 
can't show you. It's Euler's number).

この例の行のほとんどは fairly self-explanatory です。
Rat クラスのオブジェクトは、多くのメソッドと一緒に $!numerator と $!denominator の
二つのアトリビュートを持っています。
log メソッドは (パラメーター名のあとにコロンでマークされた) invocant として
Numeric value と、省略可能な第二引数としてデフォルト値を保持している $base を取ります
(ただしRakudo はこれをあなたに見せることはできません。常に Euler's numberです)。


A nice use case comes from the Perl 6 database interface. It has the option to log 
calls on an object, and to restrict this to only log methods from a certain role (for 
example only a role related to connection management, or related to data retrieval). 
Here is the example, and a possible way to call it:



 sub log-calls($obj, Role $r) {
     my $wrapper = RoleHOW.new;
     for $r.^methods -> $m {
         $wrapper.^add_method($m.name, method (|$c) {
             # print logging information
             # note() writes to standard error
             note ">> $m";
             # call the next method of the same name,
             # with the same arguments
             nextsame;
         });
     }
     $wrapper.^compose();
     # the 'does' operator works just like 'but', but
     # only modifies a copy of the object
     $obj does $wrapper;
 }

 role Greet {
     method greet($x) {
         say "hello, $x";
     }
 }

 class SomeGreeter does Greet {
     method LOLGREET($x) {
         say "OH HAI "~ uc $x;
     }
 }

 my $o = log-calls(SomeGreeter.new, Greet);
 # logged, since provided by role Greet
 $o.greet('you');
 # not logged, because not provided by the role
 $o.LOLGREET('u');

Output:

 >> greet
 hello, you
 OH HAI U

So with a Meta-Object Protocol, classes, roles and grammars are not just accessible by 
special syntax, but can be accessed as a normal API. This gives new flexibility to 
object oriented code, and allows easy introspection and modification of objects.

Meta-Object Protocol を使うことで、クラスや roles、grammras は特殊な構文によって
アクセスできるだけでなく、通常のAPIとしてアクセスできるようになります。
これはオブジェクト指向のコードに新しいflexibility をもたらし、オブジェクトの
easy introspection と modification を可能とします。

■_ 本日の巡回から

■_ アレを

ぽちってしまった…26% 引きだったし。

2010年12月21日

■_

・買った
伝説巨神イデオン DVD-BOX 伝説巨神イデオン DVD-BOX PART 2

TVシリーズは、LDでは持っていたのだけどDVDは買ってなかったのでここでえいやと。 Bru-lay? なんですかそれ。

■_

21日目ですか。結構あるもんだなあ。


Day 21 – transliteration and beyond « Perl 6 Advent Calendar

Day 21 – transliteration and beyond

By carl

Transliteration sounds like it has Latin roots and means a changing of letters. And 
that's what the Str.trans method does.

say "GATTACA".trans( "TCAG" => "0123" );  # prints "3200212\n"

Perl 5 people (and Unix shell folk) immediately recognize this as tr/tcag/0123/, but 
here's a quick explanation for the rest of you out there: for every instance of T we 
find in the string, we replace it by 0, we replace every instance of C by 1, and so on. 
The two strings TCAG and 0123 supply alphabets to be translated to and from, 
respectively.

This can be used for any number of time-saving ends. Here, for example, is a simple 
subroutine that “encrypts” a text with ROT-13:

sub rot13($text) { $text.trans( "A..Za..z" => "N..ZA..Mn..za..m" ) }

When .trans sees those .. ranges, it expands them internally (so "n..z" really means
"nopqrstuvwxyz"). Thus, the ultimate effect of the rot13 sub is to map certain
parts of the ASCII alphabet to certain other parts.

In Perl 5, the two dots (..) are a dash (-), but we've tried in Perl 6 to have those 
two dots stand for the concept “range”; in the main language, in regexes, and here 
in transliterations.

Note also that the .trans method is non-mutating; it doesn't change $text, but just 
returns a new value. This is also a general theme in Perl 6; in the core language we 
prefer to offer the side-effect-free variants of methods. You can easily get the 
mutating behavior by doing .=trans:

$kabbala.=trans("A..Ia..i" => "1..91..9");


範囲を表す指定が - から .. になったと。

■_

■_ より良いコードのための11のTips


11 tips for better code | ProgFu

11 tips for better code

Digg Digg

There are several reasons why you should write clean and readable code. Most importantly,
every code is written once, but read many times over and over. When you come back to your
code next day, you have to read it. When you show your code to someone else, he has to read
it. Thus by spending little more time with writing, you save A LOT of time when reading it
again.

あなたが clean で readable なコードを書くべき理由はいくつかあります。最も重要なのは、
あらゆるコードというものは書かれるのは一度だけなのに対して、繰り返し繰り返し何度も読ま
れるものだということです。あなたが自分のコードを書いた次の日に見返したとき、あなたはそ
れを読まなければなりません。あなたがあなたのコードを誰かほかの人に見せたとき、その人は
そのコードを読まなければなりません。したがって、コードを書くときにもう少し余計に手間を
掛けることによって、そのコードを読み返したときに大幅に時間を節約すべきなのです。

Lets see some of the basic rules
基本的なルールをいくつか見てみましょう

   1. keep methods short
   2. never ever ever reuse a variable for different purpose
   3. use self-descriptive variable and method names
   4. define variables as close as possible to the place of their usage
   5. no magic numbers
   6. be friend with your language
   7. don't fight the convention
   8. watch out for premature optimization
   9. always refactor the code after you test it
  10. don't get sucked into overengineering
  11. learn new things by prototyping

Now, let's look up at each point in more detail

1. Keep methods short
   メソッドを短く保つ

Even though many people obey this rule, it is still very important. Method should 
always fit on the screen. When you have to scroll, it takes away your concentration 
and you can't see whole context. Optimal length is 5-20 lines, depending on the 
situation. Of course getters/setters are usually one-line methods, but they're more 
like accessors than actual methods.

多くの人がこのルールを obey しているにも関わらず、それでも非常に重要なことです。
メソッドは常にスクリーンに収まるようにすべきです。スクロールが必要になったとき
あなたの集中力は失われ、コンテキスト全体を見ることができなくなってしまいます。
シチュエーションによりますが、Optimal な長さは 5行から 20行です。
当然 getter や setter は通常は一行のメソッドですが、これらは実際にはメソッド
というよりは accessor というべきものです。

2. Never ever ever reuse a variable for different purpose
   どんなことがあっても異なる目的のために変数を使いまわしてはいけない

One variable should be used only for one purpose.  By making variable constant (const 
in C++, final in Java), you also help the compiler with optimization and make your 
code scream This variable is not going to change, which makes the code a lot more 
readable.

ひとつの変数はただひとつの目的のためだけに使うべきです。
変数を constant (C++ での const、Java での final) にすることにより、
コンパイラーがあなたのコードを最適化したり scream にするのを手助けします。
これは変数を変更できないようにして、コードをより読みやすくします。

3. Use self-descriptive variable and method names
   変数やメソッドには自己言及的 (self-descriptive) な名前をつけよう

Anyone should be able to understand your code by just looking at it. You should almost 
never use abbreviations, except for the most idiomatic ones like

誰もがあなたのコードを見てすぐに理解できるようにすべきです。
次の例のような広く知られているものを除いては、ほぼ略語 (abbreviations) を使うべきでは
ありません。

src - source
pos - position
prev - previous

If you think writing descriptive names is not worth the time, just compare
n, ns, nsisd
with
numTeamMembers, seatCount, numSeatsInStadium


4. Define variables as close as possible to the place of their first usage
   変数の定義は、可能な限り最初にそれを使う場所の近くで行うこと

While building a house, you don't want your hammer to be on the other side of the yard. 
Instead, you keep your tools as close as possible. The same applies to variables.

int foo = 3;
int bar = 5;
// bunch of code that use "bar"
// but doesn't care about "foo"
// ...

baz(foo);

This could be easily refactored to
上記のコードは次のように容易にリファクタリングできます

int bar = 5;
// bunch of code that use "bar"
// but doesn't care about "foo"
// ...

int foo = 3;
baz(foo);

This becomes a real issue when the code between declaration and first usage is very 
long (more than one screen). It is much harder to keep the context in your mind, when 
you have to scroll a lot to find out what given variable is.

この規則は変数の宣言位置と最初に使われた場所が非常に離れている(一画面以上)場合に
とても重要です。
It is much harder to keep the context in your mind,
when you have to scroll a lot to find out what given variable is.


5. No magic numbers
   マジックナンバーを使わない

Whenever you compare something against constant value, it should be defined as 
constant. There is nothing worse than debugging your teammate's code with things like

何かを定数値と比較するときはいつでも、それを constant として定義すべきです。
チームメイトのコードをデバッグしているときに次のようなコードがあっても
何の価値もありません。

il < 4384

What about this instead?
これをどのようすればよいでしょうか?

inputLength < MAX_INPUT_LENGTH

6. Be friend with your language
   あなたの使う言語に慣れ親しみなさい

Learning new language is always fun, you can learn to do things in new cool way. There 
is one big downside of being pro in one language while learning other one though. Say 
you're Java developer trying to learn Ruby. You should learn how to do things the Ruby 
way, instead of trying to apply your skill in doing things the same way you'd do them 
in Java.

新しい言語を学ぶことはいつでも楽しく、新しいいかした方法で行うことを学べるでしょう。


You need to write 5 times “Hello world!”. In Java, you would do something like.

“Hello world!”を五回出力しなければならないとき、Java では
次のように行うでしょう。

for (int i = 0; i < 5; i++) {
  System.out.println("Hello world!");
}

In Ruby, you might be tempted to write

Ruby では次のように書くかもしれませんが

   for i in (0..5)
     puts "Hello world!"
   end

Which seems OK, but there is a much better way

これでもまあ良いのですが、もっと良いやり方はこうです

   5.times { puts "Hello world!" }

7. Don't fight the convention
   規約に抗ってはいけない

Many languages have many different conventions. In general, people most probably know 
is Code Conventions for Java. Lets look at some of those conventions.

多くの言語はそれぞれ異なる規約 (conventions) を持っています。
一般的には、大部分の人が Java 向けの Code Conventions (コード規約)を知っているでしょう。
そういった規約のいくつかを見てみましょう。

    * method names should always begin with lower-case letter, followed by CamelCase 
     (veryLongVariableName)
      メソッド名は常に小文字から始めて、そのあとをキャメルケースでつなげる。

    * class names should always be in CamelCase
      クラス名は常にキャメルケースにすべきである。

    * constant names should be all in upper case with underscores (MY_CONSTANT)
      定数の名前はアンダースコアで区切ったすべて大文字のものにすべきである

    * open brace should be on the same line as if condition
      開きのブレースは if の条件部と同じ行に置くべきである

Breaking any of conventions should have a valid reason, never do it just because you 
don't like it. If you decide to change some convention inside your team, that's OK, 
but you might have problem when sharing code with other not so enlightened programmers.

Breaking any of conventions should have a valid reason,
never do it just because you don't like it.
If you decide to change some convention inside your team, that's OK, 
but you might have problem when sharing code with other not so enlightened programmers.


8. Watch out for premature optimization
   早すぎる最適化を警戒せよ

Premature optimization is root of all evil, at least that's what TV said … First 
thing you should care about is to write understandable code. It doesn't have to be 
fast the first time you write it.

早すぎる最適化 (Premutre optimization) は諸悪の根源である。
少なくともTVはそういっている。
あなたが最初に注意すべきことは、理解可能なコードを書くことである。
書き始めたときから高速であることは必須ではない。


All optimization is premature unless the program is slow. If you want to optimize 
something, at first you need to find out where the problem is. Thats why we have 
profilers.

プログラムが遅いのでなければ、すべての最適化は時期尚早 (premature) です。
あなたが何かを最適化したいというのであれば、あなたが最初にしなければならないのは
問題がどこにあるのかを見つけ出すことです。そしてそれはプロファイリングを
行う理由なのです。

Trying to optimize something without finding source of the problem always ends up in 
breaking something, or at least your code may turn out to be unreadable. If you think 
that something is slow, don't just blindly start rewriting the code, find a proof 
first.

Trying to optimize something without finding source of the problem always ends up in 
breaking something,
or at least your code may turn out to be unreadable.
If you think that something is slow,
don't just blindly start rewriting the code, find a proof first.

Don't solve problems that don't exist.

存在していない問題を解決してはいけません。


9. Always refactor the code after you test it
   コードのリファクタリングは常にテストのあとで

Nothing is perfect. Even though you might think you're writing a perfect code, try 
looking at it few months later. You will probably fell like “wtf is that?”.

完璧なものはありません。あなたは自分が完璧なコードを書いていると考えたとしても、
何ヶ月か後に見返してみてください。おそらくあなたは “wtf is that?”
と感じることでしょう。


Good way to improve the quality of your code is to refactor it after you test it. By 
testing I mean assuring that it works, which can be done either automatically or 
manually.

あなたのコードの質を向上させる良い方法とは、テストをしたあとでリファクタリングすることです。
自動にしろ手作業にしろ、テストをすることでそのコードが動作することを確実にします。

First of all, you need your code to work. Don't write it perfect the first time, just 
make it work. Then refactor it to make it perfect. For those of you that  know 
something about Test Driven Development, this might seem very familiar. The key here 
is to get used to the whole refactoring thing. If you're using powerful IDE like 
IntelliJ IDEA, your life will be a lot easier while refactoring.

まずはじめに、あなたは自分のコードを動作するようにしなければなりません。
最初から完璧なものを書こうとしてはいけません。とにかく動作するものを書きます。
そうしておいて、それを完璧にするためにリファクタリングします。
For those of you that  know something about Test Driven Development,
this might seem very familiar.
The key here is to get used to the whole refactoring thing.
If you're using powerful IDE like IntelliJ IDEA,
your life will be a lot easier while refactoring.


After you try refactoring, you will probably make a mistake and break something. 
That's why it is good to write automated tests. Any time you refactor, you can just 
run all test suites and see exactly what went wrong.

リファクタリングしようとしたあとで、あなたはもしかしたら何かを間違えたり壊して
しまうかもしれません。それが自動化されたテストを書くのが良い理由です。
リファクタリングをする度に、

10. Don't get sucked into overengineering
    overengineering しないようにしよう

When I first read about design patterns, I thought I found The Holy Grail. It all 
seems to be thought out, working perfectly and making design easy to understand, 
because you can just say “I used an observer pattern”, instead of explaining it all.

わたしが初めてデザインパターについて知ったとき、わたしは自分が聖杯 (Holy Grail) を
見つけたのだと思いました。

So where is the problem? Because it all looks so natural and easy, you start using 
design patterns for everything. Why not make this class singleton? And what about 
creating another factory?

So where is the problem?
どこに問題があるのでしょうか?
Because it all looks so natural and easy,
you start using design patterns for everything.
Why not make this class singleton?
And what about creating another factory?

Then instead of writing simple 80 line script, you end up with 10 class + 15 interface 
monster with bunch of generics and annotations, where 97% of the code doesn't do anything.

そうすると、あなたは80行のシンプルなスクリプトではなく
10のクラスと15のインターフェースを抱えたジェネリクスとアノテーションの塊で、
コードの97%はなにもしないような怪物を書くことになってしまいます。

Design patterns are very useful tool to simplify the design, which doesn't mean using 
them everywhere you can. You should use them, but don't abuse them.

デザインパターンは設計 (design) を単純にするための非常に便利なツールですが
それはどこでもデザインパターンを使えるということを意味してはいません。
デザインパターンは使うべきですが誤用(abuse)してはいけません。

11. Learn new things by prototyping
    プロトタイプを作ることで新しいことを学ぼう

Programming is all about learning new things. When you learn new library or language, 
you suddenly have the urge to throw away all old code and rewrite it from scratch. 
There are lots of reasons why you don't want to do that.

Adding a new library or framework to existing application is a similar problem. Say 
you're writing a javascript web application, and in the middle of everything, you 
discover jQuery. Now you have sudden urge to throw away all your javascript and write 
it in jQuery, even though you haven't used it yet.

The best way to go is to first create a lot of simple things with jQuery, where you 
will learn all the stuff you need in your application. You need AJAX? Try it on simple 
example outside the project and after you fully understand it, throw it away and move 
into production.

If you are serious about programming, I strongly recommend reading Code Complete by 
Steve McConnell. It will forever change the way you think about programming :)

■_

じかんたりねー○| ̄|_


一つ前へ 2010年12月(中旬)
一つ後へ 2011年1月(上旬)

ホームへ


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