カテゴリー
その他

PlantUMLのアクティビティ図でrepeatのbackwardキーワードと動線が正常に出力されない話し

今やっている業務の作業フローがこんがらがってきたので、整理しようと思って図に書き出してみた。この際、きれいに出力しようと思った。

最初はInkSpaceで一から書いていこうとしたが、箱を3つ書いたみたところでめげた。次にやったのは、VS Codeの拡張機能で動くPlantUMLのアクティビティ図である。PlantUMLはInkSpaceやIllustrator、Visio、LibreOfficeのDrawのようなドローアプリケーションで図を描く必要もなく、テキストで描いていけば自動的にアクティビティ図(それ以外のUMLの図でも)を描いてくれる優れものである。

PlantUMLのアクティビティ図には動線の機能があるので、自分とお客さんの役割を分担した上での業務フロー図が描けそうなので早速描いてみた。動線とはこのような図である。PlantUMLのサイトからの抜粋である。

これをPlantUMLのアクティビティ図のコードではこんな感じである。

@startuml
|Swimlane1|
start
:foo1;
|#AntiqueWhite|Swimlane2|
:foo2;
:foo3;
|Swimlane1|
:foo4;
|Swimlane2|
:foo5;
stop
@enduml

これは簡単と、このまま進めていったら、問題が発生。フローを戻したりが自由にできないのでした。

PlantUMLではシーケンス(順序)、判断(IF)、前後判定の繰り返し(repeat)くらいの昔流行ったgoto文を廃止した構造化プログラミング(例外的にgoto文は残っているけど)のプログラム制御しか用意されていない。今回は、例えば、処理後に判定してNGだったら、何かしらの処理をしてから、また元の処理に戻すなんてことをやりたい。これを考えてみると、後判定の繰り返しで、判定でOKになるまで繰り返す。繰り返す前にNGのメール送信処理を実行したい。これは判定後の処理で書いてみるとこのような感じになる。

@startuml
start

repeat
  :何かの処理;
  backward:処理NGメール;
repeat while (処理判定?)
:処理OKメール;
stop;
@enduml

出力されたアクティビティ図はこのような図になる。

次に担当Aと担当Bに役割を振り分けるように動線で表現してみる。処理は担当Bが行って、その処理が正しく行われたかの判定とその結果のメール送信は担当Aとなる。担当BはNGメールが来たら再度何かの処理を行う。

@startuml
|A|
start
|B|
repeat
  :何かの処理;
  |A|
  backward:処理NGメール;
repeat while (処理判定?)
:処理OKメール;
stop;
@enduml

これを出力したアクティビティ図はぐちゃぐちゃになる。PlantUMLのサイトにあるライブプレビューでも同じ結果である。ライブラリは一緒なのかな?

まあ、このようはフローはアクティビティ図からいうと変則的な図だと思うからPlantUMLではサポート外である。何かいい書き方があるのかな?

仕方ないので、SVGファイルに一旦出力して、出力したSVGファイルをInkSpaceで開いて手で修正した。

でも、このような処理を通常のプログラミングでどうやっているか考えてみると、処理を無限ループで回して最後に判定し、OKならbreakで無限ループから抜け出している。PlantUMLではbreakが書けないしな。

そもそもPlantUMLのアクティビティ図の書き方は新しく変わったみたい。いまだベータ版となっている。昔と比べてだいぶメンテナンスしやすくなったみたい。ただし、いろいろと制約が増えてしまったようでもあるらしい。

追記

PlantUMLのフォーラムを覗いていたら、どうやらループでbreakができるらしい。ドキュメントに載っていない。こんなコードを書くと

@startuml
start

while()
  :何かの処理;
 
  if (処理OK?) then (yes)
    break
  else (no)
   :処理NGメール;
  endif

endwhile
:処理OKメール;

stop;
@enduml

こんなアクティビティ図が出力される。

これに動線をつけてみると、

@startuml
|a|
|b|

|a|
start

|b|
while()

  :何かの処理;
 
  |a|
  if (処理OK?) then (yes)
    break
  else (no)
    :処理NGメール;
  endif

endwhile

:処理OKメール;

stop;
@enduml

このような惜しい感じになる。もう一歩足りない。

やはり、動線はまだ上手く動いていないのか?

カテゴリー
インストール システム関連

TortoiseGitでエクスプローラーの右クリックが応答なしになるときの対応メモ。

TortoiseGitをインストールしていて、エクスプローラーの右クリックが応答なしになってしまうときの対応メモを残しておきます。今のところ、応答なしにならないので、これでいいかはわかりません。自分のところでは、うまくいっている程度で読んでください。

エクスプローラーの右クリックをしたときに、何も反応が無くて、最後に応答なしで終わってしまう現象が起こりました。右クリックを使っているアプリケーションをアンインストールした結果、原因はGitのWindowsクライアントのTortoiseGitでした。TortoiseGitは、プログラミングでよく使っているのでアンインストールはできません。

いろいろと設定を変更をしたところ、次の設定で解消しました。

  • TortoiseGitのSettingsを起動します。エクスプローラーの右クリックからSettingsは起動できますが、応答なしになってしまいますので、スタートメニューから起動します。
  • 「アイコンオーバーレイ」の「アイコンオーバーレイ/状態表示列」を「エクスクローラー上でのみオーバーレイとコンテキストメニューを表示」にチェックします。
  • 同じく「状態のキャッシュ」で「拡張したシェル」を選択します。
  • 含めるパスに、Gitのリポジトリのあるフォルダをしてします。自分の場合は、「C:\Users\ando\workspace\*」となります。

以上の説明は言語を日本語にしたときの設定です。英語の場合は、適当に読み替えてください。

カテゴリー
システム関連

Eclipseのファイルの切り替えを速くする。

普段プログラミングで使っているEclipseで、ファイルの切り替えが遅くなっています。上のタブをクリックして別のファイルに切り替えるだけでも、2~3秒待たされます。ファイルをオープンするときも待たされます。

たかが2~3秒でも反応がないと、イライラします。このままだと、このイライラが開発に支障がきたします。

新しくEclipseをダウンロードしてインストールしても変わりません。プラグインを入れすぎという原因でもなさそうです。

Googleさんに聞いてみると、メモリの設定でEclipseの起動が速くなるとのこと。早速試してみます。eclipse.iniに記述されているメモリの最小と最大の設定の部分を、以下のよう変えてみます。

-Xms512m
-Xmx1024m

するとサクサクファイルを切り替えることができるようになりました。

普段のPCはメモリをたくさん積んでいた方がいいですね。ちなみに今のPCは8GBです。まだまだです。

追記

しばらく経ったら、前と余り変わらない遅さになってしまった。

おそらくEGitかJGirtが原因なのかと思います。アンイントールしたらファイルの切り替えが速くなりました。便利だったのに残念です。

追記の追記

速くなったと思ったら、変わらず2~3秒ファイルの切り替えに待たされます。EGitでもなさそうです。

カテゴリー
Google +

こんな奴とは仕事したくないと思ったこと。こんな奴ってノマドって難しいよね

今日は、入っている事務所のネットワークの再構築の日であった。プリンタを共有のVLANに押し込めて、各社でVLANに切り分けて使用するといったもの。プリンタの所有する会社の社長さんが懇意にしているリコーのエンジニアさんが、ネットワーク構成を提案して来て作業してもらった。自分は、サーバーのIPアドレスの振り直しを行う。

ここで突然怒鳴り込んでくるヤツが来た。何でも、今まで使えてたプリンタから出力できないとのこと。それは当たり前の話しで、自分でゲートウェイを立てて自分のネットワークから切り離して勝手に印刷できるようにしていただけのこと。

あまりにもうるさいので見てみると、まだそこまでエンジニアさんは設定は完了していないのでしばらく待ってくれるようにお願いしているが、ますますそいつは騒ぎ出す。こちらもいい加減頭にきたので、自分で手を動かして自分で考えろ、印刷できないくらいなら、直接プリンタつなげるとか、印刷できるPCから出せとか、もっと自分で頭使えと言っておいた。

リコーのエンジニアさんも焦ったらしく、インターネットへの接続ができないとかで、私もルーターの設定を少し手を出すことになった。プリンタを所有している社長さんからペットのお茶を差し入れてもらったりと、最終的には無事に設定完了。

しかしながら、プロジェクトを組もうと考えたときに、こんな少しのストレスでパニックになるヤツとは、到底一緒には仕事ができない。たとえ、おいしい仕事を持ってこられても、危なくてやってはいられない。怒鳴って騒いでいるだけでは、何も問題は解決しないのです。まずは冷静になって、頭で考え、手を動かせよ。

今のいる事務所は、小さな会社が集まっていて、お互いに一緒に仕事を補ってやっていきましょうということができる環境である。机をシェアして時間をずらして仕事しているという今どきのノマドとか言われている仕事の仕方に近いと思う。だけど、こんな声高に叫んでいるヤツがいるとなると、ノマドとかいうのも考えようによっては、我々プログラミングを生業にしているものからすると、邪魔くさくなります。協業、アイディア共有など他人が必要なときの短時間だけ、そのような場所にいて、あとは自宅作業か静かなカフェで作業した方が幸せかもしれません。

追記

ということで、この事務所から自分の会社は引き払って自宅に作業の中心におくことにしました。

Google+: View post on Google+

カテゴリー
Google +

テストから始めてみます。

最近はまじめにプログラムを書いています。あるサイトを再構築しているのですが、これまた大昔に作ったものでフレームを使っています。

試しにCakePHPで作成してみます。しかも、最新のCakePHP2です。

CakePHP2になるとUnitTestがSimpleTESTからPHPUnitiに変わりました。いろいろとカンファレンスに話しを聞いていると、アジャイルとか自分は感化されやすいので、まずはUnitTestでのテスト駆動開発を導入してみます。バージョン管理は前に導入していましたが、徐々に試してみます。

こうでも新しいことをしていないと、だんだんを開発のモチベーションが上がらないので。何でも試すことができるのは、一人で動いているせいでしょうか。

CakePHP2で使うPHPUnitの情報は、Googleさんに聞いてもほとんどありません。日本語での情報はありません。一番詳しいのは、CakePHP2のCook Bookです。ますはこちらを読むことを薦めます。結局、本家CakePHPにたどり着きました。英語ですけど、何とか読めます。

PHPUnitも開発元のサイトが一番詳しいということになりました。こちらは日本語に翻訳されています。

Fixruresのファイルは、CakePHPのBakeで作成するのが簡単のようです。DBから直接Fixturesにインポートすると、ちょっと大きなテーブルだとメモリが一杯になります。ソースを追ってみたところ、メモリにテーブルデータをすべて展開しているようです。最初は、何かバグでもあるのかと思っていました。Bakeで途中で聞いてきますが、一部を切り出した方がよさそうです。

テスト駆動開発は最初にテストコードを書いてからソースコードを書くのですが、まだまだテストコードを書くのを忘れて、直接コードを書いてしまいます。こちらは癖を付けなければいけません。

恩恵としては、リファクタリングするときはやはり効果があります。あとはエラーの赤を消して、緑にするという目標があって、プログラミングは楽しくなりそうです。

しかし、まだまだ、どうやってテストを書くのがいいのか迷います。我慢してしばらく続けようと思います。

Google+: View post on Google+

[amazonjs asin=”4798039519″ locale=”JP” title=”Webアプリ開発を加速する CakePHP2定番レシピ119″]

カテゴリー
未分類

PHPカンファレンス2011に参加してきた。

PHPカンファレンス2011に参加しました。10年近くPHPで仕事をしてきたのに、今回が初めての参加です。

さて、何かとセキュリティが低いと言われているPHPですが、だんだんと開発者が減ってきたのでしょうか? 私は違うような気がします。Webプログラミングでは簡単に入っていけますし、Windowsではないサーバーはとりあえずデフォルトで使えますし、レンタルサーバーを借りた際にはPHPは動かせます。WebプログラマーはPHPで開発できて損はないじゃないかと思います。

さてPHPカンファレンスですが、考えていたよりは盛況でした。あるセッションでは部屋に入りきれずに、別室でUStreamで見ているという、現地に行った意味ないじゃん、と行ったことがありました。こちらは運営の方には改善を願いたいものです。

セッションに感化されてTDDの本を帰りに買ってしまいました。今回はとても刺激になってよかったです。たまにこんなセミナーに参加して、モチベーションを上げていきたいものです。

普段使っているCakePHPは、もう盛り上がっていないのかな・・・。

CakePHP 1.3によるWebアプリケーション開発 オープンソース徹底活用

CakePHP辞典 Pocket詳解

カテゴリー
システム関連 覚え書き

PHPExcelではまったこと2点

今、開発している案件でレポートをMySQLからデータを取得してPHPで加工してExcelファイルに書き出すなんてことをしています。テンプレートのExcelファイルを読んだり書いたりために、PHPExcelというライブラリを使っています。

PHPExcelを使って、はまったことが2つありました。一つはExcelファイルの特性かもしれません。

1点目。テンプレートのExcelファイルを更新してPHPExcelで読み込んでみても更新した前の内容のまま。

これは、Excelファイルの中にある元の履歴データからデータを取得しているようです。対処方法は、「名前を付けて保存」で上書き保存しました。もっとよい方法があるかもしれません。

2点目。セルに1文字だけだとUnknown Errorでそのセルが読み込めない。

これはPHPExcelの内部で使っているiconv_substr()のバグでしょうか? とりあえずセルを2文字以上に設定しています。PHPExcelのソースをいじればいいのでしょうね。

PHPのプログラミングに関係していない人には関係ない、自分のための覚え書きでした。

カテゴリー
インストール サポート システム関連

タブレットを導入するための検討事項。

普段はレッツノートのR6というWindowsのノートPCを持ち歩いています。最近は重く感じるようになって、カバンに入れておくのも辛くなってきた。

では、今はやりのタブレットにしようかと考えましたが、今のLet’sNoteの何に使っている状況を考えてみるとなかなか手を出せない。今の持ち出し用のノーPCの使い方は、以下の通り。

  1. Gmailでのメール送受信。
  2. 会議、打ち合わせのメモをテキストエディタの秀丸で入力。
  3. Googleカレンダーでのスケジュール管理。
  4. メモをEvernoteで管理。
  5. Eclipse上で簡単なプログラミング。
  6. XAMPP上でサイトの客先デモとローカルテスト。
  7. ssh経由でサーバー管理。
  8. シリアルポート経由でのルーターの設定。

1.~4.は、現状のタブレットでもできますし、5.はどうせそんなに外でプログラミングするわけでもないし、6.~7.はネットワーク経由でサーバーに接続すれば何とかなります。問題は、8.のルーターの設定です。ルーター(ヤマハの製品が主)の設定は、

  1. webブラウザ接続
  2. IPアドレスでLANポート経由でtelnet接続
  3. シリアル(com)ポートでtelnet接続

の3通りで行っています。3.に行くけば行くほど、ルーターへの接続で難しくなっていきます。問題は、その中の3.のシリアルでの接続です。Windowsのレッツノートの場合は、USBーシリアル変換ケーブルで簡単に接続できてしまいます。ルーターがネットワークの設定が飛んでしまった場合、無理矢理シリアルポート経由でログインして設定してしまいます。タブレットの場合、シリアルポートでの接続はできるのでしょうか? できなければ強制的に初期設定して、2.のように接続して、設定を流し込むとことになります。設定のインポートはtftpを使うので、tftpのソフトが必要となります。1.や2.も結局LANポート経由で接続するのでこちらも面倒。無線LANのアクセスポイントを用意してなんてことしなければいけないかも。

AdnroidのタブレットよりもWindowsが動くタブレットのほうが簡単であるという結論になりそうかもしれません。だったらLet’sNoteよりも小さなノートPCほうがもっとよいという結論になりますので、以上の検討事項は無駄になりそうです。

カテゴリー
その他

PICのお勉強

PICというマイコンのお勉強を始めています。これを仕事にするのではなく、あくまでも趣味の電子工作です。

今はパソコンと言われていますが、大昔はマイコンと呼ばれていました。基盤剥き出しで入力は16進キー、出力は8セグのLED。有名なところではNECのTK-80でしょうか・・。

TK-80が出たのは中学生のころでしたでしょうか? TK-80は高くて買ってもらえず、その後高校生になってPC-8001を買ってもらったのを覚えています。それでプログラミングはBASICから入りました。TK-80を買ってもらっていたら機械語になっていたのでしょうか。

ずっとコンピュータの世界にいますが、ずっとソフトウェアで仕事しています。ソフトウェア屋からすると、ハードウェアにあこがれ(嫉妬?)があります。ある会社にいたときは、工場の制御の部隊にいましたが、あくまでも私はソフトウェア開発の仕事をしてました。隣ではプロコンでハードウェアを制御していましたが、私はインテルマイコンで工場の業務支援をするといったシステムを開発するといった一見レベルが高そうな仕事をしていそうですが、結局は上司からはハードウェアを理解できていない人間に、工場の制御を任せられないということのようでした。

それから、部署が変わっても会社が変わっても、ハードウエアの開発なんて縁のないものになりました。

ふと思って簡単なマイコンの開発ができると聞いて、PICマイコンを触り出しました。まだまだLEDを点灯する程度ですが、部品をハンダしたりでちょっとはハードウェアを作っている雰囲気を楽しんでいます。PIC Kit 3も買ってしまったし、やらなければいけないように自分に仕向けていますが。

やはり、ソフトウェア屋の性で、プログラミングのほうを凝っていくのでしょうか・・。

カテゴリー
システム関連

マルチディスプレイにしましょう

モニタが1つ余っていたので、マルチディスプレイで設定していました。グラフィックボードもなぜか余っていた玄人志向GF8600GT-E256HW/HPというボードがあったので組み込んでみました。このボードがどうして買ったかは不明です。DVIのケーブルだけが一本足りなかったので、これは購入しました。

ボードをPCに付けてディスプレイドライバをインストールするだけなので簡単な作業です。nVIDIAのサイトから最新のドライバをダウンロードしました。

マルチディスプレイの使い方としては、左側を普段使うアプリケーション(Webブラウザ、メールなど)を立ち上げ、右はプログラミングするための作業として(Eclipseなど)、とりあえずしておきます。

どうすれば、効率的な作業ができるかはこれからの課題です。

このページは xfy Blog Editor を利用して作成されました。