のぶLab.

流しのソフトウェアエンジニアの雑記帳. Android, Scala, Clojure, Ruby on Railsなど

プログラミング

Fat Model解消のアイディア

肥大化したActiveRecordモデルをリファクタリングする7つの方法(翻訳) | TechRacho http://techracho.bpsinc.jp/hachi8833/2013_11_19/14738 ※ concernにmodelの機能を移しても本質的には何も変わっていない. どこに何があるかわかりにくく見通しが悪い状態…

zepto-railsでlink_to :method => :deleteが効かない

Railsでzeptoを使おうとして断念した記録 背景 jquery likeで軽量なzeptoを使ってRailsアプリを作成したが、 <% link_to "hoge", hoge_path, :method => :delete %> が効かなくてハマってしまった。 原因 "jquery-ujs"に相当するものがないためらしい 代替探…

SublimeからAtomへ1週間変更してみた

エディターをSublimeからAtomに変更し、開発業務を1週間やってみて感じたこと Atom こちらからDLすることができます A hackable text editor for the 21st Century Atom Atomを使った感想 良いところ Git関連のpluginが充実していて便利。 詳細にgit log --g…

YeomanでMEAN(MongoDB, Express, Angular.js, Node.js)アプリケーションを作る

こちらで紹介されている手順を参考に、 Yeomanを使ってMongoDB, Express, Angulaar.js, Node.jsで構成されたWebアプリケーションを立ち上げます。 前提 Yeomanはインストール済みの状態とします。 ちなみに私はBoxenを使ってインストールを行いました。 http…

Yeomanを使ってAngularJSアプリケーションの作成

最近Yeomanが私の周囲でアツいようなので、試してみました。今回はBoxenで必要なものをインストールして Angular.jsを使用したアプリケーションのひな形作成まで。 Boxenで必要なものをインストール yo, grunt, bowerをインストールします。 manifest.ppに以…

GOFデザインパターンをPythonで - State

こちらの写経です。 State 状態をクラスで表現するパターン。 状態によって振る舞いが変更される場合に効果的。 ソースコード GoF design pattern - State

GOFデザインパターンをPythonで - Iterator

こちらの写経です。 Iterator 要素の集まりをもつオブジェクトの各要素にアクセスする方法を提供する。 各要素へのアクセス方法はオブジェクトの内部仕様に依存しない。 ソースコード GoF design pattern with Python - Iterator

GOFデザインパターンをPythonで - Observer

こちらの写経です。 Observer あるオブジェクトが状態変化したとき、自動的に変更を観察者に通知する仕組みです。 ここではDataクラスのセッターでnotify()メソッドを呼び出すことで、状態変化時に通知を行います。 ソースコード GoF design pattern - Obser…

GOFデザインパターンをPythonで - Factory Method

こちらの写経です。 Factory Method インスタンスの生成を直接行わず、それを担うメソッドに任せる。 これによって生成するインスタンスを柔軟に変更することができる。 ソースコード gist8768467

GOFデザインパターンをPythonで - Singleton

今回はこちらを参考にしました Singleton 唯一のインスタンスであることが保証されたクラス。 グローバル変数問題やテスト難化などがのため使用には要注意。 ソースコード GoF design pattern - Singleton.py

GOFデザインパターンをPythonで - Mediator

こちらの写経です。 Mediator オブジェクト間で調整が必要な場合の取りまとめを行う。 オブジェクト同士がお互いを参照しあうことがないようにして、低結合を保つ。 ソースコード GoF design pattern - Mediator

GOFデザインパターンをPythonで - Facade

こちらの写経です。 Facade 複数のクラスやメソッドを呼び出す場合、クライアントが呼び出し順などを意識する必要のないよう、一連の処理をまとめて、一つのインターフェイスで提供する。ここでは各TCクラスのメソッド呼び出しをTestRunnerのrunAll()でひと…

GOFデザインパターンをPythonで - Decorator

こちらの写経です。 Decorator あるクラスに機能を追加したい場合、DecoratorはDecorateeを引数にとるなどしてインターフェイスを同一視して機能拡張が可能。 ソースコード GoF design pattern - Decorator 参考 12. Decorator パターン | TECHSCORE(テック…

GOFデザインパターンをPythonで - Strategy

こちらの写経です。 Strategy 状況によってアルゴリズムを変更する必要がある場合に有効。 if分の分岐内にアルゴリズムをかき分ける必要がなくなる。各アルゴリズムをカプセル化しアルゴリズムを呼び出すインターフェイスのみ提供する。 クライアントはその…

GOFデザインパターンをPythonで - Adapter

こちらの写経です。 Adapter あるクラスのインターフェイスをクライアントの要求するインターフェイスへ変換する。ここではAdapterクラスを介してDog、Cat、Human、Carクラス内のメソッドをmake_noise()として呼び出す。 ソースコード GoF design pattern wi…

GOFデザインパターンをPythonで - Builder

こちらの写経です。 Builder 具体的な作成物を作成過程に依存しないものにすることで、同じ作成過程で異なるモノを作成することが可能。ここではDirectorクラスはAbstract ClassであるBuilderクラスのメソッド呼び出す。 具体的に作成するモノについてはBuil…

GOFデザインパターンをPythonで - Template Method

こちらの写経です。 Tmeplate Method アルゴリズムのひな形(Skeleton)となるクラスを作成、具体的な処理はサブクラスの定義に任せる。ここではSkeletonクラスではなくSkeletonメソッドを用意し、 make_template()でSkeletonに任意の関数オブジェクト(ここで…

iOSのMVCパターンにおけるViewControllerの役割について

iOSのViewControllerの役割がよくわからないので少し調べました。 結局まだよくわかっていないのですが、以下のように書くとうまくいきそうな気がしました。 View -> XIB, UIViewのサブクラス Controller -> ViewController Model -> Model用のクラス iOSのM…

Vagrant+ChefでDjangoをインストール

VagrantとChefを使ってDjangoをインストールします。opscodeで公開されているPythonのcookbookを使ってインストールが可能です。 https://github.com/poise/python こちらのcookbookではPythonと一緒にpipやvirtualenvもインストールしてくれます。 Djangoの…

GOFデザインパターンをPythonで

参考 Pythonでデザインパターン - モジログ http://mojix.org/2012/08/10/python-patternsGOFデザインパターンがPythonで書かれています 一通り写経して身につけたいですね 今年の目標

cookbookを自作する[Vagrant][Chef]

サードパーティのcookbookではなく自作したcookbookを使って、nginxの設定ファイルを任意に設定してみます。 0.自作cookbookを格納するディレクトリの作成 mkdir site-cookbooks 1.自作cookbookのためのテンプレートを作成 cd site-cookbooks berks cookbook…

Sublime Textの設定メモ

Package Control Sublimeのパッケージを検索してくれる便利なやつ http://d.hatena.ne.jp/xyk/20131001/1380610973 VintageMode Vimライクに操作するための設定 Sublime Text2 > Preferences > Settings - Userに""ignored_packages": []"を追加 Git Package…

Vagrant+ChefでAWS EC2にUbuntu環境を構築

このサイトを参考にVagrantでEC2をvagrant upしてみますVagrant 1.1 で EC2 を vagrant up - naoyaのはてなダイアリー http://d.hatena.ne.jp/naoya/20130315/1363340698Vagrantで AWS EC2インスタンス(RHEL5.5)を作成する - Qiita [キータ] http://qiita.…

Djangoで既存のデータベースを使う

python manage.py syncdbこのコマンドで作成するDBはModel.pyからテーブルを自動生成してデータベースを作成するが、 バッチ生成など事前に作成しておいたデータベースファイルを使用したい場合もある。 Models.pyを以下のようにすると既存のDBファイルを利…

gunicornで"valueerror dictionary doesn't specify a version"

pip install gunicornでgunicornをインストール Djangoプロジェクトの"INSTALLED_APPS"に"gunicorn"を登録していざアプリケーションを起動させたところ、 "valueerror dictionary doesn't specify a version"というエラーが発生どうもsetting.pyにLOGGINGの…

新しいMacBookProを購入したのでBoxenで開発環境を構築してみた

Boxenを使ってみたのでメモ1.githubにアクセスできるようにssh-keyを登録 https://help.github.com/articles/generating-ssh-keys 2.Boxen用のリポジトリ作成 (Ex. repo name : "my-boxen") 3.Boxenをcloneして"my-boxen"にPush https://github.com/boxen/ou…

PythonのSQLiteでsqlite3.ProgrammingError: Incorrect number of bindings supplied.

以下のように書くとなぜかinsertできなかった。 c.execute('insert into table_name (hoge) values (?)', hoge)このように書くとうまくいく c.execute('insert into table_name (hoge) values (?)', (hoge,))","のあと何もないのも気持ち悪いし、そもそも","…

PythonでJsonファイルからSQLite DBファイルを作る

Pythonは標準でSQLiteのライブラリが入っているので簡単にSQLiteの操作を行うことができます。 今回はJSON形式のファイルから任意のデータを抽出してDBファイルにINSERTしてみました。サンプルコードはこちら create sqlite database file from json file

Scrapyでtdタグ内の要素が取得できない

div > table > tbody > tr > tdとなっているtdタグ内のテキストを取得する場合、 XPathを下のように書くとダメ //div[@id='hoge']/table/tbody/tr[i]/td[j]/text()tbodyタグがあってもtbodyは書かず、 このようにしないといけないらしい //div[@id='hoge']/t…

UbuntuにJenkinsをインストール

公式URL: http://jenkins-ci.org/動作環境: Ubuntu 12.04.3 LTSこちらの手順にしたがってインストール作業をおこないます。 $ wget -q -O - http://pkg.jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add - $ sudo vim /etc/apt/sources.list最…