移動: トップ > Simon.P.G. > Simon.P.G.とは?
履歴:
統計:
目次:
このページの最終更新日: 2012/06/19

Simon.P.G.とは?

Simon.P.G.は無力ながら少しでもお役に立てるようなソフトを制作、提供するプログラム開発チームのハンドル名です。

Simon.P.G.のスタンスは次の2つです。

  • 多くの人をハッピーにしたい
  • 何にも努力したくない

Simon.P.G.は多くの人をハッピーにしたいと考えています。多くの人のハッピーがすべてのモチベーションの源です。ソフトを作るには、手間も時間も掛かります。しかし、ソフトを作ることで多くの人をハッピーにできるなら、それがソフトを作る理由です。

ハッピーにできるなら、途中の過程は何でもよいと考えています。ハッピーが大きくなることしか考えていません。なので、はじめに誰がアイディアを出して、誰が実現したかにとらわれません。他の方がライブラリを作成していれば、それを積極的に活用します。他の方がプログラムの方法を書いていないかとWeb上で積極的に探します。ここで制作しているソフトを他の方がもっとよいものにすることへも積極的に応援します。ここで紹介しているアイディアを他の方が実現することに積極的に支援します。それは、Simon.P.G.チーム1つだけの力では、多くの人をハッピーにはできないからです。

一方、Simon.P.G.はソフトの開発やホームページの制作など、何にも努力したくないと考えています。プログラムを書くのは少なからず面倒です。ずっと机に向かわなくてはならず苦労が多く掛かります。それほど効率よくプログラムを書けるわけではなく、集中力もそれほど長くは続きません。あまり「頑張って努力」はしたくないのです。

しかし、Simon.P.G.はそのような努力をしないために努力をしています。プログラムのどこで書くのが面倒になるかを考えて、プログラムをどのように考えれば努力せずに済むかを探し続けています。努力しなくてよいように努力すると、作業数が減り、作業時間が減って、早くソフトを制作できます。早く制作して公開できれば、より早く多くの人をハッピーにすることが出来ます。すべては多くの人のハッピーにつながっています。

ここで、もし面倒とか、努力したくないとかと思わなければ、せっかくの工夫する点を見つけることは出来ません。工夫する点が見つからなければ、どう工夫するかのアイディアも生まれることはありません。アイディアがなければ、実現もなくて何も起こりません。面倒と思うときこそが、実は工夫するチャンスなのかもしれません。

Simon.P.G. Life

2012年現在

次の2つのソフト/ライブラリを作りました。(一部未公開)

  • Bloggerブログへ投稿/編集/管理するライブラリ(公開)
    GDataライブラリを使ってC#で実装。GDataのAPIインターフェースを、ブログ管理がしやすいように作り変えたもの。
  • Matlab言語で書かれたソースコードから、関数/クラスを抽出するライブラリを更新
    正規表現を使って実装。コードの構造を厳密に解析。旧式と新式の関数の書き方に対応。

その他に、C#のdynamicキーワードを使って、XMLの要素を動的に読み出す方法を試しました。XMLの要素名をコードに直に書くことが出来、コードが読みやすくなりました。一方、GUIにおいて、入力エラーを検証し、次の入力場所へ誘導する機能を取り入れ、入力しやすいGUIを作成しました。

前年に引き続き、ソフトのアイディアや学んだことを、文章にまとめて記事にしました。作成した記事は、次の1つです。

  • クラスコラボ図を使った開発の流れ
    クラスコラボ図を使ってソフトの開発を行う方法を提案しました。本記事に示す5段階の流れで開発を進めることで効率よく開発できます。10000字を超える長編になりました。

さらに、記事をより読みやすくするために本ホームページの機能を強化しました。機能1 : それぞれの記事の先頭部分に、記事の目次を表示する機能を追加しました。記事の中にある章/節を抽出して、自動で目次を作成しています。機能2 : 記事の先頭部分に、記事の文字数や表/図の数など、文章に関する統計情報を自動で計算して表示する機能を追加しました。機能3 : 今、記事のどこを読んでいるのか分かりやすくするために、スクロール位置を数値で表示する機能を追加しました。機能4 : 記事の中で、検索したい文字列をすべてハイライト(文字の色を変えて表示)する機能を追加しました。機能5 : ホームページ左列にある「What's News」の領域をコンテンツの長さに合わせて自動で伸長する機能を追加しました。

良い記事をログするブログを作成しました。

Job履歴 : データ処理ソフトで関数メイン作法、検証+誘導によるUI工夫
ソフト : ブログ投稿Lib作成(未公開)/Matlabオブジェクトブラウザを更新(未公開)→より文法構造を細かく解析して抽出、新/旧関数もOK

HP記事の執筆 : クラスコラボ図を使った開発の流れ=クラスコラボ図を使ってソフトの開発を行うのであれば、本記事に示す5段階の流れで開発を進めれば効率よく開発できます。
HPの機能追加→読みやすいHPへ=目次/統計/位置表示/ハイライト/New拡大
良い記事をログするブログを作成

2011年

次の4つのソフト/ライブラリを作りました。(一部未公開)

  • モデル予測制御(MPC)を実装
    C/GMRES法を使って実装、非線形最適問題/最適制御問題を解くことが可能、実装言語による速度パフォーマンスを比較(C++, C#, Matlab)。
  • JModelicaテンプレートを作成(公開)
    JModelica(最適制御問題を解くツール)の使い方を簡単にするライブラリとテンプレートを作成。Pythonを使って実装。
  • Excelに記録した作業履歴を集計して、週単位で種類別に作業時間をグラフ化するソフト
    SQLiteデータベースを使って集計データを保存、管理。
  • 逆L字窓のグルーピング(ラベリング)を行う画像処理

その他に、非線形最適問題を解くソルバIPOPTをC#から呼び出して、最適問題を解く方法を試しました。また、最適制御問題を解くツールJModelicaを使って、簡単に最適問題を扱えるようになりました。一方、タグチメソッドを使って、よいパラメータを探す方法を試しました。OpenCV(画像処理ライブラリ)をC#から呼び出すためのEmguを使って、マッチングを行う画像処理を試しました。SVNBazaarを使って、バージョン管理を行いながら開発する方法を試しました。C#のソフト開発で実装するユニットテストを、NUnitに統一するようにしました。UI部分のコードに関する新しい書き方MVVMを学んで、ListViewを例題に色々なUIの使い方を試しました。

前年に引き続き、ソフトのアイディアや学んだことを、文章にまとめて記事にしました。作成した記事は、次の5つです。

Job履歴 : OpenCV, Emgu, C#/Ipopt from C#、JModelica, Python/タグチメソッド, Scala/MPC、SVN、Bazaar/NUnitにテストを統一
ソフト : タグチメソッド作成(未公開)/C/GMRES実装(未公開)→実装(C++, C#, M)によるパフォーマンス比較/JModelicaテンプレート作成/SQLiteで作業履歴集計(未公開)→SQLiteデータベースに保存して管理/逆L字窓のグルーピング画像処理 (新アルゴリズム)/MVVM試行、ListViewで色々
HP記事の執筆 : クラスコラボ図=複数のクラスがお互いに協調し合う様子を、新しい図の描き方、クラスコラボ図で表現します。/関連するコードを色付け/メトリクスを測って 文章の質を上げる、使い方を解説する文章、レポート文章の作り方

2010年

次の8つのソフト/ライブラリを作りました。(一部未公開)

  • yield文イベントを待機するライブラリ(公開)
  • ファイル/フォルダの作成日/更新日をすべて1つのファイル(.csv)に保存し、必要な時に保存ファイルから復元できるソフト
  • 以前に作った、PCの使用時間の履歴を記録するソフトを改良
    微小なマウスの動きを誤検出する点を防止。
  • 文字を撮影した画像から、背景を白にして文字をくっきりと描画させるソフト
  • Matlab言語で書かれたソースコードから、関数/クラスを抽出するライブラリ
    正規表現を使って実装。コードのインデントを利用しておおまかに解析。
  • Matlab言語で書かれたソースコードから、関数/クラスを一覧で表示するオブジェクトブラウザ
  • Matlab言語で書かれたソースコードのメトリクスを測定するソフト
  • インストール時のファイル書き込み/変更を監視/記録するソフト

その他に、数値積分を含むシミュレーションのフレームワークを実験的に作りました。また、並列計算を行うライブラリOpenMLTBBの使い方を試しました。一方、VerilogでRAM(ランダムアクセス可能なメモリ)を使う方法を試しました。この方法は2種類あり、FPGA内部にあるRAMを使う方法(Block RAM)と、FPGAのフリップフロップでRAMを作る方法(Distributed RAM)を試しました。

前年に引き続き、ソフトのアイディアや学んだことを、文章にまとめて記事にしました。作成した記事は、次の5つです。

Job履歴 : OpenML, TBB/C, Verilog(Distributed/Block RAM)/シミュフレームワーク
ソフト : yield文でイベントを待機するライブラリ(公開)/作成日&更新日の保存&復元(未公開)/PCの使用時間の履歴を記録するソフト(未公開)の改良→微小マウス運動の検出を防止/写真から文字を抽出する方法(未公開)/Matlabコードから関数、クラスを抽出するライブラリ(未公開)→正規表現を使用、インデントを利用してラフに解析/Matlabオブジェクトブラウザ+コードメトリクス測定を作成(未公開)/インストール時のファイル変更を監視するソフト(未公開)

HP記事の執筆 : テストで気を付けるポイント/スモールステップ開発=複雑な機能や大きな機能をうまく実装するために、スモールステップ開発といった開発方法を提案しました。/yield文で イベントを待機する=yield文の性質を使うことで、コードの実行を途中で待機するwait文の機能を擬似的に模擬します。/wait文を導入する=言語にwait文を導入して、簡単にコードを止めてイベントを待機できるようにするアイディアです。/デバッグで変数をグラフ表示

2009年

次の8つのソフト/ライブラリを作りました。(未公開)

  • コマンドライン引数初期設定ファイル(.ini)の情報を取り込むライブラリ
  • 時間帯データを格納するTimeBandデータ型のライブラリ
    時刻Aから時刻Bまでの時間区間を保持。区間の間で、加減算、結合/分割が可能。
  • PCの使用を監視し、使用した時間の履歴を記録、グラフで推移を表示するソフト
    SQL CEデータベースを使って保存/管理。
  • リスニング/トレーニングなどの作業時間を記録、グラフで推移を表示するソフト
  • 歌詞を表示する簡易ソフト
    iTunesのCOMを使って実装。歌詞はiTunesに保存、iTunesの再生と連動。
  • .NETのコンソール出力と同期して同じ内容を自動で表示する拡張テキストボックス
  • ホームページにある絵をその場で拡大表示するスクリプト

    jQueryを使って実装。jQueryのソースコードからjavascriptの高度な書き方について学習。

その他に、新しくPythonを使って、数値シミュレーションの計算を行いました。数値計算は、4つのライブラリ、NumPySciPySymPymatplotlibを使って構築しました。一方、C++/CLIを使って、ネイティブコードとマネージドコードをつなげて実行する動作を試しました。また、フリーのVerilog用シミュレーションツールのIcarusGTKWaveを使って、除算器を作成、実行/デバッグする実験を行いました。

前年に引き続き、ソフトのアイディアや学んだことを、文章にまとめて記事にしました。作成した記事は、次の7つです。

Job履歴 : Python NumPy, SciPy, SymPy, matplotlib/C++/CLI、パラ指定のライブラリ/Verilog, Icarus, GTKWave
ソフト : コマンドライン引数+初期設定ファイルの情報を取り込むライブラリ(未公開)/時間帯を扱うデータ型ライブラリ(未公開)/PCの使用時間の履歴を記録するソフト(未公開)→SQL CEデータベースに保存して管理/リスニング時間の記録管理ソフト(未公開)/歌詞表示ソフト(未公開)/HP用のImageViewer作成(未公開)→jQuery使用/コンソール出力を自動で表示する拡張テキストボックス(未公開)
試行 : Bitmapに高速書き込み(未公開)→unsafe使用/外部の数式パーサーを.Netで公開拡張(未公開)/IronPythonで動的コード実行を試行(未公開)/OpenCVラベリング、マッチングを試行(未公開)
HP記事の執筆 : クラスとは会社の中で働く人=人に仕事を頼む感覚で作ると、クラスがまるで会社の中で働く人のように見えてきます。/クラスの作り方=人に仕事を頼む感覚でクラスを作る記事を追加しました。/説明する文章の書き方=アイディアなどを分かりやすく説明する文章の書き方を追加しました。/ホームページを自動的に統一/作業単位で ウィンドウを切り替え/必要なウィンドウをすぐ選択/デバッグで変数をグラフ表示

2008年

ホームページに関する次の2つのスクリプトを作りました。(未公開)

  • ホームページのアクセスログを収集するスクリプト
    CGI Perlを使って実装。アクセス時間、ユーザーの流れなどをログ。
  • ホームページの中を移動した履歴が表示されるスクリプト
    javascriptとcookieを使って実装。

その他、SQLWMIを利用する実験を行いました。SQL CEを用いて、リレーショナルデータベースを実験的に構築、データベースの使い方を調べました。また、WMIを使用してシステムの詳細情報を収集する実験を行いました。

一方、Verilog(ハードウェア記述言語)を使って、FPGA(設計者が構成を設定できる集積回路)を設計、動作させる実験を行いました。また、Cのマクロ機能を利用して、行列の四則演算を処理するコードを、読みやすくする実験を行いました。

ソフトの開発で思い至ったアイディアや学んだことなどを、文章にまとめてホームページに配置できるように、ホームページの構成を再編成しました。大きく、制作ソフトの紹介とアイディアの2部構成になっています。作成した記事は、次の8つです。

合わせて、ベクトル画像編集ソフトを使って、文章の説明に必要なを作りました。

Job履歴 : Verilog, Cのマクロ機能
ソフト : HPのアクセスログを収集するスクリプト(未公開)→CGI Perl/HPで移動履歴を表示するスクリプト(未公開)
試行 : SQL CEでリレーショナルデータベース構築を試行(未公開)+LINQ/WMIを使用して詳細情報を収集実験(未公開)
HP記事の執筆 : コードブロックと データの流れ/データの流れを可視化する/実行の流れを可視化する/Web検索を使った です-である変換/プロジェクトファイルを管理/使用しているアプリの予測/検索結果に
表示回数、閲覧回数を表示/よいヘルプページを検索でヒットさせる仕組み

2007年

2006年に引き続いてCGソフトを使って、フォトリアリスティックな絵の作り方をいろいろと試しました。同時に、スクリプトを使ってCGソフトの動作を拡張し、これを使いやすいように整理して、スクリプトを公開しました。一方、同じCGソフトにある物理演算機能を使って、チェーンや受動歩行ロボットなど複雑な形の衝突シミュレーションを試しました。

2006年

CheckICは表示タイプが3種類あり、どのウィンドウをどのタイミングで表示するかを表すコードが複雑になっています。表示の動作を少し変えるだけで、コード全体の変更が必要です。これを回避するために、単純にウィンドウの表示規則をリストアップしておくだけで、自動的に計画を組み立てて、状況に合わせてうまく表示をコントロールする仕組みを考え始めました。(規則をいくつも登録するだけで、動作を自動的に計画する仕組み、プラニング1)

CheckICではエラーが起こっても表示されないように、多くの箇所でエラーチェック処理をしています。if分岐で値が範囲内かチェックするコードがほとんどです。しかし、これらは正常な動作では本来必要のない処理です。さらに、関数を呼ぶたびに何度も同じチェックが実行され、処理の効率が悪くなります。これを回避するために、状態に応じて自動的に実行の流れを組み替え、エラー処理を含めたり省いたりする仕組みを考え始めました。(実行の順番を拘束する条件を書いておき、条件に従って自動的に実行の流れを組み替える仕組み、プラニング2)

プログラムとは別に、3DのCGを制作するソフトを使い始めました。CGソフトの動作を拡張するために、スクリプト言語(Pythonなど)も使い始めました。また、数式処理を行うソフト(CAS)を本格的に使い始めて、運動方程式の導出や微分の拡張など、オブジェクト指向を使った数式処理を始めました。

2005年

前回考えていた、機能を分けてプログラムを書く方法を発展させて、機能をより細かく分けてそれらをつなげるだけでプログラムを作成する方法を考えました。(Model2) 機能をつないだ構造を図にして見れば内容が理解しやすくなり、細分化した機能を再利用して機能が追加しやすくなると考えていました。しかし、少し複雑な機能を追加するだけで構造が飛躍的に難しくなり、機能をつなぐのが面倒でプログラムを書く方が楽なことが分かりました。

そこで、機能を細分化してつなぐのは止め、代わりに、機能を追加するときに何が困るかを考えました。そして、少し時間が経つとどんなプログラムだったのか意味を忘れてしまうから困ると考えました。そこで、ソースコードやコメント、図などを使って、プログラムの意味をどのように残すかを考え始めました。(意味的プログラミング)

このようにして、プログラムそのものを書く行為から移って、プログラムの書き方を考えるようになり、いろいろな考えを紙に書くようになりました。そのため、どのように文字や図を使って、紙に考えを残すかが重要になりました。そこで、文の間に矢印を引いて文章を2次元で表現したり、イメージを図で描いて文の対応する部分と線で結んで、紙に考えを書く方法を試しました。

機能を追加しやすいプログラムの書き方について、広く世の中の傾向を調べるようになりました。オブジェクト指向を活用して機能を拡張するもの、プラグインの仕組み、デザインパターン、UML、その他のさまざまな駆動開発など、多くの方法について調べました。

2004年

CheckICのバグを修正して、6.0 SP1からSP3までバージョンアップしました。また、CheckICの動作の安定を見るために、核になる部分のテストアプリケーションを作成して、ホームページ上で公開、テストの実行を広くお願いし、色々な方にテスト結果をご報告いただきました。

次にSepaFileを制作しました。SepaFileは実験的なアプリケーションで、内容は単純にサイズの大きなファイルを分割するものですが、前回、MTClipBoardに機能を追加してそのまま破綻した失敗の経験から、どのようにプログラムを作れば後から機能を追加しやすいかをSepaFileの制作を通して実験しました。機能をはっきりと分けてプログラムを書くことで、次の機能追加のときにどれぐらいコードを把握しやすくなるかを調べています。(Model1)

2003年

CheckICをお使いいただいたユーザーからさまざまなご要望を受けて、これらを1つずつ実現し、CheckICは1.0から6.0 SP1までバージョンアップしました。並行して、実験アプリケーションであったMTClipBoardを1.0として公開しました。

同じように、MTClipBoardも機能を追加してバージョンアップするため、プログラムを書き換えはじめると、コードが必要以上に複雑で、一部を変更したら関連する別の部分の変更が必要になり、変更チェーンに陥ってしまいました。さらに、元コードのバックアップを取っていなかったことから、元に戻すことも出来なくなり、そのままプログラムが破綻してしまいました。そのため、この頃から機能を追加しやすいプログラミングについて考え始めました。

2002年

コピー&ペーストをより効率よく操作するために、自分用に小さなテストアプリケーションを試作しました。これをきっかけに、本格的に日常のソフトとして利用できるアプリケーションの制作を始めました。これがMTClipBoardの元になり、いろいろな機能を追加していきます。

この頃、インターネットを使用しはじめて、ダイアルアップ接続の接続時間を正確に測るために、自分用に小さなテストアプリケーションを試作しました。これがCheckICの元になり、そのまま機能の追加を続けて、CheckIC 1.0を公開、フリーソフトの制作を始めました。

フリーソフトを制作し公開するようになって、このときにSimon.P.G.のチーム名が誕生しました。Simon.P.G.は「サイモン ピー ジー」と読み、ソフトやアイディアを発信するためのハンドル名として育っていくことになります。

 

更新履歴
2005/02/13 v1
  • 初版作成
2005/03/21 v2
  • 「Simon.P.G.とは?」を更新
2009/04/03 v3
  • 「Simon.P.G.とは?」を大幅に書き足し
2009/04/04
  • 「Simon.P.G. Life」を書き始め
2009/05/18 v4
  • 2002年~2008年までの「Simon.P.G. Life」を作成
2012/05/30
  • 「Simon.P.G. Life」を更新開始
2012/06/19 v5
  • 2008年~2012年までの「Simon.P.G. Life」を作成

 

Copyright (C) 2002 - 2019 Simon.P.G. All Rights Reserved. Top | Simon.P.G. とは | 使用条件 | ご意見
inserted by FC2 system