Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

2013-08-01から1ヶ月間の記事一覧

Ruby | Arrayにindex取得をバイナリサーチで行うメソッドArray#bindexを追加する

概要 Arrayにindex取得をバイナリサーチで行うメソッドArray#bindexを追加する 詳細 Arrayにindex取得をバイナリサーチで行うメソッドArray#bindexを追加してみます。 仕様 前提 ・連続データであること(ソート済み) ・値を指定すると該当一致する要素のin…

HTML5 | Canvasで交差点を描く

概要 Canvasで交差点を描く 内容 CodeIQの結城先生の問題のクロッシング問題をやろうかな、 と思って気がついたら図を描画する方に手が動いていたという謎。 HTML5+canvasで実装しました。 ソース <html> <head> <script type="text/javascript"> function draw(list) { var canvas = document.getEleme</head></html>…

Ruby on Rails | backbone-railsのscaffoldでサンプルページの作成

概要 backbone-railsサンプルページの作成 詳細 backbone-railsサンプルページの作成をします。 自動生成 railsのscaffoldを実行 rails g scaffold Todo subject:string detail:string status_id:integer estimate:integer assignee:integer assigner:intege…

Ruby on Rails | backbone-rails導入

概要 backbone-rails導入 詳細 jsのMVCフレームワークbackbone-railsを導入します。 設定 Gemfileに下記を追加 gem "rails-backbone", "~> 0.9.10" Bundlerの実行 bundle backbone-railsをpublicにコピー rails g backbone:install ※ここでエラーが出る場合…

メタプログラミングRuby | 共有スコープ

概要 共有スコープ 内容 フラットスコープ内で複数のメソッドを定義することで 変数を共有出来る。 サンプル controller/application_controller.rb # encoding: utf-8 class Hoge hoge = 10 define_method :hage do hoge += 1 puts hoge end define_method …

Ruby on Rails | Rakeタスクに引数を渡す

概要 Rakeタスクに引数を渡す 内容 Rakeタスクに引数を渡します。 rake task_name[args1,args2] サンプル hoge.rake # encoding: utf-8 namespace :hoge do task :hage, ['hige', 'hege'] => :environment do |task, args| puts args.hige puts args.hege en…

メタプログラミングRuby | 文字列クラス

概要 文字列クラス 内容 クラス名文字列からクラスのインスタンスを取得します。 クラス名からクラスを取得する場合はObject.const_getを利用します。 サンプル # encoding: utf-8 class Hoge def hoge puts "hoge" end end hoge = Object.const_get("Hoge")…

Sublime Text2用Snippet生成ツールをGitHubに公開

Sublime Text2用Snippet生成ツールをGitHubに公開しました。 https://github.com/tbpgr/sublime_snippetter_old

メタプログラミングRuby | 魔術 | サンドボックス

概要 サンドボックス 内容 信頼出来ないコードを安全な環境で実行する。 特定の処理をセーフレベルを指定したproc内で実行することで 任意のセキュリティレベルで実行し、安全を確保することが出来ます。 サンプル # encoding: utf-8 require "pry" def leve…

メタプログラミングRuby | 魔術 | パターンディスパッチ

概要 パターンディスパッチ 内容 名前を元にして呼び出すメソッドを選択する。 サンプル # encoding: utf-8 require "pry" class Hoge %w|hoge hage hige|.each do |w| define_method w do puts w end end end hoge = Hoge.new %w|poge hoge page hage pige …

メタプログラミングRuby | 魔術 | オブジェクト拡張

概要 オブジェクト拡張 内容 オブジェクトの特異クラスにモジュールをインクルードして特異メソッドを定義。 サンプル # encoding: utf-8 require "pry" class Hoge def hoge puts "hoge" end end hoge = Hoge.new module Hageable def hage puts "hage" end…

メタプログラミングRuby | 魔術 | モンキーパッチ

概要 モンキーパッチ 内容 既存のクラスの振る舞いを変更する。 Rubyの場合、オープンクラスで既存のクラスを変更します。 サンプル # encoding: utf-8 require "pry" class Fixnum def + (value) self - value end end # Fixnumクラスにモンキーパッチをあ…

メタプログラミングRuby | 魔術 | 遅延インスタンス

概要 遅延インスタンス 内容 初回アクセスまでインスタンス変数を初期化しない。 サンプル # encoding: utf-8 require "pry" # 通常の初期化 class Hoges def initialize @hoges = {} end def hoges() @hoges end end hoges = Hoges.new.hoges puts hoges.cl…

メタプログラミングRuby | 魔術 | カーネルメソッド

概要 カーネルメソッド 内容 Kernelモジュールにメソッドを追加することで、言語の組み込み機能のように 見えるメソッドを追加することが出来ます。 サンプル # encoding: utf-8 require "pry" module Kernel def br_puts(value) puts "#{value}<br />" end end %w…

Strike Three | FizzBuzzでストライク・スリーを実装してみる

概要 FizzBuzzでストライク・スリーを実装してみる 内容 FizzBuzzでストライク・スリーを実装してみます。 ストライク・スリーについては親記事参照。 仕様 DSLを利用してfizz_buzz_spec.rb を記載すると、 ・fizz_buzz_spec.rb をrequireすればプロダクトコ…

Strike Three | 仕様(ドキュメント)・テストコード・プロダクトコードを一体に扱うための調査

概要 仕様(ドキュメント)・テストコード・プロダクトコードの3要素を一体として開発出来ないか検証する個人的な試験プロジェクト。 昔ジャンプで連載していた「にわのまこと」さんの漫画「ザ・モモタロ−」の必殺技で プロレスの三要素、打つ(打撃)・投げ…

メタプログラミングRuby | 魔術 | フックメソッド

概要 フックメソッド 内容 メソッドをオーバーライドしてオブジェクトモデルのイベントを補足する。 最もメジャーなのはModule#includedModuleのフックメソッド ・ inherited ・ included ・ extended ・ method_added ・ method_removed ・ method_undefine…

Ruby | Sublime Text2向けのSnippetを生成するDSL

概要 Sublime Text2向けのSnippetを生成するDSL 詳細 Sublime Text2向けのSnippetを生成するDSLです。 仕様 ・DSL向けを想定しているため単純なメソッド名+引数名(複数)で構成されるクラスマクロのみを対象とします。 ・ブロックは未対応。 ・DSL定義部、…

Sublime Text2 | SyncedSideBarで開いているファイルのサイドバー上のフォルダを自動でオープン

概要 SyncedSideBarで開いているファイルのサイドバー上のフォルダを自動でオープン 詳細 SyncedSideBarで開いているファイルのサイドバー上のフォルダを自動でオープンします。 Eclipseなどを利用しているサイドバーのフォルダが自動的に展開して便利ですが…

Ubuntu | プロファイルを指定して端末を起動し、用途によって端末の見栄えを変える

概要 プロファイルを指定して端末を起動し、用途によって端末の見栄えを変える。 詳細 プロファイルを指定して端末を起動し、用途によって端末の見栄えを変えます。 例えばRailsの開発で ・mysqlの操作をする端末 ・サーバーを起動させておく端末 ・railsやr…

リーンソフトウェア開発

概要 リーンソフトウェア開発について 詳細 リーンソフトウェア開発の7つの原則について。 項目 URL 7つの原則 http://d.hatena.ne.jp/tbpg/20130822/1377188407 狩野モデルによる品質要素分析 http://d.hatena.ne.jp/tbpg/20130902/1378135769 バリュースト…

リーンソフトウェア開発 | 7つの原則

概要 7つの原則 詳細 リーンソフトウェア開発の7つの原則について。 ムダをなくす リーン生産方式の7つのムダと照らしあわせて考える。 リーン生産方式 リーンソフトウェア開発 備考 作り過ぎのムダ 余分な機能のムダ パレートの法則にあるように実際に使わ…

メタプログラミングRuby | 魔術 | フラットスコープ

概要 フラットスコープ 内容 クロージャーを使って2つのスコープで変数を共有する。Class.new define_method :method_name do Proc instance_eval などを使うことでスコープ外の変数を参照可能になります。 サンプル # encoding: utf-8 # hoge = "hoge" # cl…

Ubuntu | Create LauncherでアプリケーションをLauncher&Dashへ登録

概要 Create LauncherでアプリケーションをLauncher&Dashへ登録 詳細 以下の手順でアプリケーションをLauncherとDashへ登録します。 ・Super,Create Launcher,Enter ・任意の名前を設定、画像パス、アプリケーションパスを設定してCreate Launcherボタンを…

メタプログラミングRuby | 魔術 | 動的プロキシ

概要 動的プロキシ 内容 どのメソッドにも当てはまらないメッセージを他のオブジェクトに転送します。 サンプル # encoding: utf-8 require "date" require "pp" class DynamicProxy attr_accessor :proxies def initialize(*proxies) @proxies = proxies en…

EPW | 英単語発音管理用スクリプト EPW

EPW

概要 英単語発音管理用スクリプト EPWを実装してみた 内容 自分の英語学習時の発音練習用に、英単語を管理するためのスクリプトを作成しました。 英単語名を指定するだけで、Webから発音記号と音声ファイルを拾ってきて その結果をhtmlにまとめます。一度、h…

EPW | 英単語発音管理用スクリプト EPWを実装してみた

EPW

概要 英単語発音管理用スクリプト EPWを実装してみた 詳細 要約 英単語の発音記号・音声ファイルをWeblioさんのサイトから取得して HTMLのリストにするシステムです。 尊敬の念を込めて「English」と「Pronunciation」と「Weblio」の頭文字をとって EPWをシ…

Ruby on Rails | ActionMailerのテストを行う

概要 ActionMailerのテストを行う 内容 ActionMailerのテストを行います。 メールは実際に送信しない設定にしている前提です。 テスト方法 test.rbで config.action_mailer.delivery_method = :test を設定。RSpecの任意の箇所で下記を呼び出す # 最後に送信…

RSpec | カスタムマッチャーを作成する

概要 カスタムマッチャーを作成する 内容 カスタムマッチャーを作成します。 仕様 あるクラスのフィールドに対して、指定したマップ内のキーのフィールドが バリューの値を持っているか全比較し、全て保持していればマッチ成功とする。 主に登録処理、編集処…

Sublime Text2 | Markdownのシンタックスハイライト設定

概要 Markdownのシンタックスハイライト設定 詳細 Markdownのシンタックスハイライト設定をします。 貼付コード 下記コードをテーマファイルの最後の方にあるarrayの閉じタグ直前に貼る。 テーマは自分が選択しているもの。自分の場合はWin7環境の場合,Monok…