全ての言語のコードをパイプラインで結びつけるという理論です。
パイプラインで通過するデータは基本XML形式にしようという理論でもあります。
いろいろな言語で作ったコードを共通の仕様のインターフェースで通してしまえば、いいじゃん。という感じです。
ATOM SHELL 理論は、自分が提唱する理論の名前です。 Yahoo pipsにインスパイアされました。
URL
いろいろな言語で、パイプ処理用のインタフェースをそろえ、 iPhoneのAppストアのように、ライブラリを一元管理し、バージョン、評判のインタフェースを提供することで 車輪の再発明を押さえながら発展していくための理論、哲学をまとめていこうとおもっています。
現在データは全てRSSでいうところのATOMで表現する等が流行っているが、これはパーサが比較的用意しやすいからである。むしろパーサを用意するには、javascriptのほうが適していたりする場合がある。
これは、各処理言語の既存のモジュールに依存しているだけの話である。
パイプとは関数言語的な仕組みであるから、これに含まれるデータはデータのみならず、関数自信も含んでいたほうがよい。関数とはフィルタであり、パラメータによって可変であれば、yamlの定義ファイルで置き換えることができる。
で、極力フィルタは一元管理して、再発名を防ぎたいから、単機能のフィルタになる。 それらは、一元管理されているべきである。有用なものには、値段がついていたほうが、開発者のモチベーションはあがると考えられるので、ますますAppStore?のようになるかもしれない。
いろいろな言語をつなぐには、UNIXのパイプ処理に焦点をあててみてもいいかもしれない。
でも、結局人間が見やすいのはExcelやOpenOfficeのスプレッドシートであるから、最終的にはこれらのファイルに変換するマクロを用意するようにする。
例えば、技術評論社のATOMフィードは下記のアドレスです
http://rss.rssad.jp/rss/gihyo/feed/atom
これを取得する方法は
http://d.hatena.ne.jp/GARAPON/20090120/1232449513
http://www6.airnet.ne.jp/manyo/xml/ruby/home.html
http://d.hatena.ne.jp/unageanu/20091019
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); } } }
javac ReadLineSample.java
例cat ReadLineSample.java | java ReadLineSample
'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
で実行できます。
'//////////////////////////////////////////////////////////////////////// ' 簡易計算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
まずcygwinでvbaから出力されたテキストをtailコマンドで閲覧するのが目的でした。
変換のnkfは、標準入力をいったん読み終えてから変換する仕組みであり、tailコマンドと組み合わせるには不向きなので、却下
qkcはutf8が使えないとかいうので却下
いろいろ試してみた結果、vbaからはsjisで出力して、 下記のperlで作ったシェルをパイプで連結することで目的が達成できることが判明した。
#!/usr/local/bin/perl use strict; use warnings; use Jcode; while(<>){ print Jcode::convert( $_ , "utf8", "sjis" ); }