サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
大谷翔平
waka.hatenablog.com
そろそろ家のMacbook Air (2013 Mid)が限界にきてたので、Thinkpad X1 Carbon (Gen 5th)を買ってArchLinux入れた。 この時期は毎年Lenovoのオンラインショップで40%以上ディスカウントされてるらしく、SSD以外モリモリでつけても17万円を切って財布にやさしい。 久々のLinux環境だけど、GUIも非常にサクサク動いてて満足度高い。 昔の印象だと輝度やボリュームが調整できなかったり、ファンクションキー効かなかったりした記憶があるけど、特に何もせずに最初から使えて、これが現代か・・という感じだった。 X1 Carbonは当たり前だけどCarbon素材なので、冬にいきなり膝の上においても冷たくないのはMacと比べて地味によい。 インストール pockeさんの記事が詳しく、ArchWiki と合わせて見ながらやって特に詰まるところはなかった。
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 + 1.month items = Item.where(created_at: from...to).order(created_at: :desc)
今の会社でRailsを使うようになって、いわゆるマイグレーションの仕組み超便利。 なんですが、MySQLを使っているのにidや数値にunsignedを指定できないのどうなんだろう。 他のDBはサポートしてないからいらないよねっていうのも分かるんですが、せっかくアダプタが分けられてるならサポートしてもいいんじゃないかな。 ということで、ActiveRecordの勉強がてらマイグレーションでintegerなカラムに"unsigned"を指定できるGemライブラリを作ってみました。 github/activerecord-mysql-unsigned ついでに初めてのRubyGemsで公開もしてみた。 rubygems/activerecord-mysql-unsigned ActiveRecord3.2以降と4で動作確認しています。 使い方はGemfileに書いて、マイグレーションファイルで「
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を使えるようにしてくれるだけというシンプルな
clusterモジュールを使ってサーバアプリ管理ツールを作ってるのだけど、cluster.disconnectのコールバックが実行されてもワーカープロセスが死なないことがある。 Chromeでサーバにアクセスすると、cluster.disconnectしてもワーカーの'exit'イベントが発火されずにプロセスが残ってしまう。 しばらく放置しておくとワーカープロセスが死ぬんだけど、これはどういうことだと思ったらこういうことらしい。keep-aliveかー タブを閉じてもダメ。どうもChromeのkeep-aliveのタイムアウト時間は5分みたいですね。 先の記事でいうところの、「すべてのコネクションが終了し、サーバが 'close' イベントを発したときに最終的に閉じます。」という実装をちゃんとしていないサーバの場合、5分経つまで接続が閉じない。 サーバ側の実装がよくないのが根本的な原因なん
Railsのセッション情報はこちらの記事にあるように、RubyのMarshalでシリアライズされ、Base64エンコードされたものがクッキーなどに保存される。 ただ、Ruby以外では復元が難しいため、Node.jsなど別言語で書かれたサーバーアプリケーションとセッションを共有しづらい。 なので、こちらの記事を参考にJSONで保存できるようにしてみた(というかほとんどそのまま)。 セッション情報の保存先にはredis-storeライブラリを使ってRedisに保存する。 redis-storeは、RubyGemsにあがっているものだとRails4で動かない(Rails3でもredisライブラリのバージョンが新しいと動かない)。 GitHubを見てみたら、forkされたものが最近のRackのバージョンアップ含めてRails4対応していたので、それを使う。 Gemfile gem 'redis'
を2年前くらいに作ったのだけど、久々にGoogle Closure Libraryを使いたくなって、そうなるとテストも書かないとなので引っ張りだして使おうと思ったのですが、なにせ2年前に作ったものなので、ソースコードはレガシー感が漂ってて、使ってるPhantomJSのAPIもdeprecatedになっていたりしたのでいろいろ直してアップデート(リポジトリ名も少し変更)。 waka/closure-library-phantomjs 単一のテストファイルのテストでもマルチテストランナーを使った複数テストファイルのテストでも同じ使い方です。 詳しい使い方やオプションは、READMEに書いた。 最近Mochaでテストを書くことが多いのですが、出力形式をいろいろ選べるの楽しくていいなと思ったので、インターフェース切ってリポーターをいくつか使えるようにした。 実際よく使うのは、見やすいSpec形式と
既存の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
アプリのデプロイやDBのマイグレーションに Capistrano を使っているのですが、PM やディレクターでもテンプレートの修正くらいならコミットしてデプロイできるようなやり方をいろいろ探していて、Capistrano の WebUI であるWebistrano に行き着きました。 これめっちゃいいじゃん!と思って見てみると、なんと最後の更新が2年前でRailsも2.3ではないか・・ あきらめずにググってみたら、id:antipopさんがRails3.2.5対応しているのを発見した。神対応すぎる。 Webistranoをruby1.9.3-p194 + Rails 3.2.5で動くようにした ペパボも Webistrano 使ってるのかー ただ、記事にも書かれている通り、元のリポジトリからかなり変更が加わっている感じで外部ライブラリのアップデートで簡単に死ぬ感じはする。 デプロイツールの
ちょいいくつかハマったので。 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
先月から Objective-C を触り始めて、もっと理解を深めるためにはアプリを作ってみるのが一番早いよなということで、前々から自分が欲しいと思っていた GitHub のビューアーを作ってみました。 おそらくエンジニアとデザイナーさんくらいしか使わないだろうアプリですが、初めての iPhone アプリリリースだぜイエーイ アプリ名は「OctSurfer」としました。 これは何? GitHub に公開されているリポジトリのソースコードを眺められる iPhone アプリです。 OctSurfer は App Store からインストールできます。無料です。 App Store - OctSurfer できること 検索 or 自分のスター or 自分が所属する Organizations からリポジトリのソースコードをシンタックスハイライト付きで閲覧できます 見ているリポジトリにスターを付けら
近々仕事で書くことになりそうなので先週からObjective-C勉強中。 新しい言語を覚えるのは楽しくていいですね。 StoryBoardでパーツペタペタ貼ってプロパティ設定してると昔触ったVB6を思い出します(遠い目 GUIを作るという意味ではJavaScriptやActionScript3と同じなので、考え方とかdelegeteとかのデザインパターンは特に問題ないのだけれど、やはりメモリ管理、特にBlocks使ってる箇所でEXC_BAD_ACCESS出まくったりで苦戦。。。 Blocksの中でself使ったらダメとか、上の関数で受け取った引数もそのまま入れるとダメ(な時がある)とか@propertyあまり使いこなせてない感とか、ちゃんと理解できるにはもう少しかかりそう>< Blocksとメモリ周りについて以下のブログが参考になりました。 IOS 開発で、EXC_BAD_ACCESS と
こんな僻地で退職エントリーもどうかと思うけど。 5年間勤めたサイボウズを本日2/29で退職しました。最終出社日は2/24だったけど。 この3年くらいずっとkintoneという製品を作ってきたのですが、UI設計やクライアントサイドどうするな話など、自分が初めてやりたいようにできた(というと語弊があるけど)のでとても思い入れが大きい製品です。 まだ昨年の11月に販売されたばかりで機能数も少ないですが、「誰でも早く作れる」というコンセプトにおいてはかなり自信を持って作っていましたし、お手軽でいい製品だと思います。 Excelの管理めんどくさいからWebで共有したいなーとか、5人くらいでサクッとタスクフロー回せるアプリが欲しい!という方がいらっしゃいましたらぜひお試しください(お試し1ヶ月無料です)! 毎月リリースという結構なリリースサイクルの中、毎月とんでもない量のタスクが積まれる中、それでも楽
「Developers Summit 2012 - 10年後も世界で通じるエンジニアであるために」で発表してきました。 デブサミ2012 kintoneの表と裏 - 表編 View more presentations from yo_waka イマドキのJSの話とかではなくて、UIをJSで作る際の設計ノウハウみたいな話にしたので、つまらなかったら申し訳ないなと思ってたのだけど、終わったあとも何人か質問しにきてくれた方がいたのでホッとしました。 10年後も・・というテーマとして、激しく進化するJSの最新動向に左右されず使えるネタを選んだつもりではあります。 普段からJSでもパフォーマンス意識して設計してる方には当たり前のことばかりだったかも。 jQueryは甘えってのは書いてみたかっただけですすいません。。 けど、適材適所というかSinatraで100画面近くあるようなWebアプリは作らな
ChromeのDevチャンネル版でWebRTCが使えるようになったそうなので早速試してみた。 DevChannelからChromeを落として、「chrome://flags」から有効にできます。 WebRTC(Web Real-Time Communications)は、ブラウザからカメラやマイクを利用できるようにしたり、P2Pで通信できるようにしたりといったこれまでと違ったユーザー体験をJavaScriptから簡単に使えるようにするための仕様です。 SWFやFlash Media Serverとかで出来ることがJSで出来るようになるイメージ? 詳しい仕様は、https://sites.google.com/site/webrtc/homeとかhttp://dev.w3.org/2011/webrtc/editor/webrtc.htmlを見るとよいです。 試しに、Webカメラから顔認識し
若干遅いですが、あけましておめでとうございます。 今年もこっそり! 昨年からcoffee-scriptが流行り出しましたね! coffee-scriptってもう現場でも使われ始めてるのかな? Railsな人たちは使ってるんだろうけど、JavaScriptでアプリ書いちゃうようなゴリゴリ書いてるところでも採用してたりするのかしら。 個人的には素のJSの方が小回りが利くので好きなのですが、誰が書いても出力されるJSの文法を揃えられるところはいいですね。 いや待てよ、よくよく考えてみれば、JavaScriptトランスレータな形でフレームワークの機能を提供するのはありかも。 人によってコールバックだったりイベントドリブンだったり、書き方が異なるとコードレビューも大変ですしそういうのを言語側で吸収するのはよさそう。ってか同じこと考えてる人結構いるんじゃね? これはもう、2012年は間違いなくオレオレ
Google Closure Libraryを使ってると、基本的にプロトタイプベースのOOPで書かざるを得なくなる訳ですが、その中でClosure Libraryを使ってクラスを書く上で最もベースとなっている"goog.inherits"と"goog.base"は改めてよくできてると思った。 goog.provide('foo.bar.Sample'); goog.require('goog.ui.Component'); /** * @constructor * @extends {goog.ui.Component} */ foo.bar.Sample = function() { goog.base(this); }; goog.inherits(foo.bar.Sample, goog.ui.Component); /** * @override */ foo.bar.Sample
グローバルなJSONリファクタ に続き、地道なリファクタシリーズ第2弾。 Facebook社が公開している flux-utils、使っていますか。 今は大抵の人がReduxでFluxを実装していることでしょう。flux-utilsは3,4年前はシンプル故に普通に選定してもよいと思える選択肢でした。 でも今は選定しないほうがいいです。 選定しないほうがいい理由はいくつかあって、 提供されているConainerコンポーネント、提供されているビルド済JS内でコンストラクタをnewを使わずメソッドコールしているため、WebpackでES Moduleを指定したビルドができない(CommonJSを指定しないといけない) Facebook社が使っていないためかReactの最新バージョンに追随したバージョンがnpmにリリースされるまでのスピードが恐ろしく遅い fbjs, fbemitterというこれまた
サーバサイド(特に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
昨日開催されたNode塾その2でconnectのソースコードリーディングをしてきました。 connectの中身を見るのは初めてだったのですが、id:scalar さん(@hakobera さん)の説明がとても丁寧で理解も進み、後半はひたすらミドルウェアのソースを読んでました。 ※バージョンは1.8.1。githubのmasterは2系みたいだけど、expressの安定板が1.8.1なので。 以下メモ。 connectはとても小さいソース群でできてるのでソースコード読むのにぴったり。 connect.js ./middlewares以下のJSファイルを読み込む。 requireされるタイミングはここではなく、アプリコードが実行されるときに遅延ロードされる。 __defineGetter__に突っ込むことで、呼び出し時に初めてrequireする関数が実行されるようになっていた。 クライアントJ
このページを最初にブックマークしてみませんか?
『yo_waka's blog』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く