突っ走り書き

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

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

Ubuntu 13.10 だと xmodmap が何か変

この投稿は Linux Advent Calender 19日目の記事です. キーボードの設定は xmodmap! Linuxの魅力は,設定のしやすさだと思っています.Windows ではレジストリを書き換えないといけないような設定でも,Linux ならテキストファイルを使って管理できることが…

【Jeff Bay】オブジェクト指向エクササイズ

Jeff Bay は The ThoughtWorks Anthology の中で,オブジェクト指向エクササイズ(Object Calisthenics)を提案しています.このエクササイズでは,次の9つのルールを守らなければいけません. メソッドのインデントは1つまで else句を使わない すべてのプリミ…

アサートファーストでテスト駆動開発

このエントリは Advent Calendar 2013 4日目の記事です.前日のエントリーは,comuttさんのvim + py.test で TDDでした. アサートファースト このエントリでは「テストコードの書き方」,特に, テストコードの中身をどの順番で書き進めるか についてまとめ…

デフォルトコンストラクタではすべてのフィールドを引数として受け取るべき

Java & オーバーロード & コンストラクタ Javaでは,オーバーロードによって複数のコンストラクタを定義できます.例えば,Personの集合を表すPeopleクラスには,次のコンストラクタがあります. public People { private Set<Person> people; public People() { thi</person>…

クエリメソッドのための Any オブジェクトパターン

SetやListなどのコレクションを全く使わないプログラミングはほとんど有り得ません.コレクションを使うとなれば,その中から特定の条件を満たすオブジェクトを抽出するメソッドが必要になることがあります.このエントリでは,コレクションに対するクエリメ…

オブジェクトの情報は getter から流出する

情報を隠蔽せよ public Book { private String title; private int price; public Book(String title, int price) { this.title = title; this.price = price; } public String getTitle() { return name; } public int getPrice() { return price; } } オブ…

【Jeff Bay】オブジェクト指向エクササイズがキツすぎて

Jeff Bay は ThoughtWorks Anthology の中で,オブジェクト指向エクササイズを提案しています.エクササイズでは,9つのルールを守らなければいけません.それぞれのルールの解説は他の方にお任せするとして,実際にやってみてどうしても両立できなかったル…

テスト駆動開発のルールは2つだけ

TDD

普段からTDDでコーディングされている方にとっては当然のことだと思いますが,自分への確認と戒めの意味でまとめてみました.TDDでコードを書き出す理由は2つだけです. 1: リファクタリングのため 「グリーン」だけど「スパゲッティな」コードを改善する場…

リファクタリングのために getter を private にしてみれば?

オブジェクト指向言語の参考書では フィールドを private に フィールドの取得は getter を使って が基本のように書いていることが多いように思います.でも,その getter は本当に必要ですか?もしかしたら getter がクラス間の関係を複雑にしているかもしれ…

sed のまとめ

sed

行を消す # 3行目を消す $ sed -e '3d' input.txt -e は "expression" の略 処理の内容が1つのときは -e は省略できる 上書きとバックアップ # input.txt に処理内容を上書き $ sed -i '3d' input.txt # input.txt.org という名前でバックアップをとる $ sed…

自ホストのIPアドレスを取得する

sh

LANG=C ifconfig eth0 | grep "inet addr" | awk '{ print $2; }' | cut -d: f2

グループ関連まとめ

グループについての設定ファイル /etc/group が設定ファイル. $ cat /etc/group | grep your your:x:1000: # グループ名:グループパスワード:GID:グループメンバ グループパスワードはシャドウパスワードを使うのが普通なので x と表示される. グループメ…

Applying UML and Patterns Chapter 1 まとめ

オブジェクト指向開発で重要なこと 責任の割り当て (responsibility assignment) オブジェクト指向分析 (OOA) プログラミングによって解決したい問題の概念を説明すること オブジェクト指向設計 (OOD) OOAで見つけた概念をソフトウェア上のオブジェクトとし…

Applying UML and Patterns を買った

少しずつ読んでいこうと思う.買った後に知ったけど,ファウラーさんが激押ししてた. "People often ask me which is the best book to introduce them to the world of OO design.Ever since I came across it, Applying UML and Patters has been my unre…

インデックスへの登録

Git

# add コマンドの実行結果を確認する # インデックスには追加されない $ git add -n * $ git add --dry-run * # インデックスへの追加 $ git add main.tex # インデックスから削除 $ git reset main.tex

Setsを使って初期化

// 今まではこれで初期化してました Set<Integer> s = new HashSet<>(Arrays.asList(1, 2)); // Guava を使えば,少しだけ短くなります Set<Integer> s = Sets.newHashSet(1, 2); // 空集合の初期化はCollectionsを使うほうが好き // 意図が伝わる気がするので. Set<Integer> s = Colle</integer></integer></integer>…

MySQLの復習@11日目

CSVファイルから読み込み load data ifile '[file]' into table [tab] [options]; オプションに指定できるのは下の3つ. option defalut 意味 fields terminamted by '\t' 区切り文字 lines terminamted by '\n' 改行文字 ignore [n] lines 0 スキップする行…

MySQLの復習@10日目

ストレージエンジン関連のコマンド MySQLでデータは以下のいずれかのストレージエンジンによって管理されている. MyISAM InnoDB(デフォルト) ISAM MEMORY MERGE # ストレージエンジンの確認 show create table [tab]; # 見やすく表示(Gは大文字で) show…

Eclipseのセットアップ

Eclipse Market Place から m2e をインストール Mavenを使えるようにする キーバインドをEmacs風に 作業対象URL: http://www.mulgasoft.com/emacsplus/update-site若干キーバインドをいじる Command binding When Category Delete Previous C-h Editing Text…

MySQLの復習@9日目

ストアドプロシージャの作成と実行 # デリミタを ; から // に変更 delimiter // # プロシージャ定義 create procedure [proc] begin ... end // # デリミタを ; に戻す delimiter ; # 呼び出し call [proc]; # 引数ありのプロシージャ定義 create procedure…

MySQLの復習@8日目

ビュー # ビューの作成 create view [view] as select...; # ビューの更新 update [view] set [col] = [new value] where ...; # ビューの確認 # テーブルへの操作と同じやり方で確認できる. show tables; desc [view]; show create view [view]; ビューと…

MySQLの復習@7日目

複数のテーブルから抽出 (select [col] from [tab1]) union (select [col] from [tab2]); # 3つ以上の union も可能 (select [col] from [tab1]) union (select [col] from [tab2]) union (select [col] from [tab3]); # 条件付き抽出 (select [col] from [t…

MySQLの復習@6日目

あるカラムのデータをまとめて変更 # 全てのレコードを変更 update tb set [col] = [value]; # 条件に合致するレコードのみ変更 udpate tb set [col] = [value] where ...; # ちょっとした応用 # 成績の良い10人に「成績上位者」と表示 update tb set memo =…

MySQLの復習@5日目

グルーピングしてフィルタリング グループ化した値についてのフィルタリングは having を使う. select name, sum(point) from tb group by name having avg(point) >= 60; フィルタリングしてグルーピング where でレコードのフィルタリング,そのあとでグ…

MySQLの復習@4日目

select文の小技 # カラムの入れ替え SELECT [col]... FROM [tab]; # エイリアス SELECT [col] as [alias]... FROM [tab]; # 四則演算 SELECT [col][+-*/][n]... FROM [tab]; # 平均,合計,個数 SELECT AVG([col]) FROM [tab]; SELECT SUM([col]) FROM [tab]…

MySQLの復習@3日目

テーブルの複製 テーブルのカラム構造とデータを複製 CREATE TABLE [dst-tab] SELECT * FROM [src-tab]; 属性が変更されることがあるので,DESCコマンドで確認する癖をつける. テーブルのカラム構造を複製 CREATE TABLE [dst-tab] LIKE [src-tab]; テーブル…

MySQLの復習@2日目

カラムの変更 カラムのデータ型を変更 カラムの順番を変えるときも ALTER TABLE コマンドを使う. ALTER TABLE [tab] MODIFY [col] [dtype]; カラムを追加 # 末尾に追加 ALTER TABLE [tab] ADD [col] [dtype]; # 先頭に追加 ALTER TABLE [tab] ADD [col] [dt…

【Emacs】query-replace をもう一度

ふと思い立ってEmacsの置換について復習したら、色々と発見があったので。 クエリ置換の実行方法 素直に実行 M-% クエリ置換に入る C-u M-% 単語単位のクエリ置換に入る 単語単位の置換では,large を small にする置換のとき "very large" は "very small" …

MySQLの復習@1日目

インストール $ sudo apt-get install mysql-server 文字化け対策 やっぱりlinuxの恒例行事は避けて通れないようで,文字コードを utf8 で統一する. $ cd /etc/mysql # my.cnf の [mysqld] セクションに以下を追加 # character-set-server = utf8 # skip-ch…

【Scala】Listで要素の並びを無視した比較をする

(第1版)griupByを使う ある要素がリストにいくつ含まれているかを数えたMapを作って比較してる。 scala> def toGroupMap(l: List[String]): Map[String, Int] = | l.groupBy{ identity }.map{ case (k, v) => (k, v.size) } toGroupMap: (l: List[String])…