タグ

ブックマーク / r7kamura.hatenablog.com (13)

  • 権限管理を実装するときの地味な話 - ✘╹◡╹✘

    「あるユーザがXをYできるかどうか」というメソッドを定義したいとき、Userに実装するよりも、Xに実装した方がうまくいくことが多かった。例えば「ユーザが投稿を編集できるか」という、ブログの共同編集のような機能で使うやつで考える。つまり、User#can_edit?(entry) みたいなやつにするか Entry#editable_by?(user) みたいなやつにするかという話になる。 後者の方でうまくいった理由は、Webアプリだとログイン中のユーザが存在しない場合というのがあるが、後者ではuserがnilの場合でも対応できたというのと、Userクラスが長大にならなかったという点 (Abilityクラスとかを全ての場所で統一して使えている場合はそれで良いので各自適当にやっていってほしい)。あとメソッドの命名規則の問題があって、名詞形 (例:User#name) か、xxx?で終わるメソッド

    権限管理を実装するときの地味な話 - ✘╹◡╹✘
    kazuph1986
    kazuph1986 2014/12/10
    ”Userに実装するよりも、Xに実装した方がうまくいくことが多かった”
  • scheman diff - ✘╹◡╹✘

    https://github.com/r7kamura/scheman 旅行を兼ねて沖縄に開発合宿に来ているので、1日目の成果を書き出しておく。 目的 Webアプリの開発フローで次のような状態を実現したい。 DBの変更のたびに変更用のSQLやMigrationファイルを人間が書かなくて良い migrationファイルを書く代わりに人間はスキーマを編集する スキーマはSQLで記述できる (DSLの使用を強制されない) SQL以外の言語でも記述できる (DSLを使用しても良い) 方針 次のような実装を試みた。 SQLを構文解析してスキーマデータに変換する (解析器は事前に実装済み) 適用すべきSQLを2つのスキーマデータの差分から自動で計算する SQL以外の解析器も作成可能に scheman diff scheman diffというコマンドを実装した。 これは変更前後の二つのスキーマの差分を標

    scheman diff - ✘╹◡╹✘
    kazuph1986
    kazuph1986 2014/07/15
    これ実現したら便利そう。
  • mackerel使ってみた - ✘╹◡╹✘

    20分ほど前にmackerelに登録して、とりあえずuiureoさんの総資産情報をモニタリングしてみました。 Dashboardでserviceとroleを作成して表示されているAPI Keyを得たあと、curlホストuiureoをつくって、総資産をPOSTします。 ホストは POST /api/v0/hosts で作成できます。 curl https://mackerel.io/api/v0/hosts \ -H "X-Api-Key: XXX" \ -H "Content-Type: application/json" \ -d '{"name":"uiureo","meta":{}}' データは POST /api/v0/ で投稿できます。 curl https://mackerel.io/api/v0/tsdb \ -H "X-Api-Key: XXX" \ -H "Conten

    mackerel使ってみた - ✘╹◡╹✘
    kazuph1986
    kazuph1986 2014/06/23
    そっか、あくまでhostに紐づくのか。
  • Ruby + Bot = Ruboty - ✘╹◡╹✘

    https://github.com/r7kamura/ruboty RubotyというRuby製のChatterbotをつくった。 Herokuで動かす Herokuにデプロイすれば無料で動く。 Slackというチャットサービスで動かすならこういう感じ (部屋名とかは適宜変える): $ mkdir mybot $ cd mybot $ echo 'source "https://rubygems.org"' >> Gemfile $ echo 'gem "ruboty"' >> Gemfile $ echo 'gem "ruboty-slack"' >> Gemfile $ echo 'bot: bundle exec ruboty' >> Procfile $ bundle install $ git init $ git add . $ git commit -m "Initial

    Ruby + Bot = Ruboty - ✘╹◡╹✘
    kazuph1986
    kazuph1986 2014/06/01
    えれんどうなった?って思ってたら改名したのね。使お。
  • Go言語のテスト用ライブラリとGospel - ✘╹◡╹✘

    先週初めてGo言語を触る機会があったので、テストの書き方を調べた。 要約すると、標準ライブラリのtestingが好きになれず他に調べても気に入ったものが見付からなかったので自分でつくった。 testing Go言語にはtestingという標準ライブラリが用意されていて、 「go test」コマンドを実行すると「*_test.go」という名前のテスト用ファイルがそれぞれ実行される。 具体的には、そのファイル内で定義されたTest*という名前のテスト用関数がそれぞれ実行されるようになっている。 公式サイトの例ではこういうコードが紹介されていた。 type doubleTest struct { in, out int } var doubleTests = []doubleTest{ doubleTest{1, 2}, doubleTest{2, 4}, doubleTest{-5, -10}

  • Railsアプリつくった - ✘╹◡╹✘

    最近APIサーバ用途でRailsアプリを1個つくったので振り返る。 概要 接続元はiOSやAndroidアプリとか、Webブラウザとか、別のWebアプリケーションとか。1ホストあたり秒間数百リクエスト、平均応答時間10msぐらい。Rails 4.1.0.rc2、Unicorn、Nginxを使ってる。正直Railsは全部入りで重いイメージがあったので何となく平均50ms以内程度であれば良いところだろうと思ってたけど、意外と速い。多分そもそもサーバの性能が良いんだと思う。実装時に気を付けたことは普段の開発と特に変わりない。いつもは大勢でワイワイ開発するものに少し手を加えるということが多いんだけど、今回は珍しく自分一人でつくったから目が行き届いてたのかもしれない。DBへの問合せの効率に気を配るとか、Rubyでの処理の無駄を省くとか、アプリケーションのプロセスに無駄なコードを読み込ませないとか、計

    Railsアプリつくった - ✘╹◡╹✘
  • Ruby Patterns - ✘╹◡╹✘

    この記事には、Rubyを書いているときに「これは言語化されたり公式化されたりしていないけれど基的には必ずこのパターンに則ってプログラムを書いているな」ということをふと思い出したときにやってきてそのパターンを書く。多分3パターンぐらいで終わると思う。ウケが良ければ思い出す確率が高くなると思う。題材さえあれば何も考えずに書けるので、これを書くコストは全然高くない。 名前が"?"で終わるメソッドは必ずtrueまたはfalseのどちらかを返す trueとfalse以外(例えばnil)が返る可能性がある場合は、必ず式の先頭に!!を付けてtrueかfalseになるようにしてる。 このパターンを守ることがとても大事だという風には全く考えていないけど、もしhas_user?がuserを返すとして、has_user?という名前のメソッドがUserオブジェクトを返すというのは一体どういう意味を持っているのだ

    Ruby Patterns - ✘╹◡╹✘
    kazuph1986
    kazuph1986 2014/01/30
    随時増えて行く感じだろうか
  • ハロウィンなのでHTMLをぶるぶる震わせてみました - ✘╹◡╹✘

    使い方 ぶるぶる震える ↑このリンクをブックマークに登録して使ってください 説明 適当なJavaScript製のHTML-Lintを実行して、検知されたHTML要素をCSSでぶるぶる震わせます。 チャットで雑談してたら急に震わせたくなって10分ぐらいで作ったのでだいぶ雑です。 実装 jQuery + jRumble + curtisj44/HTML-Lint https://gist.github.com/r7kamura/bc1577d4410891ade243 誰かJavaScript製のかっこいいHTML-Lintつくってください Webサイトつくってる人は開発環境に入れておくと便利かもしれません

    ハロウィンなのでHTMLをぶるぶる震わせてみました - ✘╹◡╹✘
    kazuph1986
    kazuph1986 2013/11/06
    おもしろいw リンクをブックマークバーにドラッグ&ドロップしてすぐ試せるのもいいなぁ。
  • Casual CI server - ✘╹◡╹✘

    r7kamura/altria https://github.com/r7kamura/altria ここ最近、Altriaっていう名前でCasual CI serverを開発してる。 まだまだ発展途上で、実質的には登録しておいたシェルスクリプトを実行するCron程度の能力しかない。 簡単に説明すると、AltriaはRails 4で作ったJenkins cloneで、Rubyでプラグインを書けるようになっている。 プラグインはRails Pluginの仕組みをそのまま使っていて、Gemにしてアプリに入れられる。幾つか試作品でプラグインを作ってみていて、 Gitと連携させたり、 認証を付けたり、 ジョブ実行後に指定したジョブを実行させたり、 ビルド毎の処理時間をグラフで表示したり、 カバレッジと連携させたり、という機能をそれぞれプラグインで提供できるようになっている。 体にREST API

    kazuph1986
    kazuph1986 2013/07/18
    現在発表中のaltriaの記事はこちらです #testingcasual
  • 自分のコード綺麗って思ってんの? - ✘╹◡╹✘

    guideline.gem https://github.com/r7kamura/guideline 恐怖体験があって、震え上がり、少しでも綺麗なコードが書けるようなGemつくってる。複雑過ぎるメソッドや、使われていないメソッドが定義されていないかとか、長過ぎる行を書いてないかとか、簡単なチェックを自動化できる。こういうコードは綺麗ではないみたいなことがふわっと言われているよりは、綺麗ではないコードというのがコードで表現されている方が安心感があると思った。もしコーディングルールとして文書化したのでみんな守ろうみたいな感じにしても、コードを書くときに常にそれを覚えていなければ意味がないし、常にそういうことを気にしながら、ずっと緊張しながらコードを書かないといけない。そういう風に常に何かに気を配りながら作業するというのは、意識は高いけど、疲れるから極力やりたくないし、そもそも新しくその文化

    自分のコード綺麗って思ってんの? - ✘╹◡╹✘
  • DRY原則とテストの可読性 - ✘╹◡╹✘

    DRY原則に従おうとするほど、テストコードがどんどん読みづらくなる。 The RSpec Bookに答えがあるかと思って読んでみたものの、「あるある」と一言述べているだけだった。辛い。 テストコードが読みづらくなる例を示すために、1つRubyのライブラリをつくった。 値とパターンを与えてValidationを行う機能を提供するライブラリ。 実装60行、テスト120行なので、詳しく見たければすぐ読めると思う。 最近不意ながらキラキラネームの命名力が上がってきたと思う。 avalon - A validator implementation for Ruby https://github.com/r7kamura/avalon 冗長だが読みやすい例 letもsubjectもローカル変数も何も用いずに率直に書いたテストコード例がこちら。 冗長だが読みやすく、テストコードを見ればライブラリの使い

    DRY原則とテストの可読性 - ✘╹◡╹✘
  • Vimで挿入モードから抜ける時に英数入力に切り替える - ✘╹◡╹✘

    昨日からHHKBを使い始めたついでに、キー設定を色々入れ替えるためKeyRemap4MacBookというアプリを使い始めました。『Vimで挿入モードから抜ける時に英数入力に切り替える』というのが前からやりたくて、KaoriYaさんのMacVimだとそういう設定がvimrcで出来たんですが、CUIvimではIMを操作する良い方法が分からずに設定できていませんでした。このアプリで無理やり実現出来たので快適です。 設定方法 KeyRemap4MacBookは独自でXMLを書いて、あるキーを特定のキーと結び付けることが出来ます。またその設定が有効になるアプリも選択できます。今回の場合は、Terminal上でEscキーをEscキー+英数キーという設定にすればOKですね。Ctrl+Cも使うので同時に設定しておきます。 まずKeyRemap4MacBook Preference Paneからpriva

    Vimで挿入モードから抜ける時に英数入力に切り替える - ✘╹◡╹✘
    kazuph1986
    kazuph1986 2012/01/08
    XML書かなくても一応できた。
  • はてなインターン2010に参加してきました - ✘╹◡╹✘

    先日、8月2日から参加していた はてなインターン2010が無事終了しました。 間違いなく、これまでのエンジニア人生で最も刺激的な20日間でした。 参加初日から既に1ヶ月は経っているのですが、まだ先週のことのように感じます。 そんな濃厚なはてなインターンの様子を、出来る限り分かりやすくレポートしようと思います。 発散しすぎて相当長くなってますので、時間のあるときにゆっくりと読んでいただけると幸いです。 はてなインターンで作ったもの 自分はid:skymountainとはてなブックマークチームに参加し、はてブのTwitter連携機能の強化を行ないました。実はつくったものは十分リリースレベルに達していて社内発表も行なったのですが、更に機能強化がねらえると判断したため現在引き続き開発を行なっている最中です。ここでまだ紹介できないのは残念ですが、Twitterユーザーの方にもそうじゃない方にも非常に

    はてなインターン2010に参加してきました - ✘╹◡╹✘
  • 1