タグ

ブックマーク / m-hiyama.hatenablog.com (17)

  • Linux/Unixコマンドラインでちょっとした事をするには - 檜山正幸のキマイラ飼育記 (はてなBlog)

    まずは事の発端を説明します。 /etc/passwdファイルは、ユーザー情報が1行に1ユーザー分ずつ書かれたテキストファイルです。1行はコロンで区切られた7つのフィールドからなります。僕は、最初のフィールドであるユーザー名と、最後(7番目)のフィールドであるログインシェルだけを確認したかったのです。cat /etc/passwd として、直接目で見るだけ*1でもユーザー名とログインシェルを読み取れるのですが、ちょっと辛い。なるべく見やすく表示したいのです。 この課題を狂言回しにして、Linux/Unixコマンドラインでちょっとした事をやるための地味なコマンド達とシェル構文を紹介します。「スクリプト言語(例えばperl)を使えばいいじゃねえか」というご意見・ご指摘はゴモットモだと思いますが、今回は聞く耳持ちません。(スクリプト言語処理系ではない)コマンドとシェルの範囲内でのもっと良い方法は是

    Linux/Unixコマンドラインでちょっとした事をするには - 檜山正幸のキマイラ飼育記 (はてなBlog)
    hchbaw
    hchbaw 2010/10/15
    うーんむつかしい。zshです。 http://twitter.com/hchbaw/statuses/27360806482
  • カリー/ハワード(Curry-Howard)の対応を知らない子ども達および大人達へ - 檜山正幸のキマイラ飼育記 (はてなBlog)

    3月19日(木)にやったセミナーに関して、さっそくにKuwataさんによるまとめが公開されています。 http://return0.dyndns.org/log/2009/03/20#s_2(20日の記事までスクロール) これがまた、とんでもない力作で驚きました。とてもよく仕上がったレポートで、僕の話なんかより、これを読んだほうが分かりやすいくらい。ホントにお疲れさま。どうもありがとう。 Kuwataさん曰く: 今回は内容的に俺がまとめを書けるレベルじゃねえと思っていたら、他の参加者から「また徹夜してまとめ書くんでしょ」と言われてもう後に引けない状況。 僕も含めて皆さん期待していたのは確か。「まとめるんだよね、帰ったら書くんだよね、朝まで書くんだよねー」と、何人かがKuwataさんに声をかけていたけど、彼を殺してしまいかねないから、もうあまり言わないように。 Kuwataさん曰く: さすが

    カリー/ハワード(Curry-Howard)の対応を知らない子ども達および大人達へ - 檜山正幸のキマイラ飼育記 (はてなBlog)
    hchbaw
    hchbaw 2009/03/24
  • Erlang実験室:分かりにくいと評判のErlangエラーのまとめ - 檜山正幸のキマイラ飼育記 (はてなBlog)

    Erlangのエラーメッセージは暗号のようだ(Cryptic error messages)とか言われたりします。確かに分かりにくいです。http://bluebones.net/2006/12/erlang-error-messages/ に良いまとめがあった*1ので、これを敷衍<ふえん>する形で説明します。 内容: 例外の一般論 ランタイムエラーとスタックトレース reasonタームの一覧 ●例外の一般論 Erlangの例外(exceptions)は次の3種に分類されます。 throw例外 : ユーザー(プログラマ)が任意の時点で生成する例外 exit例外 : プロセス*2の終了に伴って生成される例外 error例外 :主にシステムが生成するランタイムエラー それぞれの例外を、次の関数で引き起こす(raiseする)ことができます。 throw(Term) exit(Term) erla

    Erlang実験室:分かりにくいと評判のErlangエラーのまとめ - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • Erlang実験室:例外のcatchと終了シグナル - 檜山正幸のキマイラ飼育記 (はてなBlog)

    Erlangの例外は、単にメッセージが謎めいているだけではなくて、他のプログラミング言語とはだいぶ趣<おもむき>が異なるので、理解して正しく使うのはなかなか大変です。そのことはまたの機会に、ということで、このエントリーでは、キャッチされなかった例外がどうなるかを書いておきます。 Erlangのcatchオペレータ(言語構文に含まれる特殊形式だけど、「オペレータ」と呼ぶみたい)は、例外を補足捕捉して通常の値に変換します。Erlang/OTPリリース10からは、catchオペレータよりずっと洗練されたtry構文があります。これらの例外補足捕捉機構でハンドルされなかった例外は、(Erlang内の)プロセスを終了させます。 プロセスが終了すると、そのプロセスとリンクされているすべてのプロセスに終了シグナルが送られます。終了シグナルに乗って運ばれるデータを終了ターム(exit term)と呼ぶのです

    Erlang実験室:例外のcatchと終了シグナル - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • Erlang実験室:レコードの必要性はそんなに高くない - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「Erlang実験室:例外的値とバリアント型データ」において、Erlangでは例外の使用が少ない気がすると言いました。その理由として、「やたらに自由度が高いバリアント型があるからだろう」と推測しました。同じ理由により、レコード型も意外に使われてない気がします(また「気がします」で統計的裏付けはない)。 例えば、person型レコードは次のように定義できます。(以下の定義はこのままコンパイルできますが、フィールドの型は単なる注釈で実際的意味を持ちません。) -record(person, { name::string(), age::integer(), mail_address::string() }). このレコード定義と同等な定義は、他のプログラミング言語でも書けます。例えばCなら: struct Person { wchar_t *name; short int age; wchar

    Erlang実験室:レコードの必要性はそんなに高くない - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 自己関手の圏とモナド - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「久しぶりに圏論勉強会」で触れた次のこと: 非対称なモノイド圏という概念 モナドの定義をモノイドとして再確認 これを、お絵描き計算(pictorial calculation)を使ってチャント(になるかな?)説明してみようか、と思いました。こういうことは一気にババッと書き切らないと、ヘタって後が続かないことが多いのですが、残念、日は厳密モノイド圏の実例で息切れ。でもまー、お絵描きの準備はできたから、いいとしよう。 内容: モナドはモノイドだ -- 言ってるだけ 循環的な状況が恐いけど魅力的 準備:ボックス図からストリング図へ 準備:徹底的に左から右の記法 自己関手の圏End(C) 余談:圏論は、ほぼ計算だけ 厳密モノイド圏 実例:行列の圏 実例:非負の実数 実例:釘にラベルが付いたブレイド図の圏 ほんとに面白いのは モナドはモノイドだ -- 言ってるだけ 実は、「モナドはモノイドだ」とい

    自己関手の圏とモナド - 檜山正幸のキマイラ飼育記 (はてなBlog)
    hchbaw
    hchbaw 2008/04/16
  • Emacsは消滅すべきだろうが、後継者がいない - 檜山正幸のキマイラ飼育記 (はてなBlog)

    ゴスリングが「Emacsは消滅すべき」と言ったとか。 3日前にEmacsって便利とか書いておいてなんだけど、僕も基的にはこの意見に賛成なのだ -- 基設計が古すぎるよ。だけど、「NetBeansやEclipseがあるでしょ」と言われてもちょっと困る。だって、Emacsって万能エディタであって、その用途のひとつがプログラム開発なんだから。 つまり、NetBeansやEclipseで、レポートやら論文やら日記やらメールやらメモやらが書ける環境が十分整備されないとEmacsやめられない。それと、Lispでなくてもいいけど、なにかインタープリタ言語で機能拡張ができないと。Javaでプラグイン書けてもうれしくない。

    Emacsは消滅すべきだろうが、後継者がいない - 檜山正幸のキマイラ飼育記 (はてなBlog)
    hchbaw
    hchbaw 2008/04/07
  • CPS(継続渡し方式)変換で裏返る理由 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    昨日、CPS(継続渡し方式)への変換を話題にしました。 最近CPSに凝っているらしいid:higeponさんが: 人間の皮が裏返る。外が内、内が外。みたいなイメージでしょうか。 と書いてます(CPSで思考する - higepon blog)。この裏返る感じを説明してみたいと思います。 プログラムが、3つの部分A, B, Cから構成されているとします。 A; B; C; A, B, Cは単一の文ではなくて大きなブロックでもかまいません。ブロックAの計算結果は変数aに代入され、ブロックBの計算結果は変数bに代入されるとしましょう。それぞれのブロックを関数化すると、次のようになります。 a = A(); b = B(a); c = C(b); 変数cの値がプログラム全体の結果となります。 中間変数a, bは不要なので除去すると: c = C(B(A())); 結局、プログラム全体の機能は、C(B

    CPS(継続渡し方式)変換で裏返る理由 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    hchbaw
    hchbaw 2008/01/21
  • CPS(継続渡し方式)変換をJavaScriptで説明してみるべ、ナーニ、たいしたことねーべよ - 檜山正幸のキマイラ飼育記 (はてなBlog)

    久々にThe n-Category Cafeを見たら、Mike Stayによる"The Continuation Passing Transform and the Yoneda Embedding"なんて記事がありました。 米田埋め込みは圏論ではお馴染み。継続渡しへの変換はコンピュータ・プログラミングではお馴染み。 この2つは、実は同じものなんだよ。なんで、誰もこのことを言わないんだろうね? The Yoneda embedding is familiar in category theory. The continuation passing transform is familiar in computer programming. They're the same thing! Why doesn't anyone ever say so? Mike Stayのこの記事、面白いのだ

    CPS(継続渡し方式)変換をJavaScriptで説明してみるべ、ナーニ、たいしたことねーべよ - 檜山正幸のキマイラ飼育記 (はてなBlog)
    hchbaw
    hchbaw 2008/01/17
  • オブジェクトとクラス、とりあえずご質問に答えます - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「いまさらながらだけど、オブジェクトとクラスの関係を究めてみようよ」には、いろいろとフィードバックがありまして、僕もそれらに触発されたところもあるので、お応えしたい気もするのですが、なかなかにねー、、、エネルギーが足りないや。 とりあえず、明白に質問(疑問文)の形をしたものに答えます。 higeponさんの: 今日お話に出ていたCommonLisp(?)のすごいコードのお話ってどの辺に書かれていますでしょうか? aufhebenさんの: レイフィケーションとパワータイプって同じような概念ととらえてよいのかな? 檜山さんのエントリで、is-created-by とレイフィケーションは、他の関係と矢印の向きが逆な気がするんですけど、何か意図があるのでしょうか? id:higeponさんの質問は、当該エントリーとは別な文脈でのものですが、一連の流れとしては関連するので。 もし、「いまさらながらだ

    オブジェクトとクラス、とりあえずご質問に答えます - 檜山正幸のキマイラ飼育記 (はてなBlog)
    hchbaw
    hchbaw 2008/01/15
  • シェルのリダイレクトを「こわいものなし」というくらい完全に理解しよう - 檜山正幸のキマイラ飼育記 (はてなBlog)

    Java BlockingQueueで遊ぶ:パイプラインごっこ」でパイプラインの話をしたので、来の、つまりUnixのパイプやリダイレクトを少し調べてみました。 たまに話題となる some-command >file 2>&1 と some-command 2>&1 >fileの挙動の違いについて、「シェルはコマンドラインリダイレクトの指定を右から左に解釈実行する」なんて説明が見つかりました。んなバカな! パージングは左から右にするものですよ。パーズツリーを逆順にたどることはできるけど、そんなことする必然性はなんにもないよ。 次の記事を読むと、「右から左」なんて事情じゃないことが分かるでしょう。 UNIXの部屋 検索: リダイレクト シェルのリダイレクトにまつわる失敗 さてここでは、複雑なリダイレクト処理も完全に理解できる処方箋を示しましょう。例えば、次のコマンドラインが何をするか分かる

    シェルのリダイレクトを「こわいものなし」というくらい完全に理解しよう - 檜山正幸のキマイラ飼育記 (はてなBlog)
    hchbaw
    hchbaw 2007/12/26
  • 非同期呼び出しって継続っぽい -- 時間軸を加工する話 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    最近、継続っぽいもの、継続の匂いがするものを取り上げてます。 「Erlangメッセージによる割り込み -- 継続への入り口として」 : ある関数の実行が中断して、しかも制御が戻らないにも関わらず、あたかも制御が戻るように見える現象を紹介しました。(続きを行う別関数に制御が渡ることにより実現されます。) 「継続を渡してチェーンすること」 : チェーンしかできない状況で、チェーン先にラベルを渡して呼び出しをシミュレートしてみました。 今日も、なーんか“継続みたいなもの”を話題にします。 非同期 Remote Procedure Call まず次のような、HTMLに埋め込まれたJavaScriptプログラムを考えます。 <html> <head> <title>Difficult Calc</title> <script> function difficultCalc(x, y) { var a

    非同期呼び出しって継続っぽい -- 時間軸を加工する話 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    hchbaw
    hchbaw 2007/11/28
  • JavaScript大域変数の存在確認 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    [追記]id:zorioさんのブックマークコメントの指摘により、抜けていた「.apply」を挿入しました。[/追記] JavaScriptで、大域変数(大域オブジェクトのプロパティ)fooが存在しないときに何かをしたいとしましょう。例えば、こんな書き方をしますよね。 if (!foo) { // 何か } でも、式 !foo は、fooがnullでもfalseでも0でもtrueに評価されます。 if (foo == undefined) { // 何か }としたほうがよさそうです。が、null == undefined もtrueとなるのであまり改善されてません。 if (foo === undefined) { // 何か }イコールが3つなら、厳密に「fooが未定義値であるとき」を表現します。ここで、undefinedはリテラルではなくて、仕様として事前に定義されている大域変数です。u

    JavaScript大域変数の存在確認 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 継続を渡してチェーンすること - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「Erlangメッセージによる割り込み -- 継続への入り口として」において、Erlangで実際に使われている継続渡しっぽい手法を紹介しました。 それで、なーんか似たようなことをやったような、、、と、はるか昔の記憶が刺激されて、あーあー思い出したよ。 むかし、僕、MS-DOSのバッチファイルでテキストエディタ作ったことがあるんですよ(って、どんだけバカだったかが分かる)。それをASCIIネットのjunk.testにアップロードしましたね(って、どんだけ昔かが分かる)。 今はcallでサブバッチファイルを呼び出せるのですが、昔はそんなのなくて、バッチフィルからバッチファイルを呼び出すのは無理でした。チェーンならできるんですけどね。呼び出しじゃなくてチェーンて何?って人は次を実行してみてください。 main.bat @echo off echo main 1 sub echo main 2 s

    継続を渡してチェーンすること - 檜山正幸のキマイラ飼育記 (はてなBlog)
    hchbaw
    hchbaw 2007/11/20
    cps
  • Erlangメッセージによる割り込み -- 継続への入り口として - 檜山正幸のキマイラ飼育記 (はてなBlog)

    Erlangにはシステムメッセージというものが定義されていて、これを使って走行中のプロセスを中断して介入することができます。とは言っても、システムメッセージは何ら特殊なものではなくて、普通のErlangメッセージに過ぎません。{system, From, Request}という形のメッセージが来たらどう行動すべきかの約束があるだけなのです。 したがって、システムメッセージの規約を守らないプロセスの中断・再開はできません。この点で、OSカーネルがサポートする割り込みとは違います。でも、規約による割り込みのメカニズムが面白いので、単純化した例で紹介します。 実例:カウンター まずは、実例のコード。 -module(counter). -export([start/1, loop/1]). start(N) when is_integer(N) -> spawn(?MODULE, loop, [

    Erlangメッセージによる割り込み -- 継続への入り口として - 檜山正幸のキマイラ飼育記 (はてなBlog)
    hchbaw
    hchbaw 2007/11/19
  • アンチ根性 ミニリンク集 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    僕は、根性主義や神秘主義を嫌っている。たぶん、過剰(行き過ぎ)に嫌っている。「羮<あつもの>に懲りて膾<なます>を吹く」って事情だろうね。言語化できない不明瞭なナニカに価値を求めたり身をゆだねたりするのが、イヤでたまらない。だから、何度もそのことを話題にしている。水の詐欺師・江さん(「水伝」)関連は除いても、次のようなエントリーがある。 暗い世界には戻るまい ゾウガメの時間 それで思い出すこと、「忙」と「ボーッ」は違う 合理性と非合理性 悟らないでも分かりたい (過去編) 悟らないでも分かりたい (現在編) これらで言いたいことは; 過酷な環境が「有意義だ」とか「人を育てる」なんて考えるのはやめよう!ってこと。もちろん、過酷な状況を乗り越えて成長した人、そういう事例はいくらでもあるだろう。が、それは“英雄”の話。もともと強靱で有能だったから苦難を成長の糧にすることができたわけで、そんなこ

    アンチ根性 ミニリンク集 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    hchbaw
    hchbaw 2007/07/30
  • 僕もErlangを試してみたよ -- 軽量プロセスを中心に - 檜山正幸のキマイラ飼育記 (はてなBlog)

    えっ、Erlang(アーラン)を紹介するのが流行なの? フーン、じゃ僕もやってみよう。 というわけで、ちょっと試してみたので、感想+解説を書きます。あまり他で触れられてないようなネタを選ぶつもり。 内容: 予備知識への参照 構文はPrologじゃん ランタイム・システムとEシェル で、Erlangって何がいいのよ? 繰り返しとプロセス メッセージング=プロセス間通信 最後の例題:greetingプロセス もう一度、Erlangって何がいいのか? ●予備知識への参照 HelloWorldを書くまでの案内は: 「これから15分でErlangを始めるための資料」(http://blog.overlasting.net/2007-05-09-1.html) Erlangの特徴は、次のスライドによくまとまってます。 "Concurrent Functional Programming with Er

    僕もErlangを試してみたよ -- 軽量プロセスを中心に - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 1