コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

「データフロープログラミング」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
m テンプレートの呼出に含まれた"Template:"を除去
m リンク修正
 
(9人の利用者による、間の33版が非表示)
1行目: 1行目:
[[ファイル:Dataflowwhileloop.png|境界|右|フレームなし|200x200px|代替文=]]
{{プログラミング・パラダイム}}
{{プログラミング・パラダイム}}
'''データフロープログラミング'''({{lang-en-short|dataflow programming}})は、[[データフロー]]の原理とアーキテクチャに準拠した[[プログラミングパラダイム]]であり、[[コンピュータプログラム]]をオペレーション間の[[データフロー]]の[[有向グラフ]]として[[モデリング (科学的)|模型化]]する。データフロー言語は、[[関数型言語]]の特徴を共有しており、より数値処理に適したものになっている。


== 概要 ==
'''データフロープログラミング'''({{lang-en-short|dataflow programming}})とは、[[データフロー]]の原理とアーキテクチャを用いた[[プログラミングパラダイム]]であり、何らかの操作と操作の間でのデータの流れを[[グラフ (データ構造)|有向グラフ]]としてプログラムを作成する。データフロー[[プログラミング言語]]は[[関数型言語]]に一部似ており、一般に数値処理に適した言語に関数型言語的概念を導入するという形で開発された。

== データフロープログラミング言語の特徴 ==
データフロー言語は、[[命令型プログラミング]]モデルなどの他の主要のプログラミング言語とは対照的である。命令型プログラミングではプログラムは一連の命令文で構成され、データの流れは見えない。この違いは瑣末に思われるかもしれないが、[[パラダイム]]としての違いは非常に大きく、データフロー言語は[[マルチコア]]システムや[[マルチプロセッシング]]システムを自由に使える。
データフロー言語は、[[命令型プログラミング]]モデルなどの他の主要のプログラミング言語とは対照的である。命令型プログラミングではプログラムは一連の命令文で構成され、データの流れは見えない。この違いは瑣末に思われるかもしれないが、[[パラダイム]]としての違いは非常に大きく、データフロー言語は[[マルチコア]]システムや[[マルチプロセッシング]]システムを自由に使える。


22行目: 20行目:


データフロープログラミングを効率的に実装することを指向したハードウェアアーキテクチャも各種存在する。Greg Papadopoulos はMITのタグ付きトークン・データフローアーキテクチャを設計した。
データフロープログラミングを効率的に実装することを指向したハードウェアアーキテクチャも各種存在する。Greg Papadopoulos はMITのタグ付きトークン・データフローアーキテクチャを設計した。

== 特徴 ==
[[ファイル:Directed acyclic graph.svg|サムネイル|有向グラフ]]
データフロープログラミングは、<code>{input} operator {output}</code>を基本単位にする。outputは次のinputになる。operatorは[[有向グラフ]]形式で連結配置される。各ノードがoperatorで、矢印がinputとoutputのフローである。[[データフロー]]には分流(diverge)と合流(converge)の概念がある。右図ではBのoutputは、C・D・Eへのinputに分流される。B・C・Dのoutputは、Eへのinputに合流される。

データフロープログラムは、起点オペレータへの外部からのデータ入力で開始される。右図ではAとGが起点になる。これは[[イベント駆動型プログラミング|イベント駆動]]に似ている。データ入力ごとに[[スレッド (コンピュータ)|スレッド]]が生成され、事実上の[[マルチスレッド]]で同時計算されつつ、特定の合流オペレータで[[同期]]が取られる。合流ではスレッドも一つに融合される。分流ではスレッドも別々に生成される。その[[同期]]にはプッシュ(push model)とプール(pull model)の二つがある。プッシュは、input値が全て揃うまで計算待機されるという[[バリア (計算機科学)|バリア]]同期である。プールは、最初のinputが来てから一定時間経過すると未input値をdefault値にして強制計算outputするというタイマー同期である。

データフローの[[有向グラフ]]構築は、しばしば[[ビジュアルプログラミング言語|ビジュアルプログラミング]]の対象にされる。


== 歴史 ==
== 歴史 ==
1961年に[[ベル研究所]]で開発された制御回路設計プログラム「BLODI -BLOck DIagram-」は、[[フローチャート]]表示スクリーン上のオペレータブロックの視覚的配置を可能にしたデータフロープログラミングの元祖である。[[ジョン・ラリー・ケリー・ジュニア|ジョン・ラリー・ケリーJr]]らが関与していた。
データフロー言語は本来、並列プログラミングを容易にする目的で開発された。1966年の Bert Sutherland の論文 ''The On-line Graphical Specification of Computer Procedures''<ref name="sutherland1966">{{cite paper|author=W.R. Sutherland|title=The On-line Graphical Specification of Computer Procedures|publisher=MIT|date=1966年}}</ref>では、グラフィカルなデータフロープログラミングのフレームワークが生み出された。その後のデータフロー言語は大型の[[スーパーコンピュータ]]を持つ研究所で開発されたものが多い。よく知られている{{仮リンク|SISAL|en|SISAL}}は[[ローレンス・リバモア国立研究所]]で開発された。SISALは関数型言語のように見えるが、各変数を一回しか定義できないという制約を設けている。このため、[[コンパイラ]]は容易に入力と出力を特定できる。SISAL から様々な派生言語が生まれ、その中でも{{仮リンク|SAC (プログラミング言語)|en|SAC programming language|label=SAC}}(''Single Assignment C'')は[[C言語]]と可能な限り似せた文法となっている。


1966年に[[マサチューセッツ工科大学]]の{{仮リンク|バート・サザランド|en|Bert Sutherland|label=}}([[アイバン・サザランド]]の兄) は『''The On-line Graphical Specification of Computer Procedures<ref name="sutherland19662">{{Cite journal|author=W.R. Sutherland|year=1966|title=The On-line Graphical Specification of Computer Procedures|publisher=MIT}}</ref>''』論文を発表して、[[Sketchpad]]とデータフローを融合したフレームワークを制作した。同時期の[[マサチューセッツ工科大学|MIT]]でデータフローの並行処理を提唱した{{仮リンク|ジャック・デニス|en|Jack Dennis|label=}}がデータフロープログラミングの最初の提唱者と見なされている。
より根本的なデータフロー言語として[[Prograph CPX|Progprah]]がある。これは、画面上でグラフィカルにプログラムを構築するもので、変数の代わりに入力から出力に線を引くようになっている。ただし、これは[[Macintosh]]向けに開発された言語であり、Macintoshは1996年までシングルプロセッサのマシンしかなかった。


60年代のデータフロープログラミングは、その[[並行計算]]性質から[[マルチプロセッサ]]の[[大型コンピュータ]]施設向けになった。[[アメリカ国家安全保障局]]のPOGOL、[[アメリカ国防省]]の[[VHDL]]、[[アメリカ海軍]]のSPGNなどが有名である。60~70年代のデータフロープログラミングは、非[[ノイマン型コンピュータ|ノイマン型]]コンピュータのモデルとして重視されていた。
広く使われているデータフロー言語はより実用的なもので、例えば[[LabVIEW]]が有名である。これは本来、プログラマでない人でも実験用機器間のデータのリンクを構築できるようにすることを意図していたが、現在ではより汎用的な用途で使える。{{仮リンク|Agilent VEE|en|Agilent VEE|label=VEE}} もデジタル電圧計やオシロスコープ、波形発生器といった計測機器の活用を意図したものである。


70年代半ばのデータフロープログラミングは[[マイクロコンピュータ]]向けにもなり、1976年に[[Lucid (プログラミング言語)|Lucid]]が公開された。1983年に[[ローレンス・リバモア国立研究所]]で開発された{{仮リンク|SISAL|en|SISAL}}は、[[束縛変数]]や暗黙[[並行計算]]仕様を備えて一つの標準形になり、{{仮リンク|SAC (プログラミング言語)|en|SAC programming language|label=SAC}}など数々の派生言語が登場している。
== 言語 ==
*BioEra<ref>http://bioera.net/</ref>
*Cantata<ref>{{cite web |url=http://greta.cs.ioc.ee/~khoros2/k2tools/cantata/cantata.html |title=アーカイブされたコピー |accessdate=2006年11月25日 |archiveurl=https://web.archive.org/web/20070118182602/http://greta.cs.ioc.ee/~khoros2/k2tools/cantata/cantata.html |archivedate=2007年1月18日 |deadurldate=2017年9月 }}</ref> - [[画像処理]]のためのデータフロー・ビジュアル言語
*CAL<ref>http://embedded.eecs.berkeley.edu/caltrop/</ref>
*FlowDesigner<ref>http://flowdesigner.sourceforge.net/</ref>
*ID<ref>http://www.csail.mit.edu/timeline/timeline.php/timeline.php?query=event&id=417</ref>
*[[LabVIEW]]
*[[Lucid (プログラミング言語)|Lucid]]
*Lustre<ref>http://www-verimag.imag.fr/SYNCHRONE/</ref>
*Max/Msp
*Mindscript<ref>http://mindscript.familjemarknaden.se/</ref> - オープンソースの視覚化・ソフトウェア開発環境
*[[Prograph CPX]]
*[[Pure Data]]
*[[Simulink]]
*Scilla
*[[Verilog HDL]]
*[[VHDL]]


1983年の[[Macintosh]]で登場した[[Prograph CPX|Progprah]]は、[[GUI]]操作できるデータフローの[[ビジュアルプログラミング言語|ビジュアルプログラミング]]言語であったが、シングルプロセッサ実行ゆえに1996年までは非[[並行計算]]仕様であった。Progprahは関数や変数の記述を、図形や線分の視覚マーク配置に置き換えた。Prographが示したプログラムレス理念は評価され、ホビーと実用を兼ねた数々のビジュアル言語がMacintoshと[[Microsoft Windows|Windows]]環境で登場している。1986年の[[LabVIEW]]は非プログラマでも扱える言語として注目を集めた。これは実験機器のデータリンク設計用であったが汎用的にも使える。1991年の{{仮リンク|Agilent VEE|en|Agilent VEE|label=VEE}} は計測機器(デジタル電圧計、オシロスコープ、波形発生器など)のデータリンク設計用である。
== API ==

* JavaFBP<ref>http://sourceforge.net/projects/flow-based-pgmg</ref> : Java および C# 向けのオープンソースのフレームワーク
== 言語と開発環境 ==
* DataRush<ref>http://www.pervasivedatarush.com/</ref>: Java 向けデータフローフレームワーク
*BioEra<ref group="※">[http://bioera.net/index.shtml BioEra - visual designer for biofeedback]</ref>
*Cantata<ref group="※">{{Cite web|和書|url=http://greta.cs.ioc.ee/~khoros2/k2tools/cantata/cantata.html |title=アーカイブされたコピー |accessdate=2006-11-25 |archiveurl=https://web.archive.org/web/20070118182602/http://greta.cs.ioc.ee/~khoros2/k2tools/cantata/cantata.html |archivedate=2007-01-18 |url-status=dead|url-status-date=2017-09 }}</ref> - [[画像処理]]のためのデータフロー・ビジュアル言語
*CAL<ref group="※">[https://ptolemy.berkeley.edu/projects/embedded/caltrop/ The Caltrop Project]</ref>
*FlowDesigner<ref group="※">[https://sourceforge.net/projects/flowdesigner/ FlowDesigner download | SourceForge.net]</ref>
*ID<ref group="※">http://www.csail.mit.edu/timeline/timeline.php/timeline.php?query=event&id=417</ref>
*KSKP<ref group="※">[https://www.kskp.io KSKP | 「KSKP」は、「誰もが当たり前にデータ分析・活用ができる社会」の実現に向けて、KSKアナリティクスが独自開発したデータ分析プラットフォームです。]</ref> - 大規模データの処理・分析環境。ビジュアルプログラミング言語で処理を構築できる。
*Lustre<ref group="※">http://www-verimag.imag.fr/SYNCHRONE/</ref>
*Mindscript<ref group="※">http://mindscript.familjemarknaden.se/</ref> - オープンソースの視覚化・ソフトウェア開発環境
*[[Max (ソフトウェア)|Max]]/Msp
<div style="{{column-count|2}}">
*[[Lucid (プログラミング言語)|Lucid]] - 1976年
*[[VHDL]] - 1981年
*{{仮リンク|Lustre言語|en|Lustre (programming language)|label=Lustre}}<ref>http://www-verimag.imag.fr/SYNCHRONE/</ref> - 1983年
*{{仮リンク|SISAL|en|SISAL}}- 1983年
*[[Prograph CPX]] - 1983年
*[[Verilog HDL]] - 1984年
*[[Linda]] - 1986年
*[[LabVIEW]] - 1986年
*{{仮リンク|SIGNAL (programming language)|en|SIGNAL (programming language)|label=SIGNAL}}- 1986年
*{{仮リンク|CMS Pipelines|en|CMS Pipelines}}- 1986年
*{{仮リンク|Keysight VEE|en|Keysight VEE}}- 1991年
*[[Simulink]] - 1992年
*{{仮リンク|SAC programming language|en|SAC programming language|label=SAC}}- 1994年
*[[Pure Data]] - 1996年
*{{仮リンク|Joule|en|Joule (programming language)}}- 1996年
*[[Orange (ソフトウェア)|Orange]] - 1996年
*[[Pipeline Pilot]] - 1999年
*{{仮リンク|Hume|en|Hume (programming language)|label=}}- 2000年
*[[SystemVerilog]] - 2002年
*{{仮リンク|BMDFM|en|BMDFM}}- 2002年
*[[Quartz Composer]] - 2004年
*{{仮リンク|KNIME|en|KNIME|label=}}- 2006年
*{{仮リンク|Cuneiform|en|Cuneiform (programming language)|label=}}- 2013年
*Scilla - 2018年
</div>

== フレームワークとAPI ==
* JavaFBP<ref group="※">[https://sourceforge.net/projects/flow-based-pgmg/ Flow-Based Programming download {{!}} SourceForge.net]</ref> : Java および C# 向けのオープンソースのフレームワーク
* DataRush<ref group="※">http://www.pervasivedatarush.com</ref>: Java 向けデータフローフレームワーク
*FlowDesigner<ref>http://flowdesigner.sourceforge.net/</ref> - 熱流体解析ソフト
*Mindscript<ref>http://mindscript.familjemarknaden.se/</ref> - オープンソースの視覚化・ソフトウェア開発環境
*Cantata<ref>{{Cite web|和書|url=http://greta.cs.ioc.ee/~khoros2/k2tools/cantata/cantata.html|title=アーカイブされたコピー|accessdate=2006年11月25日|archiveurl=https://web.archive.org/web/20070118182602/http://greta.cs.ioc.ee/~khoros2/k2tools/cantata/cantata.html|archivedate=2007年1月18日|deadurldate=2017年9月}}</ref> - [[画像処理]]のためのデータフロー・ビジュアル言語
*BioEra<ref>http://bioera.net/</ref> - 生体反応、音波、熱探知、視覚信号などの解析
*[[AviSynth]]


== 関連項目 ==
== 関連項目 ==
*[[関数型プログラミング]]
*[[並行プログラミング]]
*[[ビジュアルプログラミング言語|ビジュアルプログラミング]]
*[[イベント駆動型プログラミング]]
*[[シグナルプログラミング]]
*{{仮リンク|フローベースプログラミング|en|Flow-based programming}}
*{{仮リンク|フローベースプログラミング|en|Flow-based programming}}
* {{仮リンク|リアクティブプログラミング|en|Reactive programming}}
*{{仮リンク|リアクティブプログラミング|en|Reactive_programming}}
*[[アクターモデル]]
* [[パイプ (コンピュータ)|パイプ]]
*[[デジタル信号処理]]
*[[ストリーム・プロセッシング|ストリーム処理]]
*[[パイプ (コンピュータ)|パイプライン]]


== 注 ==
== 注 ==
{{Reflist|group="※"}}

== 出典 ==
{{Reflist}}
{{Reflist}}


{{プログラミング言語の関連項目}}
{{プログラミング言語の関連項目}}

{{DEFAULTSORT:てたふろふろくらみんく}}
{{DEFAULTSORT:てたふろふろくらみんく}}
[[Category:プログラミング言語]]
[[Category:プログラミングパラダイム]]
[[Category:プログラミングパラダイム]]

2024年9月29日 (日) 13:12時点における最新版

データフロープログラミング: dataflow programming)は、データフローの原理とアーキテクチャに準拠したプログラミングパラダイムであり、コンピュータプログラムをオペレーション間のデータフロー有向グラフとして模型化する。データフロー言語は、関数型言語の特徴を共有しており、より数値処理に適したものになっている。

概要

[編集]

データフロー言語は、命令型プログラミングモデルなどの他の主要のプログラミング言語とは対照的である。命令型プログラミングではプログラムは一連の命令文で構成され、データの流れは見えない。この違いは瑣末に思われるかもしれないが、パラダイムとしての違いは非常に大きく、データフロー言語はマルチコアシステムやマルチプロセッシングシステムを自由に使える。

プログラミングにおける重要な概念として「状態」がある。状態とは基本的には、システムの各種条件(変数)の測定値のスナップショットである。多くのプログラミング言語は正しく動作させるために多数の状態情報を必要とするが、一般にプログラマからはそれら情報は隠蔽されている。実世界の例として、3方向の電灯スイッチがある。一般にスイッチを上にすれば電灯が点くが、3方向スイッチでは後ろの電灯が消えるかもしれない。結果は(おそらく視界からは見えない)他のスイッチの状態によって決まる。

実際、状態はコンピュータから見ても隠蔽されていることが多く、ある情報の断片が(一時的ですぐに捨てられる情報だとしても)状態を符号化したものかどうかはコンピュータの関知するところではない。並列処理マシンでは状態情報を複数のプロセッサ間で共有する必要があるため、これは重大な問題となる。どの状態が重要かを知らない場合、多くの言語ではコードやデータの重要性を示すために大量の特別なコードを追加する必要がある。

そのようなコードは性能も低下させ、デバッグも非常に難しくする。性能コストの大きいコードは単一プロセッサで動作させたときもある程度のコストがかかる。このような並列性の問題は、データ集約型で非OLTP型アプリケーションを Enterprise JavaBeans で組んだときの性能の低さの主な原因である。

データフロー言語では、データがプログラムの中心的概念となることを促進する。ただし、プログラムは常にデータを入力されそれを処理して結果を出力するものとは限らない。古いプログラムほどそのような前提が真であることが多く、UNIXオペレーティングシステムにおける単機能ツールをパイプで繋いでデータをやり取りするという形態が典型的である。データフロー言語でのプログラムは、コマンド行パラメータなどの入力を起点として、そのデータがどのように使われ、更新されるかを記述する。データは明示的であり、パイプや線で情報の流れが物理的に描かれることも多い。

処理・操作は入出力のある「ブラックボックス」であり、全てが明示的に定義される。その入力が全て妥当となったとたんに実行される。従来型のプログラムは一連の命令文で構成されているが、データフロープログラムは組み立てラインに労働者が並んでいるようなもので、各労働者は材料が到着したとたんに割り当てられた作業を開始する。データフロー言語が本質的に並列的であるというのはこのためである。各処理・操作には保持すべき隠蔽された状態を持たず、どの処理・操作も同時に実行可能である。

データフロープログラムは一般に、コンピュータ内部でも通常のプログラムとは全く異なった表現をされる。従来のプログラムは単に命令が実行すべき順序に並んでいるだけである。データフロープログラムは巨大なハッシュテーブルとして実装されることもあり、入力をキーとして、データとしてのコードへのポインタを得る。ある処理・操作が完了すると、プログラムは全ての入力が利用可能となっている処理・操作をリストから検索し、それを実行する。処理・操作が完了したとき、一般に出力データが新たに入力データとなり、それによって入力が揃った別の処理・操作が実行可能になる。

共有すべき並列処理はリストの検索部分だけであり、このリストがプログラム全体の状態を表している。従って、状態を管理する作業はプログラマの手を離れ、言語処理系がその役割をする。並列処理向けの処理系を単一プロセッサコアのマシン上で動作させるとオーバーヘッドが生じるが、これは異なる実装の処理系と置換することでオーバーヘッドのない実行が可能となる。

データフロープログラミングを効率的に実装することを指向したハードウェアアーキテクチャも各種存在する。Greg Papadopoulos はMITのタグ付きトークン・データフローアーキテクチャを設計した。

特徴

[編集]
有向グラフ

データフロープログラミングは、{input} operator {output}を基本単位にする。outputは次のinputになる。operatorは有向グラフ形式で連結配置される。各ノードがoperatorで、矢印がinputとoutputのフローである。データフローには分流(diverge)と合流(converge)の概念がある。右図ではBのoutputは、C・D・Eへのinputに分流される。B・C・Dのoutputは、Eへのinputに合流される。

データフロープログラムは、起点オペレータへの外部からのデータ入力で開始される。右図ではAとGが起点になる。これはイベント駆動に似ている。データ入力ごとにスレッドが生成され、事実上のマルチスレッドで同時計算されつつ、特定の合流オペレータで同期が取られる。合流ではスレッドも一つに融合される。分流ではスレッドも別々に生成される。その同期にはプッシュ(push model)とプール(pull model)の二つがある。プッシュは、input値が全て揃うまで計算待機されるというバリア同期である。プールは、最初のinputが来てから一定時間経過すると未input値をdefault値にして強制計算outputするというタイマー同期である。

データフローの有向グラフ構築は、しばしばビジュアルプログラミングの対象にされる。

歴史

[編集]

1961年にベル研究所で開発された制御回路設計プログラム「BLODI -BLOck DIagram-」は、フローチャート表示スクリーン上のオペレータブロックの視覚的配置を可能にしたデータフロープログラミングの元祖である。ジョン・ラリー・ケリーJrらが関与していた。

1966年にマサチューセッツ工科大学バート・サザランド英語版(アイバン・サザランドの兄) は『The On-line Graphical Specification of Computer Procedures[1]』論文を発表して、Sketchpadとデータフローを融合したフレームワークを制作した。同時期のMITでデータフローの並行処理を提唱したジャック・デニス英語版がデータフロープログラミングの最初の提唱者と見なされている。

60年代のデータフロープログラミングは、その並行計算性質からマルチプロセッサ大型コンピュータ施設向けになった。アメリカ国家安全保障局のPOGOL、アメリカ国防省VHDLアメリカ海軍のSPGNなどが有名である。60~70年代のデータフロープログラミングは、非ノイマン型コンピュータのモデルとして重視されていた。

70年代半ばのデータフロープログラミングはマイクロコンピュータ向けにもなり、1976年にLucidが公開された。1983年にローレンス・リバモア国立研究所で開発されたSISAL英語版は、束縛変数や暗黙並行計算仕様を備えて一つの標準形になり、SAC英語版など数々の派生言語が登場している。

1983年のMacintoshで登場したProgprahは、GUI操作できるデータフローのビジュアルプログラミング言語であったが、シングルプロセッサ実行ゆえに1996年までは非並行計算仕様であった。Progprahは関数や変数の記述を、図形や線分の視覚マーク配置に置き換えた。Prographが示したプログラムレス理念は評価され、ホビーと実用を兼ねた数々のビジュアル言語がMacintoshとWindows環境で登場している。1986年のLabVIEWは非プログラマでも扱える言語として注目を集めた。これは実験機器のデータリンク設計用であったが汎用的にも使える。1991年のVEE英語版 は計測機器(デジタル電圧計、オシロスコープ、波形発生器など)のデータリンク設計用である。

言語と開発環境

[編集]
  • BioEra[※ 1]
  • Cantata[※ 2] - 画像処理のためのデータフロー・ビジュアル言語
  • CAL[※ 3]
  • FlowDesigner[※ 4]
  • ID[※ 5]
  • KSKP[※ 6] - 大規模データの処理・分析環境。ビジュアルプログラミング言語で処理を構築できる。
  • Lustre[※ 7]
  • Mindscript[※ 8] - オープンソースの視覚化・ソフトウェア開発環境
  • Max/Msp

フレームワークとAPI

[編集]
  • JavaFBP[※ 9] : Java および C# 向けのオープンソースのフレームワーク
  • DataRush[※ 10]: Java 向けデータフローフレームワーク
  • FlowDesigner[3] - 熱流体解析ソフト
  • Mindscript[4] - オープンソースの視覚化・ソフトウェア開発環境
  • Cantata[5] - 画像処理のためのデータフロー・ビジュアル言語
  • BioEra[6] - 生体反応、音波、熱探知、視覚信号などの解析
  • AviSynth

関連項目

[編集]

注釈

[編集]

出典

[編集]
  1. ^ W.R. Sutherland (1966). The On-line Graphical Specification of Computer Procedures. MIT. 
  2. ^ http://www-verimag.imag.fr/SYNCHRONE/
  3. ^ http://flowdesigner.sourceforge.net/
  4. ^ http://mindscript.familjemarknaden.se/
  5. ^ アーカイブされたコピー”. 2007年1月18日時点のオリジナルよりアーカイブ。2006年11月25日閲覧。
  6. ^ http://bioera.net/