はてなアカウント引っ越し計画

はてなアカウント引っ越ししようと思います。引っ越し先のブログ(下記URL)を更新したので、お知らせです。 http://d.hatena.ne.jp/jote/20100908/1283963804しばらくはこのままですが、いずれこのブログは削除します。 ご迷惑をおかけします。

Ruby3 ユニットテストのレビュー

Ruby3は読んでいて、ストーリーがしっかりしているから面白い。 この項目の流れも面白かった。 四則演算の簡単なプログラムを書いて、それをテストしていくお話。テストは始め自作する。すると、同じようなメソッドを何回も書くことになり、前章で勉強したフ…

ユニットテストの勉強

Ruby3 第6章を読んでみたので、覚書。 ユニットテスト プログラムを開発するためのツール ユニットテストプログラムと対象プログラム2つの作成・実行 オブジェクト指向の場合、1つのクラスの個々メソッドを対象にする 開発したプログラムの単体機能検証 ある…

簡単なwebサーバをプログラムで書いてみた

「ruby3 5章1 簡単なWebサーバーのプログラミング」を読んだのでレビュー 目次 ソケットの利用 HTTPリクエストの内容 HTTPレスポンスの内容 Webサーバの仕組み ソケットの利用 ソケットの説明が書いてある章。 Rubyでソケットを利用する場合はソケットクラス…

shiftの罠

Array#shiftメソッドの仕様を気にせずに使っていたので、ハマった事を書きます。配列をshiftしていって、空配列になった時。配列aは全ての要素が取り出された時、a = nilになると思っていました。 しかし、shiftは配列の要素を取り出すメソッドなので配列自…

ブロック付きメソッドとyield制御構造

ブロック引数について書いた記事があったのですが、間違ってたのでその記事は消しました。 ごめんなさい。まずは、ブロックについて、勉強やり直します。 ブロック doからend 又は、{} で囲われた一連の式 class Each_test def initialize(a) @myarr = a end…

テンプレートメソッドパターン

基底クラス 共通の処理を実装する 派生クラス独自の処理をからのメソッドとして定義しておく 派生クラス 基底クラスの空メソッドをオーバーライドする ※上記2つのメソッドはprivateをかけて、外部に公開しないようにする

メソッドのアクセス制御

メソッドのアクセス制御を行う理由は、公開するオブジェクトを限定しカプセル化を堅牢にするため。アクセス制御することで以下の効果がある。 公開するメソッドを複数のメソッドから構成した時、呼び出し側が知らなくても呼び出し手順やオブジェクトの事前準…

論理回路メモ

or回路 全ての入力が0なら0、それ以外は1 And回路 全ての入力が1なら1、それ以外は0 Xor回路 入力の1の数が奇数なら1、それ以外0

基底クラスを指定しない場合Objectクラスを指定する

継承する時は、"class 派生クラス が、基底クラスを指定しない場合でも継承が行なわれている。指定しなかった場合はObjectクラスが指定されている。イメージは class Book (< Object) def initialize(author, title, genre) @author = author @title = title…

オブジェクトの見直し。

クラスを書くことが、とっっっても難しいです。 自分の場合、何故書けないのか分析してみた。 オブジェクトがどんなものかにこだわり過ぎて、オブジェクトの使い方がわかりませんでした。言いかえると、コードで書いた時に、オブジェクトとメソッドの書き方…

RubyのtrueとTRUE

a = TRUE 意識せずに大文字でTRUEと書いてました。人に言われて気づいたのですが、これは非推奨だから使わないほうがいい。リファレンス調べると「この定数(Kernel::TRUE)は過去との互換性のために提供されています。」とあるので、動くことは動くので要注意…

umaskについて

umaskを教えていただいたので、メモ | user | group | othre | | rwx | rwx | rwx | | 111 | 111 | 111 | | 7 | 7 | 7 |(dirのデフォルト) | 6 | 6 | 6 |(fileのデフォルト)umaskを設定するとデフォルトから、指定した権限を抜くことになる。 umask 002 | us…

ポリモーフィズム

1 # encoding:cp932$ 2 $ 3 ["文字列", 1234567, Dir.open("."), :symbol, [1, 2, 3, 4, 5], {"1" => 1, "2" => 2}].each() do |e|$ 4 puts("#{e}")$ 5 puts(e.to_s())$ 6 end$ 4行目の#{}と5行目のto_s()を比較する。 to_s()はObjectクラスで定義されていて…

Benchmark::Report.#reportとBenchmark.#measure

Benchmark::Repot.#reportのコード require 'benchmark' puts Benchmark::CAPTION puts Benchmark.measure { "a"*1_000_000 } => user system total real 1.166667 0.050000 1.216667 ( 0.571355) Benchmark.#measureのコード require 'benchmark' n = 50000…

カプセル化されたオブジェクト

プレーヤーとコンピューターで3回勝負のじゃんけんをします。その時の処理を言葉で書くと以下の考え方になります。 プレーヤの勝数が3以上であれば「プレーヤーの勝利」と表示、コンピュータの勝数が3以上であれば「コンピュータの勝利」と表示する これを、…

classについて

classには以下の役割がある。 + オブジェクトが持つデータの情報を変数・定数にまとめる + オブジェクトが持つ手続きをメソッドにまとめる + インスタンスを作成するためのnewクラスメソッドの提供 クラスを定義することで、抽象的な概念を分類し名前を付け…

sortのブロックを使う素晴らしさ

sort関数では、引数にブロックを使います。なんでかと言うと、様々な順序で並び変えができるようにするためです。 例えばsort関数を使わないで自作でクイックソートの関数を作ります。以下はその一部分です。 def partitioning(data, pivot, left, right) wh…

ってなんじゃ

Rubyのインスタンスメソッドにというメソッドがあります。見た時なんじゃコレとか思った。 self と other を ASCII コード順で比較して、 self が大きい時には正の整数、等しい時には 0、小さい時には負の整数を返します。 レシーバはstringからファイルの更…

2分探索プログラム

2分探索のアルゴリズム もし、探索開始よりも探索終了点の方が前にあった場合、探索失敗 探索領域の中間点のデータを調べる 中間データが探索データそのもの:探索成功 中間データが探索データより小さい:中間点より右側(中間点+1)を新たな探索開始点として…

Rubyでクイックソート

最近、「van勉だぃありぃ〜読んでるよ」とか言われるから、なんか書くの恥ずかしくなった。 クイックソートをするメソッド書きました。 def qsort(data, left, right) return if left >= right # 位置から文字の長さを判別 pivot = data[(left + right) / 2]…

状態遷移

状態遷移を使って簡単な(適当な)言語を進めるプログラム書きました。 # encoding: cp932 STATE_TRANSITION_TABLE = { "Q1" => ["Q1","Q2","Q3"], "Q2" => ["Q2","A1","Q4"], "Q3" => ["Q3","Q4","Q5"], "Q4" => ["Q4","A2","Q6"], "Q5" => ["Q5","Q6","A4"…

hashの格納順番

ハッシュ表を作る際、配列を使って実装した。 HASH_SIZE = 11 TABLE = Array.new(HASH_SIZE) def set(key,val) #ハッシュをして、ハッシュ表にデータを格納 end set("hello","world") set("今日は","赤ちゃん") set("竹やぶ","焼けた") set("テレビ","ラジオ…

ensure使い慣れん

例外処理でbeginとrescueを使っていたのですが、ensureを使いなれてないことがわかりました。ensureは例外の有無にかかわらずbegin式の最後に記述する処理を実行するもの。今回は暗号処理をしたものには必ずresetメソッドを呼び出すために使いました。 def e…

Rubyとコンパイル

コンパイルについて会話中に出てきたので、おさらいしてみた。Ruby1.8はインタープリタ方式で構文木が生成された時点で実行。コンパイルはない。 javaの場合、構文木生成後にコンパイル(バイトコードを生成)して実行プログラムを生成するコンパイラ方式。…

$stdin.gets()

gets() コマンドラインでファイルを引数とすると、gets()では指定したファイルの内容を一行読み込む。これを避けるために$stdin.gets()を使用する

暗号化と複合化

ライブラリopensslを使ってファイルを暗号化・複合化するプログラムを書きました。 暗号化 enc = OpenSSL::Cipher::AES256.new("CBC") enc.encrypt() enc.pkcs5_keyivgen(pass) File.open(file, "rb") do |fin| File.open("#{file}.sec", "wb") do |fout| wh…

暗号

データを特定のサイズを持ったブロック単位に分割し、パスワード(キー)を元にしたデータを適用して暗号文を求める。複数のブロックを扱う手法があり、CBCやECB等のモードがある。 CBCモードの場合 IVと最初のブロックの排他論理和をとり、キーと一緒に暗号化…

LINK_MAXとサブディレクトリの関係

LINK_MAX 1ファイルあたりの最大リンク数 ハードリンクとは データとそのデータに付けた名前を繋げるもの linuxの場合、inodeに名前を付けて繋げること / |- test |- test1/ |- test2 drwxr-xr-x 3 root root 4096 10月 7 15:06 . drwxr-xr-x 28 root root 4…

"$0 == __FILE__"やshift() について

$0 Rubyコマンドのコマンドライン引数で指定されたファイル名を格納した特殊変数 __FILE__ 実行中のスクリプトファイルのファイル名を格納する特殊変数 if $0 == __FILE__の条件式を用いた場合、実行中のプログラムがコマンドライン引数で指定された時に真に…