タグ

ブックマーク / tnakamura.hatenablog.com (19)

  • Heroku でマルチテナントな Rails アプリを実現する - present

    はじめに Web アプリでマルチテナントをやる場合、 すべてのテーブルに tenant_id を追加してデータを分けるのではなく、 テナントごとにデータベースを分けたい。 データベースを分けておけば、バグで他のテナントのデータまで変更してしまう可能性を減らせる。 データベースを分けたマルチテナントをサポートする、 『Apartment』という gem を使った記事を以前書いた。 Heroku 上での運営を考えているので、 Heroku 上でもテナントごとにデータベースを分けたマルチテナントが可能か試してみた。 なお、Heroku Postgres を使うから、厳密にはテナントごとにスキーマを分けることになる。 Heroku にデプロイ Rails + Apartment でマルチテナントな Web サービスを作る - present で作成した Rails プロジェクトを使うことが前提。

    Heroku でマルチテナントな Rails アプリを実現する - present
    invent
    invent 2022/11/16
  • DTCoreText で NSAttributedString を高速に描画 - present

    先日、HTML 文字列を NSAttributedString に変換する方法を書いた。 NSAttributedString を UILabel の attributedText にセットするだけで、 お手軽に HTML を表示できるけど、UILabel は描画が非常に遅い。 UIWebView と同じか、少しマシかも、ってくらいには待たされる。 記事のサマリー程度でこの遅さ、ちょっと使えない。 実用的な速度で NSAttributedString を描画するライブラリを探してみたところ、 DTCoreText というのが良さそうだった。 Cocoanetics/DTCoreText 低レイヤー API の CoreText を使って、ビューに直接テキストを描画するライブラリ。 例えば、DTCoreText が提供する DTAttributedTextView を使うことで、 self.

    DTCoreText で NSAttributedString を高速に描画 - present
    invent
    invent 2019/02/28
  • 『ゼロから作る Deep Learning』を読んだ - present

    AlphaGo が碁の元世界王者イ・セドル氏に勝利したり、 IBM のワトソンが難症例患者の正しい病名を見抜いたり、 Google 翻訳がニューラルネットワーク版に切り替わって翻訳精度が劇的に向上したりと、AI が急激に身近になった昨今。 今さらながら AI、とりわけ Deep Learning について知っておきたいと思って購入。 今年買った技術書で一番勉強になった。 Deep Learning を扱ったは雨後のタケノコのようにたくさん出版されたけど、書店でパラパラっと眺めて、難しい数式に拒否反応が出て棚に戻すものが殆どだった。高度なコンピュータサイエンスを学んでいないこの身がツライ。 その点、書は Python のコードが中心だったので心理的障壁が低かった。 そんな書でも数式は避けられないので当然出てくるが、計算グラフを使った解説のおかげで、自分みたいな数式アレルギーでもなんとか

    『ゼロから作る Deep Learning』を読んだ - present
    invent
    invent 2016/12/02
  • 『なるほどデザイン』を読んだ - present

    デザインの勉強として購入。 図解が豊富で分かりやすかった。 特に、デザインによって伝わり方が異なる、というのが視覚的にはっきりと理解できた。 この自体のデザインが素晴らしい。 自分がデザインしたい対象は Web サイトなのけど、 書を読めばクールな Web デザインが作れる、ということにはならなそう。 載っているデザイン例は、雑誌や書籍の紙面を対象にしたものがほとんどだったし。 それでも Web デザインに適用できるところはあるはず。 CGM やメディア系の Web サービスなら適用できる範囲も広そうだな。 なるほどデザイン 作者: 筒井美希出版社/メーカー: エムディエヌコーポレーション(MdN)発売日: 2015/07/31メディア: Kindle版この商品を含むブログを見る

    『なるほどデザイン』を読んだ - present
    invent
    invent 2016/07/10
  • 『エンジニアとして世界の最前線で働く選択肢』読んだ - present

    エンジニアである以上、シリコンバレーやサンフランシスコにある 大企業やスタートアップに憧れたことはあった。 どんなオフィスで、どんな仕事をして、どんな生活を送るのか、 今でも興味はある。 書はそんな興味を満たしてくれた。 エンジニアの収入が高いとか、オフィスやオシャレだとか、 福利厚生がいいといった、メリットばかりが注目されがち。 だけど、当然デメリットはある。 企業の業績が悪ければレイオフがあるし、 パフォーマンスが悪ければファイアされる。 生活面でも、外国人として働くわけだから、文化事が合わない可能性もある。 ただ、シリコンバレーは外国人の割合が 50% 超えていて、 アメリカで最も外国人が働きやすい場所みたい。 書でも述べてるけど、シリコンバレーが世界の最前線になった一番の要因は、 雇用の流動性が高いからだと思う。 起業に失敗しても他の企業に就職できるから、 次々と新しいスタ

    『エンジニアとして世界の最前線で働く選択肢』読んだ - present
    invent
    invent 2015/12/02
  • AFNetworking と ReactiveCocoa を組み合わせる - present

    ReactiveCocoa を導入したからには使い倒す方針でやっていて、 AFNetworking を使った Web API 呼び出しは、次のようにして RACSignal 化している。 let signal = RACSignal.createSignal({ (subscriber) -> RACDisposable! in let manager = AFHTTPRequestOperationManager(baseURL: baseURL) let operation = manager.GET( path, parameters: parameters, success: { (operation, response) -> Void in subscriber.sendNext(response) subscriber.sendCompleted() }, failure:

    AFNetworking と ReactiveCocoa を組み合わせる - present
    invent
    invent 2015/10/24
  • RubyMotion をアンインストール - present

    Apple の新言語 Swift を使い始めていて、思いのほか書き心地が良かったので、 iOS アプリ開発は RubyMotion から Swift に移行することにした。 そこで、後戻りできないように、MacBook から RubyMotion をアンインストール。 sudo rm -rf /Library/RubyMotion sudo rm /usr/bin/motion rm ~/Library/RubyMotion 書き心地というか、楽しさでは RubyMotion も負けていないんだけど、 ライセンス更新に毎年 10000 円ほどかかるのがツライ。 iOS Developer Program で 7800 円かかるから余計にね。

    RubyMotion をアンインストール - present
    invent
    invent 2014/09/18
  • そろそろ RubyGems ライブラリにキラキラネームが多いことについて一言いっておくか - present

    gem って宝石という意味があるから、名前がキラキラしていてもおかしくない。 みたいなことを、以前誰かが言ってて、不思議と納得してしまった。 キラキラネームの gem に出会うたびに「名前から使い方がわからない」って愚痴ったりもしてたけど、今では「しょうがねぇなぁ」って思えるようになった。

    そろそろ RubyGems ライブラリにキラキラネームが多いことについて一言いっておくか - present
    invent
    invent 2014/04/26
  • Vagrant + rails-dev-box で Rails アプリ開発環境を作成 - present

    はじめに 自宅の MacBook Pro は開発専用じゃないので、 PostgreSQL や Memcached といったミドルウェアをインストールしたくない。 そこで Vagrant を使って、気軽に作ったり壊したりできる開発環境を構築してみることにした。 今回は rails-dev-box を使ってみる rails/rails-dev-box Rails 体の開発環境を作るための box。 Ruby だけでなく MySQL や PostgreSQL や Memcached といった、もろもろのミドルウェアがインストールされた環境を、簡単に作成できる。 Rails アプリの開発でも使えそう。 早速やってみた Vagrant と git は既にインストールしていることが前提。 host $ git clone https://github.com/rails/rails-dev-box.

    Vagrant + rails-dev-box で Rails アプリ開発環境を作成 - present
    invent
    invent 2014/04/19
    Vagrant rails-dev-box で Rails アプリ開発環境を作成 - present
  • Grape を使って Rails アプリに Web API を組み込む - present

    Rails アプリに Web API を追加したい。 Rails のコントローラーで実装してもいいんだけど、せっかくなんで、 Web API マイクロフレームワーク『Grape』を試してみた。 Grape | REST-like API micro-framework Gemfile に gem "grape" を追加して bundle install でインストール。 RAILS_ROOT/app/apiapi.rb を作成。 RAILS_ROOT/lib に置くか迷ったけど、モデル使うし、Web API もアプリの一部と考えているから app 下に置くことにした。 # coding: utf-8 class API < Grape::API format :json default_format :json prefix "api" version "v1", using: :p

    Grape を使って Rails アプリに Web API を組み込む - present
    invent
    invent 2014/04/13
  • UITableView のセパレーターの描画がおかしい - present

    まずはこれを見て欲しい。 UITableView のセパレーターがおかしなことになっている。 左端に隙間が開いているものもあれば、左端までぴったり線が描画されているものもある。 左端までぴったり線が描画されているものは、線も少し太い。 UITableView の separatorStyle を UITableViewCellSeparatorStyleNone にしても、左端まで達している線は残る。 カスタムセルを使っているけど、border を設定してはいない…。 ほとんど諦めかけていたんだけど、ふと 「行の高さがおかしいのかも」と思って、行の高さをコンソールに出力してみたら 123.789993286133 123.789993286133 123.789993286133 123.789993286133 123.789993286133 123.789993286133 案の定、

    UITableView のセパレーターの描画がおかしい - present
    invent
    invent 2014/04/10
  • Objective-C での日付操作が苦行過ぎるので NSDate-Escort を導入した - present

    Objective-C の日付操作では NSDate だけじゃなく NSDateComponents や NSCalendar が登場してきて、 その面倒くささはもはや苦行。 そもそも、簡単に年や月を取得できない NSDate の API がイケてない。 日付操作をもっと手軽にやりたい。 もう自分でライブラリを書こうかと思って、 NSDate で日付操作する方法を詳しく調べていたら NSDate-Escort を見つけてしまった。 azu/NSDate-Escort CocoaPods に対応しているから Podfile に pod 'NSDate-Escort' を追加して pod install でインストールできる。 ソースコードを読んだところ、自分が欲しいと思った機能が一通りそろっていた。 例えば月末の日付なら NSDate *today = [NSDate date]; NSDa

    Objective-C での日付操作が苦行過ぎるので NSDate-Escort を導入した - present
    invent
    invent 2014/03/25
  • 2014 年になって聴き漁った Tech Podcast - present

    今更ながら Podcast にはまってしまった Podcast を先月から今月にかけて聴き漁っていた。 芸能人の Podcast なんてものには興味ないので、 聴くのはもっぱら、Tech Podcast。 ただ、iTunes Store で探したけど、日エンジニアがやってる Podcast ってあまり無かった。 iTunes Store だけ、っていう探し方が悪いのかもしれないけど。 自分が購読している Podcast を紹介してみる。 英語力が残念なため、日語ばかりなのはご愛嬌。 Rebuild Rebuild - Podcast by Tatsuhiko Miyagawa Perl の神こと miyagawa 氏の Podcast。 そのときホットなニュースやテクノロジーが話題の中心。 印象に残っているのは Infrastructure as Code や Immutable I

    2014 年になって聴き漁った Tech Podcast - present
    invent
    invent 2014/02/23
  • FontAwesomeKit の使い勝手が良かったので移行した話 - present

    FontAwesome-iOS、motion-fontawesome を経て、 今は FontAwesomeKit を使っている。 PrideChung/FontAwesomeKit FontAwesomeKit は開発が活発なので、最新の FontAwesome 4.0.3 に対応している。 しかも FontAwesomeKit という名前なのに、FontAwesome 以外のアイコンフォントもサポートしてたりする。 使ってないけど。 でも自分が FontAwesomeKit に移行する決め手になったのは、 UIImage への変換をサポートしていたこと。 UITabBarItem のような UIImage でしかアイコンを指定できないときに重宝する。 FontAwesomeKig は CocoaPods に対応しているからインストールは簡単。 Podfile に pod "FontAw

    FontAwesomeKit の使い勝手が良かったので移行した話 - present
    invent
    invent 2013/12/10
    FontAwesomeKit の使い勝手が良かったので移行した話 - present
  • Rails 本体で特定のパスに IP アドレス制限をかける方法 - present

    RailsAdmin で Web サービスの管理ページを実装しているんだけど、公開するにあたって、管理ページに誰でもアクセスできるのはマズイ。そこでまず考えるのは、管理ページに IP アドレスの制限をかけること。 ただ、今回は Heroku を使っているので、Apache や Nginx で制限する方法は使えない。Heroku では Rail 体でやるしかない。ならば Rack ミドルウェアで制限してやればいいと思い、Rack::Access を使うことにした。 Rack::Access は rack-contrib に含まれているので、まず Gemfile に gem "rack-contrib", require: "rack/contrib" を記述して bundle でインストール。 あとは、config/application.rb で Rack::Access を使うように指

    Rails 本体で特定のパスに IP アドレス制限をかける方法 - present
    invent
    invent 2013/05/06
    Rails 本体で特定のパスに IP アドレス制限をかける方法 - present
  • モデル間のアソシエーションの情報を取得する方法 - present

    belongs_to や has_many で宣言した、 モデル間のアソシエーションの情報を取得するには、 ActionRecord::Reflection の reflect_on_all_associations メソッドを使えばいい。 ActiveRecord::Base は ActiveRecord::Reflection を include しているので、 モデルのクラスメソッドとしてすぐ使える。 # 全部 Task.reflect_on_all_associations # belongs_to だけ Task.reflect_on_all_associations(:belongs_to) # has_many だけ Task.reflect_on_all_associations(:has_many) 1 件だけ取得する reflect_on_association なんて

    モデル間のアソシエーションの情報を取得する方法 - present
    invent
    invent 2013/04/11
    モデル間のアソシエーションの情報を取得する方法 - present
  • グリーンハウスの『リコッタパンケーキ』 - present

    渡辺通の『ホテルニューオータニ』1F にある『グリーンハウス』へ行ってみた。 ここの『リコッタパンケーキ』は凄く評判が良いらしい。 お目当てのリコッタパンケーキは、コーヒーまたは紅茶のセットで1700円。 超高い。ランチ2回相当の値段がするパンケーキって…。 作るのに時間がかかるらしく、紅茶を飲みながらまったりと待つこと20分。 運ばれて来たのがこちら。 一口べて驚いた。信じられないくらい柔らかい。 ふんわりと口の中で溶けてしまう。 スフレタイプのチーズケーキみたいなしっとり感。 1枚目はそのまま、2枚目はメープルシロップ、最後の3枚目ははちみつで頂くと3度美味しい。 今までべたパンケーキなんて目じゃない、というか比べるのも恐れ多い。 旨いと評判とはいえ、所詮パンケーキと侮っていた。もはや次元が違った。 1700円にサービス料10%がプラスされるため、実際の支払いは1840円に。 とに

    グリーンハウスの『リコッタパンケーキ』 - present
    invent
    invent 2013/03/23
    グリーンハウスの『リコッタパンケーキ』
  • Objective-Cのライブラリ管理ツールCocoaPodsを導入してみた - present

    CocoaPodsって何? CocoaPods/CocoaPods · GitHub CocoaPods は Objective-C のライブラリ管理ツール。RubyBundler みたいなもの。 開発中の iPhone アプリでカレンダーが使いたくなって TapkuLibrary を README を見ながら導入したんだけど、プロジェクトにファイルを追加したり設定を変更したりと苦労した。 ライブラリを追加するたびに毎回同じような思いをするのは嫌だと思っていたところに、CocoaPods の存在を知ったんで飛びついてみる。 CocoaPods のインストール CocoaPods は Ruby の gem として提供されている。以前は MacRuby が必要だったみたいだけど、今ではシステムの Ruby でもインストールできるようになった。 gem install cocoapods

    Objective-Cのライブラリ管理ツールCocoaPodsを導入してみた - present
    invent
    invent 2013/02/17
    Objective-Cのライブラリ管理ツールCocoaPodsを導入してみた - present
  • 参考になりそうなオープンソースのGAEアプリ - present

    GAE アプリを開発しているけど、Python と GAE の両方とも初心者なので、どう実装したらいいのか迷う。そこで、「オープンソースのGAE向けアプリを参考にすればいいじゃないか」と考え、ネットで探してみた。 kay-framework - A web framework made specifically for Google App Engine - Google Project Hosting GAE に特化して開発された Python フレームワーク。 アプリの開発に使ってもいいし、オレオレフレームワーク開発の参考にするのもアリ。 google-app-engine-oil - Yet another web framework on App Engine - Google Project Hosting Ruby on Rails を意識して作られた GAE/Python

    参考になりそうなオープンソースのGAEアプリ - present
    invent
    invent 2013/02/17
    参考になりそうなオープンソースのGAEアプリ - present
  • 1