ワシはワシが育てる

週刊少年ジャンプと任天堂のゲームが三度のメシより好きです。

iOSでページバック時にアニメーションがカクつくときの対処法

View構造が複雑なページでBackボタンや「popViewControllerAnimated」を呼び出した時にアニメーションがカクつく事があります。 対処法は簡単でviewWillDisappearに以下の二行を追加するだけです。 - (void)viewWillDisappear:(BOOL)animated { [super viewW…

普通のCSSボタンとinputボタンのサイズを揃える方法

input type="submit" value="hoge"のようなinputボタンと普通にCSSでスタイリングしたボタンのサイズが合わなかった時のメモ。 inputにはデフォルトで値が設定されているので、それらを解除します。 解除が必要なプロパティは以下のものがあります。 border …

iOSでアプリの許可情報をリセットする方法

iOS

連絡先などの許可状態に合わせて画面を切り替えたいような場合、一度許可・不許可を設定してしまうと、「まだ設定されていない状態」に戻す方法がないかと調べたのでメモ。 アプリをアンインストールするだけだと、設定されていない状態に戻すことが出来ませ…

EventBusを使ってAndroidでNSNotification的なものを実装する

iOS開発を2ヶ月ほど行った後、再びAndroidに戻ったのですが、NSNotification(クラスをまたいだ通知)をAndroidで実装するのがデフォルトのままだと面倒だなーと感じていました。 そこでライブラリを探したところ、EventBusが非常に便利だったので紹介します。…

GridViewにfooterViewをつけてローディングを表示する

Androidで無限スクロールする場合、追加読み込み発生時にProgressBarをfooterViewに付与するのが通常ですが、通常のGridViewにはfooterViewをつけることができません。 そこでfooterViewをつけられるカスタムのGridViewがオープンソースとしていくつか出てい…

AndroidでViewの移動アニメーションを行う

AndroidのAnimationにはいくつかの種類があり、Viewの座標を移動するためのものとしてTranslateAnimationが存在します。 しかしこのアニメーションにはバグがあるようで、アニメーションの終了後に初期状態の座標に戻されてしまいます。 そのため個人的には…

Railsで静的ファイルをS3に置くならasset_syncがオススメ

RailsのアプリケーションでprecompileしたassetファイルをAmazon S3から読み込みたい、という時にはasset_syncというgemがオススメです。 asset_syncの設定後、precompileをすると対象のS3バケットにCSSや画像などの静的ファイルが自動でアップロードされ、…

AppCodeでlinker command failedが出た場合の対処法

iOS開発でのコーディングにはXcodeではなくAppCodeを使用しておりますが、しばしば「linker command failed」のエラーに悩まされています。 cocoapodsの依存ライブラリが存在しないよというエラーなのですが、ほとんどの場合キャッシュやプロジェクトファイ…

Rails4.2にあげるとローカルIPでアクセスできない問題

Rails4.2にバージョンアップ後、いつも通り起動しローカルIPを通じてスマホからアクセスしようとしたところつながらない状況に。 Railsのバージョンアップが原因だとほぼ特定していたのでRelease Noteを見ると、Rackの変更によって、デフォルトではlocalhost…

Unicorn+NginxでリバースプロキシしたときにFacebookのOAuthでつまづいた

RailsアプリをUnicornで動かし、Nginxをリバースプロキシとして前面に置く構成。 その際にFacebookのOAuthを利用すると「指定されたURLは、アプリケーションの設定で許可されていません。」というエラーメッセージが表示されてしまいました。 原因はリバース…

UIActionSheetのキャンセルボタンが効かなくなる問題の対処法

iOS8 SDKを使用しているとiOS7でキャンセルボタンが効かなくなることがあるようで、開発中のアプリで実際に何度か遭遇しました。ちなみに毎回発生するわけではありません。 対処法はUIActionSheetのshowInViewの対象をviewからview.windowに変更するだけです…

iOSをほぼ1ヶ月毎日やりつづけた感想(AndroidやJSとの比較とか)

先月からiOSを始めてほぼ1ヶ月毎日続けた感想です。 まだ不慣れなところも多く未熟な意見なので参考程度に捉えてください。 Objective-Cは割りとすぐ慣れた 初めは妙な型名とかメソッドの書き方とか、iOSの長ったらしい構文に強い先入観がありましたが、案外…

RubyMineが最強すぎて感動する

最近Qiita界隈でRubyMine特集がされていたこともあって、RubyMine使ってみたら最強すぎて感動しました。 理由は色々ありますが書くのが面倒なので箇条書きにします。 補完が想像以上に強力 gemでも、環境依存ファイルの定数でも補完してくれます エディタが…

Railsのafter_commitでcreateやupdateなどを判別する

sidekiqで非同期に通知を送るときにハマったこととその対処法 - ワシはワシが育てる 上の記事でも触れていたことですが、after_commit時のレコードからcreate,update,destroyなどのアクションを判別する正規の方法を見つけたので書きます。 以前の記事を書い…

アクションバーのカスタムレイアウトで余白を付ける

アクションバーのアイテムにカスタムレイアウトを設定するには以下のようにします。 <item android:actionLayout="@layout/hoge" /> ところがカスタムレイアウトは、素の状態では他のアイコンと並べると余白がなく窮屈になってしまいます。 原因はアクションバーのアイテムは32dpまでしか描画範囲しかない</item>…

AndroidのGoogle AnalyticsでFragmentのトラッキングをする

FragmentManagerを用いてFragmentの再利用時にも適用できるように、onStartをオーバーライドするのが通例なようです。 @Override public void onStart() { super.onStart(); tracker.set(Fields.SCREEN_NAME, "フラグメント名"); tracker.send(MapBuilder.cr…

初めてDrawerLayoutを使った時のメモ(メニューの動的切り替えなど)

巷でハンバーガーアイコンと呼ばれるDrawerLayoutを初めて使った際に生じた問題の解決法についてまとめてみました。 Fragmentによるページの挿入 FragmentTransactionを利用します。 例えばidがhogeのViewに対してFugaFragmentのFragmentを挿入する場合は以…

PagerSlidingTabStripをカスタマイズする

AndroidアプリでタブのインジケータとViewPagerのスワイプを同期できるPagerSlidingTabStripをカスタマイズした時のメモ。 Githubのスター数や使用実績を見ても完成されたライブラリかと思いましたが、いくつかこちらの要件に沿わない箇所がありました。 ま…

Android実機のSharedPreferencesを編集する

ターミナルで「adb shell」を入力し、「run-as パッケージ名」から「shared_pref」フォルダに入り、対象のファイルをコマンドで操作する。

Android StudioのBuild Variantsで別のアプリをインストールする

build.gradeのandroid→buildTypesにてビルド環境を定義します。 デバッグ時とプロダクション時で別のアプリを保持する場合には以下のようにパッケージ名のsuffixを追加します。 android { buildTypes { debug { applicationIdSuffix ".debug" } } またアプリ…

Google I/O2014のAndroidアプリで学習する

Android系のプロジェクトはこれまでやってきたRubyやJavaScriptと比較するとオープンソースが活発ではなく、規模感とクオリティの高いプロジェクトを見られる機会が少なく感じます。 実装の作法は自分で一から構築するよりも高度なプロジェクトを真似したほ…

Androidの新UI・Recyclerviewを使う

Android Lのdeveloper previewで公開されているRecyclerViewですが、ライブラリを追加すれば既存のバージョンでも使用できます。 名前の通りViewのリサイクルができることが売りで、ViewHolderをデフォルトでサポートしたりとよりパフォーマンスを意識した作…

いつの間にかはてブのホットトピックとgunosyに載ったらしい

アクセス解析見ると局所的に妙に伸びていて、どうやらはてブのホットトピックとgunosyに載ったみたいです。 いずれのサービスもユーザーとして傍観していると掲載されているサイトは羨ましいなーと思っていたのですが、いざ自分がそうなってみると一時的にア…

AndroidでアクションバーのSearchViewを画面一杯に表示する

アクションバーのSearchViewを横幅一杯に表示したい場合、itemにカスタムレイアウトを設定する必要があります。 スマホで見た場合は単にレイアウトでlayout_width=match_parentを指定すれば問題ありませんが、タブレットで見ると横幅一杯になりません。 どう…

Android Studioショートカットメモ

最近Android開発を業務で行うようになり、Android Studioとにらめっこする毎日なので便利なショートカットを備忘録がてらメモ。 ファイル名で検索&移動…Command + Shift + o クラス名で検索&移動…Command+o コマンドを検索&実行…Command + Shift + a 単語補…

sidekiqで非同期に通知を送るときにハマったこととその対処法

Railsの非同期処理で最も人気のあるライブラリの一つであるSidekiqでハマったこととその対処法について。 とあるテーブルのレコードが保存されたタイミング(after_createなど)でobserverがそれを拾い、sidekiqに通知タスクを投げた際、sidekiqがそんなレコー…

middlemanの画像URLの参照に盛大にハマる

静的サイト生成に大いに貢献してくれるmiddlemanですが、CSSのimage-urlで盛大にハマったのでメモ。 buildする際、assetファイルにhashをつけるとCSSのimage-urlがおかしな場所を参照するという事態に。 // middlemanでの記述 .hoge { background: image-url…

マリオカート8購入した

誰に対して需要があるのか全く不明ですが、マリオカート8を早速ダウンロードしてプレイしています。 秒間60fpsのヌルヌル操作に美麗なグラフィック、ネットワーク環境も良しとあって非常に楽しいです。 やはり任天堂の大作タイトルは安定した面白さがありま…

Railsのbefore_saveで値にfalseを設定する時の注意

モデルのbefore_saveで特定のカラムの状況に応じて、booleanの値を設定したい場合、値にfalseを設定してメソッドを終了すると、save自体がエラーなってしまいます。 before_save :hoge def hoge if self.value == 1 self.boolean_data = false end end 上の…

marvericksにすぐメモリを持っていかれる

起動した時点でメモリを6GBほどもっていかれることもままある、メモリバカ食いのmarvericksですが、ある日メモリがみるみる減り、アプリケーションを軒並み閉じてもあまりメモリが開放されず、アクティビティモニタを見るとこんな具合に。 どうもmarvericks…

springのバージョンでハマったら

Rails関連のコマンドを爆速にしてくれる便利なspringですが、バージョンアップ時にハマったのでメモがてら。 ある日、何も考えずbundle updateした後、springコマンドを使用したらこんなメッセージが。 There is a version mismatch between the spring clie…

AngularJSで複数の同期処理を行う

AngularJSにはpromise/deferredの実装を$qを使用することによって行います。 これによってコールバックを待って次の処理を行うことができ、また複数の処理の場合も var get1 = $http.get('/'); var get2 = $http.get('/hoge'); $q.all([get1, get2]).then(fu…

AmazonのProduct Advertising APIで503エラーになる件

Amazonで商品情報や検索結果を返してくれるProduct Advertising APIについてですが、なぜか503エラーが10%位の確率で発生します。 初期状態で1秒1回まで、1時間に2000回の制限までとのことですが、これを守っても、それどころか数時間空けても503エラーが一…

AngularJSで$scopeの配列を空にする方法

タイトルだけを見ると何言ってんだこのアホと思われるかもしれませんが、案外ハマります。 というのもAngularJSでは$scopeにそれぞれ一意のhashkeyが割り振られており、単純に配列を以下のようにしても思うように動作しません。 実際には空になっているので…

個人的に考えるビジネスロジックをModelに書く意味

一昔前にはMVCモデルではビジネスロジックをコントローラーに書くのかモデルに書くのか議論になりましたが、おそらく潮流としてモデルに書くのが暗黙の了解になっているかと思います。 とはいえMVC覚えたてのうちはどうしてもその意味がわからず、Controller…

IEでのbox-shadowのぼかしは偶数にする

CSS

chromeなど他のブラウザでは正常なのにIEではbox-shadowのぼかしが微妙に下にずれる… と悩んでおり色々調べても解決できず数値を色々いじっていたら治りました。 どうやら要因はぼかしが奇数だったことなようで、奇数pxの場合、上に表示されるべきぼかしが下…

Railsのmigrationの扱い方

Railsでデータベーススキーマを定義するmigrationはアプリケーションを作り始めた当初こそ便利ですが、継続的に開発してくると扱いに困ることがしばしばあります。 既存のテーブル構造を変更する度に逐一定義ファイルを作成していると、気づけばmigrationフ…

Elasticsearchを勉強中

Mroongaのテスト結果から大規模データを全文検索できるデータベースを探してみたところ、Elasticsearchが最近注目されているとのことで勉強しています。 海外ではYelpやfoursquareといった大規模サービスでも活用されているようで、要件は使い方次第で満たせ…

Deviseでパスワード変更時にログアウトしない方法

Railsのデファクト認証システムの一つであるDeviseにおいて、デフォルトではログイン中にパスワードを変更するとサインアウトされてしまいます。 原因としては保持しているセッション情報と、更新されたデータベースとの整合が取れずにサインアウトされてし…

『RailsでWebSocketを使う』の続き

過疎なこのブログで地味ながらもはてブされている『RailsでWebSocketを使う』の続きというか感想です。 この記事を書いてからレガシーブラウザにも対応しているFayeも含め、Railsを用いたリアルタイム処理について試行錯誤したのですが、結論としてRailsでリ…

壊れたHTMLに対するNokogiriの扱いでハマる

RubyによるスクレイピングといえばNokogiriが有名ですが、壊れたHTMLをパースすると自動で修復してくれるせいで大変困っております。 例えばこんな感じのHTMLの場合、ブラウザでは閉じていない<p>タグが無視されるのに対して、Nokogiriでは整合性を取ろうとする</p>…

アルゴリズム設計にはXmindがオススメ

ある程度複雑なプログラムを書く場合、設計概念なくしてプログラムをゴリゴリ書き始めると詰むのは大方経験されているかと思います。 そこで僕の場合、プログラムを眺めて直感的に概念を共有できなければ、とにかくXmindでマインドマップを作って仕様を設計…

Railsのi18nでタグを仕込む

ぶっちゃけ公式ドキュメントが平易な英語で丁寧に説明してあるので、こっちを1度目を通せば事足りる話ですがメモがてら。 公式ドキュメント: http://guides.rubyonrails.org/i18n.html デフォルトで国際対応の文言はタグがエスケープされてしまいますが、そ…

Rubyでマルチスレッド・マルチプロセスのプログラムを書くならParallelが便利

Rubyでは比較的簡単にマルチプロセス、マルチスレッドのプログラミングができますが、それでもやや煩雑な書き方になってしまいます。 それらの処理を簡単に書くためのライブラリとしてparallelがオススメです。 ループの前に少し構文を加えるだけで簡単にマ…

Deviseでログイン・ログアウト後のflashメッセージを削除する

Railsの認証ライブラリ筆頭であるDeviseはセキュアで高度な認証を肩代わりしてくれる一方、中の挙動を把握していないと扱いにハマることがしばしばあります。 Deviseはi18nに対応しており、ログイン・ログアウトなどのアクションを行った際にflash[:notice]…

macで入力モードが視覚的に分かるアプリケーション

プログラムを書いているとコメントアウトに日本語、ソースに英数字と頻繁に切り替えますが、入力モードを頻繁に間違えることが悩みの種でした。 そこで視覚的に入力モードを知る術がないかと思い、アプリケーションを探すことに。 いくつか試しましたが、一…

MySQLで既存のインデックスにunique制約を付与する

単なるメモ書きです alter table テーブル名 add unique(カラム名)

Sublime TextのVintageがいい感じ

Rails開発をメインで行っているので、これまでRailsに適したエディタはひと通り試してきました。 まずは定番のVimに、ちょっと前に流行したSublime Text、IDEとして優秀なRubyMineと言った感じです。 結局どれも一長一短で甲乙付けがたいので、別にどれでも…

スーパーマリオ3Dワールドのサウンドトラックが届いた

12月上旬辺りにクラブニンテンドーで申し込んでいたスーパーマリオ3Dワールドのサウンドトラックがようやく届いたので、早速iTunesに入れて作業用BGMにしています。 ところでもうすぐドンキーコングトロピカルフリーズ)が発売でやる気満々ですが、いかんせん…

jbuilderをコントローラー内で使用する

jbuilderはRailsのJSONジェネレーターのデファクト的なライブラリでAPI作成には欠かせません。 jbuilderはデフォルトでpartialの機能が備わっているので、一部機能を切り離したい時にはpartialを使用するのが通例なようです。 ただしViewのpartialはクラス内…