2014-07-13

超簡単!shoptでbashの”秘められた真のチカラ”を開放する 【サンプルあり】



shoptとは?

bashのオプションを設定するための、bash組み込みコマンド。
bashの秘められた力を開放することができる。

shopt
でオプション一覧を表示・確認することができる。

shopt -s {オプション名}
set。指定したオプションをONにできる。

shopt -u {オプション名}
unset。指定したオプションをOFFにできる。

bashのオプションは数多くあるが、
デフォルトでONにされていて普段意識する必要がないものや、
普段使いでは気にしなくていいものもある。

今回は、bashの全オプションの中から、
これらをおさえておけば9割オッケーなイケメンオプションを紹介しようと思う。


autocd

ディレクトリ名のみを入力したとき、 cdの引数に指定されたものとして扱う。
対話的シェルのみで有効。

autocd: OFF

$ shopt -u autocd

# ディレクトリ名のみを入力
$ /usr/local/
bash: /usr/local/: Is a directory

autocd: ON

$ shopt -s autocd

# ディレクトリ名のみを入力
$ /usr/local/
cd /usr/local/

# ディレクトリ名がcdの引数として扱われ、移動できた
$ pwd
/usr/local


cdable_vars

cd への引数でディレクトリでないものは変数の名前とみなし
その変数の値をcdの引数として使う。

# unkoを定義
$ export unko="/usr/bin/"

cdable_vars OFF

$ shopt -u cdable_vars

$ cd unko
bash: cd: unko: No such file or directory

 cdable_vars ON

$ shopt -s cdable_vars

# unkoというディレクトリが見つからないので、unkoという変数として扱われる
$ cd unko
/usr/bin/

# unko: /usr/bin/ に移動できている
$ pwd
/usr/bin



cdspell

スペルミスでcdに指定したディレクトリが見つからないとき、
本来移動したかったであろうディレクトリにちゃんとcdしてくれる。
対話的シェルのみで有効。

cdspell OFF

$ shopt -u cdspell

# ディレクトリ名にスペルミス がある
$ cd /usr/loacl/
bash: cd: /usr/loacl/: No such file or directory

# ディレクトリ名にスペルミス がある
$ cd /user/bin/
bash: cd: /user/bin/: No such file or directory

cdspell ON 

$ shopt -s cdspell

# ディレクトリ名にスペルミス がある
$ cd /usr/loacl/
/usr/local/
# 移動できている
$ pwd
/usr/local

# ディレクトリ名にスペルミス がある
$ cd /user/bin/
/usr/bin/
# 移動できている
$ pwd
/usr/bin



dotglob

. (ドット) で始まるファイル名をワイルドカード(パス名展開)のマッチ対象に含める。
明示的に .*  としなくても * だけで対象ファイルになる。

dotglob OFF

$ shopt -u dotglob

$ ls *
kuso
miso
tech

dotglob ON

$ shopt -s dotglob

$ ls *
.bash_profile
.bashrc
.ssh
.viminfo
.vimrc
kuso
miso
tech



extglob


基本的なワイルドカードでのパターンマッチング(*, ?, [a-z] など)に加えて、
さらに強力なワイルドカードの表現が使えるようになる。

通常のパターンマッチング

  • * ……… 任意の文字列にマッチ
  • ? ……… 任意の1文字にマッチ
  • [] ……… 括弧内のいずれか1文字にマッチ

extglobで使えるようになるパターンマッチング
  • ?(pattern-list) ……… 与えられたパターンが 0 回または 1 回現われるとマッチ
$ ls
ab.txt
abab.txt
ababab.txt


$ ls ?(ab)ab.txt
ab.txt
abab.txt

  • *(pattern-list) ……… 与えられたパターンが 0 回以上現われるとマッチ
$ ls
ab.txt
abab.txt
ababab.txt

$ ls *(ab)ab.txt
ab.txt
abab.txt
ababab.txt

  • +(pattern-list) ……… 与えられたパターンが 1 回以上現われるとマッチ
$ ls
ab.txt
abab.txt
ababab.txt

$ ls +(ab)ab.txt
abab.txt
ababab.txt

  • @(pattern-list) ……… 与えられたパターンに 1 回だけマッチ
$ ls
ab.txt
abab.txt
ababab.txt

$ ls @(ab)ab.txt
abab.txt

  • !(pattern-list) ……… 与えられたパターンのどれでもないものにマッチ
# 拡張子が.txt以外のファイルをリストアップする
$ ls
a.doc
a.gif
a.jpg
a.png
a.ppt
a.txt
a.xls
a.xlsx
b.txt
c.txt


$ ls !(*.txt)
a.doc
a.gif
a.jpg
a.png
a.ppt
a.xls
a.xlsx

# 拡張子が.txt以外のファイルをバックアップディレクトリに移動
$ mv !(*.txt) someBackupDir/

地味に便利。



globstar

** というワイルドカードが使われたとき、 該当ディレクトリ以下の
 サブディレクトリ、ファイル全てに再帰的にマッチする。
**の直後に / が続く場合には、 ディレクトリとサブディレクトリのみにマッチ。(再帰的でない)

globstar OFF

$ shopt -u globstar

# カレントディレクトリ直下の全ファイル・ディレクトリのタイムスタンプを更新
$ touch *

# カレントディレクトリ直下の全ファイル・ディレクトリのタイムスタンプを更新(↑と同じ)
$ touch **

globstar ON

$ shopt -s globstar

# カレントディレクトリ直下の全てのファイル・ディレクトリのタイムスタンプを更新
$ touch *

# カレントディレクトリ以下のファイル・ディレクトリのタイムスタンプを再帰的に更新
$ touch **



nocaseglob

ワイルドカードの展開を行うときに、 大文字と小文字を区別しない。

$ ls
AA
Aa

nocaseglob OFF

$ shopt -u nocaseglob

$ ls a[a-z]
ls: cannot access a[a-z]: No such file or directory

nocaseglob ON 
$ shopt -s nocaseglob

# 大文字小文字を区別しないマッチング。
#1文字目の a も大文字小文字区別されていないところも注目。
$ ls a[a-z]
AA
Aa


nocasematch

case や [[ でのパターンマッチのとき、大文字小文字を区別しない。

nocasematch OFF

$ shopt -u nocasematch

# マッチしない
$ if [[ "unko" = "UNKO" ]]; then echo match; fi

nocasematch ON

$ shopt -s nocasematch

# マッチする
$ if [[ "unko" = "UNKO" ]]; then echo match; fi
match

# ( [ 括弧が1つでの条件判定のとき) マッチしない
$ if [ "unko" = "UNKO" ]; then echo match; fi

おまけ: [ と [[ はどう違うの?
このへんも知っておくとひとつ上野プログラマになれそうよ♨


まとめ

エイリアスやキーマッピング、環境変数でシェルの利便性を高めている人は多いが、
シェルのオプションは意外とそこまで使われていないような気がする。。

気になったオプションがあれば試してみて、
もし気に入れば .bashrc, .bash_profileあたりに追加しておくと幸せになれると思う。

2014-07-09

[MySQL]nullの扱いについてプログラマ1年生レベルのことも分かっちゃいなかった


 スーパーこっぱずかしいが恥を忍んで書く




カラムの値がnullのレコードを取得するには、どんなwhere句を書けばいいだろうか?


考えるまでもない。

where column is null

= 演算子で null と比較してはいけない。(ヒットしない)

where column = null 



では、in条件のときはどうだろうか

今回、自信満々にこのような条件を書いて爆死した。。。
= でなく is null を使う背景まで正しく理解していなかったのがサムいところ。

where column in (1, 2, null)

正しくはこう書く。

where (column in (1, 2) or column is null)



MySQL - NULL値の問題

MySQLリファレンスマニュアル:NULL 値の問題
SQL では、NULL 値は、他の値と比較すると(NULLでも)常に偽になります。

NULL を含む式は、演算子と式に含まれている関数のドキュメントに特に断りがなければ、常に NULL 値を生成します。以下の例では、全カラムが NULL を返します。

mysql> SELECT NULL,1+NULL,CONCAT('Invisible',NULL);

NULL のカラム値を検索したい場合、=NULL テストは使用できません。
どんな式でも expr = NULL は偽。

↑の公式リファレンスのほか、以下の記事が大変参考になる。
MySQL のNULL ではまったことあれこれ
そもそもNULL は何を意味するか
NULL との比較演算結果は常にNULL
NULL と論理演算子
NULL とインデックス
NULL とソート
NULL と集計
TIMESTAMP とNULL




まとめ

プログラマやってると時々
「いままでコレを知らずによく生きてこれたな」っていうのがある。

もう一度初心に返ってブラインドタッチ北斗の拳からやり直そうと思う。


2014-07-08

数々の脱オタファッション記事が言えなかった、最も重要な1つのこと【脱オタまとめリンクあり】

<a href="https://store.line.me/stickershop/detail?packageId=1001749" target="_blank">


(#`・ω・)
自分が「イケメン」か「ブサメン」の
どちらなのか、ちゃんと把握しとけ!!
「自分はフツメン」とかいって
逃げてっからいつまでもオタなんだよ!!

(´;ω;`)
イヤァアアアアアアアアアアアアごめんなさいごめんなさい


もこみち・キャンドル涼子 >>(越えれない壁)>> 我々


地獄のような書き出しで御座いました。

脱オタのためのファッションアドバイス記事は数多くある。(ページ最後にまとめリンクあり)
もちろんどの記事も参考になるが、
どの記事もふれていない重要なことが1つある。

その前提になるのが、「フツメンに逃げるな」というキッツイつっこみだ。

そう、我々は永遠にもこみちや、キャンドル涼子にはなれないのだ。
勇気をもって現実を受け入れて脱オタに臨まねばならない。

自分がブサメンであることを受け入れたならば、脱オタのゴールは近い。
なぜならば、最も重要な次のことが理解でき、実践できるからだ。



脱オタの服選びで、最も重要な1つのこと


脱オタの服選びは………

鏡を見てはいけない。

もっと正確に言うと、「鏡に顔を映してはいけない。 」
鏡を見るときも、自分の顔は映してはいけない。
試着時など、全身が鏡に映るようなときは、自分の顔のことは意識の外に追い出す。

なぜか?

着たことのない服、見慣れない格好、したことのない色使い。
これらを自分の顔とともに見たとき、よくある感想は以下のようなものだ。
身に覚えはないだろうか?

  • 自分には似合わない
  • 自分には派手過ぎる

これでは、行き着く先は、いつもの格好と大差ないものになってしまう。
脱オタというゴールはいつまでたってもやってくることはない。
「自分の顔と合うか」の評価基準が頭にうかんでしまった時点で、既に失敗しているのだ。

脱オタで大切なことは、「自分」と切り離して服を評価する視点だ。
自分には似合わないと思うのは、大抵の場合、着慣れているかどうかでしかない。



イケメンにも有効だよ


美男美女とされる人にもコレは有効で、
イケメンはどんな服でも似合ってしまうため、
原宿にいるような「やりすぎ」「がんばりすぎ」系になってしまうことがある。
例を挙げるとこんな感じ 名古屋のオシャレ皇帝は謎の魅力があるよね

服を自分の顔と合わせないことで、
純粋にその服自体、そして服の組み合わせの問題として考えることができる。
その結果「さすがにコレはないだろう」と思いとどまることができ、
周囲からドン引きされるリスクを回避できる。



まとめ

センスはギフト(才能)ではなくスキルであり、ゆえにみがくことが可能だ。
脱オタ初期は、自分の顔のことは置いといて、
純粋の服の良し悪しだけで選択することで、センスを磨いていこう。

サイズ感とか色使いの話は、↓の参考記事が詳しい。


参考記事

 脱オタしたいんだけど最初に買うべきなのって何?

【脱オタク】ファッションセンスが悪いと言われなくなる5つの法則

脱オタクファッションガイド

脱オタしたくてファッション雑誌2年間読み漁った結果

脱オタクファッション革命は成功か!?

脱オタ金かかりすぎワロタwwww

脱ヲタ出来たのでまとめる。

25歳社会人男性向け見た目改造(脱オタ)方法まとめ -服装改造の4戦略

服屋で服を選べるようになるたった2つのパターン

「脱オタファッション」の専門店を作ればいいと思うんだ

マリオカートで語る脱オタファッション

36才の男です。訳あって脱オタクファッションしたいのですが

脱-オタクファッションで本当に必要な戦略

金をかけずに脱オタク・脱キモイ化するためのファッションマニュアル

私的脱オタファッション論

脱オタに失敗しやすい人の七つの特徴

脱オタファッション実践編

ファッションの脱オタはなんで面白くなさそうなのか?

「劣等感ではなく好奇心で動けるように」―4年で脱オタクに成功した男が激白

ファッションオタがあまりにも見当違いなので 脱オタ済みの俺が正しい脱オタ服指南をしてみる

脱オタの登竜門に丸井系はもう古い?丸井系のメリットとデメリットなど。

脱オタファッションに詳しいけど質問ある?

2014-07-07

マルチディスプレイに秘められた ”真のチカラ” を目覚めさせるウラ技で、作業効率さらに倍!


マルチディスプレイにしたところで仕事終わんねえ!



昨今の開発の現場では、マルチディスプレイでの作業環境がどんどん広がってきている。
デュアルディプスレイ(2画面)にとどまらず、トリプルディスプレイ(3画面)で作業している人も多い。

その理由はもちろん、マルチディスプレイ化による作業効率の大幅なUPがあるからだ。
もはや、1画面のみの頃とは比べ物にならない!

なのになぜ、あなたの進捗はしょっちゅう遅れるのだろうか?

それは、あなたがマルチディスプレイの ”真のチカラ” を引き出していないからにほかならない。



マルチディスプレイの使い方あるある


2枚でも3枚でもいいが、
ディスプレイを メイン と サブ にわけた時に、
よくあるパターンは次のような配置だ。

メイン
  • 開発環境(IDE, エディタ, ターミナルなど)

サブ
  • メーラー
  • スケジューラー
  • メッセンジャー
  • 資料
  • TODOリスト、メモ
  • ブラウザ
  • ファイラー

メインには開発系ソフト、
サブにはコミニュケーション系、管理系のソフトを表示させておくというパターンだ。
(ブラウザはどちら派も多そうだが、個人的にはサブディスプレイに置いている。)

開発の流れを止めることなく、他の必要な情報にアクセスできるので、
これによって多くの人が作業効率を向上させている。

しかし!

これの本当にもったいない点は、
マルチディスプレイの ”真のチカラ” を眠らせたまま作業をしているというところだ。
しかも、マルチディスプレイにした時点で一定の作業効率UPを手にしているので、
真のチカラを眠らせたままでいることに気がつかないでいる!



目覚めよ、真のチカラ 

秘孔を突け!!!!!

マルチディスプレイの ”真のチカラ”  を目覚めさせるためにすることは、
以下の1つだけ。
実にシンプルで、簡単だ。

メインディスプレイだけを残して、残りのサブディスプレイは消す

言うまでもなく、
プログラマには、「集中」して作業する時間が必ず必要だ。
もっと言うと、集中の先にある「没頭」に到達できるかどうかが、成果に大きく影響する。


コード以外の情報は遮断することで、
メールやメッセの新着に気を取られずに、目の前のコードにのみ集中できる。
コードに没頭し、トランス状態、確変状態でプログラミングを進めることができる。

マルチディスプレイは、表示情報量を増やして作業効率をあげるためのものだ。
それをあえて消すという逆転の発想の先に、
本当の作業効率UPがある。

もっとも大切なことは、
マルチディスプレイとシングルディスプレイを、状況によって使い分けるということだ。



まとめ

このウラ技は、指一本で簡単に実践できて、しかも効果はバツグンだ。そして、もうお気づきと思うが、これによって実際に引き出されるのは、
"マルチディスプレイ" の真のチカラではない。

なので、本記事のタイトルを以下のように訂正して、今回の記事を終わりたいと思う。

あなたに秘められた ”真のチカラ” を目覚めさせるウラ技で、作業効率さらに倍!

「進捗どうですか?」

大丈夫だ、問題ない。






あわせて読みたい

プログラマの生活を劇的に改善する、たったひとつのこと

 クリフトの効かないザラキ連発に隠された秘密と真実 

完璧すぎるビジネスを思いついたがヤル気がないので公開しちゃう