サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
2024年ランキング
favril.hatenablog.com
JSON文字列をオブジェクトに変換してくれる JSON.parse() を使ってみたが、 かなり使いにくく感じた。 というのも、 JSON.parse("{hoge: 1}"); // error これがSyntaxErrorになる*1 JSON.stringify() が厳密なJSON文字列をくれるらしいので、 どう書けばよかったのか、回答を頂く。 JSON.stringify({hoge: 1}); // {"hoge":1} 試す。 JSON.parse('{"hoge":1}'); // ok でも、文字列をシングルクオートにすると、 JSON.parse("{'hoge':1}"); // error SyntaxErrorになる。 値が文字列の場合も同様。 JSON.parse('{"hoge":"foo"}'); // ok JSON.parse('{"hoge":' + "
before_filter, after_filter, around_filter を枚数重ねて、 どのくらいパフォーマンスに影響が出るのかをざっくり調べてみた 環境 App Server Amazon EC2: Large Instance Apache: デフォルト設定 Ruby: 1.8.7 Passenger RailsEnv: production RailsMaxPoolSize: 30 RailsPoolIdleTime: 1200 Rails: 2.3.8 Request Server Amazon EC2: Large Instance ab (Apache Bench) でApp Serverに対してリクエスト 100件同時接続を5秒間続けて、どれくらいリクエストを処理できたかを見る $ ab -c 100 -t 5 http://ec2-***.amazonaws.
使う機会はあまり無い気もするが、メモしておく*1 結論から書くと、モデルインスタンス#attributes とするだけ。 model_instance = Model.new attributes_hash = model_instance.attributes # {"attr1" => "val1", "attr2" => "val2", ...} p attributes_hash.class # --> Hash どんなとこで使ったのかというと、 同じ名前のカラムを持っている2つの異なるモデルがあるとする。 そのカラムを一方からもう一方にコピーしたいときに、どうやるのがスマートかな、という話し。 # name, attr1 を持つモデルA と name, attr1, attr2 を持つモデルB があったとする model_a = ModelA.first model_b = Mo
before_filter before_filter :b1, :b2 # b1 --> b2 --> action before_filter :b1 before_filter :b2 # b1 --> b2 --> action before_filter + prepend_before_filter before_filter :b1, :b2 prepend_before_filter :b3 # b3 --> b1 --> b2 --> action before_filter :b1, :b2 prepend_before_filter :b3 prepend_before_filter :b4 # b4 --> b3 --> b1 --> b2 --> action before_filter :b1, :b2 prepend_before_filter :b3, :b
cookie (default), ActiveRecord (:active_record_store), memcached (:mem_cache_store) を比較した。 なお、セッション新規作成時(record insert)と、既にあるセッションでアクセスする時も比較した。 環境 findテストと同じですが、 App Server Amazon EC2: Large Instance Apache: デフォルト設定 Ruby: 1.8.7 Passenger RailsEnv: production RailsMaxPoolSize: 30 RailsPoolIdleTime: 1200 Rails: 2.3.8 Request 兼 DB Server Amazon EC2: Large Instance DB: MySQL my-innodb-heavy-4G.cnf を元
# ruby script/console # 普通に指定しても無視される >> User.create(:id => 100) => #<User id: 1, created_at: "2010-12-13 02:47:03", updated_at: "2010-12-13 02:47:03"> # ブロックで指定すると >> User.create do |u| ?> u.id = 100 >> end => #<User id: 100, created_at: "2010-12-13 02:48:22", updated_at: "2010-12-13 02:48:22"> 使う機会は・・・orz
params だとpathパラメータまで混じってたので、クエリパラメータだけ取る方法などを調べてみたメモ。 hoge コントローラに indexアクションが存在している状態で、 config/routes.rb は以下とします。 ActionController::Routing::Routes.draw do |map| map.edit_hoge '/hoge/:id/edit', :controller => 'hoge', :action => 'index' map.connect ':controller/:action/:id' map.connect ':controller/:action/:id.:format' end /hoge?aaa=1&bbb=2 にアクセスした際の、各パラメータハッシュなどの中身は以下。 {"aaa"=>"1", "bbb"=>"2", "a
image_tagで画像を表示した際に、srcの後ろに付くタイムスタンプは 基本的には File.mtime(image_path) なので、画像ファイルの最終更新時刻です。 image_tag 'rails.png' #=> <img src="/images/rails.png?1298610241" alt="Rails" /> なので、developement環境では画像ファイルをtouchしてあげたりすると、タイムスタンプも更新されます。 しかし、production環境ではtouchしても更新されません。(passengerなり、サーバをリスタートすれば更新されます) なぜこうなるかは、ActionView::Helpers::AssetTagHelper の rails_asset_id メソッドを見るとわかります。 # File actionpack/lib/action_
LWP::UserAgentでtimeoutをセットしたときに、 「timeout」と「それ以外のエラー」を判別したい。 以下のようなコードを見つけたのだが、 use LWP::UserAgent; use XML::TreePP; my $ua = LWP::UserAgent->new(); $ua->timeout(3); my $tpp = XML::TreePP->new(); $tpp->set(lwp_useragent => $ua); my ($tree, $xml, $code) = $tpp->parsehttp(GET => 'http://d.hatena.ne.jp/favril/rss'); # 本当はAPIのリクエストURLとか if ( $code == 200 ) { print "取得成功\n"; } elsif ( ($code == 500) &&
http://activesfdc.rubyforge.org/ を少し使う機会があったので、そのメモを。 ちなみに、Salesforce の知識はほぼ無い状態で触ってますのであしからず・・・。 なお、rails のバージョンは 2.3.5 です。 Setup と HelloWorld みたいなもの 1. install 公式の通りに $ gem install activerecord-activesalesforce-adapter とすると、activerecord-activesalesforce-adapter-2.0.0 がインストールされます*1が、 これだとrails 2.3.5ではパッチ(http://timothynjones.wordpress.com/2008/12/03/patching-activesalesforce-for-rails-222/)を当てないと
Resources - Safari - Apple Developer の User Control of Downloads Over Cellular Networks」の部分 In Safari on iPhone OS (for all devices, including iPad), where the user may be on a cellular network and be charged per data unit, autobuffering and autoplay are disabled. No data is loaded until the user initiates it. This means the JavaScript play() and load() methods are also inactive until the user ini
画像を扱う際のrailsプラグインpaperclip GitHub - thoughtbot/paperclip: Easy file attachment management for ActiveRecord 基本的な使い方は、githubとか紹介ページを参照してもらうとして、 ここでは画像保存のディレクトリ名あるいはファイル名をid連番ではなく、 推測しにくい値にする方法をメモしておきます 前置き まず、デフォルトの設定だと保存pathは、 :rails_root/public/system/:attachment/:id/:style/:filename らしいです。 なので、例えばimageモデルで、 has_attached_file :image, :styles => { :thumb => "100x100#", :mini => "30x30#" } のようにしていたと
手元にあるスマートフォンのhtml5対応状況を、http://html5test.com/ で確認したのでメモ。 iphone4 (4.0.2): Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_0_2 like Mac OS X; ja-jp) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A400 Safari/6531.22.7 iphone3G (3.1.2): Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_1_2 like Mac OS X; ja-jp) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7D11 Safari/528.16 android2.1: Mozil
ローカルでは、http://localhost:3000/ で開発をしているが、 本番サーバで動かすときは、http://domain/prefix/ で動かしたい場合がある。 viewでリンクなどのURLを直書きしていると、相対パスなら大丈夫かもしれないが、 絶対パスは prefix があるせいで、本番サーバに持って行ったときに意図する動作(URL)にならない。 # viewファイル(直書きの例) <a href="/controller/action">link</a> <script type="text/javascript" src="/javascripts/prototype.js"></script> 上の例のように、aタグリンクであったり、 public配下であっても javascripts,stylesheets,images 下のファイルであれば、 railsが用意し
タイトル通りですが、RT/QT という文字列以降を薄く(#999999)するスクリプトを作りました。 下記リンク先のInstallボタンからインストールしてください。 RT obscure for Togetter for Greasemonkey こんな感じです。 【2010/07/04 03:08 追記】 Toggeter --> Togetter に修正しました。すみませんorz
Rails 3.2.0から追加された機能 3.2.0リリースから1年近くたっていて、 今更な感じですが、最近使ってパフォーマンス的に痛い思いをしたので、 ちゃんと計測してみました。 機能/用途の説明は、こちらにおまかせ。 http://d.hatena.ne.jp/hichiriki/20120229 さっそく計測。(rails 3.2.11) 用意したテーブル $ rails g model store3 # storeで3カラム (実際には textカラム1つ) $ rails g model store10 # storeで10カラム (実際には textカラム1つ) $ rails g model store30 # storeで30カラム (実際には textカラム1つ) $ rails g model serialize3 # serializeで3カラム (実際には text
とっても簡単です(Firefox 3.6 で動作を確認)。 html fileのアップロードフォームにonchangeを仕込んでおきます。 あとは、読み込んだファイルの内容を表示するtextareaを用意。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <input type="file" onchange="read(this)" /> <hr /> <textarea id="text" cols="80" rows="20" wrap="off"></textarea> </body> </html> javascript function read (ele) { if (!ele.files.length) return; var file = ele.files[0]; if (!/^te
とても簡単。 html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <form action="save.cgi" method="POST" enctype="multipart/form-data"> <input type="file" name="files" multiple /> <input type="submit" value="submit" /> </form> </body> </html> input type="file" で multiple属性を追加するだけ。 save.cgi (perl) #!/usr/bin/perl use strict; use warnings; use CGI; use File::Copy; my $SAVE_DIR = '/save/
画像をプレビューするために、サーバへアップロードする必要がなくなります*1。 html fileのアップロードフォームにonchangeを仕込んでおきます。 あとは、プレビュー表示用の要素だけ準備。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <form> <input type="file" name="file" onchange="preview(this)" /> </form> <hr /> <b>preview:</b><br /> <div id="preview_field"></div> </body> </html> javascript function preview(ele) { if (!ele.files.length) return; // ファイル未選択 var f
1.単純に obj.property で確認すると・・・ var obj = {}; if (obj.hoge) alert('not exist'); obj.hoge = false; if (obj.hoge) alert('exist false'); obj.hoge = null; if (obj.hoge) alert('exist null'); obj.hoge = undefined; if (obj.hoge) alert('exist undefined'); obj.hoge = ""; if (obj.hoge) alert('exist ""'); obj.hoge = 0; if (obj.hoge) alert('exist 0'); obj.hoge = NaN; if (obj.hoge) alert('exist NaN'); 1番上のif以外は、h
canvasに描かれたデータを取得するには、canvas.toDataURL() を使います。 toDataURL()で得られるのは、base64エンコードされた画像情報なので、 それをサーバに送って、base64デコードして保存という流れです。 toDataURL()して、そのデータをPOSTする部分のjavascript (ajax部分が面倒なので、prototype.jsを使用) function saveImage() { var imgdata = $('canvas_id').toDataURL(); // デフォルトだとpng, 引数でjpegとかも可能 imgdata = imgdata.replace('data:image/png;base64,', ''); // 頭のいらない部分を落とす new Ajax.Request(<画像保存CGIのURL>, { param
タイトルのまんまです。 Firefox/Chromeあたりで動きます。 デモページ html canvasを用意しとくだけです。 canvas内の座標を取るときに、layerX/Y で取りたいので、styleにposition:relativeを当てておきます。 (positionが当たってないと、layerX/Yは pageX/Y の値と等しくなるらしいので。 positionを当てたくないなら、pageX/Yからcanvasのオフセットを引いたりすることになるんでしょうか。) <!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <canvas id="c" style="position:relative; border:3px solid #999" width="600" height="480">
デブサミ2010のhtml5セッションで見たデモ(Movement tracker)*1 が、 衝撃的だったので video x canvas をちょっと勉強した。 1.videoの任意のフレームをそのままcanvasに描画させてみる htmlのbodyに書くにはこれだけ。 <video id="v" src="video.ogv" autobuffer controls></video> <canvas id="c"></canvas> <input type="button" value="copy frame" onclick="copyFrame()" /> copy frameボタンで呼び出されるjavascriptはこんな感じ。 function copyFrame() { var cEle = document.getElementById('c'); var cCtx =
【2010-02-17 追記】 ニコ動のデザイン変更により、設定ボタンの位置がずれていたので修正 - 作りましたので、よければどうぞ。 install >> nico_sort.user.js 「ランキングの設定保存」と同じです。 上のスクリプトをインストールすると、検索結果の画面で、 下の画像のようなボタンが表示されるようになります。 ボタンをクリックすると、そのときのソート順が保存され、 以降、検索した際はそのソート順がデフォルトで使用されるようになります。 - 【スクリプトの話】 元々のニコ動のjavascriptを一部overrideしている*1のがとても微妙ではある。。。 が、他に良い方法も思いつかなかったので(´・ω・`) *1:submitSearch()関数
なんか「ie8 アクセラレータ 無効」とかでググっても、 それぞれのアクセラレータの有効・無効設定方法は出てきたけど、 機能を丸ごとオフにする情報が無かったのでメモ。 [ツール] - [インターネットオプション] - [詳細設定] の [ブラウズ]項目の中に 「選択時に[アクセラレータ]ボタンを表示する」という項目があるので、そのチェックでオン・オフが切り替えれる。 (IEの再起動も必要なし)
ニコニコのJSを眺めていたら、おもしろいコードがあったのでメモする。 マイページで読み込まれるmy3.jsの236行目*1 var ts = new Date/1000|0; まず、new Date/1000 。 getTime() を書かなくても、勝手にミリ秒にしてくれるとは知りませんでした。 >>> new Date/1000 1234567890.123 // 上と同じ >>> (new Date).getTime()/1000 1234567890.123 掛け/割り/引き算は数値として扱われるけど、 足し算だと文字列(Date.toString()した値)として扱われるっぽい。 >>> new Date*1 1234567890123 >>> new Date/1 1234567890123 >>> new Date-0 1234567890123 >>> new Date+0
(※) PDFは重いものもあるので注意 漢字 CJK統合漢字:http://www.unicode.org/charts/PDF/U4E00.pdf CJK統合漢字拡張A:http://www.unicode.org/charts/PDF/U3400.pdf CJK統合漢字拡張B:http://www.unicode.org/charts/PDF/U20000.pdf CJK互換漢字:http://www.unicode.org/charts/PDF/UF900.pdf CJK互換漢字補助:http://www.unicode.org/charts/PDF/U2F800.pdf function isKanji(c){ // c:判別したい文字 var unicode = c.charCodeAt(0); if ( (unicode>=0x4e00 && unicode<=0x9fcf)
<div style="display:none;font-size:14px"> <p><span id="child">子要素(正確には子孫要素)</span></p> </div> こんな感じのhtmlがあったときに、display:none が指定されてるdivを見ずに、 id="child"の要素から、自身が表示されているのかどうかを判別したい。 普通にstyleを見ても当然ながらわかりません。 >>> alert(document.getElementById('child').style.display) "" // 空文字 >>> alert(document.getElementById('child').style.fontSize) "" getComputedStyleを使ってみる >>> var child_style = getComputedStyle(doc
前は日付指定無しでも、 http://www.nicovideo.jp/ranking/mylist/daily/game?rss=2.0 日付指定有りでも、 http://www.nicovideo.jp/ranking/mylist/daily/game/20081101?rss=2.0 RSSが取れたのに、 今(2009/11/01 現在)は日付指定すると結果が返ってこない。 ステータスコードが、410*1なので、一時的なバグとかでもなく、 この機能はなくなってしまったのかもしれない。 Greasemonkeyで使ってたので、ちょっと残念。 HTMLを取ってきて、スクレイピングしないとなのか。。。 (注釈1は、wikipediaのコピペ:HTTPステータスコード - Wikipedia) *1:410 Gone:消滅した。ファイルは恒久的に移動した。どこに行ったかもわからない。404
次のページ
このページを最初にブックマークしてみませんか?
『超自己満足プログラミング』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く