2015/03922:40
MySQL
Tips
恥ずかしながら今知ったシリーズ

ORDER BY hoge ASC, fuga DESCのように、複数カラムを利用し、かつ昇順/降順を両方含むソートをするクエリが遅い。
実行計画を見るとUse filesortが出てて消さない… インデックスがうまく効いていない?と思って調べているとぶつかったのがこれ。

index_col_name 仕様は ASC か DESC で終わることができます。これらのキーワードは昇順や降順インデックス値ストレージを指定するための将来の拡張子として許容されます。現在は、それらは解析されますが無視されます。インデックス値は毎回昇順で格納されます。

MySQL :: MySQL 5.1 リファレンスマニュアル (オンラインヘルプ) :: 8.1.13 CREATE INDEX 構文

ってことは昇順/降順が統一されていない並び順の複合インデックスは作れない。

いやいやこれMySQL5.1のリファレンスだし…

An index_col_name specification can end with ASC or DESC. These keywords are permitted for future extensions for specifying ascending or descending index value storage. Currently, they are parsed but ignored; index values are always stored in ascending order.

MySQL :: MySQL 5.6 Reference Manual :: 13.1.13 CREATE INDEX Syntax

Oh… 5.6でもダメでした。

そんなわけでソート条件に昇順/降順両方含む場合は別にソート用カラムを設けるのが無難ですね。


2014年、あけましておめでとうございます。 本年もよろしくお願いします。

勢いで目標を決めたので忘れないためにブログにも張っておきます。


gitの特定サブディレクトリ以下だけデプロイしたいんです><

Subversionからgitへの移行をしていると、 Capistranoの移行でつまづきました。

これまで、svnの特定のサブディレクトリ以下を取得、デプロイしていたけど、 gitはそもそもサブディレクトリ以下のみを指定したcloneができないので、そのまま移行できなかった。

※これを書くときに調べたら、sparse-checkout という機能はあるみたい。
何もわからない / git の sparse-checkout

教えてStackoverflowした結果、下記のようにすればOKでした。

set :deploy_via, :remote_cache を指定している場合

Capfile, deploy.rbに下記を追加。

Capfile
require 'capistrano/recipes/deploy/strategy/remote_cache'

class RemoteCacheSubdir < Capistrano::Deploy::Strategy::RemoteCache

  private

  def repository_cache_subdir
    if configuration[:deploy_subdir] then
      File.join(repository_cache, configuration[:deploy_subdir])
    else
      repository_cache
    end
  end

  def copy_repository_cache
    logger.trace "copying the cached version to #{configuration[:release_path]}"
    if copy_exclude.empty? 
      run "cp -RPp #{repository_cache_subdir} #{configuration[:release_path]} && #{mark}"
    else
      exclusions = copy_exclude.map { |e| "--exclude=\"#{e}\"" }.join(' ')
      run "rsync -lrpt #{exclusions} #{repository_cache_subdir}/* #{configuration[:release_path]} && #{mark}"
    end
  end

end

set :strategy, RemoteCacheSubdir.new(self)
deploy.rb
set :deploy_subdir, "project/subdir"

set :deploy_via, :copy の動作をさせたい場合

今回やりたかったのはこちら。 方法はいくつかためしたけど、gemになっている下記はちゃんと動きました。

yyuu/capistrano-copy-subdir

Gemを追加するだけで動作します。

gem 'capistrano-copy-subdir'
$ bundle install

インストール後、 deploy.rb内部のdeploy_via自体を:copyでなく、:copy_subdirに書き換えます。

deploy.rb
set(:deploy_via, :copy_subdir)
set(:deploy_subdir, 'project/subdir')

これでsvnでset :deploy\_via, :copyしているときと同等の動作になりました。


何故か近々会社でVimについて話すことになったんで、Vim環境を整理してたら良い設定を知りました。

カーソルのある行との差分行数を表示してくれるrelativenumber

Vimでは、下記設定をするとウィンドウ左に行数を表示できます。

set number

set number画像

これに加えて、下記の設定を加えると

set relativenumber

見栄えがこうなります。

set relativenumber画像

何が嬉しいのか

こんな見え方が嬉しいのはVimならでは。つまり、 移動・削除等のオペレータ利用時のカウントが一目瞭然なのです!


記事が出てきません

bundle exec middleman build

あれ?最新の記事が出てこない…ビルドでエラーも出てない(´・ω・`)?
ローカルのサーバ経由だとちゃんと見えるのになー?
published: false でもないんだけどなー?

もしかして:日付が未来日

空気読んでくれてただけだった orz


今年のはじめにWordpressからOctopressに移行したけど、結局ブログを書くようにはならなかったよ… Middlemanを見てみたらよさげだったので、もう一度書き始めるきっかけに再度移行してみた。

Octopressでしっくり来なかったところ

  • テンプレートエンジンに挫折
    Liquidの記法が絶望的に覚えられない…
  • ファイル構成
    Octopressはgem/コマンドラインでの管理ツールが提供されておらず、cloneしたOctopressそのものからブログを構築していく。 Octopress自体のバージョンアップをしたい場合はpullして持ってくることになる。 本文以外のところのタグを変更しようとしてプラグインを独自にいじっているとOctopress本体の更新とのコンフリクトが厳しい。

Middlemanを触ってみて

よさげなところ

  • 構成が単純
    sources以下にテンプレートやassetsを放り込んでいけばOK
  • Railsライク
    Padrinoベースなせいかもしれないけど、ヘルパー名やディレクトリ構成等、明らかにRailsを意識して作っている感じ。 いいか悪いかはともかく、Railsユーザには直観が働くようにできている。
  • 好きなテンプレートエンジンが選べる
    今回は初Slimにしてみた。
  • マルチブログが簡単
    Webサーバの設定に頼ることなく、複数ブログが簡単につくれる。

いまいちなところ


問題

Androidアプリで通知を出そうとするとエラーの出る機種があるよ… Honeycombの一部機種でだけ起こってるみたいだよ!

こんなエラーが出てる

E/AndroidRuntime(25922): FATAL EXCEPTION: main
E/AndroidRuntime(25922): java.lang.NoSuchMethodError: android.app.Notification$Builder.setProgress
E/AndroidRuntime(25922):    at android.support.v4.app.NotificationCompatIceCreamSandwich.add(NotificationCompatIceCreamSandwich.java:31)
E/AndroidRuntime(25922):    at android.support.v4.app.NotificationCompat$NotificationCompatImplIceCreamSandwich.build(NotificationCompat.java:104)
E/AndroidRuntime(25922):    at android.support.v4.app.NotificationCompat$Builder.build(NotificationCompat.java:558)

原因

Android Support LibraryがAPI Level 13(Android 3.2)の機種に対してバグってたよ… 手元の3.0や3.1で試しても出なかったはずだよ…

Issue 36502 - android - android support library v4 and notification on android-13 - Android - An Open Handset Alliance Project - Google Project Hosting

android-support-v4.jarを更新したら直ったけどライブラリの差し替えなんてやりたくない時期だよ…(´・ω・`)


今の状況:

そればっかりやっているわけにもいかないんだけど…

さて、MySQLで、ER図も何もないので今のDB全体をなんとなく俯瞰したい。 当方生ぬるいORM厨でございます。

showなんとかを繰り返さなくても、DBのメタデータ一式をINFORMATION_SCHEMAデータベースから取れるのね。便利。

MySQL :: MySQL 5.1 リファレンスマニュアル :: 21 INFORMATION_SCHEMA データベース

テーブルと各テーブルのカラム、インデックスを下記で取得。 ツール使えよって話だけど、手探りの状態からだと手っ取り早い。

SELECT information_schema.columns.table_name, information_schema.columns.column_name, 
       information_schema.columns.column_type, information_schema.statistics.index_name 
FROM information_schema.columns LEFT JOIN information_schema.statistics 
ON information_schema.columns.table_name = information_schema.statistics.table_name 
AND information_schema.columns.column_name = information_schema.statistics.column_name;

複合インデックスが微妙だけど今欲しいものとしては問題なし。 また、mysql起動時に-HでHTML出力にできたので、それを手元において確認中。


Amazonで各MacBook向けのケースを売っている MOBILE STUDIOのMacBook Pro 13inch Retina向け、マットブラックのケースを買ってみた。 お値段2380円。他のケースに比べて非常に割安!

レビュー

外観

正直いってこの価格だと見た目は期待していなかったのだけど、 まったく安っぽくない!いい意味で期待を裏切られた感じ。

MOBILE STDUIO MacBook Pro 13inch Retina Case

Amazonレビューではアップルマーク周辺が浮いてしまうような指摘もあったけど、 自分のケースでは問題なし。

個人的に見た目は以前MacBook Airで利用していたSpeckのSeeThru, TUNEWAREのCARBONLOOKよりおすすめ。 ゴム足が少し高めで、机から少し浮いた印象を感じるかも。

MacBook Pro 13inch Retina Case

重量

両方合わせて実測254.5g。 装着すると1.9kg弱。非RetinaのMacBook Proに迫る重量になってしまうのはご愛嬌。

リンク

MacBook Pro Retina ディスプレイ 13.3インチ用 マット ハードケース 《全12色》 ブラック(黒) [MOBILE STUDIO]
MacBook Pro Retina ディスプレイ 13.3インチ用 マット ハードケース 《全12色》 ブラック(黒) [MOBILE STUDIO]

こちらは15インチ用。

MacBook Pro Retina ディスプレイ 15.4インチ用 マット ハードケース 《全12色》 ブラック(黒) [MOBILE STUDIO]
MacBook Pro Retina ディスプレイ 15.4インチ用 マット ハードケース 《全12色》 ブラック(黒) [MOBILE STUDIO]

Air向けも。また色展開も豊富。こちらは赤。

MacBook Air 11インチ用 マット ハードケース 《全12色》 レッド(赤) [MOBILE STUDIO]
MacBook Air 11インチ用 マット ハードケース 《全12色》 レッド(赤) [MOBILE STUDIO]


MacBook Proを買いました

アップルは初期不良などがあった品を修理した 整備済製品をウェブで販売している。 保証期間も新品同様で、少し割安でMac, iPod, iPadを購入できる。

とはいえ、価格はkakaku.comの最安値より大概高いので、 公式から買いたいアップルマニア以外にはあんまり意味がないように見える。

しかし、アップルストアと一部BTO可能な店舗でしか購入できない USキーボード派には最安値と成り得る。

最近MacBook Pro 13インチのRetina Displayモデルが 整備済商品として登録されるようになってきた。 USキーボードモデルもちょくちょく入荷されているようで、 モノがあるのを見つけてから 半日我慢したけどまだ在庫があったせいでつい IYHしてしまった。 また暫く貧乏生活です。

到着

平日夜注文して二日後には受領。こんな外箱で届いた。

MacBook Pro 13inch Retina Refurbished - Package

この中に化粧箱があるのかと思いきや…