タグ

2016年1月12日のブックマーク (18件)

  • MySQL 5.7のoptimizer_switch、derived_mergeとは何ぞや - かみぽわーる

    このエントリはMySQL Casual Advent Calendar 2015の8日目です。 MySQL 5.7.6からoptimizer_switchにderived_mergeが追加されデフォルトで有効になっている。基的にこれはほっといたらだいたいサブクエリが速くなるやつなので気にしなくてもいいんですが、ちょっと非互換があるのでさくっと説明します。 root@localhost [mysqlcasual] > CREATE TABLE t1 (a int); Query OK, 0 rows affected (0.03 sec) root@localhost [mysqlcasual] > CREATE TABLE t2 (b int); Query OK, 0 rows affected (0.03 sec) root@localhost [mysqlcasual] > INS

    MySQL 5.7のoptimizer_switch、derived_mergeとは何ぞや - かみぽわーる
    rochefort
    rochefort 2016/01/12
    derived_merge=offにするか、サブクエリをマージできない(マテリアライズされる)クエリに書き換えるとよいです(DISTINCTやLIMITをつけるとマージできなくなる)。
  • pt-online-schema-changeと5.6 InnoDBのオンラインALTER TABLE使い分け

    この記事は MySQL Casual Advent Calendar 2015 の9日目です。 MySQL 5.6から InnoDBのオンラインDDL が導入されて久しいですが、一方で pt-online-schema-change (以下pt-osc)もまだまだ元気です。MySQL 5.5とそれより前ではpt-osc一択になりますが、MySQL 5.6とそれ以上の場合はInnoDBさんに任せるかpt-oscを使うかを選択することができます。 MySQL 5.6でもpt-osc一択にしても構わないといえば構わないんですが、いくつかのケースではInnoDBさんに任せた方が速くなったり安定したりするので、そのあたり解説していきます。 TL;DR ウチの使い分け。 原則 pt-osc スレーブの台数が多すぎない かつ データ容量が馬鹿でかくてストレージいつぶしそう または INSERT大杉で2

  • MySQLでサービス停止のないALTER TABLEの検討 - SH2の日記

    MySQLでテーブルへのカラム追加、インデックス追加やテーブルの再編成などを行うと、その間テーブルに共有ロックがかかってしまいます。そのためこれらのメンテナンス処理は、通常利用者の少ない深夜早朝帯にサービスを止めて実施する必要があります。日はそれを無停止、オンラインのままでできないかという話題です。 基的なアイデア メンテナンス対象の元テーブルをコピーして、作業用の仮テーブルを作ります 仮テーブルに対して、カラム追加などの変更を加えます その間、元テーブルに対して行われる更新処理について差分を記録しておきます 仮テーブルの変更が終わったら、記録しておいた差分データを仮テーブルに反映します 差分データの反映が終わったら、元テーブルと仮テーブルを入れ替えます これと似たようなことを考えた方は結構いらっしゃるのではないでしょうか。ただ、言うは易し、行うは難しです。整合性がきちんと取れるかどう

    MySQLでサービス停止のないALTER TABLEの検討 - SH2の日記
    rochefort
    rochefort 2016/01/12
    oak-online-alter-table
  • 二千万レコードあるテーブルへのalterをサービスを止めずに流す | All Your Bugs Are Belong To Ass

    ※このエントリはMySQL Casual Advent Calendar 2015の5日目のエントリです。 openark-kit というものについて ここまで読んでわかった方は、この先を読む必要はありません。 openark-kitとは、mysqlの運用に便利なツールキットを14個あつめたソフトウェアパッケージです。 Shlomi Noachという方がPythonで開発しており、少なくとも2009年に発表されているようです。 2015-12-05時点での最新版は196.1となっており、.tar.gz および .deb で配布されております。 このエントリを書いた背景事情 そもそも僕自身、50を超えるクラスタ化されたmysqlノードと一緒に業務生活を送っております。 ところが、システムが非常に古くさい構成のため、合計レコード数が2億から3億程度ある垂直分割されたテーブルに対しALTERを投

    rochefort
    rochefort 2016/01/12
    oak-online-alter-table
  • Cloud Vision APIの凄さを伝えるべくRasPi botとビデオを作った話

    (この記事はGoogle Cloud Platform Advent Calendar 2015の12月3日分の記事です) Cloud Vision APIと私 Googleに入ってからまもなく5年、Google Cloud Platformのデベロッパーアドボケイト(エバンジェリストみたいな役割)の仕事に就いてから1年が経ちました。仕事の半分はアジア地域向けの開発者コミュニティ支援で、残り半分はGCPの新製品ローンチの支援をグローバル向けに行っています。 特にここ半年は、TensorFlowをはじめ、GCP機械学習系プロダクトのローンチ支援にフォーカスしています。TensorFlowはその序章で、公開前からAlphaカスタマー向けのスライドを作ったり説明やデモしたりしていました。 そうしたGCPの新しい機械学習系サービスのひとつが、Cloud Vision APIです。これはGoogl

    Cloud Vision APIの凄さを伝えるべくRasPi botとビデオを作った話
  • What is Cloud Vision API?

    Cloud Vision API provides powerful Image Analytics capabilities as easy to use APIs. It enables application developers to build the next generation of applications that can see and understand the content within the images. The service enables customers to detect a broad set of entities within an image from everyday objects to faces and product logos. In this video, we show a Raspberry Pi robot tha

    What is Cloud Vision API?
    rochefort
    rochefort 2016/01/12
    cloud vision すごい // あとgopigoもオネーさんもかわいい。
  • Real World Refinements - Qiita

    # Table Syntax Style (like Groovy spock) # Need ruby-2.1 or later describe "plus" do using RSpec::Parameterized::TableSyntax where(:a, :b, :answer) do 1 | 2 | 3 5 | 8 | 13 0 | 0 | 0 end with_them do it "should do additions" do expect(a + b).to eq answer end end end こういうGroovyのspockの様にテストパラメーターを記述するDSLをRefinementsで定義しています。 RSpecのdescribeは単なるクラス定義なので、usingを使って特定のテストケース上でだけ動くDSLが書けます。 最近は使われなくなったshou

    Real World Refinements - Qiita
    rochefort
    rochefort 2016/01/12
    rspec-parameterized
  • Rails のアーキテクチャ設計を考える - Qiita

    はじめに ここ一年くらいずっと Rails の何がダメでどうすれば良くなるのかを考えていました。 Rails を使ってそれなりの規模のアプリケーションを作ったことがある人なら、メンテナンスのしづらさを感じたことがあるのではないでしょうか。 メンテナンスの問題は Rails 以外の開発でも発生することですが、実のところメンテナンスしやすいアプリケーションはどうすれば作れるのでしょうか? この難問に対して私も答えを持っていませんが、考え続けています。 少なくとも、 Rails Way や Rails Tutorial をベースにしたアプリケーション開発は、業務で用いるには簡単すぎるように思います。 「レールに乗る」という言葉がありますが、私は考え方を変えました。 Rails は規模の大きいフレームワークですが、土台に過ぎません。 Rails Way の設計方針は小規模な開発では有効ですが、規模

    Rails のアーキテクチャ設計を考える - Qiita
  • Ruby のオススメの機能7選 - Qiita

    この記事は Ruby Advent Calendar 2015 の 8日目です。 比較的あまり知られていないと思うオススメの Ruby の機能を 7つ紹介します。 Enumerator.new Enumerator.new は知ってはいても、あまり使わない人が多いように思います。 私は非常によく使います。 理由は スコープを新たに導入したい Producer-Consumer パターン。値の生成と消費でフェーズの違いを明確化したい。 そのメソッド内で1度使いたいだけなのに yield するメソッドを別に作るのはちょっと気が引ける。名前空間を汚したくない。 全部、一度配列にしちゃうとメモリが気になる。メモリ消費を節約したい。 ネストを浅くしたい Enumerable モジュールの機能が欲しい といったところです。 たとえば下記のようなかんじで使います。 # Producer フェーズ use

    Ruby のオススメの機能7選 - Qiita
    rochefort
    rochefort 2016/01/12
    ruby3で無くなるかもって話だけど、flipflop便利やん。 // tabも便利
  • RubyのDSLの表現力と生産性で有向グラフの作図効率を上げつつ, Graphvizをインストールせずにgravizo経由で利用する - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    RubyのDSLの表現力と生産性で有向グラフの作図効率を上げつつ, Graphvizをインストールせずにgravizo経由で利用する - Qiita
  • 今から知っておきたいRails 5の新機能・変更点 - Qiita

    はじめに Ruby 2.3のリリース前に、Ruby on Railsのバージョン5.0系列(以下Rails 5)の最初のベータ版がリリースされました。 Rails 5は、JSON APIサーバーやWebSocketサーバー用の新機能を導入するとともに、Ruby 2.2.2以上で動作するため内部的には大きな変更が加えられています。また、モデルがApplicationRecordから継承されたり、Rakeタスクをrailsコマンドで実行できるようになったりといった基的な部分にも大きく手を加えられています。 記事では、GitHubRailsプロジェクトのIssuesやPull Requestsの履歴をもとに、Rails 5の主要な新機能・変更点の紹介を行います。 ※ 他のバージョンのRailsの主要な新機能・機能追加・変更点については以下を参照してください。 Reactwebpackもサ

    今から知っておきたいRails 5の新機能・変更点 - Qiita
  • Railsのレスポンス遅延を通知する

    Railsを運用しているとレスポンスタイムの監視は欠かせません。New Relicなどを使って監視している方が多いかと思いますが、今回はActive SupportのInstrumentation機能を使って10秒以上のレスポンスを通知するシンプルな方法をご紹介します。 Rails この記事はRuby on Rails Advent Calendar 2015の13日目です。 Active Support Instrumentationとは ざっくり言うと「Railsアプリケーションやフレームワーク内のアクションを計測するためのAPI」です。 この仕組みを使うと、コントローラのアクション実行やSQL実行などをフックすることができます。 今回はこのInstrumentationの仕組みを使ってレスポンス遅延の監視を行います。 アクションを監視する アクションを監視するには提供されているフック

    Railsのレスポンス遅延を通知する
    rochefort
    rochefort 2016/01/12
    へー ActiveSupport::Notifications
  • イマドキのCodeIgniterでPHPUnit入門 - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    イマドキのCodeIgniterでPHPUnit入門 - Qiita
  • CodeIgniter 3.0のモダンなインストール方法 — A Day in Serenity (Reloaded) — PHP, CodeIgniter, FuelPHP, Linux or something

    CodeIgniter Advent Calendar 2015 の6日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。 今日は、CodeIgniter 3.0のモダンなインストール方法です。 ところで、モダンって何でしょうね?この用語もきちんと定義されていませんが、ここでは「何となく今っぽい」くらいの意味で使ってます。 ただ、PHPのバージョンとしては5.4以上とします。PHP 5.3でもCodeIgniter体はインストールでき動作しますが、この記事に出てくるコンポーネントの中には動作しないものが含まれます。 なお、PHP 5.4も保守はすでに終了していますので、5.5、5.6または7.0へ移行した方がよいでしょう。 Composerのインストール モダンPHPと言えば、Composerです。 Composerとは、PHPでの新しいパッケージ(ライブラリ)管理

  • CodeIgniter初心者の方に知って欲しいCodeIgniterでのMVCについて — A Day in Serenity (Reloaded) — PHP, CodeIgniter, FuelPHP, Linux or something

    MVCとは? 『CodeIgniter徹底入門』によると? 『CodeIgniter徹底入門』(P.76)によると、コントローラ、モデル、ビューは以下のように説明されています。 Controller(コントローラ)は、入力データに従って適切なデータを呼び出したり、ModelやViewの連携など、アプリケーション全体の制御を行なう Model(モデル)は、データベースへのアクセスやデータの修正/加工などの処理を行なう View(ビュー)は、処理結果の表示など、画面表示を担当する なんとなくわかったようなわからないような説明です。 実際には書籍にはもっといろいろな説明があるので読めば理解が進むと思いますが、コントローラとモデルの区別は実はそんなに簡単ではありません。 CodeIgniter User Guideによると? 公式ドキュメントではどのように説明されているでしょうか。 The Mod

    rochefort
    rochefort 2016/01/12
    標準でnamespace欲しいなぁ
  • PHPUnit の各バージョンについて調べてみた - Qiita

    概要 PHPUnit がバージョン上がって追加された新機能、使いこなしてないことが多いように思えましたので、各バージョンで何が増え、何が変わったのか、リリースノートから抽出して、特に美味しそうな項目をまとめて、簡単に解説してみます(多いので勝手ながら、使えそうなものを選んでます)。 PHPUnit 4.0.0 新機能 テストプロキシ : 元のクラスのメソッドを模倣(そのまま呼ぶ?)してくれるモック。 willReturn*() : will($this->returnValue($value)) が willReturn($value) と書けるように。他にも willReturn シリーズが各種用意されている。 下位互換の問題 static のモック/スタブのサポートが限定的に。今後は、同じクラスの別メソッドから呼ばれるときしか機能しない。 PHPUnit 4.1.0 新機能 マッチャ

    PHPUnit の各バージョンについて調べてみた - Qiita
    rochefort
    rochefort 2016/01/12
    testWith知らんかった!!
  • PHPにおけるHTTPヘッダインジェクションはまだしぶとく生き残る

    この記事はPHPアドベントカレンダー2015の3日目の記事です 。 MBSD寺田さんの記事「LWSとHTTPヘッダインジェクション」では、PHPのheader関数に関連して、PHP側のHTTPヘッダインジェクション対策を回避する手法と、それに対するPHP側の対応について書かれています。この記事では、寺田さんの記事を受けて、現在でもHTTPヘッダインジェクション攻撃が可能なPHP環境が残っているかを検証します。 HTTPヘッダインジェクションとは 以下の様なスクリプトがあるとします。 <?php header('Location: ' . $_GET['url']); オープンリダイレクタ脆弱性がありますが、それは気にしないとして、PHP5.1.1までのバージョンでは、以下の様な攻撃が可能でした。 http://example.jp/header.php?url=http://example

    PHPにおけるHTTPヘッダインジェクションはまだしぶとく生き残る
  • RE:「進捗・どう・です・か」 - rochefort's blog

    3連休終わって、明日もPHP書かないといけないと思うと、少し気が滅入ってきました。 「進捗・どう・です・か」をランダムに表示し「進捗どうですか」が完成したら煽ってくるプログラム | ぞうさんの何でもノート rubyで書いてみる 「進捗 どんな感じですか」の方が馴染みがあるので、こっちで作成。 words = %w(進捗 どんな 感じ ですか) result = '' until result.match(/進捗どんな感じですか$/) result << words.sample end puts "#{result}!!!" puts "#{result.size} 文字で煽られました" 感じどんなどんなどんな進捗感じどんな感じですか進捗進捗感じどんなですか進捗感じどんな進捗どんな感じですか!!! 52 文字で煽られました 改良 結構な頻度で数百文字になって見にくいのと 1行だとあんまり煽

    RE:「進捗・どう・です・か」 - rochefort's blog
    rochefort
    rochefort 2016/01/12
    気晴らし