サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
ブックレビュー
qiita.com/katryo
iOSアプリでWeb上の音楽ファイルをHTTPストリーミング再生しながらキャッシュにも入れるライブラリ、Choristerとその実装iOSSwift 目的 mp3ファイルのURLを指定してchangeAudio(NSURL(string: "http://audio.com/file.mp3"))ようにメソッドを呼び出すと、そのmp3をダウンロードしながら再生する……つまりStreaming再生を行う 1ファイルすべてをダウンロードし終わると、ファイルをキャッシュに保存する もう一度、同じURLに対して音楽再生しようとすると、Web上のではなくキャッシュしたファイルを使って再生する 以上の役割を果たすライブラリ、Choristerを作成した。CocoaPodsにも登録してあるので、 でインストールできる。 ノベルゲーム風の小説投稿サービス http://denkinovel.com/ のi
import chardet chardet.detect('abc'.encode('utf-8')) > {'confidence': 1.0, 'encoding': 'ascii'} chardet.detect('あいうえお'.encode('utf-8')) > {'confidence': 0.9690625, 'encoding': 'utf-8'} chardet.detect('あいうえお'.encode('Shift-JIS')) > {'confidence': 0.5, 'encoding': 'windows-1252'} ちゃんと動いた。'あいうえお'.encode('Shift-JIS')がwindows-1252だと判定されたのはちょっと不安だが、confidenceが0.5なのでchardet自信も半信半疑なのだろう。文が短すぎたので仕方がない。 Web
※ Swift Bondはv4でAPIが大きく変化しました。BondやDynamicがObservable, EventProducerに変化するなどかなり大胆な変更なのでご注意ください。 ※ この記事で作ったコードをSwiftBond v4のAPIにあわせてクラス名をリネームしたものを https://github.com/katryo/MiniBond に上げました。また、CocoaPodsに登録したので pod 'MiniBond' で使えます。 tl;dr Swift Bondはお手軽に使えてよいけど->>という記述方法が独特すぎて好きになれない 実装量自体は小さい。一から作ってみてもすぐ完成するから、自分で一部作ってみた Bond, BondBox, Dynamicを使って循環参照を防ぐ仕組みがSwift Bondの核 背景 クライアントアプリを開発すると、ユーザーの行動でMod
.main .container .row .span4.offset4 h2 | パスワード変更 = resource_name.to_s.humanize = form_for(resource, :as => resource_name, :url => registration_path(resource_name), :html => { :method => :put }) do |f| = devise_error_messages! - if current_user.encrypted_password.present? div = f.label :current_password, '現在のパスワード' br = f.password_field :current_password div = f.label :password, '新しいパスワード' br = f.
Storyモデルのバリデーションを行う。 Storyがhas_many:taggings なとき、1つのstoryが持てるtaggingsの数を制限したい。 方法1: Sexy Validationを使う taggingsはArrayなので、lengthメソッドあるいはsizeメソッドでサイズを知ることができる。だからもしかしてvalidatesで:lengthが使えるんじゃないかなーと思っていたら、 使えた。 validates :taggings, :length => { :maximum => STORY_TAGGINGS_LIMIT_SIZE, :too_long => "タグ数が限界を超えました! 限界タグ数は%{count}です!" } とすればバリデーションは完成。 なお、タグづけの方法は Railscasts#382 http://railscasts.com/episo
この投稿は現実逃避アドベントカレンダー2013の4日目の記事です。 2日目の記事でBing APIを使ってフェッチしたhtmlを使うので、2日目を先に読んでおくと理解しやすいです。 本稿を3行でまとめる scikit-learnというPythonのライブラリを調べた 2日目で保存したhtml内の語のtf-idfを計算した 語とtfidfのマッピングを確認した 参考 scikit-learn公式、テキストの素性抽出ドキュメント scikit-learnを使ってTweet中の単語のtfidf計算 完成品 Fork me! 理論 tfidfの定義 tf-idfは tf * idf の値。あるドキュメント(文書)集合において、あるドキュメントの、ある単語につけられる。tf-idfが高い語は重要と考えることができる。情報検索において、語への重みづけに使える。 tf (Term Frequency)は
Python 3.3でmatplitlibとpylabを使おうとしたら RuntimeError: Python is not installed as a frameworkというエラーが発生したときの解決方法Pythonmatplotlibpylab 経緯 pyenv virtualenv Python 3.3.1 で、Scikit-learnを使った機械学習をやろうと思い立った。ついでに図の可視化もやろうと考えてmatplotlibも使うことにした。matplotlibを簡単に使うためにpylabをimportしたところ、RuntimeError: Python is not installed as a frameworkというエラーが発生したので、matplotlibの設定を変えて、問題を解決した。 インストール手順 $ pip install scikit-learn $ br
Python3.3で実装したナイーブベイズ分類器を利用して、文章と文字列中の語の共起頻度から、類似度を計算するPython機械学習MachineLearning この投稿は現実逃避アドベントカレンダー2013の3日目の記事です。 今回の内容を3行でまとめる 前回作った分類器を利用した類似度計算器を作った カテゴリと入力文字列の類似度を計算できるようにした コサイン類似度とシンプソン係数を使った類似度が計算できる Githubにコードをまとめて上げた。 https://github.com/katryo/bing_search_naive_bayes_sim 前回までのあらすじ Bing APIを利用してWeb検索を行い クエリをカテゴリ名として、分類器に学習させ 入力した文字列がどのカテゴリに入るか分類させる こういうシステムを作った。 今回追加した機能 入力した文字列と各カテゴリに入れた
Python3.3で実装したナイーブベイズをBing APIで取得したWebページで学習。文章を分類させるPython機械学習NaiveBayes この投稿は現実逃避アドベントカレンダー2013の2日目の記事です。 前回実装したナイーブベイズ。せっかく作ったので、これまで書いたコードと組み合わせて実用的なシステムにした。 GithubにAPIキー以外のコードをまるごと上げたので、よかったらそのまま使ってください。 https://github.com/katryo/bing_search_naive_bayes 作ったもの概要 与えられた検索クエリで、Bing APIを使ってWeb検索して、50件のWebページを取得する 取得したHTMLファイル内の文章をBag-of-wordsにして、検索クエリをカテゴリとしてナイーブベイズの学習をする。学習を行った分類器はpickle化して保存。 分類
これは現実逃避アドベントカレンダー2013の1日目の記事です 機械学習 はじめよう 第三回 ベイジアンフィルタを実装してみようで紹介されたナイーブベイズを実装した。 ただし、この記事のコードはちょっと読みにくい。具体的には、変数名が word という単数形の単語なのに型がlistであったりと、罠が多い。さらに、3ページ目のリスト7で比較演算子の < と > を間違えるという凡ミスも見つかった。たぶん、自分でコードを実行していないのだと思う。 そこで、この記事で紹介されたベイジアンフィルタを Python 3.3で Yahoo!デベロッパーズネットワークの日本語形態素解析ではなくMeCabを使って よりリーダブルに 実装しなおした。 追記 この記事で作ったベイジアンフィルタを使って、Bing APIを利用して取得したWebページを利用した学習と分類を行いました。 http://qiita.c
gensimというトピックモデルを扱うPythonのライブラリがある。公式ではPythonのバージョン 2.5 <= Python < 3.0 にしか対応していない。 しかしSamantpさんがgensimPy3というライブラリを公開している。gensimをforkしてPython3.3に対応させたものだ。 今回はこのgensimPy3を使ってしょとうさんの小説家になろうのランキングをトピックモデルで解析(gensim) と同じ事ができるか実験した。 ※gensimの使い方参考 http://yuku-tech.hatenablog.com/entry/20110623/1308810518 GensimPy3のインストール からソースコードをcloneしてくる。
WEB+DB Press 75号と76号のEmerging Web Technology研究室を手元で再現しようとしてハマった話chefVagrantweb+DB_PRESS 顛末 伊藤直也さんの「ChefとVagrantによるインフラのコード化」と「serverspecによるテスト駆動インフラ構築」を続けて手元で試した。 「serverspecによるテスト駆動インフラ構築」の122ページ、nginxの「テストを実行する」ステップで、テストが赤のままFailureした。WEB+DBの記述によれば、ここですべて通るはずなのに。 何度試してもテストは通らない。よくログを見ると、そもそも
Rails 3.2.13での出来事。 開発環境(Mac OS X 10.7.5 Lion)でだけ、Railsでlayouts/applicationのレンダリングに異常に時間がかかった。 rack-mini-profilerで計測したらこうなった。Rendering: layouts/applicationに34秒。起動時だけでなく、ページ遷移ごとに異常に時間がかかる。 結局、原因はCSSとJSのコンパイルだった。app/views/layouts/application.html.erbの、
Capybara.javascript_driver = :poltergeist Capybara.register_driver :poltergeist do |app| Capybara::Poltergeist::Driver.new(app, :js_errors => false, :timeout => 60) end とすればよいとわかった。各オプションについて以下に説明する。 :js_errors :js_errors => falseにしたのはCapybara::Poltergeist::JavascriptError: というエラーを防ぐため。JSのエラーはよくあることなのだが、エラーが出るたびにCapybaraを止めるのは時間の無駄。ということで、JSのエラーは無視することにした。 :timeout Timeoutはデフォルトでは30秒。しかし、ログインのような時
Python3.3.1 in BottleでGoogle Custom Search APIを使って検索するだけのアプリケーションを作るPythonGooglebottle 後の人のために残します。 Python3の資料が少ない Bottleの日本語資料も少ない 以上の理由で、無駄なところで苦労しました……。 目次 この組み合わせの理由 Custom searchの例 Custom Searchを使って検索する部分 Webアプリケーションとしてのレスポンスを返す部分 完成 感想 ソースコード この組み合わせの理由 Python3の理由 まず研究にPythonを使うことに決めた。Numpy, ScipyのあるPythonは情報検索の研究に向いている。 Python3はデフォルトのエンコーディングがutf-8なので、Python2より日本語を扱いやすい。 Bottleの理由 Webの研究である
application.cssに *= require_tree . のかわりに *= require_directory . とする。これでassets内全てでなくassets内一番上のディレクトリだけを参照するようになる。 それから、assetsディレクトリにinsideとか適当な名前をつけたサブディレクトリを作って、読み込ませたくないCSSをそこに移動させる。たとえばstories.css.scssをここに移動させる。 これで、まずinsideに入れたCSSを読み込まなくなる。 読み込ませたいページのViewにだけ、 <%= stylesheet_link_tag "inside/stories", :media => "all" %> という読み込みタグを書き込む。これでstories.css.scssは、そのページでのみ読み込まれる。 Register as a new user
Denkinovelという、ノベルゲーム風の小説を書ける投稿サイトをRails + Herokuで開発しています。 サービスの特性上assetsに多くの画像、音楽ファイルを置いているので、HerokuのSlug size 200MB縛りがきつくなってきました。こんな状況のためにasset_syncというgemがあるので、使ってみることにしました。Heroku公式で推奨しているgemです。 herokuでのasset_syncの使い方は、英語公式がこちら。https://devcenter.heroku.com/articles/cdn-asset-host-rails31 ボランティアによる日本語訳もあります。ありがたい。こちらです。https://github.com/herokaijp/devcenter/wiki/cdn-asset-host-rails31 インストール herok
Railscasts#235で作成したDevise入りアプリケーション。 これをカスタマイズして、 OmniAuthでユーザー登録した場合はemailの入力は不要にする OmniAuthで登録したユーザーが自分のユーザー情報を編集したとき、emailフォームを空白にしても、uniqueバリデーションでアップデートを拒否されないようにする 以上の2つを満たすようにしたい。 なお現在Deviseのアップデートに伴い、より簡単になったOAuth対応機能を使ったRailscasts#235revisedが公開されている。が、アプリケーション作成の際に旧バージョンのRailscastsを参考にしたので、今さら変えられない。 インデックスを消す email_required?をオーバーライド emailカラムのデフォルト変更 の順番で作業を行う。 インデックスを消す Deviseで
CapistranoでUnicorn + nginx in Ubuntuにデプロイしたら環境変数が適用されない問題解決メモRailsnginxCapistranounicorn CapistranoでVagrantにデプロイした際、なぜか設定したはずの環境変数が適用されなかった。それはserviceコマンドの挙動が原因だった。という話です。 経緯 おなじみRailscasts#335で紹介された方法で、いったんデプロイには成功した。 しかしその後、Raiscasts#337を参考にconfig/recipesにCapistranoの設定を分割してからVagrantで作った環境にデプロイしたところ、環境変数が読み込まれなかった。 大問題である。 環境変数には、他人には見られたくないAmazon S3のパスワードなどが入っている。asset_syncやfogを使っているので、アプリケーションに
NoMethodError: undefined method `visit' for #<RSpec::Core::ExampleGroup::Nested_7:0x007fff279d8158> と、Capybaraのメソッドを認識しないという事件がありました。 こう言われたときは、ここに書いてあるとおり、 https://github.com/rspec/rspec-rails/issues/360 spec_helper.rbのRSpec.configureの中にconfig.include Capybara::DSLを書くとうまく動きます。 以下がサンプルです。 require 'rubygems' require 'spork' #uncomment the following line to use spork with the debugger #require 'spor
追記 2012/09/22 モック部分、シンボルだとうまくいかないので文字列で"uid"という風に書かないといけません。修正しました。 初めてTDDをやってるのですけど、OAuth認証のテストのやりかたを調べるのに時間がかかったので、後のためにここに書いておきます。 #coding: utf-8 require 'spec_helper' describe "A logged in user" do before do OmniAuth.config.test_mode = true user = FactoryGirl.create(:user) OmniAuth.config.mock_auth[:twitter] = { "uid" => "11111", "provider" => "twitter", "info" => { "description" => "こんにちはこんにち
あらかじめ完成しているindexページに検索機能を追加する。今回はSQLでのLIKE演算子を使ったシンプルな検索を実現する。 Viewには <%= form_tag stories_path, :method => "get" do %> <%= text_field_tag :title, params[:title] %> <%= submit_tag "検索"%> <% end %> と書いておいて、 controllerのindexメソッドには、機能追加前は @products = Produc.all と書いてあったりするけど、そのかわりに @products = Product.where("title LIKE ?", "%#{params[:title]}%") を書き足す。 これで完成。 いちおう%#{}%で囲ってエスケープはしてあるけど、もしかしたらSQLインジェクショ
このページを最初にブックマークしてみませんか?
『@katryoのマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く