タグ

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

  • Windowsのcmd.exeとbashのどちらでも実行できるバッチファイルの書き方 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    僕はWindows上でMinGW/MSYSを使っています。シェルはbashを使っていることが多いのですが、Windowsのcmd.exeもけっこう使います。cmd.exe向けに書いたバッチファイル(コマンドファイル)を、bashから実行したいときがたまにあります。どうしたらいいのでしょう。 バッチファイルとbash 例題として、次のようなバッチファイルshow-memo.batを考えます。 @echo off rem 一時的なメモ書きを表示 if not exist C:\tmp\MEMO.txt goto NoFile type C:\tmp\MEMO.txt goto End :NoFile echo メモ C:\tmp\MEMO.txt はありません. :End show-memo.batは、PATH環境変数に含まれるディレクトリに置いてあるとします。当然に、cmd.exeからsho

    Windowsのcmd.exeとbashのどちらでも実行できるバッチファイルの書き方 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • node.js: モジュールの使い方 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    LinuxWindowsにnode.jsをインストールしてみたので、少し使ってみました。 JavaScriptにおいて、機能が欠けていて困る事って何でしょう。クラスがないとかはさしたる問題じゃないと思うのですが、モジュール機構がないのはホントに辛いです。node.jsには、待望のモジュール機構が導入されています。どうやら、CommonJS(http://www.commonjs.org/)という仕様に従っているようですが、僕は仕様を読んだわけではなくて、実際のnode.jsを触って見当を付けただけです。それを以下に書きます。 環境は、Windows+MinGW/MSYS です。 $ echo $HOME /c/Users/hiyama/Work $ which node /c/Users/hiyama/Work/bin/node.exe $ node --version v0.5.0-p

    node.js: モジュールの使い方 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • Firefoxアドオン It's All Text! と Emacs を一緒に使う - 檜山正幸のキマイラ飼育記 (はてなBlog)

    誰かさんのツィートから「テキストエリアの入力を普段使っているテキストエディタなどで行なえるFirefox拡張『It's All Text!』」http://veadardiary.blog29.fc2.com/blog-entry-2063.html という記事を拝見しました。コレ、使ってみようかな、と。 アドオンのページ -- https://addons.mozilla.org/ja/firefox/addon/4125/ 開発サイト -- http://trac.gerf.org/itsalltext インストールしたら、[ツール]-[It's All Text!]-[設定]ダイアログを開きます。必須の入力項目は「エディタ:」のところだけです。ここに、使用するテキストエディタのフルパスを指定します。 久々にemacsclientの出番 エディタにはEmacs(WindowsならMea

    Firefoxアドオン It's All Text! と Emacs を一緒に使う - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • Webサービスの設計: ハイパーオブジェクトとトリガー - 檜山正幸のキマイラ飼育記 (はてなBlog)

    Webサービスを設計するための単純明快な方法」の続き、あるいは補足です。 内容: Web APIもWebサイトも同じ トリガーとは トリガーの構造 トリガーについてもっと ハイパーオブジェクトを返すRPC Web APIもWebサイトも同じ 僕の方針は、プログラムが利用するWeb APIであっても、次の原則で設計することです。 API体系は、人がブラウザで閲覧するためのサイトとまったく同じ構造にする。 人間用のサイトを一切作らないときでも同じ原則を適用します。転送オブジェクト(レスポンスのエンティティボディに入るデータ)の形式が(X)HTMLでないときでも同じ原則に従います。 「人間+ブラウザ」用の転送オブジェクトの形式(フォーマット)といえば、もちろんHTMLです。HTMLの最も重要な特徴はハイパーリンクです。ハイパーリンクがWebを形作っているのです。ですから、HTML以外のフォーマ

    Webサービスの設計: ハイパーオブジェクトとトリガー - 檜山正幸のキマイラ飼育記 (はてなBlog)
    kageroh_
    kageroh_ 2010/08/12
  • Webサービスを設計するための単純明快な方法 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「Webサイト」、「Webアプリケーション」、「Webサービス」、「Web API」などの用語の区別はそれほど明確でもないし、きっちり区別して使うのもめんどくさいので、ここでは、これらを総称してWebサービスと呼んでしまうことにします。 山陽平さんは、その著書『Webを支える技術』のなかで、人間がブラウザを使って利用するWebサイトとプログラム向けのWeb APIを区別すべきではないと述べています。この点は僕もまったく同感・同意です。 人間が相手となると、視覚的な効果や装飾、JavaScriptを使った操作性などにフォーカスが向けられ、Web APIとはまったく別物のような印象を与えます。しかし、各ページが持つべき情報やページ遷移の有向グラフ構造などは、相手が人間でもプログラムでも同じだと思うのです。そんな事情で、Webページの機能的/情報的なエッセンスを表現したHTML文書をクリーンH

    Webサービスを設計するための単純明快な方法 - 檜山正幸のキマイラ飼育記 (はてなBlog)
    kageroh_
    kageroh_ 2010/07/29
  • 正規表現とオートマトン:イプシロン指標 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    タイトルに「正規表現とオートマトン:」が付いた記事は、いちおう続きものになる予定です。「この機会にマスターしようぜ、正規表現、構文図、オートマトン」から始まる形式言語理論入門シリーズだともいえますが、これから扱う話題はあまり一般的じゃありません。特論ですな。「Catyの正規表現型:なぜ明瞭正規表現なのか」で触れた明瞭正規表現についてハッキリと述べることが目的です。この目的に必要な概念や手法を順に説明していきます。 今日はイプシロン指標の話です。「イプシロン指標」は僕の造語です。とても重要な概念の割には名前がないので命名しました。でも、ある種の対象物/概念にε(イプシロン)という記号を使うことは伝統的なのです。 内容: 言語、オーマトン、正規表現 イプシロンの話 言語演算とε指標 ε指標の計算 ε指標の使いどころ 言語、オーマトン、正規表現 アルファベット、つまり基記号の集合をAとしましょ

    正規表現とオートマトン:イプシロン指標 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • 正規表現とオートマトン:なんだ簡単じゃん、JavaScriptによる実装 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    先週のエントリー「この機会にマスターしようぜ、正規表現、構文図、オートマトン」において、正規表現とオートマトンの理屈は説明しました。んじゃ、適当な正規表現に対応するオートマトンを作ってみましょう。 非決定性オートマトンはめんどくさいので決定性オートマトンにします。正規表現から作ったオートマトンが非決定性になってしまったときは、がんばって決定性オートマトンに変形するかあきらめるかしてください。 例題となる正規表現とオートマトンは、「Erlang実験室:状態遷移を書くのはこんなに簡単」で使ったものをそのまま流用します。 正規表現: (a, a?, b*, c) 図と表のなかで、EOSは End Of String のマーカー、◎は終状態です 遷移表: 0から3までの各状態について、入力ごとの遷移先は次の通り。×はエラーです。 状態 文字a 文字b 文字c EOS その他 0 1 × × × ×

    正規表現とオートマトン:なんだ簡単じゃん、JavaScriptによる実装 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • この機会にマスターしようぜ、正規表現、構文図、オートマトン - 檜山正幸のキマイラ飼育記 (はてなBlog)

    正規表現と構文図について解説します。オートマトンについても詳しく述べます。オートマトン・スゴロクで遊びましょう! 世間でよく知られている/使われている概念・方法にはこだわらず、僕(檜山)の感覚で一番わかりやすいと思われる筋書きと用語法/図式法を使って説明します。この記事に目を通して“感じ”が掴めたら、形式言語理論の教科書を読み始めることが出来るでしょう。 [追記]この記事の内容に対する具体例は、「正規表現とオートマトン:なんだ簡単じゃん、JavaScriptによる実装」にあります。[/追記] 内容: 正規表現 正規表現の例 構文図 基記号 連接 選択 省略可能 繰り返し ストレートワイヤーによるレイアウト調整 有限状態オートマトン 有限状態オートマトンの実行 バックトラックと先読み スゴロクとオートマトン コマをたくさん使うスゴロクと並列処理 非決定性オートマトンと決定性オートマトン 正

    この機会にマスターしようぜ、正規表現、構文図、オートマトン - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • サーバーサイドJavaScript - 檜山正幸のキマイラ飼育記 (はてなBlog)

    amachangの「IT戦記」からトラックバックをいただいていたので、「なんだろな?」と思ったら minidom.js のこと。一瞬「それなんだ?」と思ったが、僕の放置ウェアだった。 amachangの同記事に曰く: まあ、ともあれ JavaScript がサーバーサイドで動くってーのはめっちゃ楽しいですね! サーバーサイドでJavaScriptをやりたいなら、Helmaがありますよ*1。僕がやっている某社内勉強会で取り上げたことがあって、簡単な解説が次のページにあります。 http://symple.jp/85.html http://symple.jp/100.html 上記ページから引用すると: Helmaは「多年にわたり数多くのサイトで採用された、安定したソフトウェア」だそうです。それでも日ではいまいち普及していないらしい(Helmaの詳しい日語ページが見つからない、 Helm

    サーバーサイドJavaScript - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • BNF、EBNF、ABNF、まー正規表現だな - 檜山正幸のキマイラ飼育記

    BNFとか正規表現の話を。 ミニマムなBNFと正規表現 BNF(バッカス/ナウア記法)は、プログラミング言語の構文記述によく使われるメタ構文です。もともとは、「?」(省略可能)や「*」(任意回の繰り返し)のような記号は使わなかったようです。現在の正規表現で標準的に使われる「?」「*」「+」は、なくても次のように定義可能なのです。(以下で、EMPTYはそこに何もないことです。ほんとに何も無いと分かりにくいので目印にEMPTYを使います。) // X は A? X ::= EMPTY | A // Y は A* Y ::= EMPTY | A Y // Z は A+ Z ::= A | A Z 「|」があれば「?」「*」「+」を定義できますが、その代わりに再帰的な定義になります。 「::=」の左に同じ記号が複数回登場するのを許すと、「|」さえも不要になります。 // X は A? X ::=

    BNF、EBNF、ABNF、まー正規表現だな - 檜山正幸のキマイラ飼育記
    kageroh_
    kageroh_ 2010/02/02
  • コマンドライン:リダイレクトの挿入位置はとても自由 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    コマンドライン $ echo hello world >hello.txt を、 $ >hello.txt echo hello world と書いてもいいことは知っていました。 $ echo hello >hello.txt world としても同じなんですね。(Windowsのcmd.exeも同じ挙動です。) シェルはリダイレクト記号'>'を先に見つけて処理するので、まー、そんなに不思議ではないですが、知りませんでした。

    コマンドライン:リダイレクトの挿入位置はとても自由 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • Catyの新スキーマ言語と型システムの必要性 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    Kuwataさんと打ち合わせて、Catyのスキーマ言語の構文を変更することにしました*1。「プロトタイプ・フェイズでは、仕様変更を躊躇しない」という方針です。とはいえ、ソフトウェアの規模が大きくなるにつれて、仕様変更に伴なうKuwataさんの作業負担も増大しています。どうでもいい変更はしません。 スキーマ言語構文を変えるのは少し先(JSONストレージが落ち着いてから)になるでしょう*2が、この変更には明らかなメリットがあります。キーワード(予約語)が減って、構文が簡略化されます。例えば、列挙型とユニオン型*3は同じ構文になります。 列挙型 ("red" | "green" | "blue") ユニオン型 (string | integer) そして、JSONインスタンス構文(リテラル)とスキーマ構文の区別がなくなります。これは、JSONインスタンスをそのまま(ほんとにソノママ!)型定義とみ

    Catyの新スキーマ言語と型システムの必要性 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • Catyスクリプト:リリースしたからチュートリアル - 檜山正幸のキマイラ飼育記 (はてなBlog)

    あっ、と忘れていたよ。 「Catyスクリプト:まだ出来てないけどチュートリアル」: ソフトウェアを公開してない今の段階で解説を書いても、実感がなくてツマンナイでしょうが、後でまとめて書くことも負担なので、書けることは書いておくことにします。 一応ソフトウェアを公開したので、動く実物を引用して説明できるのだった。 Caty/Python Prototype-1 version 0.1.1 をインストールして、caty.py を実行してください。caty.pyはCatyスクリプトのコマンドライン・インタプリタを起動します。以下では、実際の操作例で説明します。基的概念は「Catyスクリプト:まだ出来てないけどチュートリアル」を参照してください。 内容: JSONデータはそのまま使えるよ コマンドを実行してみよう コマンドをパイプラインでつないでみる コマンドを作ってみよう こんなコマンドもあり

    Catyスクリプト:リリースしたからチュートリアル - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • Catyスクリプト:まだ出来てないけどチュートリアル - 檜山正幸のキマイラ飼育記 (はてなBlog)

    http://return0.dyndns.org/log/2009/09/06#s_1 : 最近ちょっと仕事し過ぎで ... 困ったもんだ。でもまー、Kuwataさんの最近のハードワークのおかげで、CatyもWebフレームワークらしくなってきて、簡単なサンプルサイトが動き出しました。とはいえ、まだまだ仕様が固まってなかったり、暫定仕様/実装でお茶を濁していたり、問題があるのにホッカブリしているところがたくさんあります。 サンプルサイトは、当然にCatyスクリプトで実装しています。 http://d.hatena.ne.jp/m-hiyama/20090810/1249861926 より: 「数十文字のスクリプトファイルが数個」で実現できる動的Webサイトでも、相当に広範囲の要求に応えられるだろうと踏んでいます。 と書いたので、短いスクリプトで動的サイトが出来ないと公約が守れないのですが、

    Catyスクリプト:まだ出来てないけどチュートリアル - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • Caty/Python Prototype-1 version 0.1.1 @ Bitbucket - 檜山正幸のキマイラ飼育記 (はてなBlog)

    昨日: bitbucket(http://bitbucket.org/)で公開しようと思ったのですが、次の理由でとりあえずキマイラサイトを使いました。 bitbuckeのダウンロードコーナーとかリリース用リポジトリの使い方をよく知らない(調べてない)。 追加のPythonライブラリを何も入れてないような環境で動くかどうかテストしてないので、アーカイブファイルを差し替える可能性がある。 bitbucketの使い方が多少分かってきたので、bitbucket で公開します。昨日の version 0.1.0 のバグとタイポを修正したものが version 0.1.1 です。次の手順でダウンロードしてください。 http://bitbucket.org/m_hiyama/caty-python-proto1/downloads/ にアクセス。 Tags & snapshots のところを見て、0.

    Caty/Python Prototype-1 version 0.1.1 @ Bitbucket - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • JavaScriptで言語処理系の勉強をしましょう:構文解析準備編 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    次の2つの記事の続き; JavaScriptで実装したごく簡単な仮想機械RAC0(Rudimentary Arithmetic Calculator Level-0)に対して、高級言語とその処理系を作りましょう、というシリーズです。 JavaScriptで仮想機械の勉強をしましょう JavaScriptで言語処理系の勉強をしましょう:字句解析編 トークンスキャナーが出来たので、次はパーザーを作る番です。実際のパーザー(構文解析器)の例を示す前に、方針と方法について説明しておきます。 内容: ソースコードとトークン列 パーザーと構文木 BNFによる文法記述 再帰降下(下降)法 ソースコードとトークン列 高級言語のソースコード(今回の例では、1 + 2, (5 - 2)*4 のような算術式です)は、なんらかのテキストストリームから言語処理系に入力されます。ファイル、キーボード、文字列データなど

    JavaScriptで言語処理系の勉強をしましょう:構文解析準備編 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • JavaScriptで言語処理系の勉強をしましょう:字句解析編 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    昨日のエントリーで、小学生レベルの算術計算をする仮想機械RAC0(Rudimentary Arithmetic Calculator Level-0)を示しました。たいへん貧弱な仮想機械ですから、機能を拡張したいとは思うのですが、その前に、RAC0用の高級言語を作っておきましょう。 高級言語といっても、1 + 2, (5 - 2)*4 のような算術式(arithmetic expression)です。詳しく仕様を書いても次の程度。 定数リテラルは、符号なしの整数。03 のように先行する0があってもよい*1。 負の数を表すリテラルがないので、(0-3) のように引き算で代用。 演算記号は、+, -, *, /, % の5種類。いずれも二項中置演算子。 *, /, % は、+, - より優先される。 丸括弧を使って、式のグループ(まとまり)を作ってよい。 同じ優先順位の演算は左結合的。例えば、

    JavaScriptで言語処理系の勉強をしましょう:字句解析編 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • JavaScriptで仮想機械の勉強をしましょう - 檜山正幸のキマイラ飼育記 (はてなBlog)

    事情があって、コンピュータのハードウェアメカニズムをごく簡単に説明したいのです。物のCPUは難しくて簡単な説明にはならないし、そもそも僕は物がどうなっているかよく知りません。 そこで、オモチャの仮想機械を作ることにしました。加減乗除だけができるスタックマシンです。仮想機械の実装はJavaScript、ユーザーインターフェースはHTMLです。こういうとき、JavaScript + HTML はお手軽でほんとに便利です。 Web上で試せるURL http://www.chimaira.org/tools/rac0.html 初等算術計算仮想機械の実装 仮想機械を実装するソースコードは次のようです。インストラクション(機械語命令)の説明はすぐ後でします。 /* rac0vm.js */ /* * Rudimentary Arithmetic Calculator Level-0 */ var

    JavaScriptで仮想機械の勉強をしましょう - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • Jcentric型システム:ホスト型システムの要件 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    Jcentric(JSON centric)型システムは、既存プログラミング言語の型システムに埋め込んで、あるいは寄生させて使うことになります。埋め込み先/寄生先となる型システムをホスト型システムと呼ぶことにします。今、Kuwataさんが実装しているケースでは、Pythonの型システムがホスト型システムです。 Jcentric型システムはプログラミング言語中立、つまり、色々なホスト型システム内に埋め込めるように設計しています。現存するたいていの型システムに埋め込めると思いますが、Jcentric型システムをサポートするために必要な条件があります。それを述べます。 内容: データインスタンスとデータ領域 基的な命題の判断可能性 ボトムと普遍領域の存在 配列構成とオブジェクト構成、再帰的構成 JSONの型とは何か Jcentric型システムの要件は? データインスタンスとデータ領域 個々のデ

    Jcentric型システム:ホスト型システムの要件 - 檜山正幸のキマイラ飼育記 (はてなBlog)
  • Jcentric型システム:プラグインによるユーザー定義型 - 檜山正幸のキマイラ飼育記 (はてなBlog)

    「Jcentric型システムの宣言スタイル・スキーマ構文」: 実用上の要求から次のような妥協をしました。 インスタンス埋め込みの型情報とユニオン型のラベル(弁別子)を区別しないことにした。 プログラムで実装するユーザー定義型をスカラー型に限り認めることにした。 この引用内の「プログラムで実装するユーザー定義型」の話をします。 内容: 拡張ポイントとインターフェース 登録キーとオプション UDITの宣言 注意事項とか感慨とか 拡張ポイントとインターフェース Jcentric型システムは、単純さを保ち自由度を小さく抑えたいので、ユーザーによるカスタマイズも入れたくはないのです。しかし、JSONには、日付、時刻、金額などの型がありません。スキーマ属性patternがあるので、文字列を正規表現で制限することはできますが、これで何でも解決するわけではありません。ユーザーがプログラムを書くことにより(

    Jcentric型システム:プラグインによるユーザー定義型 - 檜山正幸のキマイラ飼育記 (はてなBlog)