メソッドの実装方法

okn-yu.hatenablog.com

補足

上の以前書いた記事の中で1メソッド中のステップ数は10行未満が望ましいと記載した。
⇒これを実現するには1メソッド1機能という方針を貫徹する必要がある。
⇒そうすると必然的にメソッド名=機能名となるのでメソッド名から実装の推測も容易となる。
⇒その結果具体的な処理を実装するメソッド関連する具体的な複数処理を呼び出す抽象的なメソッドとなる。

感想

具体・抽象・命名規則...このあたりの概念はみなソフトウェアの実装においては絶対に避けては通れないのね!

Gitコマンドチートシート(merge)

リモートリポジトリにはマージ後にコミットしないとマージの反映がなされないことに注意!!

merge手順

  • マージ先のブランチにチェックアウト
  • マージ元のブランチを指定してマージ
【コマンド】
git checkout <マージ先ブランチ名>
git merge <マージ元ブランチ名>
【実行例】
$ git checkout master
$ git merge --no-ff dev

実行結果

トピックブランチdevのコミット履歴が統合ブランチmasterにマージされGitHubのネットワーク上では台形が表示されている。 f:id:okn-yu:20180428234928p:plain

mergeコミットの有無

mergeコマンド実行時のオプションによってmergeコミットの有無が異なる。fast-forwardの概念の理解が必須。

d.hatena.ne.jp

参照透過性と副作用

難しそうなんだけど参照透過性とか当たり前のようで実はそんなことなかったりする。
多分大多数の関数は参照透過性を満たしていない
関数でも疎結合を意識していれば自然と副作用も減るし参照透過性も強まるのではないだろうか?

参照透過性

関数が同じ入力値に対して常に同じ出力を返すこと。
参照透過性があれば並列処理や関数の呼び出し順序の変更が容易になる。
またデバックが簡単になるためテスト稼働が減ると思われる。
参照透過性の必要条件として副作用がないことが挙げられる。

副作用

関数が値を返す意外の全ての作用。
ファイルのオープンや変数の代入など。

Ubuntu16.04でvncserverの利用

前提条件は以下と同じ。 okn-yu.hatenablog.com

VNCサーバの設定

vnc4serverのインストール

sudo apt-get install vnc4server

~/.vnc/xstartupを以下のように編集

#!/bin/sh
def
export XKL_XMODMAP_DISABLE=1
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
 
gnome-panel &
gnome-settings-daemon &
metacity &
nautilus &
gnome-terminal &

vncサーバの起動

vnc4server

起動時に自動起動したい場合

下のサイトのcrontabを利用する方法を用いて、/etc/rc.localにvncserverコマンドを記載すればよい。

atomiyama.com

というか/etc/rc.localは単体では動かなくなったのか。こういう細かいバージョンによる環境差分でいつも引っかかってしまう。

GPU関連

グラフィックボード

  • 主にパソコンンのグラフィック処理を担当する拡張ボード。

GPU

  • グラフィック機能を制御するプロセッサ。
  • マザーボードにCPUが搭載されるように、グラフィックボードにGPUが搭載される。

統合型GPU

  • CPUにGPUコアがパッケージ化されている。
  • 性能は限定的だが消費電力や生産コストが低い。

外付けGPUボックス

  • USBケーブルやThunderBoldケーブル経由で、グラフィックボードの追加するスペースのないPC上でも、新規にGPUを追加可能。

インスタンス変数・カプセル化・グローバル変数

インスタンス変数とカプセル化

つまり適切にカプセル化されたインスタンス変数は、グローバル変数のメリットとモジュールの疎結合化という本来矛盾する要素の両立を実現する

では何をインスタンス変数にすべきか

一時的なデータをインスタンス変数に入れるとクラスの利用者が不便になるだけでなく、そのクラスに手を加えるときもインスタンス変数が「クラス内のグローバル変数」になってしまい、クラスが大きくなるにつれて保守性がどんどん低下します。

こういった一時的なデータはメソッドの引数と戻り値、またはローカル変数として受け渡す必要があります。

基本的にはクラス内でもメソッドには引数と戻り値でやりとりするという原則で一貫すべきなのか!

参考

qiita.com

解像度

ピクセル・画素数・解像度の違いがよくわかっていませんでした...。

ピクセル

  • 画像をデジタルデータで表すためには、画像を細かく分割して、その分割したものを1つの色で表示す。この分割した領域(面積)が画素。
  • 別の言い方ではコンピュータで画像を扱うときの色情報 の最小単位。
  • さらに別の言い方では画像の出力装置が表現できる最小単位。
  • 例えばディスプレイにおいて320×240ピクセルの画像を100%表示すれば320×240ドット。

素数

解像度

  • 素数の密度を表す数値。解像度が高いほど細やかで切れな表示が可能。解像度が低いとモザイクのような表示となる。主に印刷やカメラで用いられる。
  • 単位はdpi(dot per inch)。
  • 同じ画素数で解像度を上げると画像サイズが小さくなる

画面解像度

  • 慣用的にコンピュータ等のディスプレイに表示される総画素数 (こちらは同じ解像度でも総画素数)。
  • 解像度を上げてもモニターの表示領域は変わらないため解像度の向上=画素数の向上となる。
  • 同一サイズのモニターでは解像度が高いほど同一画像のサイズは小さい

画像処理

  • 同一の画像を縮小した後に最初と同じ大きさに拡大すると、原則的に間引いた画素数は戻らないので画像がぼやける。
  • 画像の縮小はできるが解像度を保ったまま画像の拡大はできない。
  • 印刷する場合は同一画像でも印刷物の解像度によりサイズが異なる。

参考

解像度と画素数のお話 display-sign-stand.com