u16suzuの blog

u16suzu のブログです。

よく使うクエリパラメータ系のメソッドを使い回せるようにする

ページネーションがあるAPIを作るとき毎回書くのが大変なので共通化した。 base_controller.rb に書いておくと、他のコントローラから使い回せて便利。 def params_page params[:page].try(:to_i).presence || 1 end def params_site_ids params["site_ids"].tr…

自分で作ったクラスで Enumerable モジュールを include して使う

class CatList include Enumerable def initialize(*cats) @cats = cats end def each for v in @cats yield v end end end cats = CatList.new( "mike", "cha", "tora" ) p cats.map(&:upcase) # => ["MIKE", "CHA", "TORA"]

セマンティックバージョニング2.0.0

仮にバージョンを A.B.C としたとき A: メジャーバージョン 後方互換性を持たない機能追加 B: マイナーバージョン 後方互換性を保つ機能追加 C: パッチバージョン 後方互換性を保つバグ修正 参考 セマンティック バージョニング 2.0.0

セッターを定義する

何も代入していないけれどもw class Man def age=(value) p "I am #{value}years old" end end Man.new.age = 3 # => "I am 3years old" Rubyをまたやることになりそうなのでリハビリ中。

あるクラスのインスタンスメソッドの一覧を取得する

class Human def say p "hello" end end p Man.instance_methods(false) # => [:say, :age=] 任意のクラスが include しているモジュール一覧を表示 p Array.included_modules # => [Enumerable, Kernel]

ContainerViewController のスニペット

import UIKit class ParentViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() } // コンテナビューコントローラに追加 func addViewController(vc: UIViewController){ self.addChildViewController(vc) vc.view.frame…

開発時のみ実行するコードを実現するマクロ

微妙に objc の時と変わった。 毎回、手でやるのがたいへんな画面操作を、自動でやりたいときなどに、この中に組み込んでいたりする。 #if DEBUG // こんなかんじで、 画面遷移を自動でさせちゃう。 let vc = EntryViewController.instantiateFromStoryboard() vc.e…

swiftのコピペコード置き場

UILabel 開発中のデバッグでたまにコードで置いちゃう。 let label = UILabel.init(frame: CGRectMake(0, 100, 0, 0)) label.text = "Test Label" label.sizeToFit() view.addSubview(label) イニシャライザの UILabel.init(frame: frame) は UILabel(frame: …

Swift で enumを定義する

以下のように enum で環境を定義して、そこにAPIのBase URLを持たせることをよくする。 enum Env: Int { case Local case Staging case Production func baseURL() -> String { switch(self) { case .Local: return "http://localhost:3000" case .Staging: re…

swiftでテーブルビューの delegate と datasource を書く

// MARK: - UITableViewDelegate func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { tableView.deselectRowAtIndexPath(indexPath, animated: true) } // MARK: - UITableViewDataSource func tableView(tableView…

ES6について WebDB Press でざっと斜め読みした var ではなく let を使うことでブロックスコープを使える for loop でも let を使うと良い 関数定義にアロー演算子を使えるようになった クラスが使えるようになった constで定数定義できる

会社の人と飲んだ 仕事を早めに切り終えて, 会社の同僚5人と久しぶりに飲みに行った。 自然と話題は会社のことや仕事のことになった。 普段なかなか話せないような、 思っていることをざっくばらんと話せる場があることはとてもいいことだ。 冷や汁を初めて作っ…

今日は rake db 系のコードを読んでみた。 いつもお世話になっているコマンドなので, 内部の処理をあまり理解せずに使っていることに違和感を感じていた。 とくにいくつか,名前がにていて何が異なるのかがわからないコマンドがいくつかあった。 rake db 系のコ…

今日も Rails Guides を少し読み進めた。 Railsが提供している楽観的ロックについて。 楽観的ロックは複数の異なるプロセスが1つのレコードを同時に編集することを許可する。 そして,レースコンディションが起きたとき ActiveRecord::StaleObjectError を投げる…

今日もコツコツと Rails Guide を読んでいる。 keyword でgroup by して,それぞれの個数を求める。 Trend.group("keyword").count 4日連続で何かしらの勉強ができている。 いいかんじ。 ただ、寝不足でめっちゃ眠いですね!

where メソッドに between句を range で指定する

今 Rails Guides の ActiveRecordのところを読んでいる。 Hashで range を指定することで, between 句が書ける事を知った。 Client.where(:created_at => (Time.now.midnight - 1.day)..Time.now.midnight)

はてぶをスクレイピングして遊んだ

今日は nokogiriを使って, はてなブックマークのプログラミングカテゴリをスクレイピングしてみた.

たまにはRailsのIssueを読んでみる

今日はこのIssueを読んでみた ActionController::Parameters#== does not works as expected · Issue #21032 · rails/rails · GitHub hash = { foo: :bar } params = ActionController::Parameters.new(hash) params == hash #returns false あるHashから生…

おすすめのログ系コードスニペット

// @""をはじめから入力してある NSLog NSLog(@"%@", <#object#> ); // メソッド名と行数を表示 NSLog(@"Function: %s, Line: %d", __PRETTY_FUNCTION__, __LINE__ ); // コールスタックを表示 NSLog(@"%@", [NSThread callStackSymbols]);

画面タップでキーボードを隠す

ios

viewDidload あたりに以下を追加 // 背景をタップしたら、キーボードを隠す UITapGestureRecognizer *gestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(hideKeyboard)]; [self.view addGestureRecognizer:gesture…

UIScrollViewのコンテントオフセットとコンテントインセットについて

公式ドキュメントによると コンテントオフセット contentOffset The point at which the origin of the content view is offset from the origin of the scroll view. あらかじめxポイントスクロールした状態にしておく時に使う。 offset の意味は埋め合わせ、…

正規表現による検索

// 正規表現オブジェクトを作成 NSRegularExpression *regularExpression = [NSRegularExpression regularExpressionWithPattern:@"reg_exp" options:NSRegularExpressionCaseInsensitive error:nil]; NSString *targetString = @"target string" // 検索実…

デバッグ用のマクロ

iOS

#ifdef DEBUG #define DLog(fmt, ...) NSLog((@"%s:%d\n " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); #else #define DLog(...) #endif

ファイルのフルパスを取得する

$ find `pwd` -name 20150108.md /Users/suzuki_y/memoWork/00_daily/2015/daily/20150108.md refer How can I list files with their absolute path in linux? command line - How can I list files with their absolute path in linux? - Stack Overflow

NSDateを GMT+9 で表示する

NSDateFormatter *f = [NSDateFormatter new]; f.timeZone = [NSTimeZone timeZoneWithAbbreviation:@"JST"]; f.dateFormat = @"yyyy/MM/dd HH:mm:ss Z"; NSLog( @"%@", [f stringFromDate:[NSDate date]] );

定数にstructを使う

ヘッダファイル extern const struct LocalNotificationAttributes { __unsafe_unretained NSString *weeklyWork; } LocalNotificationAttributes; mファイル const struct LocalNotificationAttributes LocalNotification = { .weeklyWork = @"LocalNotific…

画像ファイルの名前に @2x をつけるスクリプト

# rename.rb # ex. hoge.png => hoge@2x.png require 'pathname' require 'fileutils' Dir.entries('.').each do |entry| if Pathname(entry).extname == '.png' FileUtils.mv entry , Pathname(entry).sub_ext('@2x.png') end end

Mechanizeから投稿

Mechanizeから投稿しました。

プロセスをバックグラウンドにするコマンド

vimとか微妙に重いので ctrl+z をたまにつかう ctrl+z : 実行中のプロセスがサスペンドになる fg : サスペンドしたプロセスを実行する bg : サスペンドしたプロセスをバックグラウンドで動かす jobs : プロセスリストを表示する & : バックグラウンドで動か…

json形式のファイルからインポートする

rails admin だと json形式でエクスポートできるけど, インポートはできない. s = File.read("./site.json", :encoding => Encoding::UTF_8) JSON.parse( s ).each { |elem| s = Site.new(elem); s.save }

Rubyの変数 Ruby variable

ローカル変数 hoge インスタンス変数 @hoge クラス変数 @@hoge グローバル変数 $hoge

deploy時にマイグレーションもする

deploy時にマイグレーションもする. $ be cap deploy:migrations これをやらないと unicorn の restart が必要になってしまうので DBスキーマ更新するときはやった方が良い.

単語単位で削除する

zsh

.zshrc bindkey "^w" backward-kill-word # ctrl+w で 1単語削除

.ssh/config を編集するコマンドを追加する

以下をzshrc に追加する sub は sublime text の起動コマンド alias editssh="sub ~/.ssh/config"

キャッシュをクリアする

Rails コンソールで memcached とかのキャッシュをクリアする方法 ActionController::Base.cache_store.clear ではなくて Rails.cache.clear をつかう. どっちでもクリアできるけど, 前者を使ってしまうとすごく遅い.

diff コマンドと patch コマンドを使ってみた

diffのみかた $ cat hoge.txt 1 3 4 $ cat fuga.txt 1 2 3 4 $ diff hoge.txt fuga.txt 2c2 < --- > 2 1つめのファイル : hoge.txt 2つめのファイル : fuga.txt hoge.txt の2行目を fuga.txtの2行目 にchange する. < : 前のファイルに追加 > : 後のファイル…

HTTPのステータスコード

2XX : 成功 200 : OK 201 : Created 204 : No Content 3XX : リダイレクション 4xx : Client Error クライアントエラー 400 : Bad Request リクエストが不正 定義されていないメソッドを使うなど、クライアントのリクエストがおかしい場合に返される。 401 :…

macにVagrantをインストールしてみる

Vagrantは VirtualBox をCUI からつかえるようにするツール 方法 VirtualBoxをダウンロードしてインストール https://www.virtualbox.org/wiki/Downloads Vagrant をダウンロードしてインストール http://www.vagrantup.com/downloads.html インストールでき…

素のRackを使ってみる

simpleapp.rb class Hoge def call(env) [200, {"Content-Type" => "text/plain"}, ["Hello, world!"] ] end end simpleapp.ru require './simpleapp' run Hoge.new 起動すると Rails でおなじみの WEBrickが起動する. ポート番号は 9292 $ gem install rack…

drb ( Distributed Ruby) のスパイク

server.rb require 'drb' obj = ["drb", "server", "dog", "cat", "rat"] DRb.start_service( "druby://localhost:8787", obj ) DRb.thread.join client.rb require 'drb' DRb.start_service obj = DRbObject.new_with_uri("druby://localhost:8787") obj.ea…

Ruby でマルチスレッドプログラミングなど

一番シンプルな例. forkしてみる. th = Thread.fork do p 33 end th.join マルチスレッドで出力 def multi_thread threads = [1, 2, 3, 4].map do |e| Thread.fork(e) do |i| p i end end threads.each {|th| th.join} end multi_thread Process pid = fork …

アプリが初回起動かをチェックするメソッド

- (BOOL)isFirstLaunch{ NSUserDefaults*ud = [NSUserDefaults standardUserDefaults]; NSString *key = @"isAlreadyLaunched"; NSString *res = [ud objectForKey:key]; if(! [res isEqual:@"Yes"]){ [ud setObject:@"Yes" forKey:key]; [ud synchronize]; …

github のコメント略語

MUST : 必ず直すべき IMO : 自分なら直すけどどう? 緩やかな指摘(In my opinion) IMHO : 丁寧なIMO (In my humble opinion) nits : 細かい指摘(nitspick)

FactoryGirlsメモ

FactoryGirl.build(:user) : オブジェクト生成のみ. DBに保存しない. FactoryGirl.create(:user) : オブジェクトを生成し, かつDBに保存する. 参考 http://o.inchiki.jp/obbr/159#toc_8 http://blog.livedoor.jp/sasata299/archives/51931175.html

Railsのログについてのメモ

カスタムロガーを作ってそこに出力する 以下の方法で専用のログファイルを作成し、そこに出力させることができる configの production.rb に追記 config.hoge_logger = Logger.new( 'log/hoge.log', 'daily' ) ログをとりたい部分に追記する。 タイムスタンプ…

[cui] カレントジョブをバックグラウンドにする

ctrl+z : fore ground jobを back groundにする fg : 最後にバックグラウンドにした jobを fore groundにする fg JOB_ID : 指定した job を fore groundにする jobs : jobの一覧を表示. JOB_IDを確認できる

Create json from hash with using Ruby

require 'json/pure' h = {'dog'=> 'bow', 'cat'=> 'meow'} puts JSON.pretty_generate(h)

sizeToFit

ios

ビュー自身のsizeをコンテンツのサイズにあわせる. [self sizeToFit];

横浜へなちょこiOS勉強会#30 に行ってきました.

昨日 2014/1/25(土) にミューザ川崎にて横浜へなちょこiOS勉強会#30が開催されまして, 久しぶりの勉強会に行ってきました. メインの発表は次のようなものでした. Xcodeと自作スクリプトについてのTIPSなど(@haranicleさん) こちらの記事の補足みたいな感じで…

TestFlightのMacクライアントが有能だというお話

TestFlightのクライアントアプリを入れて起動しておくと, Xcodeでアーカイブしたときに自動で検出してくれます. TestFlight's Desktop App http://www.testflightapp.com/desktop アーカイブ後ノーティフィケーションセンターでポップアップが出現するので, …