読者です 読者をやめる 読者になる 読者になる

Programming log - Shindo200

イベント参加記録とプログラミング系の雑記

ActiveSupport::Callbacks を使ってメソッドに前処理を挟み込む

Rails の Controller には、アクションメソッドに前処理を挟み込むための before_action というメソッドが存在します。ActiveRecord などを継承していない普通の Ruby のクラスでも簡単に前処理を挟み込めるようにしたいと思う場面がありまして、便利なモジ…

MySQLのインデックスについて学びました

前回の記事に続き、MySQLに関するネタを書きます。今回の内容のほとんどは『実践ハイパフォーマンスMySQL』の読みながらまとめた内容になりますので、より詳しく知りたい方はそちらをご一読ください。実践ハイパフォーマンスMySQL 第3版作者: Baron Schwartz…

MySQLの「InnoDB」と「MyISAM」についての易しめな違い

今回はMySQLのストレージエンジンという重箱の隅をつつくようなネタをメモしておきます。 私はMySQLについてはよちよちレベルなので、込み入った内容には触れられません。初心者でも理解しやすい部分での違いを中心にまとめていこうと思います。 【復習】ス…

RailsのアクセスログのフォーマットをカスタマイズできるGemを作りました

jpmobileを使っているRailsアプリで、あるUserAgentを持つクライアントからのアクセスのみエラーが出る症状が発生しました。Errbitなどのエラー監視サービスを利用すれば、どのUserAgentを持つクライアントのときにエラーが発生するかすぐにわかるのですが、…

Rails のフラグメントキャッシュで使われるキーについて

試したバージョン: Rails 4.1.9Railsにはテンプレートの一部をキャッシュ化する「フラグメントキャッシュ」という機能があります。使い方は『Ruby on Rails Guides』の「Caching with Rails: An overview — Ruby on Rails Guides」という記事と、『ASCIIcast…

PointDNSでHerokuアプリにNaked domainを割り当てる

HerokuアプリにNaked domain(www無しのドメイン)を割り当てる方法は色々あります。あるアプリで「PointDNS」というHerokuのアドオンを利用してNaked domainを割り当ててみました。とても簡単に割り当てることができましたので、設定方法のメモと、名前解決…

Rubyで文字列を連結するのにString#+を使うと、状況によっては遅くなる

試したRubyのバージョン: 2.2.0 文字列を連結するのにString#+を使わないこと Rubyで文字列の後ろに別の文字列を破壊的に連結するには、String#+を使う方法と、String#concatを使う方法があります。 str = 'foo' puts str += 'foo' # => foofoo str = 'bar' …

Ruby2.2で新たに加わったitselfメソッドについて

2014年12月25日にRuby2.2.0がリリースされました。Rubyがアップデートされるたびに、新機能の紹介エントリを書いていたのですが、今回はitselfメソッドの追加が気になりましたので、このメソッドだけに絞ってエントリを書きます。 Kernel#itself itselfメソ…

Yochiyochi Committers Who's Who in 2014

この記事は「よちよちAdventCalender」の2日目の記事です。昨日の記事は『Precompile - じゃがいもエンジニアのブログ』でした。毎年のRubyKaigiで、近永さんという方が、1年間の内でCRubyに対してのコミット数が多かった方々を紹介する『CRuby Committers …

Railsのセッション管理方法について

セッション管理はWebアプリケーションを開発・運用するときに必ず関わってきますので、ある程度知っておかなければいけないことかと思うのですが、Railsのセッション管理について解説している資料が少ないように思えました。私もRailsのセッション管理につい…

「Forwardableモジュール」と「委譲」について学びました

ある程度の規模のWebサービスを作ろうとすると、Rubyの組み込みライブラリやRailsのMVC構造だけで設計することに限界を感じてきてしまいます。そんなときに、様々なデザインパターンや便利なモジュールを知っていれば、最適な設計を選択することができるかも…

RailsのCSRF対策の仕組みについて

先日、Rails で開発しているときに意図しない InvalidAuthenticityToken エラーが発生して、すごくハマってしまいました。そのときに Rails のCSRF対策の仕組みについて調べてみましたので、ブログに残しておきます。 Rails のCSRF対策 Rails が生成した App…

Chef の思想や基本を優しく学びました

知っていることはブログに書いておかないと不安になる病気にかかってしまいましたので、Chef についてのメモを残しておきます。 はじめに アプリケーションサーバに MySQL とか Nginx とか様々なパッケージをインストールしているかと思います。皆さんはこれ…

guard-rspec に送った Pull request がマージされました

rspec-rails は2014年6月にリリースされた v3.0.0 から rails_helper.rb という新しいヘルパーファイルを生成するようになりました。 純粋な RSpec の設定は spec_helper.rb に記述し、Rails で RSpec を使うときに必要な設定は別のヘルパーファイル(rails_…

第23回オフラインリアルタイムどう書くにへなちょこな感じで参加しました

『オフラインリアルタイムどう書く』というプログラミング勉強会があります。 オフラインリアルタイムどう書く | 横浜へなちょこプログラミング勉強会 たまに『オフラインリアルタイムどう書く』で過去に出題された問題を家でちまちまと解いていたのですが、…

パーフェクト Rails を読みました(7章)

この記事は『パーフェクト Rails を読みました』シリーズの7回目の記事です。 前回の記事は『パーフェクト Rails を読みました(6章) - Programming log - Shindo200』です。前回の記事を投稿してから間があいてしまったのですが、『パーフェクト Ruby on R…

パーフェクト Rails を読みました(6章)

この記事は『パーフェクト Rails を読みました』シリーズの6回目の記事です。 前回の記事は『パーフェクト Rails を読みました(5章) - Programming log - Shindo200』です。だいぶ時間がかかったのですが『パーフェクト Ruby on Rails』の6章を読み終えま…

パーフェクト Rails を読みました(5章)

この記事は『パーフェクト Rails を読みました』シリーズの5回目の記事です。 1回目の記事は『パーフェクト Rails を読みました(1章) - Programming log - Shindo200』です。 2回目の記事は『パーフェクト Rails を読みました(2章) - Programming log - …

パーフェクト Rails を読みました(4章)

この記事は『パーフェクト Rails を読みました』シリーズの4回目の記事です。 1回目の記事は『パーフェクト Rails を読みました(1章) - Programming log - Shindo200』です。 2回目の記事は『パーフェクト Rails を読みました(2章) - Programming log - …

パーフェクト Rails を読みました(3章)

この記事は『パーフェクト Rails を読みました』シリーズの3回目の記事です。 1回目の記事は『パーフェクト Rails を読みました(1章) - Programming log - Shindo200』です。 2回目の記事は『パーフェクト Rails を読みました(2章) - Programming log - …

パーフェクト Rails を読みました(2章)

この記事は『パーフェクト Rails を読みました』シリーズの2回目の記事です。 1回目の記事は『パーフェクト Rails を読みました(1章) - Programming log - Shindo200』です。午前中から引き続き、『パーフェクト Ruby on Rails』の2章を読み終えましたので…

パーフェクト Rails を読みました(1章)

技術評論社様から『パーフェクト Ruby on Rails』が発売されました。著者の皆様、お疲れ様でした。発売日は6月6日なのですが、ちょっとだけ早く手に入れることができましたので、これからじっくり読んでいきます。パーフェクト Ruby on Rails作者: すがわら…

URI はクライアントにとって不透明であるべき?

よちよち.rb で『Web を支える技術』の読書会をしています。先日、P.63「5.6 URIの不透明性」の部分を読み合わせてのですが、ここに書いてあることがよくわかりませんでした。この章での主張を引用します。 URI の内部構造を想像して操作したり、クライアン…

APT について学びました

フィヨルドインターン学習週6日目に APT について学びましたので、まとめておきます。 APT APT は Debian 用のパッケージ管理システムです。apt-get か aptitude で呼び出すことができます。aptitude は TUI で起動できたり、apt-cache のようにパッケージの…

Linux の基本を学びました

フィヨルドインターン学習週5日目に Linux の基本を学びましたので、まとめてみます。 用語の整理 カーネル CPU やメモリやキーボードといった、ハードウェアと直接やり取りする機能を持ったソフトウェアを「カーネル」と呼びます。 ユーザランド ファイル操…

ActiveSupport::Concern のソースコードリーディング #1 復習編

Rails で複数のモデルに共通するメソッドをモジュールにまとめたいときに活躍するActiveSupport::Concern というライブラリがあります。ActiveSupport::Concern https://github.com/rails/rails/blob/master/activesupport/lib/active_support/concern.rbこ…

Github issue のコメントを Lingr に通知させる

フィヨルドインターンで Lingr というチャットツールを使っているのですが、 「Github の Issue や Pull request にコメントが付いたとき、Lingr に通知する仕組みが欲しい!」と思いました。Idobata でしたら Github API から直接に通知を受け取る機能があ…

HTML5 の基本を学びました

フィヨルドインターン学習週1日目で HTML の基本を学びましたので、まとめてみます。 HTML そもそも HTML とは何なのでしょうか。W3C のページを見てみます。 http://www.w3.org/standards/webdesign/htmlcss HTML is the language for describing the struc…

大江戸 Ruby 会議04 に参加しました

2014年4月19日に大江戸 Ruby 会議04 が開催されました。大江戸 Ruby 会議は「日常発表会」というテーマで、普段から Asakusa.rb に参加している方々が思い思いに発表されました。大江戸 Ruby 会議 04 http://regional.rubykaigi.org/oedo04/ レポート 2つだ…

フィヨルドインターンを始めました

合同会社フィヨルド様のリモートインターンに参加し始めました。現在、僕は Ruby プログラマを目指して勉強中&就活中です。 Ruby コミュニティで「Web アプリケーション開発のことが分かっている人」みたいに扱われることがあるのですが、Ruby に関わる技術…

Rroonga で複数キーワードの AND 検索や OR 検索がしたい #2

2012年11月に『Rroonga で複数キーワードのAND検索,OR検索』という記事を書きました。今でもこの記事を見に来てくださる方がいるようです。ありがとうございます。当時は map とか inject を使うと短く書けて楽だと思ったのですが、後々に見直すと結構分かり…

札幌市中央区Ruby会議01に参加しました

2014年2月8日に札幌市中央区Ruby会議01が開催され、るびまレポート執筆のお手伝いとして東京から参加してきました。会議全体の雰囲気や発表内容は後日『るびま』に掲載されると思いますので、この記事では私の行動記録と会議の感想を書きます。 札幌市中央区…

Ruby でスコープを自作する

最近 ipad の防水ケースと無線ルータを購入して、風呂場に ipad を持ち込めるようになったので、お風呂に入りながら ipad で電子書籍を読んでいます。ちょうど『作って学ぶプログラミング言語 RubyによるScheme処理系の実装』という書籍を読み終えたのですが…

gem の雛形生成後に自動で git commit を実行する拡張 Bundler を作りました

bundler で gem の雛形を生成するときのコマンドを知っていますか?そう、bundle gem コマンドですね。 bundle gem コマンドを実行したときに、生成した gem の雛形ファイル全てを git のインデックスに登録してくれますが、commit はされていない状態ですの…

よちよち.rb で Sinatra の紹介 LT をしました

よちよち.rb 第5回で Sinatra の紹介 LT をしました。 不慣れな LT を聴いていただき、ありがとうございました。LT のスライドは少し加筆して Slideshare にアップロードしてあります。 Sinatraのススメ from @odailly_jp Odai よちよち.rb の参加者は Ruby …

uglifier とは何をする gem なのか

rails new コマンドで生成したばかりの Gemfile には、uglifier という gem が書かれています。よちよち.rb の第4回で「この gem は何をしているのか?」と少し話題になりましたので、調べたことをまとめてみます。uglifier: https://github.com/lautis/ugli…

新漢字と旧漢字の相互変換を行う gem を公開しました

新漢字と旧漢字の相互変換を行う gem を作って、Rubygems.org に公開しました。ライブラリ shinji https://rubygems.org/gems/shinji https://github.com/odaillyJP/shinji 使い方 Rubygems.org から shinji をインストールします。 $ gem install shinji Fe…

The year is almost over. (2013年振り返り記事)

2013年もあと少しで終わりですので、僕の 2013 年を振り返ってみます。 やったこと 東京 Ruby 会議10 - 当日スタッフ ぼっちで意識高くない人間が東京Ruby会議10に当日スタッフとして参加した - Programming log - Shindo200 東京Ruby会議10(3日目)にスタ…

Ruby 2.1.0 の新機能を試す

2013年12月25日に ruby 2.1.0 がリリースされました。早速、rbenv で Ruby 2.1.0 をインストールしてみます。homebrew から入手した ruby-build-HEAD では、まだ Ruby 2.1.0 がインストールできませんので、 github から ruby-build の最新版を入手して、Rub…

-> { "Perfect Ruby Advent Calendar" }.call

この記事はパーフェクトRubyAdventCalendar2013の14日目の記事です。昨日の記事は、パーフェクトRuby Advent Calendar 2013(13日目) 気になるあの子でした。 感想 『パーフェクト Ruby』の制作に関わった方々、お疲れ様でした。Rake や Pry は適当に使ってい…

brew link を実行したら * has multiple installed versions と出たときの対応

私は ruby のバージョン管理に rbenv を利用しています。rbenv は ruby-build というプラグインを使って ruby のインストールを行います。このプラグインに現在インストール可能な ruby のバージョンとソースの取得先が記述されているようで、rbenv で最新の…

JavaScript の関数の中で window と undefined を定義する理由を調べてみた

jQuery などの JavaScript のライブラリのソースコードを読んでいると、このようなコーディングパターンをよく見かけます。 (function(window, undefined){ // ... })(this); これはすぐに実行される関数の中にライブラリの実装コードを閉じ込めて、関数の中…

PHPSandbox に var_dump を挿入する Chrome 拡張を作りました

たいしたものではないのですが、たまには作ったものを紹介しようかなと…PHP でちょっとしたコードを確認したいとき、サーバから PHP を呼び出さなくても、 Web 上でコードを確認することできるアプリケーションが OnlinePHPfunctions というサイトにあります…

Ruby の優先順位で引っ掛かったときの話

似たようなメソッドを持つクラスを大量に作るとき、一個ずつクラスを定義するのは面倒なので、メタプログラミングでクラスを定義することにしました。 module Domi class Tresure; end StandardTresureCards = [ {:name => :Copper, :cost => 0, :coin => 1}…

RubyKaigi2013に参加してきました

国内最大級の Ruby カンファレンス『RubyKaigi』をご存知でしょうか。RubyKaigi は2006年から年1回のペースで開催されていましたが、諸処の事情により2011年7月に開催された『RubyKaigi2011』を最後にして、RubyKaigi を終わらせることになりました。私が Ru…

TDDBC長岡に参加してきました

友人などにお願いしてペアプロ+TDD(テスト駆動開発)をしているのですが、テストの書き方やリファクタリングの進め方に不安がありました。TDDの思想も含めて一からしっかり学ぶために、巷で評判のTDDBCに参加しようと思ったのですが、都内で開催されるTDDBC…

LEGOでスクラムを体験してきました

『アジャイルサムライ』を読んでスクラムの概要について学んだり、ハッカソンに参加してスクラムのような形で開発したことはありますが、「スクラムの思想についてちゃんと知っているか」と聞かれたら「はい」と答えられる自信はありません。スクラムの思想…

Vagrant のコマンドをメモしておく

【!注意!】 この記事は Vagrant の最新バージョンが 1.1.3 のときに書かれた記事なので、現在は内容が古くて、あまり参考になりません。公式サイトのドキュメントを参考にした方が良いです。 Vagrant は VirtualBox や VMware Fusion を使って仮想サーバー…

ファイルをAtCoderに提出するツールを作りました

ローカルにあるファイルをAtCoderに提出するツール「pcoder」を作って、RubyGemsに公開しました。実は初めてのGem作りでした。インストールは下記のコマンドで行えます。 $ gem install pcoder 使い方 試しに練習用ページの問題1をRubyで解いた下記のファイ…

AtCoderを始めよう

AtCoder は、プログラミングコンテストの問題を好きなプログラミング言語で解いて、コードを提出できるサービスです。提出したコードは自動でテストされて、問題に正解しているかどうかすぐに解ります。C, Java, Python, Ruby, Haskell などの様々な言語に対…