タグ

Tipsに関するan-ironic-manのブックマーク (78)

  • tree-tips: MySQLで大量レコードのjoin | MySQL

    大量レコードのjoinは遅い 遅くなるのはMySQLだけなの? そんなことはありません。MySQLもPostgresもOracleSQLServerも遅くなります。 Oracleのオプティマイザは賢いですが、基的に大量レコードのjoinは避けるべきです。 何故遅くなるの? データ量が多すぎてテンポラリ領域を使う(バッファに乗り気らない)から、です。 何件くらいからjoinが遅くなるの? スキーマ構造によるので一概には言えませんが、大体1000件辺りから微妙に遅くなり、1万件を超えると一気に遅くなります。 1万件程度なら割と力技(マシンパワー)で何とかなるので、1万件を超えた辺りから注意してみて下さい。 よくある例では、ログを元にしたアクセスレポートの生成時に、大量レコードのjoinが必要になり易いかもしれませんね。 解決策 データ量を減らしてからjoinする。 データ量が多いならデータ

    an-ironic-man
    an-ironic-man 2014/06/03
    “スキーマ構造によるので一概には言えませんが、大体1000件辺りから微妙に遅くなり、1万件を超えると一気に遅くなります”。小刻みにSELECTしてUNION ALLするという発想はなかった。
  • JavaScriptでHTMLをダイナミックに書き換える 後編

    まとめて更新を行う(DocumentFragment) これまで、HTMLの要素をDOMを使って自由に操る方法を学んできました。基はすでに身についていますので、あとは応用で、いろいろなWebアプリケーションを作ることができるはずです。しかし、Webアプリケーションを作り込むうえで、パフォーマンスという問題から逃れることはできません。 サーバー上で動作するアプリケーションの場合は、サーバーの負荷を軽減するためにさまざまな工夫をしますが、JavaScriptといえども例外ではありません。近年のWebアプリケーションにおいては、ブラウザ側で実行されるJavaScriptの役割が重要になり、複雑な処理が求められるようになってきました。JavaScriptの書き方によって、表示速度が大きく変わってしまうことがあります。この処理時間とは、ブラウザのレンダリング時間のことです。この点を考慮に入れてJa

    JavaScriptでHTMLをダイナミックに書き換える 後編
    an-ironic-man
    an-ironic-man 2013/10/15
    「追加したいすべてのノードを事前に入れておいたDocumentFragmentで作った器をまるごとHTML上に追加する。レンダリング処理が1回で済むので、パフォーマンスの改善になる」
  • CI で稀に失敗してしまうテストへの対処方法 - クックパッド開発者ブログ

    技術部の福森です。 クックパッドでは RSpec と Jenkins を利用して CI による自動テストを行なっています。 テストの数は 12000 examples を越えていて、テストによっては稀に失敗する物が出てきています: 時間帯依存で失敗してしまうもの 他に同時に実行されるテストに依存しているもの (並列実行で組合せが変わり再現する) インテグレーションテストでの ajax リクエストの微妙なタイムアウト etc また、番環境を壊さないよう、 CI で成功したリビジョンのみデプロイ可能となっており、開発者が push しデプロイしたいと思っている時に無関係な原因で失敗する事を避けたいという欲求があります。 なぜなら、再度ビルドを実行する時間 (およそ 10 分) の間待たされる事になるからです。 そこで、そのようなテスト起因での失敗を減らし、かつ開発者にそれらを修正してもらうた

    an-ironic-man
    an-ironic-man 2013/06/14
    「夜間に繰り返し実行し、稀にあるいは深夜に再現する失敗を発見」「翌月初をシミュレートし、月初に失敗するテストを発見」「GitHub APIを利用してissueを作成して修正を依頼」。贅沢が許されるならCI環境整えたいなぁ
  • assert_dom_equal (ActionController::Assertions::DomAssertions) - APIdock

    an-ironic-man
    an-ironic-man 2013/05/22
    レンダリングのテスト。HTML::Document.newして比較している。タグの属性の順番を気にしなくていい。
  • Excel:ブックの共有で 「印刷の設定」 を共有するには | help me desk

    一定期間更新がないため広告を表示しています

    Excel:ブックの共有で 「印刷の設定」 を共有するには | help me desk
    an-ironic-man
    an-ironic-man 2013/05/09
    ブックの共有 > 詳細設定で個人用ビューに含まないようにして既存の個人用ビューを削除すれば印刷設定も共有できる。
  • ウィンドウ枠の固定をして印刷:Excel(エクセル)の使い方/印刷

    Excelをお使いの方なら、メニュー[ウィンドウ]−[ウィンドウ枠の固定]コマンドで、行・列の見出しを固定する機能をご存知のはずです。 大きな表を扱う際に、スクロールしても行見出し・列見出しを画面に表示しつづけてくれる、便利な機能です。 このウィンドウ枠の固定に関連(?)して 「印刷するときにウィンドウ枠の固定はされないのでしょうか?」 「印刷時にウィンドウ枠を固定するにはどうすればいいのでしょう?」 といったご質問をいただくことがあります。 ウィンドウ枠の固定を行うと印刷時にも同様の設定が行われて、大きな表が複数ページにまたがって印刷されるような場合に、全ページに行見出し・列見出しが印刷されると誤解してしまう方は少なくありません。 実際には[ウィンドウ枠の固定]コマンドは、あくまでも画面上でのみ有効な機能なので、印刷時に行見出し・列見出しがどのページにも印刷されるようにするには、別の設定

    an-ironic-man
    an-ironic-man 2013/05/09
    ページ設定 > シート > 行のタイトルで指定すれば印刷時にもWindow枠の固定的なことができる。
  • index_by (Enumerable) - APIdock

    Instance methods (17) as_json compact_blank (>= v6.1.3.1) each_with_object (<= v3.2.13) exclude? excluding (>= v6.0.0) group_by (<= v3.2.13) including (>= v6.0.0) index_by index_with (>= v6.0.0) many? none? (<= v2.3.8) _original_sum_with_required... (<= v5.1.7) pick (>= v6.1.3.1) pluck sum to_json (<= v2.3.2) without = private = protected Convert an enumerable to a hash. people.index_by(&:login) #

    an-ironic-man
    an-ironic-man 2013/03/18
    Enumerableからハッシュへ。each_with_object({}){|hoge, result| result[hoge.id] = hoge } とかしなくてよかったんだ……。
  • bashなどのshellでシングルクオートをエスケープする方法 - 中野智文

    bashなどのshellでシングルクオートで囲まれた中でシングルクオートをエスケープする方法は残念ながらない。たとえば、 ssh host02 'ssh host03 \'ls -l\' 'みたいなことはできない。 しかし、クオートを一旦閉じてから、シングルクオートをバックスラッシュでエスケープして入力しその後クオートを再開することで、そのようなことが実現できるようだ。 ssh host02 'ssh host03 '\''ls -l'\'' 'すなわち、\'ではなく、'\''ということだ。 おまけ: シングルクオートを'\''に置換するワンライナー ruby -pe '$_.gsub!(/'\''/, %q('"'\\\\\\\\''"'))'

    bashなどのshellでシングルクオートをエスケープする方法 - 中野智文
    an-ironic-man
    an-ironic-man 2013/02/22
    シェルでシングルクオーテーションを入れ子にしたいとき①。'\''を使う。
  • awk内でシングルコーテーションを使いたい - Qiita

    mysql> desc user_data; +---------+-----------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +---------+-----------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | user_id | int(11) | YES | | NULL | | | data | int(11) | YES | | NULL | | | detail | char(255) | YES | | NULL | | +---------+-----------+------+----

    awk内でシングルコーテーションを使いたい - Qiita
    an-ironic-man
    an-ironic-man 2013/02/22
    シェルでシングルクオーテーションを入れ子にしたいとき①。\047を使う。
  • ngrepでパケットをキャプチャしてgrep (ngrepの使い方) - うまいぼうぶろぐ

    最近知ったんだけど、かなり便利くね?もしかして常識? http://ngrep.sourceforge.net/ http://www.atmarkit.co.jp/fsecurity/rensai/securitytips/027ngrep.html installにはlibpcapがいる。 http://downloads.sourceforge.net/libpcap/ もしくはepelリポジトリからyumでinstallする。 # yum install -y --enablerepo=epel ngrep 追記 今更知ったけど、ASCIIで表示するだけならtcpdump -s0 -A だけで良いので(ngrep -W byline とほぼ同じ?)、grep 的なことしないならtcpdump で十分な気がする。 man tcpdump -A Print each packet (m

    ngrepでパケットをキャプチャしてgrep (ngrepの使い方) - うまいぼうぶろぐ
    an-ironic-man
    an-ironic-man 2013/02/22
    パケットキャプチャ。ngrep -q -W byline '' '(host sample.com or sample.co.jp) and port 80' とかするとリクエストの情報が見える。
  • GitHub - gnarf/jquery-ajaxQueue: A simple queue for your ajax requests in jQuery.

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - gnarf/jquery-ajaxQueue: A simple queue for your ajax requests in jQuery.
    an-ironic-man
    an-ironic-man 2013/02/20
    jQuery.ajaxと同じ感覚でjQuery.ajaxQueueとやると、他のAjaxリクエストが終わるのを待ってから自分のAjaxリクエストを送る、ということが可能。さよならsetInterval(´;ω;`)ブワッ
  • GitHub - activerecord-hackery/ransack: Object-based searching.

    Documentation There is extensive documentation on Ransack, which is a Docusaurus project and run as a GitHub Pages site. Issues tracker Before filing an issue, please read the Contributing Guide. File an issue if a bug is caused by Ransack, is new (has not already been reported), and can be reproduced from the information you provide. Please consider adding a branch with a failing spec describing

    GitHub - activerecord-hackery/ransack: Object-based searching.
    an-ironic-man
    an-ironic-man 2013/02/15
    検索条件をユーザが組み立てる。form_forの要領で使える。デモ: http://ransack-demo.herokuapp.com/users/advanced_search
  • ActiveRecordで複数レコード、BULK INSERTする方法とパフォーマンスについて - Qiita

    あるテーブルに対して複数のレコードを同時に登録したいことがあります。 このときに登録する数だけINSERTを発行するのはあまり効率がよくありません。 そこでBULK INSERTと言われる単発のSQLで一括登録する方法がよく使われます。 BULK INSERTとは 単純なbooksというテーブルを使い、BULK INSERTはどういうものか確認する。 CREATE TABLE `books` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAU

    ActiveRecordで複数レコード、BULK INSERTする方法とパフォーマンスについて - Qiita
    an-ironic-man
    an-ironic-man 2013/02/15
    activerecord-import gemを使うと、Model.import(instances) でBULK INSERTできる。
  • instance_variable_defined? (Object) - APIdock

    an-ironic-man
    an-ironic-man 2013/02/10
    @hogeをロードしたかどうかを見るために@hoge_flagみたいな変数を使う必要はない。今度使おう。
  • mysqldumpの--whereオプションについて - tohnishi’s blog

    仕事関係で久々にMySQL(4.0.xx)を使うことになり、とあるサーバー(telnet/ssh、ftpのみ使用可)から別のサーバー(phpMyAdminのみ使用可)にデータをインポートするという作業を行ったのだが、移行元サーバーでのmysqldump実行結果ファイルが大きすぎるために移行先phpMyAdminでの取り込みが失敗するという問題が発生した。 そこでmysqldumpのオプション--whereを使って出力を指定数ごとに分割するスクリプトを書いてみたのだが、なんかどうも上手く動作しない。いろいろ調べたり試したりしているうち、参照していたmysqldumpマニュアルの--whereオプションの説明が変ではないか、ということに思い至った。 例えばdev.mysql.comの4.1系のmysqldumpコマンドのマニュアルでは、--whereオプションの記述は以下のとおりである。 -w

    mysqldumpの--whereオプションについて - tohnishi’s blog
    an-ironic-man
    an-ironic-man 2013/01/31
    mysqldump ... --where="column = 'hoge'"でcolumnの値がhogeのレコードのみダンプ。
  • Rubyスクリプト中から別のRubyスクリプトを呼び出した時の標準出力 – .com-pound

    Rubyスクリプトから別のRubyスクリプトを呼び出したい時がある. そういう場合, msg=`hoge.rb` とすると,hoge.rbが標準出力へ出力した文字列すべてを変数msgで受け取ることが出来る. 1行ずつ受け取って処理したい場合は, IO.popen("hoge.rb") do |pipe| pipe.each do | line | print line end end という感じにすれば,1行ずつとって表示することが出来る. しかし,デフォルトだと,Rubyスクリプトの標準出力はバッファリングされるため,hoge.rbの処理に時間がかかる場合,長い時間立った後に,まとめてhoge.rbの出力をどかっと渡されるようになる. (受け取ったプログラムは,それを1行ずつ処理することはできるけれど) これは標準出力がバッファリングされているのが原因なので,バッファリングしないようにす

    an-ironic-man
    an-ironic-man 2013/01/30
    STDOUT.sync = trueで、標準出力がバッファされずにリアルタイムで出力されるようになる。STDERRじゃなくてもいいのか。
  • ActiveSupport::Concern

    Active Support Concern A typical module looks like this: module M def self.included(base) base.extend ClassMethods base.class_eval do scope :disabled, -> { where(disabled: true) } end end module ClassMethods ... end end By using ActiveSupport::Concern the above module could instead be written as: require "active_support/concern" module M extend ActiveSupport::Concern included do scope :disabled, -

    an-ironic-man
    an-ironic-man 2013/01/27
    extendしたモジュールをincludeするとClassMethodsをextendしてInstanceMethodsをincludeしてくれる。3.2以降はInstanceMethods内に入れなくておk。includedでコールバックなども。しかも依存関係にあるモジュールどうしもうまく扱える神。
  • rspec Pending Tips - Qiita

    it, specify, exampleそれぞれの先頭にxをつけるだけで、Pendingになる。 describe Foo do xit { 1.should eq 1 } xspecify { 1.should eq 1 } xexample { 1.should eq 1 } end Pending: Foo # Temporarily disabled with xit # ./spec/models/foo_spec.rb:4 Foo # Temporarily disabled with xexample # ./spec/models/foo_spec.rb:6 Foo # Temporarily disabled with xspecify # ./spec/models/foo_spec.rb:5 Register as a new user and use Qiita m

    rspec Pending Tips - Qiita
    an-ironic-man
    an-ironic-man 2013/01/12
    「it, specify, exampleそれぞれの先頭にxをつけるだけ で、Pendingになる」。 xit、xspecify、xexample。
  • LC_ALL環境変数とsortコマンド - sileのブログ

    自分の環境では、sortコマンドを実行する時にLC_ALL環境変数に'C'をセットするかしないかで、処理終了までの時間が著しく変わる。 # 約40万行のデータ > wc -l words 392126 words # 入っているのはUTF-8の日語(IPA辞書を利用) > head words やぼったい やぼったし やぼったから やぼったかろ やぼったかっ # 普通のソート > time sort words > /dev/null real 0m37.158s user 0m37.098s sys 0m0.056s # LC_ALL=Cでのソート > time LC_ALL=C sort words > /dev/null real 0m0.293s user 0m0.284s sys 0m0.008s ロケールを考慮してソートするかどうかの違いだと思うが(LC_ALL=Cの場合は、

    LC_ALL環境変数とsortコマンド - sileのブログ
    an-ironic-man
    an-ironic-man 2012/12/28
    「sortコマンドを実行する時にLC_ALL環境変数に'C'をセットするかしないかで、処理終了までの時間が著しく変わる」。grepも同様。
  • @IT:正規表現で使用するメタ文字を検索するには

    文字列検索にはgrepコマンドを使うのが一般的だ。 grepコマンドは正規表現による検索をサポートしており、正規表現で使用するメタ文字という特殊な文字(\、[、]、^、$、*、.など)を含む文字列を検索する際はメタ文字の前にバックスラッシュ(\)を付けなければならない。メタ文字が少数であれば問題ないが、数が多くなるとバックスラッシュでエスケープするのは面倒だ。そんなときは、正規表現をサポートしないgrepであるfgrepコマンドを使う。 例えば、「********」という文字を検索する場合、grepコマンドでは、

    an-ironic-man
    an-ironic-man 2012/12/28
    grepでメタ文字をエスケープするのが面倒なときはfgrepで。grep "\*\*\*\*\*\*\*\*" foo.txt は fgrep "********" foo.txt でおk。