読者です 読者をやめる 読者になる 読者になる

yo_waka's blog

418 I'm a teapot

出戻ったワイワイ

Github Pagesで書いてたけど思い立ってはてなブログに戻した。 インポートスクリプト書いたものの、記事数多くないしMarkdownだし手でコピった方が早かったんじゃという気がしてきた。

ReactiveCocoa Tokyo

ios

先週になりますが、「ReactiveCocoa Tokyoというイベントがあり、そこでfreee社での導入の経緯やMVVMでのReactiveCocoaの使い方について話してきました。 freee社でのReactiveCocoa活用例 from yo_waka ReactiveCocoaは役割上ロックインされがちで、そこをな…

volley(サブプロジェクト)のbuildToolsVersionをafterEvaluateで上書く

Android StudioがBetaになったので、0.8.2に上げようとしたらモジュールのビルドでハマった。 Android Studioのバージョンを上げるときは、build.gradleを弄る時でもある。 Betaに上げるからには最新版のGradleプラグインとAndroid SDKでコンパイル&ビルドで…

Android meets RxJava

少し、いやかなり前に渋谷Javaで「Android meets RxJava」というタイトルでLTしてきました。 スライド上げるのが遅くなってすいません。。。 RxJava meets Android - 渋谷Java#6 from yo_waka freeeのAndroidアプリの開発前にチーム内で考えていたのが、テス…

Hubotを導入したらレビューの敷居が下がった話

dev

ウチの会社ではHipchatとGitHubを開発のコミュニケーションの中心にしている。 だんだん人も増えてくると、以前よりプルリクの数がそれだけ増えて、レビューで1日終わってしまう人がでてきた。 昔から仕様を知っている人にレビューが投げられがちで集中しや…

WEB+DB PRESS Vol.79にAngularJSの記事を書きました

2/22発売のWEB+DB PRESS Vol.79のJavaScript連載で「AngularJS」をテーマに記事を書きました。 こんな感じのことを書いてます。 AngularJSについて AngularJSの主な機能 2wayバインディング スコープ モジュール コントローラ Dependency Injection (DI) サ…

iOSアプリの全てのビューコントローラーにGoogleAnalyticsを一括で設定する

ios

今作っているアプリで、改善のためにどれくらい画面が使われているか知りたかったので、GoogleAnalyticsを入れたときのメモ。 GoogleAnalyticsはご存知みんな知っているアクセス解析ツール。 iOS用にもSDKが公開されていて、CocoaPodsを使っていればpod inst…

Macの環境構築にhomebrew-cask+Brewfile便利

dev

先週 Macbook Air を新しいマシンにリプレースした際に、環境構築どうしようかなーと思って、homebrew-caskを使ってみたらかなり捗った。 Mac上の環境構築でよく聞くのは、GitHubが公開しているBoxenだと思うけど、PuppetのDSL覚えるの面倒くさいし、パッケ…

AngularJSのディレクティブの仕組みを追ってみた

追ってみたシリーズ第3回目。 AngularJSのディレクティブ、名前は聞いたことあるけどあれでしょ?自前の「ng-hoge」を作るための仕組みでしょ? だいたいそんな感じですが、どうやって実現しているのか。 ディレクティブの役割 ディレクティブはHTMLビューを…

AngularJSのDIの仕組みを追ってみた

AngularJS黒魔術のうちの1つ。DI。 コントローラーの引数に$httpなどを指定すると、なぜ何もしなくてもHttpProviderの返り値が入ってくるのか。 var userControllers = angular.module('userControllers', []); userControllers.controller('UsersCtrl', fun…

AngularJSの2way bindingの仕組みを追ってみた

AngularJSの特徴でもある、モデルとビューの2way binding。 AngularJSの簡単なコードがあるとする。(投稿時点ではv1.2.6) <body ng-app ng-init="message = 'nothing'"> <div ng-controller="SampleCtrl"> <input type="text" ng-model="message"> <br> <button ng-click="clearMessage()">Clear</button> <br> <span>{{getMessage()}}</span> </div> <script> va…</body>

2013年の振り返り

あっというまに過ぎた2013年だったので振り返り。 スタートアップに転職した 今年はなんといっても6月からfreeeという会計サービスのスタートアップで働き始めたのが一番大きな出来事だった。 3月にサービスがベータ公開されたのをTechCrunchかなにかのニュ…

ActiveRecordのマイグレーションでMySQLのunsignedな数値タイプを指定できるGemライブラリ作った

今の会社でRailsを使うようになって、いわゆるマイグレーションの仕組み超便利。 なんですが、MySQLを使っているのにidや数値にunsignedを指定できないのどうなんだろう。 他のDBはサポートしてないからいらないよねっていうのも分かるんですが、せっかくア…

WEB+DB PRESS Vol.76にWeb Componentsの記事を書きました

うう、発売されてからだいぶ経ってしまった。。。 WEB+DB PRESSのJavaScript連載の第9回目にWeb Componentsについての記事を書かせていただきました。 WEB+DB PRESS Vol.76作者: 五十嵐啓人,伊野亘輝,近藤宇智朗,渡邊恵太,須藤耕平,中島聡,A-Listers,はまち…

Nginx1.3でWebsocketをリバースプロキシするメモ

Nginx1.3(2013/04/10時点では開発版)からWebsocketのリバースプロキシを通せるようになったということで、Socket.IOへリバースプロキシさせようとしたけどけどなかなか上手くいかなくて、ようやく上手く動いたのでメモっておく。 Nginxのバージョンは1.3.1…

RailsアプリのJavaScriptをkonachaを使ってCLI上でテストする

前回のでアプリケーションのテストがMiniTest::Specで実行できるようになったので、今度はJavaScriptのユニットテストをコマンドラインから実行できるようにする。 慣れてるMochaを使ってテストが書けるkonachaと、konachaが使用するCapybaraのPhantomJSドラ…

Rails4で書いたアプリをMiniTest::Specでテストする

Rails4からはActiveSupport::TestCaseがTest::UnitからMiniTest::Unit::TestCaseのサブクラスに変わっている。 MiniTestはSpecなDSLをサポートしているので、RSpecを入れずともBDDスタイルでテストが書けるようになる。 ということで、いろいろtest_helper.r…

ActiveRecordで日付の範囲指定

ActiveSupportのコア拡張を使うとめちゃ綺麗に書けて感動した。 今日 from = Time.now.at_beginning_of_day to = from + 1.day items = Item.where(created_at: from...to).order(created_at: :desc) 今月 from = Time.now.at_beginning_of_month to = from …

RailsのセッションをJSONで

Railsのセッション情報はこちらの記事にあるように、RubyのMarshalでシリアライズされ、Base64エンコードされたものがクッキーなどに保存される。 ただ、Ruby以外では復元が難しいため、Node.jsなど別言語で書かれたサーバーアプリケーションとセッションを…

Railsでセレクトボックスの出力

selectとかselect_tagとかcollection_selectとかいろいろあってオプションの指定も微妙に違ってたり分かりにくい。 ActiveRecordの配列と普通の配列を同じように扱えて、name属性を自由に定義したい。 いろいろ試してみたところ、select_tagとoptions_for_se…

デザイン変えた

テーマストア見てたらなんか意欲が湧いてきたのでデザインを弄ってみた。 ブログのテーマデザインを弄くるのは楽しい。 まだプログラムの勉強やり始めてまもない頃、バイトでMTのテーマとかプラグインやら作ってたのを思い出す。 そういえばあのころ、ブログ…

vagrantとknife-soloで開発環境構築を自動化するやつ

dev

最近vagrantとknife-soloで、ってのが流行ってるみたいなのでやってみた。 waka/auto-dev-env ベースBoxは、vagrantbox.esからUbuntu12.10 server minimalってのを落とせるけど、knife-soloはOmibus Chef Packagingのものをインストールしてくれるのでchefは…

Google Closure LibraryのユニットテストをPhantomJSで実行するやつ

を2年前くらいに作ったのだけど、久々にGoogle Closure Libraryを使いたくなって、そうなるとテストも書かないとなので引っ張りだして使おうと思ったのですが、なにせ2年前に作ったものなので、ソースコードはレガシー感が漂ってて、使ってるPhantomJSのAPI…

bowlというNode.jsのcluster管理モジュールを作った

cluster周りのコードを書いていて、ワーカー周りの死活監視やエラー処理などいつも同じようなこと書いてるのでモジュール化してみました。 bowl GitHubにソースコードもあげてあります。 安心のテストコード付き! waka/node-bowl できること コマンドライン…

Node.jsアプリで結果が非同期になる箇所はコールバックを渡せるようにした方がいい

既存のNodeアプリのテストを書いていて思ったことをメモ。 書いてるうちに別にNode.jsに限った話じゃなくて、JavaScript全般に言える話じゃんと思ったけどまいっか。 Node.jsで書くアプリは中の処理で非同期API使われてると、テストを書くのがとても難しいと…

Node.jsのcluster.disconnectの挙動とGracefulリスタート

clusterモジュールを使ってサーバアプリ管理ツールを作ってるのだけど、cluster.disconnectのコールバックが実行されてもワーカープロセスが死なないことがある。 Chromeでサーバにアクセスすると、cluster.disconnectしてもワーカーの'exit'イベントが発火…

あけまして

明日から仕事始まる、、、ウワーン・゚・(Pд`q。)・゚ もう6日ですが、あけましておめでとうございます。 今年はもうちょっと個人でもいろいろアウトプットできるようにしていきたいなー。 特にぜんぜん広まる気配のないGoogleClosureLibraryがもうちょっと使われ…

Railsのroutes.rbでscopeとpathが便利だった

なんか日本語が不自由な感じ。。 Railsのroutes.rbで普通にresource(s)を使う場合はidを使ったURLルートが作られる。 resource 'foo' do resources 'bars' end # bundle exec routes GET /foo/:foo_id/bars(.:format) bars#index POST /foo/:foo_id/bars(.:f…

OctSurfer 1.0.1 リリース

ios

リポジトリ一覧でリポジトリのdescriptionが空の場合(なぜか空文字でなく、NSNULLになるケースがあったため)にアプリが落ちてしまう問題と、一覧をスクロールすると下側のスペースが空いてしまっている問題を解消しました。iTunes Store - OctSurfer 1.0.1…

WebistranoをRails3.2.9に対応させた

アプリのデプロイやDBのマイグレーションに Capistrano を使っているのですが、PM やディレクターでもテンプレートの修正くらいならコミットしてデプロイできるようなやり方をいろいろ探していて、Capistrano の WebUI であるWebistrano に行き着きました。…

UIWebViewでローカルのHTMLを扱うときにハマったこと

ios

ちょいいくつかハマったので。 UIWebviewでローカルHTMLを読み込んでJSを実行しようとしても実行されないときがある ローカルコンテンツでもUIWebViewDelegateのwebViewFinishLoadでJavaScriptを実行しないと、確実にHTMLのロード後にJSを実行できない。 ロ…

パーリー

結婚式とパーティおわたー 入籍は10ヶ月前だけど、あらためて区切りを付けるということで。 先輩から言われた通り、人生で最もありがとうを言う日になりました。 親族や友達が少しでも楽しんでもらえたならいいな。 二次会終了してホテル帰って10分で寝た。…

OctSurfer という GitHub上 のソースコードを眺めるための iPhone アプリをリリースしました

ios

先月から Objective-C を触り始めて、もっと理解を深めるためにはアプリを作ってみるのが一番早いよなということで、前々から自分が欲しいと思っていた GitHub のビューアーを作ってみました。 おそらくエンジニアとデザイナーさんくらいしか使わないだろう…

UINavigationControllerのタップ制御がムズい

ios

使い勝手のためにコンテンツの表示領域を広く取れるように、タブバーをスクロール時に閉じて、ナビゲーションバー含む画面領域タップで再表示するようにしたい。 なので、UINavigationControllerをUITapGestureRecognizerでタップ制御しようとしたんだけど、…

Objective-CでHTTPリクエスト扱うライブラリ作った

ios

sendAsynchronouseRequest個別に書くのはしんどいし、最初は簡単にラップしてBlocksでコールバック渡すのがいいかなーと思ったけどself渡すのにいちいち__weakつけて作るのがめんどくさくなった。 setTimeoutの関数に「var that = self」やるのがめんどくさ…

UITableViewCellでお手軽に背景グラデーション

テーブルビューのセルにちょっとだけグラデーションかけて立体感を出したい。 いろんなやり方があるっぽくて、どういうやり方が一番いいのか分からないけど、とりあえずdrawRectでCAGradientLayerに色配列を設定してやることにした。上から下に向けて少しだ…

Objective-Cはじめました

ios

近々仕事で書くことになりそうなので先週からObjective-C勉強中。 新しい言語を覚えるのは楽しくていいですね。 StoryBoardでパーツペタペタ貼ってプロパティ設定してると昔触ったVB6を思い出します(遠い目 GUIを作るという意味ではJavaScriptやActionScrip…

おひさしぶり

最後の投稿が8ヶ月前・・! そういえばなんか退職ポストがNaverまとめに入っててびっくりしました。転職やら結婚やらで平日週末となかなかまとまった時間が取れなかったのだけど、ようやく少しずつ余裕が出てきた。 忙しいながらも興味のあるトピックとかは…

サイボウズを退職しました

こんな僻地で退職エントリーもどうかと思うけど。5年間勤めたサイボウズを本日2/29で退職しました。最終出社日は2/24だったけど。この3年くらいずっとkintoneという製品を作ってきたのですが、UI設計やクライアントサイドどうするな話など、自分が初めてやり…

デブサミ2012で大規模JS開発について発表してきました

「Developers Summit 2012 - 10年後も世界で通じるエンジニアであるために」で発表してきました。 デブサミ2012 kintoneの表と裏 - 表編 View more presentations from yo_waka イマドキのJSの話とかではなくて、UIをJSで作る際の設計ノウハウみたいな話にし…

WebRTCを使ってWebカメラから顔認識+画像効果

ChromeのDevチャンネル版でWebRTCが使えるようになったそうなので早速試してみた。 DevChannelからChromeを落として、「chrome://flags」から有効にできます。WebRTC(Web Real-Time Communications)は、ブラウザからカメラやマイクを利用できるようにしたり…

結婚したった。どうしても終わらせたい仕事あったのと、出すときは一緒に行きたかったので、定時ダッシュして夜間ポストで婚姻届を提出した。 守衛さんに渡して書類に不備がないかどうか確認が終わったら、はい5分で終了。 あっさり終わって拍子抜けだったけ…

オレオレCoffeeScriptを作ろう

若干遅いですが、あけましておめでとうございます。 今年もこっそり! 昨年からcoffee-scriptが流行り出しましたね! coffee-scriptってもう現場でも使われ始めてるのかな? Railsな人たちは使ってるんだろうけど、JavaScriptでアプリ書いちゃうようなゴリゴ…

仕事納め

昨日仕事納めだったので、起きるまで寝て起きた。 何しようか悩むこの感じが楽しい。セール行きたい。今年も(昨年もだけど)とても出来る人たちに囲まれて仕事ができた1年で感謝感謝です。 昨年よりは新しいものを作るタスクを減らして改善改善改修改修な感…

Google Closure Libraryの良いところ

Google Closure Libraryを使ってると、基本的にプロトタイプベースのOOPで書かざるを得なくなる訳ですが、その中でClosure Libraryを使ってクラスを書く上で最もベースとなっている"goog.inherits"と"goog.base"は改めてよくできてると思った。 goog.provide…

こっそりやってたけど、これは確実にバレたな。。。 せめてタイトルくらい弄っとけばよかったー!

大規模なJS開発

最近大規模すごい!とか言われるようになってそれは嬉しいんだけど、複数人で作ってるすごい!なのか、10万行すごい!なのかよく分からない。 この2つはちょっとアプローチの仕方が違う。 前者の方は、厳密にPrivate変数がないJSでプライベート/パブリックを…

引っ越し完了。 まだテーブルとソファがないのでマットの上で食事しないといけないけど><湯船にお湯を張ってつかれるのが嬉しい。 お風呂出た後あちーって冷たい飲み物飲むとか実家にいた頃以来だ。この1ヶ月引っ越しでかなり週末時間を取られて疲れてたの…

管理画面遷移のキモ

最近管理画面の遷移設計で学んだこと。めちゃめちゃリテラシ高い先進層がターゲットでもない限りは、トップページ(起点になる画面)を作って、何か設定したら常にそのページに戻してあげないとダメ。 具体的にはトップ画面に、管理できる各設定画面の見出し…

統一化か最適化か

UI作ってて一番こだわりたいのはカッコ良さとか目新しさじゃなくて(それがあればさらにいいんだけど)、早さ。要件を満たすために体感速度的に操作速度的に一番速くて早いUIにこだわって作りたい。 と思うのは、自分が影響受けたアプリがGmailとlivedoor Re…