突っ走り書き

見せるほどのものでは..

2014-01-01から1年間の記事一覧

システムにはトップが存在しない

「オブジェクト指向入門 第2版 原則・コンセプト」より 機能を中心としたモジュール化が変化に弱いシステムを生み出してしまうことの考察. モジュール化のためのアプローチ ソフトウェアを作るときのモジュール化には2つの考え方がある. 機能を中心にモジ…

TeX で章を移動するための emacs lisp

\chapter,\section,\subsection,\subsubsection を検索して移動するためのコマンドを作った. (defun next-setion () "Move to next section." (interactive) (end-of-line) (re-search-forward "^[ \t]*\\\\\\(sub\\)?\\(sub\\)?section\\*?{.*}")) (def…

peco を使って快適なブランチの切り替え

peco にはまりつつあるので,勢いに任せていろんなコマンドを作っているところです. git でブランチを移動するときは, git branch でブランチを探す git checkout でブランチを切り替え のように2つのコマンドを使うことが多いと思います. git branch bra…

抽象データ型の目的

この方法では,プログラムはデータの物理実装ではなく,外的属性によってアクセスする. オブジェクト指向入門 第2版 原則・コンセプト p.23 考察 具体的な存在である実装は隠蔽する 抽象的な存在である属性のみを公開する 属性を公開するときには適切な抽象…

zsh と peco でヒストリ補完

ここを参考に,流行りの peco を使って zsh のヒストリからコマンドを検索する関数を作ったので,そのメモ. 次の内容を .zshrc に追加すれば,インクリメンタルなヒストリ補完ができる. # シェル関数を定義する function run-command-with-peco() { # コマ…

3-way ハンドシェイク

3-way ハンドシェイクは TCP 通信でコネクションを確立するための手続き. 手順 1つのコネクションを確立するために3つのパケットがやり取りされる. クライアント側から SYN サーバー側から ACK + SYN クライアント側から ACK SYN/ACK は TCP ヘッダの制御…

emacsclient を使う

ターミナル上で作業しているて,急に emacs でファイルを編集したくなったとき, ターミナルで作業中に a.txt を編集したくなった ターミナルから emacs に移動 a.txt を探して編集 という流れだと,ファイルを探すのが面倒. このイライラは,emacsclient …

再帰の考え方

最近,再帰の関数を書く機会がおおいのでまとめておく. 再帰には,次の2つが必要. 基底部:問題が解き終わったらどうするか? 再帰部:問題のうち,小さな部分を解決する 例えば,整数のリストの合計を再帰で求めるときは, private static int head(List<Integer> </integer>…

git commit の v オプション

git で commit するとき,差分を見ながらコミットメッセージを書ければ便利. コミットメッセージを書くときに差分がエディタに書きだされるようにするには, v オプションをつける. git commmit -v これを .gitignore にエイリアスとして登録する [alias] …

例外処理

いまいちよくわからない,エラー処理について. エラー処理の検出は低いレベルで,その処理は高いレベルで プログラミング作法,p.159 例えば Java なら,ファイルが存在しないとき FileNotFoundException が発生するけれど,その処理は発生箇所より高レイヤ…

概念と仕様と実装

「ーデザインパターンとともに学ぶーオブジェクト指向のこころ」より クラス設計では,次の3つの観点が必要. 概念:(現実世界)共通なもの 仕様:概念的に似通ったオブジェクト郡との通信手段 実装:(プログラム)個々で異なるもの 急いでプログラミング…

シェルスクリプトのコマンド存在チェックは文字列化が必要

sh

第1稿: コマンドの存在チェック あるコマンドが存在するとき exit するスクリプトを次のように書いた. if which $CMD ; then echo "$CMD already exists." exit 0 fi 第2稿: 実行可能チェックを追加(バグ入り) 第1稿のスクリプトでは, コマンドへのパス…

メソッドのはじめでは特異な入力に対応する

メソッドのはじめでできるだけ問題を小さくするといいっていう話です.問題が与えられたとき,その問題が小さいほど処理は簡潔になります. public void print(Object o) { if ( o == null ) { throw new IllegalArgumentException("null"); } System.out.pr…

シェルスクリプトから設定ファイルを読み込むときは . を使う

sh

別ファイルに書いた変数定義は . (ドット)コマンドで読み込めるって話.NAS をマウントするための自作スクリプト punch.sh を作ってます.その中で,設定ファイル punch.conf を読み込むときに,load という関数を使って grep と cut で変数定義を切り出し…

List と Set の使い分けは 『順序の有無』と『検索の有無』

List と Set の使い分けの話.Java の List と Set の概念的な違いは「順序があるかどうか」です. List:順序を考慮するオブジェクトの集まり Set:順序を考慮しないオブジェクトの集まり これまで,順序の有無だけで List と Set を選択していたんですが,…

畳み込まずに Stream#flatMap を使う

Java8 の Stream 型に,flatMap ってメソッドがあることを知った.reduce(畳み込み)の代わりに使える. reduce Set<Person> byReduce = teams.stream() .map ( team -> team.listMember() ) .reduce( Collections.emptySet(), (a, b) -> Sets.union(a, b) ); flatM</person>…

Kent Beck「テスト駆動開発入門」を読んだ

TDD

Kent Beckのテスト駆動開発入門の読んだので,途中までのメモ. TDDの目的 = 『動作するきれいなコード』 TDDを用いたプログラミングでは, 動作するコード きれいなコード を目指す. TDDの手順 レッド: コケるテストを書く グリーン: とにかく速くテスト…

Get & Put戦略

Javaにおいてパラメータ化された型は不変です.例えば,List<Integer> は List<Object> の下位型ではありません.このような「不変」であるという性質は,ソフトウェアの柔軟性を損なう原因になり得ます.Javaでは,この問題点を解決するため 上限境界ワイルドカード 下限境</object></integer>…

つまるところ,デザインパターンは

OOP

デザインパターンは,変化に強いコードを書くための戦略を集めたカタログです.カタログであるが故に,自分の欲しいものが必ずしも見つかるとは限りません.よって,「どのデザインパターンを使おうかなぁ」から始まるコーディングは不適切なやり方と言えま…

Arrays.asList の戻り値は ArrayList でも LinkedList でもない

Java の Arrays は,配列のためのユーティリティクラスです.痒いところに手が届く関数がたくさんあるので思いのほか使えます.その中で特に重宝してるのが Arrays.asList です.これを使うとリストの生成と初期化をスタイリッシュに書くことができます. //…

ライブラリとフレームワークの違い

今日,次の文章を偶然目にしました. 制御の逆転の存在が、フレームワークとライブラリを決定的に違うものにしている。 ライブラリとは、基本的に呼び出し可能な関数の集まりである。最近では、通常はクラスの集まりとして構成されている。 関数を呼び出すと…

オブジェクト指向設計の原則まとめ

OOP

オブジェクト指向設計の原則をソラで言ってみる - diary の答え合わせ. 単一責任の原則(SRP: Simple Responsibility Principle) クラスを変更する理由は1つ以上存在してはならない. オープン・クローズドの原則(OCP: Open Closed Principle) ソフトウェア…

オブジェクト指向設計の原則をソラで言ってみる

OOP

単一責任の原則(SRP: Simple Responsibility Principle) 1つのクラスは1つの責任を全うしなければいけない. インターフェース分離の原則(ISP: Interface Separated Principle) インターフェースは,クライアントが必要としないメソッドを実装する責任を実装…

もう「親クラス」「子クラス」と呼ぶのは終わりにしよう

オブジェクト指向プログラミングでは,継承によって関連をもつクラスを次のように呼びます. スーパー/サブクラス 基底/派生クラス 親/子クラス このエントリでは, 「親クラス」「子クラス」という呼び名は不適切なのでは? という意見とその理由についてま…

【暫定版】「オブジェクト指向とは何か?」

OOP

2012年の11月頃からJavaを勉強し始めたので,気付けば2年が過ぎてました.Javaを触ると避けて通れないのが,「オブジェクト指向」です.2年前に使えたのはC言語だけだったので, オブジェクト指向とは何か という疑問が生まれていろいろ調べるわけですが,し…