*目次 [#x281bf05] #contents *ATOM SHELL理論 [#p823e34b] 全ての言語のコードをパイプラインで結びつけるという理論です。 パイプラインで通過するデータは基本XML形式にしようという理論でもあります。 いろいろな言語で作ったコードを共通の仕様のインターフェースで通してしまえば、いいじゃん。という感じです。 ATOM SHELL 理論は、自分が提唱する理論の名前です。 Yahoo pipsにインスパイアされました。 URL http://pipes.yahoo.com/pipes/ いろいろな言語で、パイプ処理用のインタフェースをそろえ、 iPhoneのAppストアのように、ライブラリを一元管理し、バージョン、評判のインタフェースを提供することで 車輪の再発明を押さえながら発展していくための理論、哲学をまとめていこうとおもっています。 現在データは全てRSSでいうところのATOMで表現する等が流行っているが、これはパーサが比較的用意しやすいからである。むしろパーサを用意するには、javascriptのほうが適していたりする場合がある。 これは、各処理言語の既存のモジュールに依存しているだけの話である。 パイプとは関数言語的な仕組みであるから、これに含まれるデータはデータのみならず、関数自信も含んでいたほうがよい。関数とはフィルタであり、パラメータによって可変であれば、yamlの定義ファイルで置き換えることができる。 で、極力フィルタは一元管理して、再発名を防ぎたいから、単機能のフィルタになる。 それらは、一元管理されているべきである。有用なものには、値段がついていたほうが、開発者のモチベーションはあがると考えられるので、ますますAppStoreのようになるかもしれない。 いろいろな言語をつなぐには、UNIXのパイプ処理に焦点をあててみてもいいかもしれない。 でも、結局人間が見やすいのはExcelやOpenOfficeのスプレッドシートであるから、最終的にはこれらのファイルに変換するマクロを用意するようにする。 *ネットワークからATOM記事を得る方法 [#aab564c9] 例えば、技術評論社のATOMフィードは下記のアドレスです http://rss.rssad.jp/rss/gihyo/feed/atom これを取得する方法は *エクセルマクロ(VBA)をコマンドラインから呼び出す [#b1f7bbf2] http://d.hatena.ne.jp/GARAPON/20090120/1232449513 *たのしいXML: RubyでXMLデータを扱う (1) [#g4ef98aa] http://www6.airnet.ne.jp/manyo/xml/ruby/home.html *2009-10-19 [Ruby] 標準入力を処理するプログラムを書く [#z7ee0c3f] http://d.hatena.ne.jp/unageanu/20091019 *javaで標準入力を処理する例 [#wb78da7c] **コード [#iddf4670] import java.io.BufferedReader; import java.io.InputStreamReader; public class ReadLineSample { public static void main(String[] args) { try { BufferedReader stdReader = new BufferedReader(new InputStreamReader(System.in)); String line; while ((line = stdReader.readLine()) != null) { System.out.println("java:" + line); } stdReader.close(); } catch (Exception e) { e.getStackTrace(); System.exit(-1); } } } **コンパイル [#f7916ea1] javac ReadLineSample.java **実行 [#kc10509a] 例cat ReadLineSample.java | java ReadLineSample *wshで標準入力を得る [#wb7c2ba1] 'WScript.Echo "hello" 'Set regexp = CreateObject("VBScript.RegExp") 'regexp.pattern = "a+" 'regexp.Global = True Do Until WScript.StdIn.AtEndOfLine strInput = WScript.StdIn.ReadLine WScript.StdOut.Write strInput Loop これを保存しておき、たとえば、filter.vbsというファイル名で保存したとすると、 cscript filter.vbs で実行できます。 *標準入力の数式を計算する例 [#c1702255] '//////////////////////////////////////////////////////////////////////// ' 簡易計算VBScript ' 2004/07/13 うっちー '//////////////////////////////////////////////////////////////////////// Option Explicit Dim objRE, wExpr ' 正規表現オブジェクト初期化 Set objRE = New RegExp objRE.Pattern = "[^ a-z0-9.+\-*/^()\\]" objRE.IgnoreCase = True objRE.Global = True On Error Resume Next Do Until WScript.StdIn.AtEndOfStream wExpr = objRE.Replace(WScript.StdIn.ReadLine, "") WScript.StdOut.WriteLine eval(wExpr) Loop Set objRE = Nothing WScript.Quit *Charu3のプラグインから入力を得ることができます。 [#rfb88d05] [[このサイトでの紹介記事>WindowsTool#w032b432]] *PerlでSJISをUTF-8に変換するフィルタプログラム [#zaa6bde2] **目的 [#o8c163b8] まずcygwinでvbaから出力されたテキストをtailコマンドで閲覧するのが目的でした。 変換のnkfは、標準入力をいったん読み終えてから変換する仕組みであり、tailコマンドと組み合わせるには不向きなので、却下 qkcはutf8が使えないとかいうので却下 いろいろ試してみた結果、vbaからはsjisで出力して、 下記のperlで作ったシェルをパイプで連結することで目的が達成できることが判明した。 **コード [#w77fa348] #!/usr/local/bin/perl use strict; use warnings; use Jcode; while(<>){ print Jcode::convert( $_ , "utf8", "sjis" ); }