Memorandums?

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

TeXあれこれ

目次にsubsubsectionまで表示させたい!

\setcounter{tocdepth}{4}

sectionの章番号は表示させたくないけど、目次には表示させたい!

\subsection*{hogehoge}
\setcounter{subsection}{1}
\addcontentsline{toc}{subsection}{hogehoge}

subsection名とaddcontentslineの第3引数に与える文字列は同じにしてください。
setcounterのsubsectionを1にするのは、しなくてもOKです。

表をその場所に表示させる!(後の文章に回り込ませない)

\begin{table}[htbp] % 浮動

では、スペースが開いている、かつ、表がそこには表示できない場合に、
後の文章が回りこんでしまいます。
そんなときに!

\usepackage{here}

\begin{table}[H]

\end{table}

ページ番号を付けない!

\pagestyle{empty}

目次などに使えます。

表の行を結合するときに偶数行の場合、真ん中に表示させたい!

奇数行で真ん中に表示させたいなら、
書きたくないマスは空文字(何も書かない)で、

\cline{n-m}

で横棒を引きたい所にひけば、できます。が、、、!
奇数行の時に真ん中に表示はこの方式ではできませんよね。そこで、、、!

\usepackage{multirow}

\multirow{2}{*}{hogehoge}

と最初の行で記述し、後は、空文字にすればOKです。
multirowの第1引数は、まとめる行数です。
第2引数はよくわかりません(教えてください

図表番号取得

図表内で

\label{tb:hoge}

tbとはtableのことで表を意味します。
そして、表番号を使いたいところで、

\ref{tb:hoge}

とすれば取得できます。

「表1」などの書式を変えたい!

これに関しては、プリアンブルに関することになりますが、
本文中にも記述できます。

\def\thesection{第1節}

javaの疑問を解消しよう part1

問題。

public class C {
	public static void main(String[] args) {
		new B(new A());
	}
}

class B {
	B(C c) {
	}
}

class A extends C {
}

このソースコードは正しいですか?



答え。

正しいです。(もちろんこのソースコードに意味はありません)
Cクラスでは、メインメソッドで、Bクラスのインスタンスを作成しています。
Bクラスのコンストラクタでは、第一引数にCのインスタンスを与えなくてはならないと定義しています。
それなのに、CクラスでのBクラスのインスタンス生成時に、
引数として、Aのインスタンスを渡してしまっています。

これは一見間違いだと思いがちなのですが、
Aクラスのコードを見てください。
Aクラスは、Cクラスを継承しています。
継承しているということは、Cクラスの機能を包括しているということなので、
Aクラスは、Cクラスの代用もできる、
ということになります。

したがって、引数として、Aクラスのインスタンスを渡しても、
それは正しいということになるのです。

太陽光発電 39th-day

Commentary.

太陽光発電(Photo Voltaic)の特徴をまとめる。長年にわたって蓄積された資源を使う必要がなく、クリーンである。

Consideration.

太陽光発電分野は、既存の知識範囲のみで大丈夫かもしれません。
あえて覚えるなら、発電効率10%〜20%程度であるということ。

原子力発電原子炉 38th-day

Commentary.

軽水炉の水の役割は、冷却材と減速材の2つである。
出力が上がり、水の温度が上昇すると、水の密度が減少し、
中性子の減速効果も減少、それに伴い、核分裂する中性子も減少し、
核分裂は抑制される。
抑制されると、水の温度は低下する。
この自己制御性を利用している。

原子力発電には、加圧水型(Pressurized Water Reactor)と沸騰水型(Boiling Water Reactor)の
2種類がある。
加圧水型は、冷却材を沸騰させずに蒸気発生器を介してタービンへ伝達する。
このため、放射線は漏れず、保守管理は楽になるが、構成は複雑になる。
出力の調整は、ホウ素濃度や制御棒の抜き差しによっておこなう。

沸騰水型は、冷却材を沸騰させて、そのままタービンへ送る方式である。
これは、放射線が漏れてしまうため、タービン部分を遮蔽する必要がある。
このため、保守管理は難しいが、構成は単純である。
出力の調整は、再循環流量の調整か制御棒の抜き差しでおこなう。
炉心上部に汽水分離器や蒸気乾燥器があるため、出力容器は、加圧水型よりも大きくなる。

つまり、PWR, BWRの大きな相違点は、蒸気発生器があるかないかである。

制御棒での調整について、
制御棒を挿入すると、出力は低下する。
制御棒を抜くと、出力は増加する。

Consideration.

沸騰水型は、加圧水型に比べて蒸気発生器はないが、
蒸気乾燥器や汽水分離器があるため、大きさは大きくなる。

制御棒は入れると低下、抜くと増加する点に注意が必要である。
これは、制御棒とは、中性子を吸収させる役割があるためである。
中性子が吸収されれば、出力も低下する。

以上の点に注意が必要だ。

原子力発電の計算 37th-day

Question.

熱効率32%の原子力発電において、
 {}^{235}U1gで、質量欠損が0.09%であったとき、
発生電力量[kWh]はいくらか。

Solver.

原子力発電では、核分裂反応の質量欠損分がエネルギーとなる。
この問題を解くために重要なのは、エネルギーの公式である。
 E = mc^2
まずは、質量を求める。
 m = 1 \times 10^{-3} \times 0.09 \times 10^{-2} = 9 \times 10^{-7} [kg]
cは光速であり、 3 \times 10^{8}[m/s]である。
よって、
 E = mc^2 = 9 \times 10^{-5} \times 9 \times 10^{16} = 8.1 \times 10^{10}[J]
 1kWh = 1000 \times 3600 Ws = 3.6 \times 10^6J
なので、
 \frac{8.1 \times 10^{10}}{3.6 \times 10^6} = 7200kWh
となる。


Consideration.

今回は、原子力発電量の計算問題である。
 E = mc^2さえ覚えれば、問題はない。

原子力発電概論 36th-day

Commentary.

日本の原子力発電所は、主に軽水型である。
軽水型原子力発電所の燃料には、低濃縮ウランが用いられる。
原子力発電に使われるウラン235は、天然ウランに0.7%程度しか含まれていない。
よって、これをガス拡散法や遠心分離法などによって濃縮する。
核分裂反応が起きにくいウラン238は、中性子と反応することによって、プルトニウム239に変化し、
その際に発生した、エネルギーが発電に寄与することもある。

核分裂とは、以下の化学式によるものである。
 {}^{235}_{92}H + {}^1_0n \rightarrow A + B + 2.5 {}^1_0n + Energy
原子核中性子を入射すると2種類の原子核に分裂し、
質量欠損分の200MeV(エレクトロンボルト)のエネルギーが発生する現象である。

原子力発電は、発電方式では、汽力発電に似ている。

原子力発電 火力発電
原子炉 ボイラ
原子燃料 化石燃料

原子燃料とは、主に核分裂反応が起きやすいウラン235であるが、
天然では、99%以上が反応が起きにくいウラン238である。


Consideration.

しばらく電験ブログを更新できませんでした。。
試験まで残された時間は短いので、もっとペースをあげていこうと思います!
ただ、ブログに上げるのは、少し遅れるかもしれません。

今日からは、少しの間、原子力発電のはなしです。
軽水型原子力発電は「軽」い水を使うから「低」濃縮ウランを使う。
ウラン238 + 中性子プルトニウム239 + エネルギー
ウラン238も、この変化の際のエネルギーを利用することがある。

ウラン235や238などややこしい。。

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は任意のオブジェクトを扱えるわけではないので、
データは文字列型にしました。
文字列型を受け取ったのち、ローカル上解析メソッドで、要素をリスト形式で返す仕組みにしました。

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

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