開発
ActiveAdminをいろいろカスタマイズしてるのでそのメモです。 セルに表示するコンテンツを増やす セルにはもともとデータが1つしか表示されませんが、+で増やすことができます。 ActiveAdmin.register Post do ... index do column :id column :content col…
テストメール用にmailcatcherを導入しました。command not foundと言われてちょっと焦る。。。rbenvを使ってる場合はrbenv rehashが必要です。 $ gem install mailcatcher $ mailcatcher zsh: command not found: mailcatcher $ rbenv rehash $ mailcatcher …
知らない間に:confirmオプションは非推奨となり、dataで記述するようになってました。 <%= form_for(@task) fo |f| %> <div class="field"> <%= f.text_field :content %> </div> <div class="actions"> <%= f.submit "変更", data: { confirm: "ほんまに変更するで?"} %> </div> <% end %> それにしても:confirm…
HTMLEntitiesを使ってエンコード/デコードします。 gem 'htmlentities' HTMLEntities.new.encode("エンコードしたいやつ😃") HTMLEntities.new.decode("デコードしたいやつ♡") 参考 How do I encode/decode HTML entities in Ruby? - Stack Overflow
pluckで要素を2つ選ぶと配列の配列が生成されますが、このままだとちょっと扱いにくいのでHashにします。 a = User.order(:user_id).pluck(:user_id, :name) -> [[1, "taro"], [2, "jiro"], ...] 今回、user_idがユニークなのは保証されているので以下でOK…
select_dateでは受け取るパラメータを変更したい場合は、nameを変更する必要があります。 今回はgsubを使ってゴリゴリ置換で解決します(他にもっといい方法があるかもしれない)。 通常パターン select_date(Date.new) <select name="date_year" id="date[year]"> <select name="date_month" id="date[month]"> <select name="date_day" id="date[day]"> gsubを使って修正するパターン dat</select></select></select>…
Kaminariでページングを行う際、他のパラメータも追加したい場合はparamsオプションにハッシュを渡してあげればOKです。 基本的に現在のページのパラメータを引き継ぎたいことが多いのでこんな感じ。 <%= link_to_next_page @objects, "次ページへ", params:…
パスフレーズ入力するのが面倒なので削除することにしました。 一応名前を変えて保存。 $ mv ~/.ssh/id_rsa ~/.ssh/id_rsa.with_phrase パスフレーズなしで鍵を生成。 $ openssl rsa -in ~/.ssh/id_rsa.with_phrase -out ~/.ssh/id_rsa ちゃんと権限も更新し…
文字に枠を付けてくっきりさせます。 UILabelのカスタムクラスをつくってdrawTextInRectをオーバーライドします。 - (void)drawTextInRect:(CGRect)rect { CGSize shadowOffset = self.shadowOffset; UIColor *textColor = self.textColor; CGContextRef c =…
たとえば、次のようにcommunityとtopicにリレーションがあり、 RKEntityMapping *communityMapping = [RKEntityMapping mappingForEntityForName:@"HogeCommunity" inManagedObjectStore:managedObjectStore]; [communityMapping addAttributeMappingsFromDi…
Xcode6にしてからなにかと変更点が多くてヤキモキしております。 iOSシミュレータが表示されない場合は以下で解決します。 iOS Simulator -> Hardware -> Keyboard 「Connect Hardware Keyboard」のチェックを外します 以前はハードウェアもソフトウェアも両…
iOS8SDKの既知の不具合として認識されているようです。 iOS8SDKをiOS7上で動かしたときに発現します。 CellのcontentViewのサイズが変更されていないのが原因なので、UICellectionViewCellのサブクラスに以下のコードを追加して対応します。 - (void)setBoun…
文字列を暗号化する方法のメモ。今回は可逆暗号化が目的なのでblowfishを使います。 Security.frameworkが必要なので、Build Phasesで追加してください。 #import <CommonCrypto/CommonCrypto.h> // 文字列をblowfish暗号化する + (NSString *)encodeBlowfish:(NSString *)str { NSData *k</commoncrypto/commoncrypto.h>…
アプリ全体のデザインを崩さないためにも、アプリ内のWebViewでも積極的にカスタムフォントを使いましょう。 使用したいカスタムフォントがアプリ内に入っている場合とそうでない場合で方法が若干異なります。 (カスタムフォントがmplus-1c-medium.ttfの場…
iOSの違いでUIViewアニメーションの挙動が違うので注意が必要です。 とりわけ「iOS6では動くのにiOS7では動かない」といった状況に陥ります。 iOS7ではUIViewアニメーションに関して変更があり、viewがまだ表示されていない状態(viewDidLoad, viewWillAppea…
結局イタチごっこなのですが、、、脱獄対策のメソッドを書きました。 BreakThroughで脱獄回避のメソッドをすり抜けられちゃうので、BreakThroughそのもののチェックをしてみたり。 /* * 脱獄端末のチェック */ +(BOOL)isJailBreak { #ifdef DEBUG // デバッ…
ViewControllerがモーダルされたのかプッシュされたのか判定したい場合がしばしばあります。(例えば、モーダルのときは「閉じる」ボタン、プッシュのときは「戻る」ボタンに変更したいときとか。) if(self.presentingViewController != nil) { // モーダル…
単純にダイアログを表示するだけであればCCMessageBoxを使えばいいですね。 CCMessageBox("メッセージ", "タイトル"); ただ、ボタンのタイトルは「OK」で固定されてるし、delegateはnilで受け取れません。 そのため、ダイアログからさらにアクションを起こし…
Accounts.frameworkが必要です。 まあ、認証終わったあとにNSUserDefaultsにユーザIDなんかを保持しておくだけでもいい気がしますが、正式(?)な方法があるので一応メモしておきます。 ACAccountStore *accountStore = [[ACAccountStore alloc] init]; ACAcco…
ユーザとして、ダイアログが複数回出てくるのはかなりストレスに感じます。 UIAlertViewの表示チェックを行うことで、それを回避します。 -(void)showDialog { // ダイアログを表示中かチェックする for (UIWindow* window in [UIApplication sharedApplicat…
オブジェクトのZ値を変更したい場合、単純に int order = 100; node->setZOrder(order); としても変更されません。 一度addChildしたオブジェクトのZ値を変更する場合は、reorderChildを使って親オブジェクトから設定してやる必要があります。 CCNode* paren…
非ARCのプロジェクトにSBJsonなどのARC対応ライブラリを導入してビルドすると以下のようなエラーがでます。 This source file must be compiled with ARC enabled! Build Phases -> Compile Sources でCompiler Flagsを設定します。 エラーが出ている.mファ…
たとえば複数のオブジェクトをランダムでアニメーションさせたいときなどに、現在そのオブジェクトがアニメーション中の場合はキャンセルしたいです。 判定する方法はいたって単純。 void SampleScene::actionNodeAtRandom(CCNode* hogeNode) { if ( hogeNod…
例えば、HogeLayerの子供の中でCCSpriteにだけ処理をしたい場合は以下のように実装します。 CCArray* children = HogeLayer->getChildren(); for (int i=0; i<children->count(); i++) { if (dynamic_cast<CCSprite*>(children->objectAtIndex(i))) { // 処理 } } ただし、高価な方</ccsprite*></children->…
cocosbuilderでタイムラインを作成してアニメーションさせたとき、その終了時に処理を実行したい場合はCCBAnimationManagerDelegateを使います。 // GameLayer.h class GameLayer : public CCLayer , public CCBAnimationManagerDelegate // CCBAnimationMan…
シーン間で共通化しているもの、例えばゲーム画面にアクセスしたい場合、 // AppDelegate.h #include "cocos2d.h" USING_NS_CC; class AppDelegate : private cocos2d::CCApplication { CCNode *gameNode; // ゲーム画面 void loadGameNode(); public: AppDe…
XcodeでFacebookアプリ開発時に、特定の端末でFacebookログインでエラーが発生しました。 Domain=com.facebook.sdk Code=2 "The operation couldn’t be completed. (com.facebook.sdk error 2.)" UserInfo=0x17e904d0 { com.facebook.sdk:ErrorLoginFailedRe…
Game CenterのLeaderboardで小数を使ったスコア(例:12.3m, 123.45ptなど)を使用している場合、スコアの送信方法に少し戸惑ったのでメモします。 まず、iTunes ConnectにてLeaderboardの設定を確認します。 「Score Format Type」が Fixed Point - To 1 De…
Game Centerの挙動チェックをしていると突然、 「The requested operation has been cancelled or disabled by the user.」 のエラーが出てGame Center画面が立ち上がらなくなりました。 これはGame Center画面を3-5回キャンセルすると起こる事象らしく、サ…
Cocos2d-xで開発していると突然「'string' file not found」のエラーでビルドが失敗しました。 エラーを出しているのはCCDataVisitor.hというcocos2d-x内のファイル。原因がわからなすぎる…。 Objective-Cのコードと共存させるところで失敗しているとこのよ…