タグ

ブックマーク / waka.hatenablog.com (15)

  • MacからLinuxに乗り換えた - yo_waka's blog

    そろそろ家のMacbook Air (2013 Mid)が限界にきてたので、Thinkpad X1 Carbon (Gen 5th)を買ってArchLinux入れた。 この時期は毎年Lenovoのオンラインショップで40%以上ディスカウントされてるらしく、SSD以外モリモリでつけても17万円を切って財布にやさしい。 久々のLinux環境だけど、GUIも非常にサクサク動いてて満足度高い。 昔の印象だと輝度やボリュームが調整できなかったり、ファンクションキー効かなかったりした記憶があるけど、特に何もせずに最初から使えて、これが現代か・・という感じだった。 X1 Carbonは当たり前だけどCarbon素材なので、冬にいきなり膝の上においても冷たくないのはMacと比べて地味によい。 インストール pockeさんの記事が詳しく、ArchWiki と合わせて見ながらやって特に詰まるところはなかった。

    MacからLinuxに乗り換えた - yo_waka's blog
  • iOSアプリの全てのビューコントローラーにGoogleAnalyticsを一括で設定する - yo_waka's blog

    今作っているアプリで、改善のためにどれくらい画面が使われているか知りたかったので、GoogleAnalyticsを入れたときのメモ。 GoogleAnalyticsはご存知みんな知っているアクセス解析ツール。 iOS用にもSDKが公開されていて、CocoaPodsを使っていればpod installで簡単に入れられる。 pod 'GoogleAnalytics-iOS-SDK', '~> 3.0' 画面の閲覧回数を取るためには、2つやり方がある。 1つは、GAITrackedViewControllerクラスを継承したUIViewControllerを作る。 viewDidLoadなどでscreenNameに画面名をセットしておくと、viewDidAppearで自動でトラッキングリクエストが送信される。 @interface SampleViewController : GAITracke

    iOSアプリの全てのビューコントローラーにGoogleAnalyticsを一括で設定する - yo_waka's blog
  • ActiveRecordのマイグレーションでMySQLのunsignedな数値タイプを指定できるGemライブラリ作った - yo_waka's blog

    今の会社でRailsを使うようになって、いわゆるマイグレーションの仕組み超便利。 なんですが、MySQLを使っているのにidや数値にunsignedを指定できないのどうなんだろう。 他のDBはサポートしてないからいらないよねっていうのも分かるんですが、せっかくアダプタが分けられてるならサポートしてもいいんじゃないかな。 ということで、ActiveRecordの勉強がてらマイグレーションでintegerなカラムに"unsigned"を指定できるGemライブラリを作ってみました。 github/activerecord-mysql-unsigned ついでに初めてのRubyGemsで公開もしてみた。 rubygems/activerecord-mysql-unsigned ActiveRecord3.2以降と4で動作確認しています。 使い方はGemfileに書いて、マイグレーションファイルで「

    ActiveRecordのマイグレーションでMySQLのunsignedな数値タイプを指定できるGemライブラリ作った - yo_waka's blog
  • Rails4で書いたアプリをMiniTest::Specでテストする - yo_waka's blog

    Rails4からはActiveSupport::TestCaseがTest::UnitからMiniTest::Unit::TestCaseのサブクラスに変わっている。 MiniTestはSpecなDSLをサポートしているので、RSpecを入れずともBDDスタイルでテストが書けるようになる。 ということで、いろいろtest_helper.rbをゴニョってたらminitest-rails-specというズバリなGemを見つけたので(><)これを使う。 minitest-spec-railsでやってくれることは、ざっくりいうと、RailsのActiveSupport::TestCaseにMinitest::Spec::DSLをextendして、ControllerとかHelperクラスをテスト対象クラスに追加して、beforeとかafterとかのDSLを使えるようにしてくれるだけというシンプルな

    Rails4で書いたアプリをMiniTest::Specでテストする - yo_waka's blog
  • Node.jsのcluster.disconnectの挙動とGracefulリスタート - yo_waka's blog

    clusterモジュールを使ってサーバアプリ管理ツールを作ってるのだけど、cluster.disconnectのコールバックが実行されてもワーカープロセスが死なないことがある。 Chromeでサーバにアクセスすると、cluster.disconnectしてもワーカーの'exit'イベントが発火されずにプロセスが残ってしまう。 しばらく放置しておくとワーカープロセスが死ぬんだけど、これはどういうことだと思ったらこういうことらしい。keep-aliveかー タブを閉じてもダメ。どうもChromeのkeep-aliveのタイムアウト時間は5分みたいですね。 先の記事でいうところの、「すべてのコネクションが終了し、サーバが 'close' イベントを発したときに最終的に閉じます。」という実装をちゃんとしていないサーバの場合、5分経つまで接続が閉じない。 サーバ側の実装がよくないのが根的な原因なん

    Node.jsのcluster.disconnectの挙動とGracefulリスタート - yo_waka's blog
  • vagrantとknife-soloで開発環境構築を自動化するやつ - yo_waka's blog

    最近vagrantとknife-soloで、ってのが流行ってるみたいなのでやってみた。 waka/auto-dev-env ベースBoxは、vagrantbox.esからUbuntu12.10 server minimalってのを落とせるけど、knife-soloはOmibus Chef Packagingのものをインストールしてくれるのでchefは入ってる必要なかったり、Boxのディスクサイズが10GBと少なかったので、Veeweeを使って作った。 vagrantはポートフォワーディングの設定が簡単で便利ですね。 とにかく、これでムシャクシャしたとき「sudo rm -rf /」がいつでも出来るようになったぞ! Opscodeのレシピ見ててもRedhat系かDebian系かで動かなくなりそうなもの多いので、もし作ったレシピを配布して開発環境合わせるとかやろうとすると、実行するマシンのOS

    vagrantとknife-soloで開発環境構築を自動化するやつ - yo_waka's blog
  • Google Closure LibraryのユニットテストをPhantomJSで実行するやつ - yo_waka's blog

    を2年前くらいに作ったのだけど、久々にGoogle Closure Libraryを使いたくなって、そうなるとテストも書かないとなので引っ張りだして使おうと思ったのですが、なにせ2年前に作ったものなので、ソースコードはレガシー感が漂ってて、使ってるPhantomJSのAPIもdeprecatedになっていたりしたのでいろいろ直してアップデート(リポジトリ名も少し変更)。 waka/closure-library-phantomjs 単一のテストファイルのテストでもマルチテストランナーを使った複数テストファイルのテストでも同じ使い方です。 詳しい使い方やオプションは、READMEに書いた。 最近Mochaでテストを書くことが多いのですが、出力形式をいろいろ選べるの楽しくていいなと思ったので、インターフェース切ってリポーターをいくつか使えるようにした。 実際よく使うのは、見やすいSpec形式と

    Google Closure LibraryのユニットテストをPhantomJSで実行するやつ - yo_waka's blog
  • Node.jsアプリで結果が非同期になる箇所はコールバックを渡せるようにした方がいい - yo_waka's blog

    既存のNodeアプリのテストを書いていて思ったことをメモ。 書いてるうちに別にNode.jsに限った話じゃなくて、JavaScript全般に言える話じゃんと思ったけどまいっか。 Node.jsで書くアプリは中の処理で非同期API使われてると、テストを書くのがとても難しいというかめんどくさい。 例えばfsモジュールで非同期でファイル書いてる処理があって、もし書き込みに失敗したらエラーイベントを投げて上のレイヤーで処理する、みたいなのがあるとする。 // HogeクラスはEventEmitterを継承している Hoge.prototype.writeFile = function(file, data) { var self = this; fs.writeFile(file, data, function(err) { if (err) { self.emit('error.file', e

    Node.jsアプリで結果が非同期になる箇所はコールバックを渡せるようにした方がいい - yo_waka's blog
  • UIWebViewでローカルのHTMLを扱うときにハマったこと - yo_waka's blog

    ちょいいくつかハマったので。 UIWebviewでローカルHTMLを読み込んでJSを実行しようとしても実行されないときがある ローカルコンテンツでもUIWebViewDelegateのwebViewFinishLoadでJavaScriptを実行しないと、確実にHTMLのロード後にJSを実行できない。 ローカルで読み込んだJS,CSSファイルのパスの設定の仕方 シミュレータにインストールされるアプリを見てみると、パッケージディレクトリの直下に展開されるよう。 XCode4.5では以下のような指定でおkでした。 NSString *path = [[NSBundle mainBundle] pathForResource: @"foobar" ofType: @"html"]; [webView loadRequest: [NSURLRequest requestWithURL: [NSUR

    UIWebViewでローカルのHTMLを扱うときにハマったこと - yo_waka's blog
  • OctSurfer という GitHub上 のソースコードを眺めるための iPhone アプリをリリースしました - yo_waka's blog

    先月から Objective-C を触り始めて、もっと理解を深めるためにはアプリを作ってみるのが一番早いよなということで、前々から自分が欲しいと思っていた GitHub のビューアーを作ってみました。 おそらくエンジニアとデザイナーさんくらいしか使わないだろうアプリですが、初めての iPhone アプリリリースだぜイエーイ アプリ名は「OctSurfer」としました。 これは何? GitHub に公開されているリポジトリのソースコードを眺められる iPhone アプリです。 OctSurfer は App Store からインストールできます。無料です。 App Store - OctSurfer できること 検索 or 自分のスター or 自分が所属する Organizations からリポジトリのソースコードをシンタックスハイライト付きで閲覧できます 見ているリポジトリにスターを付けら

    OctSurfer という GitHub上 のソースコードを眺めるための iPhone アプリをリリースしました - yo_waka's blog
  • UINavigationControllerのタップ制御がムズい - yo_waka's blog

    使い勝手のためにコンテンツの表示領域を広く取れるように、タブバーをスクロール時に閉じて、ナビゲーションバー含む画面領域タップで再表示するようにしたい。 なので、UINavigationControllerをUITapGestureRecognizerでタップ制御しようとしたんだけど、予想外にめんどくさかった。 - (void) setScrollGesture: (UIView *)view { UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget: self action: @selector(handleTap:)]; view.userInteractionEnabled = YES; [view addGestureRecognizer: tapGesture]; }

    UINavigationControllerのタップ制御がムズい - yo_waka's blog
  • Objective-CでHTTPリクエスト扱うライブラリ作った - yo_waka's blog

    sendAsynchronouseRequest個別に書くのはしんどいし、最初は簡単にラップしてBlocksでコールバック渡すのがいいかなーと思ったけどself渡すのにいちいち__weakつけて作るのがめんどくさくなった。 setTimeoutの関数に「var that = self」やるのがめんどくさいあんな感じ。 多分ほぼAPIとのやりとりになるiPhoneアプリのHTTP通信はシンプルでよくて、HTTPリクエストをセットできて個別にコールバックを書けてHTTPレスポンスを受け取れればいい。 あと最近はRESTなAPIも多いのでPUT/DELETEリクエストも使いたいところ。 JS脳なのでこんな感じで書きたいw $.get(url, params, this.handleSuccess_, this.handleFailure); $.getJSON(url, params, this

    Objective-CでHTTPリクエスト扱うライブラリ作った - yo_waka's blog
  • UITableViewCellでお手軽に背景グラデーション - yo_waka's blog

    テーブルビューのセルにちょっとだけグラデーションかけて立体感を出したい。 いろんなやり方があるっぽくて、どういうやり方が一番いいのか分からないけど、とりあえずdrawRectでCAGradientLayerに色配列を設定してやることにした。 上から下に向けて少しだけ暗くなるグラデーションを繰り返すと真ん中が少しふくらんだように見えて立体感が出る。 昨日ズルいデザインのスライド見ていいね!と思ったので、セルの背景にズルいグレーを使ってみました。 @implemention MyTableViewCell - (void) drawRect: (CGRect)rect { CAGradientLayer *gradient = [CAGradientLayer layer]; gradient.frame = self.bounds; gradient.colors = @[ (id)[[UI

    UITableViewCellでお手軽に背景グラデーション - yo_waka's blog
  • デブサミ2012で大規模JS開発について発表してきました - yo_waka's blog

    「Developers Summit 2012 - 10年後も世界で通じるエンジニアであるために」で発表してきました。 デブサミ2012 kintoneの表と裏 - 表編 View more presentations from yo_waka イマドキのJSの話とかではなくて、UIをJSで作る際の設計ノウハウみたいな話にしたので、つまらなかったら申し訳ないなと思ってたのだけど、終わったあとも何人か質問しにきてくれた方がいたのでホッとしました。 10年後も・・というテーマとして、激しく進化するJSの最新動向に左右されず使えるネタを選んだつもりではあります。 普段からJSでもパフォーマンス意識して設計してる方には当たり前のことばかりだったかも。 jQueryは甘えってのは書いてみたかっただけですすいません。。 けど、適材適所というかSinatraで100画面近くあるようなWebアプリは作らな

    デブサミ2012で大規模JS開発について発表してきました - yo_waka's blog
  • 最近のJavaScriptモジュールの書き方 - yo_waka's blog

    サーバサイド(特にNode.js)とクライアントサイド両方で動かしたいものは最近はこんな感じで書いている。 CommonJSのwiki見ててそこに紹介されてるソースコードで(どれだったか忘れたけど。。)やってたのを見ていいなーと思って真似っこした。 (function(define) { define([], function() { 'use strict'; /** * @constructor */ var SomeClass = function() { // initialize }; /** * @type {string} * @private */ SomeClass.prototype.hoge_ = 'hoge'; /** * @return {string} */ SomeClass.prototype.getHoge = function() { return th

    最近のJavaScriptモジュールの書き方 - yo_waka's blog
  • 1