Memorandums?

This blog is written about technical-discoveries and daily-events.

Socket通信アプリケーション備忘録 No.2

前回からの改善点

前回のエントリーはコチラ。meriyasu-blog.hatenablog.com

まずは、単純なミス。
サーバー側でクライアントに対応するための各スレッドにSocketインスタンスを渡すのを
忘れていました。
これでは、スレッド生成しても、クライアントの判別ができないので意味がありません。

MyThreadManager thread = new MyThreadManager(socket);
thread.start();

もちろん、MyThreadManagerは、Threadをextendsします。
このほかにも、startメソッドオーバーロードし、Socketを受けるstartメソッドを作るという手もあります。


次に通信について。
これまでの考え方では、

ローカルにおいて、座標情報などはすべてリスト(ArrayList, HashMap)に保存し、
リストをリモート側に送信する。
適宜、ファイル化する。
送信・受信形態は、Object Output/Input Streamクラスを利用し、
#writeObject, #readObjectを使用する。

しかし、重大な欠陥が判明...
ObjectOutputStream/ObjectInputStreamは、
通信するデータは直列化されていなければ、ならない。
つまり、シリアライズなどをしなくてはいけません。
ArrayListには、独自クラスのインスタンスなどを格納しており、
その独自クラスも、Serializableインターフェースを実装し、シリアライズUIDも設定していたのですが、
なぜか、うまく動作しません。
デバッグによりわかったことは、

ObjectInputStreamのインスタンス生成時にフリーズしている。

ということです。
つまり、送信するデータなど関係なかったのです。
StackOverFlowなどにもこのようなエラーについて、
OutputStreamを先に定義しろ、
などの記述がありましたが、それは関係ありませんでした。(もしわかる方がおられれば教えてください)

結局、違う通信形態をとることに。
その方法について、入力側は、BufferredInputStreamを用い、
出力側は、PrintWriterを用います。
また、BufferredInputStreamは任意のオブジェクトを扱えるわけではないので、
データは文字列型にしました。
文字列型を受け取ったのち、ローカル上解析メソッドで、要素をリスト形式で返す仕組みにしました。

いろいろ試行錯誤した結果、、、
なんとか完成しました。

あとは、オプション機能を付け加えていくだけです...

Socket通信アプリケーション備忘録 No.1

Server

必要メソッド

  • AnimationTimer
  • ServerContoroller
  • 各クライアントスレッド

サーバーGUIに描画する機能

目的

サーバー側GUIを更新する

備考

AnimationTimerを使用する
AnimationTimerは、常時自動更新する

実装方法

モデルクラスのフラグを常に監視し、フラグが立っているならば、
リストを読み取り、サーバー側GUIに描画する。
最後にフラグをfalseにする

常時クライアント受け付け機能

目的

クライアントからの通信を受け付ける

実装方法

常時監視スレッドで、クライアントからのオブジェクトを受け取る
受け取ったら、モデルクラスのリストを更新し、フラグを立てる。

サーバーのイベントを拾う機能

目的

サーバー側のイベントを自身の画面に反映する

備考

コントローラーのイベント処理メソッドからイベントの有無を取得する

実装方法

イベントが発生すれば、モデルクラスのリストを更新し、フラグを立てる。
更新さえすれば、あとは「サーバーGUIに描画する機能」におまかせ

変化を各クライアントに伝える機能

目的

各クライアントにサーバーやその他クライアントの変更を伝え、更新する

備考

それぞれのサーバーが用意したクライアントスレッドからwriteしないといけない

実装方法

AnimationTimerによって更新されたモデルクラスの変更フラグが立っているとき、
各クライアントスレッドは、データをクライアントに送信する


あとでいい

リスト・ファイル変換機能

目的

リストは、アプリケーション終了後の保存ができない。
ファイルは、扱いづらい。
この2点から、同期機能が必要

備考

ファイルについては、アプリケーション終了後もファイル読み込みにて
情報を復活させるために用いる

How to copy on clipboard for Linux-Ubuntu

Ubuntu14.04 can't use `pbcopy` command.
However, there is an alternative way.
The command is `xsel`.
The command `xsel` needs `--clipboard` and `--input` as options.

xsel --clipboard --input

can copy on clipboard.
I can replace `xsel --clipboard --input` with `pbcopy`.
In particular, I use `alias` command.

alias pbcopy='xsel --clipboard --input'

I can hereby use as `pbcopy` command.

電圧の調整 35th-day

Commentary.

電圧は、
100V機器の場合、 101 \pm 6 V
200V機器(電動機など)の場合、 202 \pm 20 V
の間に収まることが望ましい。

供給電圧が定格とずれると、
白熱電球は、電圧上昇によって寿命が短くなり、
蛍光灯は、電圧のずれによって寿命が短くなる。
誘導電動機は、電圧の2乗に比例して、トルクが変化してしまう
ので、注意が必要だ。

電圧維持のための方法を以下説明する。

変電所の送出電圧をピーク負荷時には、大きくし、
深夜などあまり需要がないときは、小さくすると良い。

小さくする理由は、
需要があまり無いとき、フェランチ効果により、電圧が上昇するためである。

前回も説明したが、
電力コンデンサは、位相を進めるので、
位相が遅れている状況下にあるピーク負荷時に用いる。

分路リアクトルは、位相を遅らせるので、
位相が進んでいる状況下にある深夜(高圧負荷を接続し使用していない状態)のときに使う。

いずれも並列接続にする。

他にも、同期調相機や、静止型無効電力補償装置などがある。
同期調相機は、界磁電流を加減することにより、進みにも遅れにも調整できる機械である。
静止型無効電力補償装置は、半導体スイッチによってリアクトルの電流を調整することによって無効電流を高速制御できる。


Consideration.

考察では、分路リアクトルと限流リアクトルの違い・フェランチ効果について考える。

分路リアクトル

別名並列リアクトル。
並列にリアクトルを接続することにより、
進相電流の補償および、過電圧の抑制のために使われる。

限流リアクトル

別名直列リアクトル。
直列にリアクトルを接続することにより、
電流を制限する。
 I = \frac{V}{R} より、
抵抗値が大きくなれば、電流は小さくなる。

このような違いがある。

フェランチ効果

フェランチ効果は、亘長が長いときに対地静電容量が発生し、生み出される現象である。
静電容量によって、コイルのよって遅れていた電流が進み位相となるので、
リアクトルを接続する。

変電設備 34th-day

Commentary.

変電所とは、様々な変圧器によって電力を変成し、他の場所へ伝送する仕組みのことをいう。
一般に変電所は、高圧側の電圧によっていくつかに分類される。

500kV変電所

500kV → 275〜154kV

超高圧変電所

275〜187kV → 154〜66kV

一次変電所

154〜110kV → 77〜22kV

二次変電所

77〜66kV → 33〜22kV

配電用変電所

配電電圧に高圧

通常の力率は70%程度であり、
重負荷の場合は、大きな遅れ電流を生じる。
そのため、進みを取らせるために電力用コンデンサを用いる。
軽負荷の場合は、フェランチ効果により送電端電圧より受電端電圧が高くなり、
進み電流をとるので、遅らせるために分路リアクトルを用いる。


Consideration.

変圧は、大まかに、
500kV → 200kV → 100kV → 50kV → 30kV → 配電電圧
へと順に変換される。
コンデンサは、電流は電圧よりも90°進み、
リアクトルは、電流は電圧よりも90°遅れる
ことを念頭に、
重負荷では、遅れる傾向にあるので、進ませ、
軽負荷では、フェランチ効果により進む傾向にあるので、遅らせると考えることができる。

How to Reset Reverting from Git

This article is about git.
I want to reset the reverting state instead of direct using directry.

How to revert

How to revert is typing the following command.

git revert [commitID]


How to get commit-ID

How to get commit-ID is typing the following command.

git rev-parse HEAD~{n}


A remedy of how to revert

I show a remedy of how to revert.

git revert `git rev-parse HEAD`

How to reset the reverting state

How to reset the reverting state is typing the following command.

git reset --hard `git rev-parse HEAD~1`

That's all.

タービン発電機と付属設備 33th-day

Commentary.

火力発電におけるタービンは、水力発電の水車と違い、
主に大容量で、高速、横軸型が多い。

The turbine in a thermal power generation is a type of cross axle.
And it has more high-capacity and high-speed than a hydroelectric power generation.



冷却方式は、
小容量の場合、間接冷却方式、
大容量の場合、直接冷却方式
となる場合が多い。

The cooling system tends to indirect system in case of small capacity and direct system in case of high capacity.



間接冷却方式(Indirect Cooling System)とは、発生熱量を絶縁物を介して、取り出す方式であり、
直接冷却方式(Direct Cooling System)とは、内部に直接冷却媒体を通して、取り出す方法である。
取り出した熱量は、空気冷却・水素冷却・液体冷却で冷却する。

水素冷却方式は、空気冷却方式と比較して、

  • 水素は比重が小さい→風損減少
  • 完全密閉→騒音減少
  • 化学反応が起きにくい→絶縁物劣化減少
  • 比熱大
  • 漏れ防止のため密封油装置

次に、発電機の保護についてである。
一般的によく使われるのが、閉鎖型母線の相分離母線方式である。
各相を分離し、それぞれを接地する。
このとき、接地する金属はアルミニウムである場合が多い。
この方法を採用する理由として、
誘起した渦電流による電磁遮蔽効果により短絡時の大電磁力に耐える
ことが挙げられる。


Consideration.

小容量なら間接的でも取り出せる、
大容量なら直接的でないと取り出せない。

水素と空気の冷却方式の比較については、
水素の性質をよく理解することが大切である。
水素は、比重が小さい・比熱大きい・化学反応起きにくいなどの特性がある。

発電機の短絡時の大電流対策は、
電流を小さくしようとするのではなく、
電流が多く流れることによる電磁力の増加を抑えている点に注目したい。


今後は、電気主任技術者勉強に加え、英語を勉強していきたいため、
文章を英訳していこうと思います(気まぐれ)。
間違った文法・こうしたほうがよいと思う点があれば、ぜひ教えてください。