スプレッドシートの「プログラミング」は、データフロープログラミングの一種です。
言語的な問題があります。「プログラミング」と呼ぶべきではありません。プログラミングと呼ぶよりもはるかに少ないからです。しかし、プログラムにデータを入力する以上のことです。
データフロープログラミングは、アプリケーションが独立したモジュールのネットワークであり、互いにメッセージ(データ)を送信するアーキテクチャおよび分野です。このモデルはすべての問題に適用できるわけではありません。処理ネットワークを通過して出力データ/ストリームを生成するソースデータまたはストリーム(またはそれ以上)がある問題にのみ適用されます。以下のリストを参照してください。
データフロープログラミングにはいくつかの種類があります。いくつか見てみましょう。
- スプレッドシート:入力数値は数式で処理され、結果の数値とグラフで処理されます。特別な特性:実行時間は「ワンショット」です。入力値(コンポーネント)が変更されると、処理グラフの適切な部分が再実行され、出力が生成されます。
- Unixパイプ:シェルはいくつかのプログラムを起動し、stdout-> stdinをリンクします。特別な特性:パイプスタイルのリンクのみが許可され、グラフは単一のキューです。
- 同期実行:指定された周波数でフレームまたはサンプルの処理をトリガーするクロックがあります。すべてのコンポーネントは、クロックサイクルごとに実行されます。ビデオおよびオーディオ処理システムの例では、指定されたフレーム/サンプルレートで動作します。
- 非同期実行:外部イベントが発生するまで、グラフはアイドル状態です。次に、イベントを処理し、何らかの出力を生成し(または生成しない)、アイドル状態になります。
質問に戻ります。はい、データフローアプリケーションをスタンドアロンアプリとして公開することをお勧めします。私はすでにそれを作った。二回。
私と私の友人は、ホームオートメーション用のプロトタイプDFシステムを作成しました。グラフエディターがないため、ユーザーがアプリを編集することはできません。一部のパラメーターは構成ファイルに格納されますが、他には何も格納されません。C ++コード(コンポーネント作成とメッセージ定義のリスト)に「コンパイル」され、ネイティブ実行可能ファイルにコンパイルされるDFスクリプト言語があります。モジュールはC ++クラスです(システムに関する情報を取得するための他のクラス:Message、Dispathcer、Component(abstract)、Port(abstract)、ConsumerPort、ProducerPort)。
また、DFシステムの利点に驚かされました。2分以内にシリアルスニファーアプリを作成したか、オンサイトでランプを1つずつ点滅させるテストプログラムを作成しました(ドキュメントはありませんでした)ハードウェアIDで)。楽しみのためだけにMIDIとジョイパッドのコンポーネントを作成しました。また、ライトオルガンも作成しました(http://homeaut.com/under_construction/を参照)。
スプレッドシートの場合、難易度は1つしかありません。すべての数値と数式(場合によってはすべてのセル)がコンポーネントであるため、グラフは最終的なものではありません。単純なsum()アプリに行を追加すると、データフローグラフが変更されます。そのため、実行時にグラフを「再プログラミング」するか、「メタプログラミング」と呼ぶ必要があります。Excelでは、マクロが仕事をしますが、データフローの純度を失います。
悪くないが完璧ではないソリューションがあります。PHPバックエンドを備えたAJAXアプリであるスプレッドシートを作成しました。縦軸は時間(日)、線はコンポーネントです。入力(行はユーザーが編集可能)、垂直平均、水平平均/合計、およびドメイン固有の統計計算などのコンポーネントがあります。問題は1つだけです。これは「1次元」です。sumとavgなどを必要とする限り、新しい行を追加し、コンポーネントを作成して、それを計算できます。ただし、強い制約があります。列は常に日です(週と月を「表示」し、毎日のデータを合計/平均として表示しますが、それでも1次元です)。私はそれを示すことができません、それは協調的であり、7/24を実行するためにPHPバックエンドタスクを必要とします、それは私のホストプロバイダーによってサポートされていません。
したがって、私のモデル(「水平方向の日数」と最もよく説明できる)は、他の種類の問題を処理できません。
私は、この問題を解決する方法、つまりタブを考えています。
Excelで行き詰まって、別のテーブルを作成する必要がある場合は、同じタブの別の領域を使用するか、別のタブを開くことができます。また、タブ間の参照は不快で、私は最初の方法を好みます。重複しないウィンドウのように、タブは同じ画面に表示されるべきだと思います。
すべてのテーブルには、垂直、水平、または固定の成長軸が必要です。垂直に成長するテーブルには行コンポーネントがあり(私の日ベースのスプレッドシートとして)、すべての列に「同じ」式があり、水平コンポーネントに列コンポーネントがあり、固定サイズのテーブルはスプレッドシートとまったく同じです。
したがって、ユーザーが新しい行/列を追加すると、新しい行/列は同じ式になります。
また、スプレッドシートでは、1000行ある場合、非常に同じ式を1000回コピーする必要があることを嫌います。これはバグの原因(式の古いバージョンをいくつかの行に保持)、メモリの浪費(同じ式1000xを保存)です。
たぶん私は間違っており、このモデルにはコンセプトのバグがありますが、それが良い考えを誘発するものであったことを願っています。