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

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

一つ前へ 2010年4月(下旬)
一つ後へ 2010年5月(中旬)

ホームへ

2010年05月10日

■_

・Tokyo.R
Hena Hena Nikki ~悔い倒れの日々~ 2010.05.08 / Saturday [長年日記] 木村さんの blog で時々 R の話題を見かけるけど、木村さん、Tokyo.R に参加されているのかな? Tsukuba.R だけじゃなくて Tokyo.R なんてのもあったんですか。知りませんでした。 いや、一度見かけて忘れたというパターンかも。 第5回R勉強会@東京(Tokyo.R#05) : ATND いっぱいですねえ。

■_


The Objective-C Language from a Java / C++ perspective - Gavin Pierce on Software

The Objective-C Language from a Java / C++ perspective

May 3, 2010 1 comment

If you are a Java, C#, or C++ developer, then you are probably not excited to learn 
Objective-C.   Objective-C code is hard to read, and I sometimes wonder why Apple 
would chose an “ancient” language as a basis for a brand new mobile platform? The 
language is about to turn 25 years old.

もしあなたが、Javaや、C#、C++ の開発者であったなら、おそらく Objective-C を学ぶことに
興奮することはないでしょう。Objective-C によるコードは読むのが難しく、わたしは時折
Appleはなぜこんな“年代ものの”言語をbrand new なモバイルプラットフォームの基礎となる
言語として選択したのだろうかと不思議に思うことがありました。Objective-C は世に出て25年
ほど経っているものなのです。


I really wanted to write some iPhone applications, so I started learning about 
Objective-C a few months ago. Once I got past the unusual syntax and unfamiliar Xcode 
tools, I realized that this language has a lot to offer object oriented developers.
I'd like to share with you my favorite Objective-C language features.

わたしは本当になにか iPhone アプリを作りたかったので、何ヶ月か前に Objective-C につい
ての学習を始めました。unusual な構文と馴染みのない Xcode のツールに慣れてしまうと、こ
の言語がオブジェクト指向デベロッパーに多くのものを提供している(offer) ものだということ
に気がつきました。わたしは自分が気に入っている Objective-C の言語機能をあなたと共有し
たいのです。


First off, Objective-C is very different from C++. What a relief! C++ is not my 
favorite language. I spent years learning the intricacies of C++. It's a very 
difficult language to learn, it's way too complex for most developers. I'm so glad 
Objective-C is a simpler, and far more powerful language than C++. Read on for some 
details…

第一に、Objective-C は C++ とは非常に異なります。What a relief! C++ はわたしの好きな言
語ではありません。わたしはC++ の intricacies を学ぶのに何年も費やしました。C++ は学ぶ
のがとても難しい言語で、大部分の開発者にとっては複雑すぎるものだったのです。
Objective-C が単純であり、かつ C++よりも格段に強力な言語であることがわたしには嬉しいの
です。Read on for some details…


Powerful Objective-C language features:
強力な Objective-C の言語機能:

    * Dynamic Messaging Passing (動的なメッセージパッシング)
          o Objects pass messages, rather than make direct method calls.  It seems like a
            subtle distinction, but message passing is very flexible.  Object messages can 
            be auto-forwarded, passed over a network, or even queued up and sent at a
            later time. Dynamic message dispatch enables many of the important object
            oriented features in the language.

            オブジェクトはメソッドコールを直接行うのではなくメッセージを pass します。
            これはほとんど違いのないことのようにに思えますが、メッセージパッシングは
            非常に柔軟なのです。オブジェクトのメッセージは自動的なフォワードやネット
            ワーク越しに渡すこと、さらにはキューに溜めておいてあとで送るといったこと
            さえ可能です。動的メッセージディスパッチはこの言語にある重要なオブジェク
            ト指向機能の多くを利用可能にします。

          o Nil (or null) pointer protection is built in. Sending a message to nil (null)
            will cause a C, C++, or Java program to crash.  In Objective-C, the message 
            simply gets dispatched to … nowhere! Nothing bad happens, and the program
            continues to run. (Debug code can be added to detect messages being sent to Nil.)

            Nil (もしくはnull) ポインタープロテクションは組み込みです。nil (null) にメッ
            セージを送ることは C や C++、Java のプログラムではプログラムのクラッシュを引
            き起こします。Objective-C では、このメッセージはただ単にディスパッチされ…
            ないのです! (distaptched to nowhere) 悪いことはナニも起こらず、プログラムの
            実行は継続します。Nilにメッセージを送るのを検出するためにデバッグコードが追
            加できます。


    * The compiler is Type-safe, and the runtime provides super easy object introspection
      コンパイラーは型安全であり、実行時の super easy object introspectionを提供しています。

          o For the most part, Objective-C is strongly typed. The compiler catches most
            type related errors. I prefer typed languages, because I want to catch my simple 
            mistakes before I run the application.

            ほとんどの場面では、Objective-C は強い型付けをします。コンパイラーはほとんどの
            型に関するエラーを捕捉します。わたしは型付きの言語が好きですが、それは実際に
            アプリケーションを実行する前に単純なミスを捕捉しておきたいからです。

          o At runtime, object type information is fully available.  It's easy to check
            the type of an object and find out which messages (methods) it accepts. It's 
            basically a single line of code to access type information, compared to Java
            which requires 4 or 5 lines of code to do the same type lookups.

            実行時にオブジェクトの型情報をすべて入手できます。あるオブジェクトの型の検査
            やそれが受け付けるメッセージ(メソッド)を見つけ出すことが簡単にできます。それ
            は同じ型のルックアップをするコードに4行から5行必要となる Java と比べても
            基本的には型情報にアクセスするための一行のコードで行えます。


    * Object-oriented constructs are easy to use, and the language avoids C++ pitfalls

          o Pitfalls such as multiple inheritance, templates, operator overloading, and
            fragile base classes are avoided. Objective-C is not perfect, but it is a lot 
            simpler and easier to use than C++.

            多重継承やテンプレート、演算子の多重定義、fragile なベースクラスといった
            落とし穴 (pitfalls) は排除されています。Objective-C は完全ではありませんが、
            C++ に比べてとても単純で使うのが簡単なものです


          o Objective-C has interface polymorphism through Protocols. It's just like Java
            interfaces, except with some more flexibility ? such as the capability to have 
            optional methods in the protocol.
 
            Objective-C にはプロトコルを使ったインターフェースの多態があります。これは
            Java のインターフェースに似たものですが、プロトコルには optional なメソッド
            を持てる機能があるなどの幾つかのより柔軟な点があります。


          o One shortfall of both Java and C++, is that once a class is written it is a
            “closed” implementation. There's no way to add new methods without writing a 
            subclass or a helper class. Objective-C solves this problem with a feature
            called Categories. A Category allows new methods to be added to an existing
            class, keeping your OO design clean and simple. Dynamically adding new methods
            works surprisingly well, too. The compiler continues to check for type safety in
            method calls, and the Xcode editor provides code completion for these
            dynamically added methods.

            Java と C++ の両方に不足しているものはクラスを一度記述してしまうとそれが
            “閉じられた”(closed) 実装になってしまうということです。サブクラスやヘ
            ルパークラスを記述せずに新たなメソッドを追加する方法はありません。Objective-C
            ではこの問題をカテゴリ (Categories) と呼ばれる機能によって解決しています。
            カテゴリはあなたの OO 設計を clean かつ simple なまま既存のクラスに新し
            いメソッドを追加するのを可能にします。Xcode のエディターはこれら動的に追加
            されたメソッドに対するコードの補完をサポートしています
The compiler continues to check for type safety in method calls,
and the Xcode editor provides code completion for these dynamically added methods.


                + Example: NSString is the base class for immutable string objects. The
                  iPhone UIKit  framework provides a Category that enables an NSString to
                  draw to the screen (at a particular pixel coordinate). Drawing a string
                  by calling a draw method on the string is easy to do, the code is simple
                  and clean,  and the object behavior is exactly  where it should be.


    * Properties and Observable Pattern are Built-In
      プロパティとオブザーバーパターンが組込みである
          o In Objective-C 2.0, it's easy to annotate variables as properties, just by
            using the @property annotation. In addition, the @synthesize annotation causes 
            Objective-C to generate accessor methods (getters and setters) for your
            variables.

            Objective-C 2.0 では変数をプロパティとして annotate するのが簡単にでき、
            単に @property アノテーションを使うだけです。それに加えて、@synthesize
            アノテーションは Objective-C にアクセサーメソッド(getter と setter)を
            あなたの変数のために生成させます

          o With Objective-C properties, you get observable pattern for free.  Any 
            variable that is annotated as a property, can be watched for changes with only
            one line of code. The Objective-C runtime handles all the details through the
            KVO (Key-Value-Observing) system.  Apple uses the observable pattern for many
            things such as Model-View-Controller and Database Persistence.

            Objective-C のプロパティを使うことであなたはオブザーバーパターンを何の苦も
            なく手にできます。プロパティとしてアノテートされたすべての変数はコード一行
            だけでその変更を追跡する監視が行えます。Apple は Model-View-Controller や
            Database Persistence など多くのことに対してオブザーバーパターンを使っています。


    * Objective-C Plays Well with Others
          o Finally, Objective-C interfaces just fine with C and C++ code. There's some
            special work you'll need to do, but all three languages can co-exist and call 
            one another within the same program. So, Objective-C isn't quite the walled
            garden it first appears.

            Objective-C のインターフェースは C や C++のコードとも問題なく協調します。
            ちょっとした special work をしなければなりませんが、これら三つの言語はす
            べて共存可能で、ある言語から他の言語を同じプログラム内で呼び出せます。で
            すから、Objective-C はquite the walled garden it first appears.


Objective-C is actually a pretty good language. I think it's worth learning, 
especially considering the huge market for iPhone/iPad applications right now.  And, I 
think it's a good and viable (and open source) alternative to C++.


あんまりおもしろくなかった。 いじってはみたいけど、そのためにMac買ったりなんだりはする気になれないなあ。

■_


ふらっとC#,C♯,C#(初心者用) Part59 
421 デフォルトの名無しさん [sage] 2010/05/10(月) 18:00:12 ID: Be:
    このスレもRotateFlipしっちゃうぞ★ 

422 デフォルトの名無しさん [sage] 2010/05/10(月) 18:10:27 ID: Be:
    やってみろよこの野郎ッッッッッッッッッッッッッッッッッッッッ!! 

423 デフォルトの名無しさん [sage] 2010/05/10(月) 19:28:19 ID: Be:
    妙なテンション 

424 デフォルトの名無しさん [sage] 2010/05/10(月) 19:29:41 ID: Be:
    classの中に入ってるのがゴローバル変数
    メソッドに入ってるのがローカル変数なの?

    class Sample{
    int a;
    void func(){
    int b;
    }
    }

    この例だとaがゴローバル変数、bがローカル変数
    って感じ? 

425 デフォルトの名無しさん [sage] 2010/05/10(月) 19:31:57 ID: Be:
    >>424
    悪い事言わないから入門書嫁 

426 デフォルトの名無しさん [] 2010/05/10(月) 19:33:10 ID: Be:
       ∩___∩         |
       | ノ\     ヽ        |
      /  ●゛  ● |        |
      | ∪  ( _●_) ミ       j
     彡、   |∪|   |        J
    /     ∩ノ ⊃  ヽ [ゴローバル変数]
    (  \ / _ノ |  |
    .\ “  /__|  |
      \ /___ / 

427 デフォルトの名無しさん [sage] 2010/05/10(月) 19:35:23 ID: Be:
    ゴロ-バルでもプロパピーでも察してやれよ 

428 デフォルトの名無しさん [] 2010/05/10(月) 19:36:26 ID: Be:
    プロパピーww
    ゴローバルじゃなくグローバルね 

429 デフォルトの名無しさん [sage] 2010/05/10(月) 19:47:05 ID: Be:
    ゴローニャ 

434 デフォルトの名無しさん [sage] 2010/05/10(月) 21:27:22 ID: Be:
    >>429
    スプーンおばさん乙 

■_


C言語なら俺に聞け(入門編)Part 63 
770 デフォルトの名無しさん [sage] 2010/05/08(土) 22:39:41 ID: Be:
    #include <stdio.h>

    int main(void)
    {
    printf( "%d - %X + %o = %d\n", 398, 1FB , 327 ,398-1FB+37 );

    return 0;
    }
    これどこが間違ってますか?cygwinでこれを実行したら前のプログラミングがでました。
    間違えたプログラミングだと実行したら前やった実行がそのまま出るっぽいです。

771 デフォルトの名無しさん [sage] 2010/05/08(土) 22:41:39 ID: Be:
    >>770
    1FB じゃなくて 0x1FB じゃないの? 

772 デフォルトの名無しさん [sage] 2010/05/08(土) 22:47:54 ID: Be:
    レス早い、本当助かる。
    なぜ0xをつけるんですか??!??!

    あと質問ですが何故int main()っているんですか?
    printfだけじゃだめなんですか?ただの数値計算なんですが・・・

773 デフォルトの名無しさん [sage] 2010/05/08(土) 22:48:45 ID: Be:
    すげぇww
    できたwww0xつけたらできた。涙出てきたわ。ほんまありがとう
    また来るよ。 

774 デフォルトの名無しさん [sage] 2010/05/08(土) 22:50:01 ID: Be:
    二度と来るな 

775 デフォルトの名無しさん [sage] 2010/05/08(土) 23:23:23 ID: Be:
    ひでぇ・・・w
    1FBって16進だろ
    16進ってことを表すのが0x

    c言語はint main()っていれなきゃいけない
    これは関数だからc言語は関数型言語 

776 デフォルトの名無しさん [sage] 2010/05/08(土) 23:24:37 ID: Be:
    >>775
    手続き型言語じゃないの 

777 デフォルトの名無しさん [sage] 2010/05/08(土) 23:42:42 ID: Be:
    最初よくわからなかったものが
    わかるとなんでわからなかったのかわからなくなる 

778 デフォルトの名無しさん [sage] 2010/05/08(土) 23:51:21 ID: Be:
    >>775
    えっ 

■_ 本日の巡回から

2010年05月09日

■_

・行ってきました
GALLERY IN Fields » Blog Archive » 鶴田謙二原画展 ちょっと迷った(笑) つーか気づかずに通り過ぎちゃったんですが。

・呼び名
R を使う人たちをなんと呼称すべきか?

■_ GNU grep

これ、鬼車だと警告出すパターンじゃなかったっけか。

Regular expressions with high or nested repetition counters

Regular expressions with high or nested repetition counters

Hi!


I am a PhD student doing some research in regular expressions. I have
implemented an algorithm for matching a subclass of the regular
expressions with "numerical constraints", that is, expressions like
"a{10,100}". My starting point was the problems that can occur when
using large numbers, or nested constraints, as for example in the command:


grep -E "([0-9]{1,2}h([1-5]?[0-9]m([1-5]?[0-9]s){1,60}){1,60}){0,100}"


which consumes over 2 gb of memory on my computer.



from the grep man-page:
"Large repetition counts in the {n,m} construct may cause grep to uselots of  memory."


An article describing the algorithm is available at
http://hdl.handle.net/1956/3628


A C-implementation is available at
http://www.ii.uib.no/~dagh/facgrep


The implementation is probably buggy, as I am not very good in C, but it
works for simple examples. On the example above, procps reports that it
uses around 2 megabytes of memory.


I wondered if you are interested in having this kind of functionality in GNU grep? 
Note that for the majority of normal/simple regexps, grep does better than my program 
above. Also, it only handles a (well-defined) subclass of regexps. So we would need to 
find a nice way to choose which algorithm to use when.

Best regards,


Dag Hovland


繰り返しの繰り返し(の繰り返し)とか。 バックトラックの候補が半端でない数になるのでメモリ食い尽くしたり。

Re: Regular expressions with high or nested repetition counters

Re: Regular expressions with high or nested repetition counters

Dag Hovland <address@hidden> writes:

> http://hdl.handle.net/1956/3628
> http://www.ii.uib.no/~dagh/fac/
> I wondered if you are interested in having this kind of functionality in
> GNU grep?

Yes, we're always interested in performance improvements, and this one
looks like it'd be a substantial one.

>  Note that for the majority of normal/simple regexps, grep
> does better than my program above. Also, it only handles a
> (well-defined) subclass of regexps. So we would need to find a nice
> way to choose which algorithm to use when.

Yes, all that would need to be done, and we'd neet to find a volunteer
to help out, as you say that you're not that good in C.  (I'm probably
not the guy, as I don't have enough free time.)  Also, for legal reasons
you and your employer would need to sign papers granting copyright to
the Free Software Foundation; is that doable?

a volunteer to help outと。

Re: Regular expressions with high or nested repetition counters

Re: Regular expressions with high or nested repetition counters

Paul Eggert wrote:

    Dag Hovland <address@hidden> writes:


    Yes, all that would need to be done, and we'd neet to find a volunteer
    to help out, as you say that you're not that good in C. (I'm probably
    not the guy, as I don't have enough free time.) 


I am very happy to hear that you think this is interesting. I would hope to get the 
time to learn better C soon, but probably not the next half year. If someone wants to 
start looking into it before that, I will of course answer questions about the code or 
the paper.

    Also, for legal reasons
    you and your employer would need to sign papers granting copyright to
    the Free Software Foundation; is that doable?


I think so. I will look into it.

■_ まとらぼ

質問掲示板でも良く見かけるし、使われてるんだろか。


組み込みプログラマー雑談スレッド その15
174 仕様書無しさん [sage] 2010/05/03(月) 10:04:03 ID: Be:
    一般に、部外者はコンピュータサイエンスをなめきっている 

175 仕様書無しさん [sage] 2010/05/03(月) 13:23:20 ID: Be:
    情報系は数学とかの基礎知識がなくても入っていけるからね
    C、C++、Java、ネットワーク、UML、ソフトウェア工学、セキュリティ、コンピュータアーキテクチャetc...

    機械・電気系は数式が沢山出てくるから
    微積、線形代数、複素関数、ベクトル解析、フーリエ変換、ラプラス変換、z変換等の基礎知識がある上で学ばないと難しいからね
    機械力学、流体力学、熱力学、材料力学
    電磁気学、電気回路、電子回路、過渡現象論、パワーエレクトロニクス、半導体工学
    古典制御理論、現代制御理論、信号処理
    通信工学、電磁波工学 

176 仕様書無しさん [sage] 2010/05/03(月) 15:02:09 ID: Be:
    >>175
    情報系で機械工学以外の基礎習わない大学とかあんの?

177 仕様書無しさん [sage] 2010/05/03(月) 21:07:38 ID: Be:
    大学の情報工学科出て組み込みやってるけど
    大学では電気電子回路を10数回の講義でかじる程度だった
    デジタル信号処理の講義でフーリエ変換とz変換は学んだかな
    教養科目で力学は少しかじった 

178 仕様書無しさん [sage] 2010/05/03(月) 21:25:20 ID: Be:
    z変換が問題に出るような資格検定試験ってありませんか? 

179 仕様書無しさん [sage] 2010/05/03(月) 21:32:26 ID: Be:
    電験 

180 仕様書無しさん [sage] 2010/05/03(月) 22:25:31 ID: Be:
    >>179
    thx.

    ttp://www.google.co.jp/search?hl=ja&\1q=%22Z%95%CF%8A%B7%22+%93d%8C%B1+OR+%93d%8BC%8E%E5%94C%8BZ%8Fp%8E%D2
    確認した。
    これからの組込み技術者は電験ですな。。。。 

181 仕様書無しさん [sage] 2010/05/03(月) 22:52:45 ID: Be:
    >>175
    うちの情報系は、むしろソフトウェア工学とかを習わないぞ 

182 仕様書無しさん [sage] 2010/05/04(火) 01:40:39 ID: Be:
    >>181
    ソフトウェア工学ってどうせ
    オブジェクト指向開発とは?
    V字モデルとは?
    UMLとは?
    ソフトウェアの生産性とは?
    構造化技法とは?
    モデル駆動型開発とは?
    ソフトウェアプロダクトラインとは?
    アジャイルソフト開発とは?
    とかそんな話ばっかりだよ 

183 仕様書無しさん [sage] 2010/05/04(火) 02:08:55 ID: Be:
    電験はかなり勉強になる
    役立つかどうかは置いといて教養として面白い

184 仕様書無しさん [sage] 2010/05/04(火) 02:44:26 ID: Be:
    修士課程(電気工学専攻)の頃にメカの制御プログラム2万行ぐらい1人で書いたけど
    同期の情報工学出身の奴らは修士時代に2~5千行ぐらいしかプログラム書いてなくて
    驚いた記憶がある 

187 仕様書無しさん [sage] 2010/05/04(火) 03:58:27 ID: Be:
    行数w
    確かにそれなりにコード書くのは必要だと思うが、
    学部でそれなりに書いてるでしょ
    同期は5千行で同じ機能を実装しているかもしれんのに

188 仕様書無しさん [sage] 2010/05/04(火) 08:48:06 ID: Be:
    先輩は1行で同じ機能を実装してるかも知れんな 

189 仕様書無しさん [sage] 2010/05/04(火) 21:30:59 ID: Be:
    学生なんか研究室で終電まで毎日研究やってたらプログラム20kステップぐらいはあっというま
    1日50行書いても20日で1000行
    400日で2万行
    2年間730日あるんだから 

190 仕様書無しさん [sage] 2010/05/04(火) 23:10:47 ID: Be:
    ステップ数を誇るのは30年前にタイムスリップしてからにしてくれ 

192 仕様書無しさん [sage] 2010/05/05(水) 08:18:45 ID: Be:
    ねえ、「ステップ」って単位を使う人に聞きたいんだけど、それってどういう単位?
    C言語なら1文=1ステップでいいの? 

193 仕様書無しさん [sage] 2010/05/05(水) 09:26:52 ID: Be:
    ラダーで言うステップはアセンブラの1命令語長相当なんじゃね?
    C言語ならstdio.h1つ使うだけで一気に伸びるなw 

194 仕様書無しさん [sage] 2010/05/05(水) 14:24:14 ID: Be:
    ステップ数(笑) 

195 仕様書無しさん [sage] 2010/05/05(水) 14:35:15 ID: Be:
    ステップ数で単価が決まる奴らはステップ数でしか物を語れない。 

196 仕様書無しさん [sage] 2010/05/05(水) 21:14:03 ID: Be:
    人売りの客先面接(コンプライアンス?何それ、おいしいの?)で、何ステップのプログラムって訊かれたわ
    まあ落ちたけど、そういう世界もあるんだなって 

197 仕様書無しさん [sage] 2010/05/08(土) 18:27:16 ID: Be:
    あと数年すれば「組込み」なんて言葉誰も言わなくなりそうだ 

198 仕様書無しさん [] 2010/05/08(土) 21:18:31 ID: Be:
    制御設計できるようになって逃げ道用意しておかなければ 

199 仕様書無しさん [sage] 2010/05/09(日) 09:52:49 ID: Be:
    でも、まとらぼ君になっても仕方ないんじゃないかな 

200 仕様書無しさん [sage] 2010/05/09(日) 09:57:39 ID: Be:
    マトラボオペレーターはタクシーの運ちゃんみたいなもの

    昔は車を運転できる人が少なかったから重宝されていたが、
    今じゃ大抵の人は車を運転できるから薄給にあえいでいる

    マトラボ君も近い将来死亡したくなければ他の技能を身につける必要がある 

201 仕様書無しさん [sage] 2010/05/09(日) 12:22:08  ID: Be:
    とはいいながら、マトラボが買える使える会社ってのも結構大変じゃないのか?
    ライセンス縛りもあるし

    ということでつかえるなら使っとけ、でいいか?
    どうでもいいし。 

202 仕様書無しさん [sage] 2010/05/09(日) 13:22:17 ID: Be:
    マトラボとかラボビューとかツールの使い方覚えるだけなら誰でも1週間あればできる
    制御理論を用いて設計できるかとなると、これは数学的なセンスも必要だし
    時間かかるよ 


■_ ねた

ヲタ向け限定ですみません


C++0x 9 
655 デフォルトの名無しさん [sage] 2010/05/09(日) 11:54:10 ID: Be:
    迷い猫Override 

656 デフォルトの名無しさん [sage] 2010/05/09(日) 11:58:17 ID: Be:
    auto はっぴぃ = new にゃあ(); 

657 デフォルトの名無しさん [sage] 2010/05/09(日) 11:59:45 ID: Be:
    オーバーロード
    オーバーライド
    オーバードライブ
    オーバーフロー
    アンダースコート
    の違いがわかりません 

はっぴぃ にゅう にゃあ TVアニメ「迷い猫 オーバーラン!」OP&EDテーマ

■_ OOPはまだ常識ではない?



Twitter / cocoatomo: #OOP はまだ常識ではない…なんでなんだろ? 自分 ...
#OOP はまだ常識ではない…なんでなんだろ?
自分の場合は代数的な対象がまんまクラスだったからすぐ分かったのかな?

> C人気の高さを痛感させられている。読者の手ごたえというレベルでいえば、まだOOPは常識ではないのである。
http://tinyurl.com/232crfj


Chapter1 C# 3.0らしいプログラミングとは? - @IT
余談だが、このようなことを語る筆者の立場を書いておこう。

 筆者は、C#が誕生した頃に即座にC#プログラマーとなり、これをたっぷりと堪能した。しかし、
C#の限界も感じるところがあり、より良いプログラミング言語の候補としてC++/CLIに魅力を感
じつつも、結局縁がなく、それを使い込む機会はなかった。

 その代わりに筆者が使うことになったのは、昔懐かしいC言語と、Webブラウザに標準装備され
ているJavaScriptであった。筆者が、さるパソコン誌で行っているCに関する連載は毎年テーマ
を変えつつ、ついに4年目に突入しており、C人気の高さを痛感させられている。読者の手ごたえ
というレベルでいえば、まだOOPは常識ではないのである。

これはどうなんだろうか。 読み手に対してきちんとしたものを提示できてないだけなんじゃないかという気がしないもでない。 川俣さんの著書じゃないけど(ぴー)とか(ぴー)とか(ぴー)とか見てるとねえ。 あとは読み手の勝手なイメージ、 つまり、Cでなきゃ書けないと思い込んでいるというパターンなんかを考えられないだろうか。 そうではなくてOOP言語(お好きな言語をどうぞ)でもこうすれば実用的なものが きちんと書けますみたいにしてみるとか。

まあそれでも C やりたいってのは一定数いるでしょうけど。 情報処理技術者試験にも使われるしねえ。

■_ 本日の巡回から

2010年05月08日

■_

・投手戦
土曜のプロ野球は二試合も 1-0 のゲームがあったようで。観たかったなあ。 ベイスターズのゲームで 1-0 、それも投手が完投して勝つなんていつ以来ないんだろうか。 調べてみたら意外に最近かもしれないけど。

・アドエス-PC
アドエスでチェックしたついったーのデータをお手軽にPCでアクセスできないもんかねえ。 twitter-ID とか。iPhone なんかだと可能だったりするんだろか。 あるいは Windows Mobile のクライアントでも便利に使える機能を持ってるものがあるとか。

・97
これもシリーズ続けるのかなあ。 アーキテクト、プログラマー、あと Founder とかあるんだっけ?
97 Things Every Programmer Should Know: Collective Wisdom from the Experts
つーことで買ってみた。 正直書いている人のほとんどをしらない(^^; うぉるたんがいたのにはびっくりしたけど(笑) 仮に、日本人プログラマー集めたこの種の本を企画したらどんな面子になるのかなあと 思ったり思わなかったり。

アマゾンさんで調べたら、97シリーズにこういうのが出るみたい。
97 Things Every SQL Developer Should Know
そもそもなんで「97」なのかよくわからん。

・征途

■_

最も美しいプログラミング言語は? Part6 
117 デフォルトの名無しさん [sage] 2010/05/08(土) 00:52:50 ID: Be:
    1番美しいのは Haskell で結論出たんじゃないの?

    これから 2番目に美しい言語を語ろうず これはなかなか難しいぞな

    ココでそれからWindowsとかMacとか言ってるヤツはな、全然面白くないから
    死ね な? 氏ねでも市ねでもなく 死ね OK? 

118 デフォルトの名無しさん [sage] 2010/05/08(土) 01:06:33 ID: Be:
    現状ではHaskellでFAに賛成 

119 デフォルトの名無しさん [sage] 2010/05/08(土) 02:55:26 ID: Be:
    流行りものに弱いよねみんなw
    Haskellの次って何だと思う?俺それが一番美しいと思う 

120 デフォルトの名無しさん [sage] 2010/05/08(土) 03:11:01 ID: Be:
    次に来るのはHaskellにできないことができる言語だと思う 

121 デフォルトの名無しさん [sage] 2010/05/08(土) 05:43:49 ID: Be:
    >>119
    Curry. 関数論理型言語。Haskellと違って不完全情報の記述ができる。 


Agda (Agda2) ってのは次の次(の次)くらいなんだろか。 あるいは…

名前だけで中身ぜんぜん知らんのですけどね >Agda

■_ String

んーむ。これはただ単に syntactic sugar で文字列 (String) は リテラルを記述してもコンパイラさんがよろしくやってくれてることを 知らない(わかってない)ということでいいんだろうか。

スレ立てるまでもない質問はここで 105匹目 
675 610 [sage] 2010/05/08(土) 03:36:23 ID: Be:
    javaのStringクラスについての質問です。

    public class Stringtest {

    public static void main(String[] args) {
    String str = new String( "apple" );
    str = "orange";
    System.out.println( str.length() );
    }
    }

    以上の記述では出力結果が「6」になります。
    ここでstrは参照型、つまりStringクラスのインスタンスの位置を示すアドレスが記録されているはずです。
    ですが、そこに"orange"を代入した時もjava.lang.Objectクラスの振る舞いを失っていません。これはなぜでしょうか?

    私は現在C言語を主に使用しているため、Stringクラスのインスタンスの参照を格納している変数に対して
    "orange"を代入した時に、その変数がStringクラスの振る舞いを失わないというのは非常に奇妙に
    感じるのですが…

    私の考えとしては文字列リテラルをコード中に記述した時点でメモリ上ではインスタンスが生成されているのではと予測しています。


    支離滅裂な質問内容かもしれませんが、よろしくお願い致します。 

676 デフォルトの名無しさん [sage] 2010/05/08(土) 03:43:13 ID: Be:
    Javaではインスタンスを常にポインタで扱うと考えれば納得できるんでね? 

677 610 [sage] 2010/05/08(土) 04:03:10 ID: Be:
    >&ggt;676

    インスタンスをポインタで扱うということは理解しています。
    ここでの主たる疑問点は

    str = "orange";

    でどのような処理( やりとり )が行われているかです。
    質問の説明が分かりにくくてすいません。 

678 デフォルトの名無しさん [sage] 2010/05/08(土) 04:04:14 ID: Be:
    画像処理スレでカメラの関数がどうのって言ってたひとか 

679 デフォルトの名無しさん [sage] 2010/05/08(土) 04:06:12 ID: Be:
    String str = "apple";
    System.out.println( str.length() );
    としたときの結果は? 

680 610 [sage] 2010/05/08(土) 04:12:04 ID: Be:
    >&ggt;678
    私のことですか?
    多分別の方だと思います^^;

    >&ggt;679
    「5」と出力されます。
    となるとやはり"orange"はStringクラスのインスタンスの様ですね。 

681 デフォルトの名無しさん [sage] 2010/05/08(土) 04:13:10 ID: Be:
    System.out.println( "hage".length() );
    としたときの結果は? 

682 610 [sage] 2010/05/08(土) 04:13:15 ID: Be:
    すいませんが本日は午前中から仕事があるので、ここで失礼させていただきます。 

683 610 [sage] 2010/05/08(土) 04:14:16 ID: Be:
    >&ggt;681
    「4」でした。 

684 デフォルトの名無しさん [sage] 2010/05/08(土) 05:32:32 ID: Be:
    何が分からなくて困ってるのか分からない
    .length()を記述できるところが不思議なのかね 

685 610 [sage] 2010/05/08(土) 06:47:34 ID: Be:
    >&ggt;684

    おはようございます。
    C言語だと"orange"とコード中に記述すると、それはchar型の配列の先頭アドレスとして扱われます。
    ですが、javaの場合に"orange"とコード中に記述するとStringクラスのインスタンスのアドレスとして
    扱われる、という違いで混乱していたようです。

    では、仕事に行ってきます。
    >&ggt;681さん、ありがとうございました。 

686 デフォルトの名無しさん [sage] 2010/05/08(土) 08:45:49 ID: Be:
    そもそもなんでJavaがCと同じと思っちゃったんだろう 

Cだと~ ってのはなあ。

■_ 3 Characteristics of Good Programmers


3 Characteristics of Good Programmers - david mosher

January 12, 2010

3 Characteristics of Good Programmers
(良いプログラマーの三つの特性)

# passionate programmer → 情熱プログラマーは
#「情熱プログラマー」から拝借

A wise man once told me that the best way to get ahead in life is to learn lessons 
from the experiences and failures of others. That man was my dad. He didn't share 
often with me when I was growing up but when he did I listened carefully (for the most 
part..) because what he had to say carried the weight and experience of someone who 
had experienced far more in life than I had. Programming is a lot like learning this 
way. There are people and companies who have tried and failed, sometimes miserably, at 
coming up with solutions to problems. When compared to other disciplines, I suspect 
there are more failures in programming than there are successes. This puts us in a 
unique position as developers because it offers us a distinct advantage over other 
industries; we have more examples of what not to do ... if we choose to seek them out.


ある賢人がわたしに、人生において get ahead (進歩する、金を儲ける) するための最善の方法
は他者の経験と失敗から教訓を得て学ぶことであると語ったことがあります。その賢人とはわた
しの父です。
He didn't share often with me when I was growing up but when he did I listened 
carefully (for the most part..) because what he had to say carried the weight and 
experience of someone who had experienced far more in life than I had.
#うまいことまとまらん ○| ̄|_
# he had to say ~ の部分は、わたしよりもはるかに年長で経験豊富な人の重要さと経験に
# 言及しなければならなかったから?
プログラミングとはこう言った方法で学ぶようなものなのです。ときには問題に対する 
solutions とともに coming up したものの無情にも挑戦し失敗した人がいたり企業があります。
ほかの disciplines (訓練、学習) と比較したとき、プログラミングには成功よりも失敗の方が
数多くあるのではないかと思うようになりました。このことはわたしたちを開発者として特異 
(unique) なポジションに位置させることになりました。なぜならそれはわたしたちに他の産業 
(other industries) を越えた全く異なる advantage をもたらしているからです。
we have more examples of what not to do ... if we choose to seek them out.


Passion (情熱)

I love programming. It's the only job I've had where I feel energized by solving 
problems. Sometimes my solutions suck but I think that's ok because I'm willing to 
admit it and strive to improve wherever possible. This is what I believe constitutes 
passion as a programmer. Passion is different than zealotry. A passionate programmer 
seeks out solutions using the best tools and technologies he knows at the time with 
the willingness to admit that any solution at any given time is never penultimate; 
it's merely the best at that moment in time. Zealots spend their time evangelizing 
solutions based on hype or buzz.

わたしはプログラミングが大好きです。プログラミングはわたしが問題を解決することで 
erergized を感じるただ一つの仕事です。わたしの solutions がひどいもの (suck) なことも
ありますが、わたしはそれでもいいと思っています。なぜならそれを受け入れて(admit it)、可
能であるところであればどこでも改良しようと努力すること。これこそがわたしがプログラマー
としての情熱を構成するものだと信じるものです。情熱は zealotry (狂信、熱狂) とは全然違
うものです。情熱プログラマーは、最良のツールとその時点で知っているテクノロジーとを、
any solution at any given time が決して penultimate (最後から二番目の音節?) でないこと
を快く受け入れつつ使ってソリューションを追い求めますが、そういった at that moment in 
time ではベストなものにはほとんどなりません。Zealots は hype (詐欺、ペテン) や buzz
に基づく solutions を evangelizing (福音を説く、伝道する) するのに時間をかけます。


Passionate programmers use logic, prototypes and test cases to prove that what they 
think works will work. Zealots are always working hard to implement "the next big 
thing" in the hopes of scoring a knockout; they're like the blackjack player who 
constantly changes up his strategy in an attempt to influence the outcome of the game. 
Passionate programmers realize that perfection is unattainable but they still strive 
to attain it with care.

情熱プログラマーは彼らの思い通りに動いているかどうかを調査するためにロジックとプロトタ
イプとテストケースとを使います。Zealots はいつでも "the next big thing" を実
装するために hopes of scoring a knockout の中でハードワークをしています。彼らはゲーム
の結果に影響を与えようとして戦略を定期的 (constantly) に変更するブラックジャックのプレ
イヤーのようです。情熱プログラマーは完璧というものが unattainable (到達不可能な、実現
できない) なものであるのを認識していますが、彼らはそれでも注意深くそこへ到達することを
目指すのです。


Perfection (完璧、熟達)

It's been said before, "if we could only use solution [x] problem [y] would go 
away completely", "things will be all better if we just do this", 
"this is exactly what we need, let's implement it now!" I know that these 
things get said because I used to say them (and probably still do from time to time; 
stop me if you hear me). The problem with these "silver bullet" solutions is 
that they don't exist. The "one size fits all" mentality is the sign of an 
immature developer. Perfection is dangerous, however the pursuit of perfection can be 
an incredible motivator if it is tempered with pragmatism. Knowing when to implement a 
solution that is good enough for the task at hand avoids unnecessary refactoring and 
saves time.

"if we could only use solution [x] problem [y] would go away completely",
(もしわたしたちが solution [x] しか使えなかったなら問題 [y] は完全に go away するだろう)
"things will be all better if we just do this", 
(わたしたちがこれをやるだけで全てはうまく行くようになる)
"this is exactly what we need, let's implement it now!"
(これは本当にわたしたちが必要としているなのだから、今すぐ実装しましょう!)
といったことは、以前既に言っています。わたしがこれらのことを言っていたのでこれらのこと
がらが話題になるようになったのだとわたしは理解しています
(and probably still do from time to time; stop me if you hear me)。
# まだ時々言うことがあるけど気がついたらとめてくれ。とか?
こういった "silver bullet" solution  (銀の弾丸 solution) が問題なのは、それ
らが実在しない (don't exist) からです。"one size fits all" 思考 (mentality) 
は immature developer の兆候 (sign) です。完璧は危険ですが、完璧を追求することはそれが 
pragmatism を伴った tempered であれば incredible motivator となる可能性があります。そ
の task に対して good enough である solution を実装するタイミングを知ることで、不必要
なリファクタリングを排除して時間を節約できます。


Ask your business analyst or company owner what they think about perfection and the 
response will likely include the word"risk". Far too often the technical is 
all we think about. Our job as passionate programmers is to communicate early and 
often with our business owners to understand the business goals of any potential 
solution. By considering business goals we mitigate against the risk of building only 
the perfect technical solution.

あなたの business analyst だとか company owner に、彼らが完璧について考えていることを
尋ねてみれば、その返事にはリスク ("risk") という単語が含まれていることでしょう。
Far too often the technical is all we think about.
情熱プログラマーとしてのわたしたちの仕事は、any potential solution であるビジネスの目
標を理解するために自分たちの business owners と早めかつ頻繁にコミュニケートすることで
す。ビジネスの目標を考慮することによってわたしたちは完全な technical solution だけを構築す
るリスクを軽減 (mitigate) するのです。



Perseverance (忍耐、根気強さ)

I'm not an english major but I think that Shakespeare has some good things to say 
about perseverance.

わたしは english major ではありませんが、シェイクスピアには perserverance (忍耐や根気強さ)
について言及している good things があると考えています。


    "To be, or not to be: that is the question:
    Whether 'tis nobler in the mind to suffer
    The slings and arrows of outrageous fortune,
    Or to take arms against a sea of troubles,
    And by opposing end them?"
    -- Hamlet


The answer to the question has to be: to be! Giving up is not an option! Passionate 
programmers arm themselves with all of the tools and knowledge they have in order to 
face problems. They also surround themselves with like minded people and thrive on 
failure. Failure affords us the chance to persevere and refine our process until we 
reach a solution that is "good enough".

この質問に対する回答はこうあるべきです: to be! 諦めることは選択肢にはない! 情熱プログ
ラマーたちは問題に対処するために持っているすべてのツールと知識で自分たちを武装していま
す。情熱プログラマーたちはまた、自分たちの周りを同じような考えの人たちで囲み、失敗を生
きがいにしています (thrive on failure)。失敗は、 "good enough" な solution 
に到達するまでわたしたちのプロセスを perservere (耐える、やりぬく) してリファインする
ような機会をわたしたちにもたらします。


    "And thus the native hue of resolution
    Is sicklied o'er with the pale cast of thought,
    And enterprises of great pith and moment
    With this regard their currents turn awry,
    And lose the name of action."
    -- Hamlet

Have you resolved in the past to persevere through difficult problems as a programmer 
only to find that you get trapped in over thinking how you're going to solve them? 
Startups with great ideas fail so often because of this. Passionate programmers are 
persistent in identifying this shift in focus that leads to a cyclical pursuit of 
perfection which steer's companies off course.

あなたは過去に、プログラマーとして
you get trapped in over thinking how you're going to solve them
を見つけるためだけに難しい問題に取り組み続けて解決したことがありますか?

great ideas を持った startups (新興企業) が失敗するのが頻繁にあるのはこのためです。情
熱プログラマーたちは、企業をsteer off course (操縦する?) 完全性の cyclical pursuit
(周期的な追求?) につながる視点でこの動き (shift) を indetifying するのに固執しているの
です。
#わけわかめ。


What type of programmer are you? that is the question.

あなたはどのタイプのプログラマーだろうか? それが問題だ (that is the question)。

あーぐだぐだ。

■_ 本日の巡回から

2010年05月07日

■_

ねーむーいー

■_ 1←→0

1と0を繰り返しだすようにするにはどうすれば? というお題。

Convert 0 to 1 and Vice Versa - Stack Overflow

I was asked in an interview : how to convert 0 to 1 and 1 to 0. I answered :

   1. Simple if and switch
   2. Bit flipping.

Are there any other approach?
language-agnostic programming-languages bit-manipulation

A few obvious possibilities:

!n
1-n
n^1
n==0
n!=1
n<1


Simple arithmetic:

x = 1 - x;

Actually, there are an infinite number of polynomials that will map 1 to 0 and vice 
versa. For example:

x = x * x * x * x * x - x * x * x * x + x * x - 2 * x + 1;

Lookup table:

int[] swap = { 1, 0 };

And later:

x = swap[x];


This one isn't the best, but it works:

pow(0, n);


pow(0, 0) is mathematically undefined, see mathworld.wolfram.com/Power.html


Is Stephen Wolfram some kind of authority on math? Take a look at this article to see 
a few differing opinions: en.wikipedia.org/wiki/…


Some Trig: COS(PI * N)^2

In python

import math
math.cos(math.pi * n)  ** 2


Also, cos(n*pi/2) 

This should work for any two numbers...

(EDIT: looking at the other answers I may have misread the question... but I still like my answer :-)

public class X
{
    public static void main(final String[] argv)
    {
        int x = Integer.parseInt(argv[0]);
        int y = Integer.parseInt(argv[1]);

        x += y;
        y = x - y;
        x = x - y;

        System.out.println(x);
        System.out.println(y);
    }
}

これの発展で、0, 1, 2 を繰り返すのを考えてみるとおもしろい鴨。

■_ GNU grep

いろいろやってるっぽい。 目についたのをいくつか。

[PATCH 1/2] dfa: convert to wide character line-by-line
[PATCH 1/2] dfa: convert to wide character line-by-line
From: 	Paolo Bonzini
Subject: 	[PATCH 1/2] dfa: convert to wide character line-by-line
Date: 	Tue, 4 May 2010 17:37:43 +0200

This provides a nice speedup for -m in general, but especially
it avoids quadratic complexity in case we have to go to glibc.

* NEWS: Document change.
* src/dfa.c (prepare_wc_buf): Extract out of dfaexec.  Convert
only up to the next newline.
(dfaexec): Exit multibyte processing loop if past buf_end.
Call prepare_wc_buf again after processing a newline.
---
 NEWS      |    5 +++
 src/dfa.c |   97 ++++++++++++++++++++++++++++++++++++------------------------
 2 files changed, 63 insertions(+), 39 deletions(-)

diff --git a/NEWS b/NEWS
index 1f3d00a..e64ec40 100644
--- a/NEWS
+++ b/NEWS
@@ -10,6 +10,11 @@ GNU grep NEWS                                    -*- outline 
-*-
   X{0,0} is implemented correctly.  It used to be a synonym of X{0,1}.
   [bug present since "the beginning"]
 
+  In multibyte locales, regular expressions including backreferences
+  no longer exhibit quadratic complexity (i.e., they are orders
+  of magnitude faster). [bug present since multi-byte character set
+  support was introduced in 2.5.2]
+
   In UTF-8 locales, regular expressions including "." can be orders
   of magnitude faster.  For example, "grep ." is now twice as fast
   as "grep -v ^$", instead of being immensely slower.  It remains
diff --git a/src/dfa.c b/src/dfa.c
index 340a4c6..44efc02 100644
--- a/src/dfa.c
+++ b/src/dfa.c
@@ -3105,6 +3105,51 @@ transit_state (struct dfa *d, int s, unsigned char const 
**pp)
 
 #endif /* MBS_SUPPORT */
 
+/* Initialize mblen_buf and inputwcs with data from the next line.  */
+
+static void
+prepare_wc_buf (const char *begin, const char *end)
+{
+  unsigned char eol = eolbyte;
+  size_t remain_bytes, i;
+
+  buf_begin = (unsigned char *) begin;
+
+  remain_bytes = 0;
+  for (i = 0; i < end - begin + 1; i++)
+    {
+      if (remain_bytes == 0)
+        {
+          remain_bytes
+            = mbrtowc(inputwcs + i, begin + i, end - begin - i + 1, &mbs);
+          if (remain_bytes < 1
+              || (remain_bytes == 1 && inputwcs[i] == (wchar_t)begin[i]))
+            {
+              remain_bytes = 0;
+              inputwcs[i] = (wchar_t)begin[i];
+              mblen_buf[i] = 0;
+              if (begin[i] == eol)
+                break;
+            }
+          else
+            {
+              mblen_buf[i] = remain_bytes;
+              remain_bytes--;
+            }
+        }
+      else
+        {
+          mblen_buf[i] = remain_bytes;
+          inputwcs[i] = 0;
+          remain_bytes--;
+        }
+    }
+
+  buf_end = (unsigned char *) (begin + i);
+  mblen_buf[i] = 0;
+  inputwcs[i] = 0; /* sentinel */
+}
+
 /* Search through a buffer looking for a match to the given struct dfa.
    Find the first occurrence of a string matching the regexp in the
    buffer, and the shortest possible version thereof.  Return a pointer to
@@ -3151,44 +3196,10 @@ dfaexec (struct dfa *d, char const *begin, char *end,
 #if MBS_SUPPORT
   if (d->mb_cur_max > 1)
     {
-      unsigned int i;
-      int remain_bytes;
-      buf_begin = (unsigned char *) begin;
-      buf_end = (unsigned char *) end;
-
-      /* initialize mblen_buf, and inputwcs.  */
       MALLOC(mblen_buf, unsigned char, end - begin + 2);
       MALLOC(inputwcs, wchar_t, end - begin + 2);
-      memset(&mbs, 0, sizeof mbs);
-      remain_bytes = 0;
-      for (i = 0; i < end - begin + 1; i++)
-        {
-          if (remain_bytes == 0)
-            {
-              remain_bytes
-                = mbrtowc(inputwcs + i, begin + i, end - begin - i + 1, &mbs);
-              if (remain_bytes < 1
-                || (remain_bytes == 1 && inputwcs[i] == (wchar_t)begin[i]))
-                {
-                  remain_bytes = 0;
-                  inputwcs[i] = (wchar_t)begin[i];
-                  mblen_buf[i] = 0;
-                }
-              else
-                {
-                  mblen_buf[i] = remain_bytes;
-                  remain_bytes--;
-                }
-            }
-          else
-            {
-              mblen_buf[i] = remain_bytes;
-              inputwcs[i] = 0;
-              remain_bytes--;
-            }
-        }
-      mblen_buf[i] = 0;
-      inputwcs[i] = 0; /* sentinel */
+      memset(&mbs, 0, sizeof(mbstate_t));
+      prepare_wc_buf (p, end);
     }
 #endif /* MBS_SUPPORT */
 
@@ -3198,7 +3209,7 @@ dfaexec (struct dfa *d, char const *begin, char *end,
       if (d->mb_cur_max > 1)
         while ((t = trans[s]))
           {
-            if ((char *) p > end)
+            if (p > buf_end)
               break;
             s1 = s;
             SKIP_REMAINS_MB_IF_INITIAL_STATE(s, p);
@@ -3258,8 +3269,16 @@ dfaexec (struct dfa *d, char const *begin, char *end,
         }
 
       /* If the previous character was a newline, count it. */
-      if (count && (char *) p <= end && p[-1] == eol)
-        ++*count;
+      if ((char *) p <= end && p[-1] == eol)
+        {
+          if (count)
+            ++*count;
+
+#if MBS_SUPPORT
+          if (d->mb_cur_max > 1)
+            prepare_wc_buf (p, end);
+#endif
+        }
 
       /* Check if we've run off the end of the buffer. */
       if ((char *) p > end)

一行丸ごと先に変換しておくというのはどのくらい利くのかねえ。 バックトラックがおきるパターンだとかなり有効だと思うんだけど。 これが sed やら awk のように、文字列に対して変更を加える可能性があると 面倒があるんだけど、grep は探すだけだからねえ。

■_ どれ?

tumblr にあるものですが、 元記事のリンクがないっぽい?


iamgabeaudick - Which language?

Which language?

Found this on a forum. In response to the question “Which programming language should 
I learn first?” - one user responds:

    Depends.

    To program in an expressive and powerful language: Python
    To get a website up quickly: PHP
    To mingle with programmers who call themselves “rockstars”: Ruby.
    To really learn to program: C.
    To achieve enlightenment: Scheme.
    To feel depressed: SQL
    To drop a chromosome: Microsoft Visual Basic
    To get a guaranteed, mediocre, but well paying job writing financial applications
    in a cubicle under fluorescent lights: Java.
    To do the same thing with certifications and letters after your name: C#
    To achieve a magical sense of childlike wonder that you have a hard time
    differentiating from megalomania: Objective C

    I could go on… but I’m not feeling hateful enough today.

expressive でパワフルな言語でプログラミングしたいのなら → Python とにかく手早く website を仕立て上げたいなら → PHP 自分を“ロックスター”と称するようなプログラマーたちと付き合いたいのなら → Ruby プログラムを本気で学びたいのなら → C 啓蒙を達成したいなら(?) → Scheme 憂鬱な気分を味わいたいのなら → SQL 遺伝子を落としたい(?)のなら → VB 保証があり、平凡ではあるけれども、まばゆい明かりの下キュービクルに篭って 金融アプリを書く金払いの良い仕事を得たいなら → Java 同じことを、certifications and letters after your name つきでしたいのなら → C# Objective-C はわからん。なんじゃこれ ○| ̄|_

■_本日の巡回から

2010年05月06日

■_

・デジカメ
Coolpix の起動が早いという話を聞いてちょっと調べてみたんですが いろいろと条件があるようで。やっぱ素直に FX-66 狙うか。

ReadItLater
sqlite3 readItLater.sqlite "SELECT url,title FROM items" な感じで、ページのURLとタイトルを取り出せた。あとは gawk でごにょって解決。

■_ プログラマーのひとりごと

昔一緒の部署にいた人に独り言が激しい人がいたなあ。


Talking to yourself while coding: who does it? : programming

I just realized that I have been talking myself through code / pseudo-code for a 
project Euler problem for at least 30 minutes. People around me probably think 
I"m crazy :-(

Who else talks to themselves while coding?


Does screaming "WHAT THE FUCK" when you get a run-time error count?


A "FUCK" always comes out of my mouth even before my conscious mind has 
acknowledged the seg fault.


I usually shout "FUCK" or "SHIT" or "SHITFUCK".


http://en.wikipedia.org/wiki/Rubber_duck_debugging

i actually have a ceramic duck on my desk for this purpose.


I have a Michael Knight action figure. Every week we drive into a new town fighting 
logic errors with style.


I want a rubber one...

Although I do have a knit cthulhu.


Mine is a purple, ninja duck. It came in a pack of four, but I like the purple one 
because it reminds me of Donatello.


Guilty. My wife, a psychology student, explained to me once why it helps, too. I 
forgot why of course, I only remember that it helps.


I talk to the programmers who wrote the shit I have to fix. Fortunately, they are not 
around to hear what I have to say to them.


So you are talking to yourself then.


Nothing gets by you.


I find myself anthropomorphisizing the code and program and talking nasty to it. 
"Open that file you f***ing bitch. Yeah, now read the first record and give it to 
me. Give it to me!!" My coworkers haven't said anything yet, maybe it's 
entertaining.


Instead of talking to myself, I compose questions to StackOverflow (or another 
appropriate forum). To avoid critique and embarrassment, I simplify the problem as 
much as possible and remove anything unrelated the the core issue.

Usually, by this point I have solved the problem and hit cancel.


I used to yell "FUCK! GOD DAMMIT MOTHERFUCKER!" and pound my fists on my 
desk whenever I couldn't get something working. Now I work in a big open room with a 
bunch of other people and also my desk is made of pretty fragile looking glass, so I 
stopped.

Now I just smoke more cigarettes and write snarkier comments.

But yes, I occasionally talk through code, especially when I'm trying to find a 
difficult bug. Describing code aloud makes me think about what it's really doing, not 
just what I thought it was doing when I wrote it. Different part of the brain used for 
speaking or something? Idunno, but it works.

Yep. Used to code rage a lot, don't so much any more. Still talk to myself.


In the Sunlab many mutter in their sleep


Yep, I do it for sure. Think it helped me score my own office at our new location.


Guilty as charged.

アサマシw
玄人(プロ)のひとりごと (10)

■_ vs.

訳すの手間~



ebhakt » C++ vs. Lisp
C++ vs. Lisp

At several points in my career development, I’ve been prompted to take a look at 
alternative computer languages. Usually I was worried about other languages being 
better than the one I was using at the time.

Sometimes my worrying has been justified. Being introduced to Pascal in college made 
me forever unsatisfied with my unstructured BASIC skills from high school, for example. 
But once I'd started programming in C++ on my job, I've never been seriously tempted 
to switch once I thoroughly investigated the alternatives.

That's why I was intrigued when I ran across Peter Norvig's web page talking about 
Lisp as an Alternative to Java. He mentioned a study in which 38 C, C++ and Java 
programmers were asked to write versions of a program to compare Java and C++ 
efficiency. Norvig had written the program in Lisp in 2 hours, while the times for the 
C++ developers ranged from 3 to 25 hours.

After I read that, I knew I had to try the problem. 

(以下略)

■_ あとでよむ

と書いても本当に読むのか?>自問自答

MRI Memory Allocation, A Primer For Developers | Engine Yard Ruby on Rails Blog

MRI Memory Allocation, A Primer For Developers
By Kirk Haines | May 4th, 2010 at 1:05AM

Memory allocation in the MRI 1.8.x series of Ruby is seen by many developers to be a 
black box. A developer writes code and the interpreter just does some magic to make 
sure that the memory for the code is allocated, and more importantly, eventually 
garbage collected. You don't have to think about, it or even care about it all that 
much.

And generally… that attitude is a productive one. The less you have to actively worry 
about the little details—like memory management—the more you can concentrate on the 
parts of the code that do the actual work. At the same time, though, a developer who 
remains ignorant of what's going on under the covers does so at his or her own peril.

It's very useful to have a general understanding of the mechanics involved, as they 
can sometimes steer you towards making better design choices in applications where 
your memory footprint matters; it's also very useful if things start going wrong with 
the memory footprint of the code. If your carefully built Rails application works a 
little bit like Mr Creosote, repeatedly misbehaving until it blows up, you need to 
have a basic understanding of what's going on with memory management in the 
interpreter.

There are two types of memory allocations that occur in MRI 1.8.x. First, objects are 
allocated on a heap, which is really just a collection of slots that Ruby uses to 
store information about an object. When Ruby runs out of slots, and it can't free up 
any slots by running a garbage collection cycle, it will allocate a new heap for 
additional space.

The second type of allocation is when Ruby allocates memory off of the C heap to 
provide storage for the actual data contained within an object. This second type of 
storage is the most direct, and is the easiest to understand:

foo = 'x' * (1024 * 1024 * 10)

(略)

Understanding the basics of your Ruby implementation's memory management isn't 
necessary to write Ruby code, but it's a good idea if you're writing and deploying 
substantial pieces of software. So, dig in and enjoy! They basics aren't too hard to 
understand. As always, happy to help answer questions here!


■_ GNU grep

まだマルチバイト localeでの高速化にがんばってるらしい。


[PATCH] dfa: speed up [[:digit:]] and [[:xdigit:]]
(略)
/* Multibyte character handling sub-routine for lex.
@@ -837,8 +840,12 @@ parse_bracket_exp (void)
                                      || STREQ  (str, "lower"))
                                        ? "alpha"
                                        : str);
+                  const struct dfa_ctype *pred = find_pred (class);
+                  if (!pred)
+                    dfaerror(_("invalid character class"));
+
 #if MBS_SUPPORT
-                  if (MB_CUR_MAX > 1)
+                  if (MB_CUR_MAX > 1 && !pred->sb_only)
                     {
                       /* Store the character class as wctype_t.  */
                       wctype_t wt = wctype (class);
@@ -852,14 +859,9 @@ parse_bracket_exp (void)
                     }

あー、この辺はなんか心当たりがあるようなないような。


[RFC PATCH] fall back to glibc matcher if a multibyte match is found
This patch works around the performance problems that are still in
current grep.  Red Hat will probably be using it in its own 2.6.x.

For UTF-8 it should trigger only in the presence of MBCSET, e.g. [a-z]
or [Ã ] (nad the latter case could be avoided).

For other character sets all brackets, and `.' as well, will trigger it.

Thoughts?
---
 src/dfa.c |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/src/dfa.c b/src/dfa.c
index 2bc0c0e..775943c 100644
--- a/src/dfa.c
+++ b/src/dfa.c
@@ -3213,6 +3213,15 @@ dfaexec (struct dfa *d, char const *begin, char *end,
                 continue;
               }
 
+           if (backref)
+              {
+                *backref = 1;
+                free(mblen_buf);
+                free(inputwcs);
+                *end = saved_end;
+                return (char *) p;
+              }
+
             /* Can match with a multibyte character (and multi character
                collating element).  Transition table might be updated.  */
             s = transit_state(d, s, &p);
-- 

おおむね見当がつくというか予想の範囲内というかなんだけど、 一連のパッチ含めて追いかけてみないとなあ。

■_


プログラミング言語 Scala 3冊目 
552 デフォルトの名無しさん [sage] 2010/05/06(木) 20:11:26 ID: Be:
    Scalaやってる人ってなんていうの?
    Scaler?Scalist? 

553 デフォルトの名無しさん [sage] 2010/05/06(木) 20:21:47 ID: Be:
    スカルマン 

本日二度目のアサマシ
スカルマン 闇の序章 ―DVD EDITION―

■_ 本日の巡回から

2010年05月05日

■_

こどもの日 5/4のゲームでホームランを打って ヒーローインタビューのときに「こどもの日に打ててうれしい」 と答えたのは古木だったかなあ

・菖蒲湯
こちらもこどもの日恒例で銭湯へ。

・アニソン三昧
克美しげる版のエイトマンテーマ曲は録音しておきたかった ○| ̄|_

■_ podcast

結構あるもんですね。 Thinking In Rails » Blog Archive » Favorite Ruby and Rails Podcasts 日本語でやってるこの手のpodcastってあるんでしょか


Thinking In Rails » Blog Archive » Favorite Ruby and Rails Podcasts
Favorite Ruby and Rails Podcasts

Podcasts have been a great help to get some great information about Ruby and Rails, as 
well as to discover and connect with more of the community.  I figured I'd list a few 
that I listen to, and would appreciate folks passing back any good ones I might be 
missing.

Some will be old hat to the ruby folks, but there might be some new ones that could 
peak pique your interest.  If you're a newbie to Rails like me, I suggest you add 
these to your podcast watcher of choice immediately!  Most of these will fall into 
either the “news of the week”, “interviews”, “howto” or “training” categories. 
 I'll categorize them for you a bit so you can pick and choose if you prefer one or 
the other.  There are a few that I've picked out that aren't strictly Rails or Ruby 
oriented, but they still get prime location in my weekly podcast listening.

    * Coderpath [itunes] (audio,interviews) @milesforrest and @curtismchale
    * RailsCasts [itunes] (video, training) @rbates
    * Rails Coach [itunes] (audio, interviews, training and howto) @charlesmaxwood
    * VimCasts [itunes] (video, training) @nelstrom
    * RailsLab Scaling Rails [itunes] (video, training) @greggpollack
    * Your Workflow [itunes] (audio, interviews) @curtismchale
    * Ruby Pulse [itunes] (video, training) aaalex
    * Ruby 5 [itunes] (audio, news) Envy Labs
    * The Ruby Show [i], The Dev Show [i] and other good stuff from 5by5 (audio, news, interviews)
    * Stack Overflow Podcast [itunes] (audio, news, howto and interviews) @spolsky and @jeffatwood
    * The Changelog [itunes] (audio, interview) @adamstac and @pengwynn
    * 37signals Podcast [itunes] (interview, howto) @dhh and @jasonfried

どれがいいかなあ。とりあえず 37signals のでもいってみるか。

■_ イディオム集

イディオム集めたところをつくろうとか。


Thinking In Rails » Blog Archive » Is A Site For Ruby Idioms Needed? [Update: Yes!]

Is A Site For Ruby Idioms Needed? [Update: Yes!]

I've noticed lately that there is definitely a “Ruby way” to write Ruby code. When I 
first read Effective Perl Programming years and years ago I went from writing code 
that looks like this (note that I know the “FILE” is wrong, but the wordpress 
auto-syntax highlighter thingy doesn't seem to deal well with the correct bracketed 
syntax):

while (my $line = FILE ) {
    if( $line =~ /foo/ ) {
		print "$line";
	}
}

(which isn't all that un-perl-y to begin with, but that's 15 years of perl in my brain 
stopping me from writing really un-idiomatic code) to far more idiomatic:

while (FILE) {
	print if /foo/
}

The point being that there are certain conventions and ways that your programming 
style will adapt to the given language. The following loop

for (i = 0; i < 10; i++) { }

Is perfectly natural in C, but if you saw it in perl or ruby, while it might be 
perfectly valid, it would look way out of place in either language, and you'd get 
funny looks if you presented it to a code review.

(略)

My vision is a melding of StackOverflow (maybe using their new StackExchange community 
software?) and Refactor My Code where you can search for an idiom or programming 
operation based on code, Class, or tag, vote, and comment or submit a different 
version.  Sort of like a Perl Golf contest except instead of the fewest keystrokes 
being the goal it's the cleanest/nicest/most effective way of doing the operation.

So what do you think, would this be useful to work on with the Ruby community, or is 
there enough information out there already that is google-able enough?  Everyone will 
also have their own way of doing things, but Ruby is an opinionated language (or is 
that only Rails?) so maybe there is One (or two) “correct” ways to do things.

Your thoughts appreciated.

Update – So a bit of discussion here, and lots of great comments on proggit show me 
that this idea does deserve a go of it.  I've registered ruby-idioms.com (pointed here 
for now) and hope to have something up in the next couple of weeks, and will take a 
few beta tests to have a run at it.  Keep an eye here for any news by subscribing to 
the RSS or following me on Twitter.  Thanks everyone!


こういうのは、みずしまさんが Scala の(日本語で参照できる)情報を集めるところを どうにかしたいというのにも通じるのかなあ。 これのコメントだかで、コードそのものは github でも使えばいいじゃんというのが あったと思うけど、コード以外の情報ねえ。

■_ ネタ from ム板

今日は短めに。


【入門】Common Lisp その7【質問よろず】
67 デフォルトの名無しさん [sage] 2010/05/05(水) 18:53:19 ID: Be:
    実用Common Lispなる本を買った
    寝っ転がって読もうとしたが、その質量にあえなく挫折した
    今は正座している 

Ruby 初心者スレッド Part 36 
742 デフォルトの名無しさん [sage] 2010/05/01(土) 04:03:22 ID: Be:
    たのしいRubyやってんだけどハッシュとかホントに使うのかよ
    イマイチ実感わかねってばよ 

743 デフォルトの名無しさん [sage] 2010/05/01(土) 05:32:25 ID: Be:
    無人島にデータ構造をひとつ持っていくならハッシュという有名な言葉があってだな 

■_ Mojibake

なんかよくわからんのですが、Windoows 版 Rのコンソール用実行ファイルを Vista の日本語版で実行するとメッセージが正しく表示されません。 xp や 2000 だと問題ないんですが。7 は未確認ですが、Vista と同じかなあ?

Vista での実行画面

2.9.x のときにの現象に気がついてちょっとソースを追いかけたんですが良くわからず。 日本語Windows全部で化けるならまだ理解できるんですが、 Vistaでのみ(ひょっとしたら7も)文字化けがおきるというのがなんとも。 素直にバグレポートしたほうがいいのかしらん。 でも再現させるのも多分向こうの人には大変だよなあ。 そして何がどう悪いのか理解してもらうのも。

■_ バイナリサーチ

あなたは10%に入れるか? わたしは自信ナッシング。


Are you one of the 10% of programmers who can write a binary search? « The Reinvigorated Programmer

Are you one of the 10% of programmers who can write a binary search?

April 19, 2010

There are some programming books that I've read from cover to cover repeatedly; there 
are others that I have dipped into many times, reading a chapter or so at a time.  Jon 
Bentley's 1986 classic Programming Pearls is a rare case where both of these are true, 
as the scuffs at the bottom of my copy's cover attest:


(I have the First Edition [amazon.com, amazon.co.uk], so that's what I scanned for 
the cover image above, but it would probably make more sense to get the newer and 
cheaper Second Edition [amazon.com, amazon.co.uk] which apparently has three 
additional chapters.)

I'll review this book properly in a forthcoming article (as I did for Coders at Work, 
The Elements of Programming Style, Programming the Commodore 64 and The C Programming 
Language), but for now I want to look at just one passage from the book, and consider 
what it means.  One astounding passage.


Only 10% of programmers can write a binary search
プログラマーのうち、ほんの10%だけしかバイナリサーチを書けない

Every single time I read Programming Pearls, this passage brings me up short:

    Binary search solves the problem [of searching within a pre-sorted array] by keeping
    track of a range within the array in which T [i.e. the sought value] must be if it is
    anywhere in the array.  Initially, the range is the entire array.  The range is shrunk
    by comparing its middle element to T and discarding half the range.  The process
    continues until T is discovered in the array, or until the range in which it must lie
    is known to be empty.  In an N-element table, the search uses roughly log(2) N
    comparisons.

    バイナリサーチはあらかじめソートされている配列に対する探索の問題を、仮に配列のどこかに
    存在しているのであれば配列中で T (つまり検索対象となっている値) が存在しうる範囲を追跡
    し続けることによって解決しています。この範囲はその中間に位置する要素とT とを比較して、
    範囲の半分を破棄することによって縮まっていきます。このプロセスは T が配列中で見つかるか
    あるいは検索対象の範囲が空になるまで続きます。N個の要素があるテーブルの場合、この検索で
    はおおむね log(2) N 回の比較を行います。

    Most programmers think that with the above description in hand, writing the code is
    easy; they're wrong.  The only way you'll believe this is by putting down this 
    column right now and writing the code yourself.  Try it.

    大部分のプログラマーは上述したこととそのコードを書くことは簡単であると考えていますが、そ
    れは間違っています。あなたがそれを信じる唯一の方法は、このコラムを今すぐ putting down し
    てあなた自身でコードを書くことです。Try it.

    I've assigned this problem in courses at Bell Labs and IBM.  Professional programmers
    had a couple of hours to convert the above description into a program in the language
    of their choice; a high-level pseudocode was fine.  At the end of the specified time,
    almost all the programmers reported that they had correct code for the task.  We
    would then take thirty minutes to examine their code, which the programmers did with
    test cases.  In several classes and with over a hundred programmers, the results
    varied little: ninety percent of the programmers found bugs in their programs (and I
    wasn't always convinced of the correctness of the code in which no bugs were found).

    わたしはこの問題を Bell Lab と IBM の courses で assign したことがあります。プロのプロ
    グラマーたちが自分の選択したプログラミング言語を使って上記の説明をプログラムにしていき
    ました。高水準の疑似コードは素晴らしいものでした。specified time の終わりには自分たちは
    正しいコードを書き終えたとほとんどすべてのプログラマーが報告しました。わたしたちはそれ
    から 30分かけてプログラマーがテストケースを通した彼らのコードを検査しました。いくつかの
    クラスでの百人以上のプログラマーたちの結果はそれほど変化があるものではありませんでした。
    プログラマーたちの90%は自分のプログラムにバグを見つけました(そしてわたしはいつも、バグ
    が見つかっていないコードの correctness を確信しません)。

    I was amazed: given ample time, only about ten percent of professional programmers 
    were able to get this small program right.  But they aren't the only ones to find 
    this task difficult: in the history in Section 6.2.1 of his Sorting and Searching, 
    Knuth points out that while the first binary search was published in 1946, the first 
    published binary search without bugs did not appear until 1962.

    I was amazed: 充分な時間を与えても、プロのプログラマーのほんの 10% ほどしかこの小さなプロ
    グラムを正しく書けなかったのです。けれども彼らだけがこのタスクの難しさを見抜けなかったの
    ではありません。歴史的にも Knuth が彼の Sorting and Searching の section 6.2.1 で最初に
    バイナリサーチが publish されたのが 1946 年のことなのにバグがないものが publish されるの
    は1962年までなかったと指摘しています。


    – Jon Bentley, Programming Pearls (1st edition), pp. 35-36.

Several hours!  Ninety percent!  Dude, SRSLY!  Isn't that terrifying?
何時間もかけて! 90% が! できないなんて!

One of the reasons I'd like to see a copy of the Second Edition is to see whether 
this passage has changed — whether the numbers improved between 1986 and the 
Second-Edition date of 1999.  My gut tells me that the numbers must have improved, 
that things can't be that bad;  yet logic tells me that in an age when programmers 
spend more time plugging libraries together than writing actual code, core algorithmic 
skills are likely if anything to have declined.  And remember, these were not doofus 
programmers that Bentley was working with: they were professionals at Bell Labs and 
IBM.  You'd expect them to be well ahead of the curve.


And so, the Great Binary Search Experiment
そこで、Great Binary Search Experiment です


I would like you, if you would, to go away and do the exercise right now.  (Well, not 
right now.  Finish reading this article first!)  I am confident that nearly everyone 
who reads this blog is already familiar with the binary search algorithm, but for 
those of you who are not, Bentley's description above should suffice.  Please fire up 
an editor buffer, and write a binary search routine.  When you've decided it's correct,
commit to that version.  Then test it, and tell me in the comments below whether you got
it right first time.  Surely — surely — we can beat Bentley's 10% hit-rate?

もしあなたがやってくれるというのなら、すぐにこの exersice をやってみてください(あー、
もちろん今すぐではなく、まずこの artticle を読み終えてくださいね!)。このブログを読んで
いる人はすでにこのバイナリサーチアルゴリズムをよく知っているだろうとわたしは確信してい
ます。けれどもあなたがこのアルゴリズムを知らない人たちの一人であるのなら上で述べた 
Bentley の description には十分でしょう。エディターのバッファーを fire up してください。
そしてバイナリサーチのルーチンを書いてください。そしてそれが正しいプログラムだと確信し
たところでそれをコミットしてください。それからテストをして、コメントで最初の一回で正し
いものが書けたかどうかをわたしに教えてください。
Surely ? surely ? we can beat Bentley's 10% hit-rate?
わたしたちは Bentley の 10% hit-rate を打破できるのでしょうか?

Here are the rules:
ルールは以下のとおりです:

   1. Use whatever programming language you like.

      あなたの好きなプログラミング言語をなんでも使ってかまいません。

   2. No cutting, pasting or otherwise copying code.  Don't even look at other binary 
      search code until you're done.

      コピペの類のことはしてはいけません。自分のものを仕上げるまでは、他のバイナリサーチの
      コードを一切見てはいけません。

   3. I need hardly say, no calling bsearch(), or otherwise cheating :-)

      いいにくいことなんですが、bsearch() を呼び出しはしてはいけませんし、その他のチート行
      為は使えません :-)

   4. Take as long as you like — you might finish, and feel confident in your code, 
      after five minutes; or you're welcome to take eight hours if you want (if you have
      the time to spare).

      好きなだけ時間をかけてよいです。あなたは5分で書き終えてしまって自分のコードの正しさに 
      確信を持つかもしれません。お望みなら、八時間かけるのも問題ありません (もしあなたにそ
      れだけの時間的な余裕があればですが)。

   5. You're allowed to use your compiler to shake out mechanical bugs such as syntax 
      errors or failure to initialise variables, but …

      構文エラーや変数の初期化の失敗のような mechanical バグを見つけ出すためにコンパイラーを
      使ってもかまいません。ただし…

   6. NO TESTING until after you've decided your program is correct.
      あなたが自分のプログラムが正しいと判断するまでテストを行ってはいけません。

   7. Finally, the most important one: if you decide to begin this exercise, then you 
      must report — either to say that you succeeded, failed or abandoned the attempt.  
      Otherwise the figures will be skewed towards success.

      最後に最も大切なことですが、あなたがこの exercise をすると決めたら、成功したのか、
      失敗したのか、あるいは諦めたのかを必ず報告してください。
      Otherwise the figures will be skewed towards success.

(For the purposes of this exercise, the possibility of numeric overflow in index 
calculations can be ignored.  That condition is described here but DO NOT FOLLOW THAT 
LINK until after writing your program, if you're participating, because the article 
contains a correct binary search implementation that you don't want to see before 
working on your clean-room implementation.)

If your code does turn out to be correct, and if you wish, you're welcome to paste 
that code into your comment …  But if you do, and if a subsequent commenter points 
out a bug in it, you need to be prepared to deal with the public shame :-)

For extra credit: those of you who are really confident in your programming chops may 
write the program, publish it in a comment here and then test it.  If you do that, 
you'll probably want to mention the fact in your comment, so we cut you extra slack 
when we find your bugs.

I will of course summarise the results of this exercise — let's say, in one week's time.

Let's go!

■_ 本日の巡回から

2010年05月04日

■_

・プログラミング本
連休中積ん読をいくらかやっつけたものの、 プログラミング関係の本がほとんどないことに絶望したっ (広い意味では含まれるものもあるんだけど) ○| ̄|_

・変換
IMEはありがとうございます→有難う御座います とかいった類の無用に漢字にしてしまう変換をデフォルトではしないようにすべきだ

・ペットボトルのお茶
「理由は生活スタイルの変化にあるんです。ポットを使う、という生活スタイルは、お茶を頻繁に飲む、ということに関係していました。しかし現在は、ペットボトルのお茶が普及しました。しかも、冬でも、冷たいお茶を飲むようになったのです。その結果、お湯の使用量が減ってきています」 - kinneko@転職先募集中の日記 ふと思い出したのですが、わたしが大学生だった頃同じ研究室に 台湾から留学で来ていた方が二人いらっしゃいました。 日本に来て驚いたことのひとつが、「冷たい烏龍茶」を飲むことだったそうです。 一回ご馳走になりましたがおいしかった。

■_ そろそろ試してみるかなあ

Strawberry Perl。


csjewell | April 2010 Strawberry Perl ... finally!

Been a long few days, but Strawberry Perl April 2010 (why do I want to keep typing 
2009?) is out.

Get it at http://strawberryperl.com/

Two major things have been added:

1) There is a version of Strawberry Perl that can relocate on installation - the 
    5.12.0 builds. 5.10.1 and 5.8.9 will still be restricted to C:\strawberry\ or 
    D:\strawberry\, depending on the file downloaded.

2) Additional modules and scripts have been added, and everything has been updated.

Plans for July 2010 (which will only include 5.12.1 and 5.10.1 builds - April is the 
last official 5.8.9 build) include a "thumb-drive-portable" 5.12.1 .zip file 
(instead of the current 5.10.1 thumb-portable), as well as a clean-up of all the 
reported/encountered bugs and polishing.

If MYMETA.yml support becomes universal, the build tools for Strawberry Perl will use 
it, as well.

I'll try and be around on irc://irc.perl.org/win32 for a few days to take and check 
bug reports, but otherwise I'll be taking a break until Monday. Then I'll start work 
on July 2010 (or a rebuild of April 2010 if major problems are encountered.)

Soon, I'll get the merge-module documentation up and on the site (I meant to do it for 
January, but decided to wait until April to get it announced and documented.)


そいやダウンロードページのところの注意書きを見ると 2000 は対象外っぽいのだけど… インストーラーの問題かなあ。

■_ 知らなかった

mixi のとあるコミュでのお話で。 [mixi] C言語とC++言語 | トピック作るほどでもない質問のトピック ver1.13 ファイルからリダイレクトで入力を行ったときに ( command < file みたいに)、 そのファイルの名前を知ることができないでしょうかといった内容の質問が 投稿されました。んで、

・Linux なら proc を見れば分かる

・/dev/stdinのreadlink の方がいいかも

     s = readlink("/dev/stdin", buff, 256), buff[s] = '\0'; // ← /proc/self/fd/0
     s = readlink(buff, buff2, 256), buff[s] = '\0'; // /← foo/bar/hoge.txt

・ Windowsなら GetFinalPathNameByHandle() でできるかも
     http://msdn.microsoft.com/en-us/library/aa364962(v=VS.85).aspx

     GetFinalPathNameByHandle(GetStdHandle(STD_INPUT_HANDLE), path, MAX_PATH, VOLUME_NAME_DOS);

へー、こんなんできたのね。と。

■_ SPSS

無理じゃないかねえ。


統計ソフトであるSPSSについて教えてください。 | OKWave

統計ソフトであるSPSSについて教えてください。

古いバージョンでもかまわないんですが、使用期限のない(デモではない)ものをフリーで入手
することは通常ムリなのでしょうか?基本的なことにしか使わない予定なのですが、どうしても
「SPSS」で出力したい状況です。ムリということであればデモ版でかまいませんので、入手法を
教えていただければ幸いです。よろしくお願いします。

まあそれはさておき、SPSSで検索するとこんなのが見つかりました。


PSPP - Wikipedia

PSPP は統計解析のためのフリーソフトウェアである。GUI とコマンドライン操作の両方で利用
することができる。C言語で書かれており、内部では数値計算にGNU Scientific Libraryを、プ
ロットの描画にGNU plotutilsを使っている。

PSPP は、商用の統計解析ソフトウェアのSPSSと同等の機能を実装することを目的として開発が
進められている。

特徴


PSPP は Excel、Gnumeric、Postgresデータベース、OpenDocument Spreadsheet、CSV、プレー
ンテキストの各形式のファイルを読み込むことができ、出力は SPSS の 'portable' および 
'system' 形式とプレイン・テキストで行うことができる。統計解析の機能としては、T検定、
ANOVA、線形回帰などが行える。またデータ変換や並び替えなどの操作も行える。

PSPP の開発プロジェクト (かつては "Fiasco" と呼ばれていた) は、SPSS のフリー
なオープンソースの互換ソフトウェアを作り上げることを目的としている。SPSS のソースは公
開されておらず、利用条件には厳しい制限とDRMが課せられているため、ライセンスを更新しな
ければ限られた期間だけしか使うことができない。それはおかしい、納得できない、とPSPP の
開発者は考え、ライセンスの期限切れ以外は SPSS と同じ機能を持つソフトウェアを開発し、万
人が共有、改良できるものにしたいと考えた。

更新履歴

    * 0.6.1 2008年10月
    * 0.6.0 2008年6月
    * 0.4.0.1 2007年8月
    * 0.4.0 2005年8月
    * 0.3.0 2004年4月
    * 0.2.4 2000年1月
    * 0.1.0 1998年8月

[編集] 評価

"SPSS For Dummies" という書籍 (For Dummies シリーズとして発行、英語) の 
"Ten Useful Things You Can Find on the Internet" [1] という章で PSPP が紹介
されている。2006年には南アフリカ共和国統計協会主催の会議で、PSPP でどうやって SPSS を
置き換えていくかを議論するセッションが設けられた[2]。

へーーー。SASの置き換えを狙ったのを作ったらその名前は ASA になるんですかねえ(笑)

■_ 求むご意見

訳している余裕がナッシング。

What is "elegant" code? - Stack Overflow

“エレガント”なコードって?

I see a lot of lip service and talk about the most "elegant" way to do this 
or that. I think if you spend enough time programming you begin to obtain a sort of 
intuitive feel for what it is we call "elegance". But I'm curious. Even if 
we can look at a bit of code, and say instinctively "That's elegant", or 
"That's messy", I wonder if any of us really understands what that means. Is 
there a precise definition for this "elegance" we keep referring to? If 
there is, what is it?

Now, what I mean by a precise definition, is a series of statements which can be used 
to derive questions about a peice of code, or a program as a whole, and determine 
objectively, or as objectively as possible, whether that code is "elegant" 
or not.

May I assert, that perhaps no such definition exists, and it's all just personal 
preference. In this case, I ask you a slightly different question: Is there a better 
word for "elegance", or a better set of attributes to use for judging code 
quality that is perhaps more objective than merely appealing to individual intuition 
and taste?

Perhaps code quality is a matter of taste, and the answer to both of my questions is 
"no". But I can't help but feel that we could be doing better than just 
expressing wishy washy feelings about our code quality. For example, user interface 
design is something that to a broad range of people looks for all the world like a 
field of study that oughtta be 100% subjective matter of taste. But this is shockingly 
and brutally not the case, and there are in fact many objective measures that can be 
applied to a user interface to determine its quality. A series of tests could be 
written to give a definitive and repeatable score to user interface quality. (See GOMS, 
for instance).

Now, okay. is Elegance simply "code quality" or is it something more? Is it 
something that can be measured? Or is it a matter of taste? Does our profession have 
room for taste? Maybe I'm asking the wrong questions altogether. Help me out here.

Bonus Round

If there is such a thing as elegance in code, and that concept is useful, do you think 
that justifies classifying the field of programming as an "Art" capital A, 
or merely a "craft". Or is it just an engineering field populated by a bunch 
of wishful thinking humans? Consider this question in the light of your thoughts about 
the elegance question.

Please note that there is a distinction between code which is considered 
"art" in itself, and code that was written merely in the service of creating 
an artful program. When I ask this question, I ask if the code itself justifies 
calling programming an art.

Bounty Note

I liked the answers to this question so much, I think I'd like to make a photographic 
essay book from it. Released as a free PDF, and published on some kind of on demand 
printing service of course, such as "zazz" or "tiggle" or 
"printley" or something . I'd like some more answers, please!

これに対していろいろ意見が寄せられています。 いくつか紹介…できるかなあ。

■_

■_ 本日の

C#, C♯, C#相談室 Part58 
734 デフォルトの名無しさん [sage] 2010/05/04(火) 00:25:02 ID: Be:
    このプログラムなのですが、どうしてもエラーが消えません。
    どこがおかしいのでしょうか?

    C:\Documents and Settings\tutomu\My Documents\Visual Studio 2008\Projects\gomokuproguram\sironoisi.cs 

737 デフォルトの名無しさん [sage] 2010/05/04(火) 00:32:48 ID: Be:
    知らんがな。つとむくん。 

738 デフォルトの名無しさん [sage] 2010/05/04(火) 00:58:19 ID: Be:
    うお、うpろだにあげるの忘れてた 

739 デフォルトの名無しさん [sage] 2010/05/04(火) 01:01:27 ID: Be:
    つとむくん
    忘れてたってレベルじゃねぇぞ!

    ところで
    gomokuproguram
    は
    GomokuProgram
    ではないか? 

740 デフォルトの名無しさん [sage] 2010/05/04(火) 01:04:52 ID: Be:
    もうやめて!つとむくんのライフゼロよ! 

741 デフォルトの名無しさん [sage] 2010/05/04(火) 01:07:32 ID: Be:
    つとむくんは盲点だったわww
    確かにwwww 

742 デフォルトの名無しさん [sage] 2010/05/04(火) 01:10:06 ID: Be:
    山口さんちのツトム君
    このごろ少し変よ どうしたのかナ 

743 デフォルトの名無しさん [sage] 2010/05/04(火) 01:12:46 ID: Be:
    何歳だよお前 

744 デフォルトの名無しさん [sage] 2010/05/04(火) 01:20:32 ID: Be:
    うpろだにつながらなくなってしまった
    なんで名前知ってるの・・・?

    いちようウイルスソフトは入れている
    2chになんかカキコするんじゃなかった 

745 デフォルトの名無しさん [sage] 2010/05/04(火) 01:24:02 ID: Be:
    誰だよお前 

746 デフォルトの名無しさん [sage] 2010/05/04(火) 01:26:50 ID: Be:
    例え私が滅びようが第二、第三のツトムが五目プログラムを作るであろう・・・

    グフッ 

747 デフォルトの名無しさん [sage] 2010/05/04(火) 01:34:27 ID: Be:
    >>744
    ウイルスソフトなんて入れてるから駄目なんだと思います。
    >>746
    ワロタww 

748 デフォルトの名無しさん [sage] 2010/05/04(火) 01:39:30 ID: Be:
    ツトム君の人気に嫉妬した 

749 デフォルトの名無しさん [sage] 2010/05/04(火) 02:25:23 ID: Be:
    プログラム一通り見たけど、設計がなってない 

750 デフォルトの名無しさん [sage] 2010/05/04(火) 02:44:44 ID: Be:
    シロノイシ

    なんか小説でも書けそうなタイトル 

751 デフォルトの名無しさん [sage] 2010/05/04(火) 09:32:12 ID: Be:
    つとむ君のスレになりそうだな
    【五目】C#相談室【白の石】 

752 デフォルトの名無しさん [sage] 2010/05/04(火) 09:50:42 ID: Be:
    こうだろ
    【五目】C#相談室(ツトム君専用)【白の石】 

755 デフォルトの名無しさん [sage] 2010/05/04(火) 11:09:10 ID: Be:
    白の意思・・・か・・・
    ついにはじまるのか・・・ 

756 デフォルトの名無しさん [sage] 2010/05/04(火) 11:46:18 ID: Be:
    燃え尽きた・・・真っ白に・・・ 

757 デフォルトの名無しさん [sage] 2010/05/04(火) 12:38:42 ID: Be:
    原因がわかりました
    iとjをまちがいていました
    変数名をtateとyokoにすることによって解決。
    forの変数はiから順に使うとならったけど
    名前を使ったほうが分かりやすいと思う

    あと名前をカキコするのはやめてください。
    どこで知ったのかわかりませんが
    ちゃんとうpろだに成功してたのかな?

758 デフォルトの名無しさん [sage] 2010/05/04(火) 12:41:08 ID: Be:
    "つとむ" はローマ字だと"tsutomu"だよ。
    "tutomu"じゃないよ。 

759 デフォルトの名無しさん [sage] 2010/05/04(火) 12:41:58 ID: Be:
    >>757
    ネタなのかマジなのか
    >>734で自分で晒してるよ

    IDEのデフォルトの保存場所にするとマイドキュメントになるので
    下手にプロジェクトとか晒すとユーザーネームまるばれなんだよw 

760 デフォルトの名無しさん [sage] 2010/05/04(火) 12:42:48 ID: Be:
    >>758
    僕はtutomuって書くことが多いですね
    最近はローマ字で名前書いたことないですけど 

761 デフォルトの名無しさん [sage] 2010/05/04(火) 12:44:00 ID: Be:
    >>759
    はぁー!
    フォルダに名前使ったおぼえないのに
    C#が勝手に作った!?_ 

762 デフォルトの名無しさん [sage] 2010/05/04(火) 12:45:34 ID: Be:
    >>761

    お前面白いなwww 

763 デフォルトの名無しさん [sage] 2010/05/04(火) 12:45:42 ID: Be:
    >>761
    プロジェクト保存するときに保存先を聞いてくるので
    見逃してたら自己責任だろうw 

764 デフォルトの名無しさん [sage] 2010/05/04(火) 12:47:14 ID: Be:
    >>758
    訓令式というものがあってな 

765 デフォルトの名無しさん [sage] 2010/05/04(火) 12:55:48 ID: Be:
    だめだフォルダの名前が変えれない
    名前フォルダの中にデスクトップがあるし訳が分からない
    デスクトップの中にエクスプローラーがあってその中にデスクトップがある。
    でも普通にファイル開けた

766 デフォルトの名無しさん [sage] 2010/05/04(火) 12:59:30 ID: Be:
    もうやめてあげて!ツトムくんが人間の形を留めていられなくなっちゃう! 

768 デフォルトの名無しさん [sage] 2010/05/04(火) 13:12:11 ID: Be:
    そろそろ板違いだから。
    これ以上やりたければ、パソコン初心者板でも行こうな。つとむくん。 

769 デフォルトの名無しさん [sage] 2010/05/04(火) 13:14:15 ID: Be:
    >>768
    既に聞きに行っているみたいだぞwww
    http://pc12.2ch.net/test/read.cgi/win/1267768729/828 

770 デフォルトの名無しさん [sage] 2010/05/04(火) 13:26:27 ID: Be:
    ネタじゃなくてマジだったのかw 

771 デフォルトの名無しさん [sage] 2010/05/04(火) 14:08:40 ID: Be:
    板を超えた釣りだろ 

772 デフォルトの名無しさん [sage] 2010/05/04(火) 16:53:13 ID: Be:
    >>769
    予想の斜め上www 

773 デフォルトの名無しさん [sage] 2010/05/04(火) 17:02:31 ID: Be:
    プログラム作る前にやることあるだろ 

774 デフォルトの名無しさん [sage] 2010/05/04(火) 17:56:23 ID: Be:
    「白の石」って響きがすごくかっこよいんですけど。 

775 デフォルトの名無しさん [sage] 2010/05/04(火) 20:02:39 ID: Be:
    でも、黒の石と別にする合理的な理由が思いつかない 

ローマ字のユーザー名ってのが引っかかるんだよなあ。ちょっとだけ。

2010年05月03日

■_

・Head First シリーズなんでもあるな
Amazon.co.jp: Head First Programming: A Learner's Guide to Programming, Using the Python Language: Paul Barry, David Griffiths: 洋書 なんてのを某大型書店の洋書売り場で目撃。 中身を軽く見た感じでは、Python を使ってGUIプログラムまである模様。 日本で見かける入門書とは違う感じですね。 for Dumies にもプログラミング入門のがあったと思いますが あれは Visual Basic 使ってたんだっけかなあ。

んで、先行販売らしい Amazon.co.jp: デザインイノベーション デザイン戦略の次の一手: ハルトムット・エスリンガー, 黒輪 篤嗣: 本 も見かけたのですが、買ってもすぐに読む余裕なさげなので微妙にスルー。 面白そうなんだけどなあ。

・REMIXI
REMIX ハイブリッド経済で栄える文化と商業のあり方
全体としてはこれまでのまとめという感じになるのでしょうか。 まるっきり目新しい話(意見)というのはなかったかもしれません。 この本で一番印象に残ったのはあとがきでして、

が、これまたちょいと寄り道だが、そうした著作権がらみの話以前の問題として、ぼくが少し憂
慮していることがある。第五章でレッシグは、文章に当然のこととして認められている各種の自
由について以下のように述べる。

(前略)どんな自由を当然のものと思っていただろうか?引用に許可を求めたりしただろうか?批判
相手に対し、批判することを告げただろうか?友人宛の手紙の中で、観た映画をけなすときに自
分の権利についてちょっとでも心配しただろうか?戦争についての論説でボブ・ディランを引用
していいか悩んだりしただろうか?

この質問すべてに対する答えはもちろん「ノー」だ。われわれは、この著述形態の実践に必要な
自由を当然のこととしてきた。
だが日本人のかなりの部分は、このどれも「ノー」だと即答できないし、ちっとも当然のことと 思っていない。無断引用を禁止するとかいうバカな使用条件のついたブログは山ほど見かける。 自分がどこか知らないところで批判されていると、「かげでコソコソ批判して卑怯だ」などと真 顔で言う人もあちこちで見かける。それも一応著書もあるプロの物書きだったりする。

この「プロの物書き」で、「やさしい~」をよくお書きになっている あの方を連想してしまいました :)

■_ 本日のネタ拾い

from マ板。

【実演】使えない新人 0x1D [chaika]
3 仕様書無しさん [sage] 2010/05/02(日) 00:28:18 ID: Be:
    何冊も本読んで書いてあるプログラムは全部作って一応頭では理解したつもりだが
    少し難しい応用プログラムを自力で書けと言われるとどの関数を組み合わせればいいのか分からず頭真っ白になる。

    このまま社会人になったら俺もいつかこのスレで晒されたりするんだろうかorz 

4 仕様書無しさん [sage] 2010/05/02(日) 01:10:46 ID: Be:
    >3
    う~ん、そういう人は基本的にプログラマに向いていないんだと思うんだよね、残念ながら。
    今からでも遅くないからプログラマ以外の方向を考えてみてはいかが? 

5 仕様書無しさん [sage] 2010/05/02(日) 03:13:24 ID: Be:
    専門学校一年目で挫折して辞めましたと言う勇気はありませぬ('A`)
    入学金でもかなり金かかったらしいし最低限親の出した金は回収してぇ

    国家資格ってどの程度取ればこの業界で渡っていけるんだろう、
    まだあと4年あるから必要なもんから順にガシガシ取って行きたいもんだが 

6 仕様書無しさん [sage] 2010/05/02(日) 03:22:14 ID: Be:
    国家資格なんざなくても十分食っていけます
    食っていくだけの能力があればね
    書類審査落ちを減らすために書くならとりあえずソフ開はほしい

    つか専門は死亡フラグ
    あんなのによくカネだせるわと思うようなのが多い上に
    経歴にブランクができるのを防ぐ以外に意味なし

    あとどうでもいいけどスレ違いじゃね 

7 仕様書無しさん [sage] 2010/05/02(日) 03:31:39 ID: Be:
    ありがとう、自力で学習するよりは多少マシだと思うし、学校で教えない部分まで独学でやってみる。
    このスレの内容見てたら少し恐くなったんだ、スレチでごめん 

8 仕様書無しさん [sage] 2010/05/02(日) 08:37:41 ID: Be:
    >>3
    >何冊も本読んで書いてあるプログラムは全部作って一応頭では理解したつもりだが
    これがゴールだと思っているのであれば晒されるタイプだね。
    初心者マーク(運転を一応頭で理解)レベルに
    決められた目的地と時間(仕様と納期)で実現できるか?というと無理。
    担当地域(業務領域)で経験を積んで初めて戦力になる。
    まだ頭で理解した程度なんだから応用プログラムを作れるようになるのはまだ無理。

    >>4
    業務に突っ込まれた時点で応用プログラム組める位
    多分アマチュア時代が十分長かったんだろうと思う。
    立ち上がりだけ見て全否定をやったら手が足らなくなるようになる。

9 仕様書無しさん [sage] 2010/05/02(日) 09:40:22 ID: Be:
    >>3
    新卒なんて即実戦は無理だって、みんな分かってると思う
    知識があるなら、後は経験を積めばいいんじゃない 

10 4 [sage] 2010/05/02(日) 10:41:46 ID: Be:
    みんな優しいのな。昔は>6-8みたいに思っていたんだが、やっぱり歩留まりが悪いのよ。
    数年先に能力不足や欝で放り出されるようなら最初から別の道を選んだほうが本人のため
    かなぁと。昔と違って業界の状況はかなり悪いし、転職はもっと厳しいし。個人的には
    プログラマではなくて運用とかの関連職種、もしくは何か自分が好きなものとコンピュータの
    組み合わせでいくか、社内Sヨになるか、そんなあたりを目指して視野を広く勉強することを
    オヌヌメします。現場は人余りの上、仕事ができないなんちゃってなやつが多くて大変なのよ。 

11 仕様書無しさん [sage] 2010/05/02(日) 11:05:48 ID: Be:
    専門の一年目だろ?単なる五月病じゃないか
    構うだけ無駄 

12 仕様書無しさん [sage] 2010/05/02(日) 14:02:37 ID: Be:
    結局最近の若いマは低レベルな所すっ飛ばしてるから潰しが利かないんだろ
    実務でやらせてもらえない低レベルな所を独習するべき
    というかプログラム以前のUNIX系のコマンドラインとvi使いこなす所からやり直すといい
    Emacsは使っていいがIDEは使うなよ
    IDEの使い方なんざ実務で覚えていけばいい 

13 仕様書無しさん [sage] 2010/05/02(日) 14:50:18 ID: Be:
    いまどきIDEなんて使いませんよ。
    SATAばかりです。 

14 仕様書無しさん [sage] 2010/05/02(日) 16:05:39 ID: Be:
    >>13
    それは低レベルすぎだw 

わたしのついったの TL に、~を勉強した。~を勉強しよう というのはよく見るのに、実際にそれを使ってプログラムを組んだとか言うのを ぜんぜん見ない人がいたりします。 まあ面識ない人なんで静観してますが。

■_

訳してみたらあまり面白くなかった ○| ̄|_

blog | Perlgeek.de :: You are good enough!

Sun, 25 Apr 2010

You are good enough!

Have you ever tried writing a compiler?

あなたはこれまでにコンパイラーの作成に挑戦したことはありますか?

Most programmers haven't. Most programmers think that writing a compiler is hard. Or 
even some deep magic for which you need some kind of advanced wizardry that you only 
obtain by hacking twenty years on a compiler already, or so.

大部分のプログラマーはその経験 (コンパイラ作成) がなく、コンパイラーを書くのが難しいこ
とだと考えています。さもなければ、二十年もコンパイラーについてハッキングすることによっ
てのみ得られるsome kind of advanced wizardry が必要になるような何か奥深い魔術のように
思っています。


It's not.

そうではないのです。


Writing a feature complete compiler for a full fledged programming language is quite 
some work. But writing a simple compiler isn't. And contributing to an existing 
compiler isn't either.

full fledged なプログラミング言語のための機能が完全なコンパイラーを書くことは
quite some work です。しかしシンプルなコンパイラーを書くことはそうではありませんし、
既にあるコンパイラーに対して contributing することもそうではありません。

I'd like to point you to Jack Crenshaw's tutorial series Let's Build a Compiler. It's 
rather old, and outdated by many standards, and not all that well formatted and so on, 
but it really teaches you the basics of how to parse a program, and then interpret it, 
or compile it down to assembler.

Jack Crenshawによるチュートリアルシリーズである Let's Build a Compiler をあなたに紹介
しましょう。これはとても古く、時代遅れ (outdated) のもので、すべてが well formatted と
いうわけではありません。しかしこれは、どのようにプログラムをパーズして、それからインタ
ープリットしたりアセンブラーにコンパイルするかについての基本をあなたに教えてくれるので
す。


But mostly it shows you that compiler writing is no black magic at all. It's just like 
writing any other kind of program: Once you've got the gist of how compilers can work, 
it's mostly a matter of actually implementing things. And if some features seem hard 
to implement, there's plenty of literature that you can read on that particular topic.

しかしそれはおおむねコンパイラーの作成が黒魔術の類ではないことをあなたに示しています。
ほかの種類のプログラムを書くのと同じなのです。あなたが一度コンパイラーがどのように動作
しているのかを把握してしまえば、主な問題は実際に実装することですし、そして一部の機能は
実装するのが困難なように思えるようなら、あなたがその特定のトピックで読める literature 
の plenty があります。


(Mr. Chrenshaw's tutorial inspired me to write a toy interpreter in Perl for a nearly 
usable, Turing complete programming language. Math::Expression::Evaluator is a side 
product of writing that interpreter).

(Mr. Chreshaw のチュートリアルは Perl でv nearly usable なチューリング完全なプログラミ
ング言語であるような toy インタープリターを記述するためのわたしにインスピレーションを
与えました。Math::Expression::Evaluator はそのインタープリターを書いたときの side 
product です).


Contributing to an existing compiler is even easier. The overall architecture already 
exists, and typically you need to only modify small parts to add a feature.

既にあるコンパイラーに contributing するのはとても簡単です。全体としてのアーキテクチャ
は既に存在していて、典型的にはあなたが必要なのは追加する機能のための小さなパーツを書き
かえることだけです。


I want to illustrate this by a feature that Solomon Foster, Jonathan Worthington and I 
added to Rakudo in a nice piece of collaboration.

わたしはこれを、Solomon Foster, Jonathan Worthington と
自分とで in a nice piece of collaboration 
で Rakudo に追加した機能によって illustrate したいのです。


The Feature (機能)

Perl 6 has the reduction meta operator. It takes an infix operator, and applies it to 
a list. Here a few examples:

Perl 6には reduction メタ演算子 があります。これは中置演算子を受け取ってそれをリストに
対して適用します。いくつか例を挙げましょう:

# normal form
# same as 1 + 2 + 3 + 4
my $sum = [+] 1, 2, 3, 4;

# triangle form:
# same as
# my @sub-sums = 1, 1 + 2, 1 + 2 +3 , 1 + 2 + 3 + 4
my @sub-sums = [\+] 1, 2, 3, 4;

# right-associative operators are reduced right to left:
# 右結合の演算子は右から左へ reduce されます:
# infix:<**> is exponentiation
# 中置の <**> はべき乗を行います
# same as 2 ** (3 ** 4)
say [**] 2, 3, 4

# chained operators are AND'ed together:
# same as  1 <= 2 && 2 <= 3 && 3 <= 4
my $sorted = [<=] 1, 2, 3, 4;

Status Quo

When we started our work, only the first, simplest version was implemented, i.e. 
reduction of a left associative, non-chaining infix operator.

わたしたちが自分たちの仕事を始めたときには最初の最も単純なバージョンだけが実装されてい
ました


What we did (わたしたちがやったこと)

Solomon started with a basic implementation of the reduction logic. You'll notice that 
it's written in Perl 6, so no knowledge of scary low level languages required.

Solomon は reduction logic の基本的な部分の実装から始めました。あなたはそれが Perl 6で
書かれていることに気がつくでしょうですから、scary な低水準言語の知識は不要なのです。


In a series of small patches Solomon and I generalized and improved the logic step by 
step, and Jonathan wired the parser to the reduction logic.

一連の小規模なパッチ群で、Solomon とわたしは一ステップ毎にロジックを作ったり改良を行い、
Jonathan は reduction のロジックのために parser を wired しました。


All of these patches were written in Perl 6 code, and only the last one required more 
than a trivial amount of guts knowledge.

これらのパッチはすべてPerl 6のコードで書かれているので、ただ一つ最後に要求されて
いるのは単なる amount of guts knowledge 以上のものです。


The actual reduction method is no piece of magic. It ended up a bit lengthy because it 
needs to consider several different variations of the reduction feature. It's just an 
ordinary function that you would typically find in a perl module.

実際の reduction メソッドは piece of magic ではありません。reduction 機能にはいくつか
の異なるバリエーションを考慮する必要があるので結局は少々長ったらしいもの ( bit lengthy) 
になっています。それはまさにあなたが perl モジュールでよく見かけるであろう普通の関数で
す
# piece of magic → ?

Conclusion (結論)

If you know a bit of Perl 6, you can contribute to Rakudo today. Many built-in 
features can be desugared to ordinary library functions under the hood. If implement 
the logic, somebody can tell you how to wire up it with the rest of the compiler, or 
even do it for you.

もしあなたがほんの少し Perl 6 を知っていれば、今あなたは Rakudo に貢献できます。組み込
み機能の多くは(under the hood な)ふつうのライブラリ関数へと desugar できます。ロジック
が実装されていれば、誰かがあなたに コンパイラーの残りの部分をどのように wire up するの
かを教えてくれるかもしれません。あるいはあなたのためにやってくれる人だっているかも知れ
ません。


You are good enough. Ordinary programmers can do it, no wizardry required.

あなたは good enough です。ふつーのプログラマー (ordinary programmers) でもそれは可能
なのです。wizardry は必要はありません。

(The same actually holds true for most projects that look scary from the outside. In 
my experience it's just very important that the community is friendly and helpful.)

(With apologies to mst).

Comments / Trackbacks:


Eddward wrote

    Somewhat related...
    Since the reduce is written in perl6, does that mean it is not byte compiled? Or  
    rather, the reduce function is implementing the 'reduce' op code?

    reduce が perl6 で書かれているということは、それがバイトコンパイラーではない
    という意味になのでしょうか? あるいは、この reduce 関数は 'reduce' オペコードを
    実装するのでしょうか?

    If so, is there some rule of thumb as to what perl6 features can be used to 
    implement op codes in order to prevent recursive op codes?

    もしそうなら、再帰的なオペコードを防止するためのオペコードを実装するのに使え
    るようなperl6 の機能としての some rule of thumb が存在しているのでしょうか?

    Edd 

Thomas Lee wrote


    Absolutely spot on! And yes, this is most definitely true of all projects that 
    look scary from the outside. Really, all it takes to get involved is a little 
    knowledge, a willingness to contribute, and knowing where to ask for help or
    guidance. This is true of open source projects in particular. 


Ives van der Flaas wrote


    Well, contributing to *your* compiler's pretty easy. Try adding a feature to 
    http://awib.googlecode.com/svn/builds/awib-0.2.b ;-) 

moritz wrote

    Bootstrapping and circularity chainsaw (for Eddward)
    The reduce subroutine is written in Perl 6, and when you build the compiler, it is 
    also written in bytecode.

    reduceサブルーチンはPerl 6 で書かれていて、コンパイラーをビルドするときにには
    バイトコードで記述されます。

    Of course not everything can be written in Perl 6: Adding two integers or floating 
    point numbers is a primitive of the underlying virtual machine (parrot in this case), 
    and &infix:<+> is a wrapper around such an opcode. The situation with
    substr() is similar.

   二つの整数や二つの浮動小数点数の加算はバーチャルマシン(今回はparrot)に依存するプリミ
   ティブで、&infix:<+> はそういったオペコードに対するラッパーです。substr()
   についてのシチュエーションも同様です。

    So what features can you write in Perl 6?
    Basically everything. Large parts of grammar engine and of the meta object 
    protocol are written in Perl 6 (or subsets thereof).

    ではPerl 6で書ける機能とはなんでしょうか? 基本的にはすべて。grammar エンジンの
    large parts とメタオブジェクトプロトコルはPerl 6(もしくはそのサブセット)で記述
    されています。

    And which features can use for that?
    All the things that are already implemented. None of these already implemented 
    built-ins use your new function, so there's no endless recursion.

    そしてそのために使える機能とは?
    すでに実装されているものすべて。あなたの新しい関数を使うような実装済みのビルトイン
    のものはないので、終わりなき再帰に陥ることはありません。

Herve wrote

    Just a suggest//Remarks about the syntax of [\+] (triangle form)
    # my @sub-sums = [\+] 1, 2, 3, 4; (1, 1 + 2, 1 + 2 +3 , 1 + 2 + 3 + 4

    [\+] don't say what it's doing.
    May be [<+>] or [@+] says much that you get an array on the output...

    May be, some (Hyper|Meta|etc.)operators is -OFun for writing, but not so '-OFun' for
    reading (without comments// explanations).

    Look at the Zip operator 'Z' and the Cross operator 'X':
    They can obfuscated the program reading :
    my @Y=<U V> X~X <W Z>;
    my @X=@Y Z <V W>;

    With them, it's easy to write unreadable programs lines.

    Could you avoid that 'Perl6' will produce 'unreadable' programs like Perl[1..5] did it ?
    Could you avoid that Perl6 have later a dark side like its parents ?

    The syntax of a language can play for him or against him.

    Anyway, Parrot & Raduko Teams do very good job...
    Thanks for all.

    (For ever Perl lover) 
 
Copyright 2008, 2009: Moritz Lenz

This page my 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.

■_ 64bit 非互換

大変そうだなあ(棒読み)


jijixi's diary - SML# 0.40 をビルド……できない , なんか変だな…… , とりあえず詰んだ

2010-05-03 [長年日記]
% [SML#][Mac] SML# 0.40 をビルド……できない

環境は Mac OS X 10.6.3。 こんなエラーが。

../../../../src/runtime/runtime-core/main/SystemDef.hh:40:2: error:
#error ---- SML# requires sizeof(void*) == sizeof(int or long) ----

えぇ~? コンパイラフラグとかで回避できるかなあ……
% [SML#][Mac] なんか変だな……

(略)

どうなってんの? と思って件のファイル (src/runtime/runtime-core/main/SystemDef.hh) を見る。

33 #if SIZEOF_VOIDP == SIZEOF_INT && SIZEOF_INT == 4
34 typedef signed int SInt32Value;
35 typedef unsigned int UInt32Value;
36 #elif SIZEOF_VOIDP == SIZEOF_LONG && SIZEOF_LONG == 4
37 typedef signed long SInt32Value;
38 typedef unsigned long UInt32Value;
39 #else
40 #error ---- SML# requires sizeof(void*) == sizeof(int or long) ----
41 #endif

…… これはつまり 64bit 環境は非対応ですってことか? 32bit でコンパイルすればうまくい
くってことかねえ。

続く…… かも。
% [SML#][Mac] とりあえず詰んだ

試しに、

% CFLAGS='-m32' CPPFLAGS='-I/opt/local/include' LDFLAGS='-L/opt/local/lib' ./configure

こんな感じにしてみたら、

checking for __gmpz_init in -lgmp... no
configure: error: GMP library is not found.

こうなる。 まあ想定内。 MacPorts で何も考えずに入れたら 64bit になってるだろう。

/opt/local/lib/libgmp.dylib: Mach-O 64-bit dynamically linked shared library x86_64

じゃあ GMP を 32bit で作るか、と思って、gmp-5.0.1 のアーカイブを展開しビルドを試みる。

% CFLAGS='-m32' ./configure
(snip)
checking size of mp_limb_t... 4
configure: error: Oops, mp_limb_t is 32 bits, but the assembler code
in this configuration expects 64 bits.
You appear to have set $CFLAGS, perhaps you also need to tell GMP the
intended ABI, see "ABI and ISA" in the manual.

え~ orz

CFLAGS を工夫すれば行けるのか、gmp の古いのを拾ってくれば行けるのか、わからんけどそろ
そろめんどくさくなってきたので一旦終了。 誰か偉い人が噛んで含むような Workaround をま
とめてくれんものかな(疲

GMP はずいぶんと前に自前でビルドしたことがあるけど、どうだったかなあ (もちろん Mac OS X ではありませんが)。 assembler code というのがメッセージに出てきているので、高速化などのために一部直接 アセンブリ言語で書かれているコードの問題? SSE2 が使えるかとかでいろいろファイルを切り替えてたような気がするんだけど どうだったっけか

情報量0ですみません ○| ̄|_

■_ ,,?

Lisp のマクロの話なんですが。


once-only - 主題のない日記
(略)
その defmacro を用いて、また、あわせて使えるように once-only を定義してみよう。

(library (once-only)
  (export once-only)
  (import (rnrs) (defmacro))
	 
  (defmacro once-only (vars . body)
    (let ((gs (map (lambda(_) (gensym)) vars)))
      `(let ,(map (lambda(g) `(,g (gensym))) gs)
         `(let (,,@(map (lambda(g n) ``(,,g ,,n)) gs vars))
            ,(let (,@(map (lambda(g n)`(,n ,g))  gs vars))
               ,@body)))))
)

,, というのにびびった。 二重クォートみたいなもの?

■_ 本日の巡回から

2010年05月02日

■_

・読んだ
REMIX。感想とかあとで。

まんがくらぶ(本来の発売日は4日)が、前倒しでもう発売されててびっくり。 以前は発売日が祝日や休日にかかると、後ろに行くことはあっても 前になるなんてこたなかったのになあ。

■_中の人


プログラミング言語 Scala 3冊目 
347 デフォルトの名無しさん [sage] 2010/04/30(金) 15:00:21 ID: Be:
    >>344
    340ではないが、型を名前の後に置くこと(i:int, s:String) に馴染めない。
    これを int i, String s と書けるようにするだけで、だいぶ違うだろ。

348 デフォルトの名無しさん [sage] 2010/04/30(金) 15:33:34 ID: Be:
    IDE使うの大前提だと後置式のがいい。 

350 デフォルトの名無しさん [sage] 2010/04/30(金) 18:39:09 ID: Be:
    構文的には後置のほうが混乱が少ないと思う
    それに関数型言語は後置にするのが多いからね
    まあ、慣れの問題だね 


361 デフォルトの名無しさん [sage] 2010/05/01(土) 01:41:26 ID: Be:
    最近のはやりは後置だな
    golangもやはり後 

362 デフォルトの名無しさん [sage] 2010/05/01(土) 01:59:45 ID: Be:
    上の方で書かれている理由に加えて、後置(+キーワードを先置く形式)にするとちょっと
    構文解析が楽になるというのもあるかも(これはそれほど重要じゃないだろうけど)。 

363 デフォルトの名無しさん [sage] 2010/05/01(土) 02:33:06 ID: Be:
    pascal出身としては安心するなぁ 

364 デフォルトの名無しさん [sage] 2010/05/01(土) 03:20:38 ID: Be:
    1ヶ月もすれば、どうでも良くなってくるよ。
    くだらない。 

365 デフォルトの名無しさん [sage] 2010/05/01(土) 07:59:34 ID: Be:
    最近の若い子はPascalなんて知らないんだろうな 

366 デフォルトの名無しさん [sage] 2010/05/01(土) 08:56:55 ID: Be:
    ScalaDays2010の全講演のビデオ来てますよー
    http://days2010.scala-lang.org/node/136

    英語わかんなくても結構面白い
    コーラのボトル持ってしゃべる人が居たりw 

367 デフォルトの名無しさん [sage] 2010/05/01(土) 11:36:34 ID: Be:
    >>366
    グッジョブ 

368 デフォルトの名無しさん [sage] 2010/05/01(土) 11:51:38 ID: Be:
    >>366
    さっぱりわからんけど、(Scala界隈の)有名人がでてるやつとか、面白い内容のおすすめなのとかある? 

369 デフォルトの名無しさん [sage] 2010/05/01(土) 12:51:54 ID: Be:
    >>368
    とりあえず個人的なお勧めは、Oderskey先生のOpening Talkと
    Named And Default Arguments, それとSneaking Scala Into Your Organization
    辺りかな。Odersky先生以外のScala界隈の有名人と言ったらDavid Pollakとかだけど
    彼は発表してなかったなー。あと、IntelliJの人のScalaのリファクタリング機能に関する
    発表とかも面白かった 

370 デフォルトの名無しさん [sage] 2010/05/01(土) 12:52:54 ID: Be:
    しまった。Oderskey→Odersky。間違えるなんてorz 

371 デフォルトの名無しさん [sage] 2010/05/01(土) 12:53:16 ID: Be:
    えいごが解らん
    なんとかしてくれ 

385 デフォルトの名無しさん [sage] 2010/05/02(日) 00:18:19 ID: Be:
    やべぇ、日本人で発表してる人がいるんじゃん > Scala Days
    英語がたどたどしいけど、それにしてもすげぇな 

386 デフォルトの名無しさん [sage] 2010/05/02(日) 01:30:04 ID: Be:
    >>385
    たぶんツイッターにいてtsudaってくれてたひとじゃないかな?
    自分英語わからんからああいうのはすごく助かるわ 

387 ◆ueEP8Ean2lqc [sage] 2010/05/02(日) 02:09:17 ID: Be:
    その張本人が書きこんでみる
    正直、>>385の書いてる通り英語はたどたどしかったし質問聴きとるのは
    難しかったしでなかなか大変でした。あのときは、テンションが凄まじく高かったので
    今思うと凄いペースでtsudaってましたね。あれでScala Daysに興味を持ってもらえたなら
    こちらとしても嬉しいですね。 

388 デフォルトの名無しさん [sage] 2010/05/02(日) 02:18:14 ID: Be:
    >387
    じゃ、せっかくなんで、何か面白いこと書いてくれ。 

389 デフォルトの名無しさん [sage] 2010/05/02(日) 02:21:15 ID: Be:
    さっきから見る度見る度、 Scool Days に空目してしまう件 

390 デフォルトの名無しさん [sage] 2010/05/02(日) 02:29:43 ID: Be:
    Scool DaysをSchool Daysに空目 

391 デフォルトの名無しさん [sage] 2010/05/02(日) 02:32:11 ID: Be:
    あ、ほんとだ、タイポ。 

392 デフォルトの名無しさん [sage] 2010/05/02(日) 02:32:40 ID: Be:
    誠死ね 

393 デフォルトの名無しさん [sage] 2010/05/02(日) 03:00:07 ID: Be:
    >>387
    日本でも Scala を広めようず 

394 デフォルトの名無しさん [386] 2010/05/02(日) 03:38:31 ID: Be:
    >>387
    あ、本人が降臨しとるw

    確かにすごいペースでtsudaってるなぁとは思ったけど、自分は普通に面白かったよ
    Scalaのロゴの元になった階段の写真とかも
    そういやScala作者にサイン本もらってたな、うらやま

    まぁ日本での布教活動を頑張っておくれ
    個人的な希望を言えば特に日本語情報の充実を…

twitter でみずしまさんが日本語で質問やその回答のやり取りができる stackoverflow.com みたいのがあればなあと書いてたけど 確かにそういうの欲しいなあ。Scala に限らないけど。

■_ よくある質問

reddit から。

途中ネタに走っている部分もありますが。


If a program needs to be compiled to run and a compiler is a program, how was the first compiler compiled? (self.programming)

I've read about the chicken and egg problem when referring to compiler creation, but 
am still confused. Was it just written in pure machine code? Any explanation would be 
greatly appreciated!

Edit: Thanks for all the replies and great links to look at!

Edit2: This was just a fun question to get people thinking, and I'm aware of
Google's existence.


The first compiler was not compiled, it was assembled. The first assembler was not 
assembled, the machine code was written directly.

For an example, check out http://www.rano.org/bcompiler.html


Actually grace hopper wrote her first compiler in machine code, without using an 
assembler. But that was not the last time a compiler was bootstrapped, and many 
compilers since then have been made using an assembler.

Also, in a way, the first compilers were the grad students who took their professor's 
higher level descriptions of code and compiled them by hand into machine code - it was 
considered a waste of valuable CPU time to have a computer do such work.


I was about to write in a similar format about how the TTL circuits, MOSFETS, and 
diodes needed to be invented/created, but I think I'll spare reddit that long comment.


"To make an apple pie from scratch, you must first create the universe."

C. Sagan


It's turtles all the way down!


Infinite regress solved.


But who programmed God?


Donald Knuth.


error: Donald Knuth is God.


Recursive meta-programming in action.


good one there!


Actually, the first compiler was interpreted, and the first interpreter was assembled.


    and the first interpreter was assembled.

By hand, too.

in the snow


uphill


both ways


without shoes


lump of cold poison


shoebox in't middle o'road


bugrit, millenium hand and shrimp


grace hopper did not use an interpreter to write her first compiler. which compiler 
are you talking about?

The first interpreter for Lisp was written in assembly, and later Lisp compilers were 
written in Lisp, able to bootstrap themselves from interpreted Lisp. This was around 
1960, so quite early, but several compilers had been written before that time. Which 
was the first one depends on definition of what makes a compiler or interpreter, but 
most of them were written in assembly or machine code. This include Grace Hopper's 
compiler (FLOW-MATIC) The first FORTRAN compiler was first written in assembly, and 
then reimplemented in FORTRAN and bootstrapped to be compiled by itself. This happened 
in the 1954-1957 timeframe.


It was written in assembly language by Grace Hopper.


010010010110011000100000010010010010000001110100011011110110110001100100001000000111100101101111011101010010110000100000010010010010011101100100001000000110100001100001011101100110010100100000011101000110111100100000011010110110100101101100011011000010000001111001011011110111010100101110


01110101 01110000 01110110 01101111 01110100 01100101 01100100 00100000 01100110 01101111 01110010 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01100001 01110111 01100101 01110011 01101111 01101101 01100101 01101110 01100101 01110011 01110011


~% ghci
GHCi, version 6.10.4: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer ... linking ... done.
Loading package base ... linking ... done.
Prelude> :m + Data.List.Split Numeric Data.Char
Prelude Data.List.Split Numeric Data.Char> let decode = map (chr . fst . head . readInt 2 isDigit digitToInt)
Prelude Data.List.Split Numeric Data.Char> decode . chunk 8 $ "010010010110011000100000010010010010000001110100011011110110110001100100001000000111100101101111011101010010110000100000010010010010011101100100001000000110100001100001011101100110010100100000011101000110111100100000011010110110100101101100011011000010000001111001011011110111010100101110"
Loading package syb ... linking ... done.
Loading package base-3.0.3.1 ... linking ... done.
Loading package split-0.1.1 ... linking ... done.
"If I told you, I'd have to kill you."
Prelude Data.List.Split Numeric Data.Char> decode . words $ "01110101 01110000 01110110 01101111 01110100 01100101 01100100 00100000 01100110 01101111 01110010 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01100001 01110111 01100101 01110011 01101111 01101101 01100101 01101110 01100101 01110011 01110011"
"upvoted for binary awesomeness"
Prelude Data.List.Split Numeric Data.Char> 


0011000000110001001100010011000100110000001100010011000000110001001000000011000000110001001100010011000100110000001100000011000000110000001000000011000000110001001100010011000100110000001100010011000100110000001000000011000000110001001100010011000000110001001100010011000100110001001000000011000000110001001100010011000100110000001100010011000000110000001000000011000000110001001100010011000000110000001100010011000000110001001000000011000000110001001100010011000000110000001100010011000000110000001000000011000000110000001100010011000000110000001100000011000000110000001000000011000000110001001100010011000000110000001100010011000100110000001000000011000000110001001100010011000000110001001100010011000100110001001000000011000000110001001100010011000100110000001100000011000100110000001000000011000000110000001100010011000000110000001100000011000000110000001000000011000000110001001100010011000000110000001100000011000100110000001000000011000000110001001100010011000000110001001100000011000000110001001000000011000000110001001100010011000000110001001100010011000100110000001000000011000000110001001100010011000000110000001100000011000000110001001000000011000000110001001100010011000100110000001100000011000100110000001000000011000000110001001100010011000100110001001100000011000000110001001000000011000000110000001100010011000000110000001100000011000000110000001000000011000000110001001100010011000000110000001100000011000000110001001000000011000000110001001100010011000100110000001100010011000100110001001000000011000000110001001100010011000000110000001100010011000000110001001000000011000000110001001100010011000100110000001100000011000100110001001000000011000000110001001100010011000000110001001100010011000100110001001000000011000000110001001100010011000000110001001100010011000000110001001000000011000000110001001100010011000000110000001100010011000000110001001000000011000000110001001100010011000000110001001100010011000100110000001000000011000000110001001100010011000000110000001100010011000000110001001000000011000000110001001100010011000100110000001100000011000100110001001000000011000000110001001100010011000100110000001100000011000100110001


The egg came before the chicken


With many languages that are compiled, initial incarnations of the compiler provide 
some minimal subset of the full functionality later desired, and then a fuller 
implementation of the compiler is written using that basic functionality.

It's compiler bootstrapping.

カール・セーガン曰くて。

■_ 本日の巡回から

■_

すすまねー(いろいろと)。

2010年05月01日

■_

どこかにうち捨てられてるポメラとかないかなあ

・実用Common Lisp
邦題にいろいろ不満の声がでているようですね。 ClojureとかScalaとか - takkan_mのNo planな日常 私もあの原題をああ訳すのはどうかと思います。まぁ、あの値段を本を躊躇なく買う人はわかっている人だと思うけど。 とか 2010-04-30 - 猫的怠惰Days このタイトルについては翔泳社を罵倒すべき。というかなめてんの? とか。 まあ Paradigms of Artificial Intelligence Programming: Case Studies in Common Lispじゃあ売れないよって判断、 という話なんでしょうねえ。 Case Studiles → 実用 うーーん。

IT業界を楽しく生き抜くための「つまみぐい勉強法」 (技評SE選書 15) セキュリティの神話 アルゴリズムクイックリファレンス
買った。まあどれもほかの人が書評やら書くでしょ(なげやり)。 ただまあ、最後の「アルゴリズムクイックリファレンス」はオススメ。 これ一冊ですむってもんでもないけど、手近において見るには版型や厚さが 具合がいいと思う。もちろん内容も悪くない。今流行の(流行ってるのか?)グラフ関係もあるし。

■_ それは MS (のみ)の責任じゃなかろう


Pythonのお勉強 Part37
797 デフォルトの名無しさん [] 2010/05/01(土) 00:17:14 ID: Be:
    文字コードをUTF-8にして[print u"こんにちは"」とうっても
    SyntaxError: (unicode error) 'utf8' codec can't decode byte 0x82 in position 0: unexpected code
    とでてユニコード文字列が表示されませんなぜでしょうか? 

798 デフォルトの名無しさん [sage] 2010/05/01(土) 00:28:03 ID: Be:
    Shift_JISでソースコード保存したからだろ 

799 デフォルトの名無しさん [sage] 2010/05/01(土) 01:39:53 ID: Be:
    今時ShiftJISなんて使ってんの? 

800 デフォルトの名無しさん [sage] 2010/05/01(土) 02:59:38 ID: Be:
    ShiftJISが許されるのは小学生までだよねー 

801 デフォルトの名無しさん [sage] 2010/05/01(土) 03:59:00 ID: Be:
    >>797
    必ず誤解するひとがいるんだけど
    文字コードのUTF-8と
    print u"ほげ" のUNICODEは
    イコールではない 

805 デフォルトの名無しさん [sage] 2010/05/01(土) 11:24:22 ID: Be:
    >>801
    はあ??? 

806 デフォルトの名無しさん [sage] 2010/05/01(土) 11:32:10 ID: Be:
    PythonではShift_JISなんて書かないぞ。
    CP932だ。
    厳密に言うと少し差異はあるけどな。 

807 デフォルトの名無しさん [sage] 2010/05/01(土) 11:33:37 ID: Be:
    >>805
    え?知らなかったの?

    unicode型の内部実装はUTF-16だが、内部実装の話はさておき
    str型は(UTF-8なりなんなり、対応するcodecで書かれた)バイト列で、
    unicodeはユニコード文字の集合。

    lenとか使ってみたら違いが分かる。 

808 デフォルトの名無しさん [sage] 2010/05/01(土) 11:34:43 ID: Be:
    >>806
    PythonでもShift_JISはコーデックとして用意されてるよ。ちゃんとCP932とは別の物として。
    けれど逆に混乱招いてるだけな気がしなくもない。 

809 デフォルトの名無しさん [sage] 2010/05/01(土) 11:49:07 ID: Be:
    >>807
    UCS-4でコンパイルするオプションがあるぞ 

810 デフォルトの名無しさん [sage] 2010/05/01(土) 12:10:58 ID: Be:
    >>808
    そもそもShift-JISにMSが拡張したものがcp932なので、
    混乱を招いているとしたらそれはPythonではなくて機種依存拡張文字を追加したMSの責任。

    たとえば、①はShift-JISでは使えなくて、cp932では使える。 

811 デフォルトの名無しさん [sage] 2010/05/01(土) 12:49:49  ID: Be:
    >>810
    全角丸数字や全角ローマ数字がこの世から消えてほしいと願うばかり。
    こいつらのせいで、組版で余計な気を使わないといけない。 

812 デフォルトの名無しさん [sage] 2010/05/01(土) 15:05:55 ID: Be:
    >>810
    そうなんだけど、cp932じゃダメでsjisを使う必要があるときなんてあんまりないのだから、
    Shift_JISはcp932の別名にして、本来のShift_JISはShift_JIS_strictとかなんとか別名つけてくれた方がよかったかも。

    >>809
    だから、内部表現は別にどうでもいいんだって。なんなら、UTF-8でもいいし、できるもんならsjisでもいい。
    内部表現に関わらず、strとunicodeは全くの別物。 

813 デフォルトの名無しさん [sage] 2010/05/01(土) 15:30:57 ID: Be:
    >>807
    unicode型がUTF-16としてサロゲートペアの処理をするようになったのはいつ頃からだ? 

814 デフォルトの名無しさん [sage] 2010/05/01(土) 15:52:20 ID: Be:
    >>812
    IAEAで名前が定義されているんだから、普段使う使わないを元に勝手に命名を弄る方が
    余計混乱すると思うよ。 

815 デフォルトの名無しさん [sage] 2010/05/01(土) 16:22:45 ID: Be:
    いい加減すれ違いだけど
    HTMLでcharset=Shift_JISって書いてあるのは見ても
    charset=cp932って書いてあるのは見たことがないな

816 デフォルトの名無しさん [sage] 2010/05/01(土) 16:35:59 ID: Be:
    IAEAじゃ国際原子力機関になってまうがな
    http://ja.wikipedia.org/wiki/IANA 

817 デフォルトの名無しさん [sage] 2010/05/01(土) 16:46:21 ID: Be:
    >>815
    俺が利用しているカード会社の利用明細確認ページが、
    昔charset=cp932だった(今はutf-8)。 

818 デフォルトの名無しさん [] 2010/05/01(土) 17:25:03 ID: Be:
    >>798
    違うだろwww
    coding: utf-8を書いてない。 

819 デフォルトの名無しさん [sage] 2010/05/01(土) 17:41:39 ID: Be:
    >>818
    utf-8でdecodeしようとしてエラーになっているから、
    ソースに # coding: utf-8 のような記述があるか、もしくは
    defaultencodingがutf-8に設定されている。

    「こ」はsjisで \x82\xb1 なのだが、
    0バイト目の\x82をutf-8でdecodeできないと言っているので、
    ソースコードがsjisになっている可能性が高い。

    というわけだワトソン君。 

820 デフォルトの名無しさん [sage] 2010/05/01(土) 18:00:48 ID: Be:
    >>815
    そりゃcp932なんて名前はIANA文字集合に定義されてないからな
    Windows-31Jが正しい
    もっともWidows-31Jの意味でShift_JISが使われていることが大半だが

    ttp://www.iana.org/assignments/character-sets 

821 デフォルトの名無しさん [sage] 2010/05/01(土) 21:04:47 ID: Be:
    >>820

    >>814 への皮肉だったんだが 

822 デフォルトの名無しさん [sage] 2010/05/01(土) 21:07:33 ID: Be:
    ああそうか、そりゃすまんかったw 

823 814 [sage] 2010/05/01(土) 21:49:48 ID: Be:
    悪い、いろんな意味でダメダメだな。
    Pythonのcodec名がIANAで定義されている名前にしているという意味じゃなくて、
    IANAで定義済みの名前に別の文字コードを割り当てないという意味だったんだ。

    http://docs.python.org/library/codecs.html#standard-encodings
    ここ見たら判るとおり、Windows系はcpXXXで統一されてる。 

824 デフォルトの名無しさん [sage] 2010/05/01(土) 22:00:29 ID: Be:
    つまり >>814 == >>805 か 

機種依存拡張文字を追加したMSの責任 そりゃあ Windows に移行するときに削るって判断はあったかも知れんけど、 PC-9801時代からあったもんでしょうよ >機種依存拡張文字 それにも NEC なんとかとか、IBMなんとかとかあるみたいだけど。

■_ 釣り。なのかなあ

素でこれだと大変だよなあ。先生が。


Cygwin + MinGW + GCC 相談室 Part 5
130 デフォルトの名無しさん [] 2010/04/30(金) 16:57:35 ID: Be:
    質問です。
    Cygwinにtpad093で書いたソースを入れたいんですが、どうしたらいいですか?
    一応手順があるんですが、XP、VISTAバージョンで7では具合が悪いよう
    な手順なんです。

    コピペで挿入することはできないし、どうしたらいいですか?真剣に困ってます。
    cygwinがダウンロードされても開いても出るはずのフォルダが出なくて。一応黒い
    画面はでるんですけど・・・

    どうゆうことをしたらtpadで書いたソースをシグウィンでコンパイルして実行でき
    るのでしょうか? 

131 デフォルトの名無しさん [sage] 2010/04/30(金) 17:18:50 ID: Be:
    まてまて、まずは深呼吸だ 

132 デフォルトの名無しさん [] 2010/04/30(金) 17:32:41 ID: Be:
    >>131
    頼みます。お願いします。一応アク禁くらってます。
    どうしたらいいでしょう?
    何故cygwinを使うか?
    それはtestするためです。確実に動くかどうか。
    でもわざわざcygwinに書き込んでたら時間がかかります。
    よってcygwinにぱっとtpadと同じ形式で同じ改行で移すには
    どうしたらいいでしょう?そのための手順を教えてください。 

133 デフォルトの名無しさん [sage] 2010/04/30(金) 17:53:42 ID: Be:
    初心者ならVisual Studio Express Editionでも使っとけばいいじゃん。 

134 デフォルトの名無しさん [sage] 2010/04/30(金) 18:00:08 ID: Be:
    >>132
    あまりTeraPad(tpad)は使ったことがないけど…

    エディタ部分にソースコードを書き込んだら、メニューバーの
    [ファイル]→[文字/改行コード指定保存]を選択して
    改行コードを[LF]にして保存すれば良いんじゃないかな。
    文字コードはShift_JISで通ると思う。 

135 デフォルトの名無しさん [sage] 2010/04/30(金) 18:04:41 ID: Be:
    >>132
    まさかとは思うが、cygwinのドライブは通常のドライブ上が便宜上違うパスで見えていることに気付いてないのか?
    ちゃんとインストーラでどこに配置するか確認されるだろうに。
    で、設定を変更していなければ、次のようになる。
    -- 
    MS-Windows   cygwin
    c:\cygwin     /
    c:\cygwin\tmp   /tmp
    c:\         /cygdrive/c/
    c:\Program files /cygdrive/c/Program files
    -- 
    これで判らなければcygwin使うのやめた方がいいよ。 

136 デフォルトの名無しさん [sage] 2010/04/30(金) 18:10:49 ID: Be:
    cygwinがTeraPadと同じ手順で使えると勘違いしてる 

137 デフォルトの名無しさん [] 2010/04/30(金) 19:16:28 ID: Be:
    >>134
    >>135
    いってる意味が全くわからないんですが・・・
    どこをいじればいいのでしょう?
    cygwinの設定何てどこでやればいいのでしょうか?
    ツールバーも出てこないし。

    「パス」「ドライブ」「shift_JIS」なんのこっちゃw
    知りたいのは真理より手順なんで・・・・
    まだPCに触ったことがなかった大学1年です。
    >>136
    Padはただのワードの簡易バージョンですよね?わかります。
    cygwinはテスト用のツールですよね。わかります。 

138 デフォルトの名無しさん [sage] 2010/04/30(金) 19:18:03 ID: Be:
    cmd.exeとか知ってる? 

139 デフォルトの名無しさん [sage] 2010/04/30(金) 19:22:06 ID: Be:
    >「パス」「ドライブ」「shift_JIS」なんのこっちゃw
    駄目だこりゃ。cygwinとかC++より先にPCと日本語勉強したほうがいい。 

140 デフォルトの名無しさん [] 2010/04/30(金) 19:22:47 ID: Be:
    いえ知りません^-^
    ええっとですね。マウスも今年名前知ったレベルです。
    ちなみに3日前からこのcygwinについて調べてるんですが
    専門用語返答されてまいってしまいました。
    留年確定ですね^-^
    どうやればcygwin使えるようになるでしょか?^-^ 

141 デフォルトの名無しさん [] 2010/04/30(金) 19:47:03 ID: Be:
    2ちゃんに何か書き込むとき余計なことを書き込むと永遠の地獄ループに
    苦しみ何の解決にも至らないことが良くわかった。
    ハウツーを聞くだけで、別のところに食いつかれこんなに苦労するとは思わなかった。
    明日先生に聞いてみます。 

142 デフォルトの名無しさん [sage] 2010/04/30(金) 19:49:04 ID: Be:
    > 「パス」「ドライブ」「shift_JIS」なんのこっちゃw
    > 知りたいのは真理より手順なんで・・・・

    いやいや、先生もびっくりですよww 

143 デフォルトの名無しさん [sage] 2010/04/30(金) 20:32:20 ID: Be:
    単位取れなくても留年はしないだろう 

144 デフォルトの名無しさん [sage] 2010/04/30(金) 20:36:12 ID: Be:
    > 知りたいのは真理より手順
    どこの名言だよwwww 

145 デフォルトの名無しさん [sage] 2010/04/30(金) 20:38:49 ID: Be:
    手順を書いたつもりが真理だったでござるの巻、か
    こりゃ先生も苦労するだろうなぁ 

146 デフォルトの名無しさん [sage] 2010/04/30(金) 20:42:00 ID: Be:
    今年になってマウスを知ったヤツが
    なんでcygwinなんていじろうと思ったんだ?

    「パス」「ドライブ」「shift_JIS」
    これを禁止してコンパイラの環境構築をする方が無理だろう。 

147 デフォルトの名無しさん [sage] 2010/04/30(金) 20:46:16 ID: Be:
    大学生の発言とも思えん。
    釣りか、ゴールデンウィーク中の暇つぶしじゃね?
    じゃなきゃ、真性のアレだろうから、かまうだけ無駄。 

148 デフォルトの名無しさん [sage] 2010/04/30(金) 20:48:13 ID: Be:
    ・(>>134 や>>135 のように)丁寧に書いてくれた人に礼も言わない
    ・初心者といえば免罪符になると思っている
    ・やり方さえ分かれば用はない(しかし分からない)
    ・知ったかぶり
    ・分からないのは相手のせい

    釣りでないならテンプレすぎて面白い 

149 デフォルトの名無しさん [sage] 2010/04/30(金) 21:30:40 ID: Be:
    >>148
    次からテンプレにイレヨウか。 

150 デフォルトの名無しさん [sage] 2010/04/30(金) 21:50:45 ID: Be:
    >>141
    自分の思うようにことが運ばないからといって、捨て台詞を吐くようではいけませんね。猛省してください。 

151 デフォルトの名無しさん [] 2010/04/30(金) 22:34:54 ID: Be:
    >>145
    本当に意味がわからないんです。
    例えば>>134>>135の人みたいなのに何てレスしていいのかもわからん・・・
    むしろそれを考えていたりする。疑問を残したままありがとうというのが
    俺の一番悪いくせで責任転嫁の含みがあるのであまり感謝は好きじゃない。
    2ちゃんなんだから俺と回答者の両側の意図が共通に認識できた蟠りのない
    段階で身を引きたかった、何も残らずにすむから。
    >>146
    述べよう。今年から情報科学系の学部に入った。よってプログラミングは必須。
    あまりにも設定の仕方というのはバリエーションがあるため仕様書みたいなの
    に従って作業を進める、そのいちいちに意味を求めていたら時間がかかって仕方ない。
    よって作業というのは一様でなければならず、その歯車が狂うとどこで修正していい
    のわからない。しかし中身である課題(プログラミング)については疑問は一切ない。 

152 デフォルトの名無しさん [sage] 2010/04/30(金) 22:42:09 ID: Be:
    cygwinでのgccの使い方の説明はなかったんかいな? 

153 デフォルトの名無しさん [sage] 2010/04/30(金) 22:43:21 ID: Be:
    >>134>>135 あたりはまさにハウツーだろ。
    ハウツーが理解できないというのは意味云々以前に基礎的な知識が足りてないということ。

    例えば「微分方程式スレ」があったとして
    「導関数って何かわかりません、でも解法教えてください!」
    な人が来ても教えようがないだろ。 

154 デフォルトの名無しさん [] 2010/04/30(金) 22:57:41 ID: Be:
    >>153
    確かにそうであるが・・・・・
    何事も要領なわけであって・・・
    >>152
    cygwinについてはここからダウンロードしてくださいという
    丁寧な指示から始まったんだ。でダウンロードし終わったあとなんです。
    やり方通りにやったのに色々パスエラーがでるわで最大のつまづきがここです。
      ↓↓↓
    「デスクトップ上のアイコン cygwin をダブルクリックして実行 → cygwinウィンドゥが現れ,
    続いてホームディレクトリ "C:\cygwin\home\(ユーザ名)" が作成される」
      ↑↑↑
    これは初期設定なんだが、これが不可能なんだ。何も起こらない。 

157 デフォルトの名無しさん [sage] 2010/04/30(金) 23:29:49 ID: Be:
    >>154
    cygwinのインストールに失敗してるような?
    cygwinのインストールに失敗する人がいるとは思わなかったよ 

159 デフォルトの名無しさん [] 2010/04/30(金) 23:52:02 ID: Be:
    >>157
    手順通りにやったのに失敗したのかなぁ?
    一応そのサイト一㌻だけど乗せましょうか?
    誰かその手順通りやってくれませんか? 

160 デフォルトの名無しさん [sage] 2010/05/01(土) 00:02:17 ID: Be:

    同じ講義を受けている同級生や先輩や指導教官や、
    (研究室に所属しているなら)研究室の人に効いた方が早いと思うぞ。

    あと、参考までに、日本にある大学などサイトからCygwinのインストール手順を検索してみた。
    site:ac.jp Cygwin インストール - Google 検索
    http://www.google.co.jp/search?hl=&q=site%3Aac.jp+Cygwin+%83C%83%93%83X%83g%81[%83%8B 

162 デフォルトの名無しさん [] 2010/05/01(土) 00:30:21 ID: Be:
    >>160
    ありがとう。だが5連休なんでな・・・

    http://www.comm.info.eng.osaka-cu.ac.jp/~sugi/C_lang2/setup/
     ↑
    この手順に従ったんだが、できないぜ・・・
    ホームダイレクトィが出てこない。
    もう一回アンインストールしてダウンロードしようとしても
    ダウンロードするまでが前と一緒になってる。
    悪いが誰か実験してくれんかなぁ?
    一応限定されたやり方だから質問にこたえてくれやすいと思うのだが。
    ちなみにC+に関しては高校の時やったんであまり疑問はないです。 

163 デフォルトの名無しさん [sage] 2010/05/01(土) 00:33:18 ID: Be:
    ユーザー名に漢字使ってハマってた人はいたみたいだけど 

164 162 [sage] 2010/05/01(土) 01:51:18 ID: Be:
    >>162
    http://www.comm.info.eng.osaka-cu.ac.jp/~sugi/C_lang2/setup/ を、以下の環境で試してみたよ。
    - VMware Workstation 7.0.1 で作った仮想PC (メモリ 512MB)
    - OS: Windows XP Professional SP3
    - その他のソフト: Microsoft Updateの「高速」のすべてのパッチを適用し、
    Microsoft Security Essentials をインストールした。
    - Windowsのユーザ名は「testuser」
    (質問するときは、↑くらいのことは最低限書いたほうがよいよ)

    1. Cygwinのインストール完了後に、デスクトップ上の「Cygwin」ショートカットを
    クリックすると、次の文字が表示された。問題なし。
    ------------------------------------
    Copying skeleton files.
    These files are for the user to personalise
    their cygwin experience.

    These will never be overwritten.

    `./.bashrc' -> `/home/testuser//.bashrc'
    `./.bash_profile' -> `/home/testuser//.bash_profile'
    `./.inputrc' -> `/home/testuser//.inputrc'

    testuser@xp-vm1 ~
    ------------------------------------

165 162 [sage] 2010/05/01(土) 01:52:23 ID: Be:
    >>162
    2. 「cygcheck -c」でCygwinのパッケージが正常にインストールされたかどうか確認した。問題なし。
    ------------------------------------
    testuser@xp-vm1 ~
    $ cygcheck -c | grep -v OK
    Cygwin Package Information
    Package Version Status
    ------------------------------------

    3.「cygcheck -cd」と「uname -a」でCygwinのバージョンを確認した。
    現時点のCygwinの最新版は 1.7.5-1 だから、
    今回の件が解決したあと、別件でCygwin質問をしたいなら、
    使っているバージョンや、http://www.comm.info.eng.osaka-cu.ac.jp/~sugi/C_lang2/setup/ で
    インストールしたことを毎回きちんと述べること。
    じゃないと、みんな Cygwin 1.7系、あるいは1.5系の最終版 1.5.25-15 を使っていることを
    仮定して回答するだろうから、行き違いが生じるよ。

    ------------------------------------
    testuser@xp-vm1 ~
    $ cygcheck -cd cygwin
    Cygwin Package Information
    Package Version
    cygwin 1.5.25-11

    testuser@xp-vm1 ~
    $ uname -a
    CYGWIN_NT-5.1 xp-vm1 1.5.25(0.156/4/2) 2008-03-05 19:27 i686 Cygwin
    -------------------------------------------

166 160 [sage] 2010/05/01(土) 02:03:43 ID: Be:
    >>164-165
    名前欄を間違った。自分は162じゃなくて、160だ。 

167 160 [sage] 2010/05/01(土) 02:16:24 ID: Be:
    ついでに、日本語のアカウント名でも試してみた。
    以下のダメ文字一覧表の文字を使って、「曽綻転脳評望余」って
    ユーザ名のアカウントを作って、同様に試してみた。

    ダメ文字一覧表 (fudist)
    http://sites.google.com/site/fudist/Home/grep/sjis-damemoji-jp/table

    1'. Cygwinのインストール完了後に、デスクトップ上の「Cygwin」ショートカットを
    クリックすると、次の文字が表示された。
    ------------------------------------
    Copying skeleton files.
    These files are for the user to personalise
    their cygwin experience.

    These will never be overwritten.

    `./.bashrc' -> `/home/曽綻転脳評望余//.bashrc'
    `./.bash_profile' -> `/home/曽綻転脳評望余//.bash_profile'
    `./.inputrc' -> `/home/曽綻転脳評望余//.inputrc'

    曽綻転脳評望余@xp-vm1 ~
    ------------------------------------

    特に問題が無いようだ。

    あとは、そちらで使っているOS固有の問題があるかも知れないし、
    アカウントのユーザ名やアカウントが持つ権限が足りないかも知れない。

    でもOSを明示せず、さらに、最初の数回の発言で、
    「どんなOSを使ってる?」という質問をここの住人から引き出せないまま
    言い訳を書くことに終始したあなたの責任だと思う。
    よって、酷だろうが、自分はこれ以上は追試しないよ。 

168 デフォルトの名無しさん [] 2010/05/01(土) 02:25:08 ID: Be:
    >>164
    >>165
    ありがとうございます。もっかいやってみますが、初期設定がどうしても
    できないんです。これってしなくてもいいんですか?
    あっwもちろん杉山先生のそのサイトの初期設定ね。
    でもなぁ・・何か俺のPC本当おかしいんですよ。タイピングしてたら急にお気に入りが
    開いたり、今回もダウンロードしたのに失敗した恐れがありますとか出てくるし。
    これじゃぁプログラミングに行く前に頓挫しそうだ・・・ 

169 デフォルトの名無しさん [sage] 2010/05/01(土) 03:30:57 ID: Be:
    >>130=>>132=>>137=>>140=>>141=>>151=>>154=>>159=>>162=>>168
    連休なんです。 

170 デフォルトの名無しさん [sage] 2010/05/01(土) 12:07:01 ID: Be:
    プログラミングの勉強をする前に、PCの初歩的な操作方法と
    日本語を勉強したほうがいいかもな 

丁寧語を使うようでいてタメ口がすぐ出てくるのがほほえましいというか頭いたいというか。 この後もこの流れは続いているようです(がきりがないので略)。

■_ 我輩は


C++相談室 part80
455 デフォルトの名無しさん [sage] 2010/05/01(土) 19:34:45 ID: Be:
    プログラミングの基礎学んだら
    アルゴリズム?デザインパターン?に進めばいいの? 

456 デフォルトの名無しさん [sage] 2010/05/01(土) 19:42:46 ID: Be:
    >>455
    とにかくコードを書け。アルゴリズムもデザパタも書かなきゃ理解できない。 

457 デフォルトの名無しさん [sage] 2010/05/01(土) 19:43:37 ID: Be:
    そうですね 

458 455 [sage] 2010/05/01(土) 19:48:48 ID: Be:
    >>456
    はい。入門書からコーディングは自分でやるようにしてます。 

462 デフォルトの名無しさん [sage] 2010/05/01(土) 20:16:21 ID: Be:
    >>456
    逆だろ?
    コーディングなんて猫でもできる

    仕事できない奴の典型、アルゴリズムが頭に浮かんでないのに
    行き当たりばったりでコーディングを開始する奴 

463 デフォルトの名無しさん [sage] 2010/05/01(土) 20:24:06 ID: Be:
    どっちなんだYO!w 

464 デフォルトの名無しさん [sage] 2010/05/01(土) 20:29:20 ID: Be:
    コーディングなんて工数を占める割合は2割以下
    設計仕様   5
    コーディング 2
    デバック    3

    位だろ。


465 デフォルトの名無しさん [sage] 2010/05/01(土) 20:29:41 ID: Be:
    ずいぶん優秀な猫だな。

466 デフォルトの名無しさん [sage] 2010/05/01(土) 20:39:45 ID: Be:
    我輩は猫でないし、名もある 

467 455 [sage] 2010/05/01(土) 20:40:38 ID: Be:
    でもまあ確かに無から有はうみだせませんから、
    そういう意味では知識と組み立て(段取り)が頭の中にあらかじめ入ってないと意味内ですよね。 

468 デフォルトの名無しさん [sage] 2010/05/01(土) 20:40:52 ID: Be:
    鴎外先生キタ━━━━━━(゚∀゚)━━━━━━ !! 

469 デフォルトの名無しさん [sage] 2010/05/01(土) 20:42:55 ID: Be:
    鴎外? 

■_ 何のイベントなんだろう

リストにある言語と面子がすげー


Speakers « Emerging Languages Camp

Speakers

So far, we've lined up the following programming language designers as speakers and 
participating attendees:

    * Rob Pike and Robert Griesemer – Go
    * Steve Dekorte – Io
    * Charles Nutter – Duby
    * Matt MacLaurin – Kodu
    * Gilad Bracha – Newspeak
    * Jeremy Ashkenas – CoffeeScript
    * Adam Chlipala – Ur
    * Francisco Tolmasky – Objective-J
    * Jonathan Shapiro – BitC
    * Luke Hoban – F#
    * Tav – PyPy
    * Rich Hickey – Clojure
    * Christopher Bertels – Fancy
    * Jonathan Edwards – Coherence/Subtext
    * Alex Eagle – Noop
    * Slava Pestov – Factor
    * Erik Meijer – C#
    * Mark S Miller – E, Caja
    * Brian Rice – Slate
    * Walter Bright – D
    * Wolfgang De Meuter and Tom Van Cutsem – AmbientTalk
    * Phil Mercurio – Thyrd
    * Melvin Smith – Cola
    * Carson Gross – Gosu
    * Alexander Fritze – Stratified JavaScript
    * Alan Eliasen – Frink
    * Dan Bornstein – Dalvik
    * Steve Folta – Trylon
    * Ola Bini – Ioke

Last updated: Thursday, April 29, 2010

We have tentative commitments from a number of other great people, and we'll be 
updating this page as those commitments are firmed up.

Please help us out with reaching the other talented folks that we'd love to get 
involved in this event.

If you'd like to speak at the event, please do get in touch.

    * The first ever conference on emerging programming languages. For language 
      designers, implementors, users, and enthusiasts.

      July 21 - 22, 2010 at the Portland Convention Center, during OSCON.

      Questions? Email emerginglangs@gmail.com

えーと、 The first ever conference on emerging programming languages. というのは、HOPL (History of Programming Language) の逆? Clojure の次にある Fancy というのはまつもとさんが 5/1 につぶやいてたやつかな。 Twitter / Yukihiro Matsumoto: The Fancy Programming Lang ...

* Tav ‐PyPy …言語なのか?

■_ 本日の巡回から


一つ前へ 2010年4月(下旬)
一つ後へ 2010年5月(中旬)

ホームへ


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

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