サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
CES 2025
hakutoitoi.hatenablog.com
mysqlにおいてWHEREとJOIN ONで条件を指定した場合の違いがよくわかっていなかったのでまとめておく。 映画を表すmoviesテーブルと映画の日毎の再生回数を表すplaycountsテーブルがあるとする。 moviesテーブル +----+------------+ | id | title | +----+------------+ | 1 | MI3 | | 2 | Super Man | | 3 | Spider Man | +----+------------+ playcountsテーブル +----+-------+----------+------------+ | id | count | movie_id | date_at | +----+-------+----------+------------+ | 1 | 10 | 1 | 2012-12-16 |
最近Emacsからgithub製のテキストエディターであるAtomに移行しました。慣れるまで1週間ほど移行期間は必要でしたがデフォルトの設定で十分高機能で使いやすいです。自分は普段の仕事ではRailsアプリの開発をする事が多いのでRails開発で使える便利そうなパッケージを探してみたんですが、自分にあいそうなものがなかったのでrails-transporterというパッケージを作りました。 プロジェクト内のファイル移動を簡単にすることを目的にしており、下記のコマンドが使えるようになります。 20150323 追記 キーバインドを変更 コマンドを追加 Command open-controller(ctrl-r c) model, view, controller-specのどれかを開いてる時、 app/models/blog.rb app/views/blogs/show.html.erb
Rails4でmemcachedをキャッシュストアで使う定番gemといえばdalliとRailsGuideに書いてある。ただ、このgemが実際どうゆう挙動をするのかググってみてもあまり日本語の情報が見つからなかったので試してみた。 環境 Ruby-2.0.0p353 Rails-4.0.2 dalli-2.7.0 正常時のパフォーマンス Requests per second: 8.65 [#/sec] (mean) Time per request: 578.181 [ms] (mean) Time per request: 115.636 [ms] (mean, across all concurrent requests) memcachedサーバが2台ある場合、あるキーは2台のサーバに分散してストアされてしまうのか? Railsでは下記のようにconfig.cache_storeの
Railsで作成されたアプリケーションのリクエストURLにURLエンコード(壊れていてUTF8にデコードできない)された文字列を含めるとArgumentErrorが発生します。 環境 ruby 2.0.0p353 rails-4.0.4 再現方法 サンプルプロジェクトを構築 # railsの最新版をインストール $ gem install rails # プロジェクトのセットアップ $ rails new invalid-byte-sequence-in-utf8-demo $ cd invalid-byte-sequence-in-utf8-demo $ bundle install # 開発サーバ起動 $ rails server => Booting WEBrick => Rails 4.0.4 application starting in development on http:
PassengerはRailsを動かす事ができるアプリケーションサーバである。 Apache版の設定項目について調べたので自分用の備忘録として残しておく。 バージョン Passenger-4.0.37 http://www.modrails.com/documentation/Users%20guide%20Apache.html Configuring Phusion Passenger PassengerRoot http://www.modrails.com/documentation/Users%20guide%20Apache.html#_passengerroot_lt_directory_gt apacheのpassengerモジュールの置いてあるディレクトリを指定する。 普通はインストーラを実行した時に表示されるのでそれを使えばよい。rubyのインストール場所をかえた場合な
普通にcoffeescriptを書くとglobal汚染を防ぐためにfunctionの中に入れられてしまうのでwindowに領域を確保してそこに格納しておく必要がある。HogeClassの前にHogeProjectを定義しているのはnamespaceみたいなもので他のjsがHogeClassを定義している時のための保険みたいなものです。 呼び出されるクラス window.HogeProject = {} class HogeClass constructor: -> say: => alert "say good bye!" window.HogeProject.HogeClass = HogeClass 呼び出すスクリプト jQuery -> hoge = new HogeProject.HogeClass hoge.say() この手法はRailsなどコンパイルオプションが使えない場合に
例えばサーバが2台あったとして同じ時間に全く同じ内容のcronスクリプトが実行されるとする、その処理がDBのバッチ処理など大きなコストを必要とするなら両方のサーバで実行されるのは無駄でしかないし場合によってはデータの不整合なども発生するかもしれない。そんな時はredis-mutexを使って排他制御を行うことができる。 なにはともあれredisをインストール ※Macの場合のインストール方法です $ brew install redisredis-mutexというgemをインストール。 $ gem install redis-mutex Successfully installed redis-mutex-2.1.1排他制御を行いたい部分をRedis::Mutex.with_lockブロックで囲むだけでOK、簡単ですね。 #!/usr/bin/env ruby require 'redis-
Rails3でCSRF対策としてApplicationControllerにデフォルト指定されるprotect_from_forgeryですが、実際のところ何をやっているのかわからなかったのでコードリーディングしてみたメモ。 環境 Mac OS X 10.8.2 ruby-1.9.3-p125 rails-3.2.9 処理の流れ 0. ApplicationControllerに下記の指定がされているところから始まる class ApplicationController < ActionController::Base protect_from_forgery end 1. まずprepend_before_filterでverify_authenticity_tokenをbefore_filter郡に突っ込む # File actionpack/lib/action_controlle
Railsで作られているサービスとおもわれるbasecampやgithubはassetsファイルをアプリケーションサーバとは別のCDN(akamaiやCloudFront)サービスから配信している。 CDNに配置する事のメリットとして世界中のEdgeサーバからassetsを配信できるのでどこからアクセスしてもページロードが速い事が一番大きいが、 副次的な効果として事前にassets:precompileすることが可能なためcapistranoでのdeploy時にprecompileしない戦略を取ることによって大幅にdeploy時間を短縮できるメリットがある。 (assetsをgit等ににコミットしてしまってprecompileせずにdeployする戦略もあるがコミットログが汚くなるため避けたい) 今回はasset_syncというgemを使ってS3にassetsを配置しつつcapistran
capistrano-unicornはその名の通りcapistranoでunicornを扱う便利なgemです。 早速Railsのサービスに導入してみた。 試した環境は ruby-1.9.3p194 rails-3.2.9 capistrano-2.13.5 capistrano-unicorn-0.1.6 githubの使い方を参考にGemfileに下記を追加してbundle叩く group :development do gem 'capistrano-unicorn', :require => false end config/deploy.rbでrequireするのとdeploy:restart時のcollbackを登録 # set :application宣言より下に書かないとエラーになる require 'capistrano-unicorn' ... # hot deployを
PCとモバイルでドメインを別にしてサービスを提供することもあると思う。 その場合アプリケーションを別にしてもいいのだがモデルを共有したい場合もある。 そういう時はconfig/routes.rbでconstraints指定をしてrequestされたhost名でコントローラを出し分ける。 新規Railsアプリを作成して、名前空間付きで同名のコントローラを生成する。 $ rails -v Rails 3.2.9 $ rails new yahoo $ cd yahoo $ rails generator controller pc::sports $ rails generator controller mobile::sports routes.rbにconstraintsブロックを追加してhostの設定をする。 Yahoo::Application.routes.draw do const
環境 rails 3.2.8 ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-darwin11.4.0] actionmailer 3.2.8 rails3のaction mailerでメールを送る際にエクセルを添付したいケースがあると思う。 Rails Guideにならって書くとこうなる。 # -*- coding: utf-8 -*- class TestMailer < ActionMailer::Base default from: "[email protected]" def test_email attachments['test.xls'] = File.read('/tmp/test.xls') mail(:to => "[email protected]", :subject => "a mail
emacsのオートインデントなんてスペースでもタブでもどっちでもいいと思ってたけどCVSにアップした時に字崩れするのでスペースで統一することにした。 .emacsに以下を追加すればOKぽい。 ;; オートインデントでスペースを使う (setq-default indent-tabs-mode nil)
Rails3といえばasset pipeline。 賛否両論ありますが僕はそのコンセプトが好きです。 ただ欠点があってCPUの性能が低いマシン(EC2 smallインスタンスなど)ではasset precompileがくそ遅い。 仕事で運用しているあるサイトでは大体150秒くらいかかってしまっている。 $ bundle exec rake RAILS_ENV=production RAILS_GROUPS=assets assets:precompile command finished in 147997ms Rails4の目玉機能としてこのasset precompileが高速化されるらしいが、この高速化体験をrails3でも試せるのがturbo-sprockets-rails3らしい。 さっそく試してみた。 Gemfileに追加 $ vi Gemfile gem 'turbo-spr
最近会社でプロジェクトメンバーにソースコードレビューしてもらう習慣ができました。 自分のソースコードをリーダー・後輩にレビューしてもらったんですが自分のコードを晒す事と人のコードを読む事に勝る勉強はない。 それで今回は一つの指摘点にスポットを当ててみた。 //これって引数の値に変更がないのならconst付けたほうがいいんじゃないでしょうか? void func(int x) { // 実装 } そもそもconstを付ける意味って? オブジェクトの場合 無駄なコピーをしないために参照渡しをする。 そのときに渡した値に変更を加える関数かどうかでconstを付けるか付けないかが決まる。 void func1(std::string str) { // sはstrに値をコピーする。(コピーコンストラクタが呼ばれる) // strは値を変更する事が出来る // strの値を変更してもsにはなんら影響
apacheモジュール内でwebAPIを呼んでXMLを解析する必要があるため、C/C++で利用できるXMLパーサを調べてみた。 Cだと expat libxml2 C++だと tinyXml Xerces などなど他にもさまざまなライブラリがあるようだが今回はlibxml2を使ってパースしてみる事とした。 XMLの知識に乏しいのと C言語が苦手なのと ライブラリのAPIが多すぎて などが重なってかなり苦戦しました。 でもXpathが使えるのは便利だなあと思った。 こちらの方のコードを参考に作らせていただきました。 yahoo!掲示板のRSSのitem要素を出力するだけのプログラム #include <stdio.h> #include <libxml/xmlreader.h> #include <libxml/xpath.h> enum Status { Success = 0, Fail
素のXMLファイルからxsdやDTDといったXMLスキーマを自動で生成するツールが欲しかったのでwebで調べてみた。 フリーで今でもメンテナンスされていそうなのはTrangというツールしか見つけられなかった。 日本語訳されたページ 使い方はシンプルで以下のようなコマンドを打つだけでスキーマを生成できる。 java -jar trang.jar sample.xml sample.dtdオプションを指定しない場合は2つの引数の拡張子を見てファイルを判断するような事がマニュアルに書いてあった。 1つ目の引数がソースファイルで2つ目の引数が生成されるファイルになる。 sample.xml <?xml version="1.0" encoding="UTF-8" ?> <ResultSet xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
perlを本気で勉強しようと思い、emacsを使った便利な設定をwebからリストアップしてみた。 perltidy インデント整形ツール。 選択したリージョンを一気に整形してくれるので、昔誰かが作ったインデントなしのプログラム等を一気に整形してくれる。 (defun perltidy-region () "Run perltidy on the current region." (interactive) (save-excursion (shell-command-on-region (point) (mark) "perltidy -q" nil t))) (defun perltidy-defun () "Run perltidy on the current defun." (interactive) (save-excursion (mark-defun) (perltidy-r
emacs上で使えるshell環境は shell eshell shell-command などなど色々あるんだけど、表示がおかしかったりとしっくりくるものがなかなかなかったんだけど、 ansi-termというのを発見した。 これはすごい。なにがすごいってemacsの中で普通にzsh,bashが動く。 設定はまずこのページのEmacs内でターミナルをトグルで呼び出す(shell-toggle)を参照する。 Ubuntu Weekly Recipe:第38回 ターミナルソフトウェアにこだわる(2)|gihyo.jp … 技術評論社 注意点として (load-library "~/.emacs.d/shell-toggle-pathed.el") // pathedじゃなくpatchedに修正 これだけだとelscreenと併用してる場合elscreenのスクリーン切り替えができなくなるのでこ
このページを最初にブックマークしてみませんか?
『hakutoitoi.hatenablog.com』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く