Hatena::ブログ(Diary)

理系学生日記 RSSフィード Twitter

2013-05-12

[]今日の一日

主に労働を行っておりました。

2013-05-11

[]今日の一日

主に労働を行っておりました。

2013-05-10

[]徹夜して仕事したのでテンションだださがりだった

かなしみがつのった。

よくない。ほんとうによくない。

2013-05-09

[]人を動かす、マネジメント

人を動かす 新装版

人を動かす 新装版

人を動かす、名著名著って評判高くて、確かに良いこと言ってる感あるんだけど、あんまし心に響かなかった。

人に重要感を持たせるみたいな話で一貫してて、それはそれで、まぁそうですねという感じだったんだけど、なんか自分の本心を隠してそういう対人関係築いても、つらそうなかんじがした。一応フォローしとくと、カーネギーは「嘘をつけ」って言ってるわけじゃなくて、本心からそうしろっていう話をしてる。でも、やっぱし人間だから、そういうの完璧にはできないとおもう。

完璧にできないからこそ努力することが尊いんだって解釈もあるけど、それだったら結局ずっとウソをつく羽目になって、呵責とかいろいろ出てくるかんじがする。ずっと呵責に耐えながら、努力しつづけろって話なら、何のモチベーションも湧かない。読んでて終始、それでいいのかっていう感じだった。

マネジメント[エッセンシャル版] - 基本と原則

マネジメント[エッセンシャル版] - 基本と原則

一方、マネジメントの中で、ドラッガーがいいこと言ってた。

これにたいして Y 理論と名づけた見方は、人は欲求を持ち、仕事を通じて自己実現と責任を欲するとする。

(略)

産業心理学は、そのほとんどが Y 理論への忠誠を称する。自己実現、創造性、人格をいう。だが、その中身は心理操作による支配である。

(略)

しかしいかに進化したといっても、これが支配であることには変わりない。そのような支配は、進化していると否とにかかわらず、心理学の濫用である。

心理的支配が有効たりえないのは、200 年前の啓蒙主義が政治的に有効たりえなかったのと同じである。その原因も、同じである。ともに支配する側に万能の天才を必要とするからである。

(略)

仕事のうえの人間関係は、尊敬に基礎を置かなければならない。これに対し心理的支配は、根本において人をばかにしている。伝統的な X 理論以上に人をばかにする。心理的支配は、人を怠惰で仕事を嫌う存在とは仮定しないが、マネジメントだけが健康で、他の者はすべて病気であると仮定する。(略)まさに傲慢で、ばかげた仮定である。

カーネギーの言う態度を、真摯に心からそう思える人間になれるなら、それはすごく美しいとはおもう。みんなが相手に重要性をもたせるように動いて、みんなが自分は重要なんだって意識して、それでみんなでハッピーになりましょう、みたいなの、ずいぶん美しいけど、やっぱりこわさがある。不完全な人間に完全性を求めている気がして、宗教的なかんじがする。理想世界だけど、生きやすくなさそう。白河の 清きに魚も 住みかねて もとのにごりの 田沼恋しき、みたいなかんじがした。

いかに愛想がよく、助けになり、人づきあいがよかろうと、まかにいかに有能であって聡明であろうと危険である。そのような者はマネジャーとしても、紳士としても失格である。

(略)

しかし、学ぶことのできない資質、後天的に獲得することのできない資質、始めから身につけていけなければならない資質が一つだけある。才能ではない。真摯さである。

2013-05-08

[]tortoiseSVN の diff で空白の差分を無視したい

ソースレビューする際、ベースの revision との差分チェックをすることになったりしますが、コマンドラインの svn とか、あるいは Eclipse を立ち上げるのとかがメンドくて、tortoiseSVN でサラっと確認しようということが多々あります。

でそういうとき、空白文字系の差分が大量にあったりしてウガーってなります。おまえ何処を変更したんだよ的な。空白っぽい差分の中にコードの変更分も紛れ込んでるんじゃね的な。

svn とか Eclipse とかで diff をとる場合は空白の差異は無視できるんですが、tortoiseSVN は無視できないものとばかり思い込んでてこれまでの人生を過ごしてきたのですが、しかし、まぁやっぱり、空白の差分を無視する設定項目ちゃんとあったんですね、はい。当然か。今日知りました。探す努力してなくてすみませんでした。まことに申し訳ありませんでした。


で、その設定方法なんですが、

大前提として、tortoiseSVN での差分比較用プログラムとして TortoiseMerge を使うものとします。初期設定ですね。TortoiseMerge の実体は、tortoiseSVN のインストールディレクトリの bin フォルダにあります。

でまぁ、どんな方法でもいい、tortoiseMerge を立ち上げたら、メニューバーから View → Settings でボックスが表示されます。

f:id:kiririmode:20130508023340p:image

この General タブの下部のラジオボタンに "Ignore all whitespaces" というのがあるので、これ選んでおけば良さげ。タブも含めて、空白文字の差分を無視してくれます。


この歳になるまで気付かなかった。、。。人生を無駄にした。。。

2013-05-07

[]Vagrant + Sahara メモ

Vagrant とは

もはやおなじみかもしれませんが、vagrant はコマンドラインから仮想マシンを作成したり破棄したり、プラグインと連携させることで特定時点の仮想マシンの状態にロールバックさせたりすることができるツールです。

公式ページはこちらですが、まぁなんというか、vagrant が何かがよくわからないですね。

Vagrant provides easy to configure, reproducible, and portable work environments built on top of industry-standard technology and controlled by a single consistent workflow to help maximize the productivity and flexibility of you and your team.

Vagrant Documentation

仮想マシンの構築は従来、OS をダウンロードして、VM に OS をインストールして、一々構築して…という作業で数時間かかっていましたが、vagrant を使うと、マジメに数分で終わります。

インストール

最初は gem で vagrant 入れてたんですがなんかそれバージョン 1.0 らしくて、今の vagrant は 1.1 *1 です。1.1 は gem ではなく、pkg からインストールするので、以下から最新版をダウンロード+インストールしましょう。

仮想マシンを立ち上げる

vagrant がインストールされたら、次は box ファイルのダウンロードです。

box ファイルというと新出の単語ですが、仮想マシンの素といいますか、仮想マシンのスケルトンとなるファイルです。

Boxes are the skeleton from which Vagrant machines are constructed.

Vagrant Documentation

ぼくはこちらから CentOS をダウンロードしました。後述しますが、vagrant 自体にダウンロードさせることもできますが、何回か失敗しており、何回もダウンロードする羽目になったのでブラウザでダウンロードしました。余談ですが、ファイルサイズは 500 MB くらいなのに、ダウンロード速度がかなり遅いです。


その後ですが、

### box ファイルを "centos" という名前で登録
$ vagrant box add centos ~/Downloads/CentOS-6.4-x86_64-v20130309.box

### 仮想マシンの初期化 -> カレントディレクトリに Vagrantfile というファイルができる。
### これがこの仮想マシンの設定ファイル
$ vagrant init

### 仮想マシンの起動!!
$ vagrant up

これで仮想マシンが立ち上がります。簡単ですね。実際に ssh ログインも当然可能です。vagrant ssh でログインしていますが、通常の ssh コマンドでもログイン可能です。

$ vagrant ssh
Last login: Mon May  6 11:22:50 2013 from 10.0.2.2
Welcome to your Vagrant-built virtual machine.
$ cat /etc/redhat-release 
CentOS release 6.4 (Final)

仮想マシンの commit/rollback

冒頭に述べたロールバックやコミットといったものは、Sahara と呼ばれるプラグインで実現します。

Sahara の公式はこちらですが、開発が止まっており vagrant 1.1 には対応していません。fork された Sahara で 1.1 に対応していますので、こちらをインストールしましょう。

$ git clone https://github.com/ryuzee/sahara
$ bundle install
$ bundle exec rake build
$ vagrant plugin install pkg/sahara-0.0.14.gem

これにより、vagrant で sandbox コマンドが使用できるようになります。

sandbox コマンドで実際に rollback を使用した例が次になります。ここでは、rollback.txt というファイルを仮想マシン上に追加した後、rollback させています。rollback した後、当然 rollback.txt はなくなっています。

### サンドボックスモードに入る
$ vagrant sandbox on
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

### 仮想マシンにログイン
$ vagrant ssh
Last login: Mon May  6 11:53:05 2013 from 10.0.2.2
Welcome to your Vagrant-built virtual machine.

### 仮想マシン内で rollback.txt つくる
$ touch rollback.txt
$ ls -l rollback.txt
-rw-rw-r-- 1 vagrant vagrant 0  5月  6 12:16 2013 rollback.txt
$ logout

### ロールバックや!
$ vagrant sandbox rollback
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%

### 仮想マシン上のファイルを確認
$ vagrant ssh
$ ls -l
合計 0
$ logout

### サンドボックスモードから出る
$ vagrant sandbox off

*1:公式ページのパスが /v2/ で切られているので、もしかしたら ver.2 の扱いかもしれませんが

2013-05-06

[]simple-hatena-mode で HTML テンプレートが自動挿入される

ストレス発散のため暗黙裏に iMac 購入しメインマシンとなっていたのですが、Emacs をセットアップして simple-hatena-mode でエントリを書こうとすると、なぜか HTML のテンプレートが自動挿入されて逐一消去を余儀なくされるという憂き目にあっていました。

調べるのメンドいのでセットアップ後ずっと放置していたのですが、このまま墓場まで持っていこうという気概はなく、ゴールデンウィークなので simple-hatena-mode.el のソースを読んでいた結果、フラグで制御できることがわかってこのエントリに至ります。

(setq html-helper-build-new-buffer-flag nil)

ところで html-helper-build-new-buffer-flag を describe-variables すると

*If not nil, then insert `html-helper-new-buffer-strings' for new buffers.

という記述があり、新規にバッファを作ったときに変数 html-helper-new-buffer-strings が自動挿入されることがわかります。

ついでに html-helper-new-buffer-strings はどういう風に定義されてるんだろうとか思ってソース見ていったけど諸々マクロ使っててゴールデンウィークに苦しみを募らせそうなのでやめました。

2013-05-05

[]暗号解析: 翠星のガルガンティア

すごいなこのひとたちべつにゴールデンウィークとかじゃないんだろ、みたいなことをおもった。

同時期に、はたらく魔王さまのエンテ・イスラ語が解析されたというニュースもあった。

みんなすごい。すごい。


なお、まどマギのルーン文字についてはこちらに情報があります。

人類すごい。巨人倒せそう。

2013-05-02

[]ゴールデンウィーク前の労働に意味はあるのか

至極の四連休を前にして労働してたけど、意識低い系労働者になっててたいへんだった。

四連休を前にして労働しても、意識低くなるし、仕事やりかけで連休突入しちゃうと連休明けにやりかけの仕事の記憶が消失するし、仕事やりかけにならないように超特急で仕事おわらせるとクオリティに支障がでるし、いいことないとおもう。だれも幸せにならない。みんなが泣いてる。よくないとおもう。

ぼくたちは幸せを追求するために生きるみたいなところあるし、それは憲法にも明記されてるし、アメリカ独立宣言にもある。このままだと憲法違反だし、アメリカにも怒られるから、四連休前の仕事はぜんぶ休みにしないといけない。そしたら五連休になって、そうすると五連休の前の労働をどうしたらよいかという問題が持ち上がってくるけど、もちろん五連休前に労働したっていいことない。同じ議論を適用すると、ついに365連休が実現されるから、人類幸福が実現されてよかった。

まぁみなさんは労働の価値!!とか自己実現!!!!とかガチャガチャうるさいから、365 日連続勤務とかしてくれちゃってぼくを養ってくれたらいいです。よろしくおねがいします。

2013-05-01

[]Query Transformation と OR-expansion

もろもろ悲しい目にあったので、もろもろまとめないといけないという使命感に駆られています。

Oracle Database に限らず DBMS というのは、SQL をいかに速く実行したろかと粘着しまくるようにできていて、アクセスパス解析だったりを駆使しまくります。その技術の一つに Query Transformation というのがあり、日本語だと「問合わせの変換」と呼ばれますが、SQL を「こうした方が速いやろがアホか」と DBMS 自身が書き換えちゃうヤツです。もちろん、SQL の論理的な意味は変化させず、です。

Query Transformation にはいくつかのパターンがあります。

  • Order-By Elimination
  • Common Sub-expression Elimincation
  • Predicate Transformation

などなど。

その中に Or-Expansion と言うヤツがあって、まぁこいつがぼくを八つ裂きにしていった。


Or-Expansion、具体的な例を見てもらった方が話が速いと思うので、https://blogs.oracle.com/optimizer/entry/or_expansion_transformation からいくつか拝借します。

元々入力された SQL がこうだとしましょう。

Select *
From products
Where prod_category ='Photo' or prod_subcategory ='Camera Media';

このままだと、Oracle は products テーブルにフルスキャンをかけたりします。悲しいですね。

OR で繋がれた条件に対してインデックススキャンができないことが問題なので、Oracleオプティマイザは、この SQL を以下のように変換します。これが Or-Expansion って呼ばれるヤツです。

Select *
  From products
  Where prod_subcategory ='Camera Media'
UNION ALL
Select *
  From products
  Where prod_category ='Photo'
    And lnnvl(prod_subcategory ='Camera Media');

UNION ALL で繋がれた 2 つ目の SQL に lnnvl が使われているのでメンドくさい感じですが、要するに 2 つの OR 文で構成された SQL を、2 つの SQL に分割し UNION ALL で繋いでます。こうすることで、2 つの SQL はそれぞれインデックススキャンを使用することができ、最後に UNION ALL すれば論理的に意味は同じになりますよね、と。


基本的にオプティマイザは「よかれ」とおもってこういうことをします。当然です。

しかし、これが逆効果になり得るケースというのもある。こうなったらどうしようもない。どうしようもない!!!!マジで!!!!! なんなの!!!!!!いったいなんなの!!!!!!!!!わざわざ書き換えといて劣化とかなんなの!!!!!!!!!!

どうしようもないので、OR-expansion 無効化しましょう。ヒント句 NO_EXPAND で OR-expansion の最適化を無効にするよう指示することができます。アグレッシブに攻めたてるならパラメータ_no_or_expansionを false にするのも良いでしょう。

その他参考