プログラミング 美徳の不幸

Ruby, Rails, JavaScriptなどのプログラミングまとめ、解説、備忘録。

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

単一テーブル継承のモデル側で表示する内容を変更する

やりたいこと ◯抽象クラスNewsを継承した、FollowStartNewsやTweetFavNewsなど具象クラスを使うことで、タイプコードを削減する。 ◯News一覧を見るときに、News.all.each{|news| news.body}で、その内容が見たい。 ◯なおかつnews.bodyの内容はFollowStartNew…

サンドイッチメソッドのstub化

現在作っているGithub風のアプリケーションでは、Controllerが実在するファイルシステムのブランチを切り替えることがある。Controllerでブランチの操作を意識し、モデル側ではブランチを気にしないで済むという構成。 当初はControllerにrender, DB操作, fl…

今日からはじめる入門TDD生活

まぁなんか適当なタイトルですが。。。最近知人からTDDについて少し教えて欲しいと言われました。かくいう自分も、正直に申し上げて約1年間全くテストを書かずにRails開発をしていました。あのブラウザをリロードしまくるやつです。で、これじゃいけないなと…

自己参照の関連

Railsのサンプルってほぼ必ずミニブログ=Twitterなんだけど、Twitterのfollowing(フォローの対象となった人)/follower(フォローしている側)のリレーションって考えると意外とめんどくさい。ざっくり、UserとUserが多対多で結ばれることは想像がつくが、その…

単一テーブル継承によって作成されたサブクラスをさらに継承する

やりたいこと GithubのFeedのようなものに、さらにTweetを混入させたTLを作成したい。 (こっちが新しい) ・(octolion)「この機能を作ったので、取り込んで!」 ・octolionさんがにpull requestを送りました ・octodogさんがにstarをつけました ・(octocat) …

設計の悩み

今更かよって感じですが、最近は非常にアプリケーションの設計の難しさを痛感しています。そもそも設計の難しさを形作るのは大きく2つだと思います。1つは、アプリケーションは生き物であるということ。つまりある時点でベストな設計が、次のイテレーショ…

結局こうした。

def set_revision(kommit) repo = kommit.repository.repo Dir.chdir(repo.working_dir) do `git commit -m "#{kommit.message}"` branch_name = kommit.init_at.try(:name) || "master" output = `git rev-list #{branch_name}` newest_revision = output.s…

非同期の罠

最近こんなユニットテストを書いた。◯spec/models/kommit_spec.rb describe Kommit do it "return git message" do @user = create(:user) create_repository_for(@user) @repository.master.posts.create({title:"hoge",body:"fuga"}) @kommit = build(:kom…

プロセスの排他制御

今作ってるGithub風のものはデータストアとしてRDBMSも使っているんですが、レポジトリ本体はファイルシステムとして、素のgitレポジトリで管理しています。 で、ファイルでデータを持つというのはウェブアプリではあまり聞かないような気がしますが(あって…

意外と難しいObserver

ObserverとはActiveRecordが提供する、モデルに対するイベント処理を可能にするRailsの機構です。もちろん同様のことはモデル中に before_create :メソッド名 の形で記述すればいいわけですが、Observerを用意することで別ファイルに出き、見通しがよいこと…

魅惑の文学部エンジニアリング

某大手ソーシャルゲーム企業で球団を持ってない方の会社のCTOの方(以下Fさん)と幸運にも少しお話させていただく機会があった。私よりも13コ上で、私よりも5年も若い時からプログラミングをされていたというから約20年近いキャリアギャップが存在し、僕ごと…

詳解UNIXプログラミング 第4章 ファイルとディレクトリ

詳解UNIXプログラミング 第4章 ファイルとディレクトリ from Takaya Kotohata

詳解UNIXプログラミング 第3章 ファイル入出力

詳解UNIXプログラミング 第2章 UNIXの標準化と実装

詳解UNIXプログラミング 第1章 概論

ふつうのLinuxプログラミング 読書録①

・カーネルとOSの違い 「Linuxカーネル」と「Linux OS」は違う。OSには、シェルや開発環境、GNOMEなど様々なソフトウェアパッケージが含意される。一方で、カーネルはただひとつのプログラムで構成されていて、コンピュータを構成するすべてのハードウェアと…

RailwayJS ハマりポイント① filterの使い方

RailwayJSを3週間近くいじって、少しはまりやすいところについて解説したいと思います。まず、filterというのはcontrollerのアクションの前後で動作する処理のことで、具体的にはログイン済みであることを要求するページにアクセスする際にログイン済みかを…

TechStuDIG 2012

DeNAの技術系インターンであるTechStuDIGに参加してきました。 一応当該インターンで得た情報をソーシャルメディア等に掲載することはやめてください的な紙にサインしたので、あまり深い話はせずに、来年以降のTechStuDIGの宣伝くらいにしたいと思います。ま…

socket.ioとRailwayJSでモデルとsocketを対応させる

やりたいこととしては ・chats/1 ・chats/2 などのshowのアクションに対して、オブジェクトとsocketを一対一対応させたい。 だからchats/1でのAさん、Bさんの会話はchats/2のCさん、Dさんの会話とは区別され、Aさんの発言をbroadcastしてもBさんにしか見えな…

RailwayJSのセットアップ

※すでにnpmやmongodbの設定は済んでいるものとする。nodejsのサンプルがみんなオレオレコードばっかりで、どういうデザインパターンがいいのか悩んでいたら、Rails風のMVCを提供するフレームワークを見つけました。 一つがRailwayJSで、もう一つがTower.js。…

macbook単体で画面の効率化

僕はふだんiMacか、27インチのディスプレイを使っているので画面が狭いということはありません。ただ、外出先などで開発する際、ノートの画面だけだと効率的に画面切り替えを行わないと作業効率がぐっと下がります。で、画面分割とかタブ切り替えとかを駆使…

Railsの単一テーブル継承モデルの子モデルにおけるform_for

ひさびさにRailsでハマりました。(この記事は過去にも書いたんですが誤りがあったので全面的に新しくしたものをうpします)◯やりたいこと ・User name:string type:string ・Teacher (Userを継承している) ・Student(Userを継承している) ・Item name:string…

初めてのNode.js (node.js+express.js+mongodb)※MacOSX

JavaScriptアツいよ!とよく言われます。まぁ確かに僕はJavaScriptからプログラミングを初めたのでJavaScriptの可能性も難しさもある程度知っています。まず第一に、JavaScriptとRubyだと高度な話以前にメソッドの分かりやすさが違う。 Rubyなら "12345".to_…

DeNAの技術インターンに通った!

大学3年生なので、まだ本格的な就活は先なんですが周りでもちらほらとインターンという言葉が聞こえるようになって来ました。 私の場合、「野村」とか「博報堂」とか言われても全く興味ないんですが、技術的な勉強に繋がりそうな会社のインターンには興味を…

メールサーバの設定でハマった

メールサーバにpostfixを使っているんですが、これでひどく詰まったのでご紹介。Railsでは基本メールの設定はconfig/environments/XXX.rbの中に書きます。 config.action_mailer.smtp_settings = { :enable_starttls_auto => true, :address => '127.0.0.1',…

ニコニコ動画のスクレイピング

本当はテスト勉強しないといけないんですが、BGMがほしいなと思ったので、洋楽のマイリストから一括でダウソするコード書きました。これだけの行数で実現できるとは、さすがruby。 require 'rubygems' require 'open-uri' require 'rss' require 'niconico' …

Railsのステージング環境を構築③(関連プロセスのリスタート)

前回までで、Capistrano側からunicornの再起動ができるところまで行きました。Railsアプリは他にも、各種のプロセスを同時に立ち上げることが多いです。当たり前ですがnginxの再起動は不要です。APサーバ上で動くもので必要なものをリスタートさせると良いで…

Railsのステージング環境を構築②(Capistranoによるデプロイ)

ここが山場になります。私はここでかなりどん詰まりしました笑◯Amazon EC2 ◯Cent OS 6.2 ◯Ruby 1.9.2 ◯Rails 3.2.1 ◯rvm 1.14.2 ◯unicorn 4.3.1 ◯Capistrano 2.12.0 ◯nginx 1.2.1 ◯mysql 5.5.25unicornほかのインストール(Gemfileに記述) gem 'unicorn' gem …

Railsのステージング環境を構築①(Railsをインストールし、アプリを配置するところまで)

構成◯Amazon EC2 ◯Cent OS 6.2 ◯Ruby 1.9.2 ◯Rails 3.2.1 ◯rvm 1.14.2 ◯unicorn 4.3.1 ◯Capistrano 2.12.0 ◯nginx 1.2.1 ◯mysql 5.5.25 Railsアプリ用のステージング環境を構築しました。今回はWebサーバのnginx、APサーバのunicorn、DBサーバのmysqldをすべ…

もともと技術系ブログは読む側だったんですが、①自分の設定や開発メモをブログとして公開したほうがあとから参照しやすい ②ある程度、似たような境遇・環境の人たちにとって反面教師にでもなれれば(笑) ③詰まった時とか教えてくれる神が現れるかも という事…