2016年12月31日土曜日

2016年の振り返り

2016年を振り返って

苦渋をなめることがあり
もう一歩進めることができずに
踏み出せなかったことに何度も
思い出しては後悔するという
辛い1年だった。

大事な決断を行うときに限って
冷静になるまで時間が
かかるのでしょう。

少しの代償を払うことを渋った
ばかりに苦しい経験を積みました。

次の一歩を踏み出す勇気・気持ち
犠牲にしなければならないことが
大きな痛手にならないのなら
迷わず歩むことが大切。

体(いのち)を大事にしないと
今後に響いてくる。
心身ともに壊れたら元も子もない。
替えはきかないのだから。

2016年11月20日日曜日

ssh-copy-id で ERROR: No identities found と表示されたとき

ssh-copy-idで公開鍵の設置を行おうとしたときに
ERROR: No identities found と表示され設置に失敗しました。

公開鍵に不備があるのかと思い、再作成して確認しましたが、
結果は変わらず。

個人的な事情で公開鍵のファイル名はデフォルトを利用せず
用途ごとに名前を設定して運用していたのですが、
これが今回の原因でした。

今回のことで知ったのですが、sshの公開鍵のファイルに
つける名前には命名規則があるようです。

設置に失敗したときのコマンドはこんな感じ
ssh-copy-id -i .ssh/ida_rsa_windows_github.openssh_pub

設置に成功したときのコマンドはコレ
ssh-copy-id -i .ssh/ida_rsa_windows_github.pub_openssh

違いはファイル名の拡張子です。
この拡張子が「pub」で始まらなければならないことです。
拡張子が無い場合は失敗します。

手違いで内容に違いが出た可能性も考えられたので
拡張子の違うファイルをdiffで確認しましたが、差分は
確認できませんでした。

このことに気付くのに結構な時間がかかりました。
デフォルトと違うことをしている場合に問題が発生したときは、
初めに自身で行っている内容を確認することが大事ですね。

2016年11月17日木曜日

Ansibleの変数名ではハイフンが使えない

Ansibleで変数を定義するときハイフンを含んだ変数名を
設定するとエラーになります。

マニュアルに記載されているのですが見落としてました。
What Makes A Valid Variable Name の箇所になります。

ハイフンを含んだ状態で実行すると下記のようなエラーが
返ってきます。
TASK [Variable debug] **************************************************
fatal: [example.com]: FAILED! => {"failed": true, "msg": "template error while templating string: unexpected char u'_' at 8. String: {{variable-result}}"}
マニュアルの通り、変数名は
文字、数字、アンダースコア(_) で構成するようにします。

ファイル名をつけるとき単語をハイフンで区切ることが
あるので、癖で変数名につけていたのだと思います。
PHPでもハイフンは変数名に使用できないので、単語を
区切るときはアンダースコアで統一してみます。

これまでファイル名をつけるときはハイフンかアンダースコアで
悩むことがありましたが、複数の言語で使用できないことが
わかったので、今度からはアンダースコア統一で悩まずに済みます。

2016年11月14日月曜日

自分に合ったスマートフォンを探すために用途・条件を整理してみた

AndroidやiOSが登場して、数年が経ちました。
登場して間もない頃は様々なメーカーがデバイスを発表し、
何を選べば良いのか悩み、結局買わずにいました。

ですが、ここ最近はコスパが良いと言われるデバイスが
出てきているみたいで一度自分の用途に合ったスマートフォンを
探すため、用途や条件を整理してみました。

用途・条件

  • Android 6以上
  • ディスプレイは5インチ
  • ゲームは3D系をプレイしない
  • 価格は抑えたい(3万くらいまで)
  • 音楽は聞ければOK
  • カメラは写真が取れればOK
  • キャリアではなくSIMフリー
  • 技適を通っている

Android 6以上
Android のバージョンは最新が7.1の7系ですが、最新OSを
搭載しているデバイスはNexusかPixelくらいでしょうか。
OS自体が古い場合、セキュリティや性能に影響してくると
思うので、せめて6系以上を選びたいです。
探せば、4系や5系のOSが搭載されたデバイスもあります。

ディスプレイは5インチ
6インチのデバイスを手に取ったことがありましたが、自分の手には
大きすぎると感じました。
5インチ以下なら片手でも操作できると思いますが、主流は5インチ
以上みたいなので選択肢を広げるためにも5インチ。

ゲームは3D系をプレイしない
3D系のゲームを満足にプレイするにはハイスペックのデバイスが
必要で、初期投資を抑えるためにここはプレイしないを選択。

価格は抑えたい(3万くらいまで)
勝手なイメージですが、携帯よりも壊れやすいと考えているので
買い替えの頻度が短くなることを考えるとやはり価格は抑えたいです。
よくて3万円台まで。
昔の携帯も数万円するのがあったと思います。
同じ値段で今なら、ハイスペックのデバイスを購入できると
思うと悲しくなります。

音楽は聞ければOK
通勤途中で音楽を聞くとき、音にこだわることはなく
良し悪しも難しいので、聞ければOKの程度。

カメラは写真が取れればOK
今よりも鮮明に撮れれば良いかなというくらいでカメラの性能は
画素数が増えれば良いかなという程度。

キャリアではなくSIMフリー
キャリアでスマートフォンを運用しようと何度か見積もりましたが
月額費用の増加が許容範囲ではありませんでした。
通話がメインの場合は、キャリアの良いところを活かせますが
毎月払う料金のほうが致命的なので、月額費用を抑えるため
SIMフリーを選択。

技適を通っている
技適を通っていないと法律上は違反していることになるので、
安心して使うためにも技適を通っているデバイスを選択。

2016年11月7日月曜日

Windows10 Anniversary Update でインテル WiDiが削除されて驚いた

Windows10 Anniversary Updateを実行した際にインテル WiDiという
アプリケーションが削除されて驚いたが、このページを見る限りサポートを
終了するみたいなので、削除されても問題ないみたい。

今回は良かったが、もし自分が携わったアプリケーションで同じようなことが
起きたらと思うと胃が痛くなりそうです。

アップデート後は実行結果の確認を怠ってはいけませんね。

2016年9月15日木曜日

暑い夏が終わり

しばらく、このブログへの投稿もストップしていましたが、再開です。

投稿できなかったのは暑い夏を迎える時期、これまで使っていたPCの
動作が今までよりも不安定になり、このまま使える状態ではなくなりました。
修理を考えましたが、サポート期間が切れていたので修理費用も高額に
なると思い買い替えを決断。
買い替えを決めたのはいいのですが、何を買うか情報収集をイチから
始めるという状態だったので時間がかかりました。

いろいろ調べていく中で今後はもっと気をつける必要があることがわかりました。
  • 定期的な掃除
  • 空調が整った環境
「定期的な掃除」
ホコリは大敵とわかっていたつもりでしたが、掃除していたかというとNO。
よーく見ると通風口にホコリが溜まっていました。これではダメですね。
ハンドタイプの掃除機でホコリを吸い出そうとしましたが、長年溜まった
ホコリはビクともせず。

「空調が整った環境」
思い返せば、暑い夏に扇風機だけの環境でPCを動かしていたことがありました。
こちらもこれではダメですね。
適切にクーラーを使用してPCにも優しい環境を整えないといけないですね。

購入後のPCのメンテナンスを適切にしないとPCに悪影響を与えることを
再認識しました。
大きい出費ですが、勉強代込みということで買い換えたPCは 適切に
利用していこう。

2016年6月5日日曜日

Ansible の yum で name にドットが含まれていると応答が無くなる

Ansibleでyumモジュールを利用してパッケージをインストールすると
パッケージ名にドット「.」が含まれている場合にリモートからの応答が
無くなり、以降のタスクが実行できなくなりました。

ドットが含まれていることが原因ではなく、試用環境によるネットワークの制限が
影響している可能性が高いことがわかりました。
問題の切り分けがうまくできなかったと反省です。

yumモジュールでインストールするパッケージはwith_itemsで指定しており
例えば32bit版を指定するための .i686 などドット「.」を含むパッケージが
2つ続けてあると発生しました。

対応としてはドット「.」を含むパッケージをダブルクォーテーション「"」で
囲むことでyumモジュールでのインストールは成功しました。

これまでドット「.」を含むパッケージは1つありましたが、問題は
発生していませんでした。
今回追加したパッケージ名にはドット「.」が含まれており、2つ続く
書き方にしたところ応答が無くなったのです。
# 応答が無くなる書き方
  - xxx.i686
  - yyy.zzz
# 動作した書き方
  - "xxx.i686"
  - "yyy.zzz"
2回続けてリモートからの応答がなくなったので直接リモートにログインし
ログを確認したところ、yum.logには追加したパッケージのインストールの
履歴はありましたが、それ以降インストールの履歴はありませんでした。
topでコマンドの実行を監視したところ確かにyumが実行されていることは
確認できましたが、何故かyum.logに残っている追加したパッケージ以降の
yumの実行を確認することができませんでした。

何かしらエラーが発生したのでは?と色んなログを見てみましたが原因に
なるようなログは見つからず。
しかもAnsibleがリモートで実行もされていませんでした。
エラーとして出力されていれば、解決策を探すこともできたのですが
何も出力されていなかったので、今回対応した方法が付け焼刃のような
感じで不安が残ります。

Ansibleのバージョン:1.9

2016年6月2日木曜日

PhantomJSビルドに2時間要した。

PhantomJSビルドに2時間要した。
バイナリが提供されているならダウンロードを利用したほうが良いかも。
よく見たらhttp://phantomjs.org/build.htmlに記載されている
ハードウェア要件を満たしていなかった。
CPUコア1つにメモリ1Gじゃ全然足りていない。
前は何かのライブラリの影響でLinux環境はソースからビルドする
必要があったけど、2016/5/29時点で確認するかぎりではバイナリが
ダウンロードできますね。

CPU情報やメモリなどを確認するために実行したコマンド
# CPU情報を表示する
cat /proc/cpuinfo
# メモリ情報を表示する
cat /proc/meminfo
# メモリの使用状況を確認
# -h つけることで自動で単位(GBやMBなど)を調整して表示
free -h
# BIOS情報を表示する
dmidecode

2016年5月29日日曜日

tmpwatchは一時ファイル削除以外にも使える!?

tmpwatchコマンドは指定した時間アクセスの無いファイルや
ディレクトリを削除するコマンドです。
/tmp/に生成される一時ファイルを掃除するために利用されています。

このコマンド別に/tmp/だけを対象としているわけではなく、ディレクトリを
指定すれば任意の場所で掃除を実行してくれます。
使い道としてはWebアプリケーションで生成した一時ファイルやユーザごとに
用意したディレクトリを定期的に掃除(削除)するために利用できます。
今まで削除用のプログラムを書いたりしていましたが、このコマンドが
あれば不要ですね。
tmpwatchは指定したディレクトリ以下を再帰的に走査してくれるので
ディレクトリが何階層になっていても対処できますね。

2016年5月22日日曜日

CentOS6 で rbenv を利用して Ruby をインストールする

Serverspecで必要なRubyをCentOS6にインストールします。
CentOS6にはRubyがデフォルトでありますが、バージョンが
1.8系と古いです。現在の安定版は2.3系です。

Serverspecのセットアップ方法を調べてみてもRubyの
インストールについては省略されていることが多く、普段利用しない
言語のインストールとなると慎重になるので調べてみました。

Rubyの複数のバージョンを簡単に管理できるrbenvを利用して
Rubyをインストールしてみます。

rbenvのインストールに必要なパッケージのインストール
sudo yum groupinstall -y development
sudo yum install -y openssl-devel readline-devel zlib-devel
rbenvのインストール
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
cd ~/.rbenv && src/configure && make -C src
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
~/.rbenv/bin/rbenv init
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile
type rbenv
rbenvでRubyをインストールするために必要なプラグインをインストール
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
rbenv実行例
# rbenvでインストール可能なRubyのバージョン一覧表示
rbenv install -l
# Ruby 2.3.1をインストール
rbenv install 2.3.1
# Ruby 実行バージョン(全体)を2.3.1に設定
rbenv global 2.3.1

2016年4月17日日曜日

Apache2.4 の Testing 123.. を非表示にする

Apacheをインストールして起動しているか確認のためにデフォルトで
用意されているテストページ。このテストページを表示させない方法です。

CentOS7でインストールされるバージョンはApache2.4系。
表示されるテストページは「Testing 123..」になります。
テストページが表示される設定は/etc/httpd/conf.d/welcome.confにあり
この設定ファイルを削除または設定ファイルの中身を全てコメントアウトすれば
表示されなくなりますが、ドキュメントルートにindex.htmlを設置せずhttpd.confを
何も編集しなければ、今度はインデックスページが表示されます。
デフォルトのドキュメントルートにindex.htmlを設置すれば解決します。
または普段は先のようなインデックスページを表示してディレクトリの中身を公開する
必要が無いのでOptions Indexesは無効にします。
するとForbiddenとなりエラーページが表示されます。

welcome.confの中にも書かれているのですが、ファイルを削除するとApacheが
アップグレードしたときにファイルが復活するようです。
削除ではなくリネームして空ファイルとして配置すれば問題ないかと思います。

2016年4月8日金曜日

IE11, Firefox, Chrome の JavaScript を無効にする方法

IE11、Firefox、Chrome の JavaScript を無効にする方法
ブラウザごとに手順が異なるので整理

IE11


ツール > インターネットオプションを選択し セキュリティ タブを選択
インターネットオプションでレベルのカスタマイズを選択
スクリプト の アクティブスクリプト で 無効にする を選択しOKを押す
はい を選択しセキュリティ設定を変更後、インターネットオプションのOKを押して
インターネットオプションのウィンドウを閉じる

Firefox


右上のメニューバーから開発ツールを選択
開発ツールを表示を選択
開発ツールのオプションを選択し
詳細な設定 の JavaScriptを無効 をチェックする
開発ツールを閉じるまで有効になり、開発ツールを閉じるとリセットされる

Chrome


右上のメニューバーから その他のツール > デベロッパーツールを選択し
デベロッパーツールを表示し右端の Customize and control DevTools を選択
Settings を選択し Disable JavaScript をチェックする
デベロッパーツールを閉じるまで有効になり、デベロッパーツールを閉じるとリセットされる

IE11 は JavaScript の呼び方が アクティブスクリプト となっているので探すのに戸惑うかも
IE11 で JavaScript の設定を有効に戻す場合はインターネットオプションで
レベルのカスタマイズから 有効にする を選択するか、既定のレベルを押す

2016年3月27日日曜日

Ansible でユーザのパスワード設定が簡単に行えるようになった

Ansible でユーザのパスワード設定が以前よりも簡単になっています。
対象のAnsibleのバージョンは1.9から利用できます。

コードは下記になります。
# 変数passwordに入っている値をsha512でハッシュ化
# ハッシュ化した値をユーザのパスワードとして設定する
# ログイン時は変数passwordに入っていた値を入力
user: name={{ user_name }} password={{ password |password_hash('sha512') }}
ユーザのパスワードは平文ではなく必ずハッシュ化した値が必要です。
以前はハッシュ化した値を設定するためにPythonのコードをタスク中に
実行して結果を利用したり、事前にハッシュ化するコードを実行して結果を
直接埋め込んだりするなど手間がかかっていたのですが
password_hash()で簡単に設定ができるようになったと思います。
# このコードはAnsibleのドキュメントに記載されている方法
# Ansibleインストールマシンにpython-passlibを事前にインストールが必要
python -c "from passlib.hash import sha512_crypt; import getpass; print sha512_crypt.encrypt(getpass.getpass())"
# python-passlibをインストールせずに生成する方法
# $1$はMD5ハッシュの印
python -c 'import crypt; print crypt.crypt("password", "$1$mysalt$")'
# vars_promptでencryptを利用する変数を定義して
# Ansibleインストールマシンにpython-passlibをインストールしていない場合
# ERROR: passlib must be installed to encrypt vars_prompt values
# というエラーメッセージが表示され失敗します
vars_prompt:
    - name: "password"
      prompt: "ユーザーパスワードを入力"
      private: yes
      encrypt: "sha512_crypt"
      confirm: yes
      salt_size: 8
複数ユーザのパスワード一括設定で、ユーザごとにパスワードを
別々のものにする必要があるときpassword_hash()の方法は使いやすいです。
sha512ハッシュにしているのはCentOS6がsha512を利用しているので。

参考
Ansible - How do I generate crypted passwords for the user module?
Ansible - Jinja2 filters / Hashing filters

Ansible の変数を操作して動的に変更する

Ansibleの変数で一部分だけを取得したり数値に変換して結果を
利用したいケースがあったので調べてみました。

ドキュメントを見るかぎりAnsibleはPythonで動作し変数はJinja2の
テンプレートシステムを利用しています。
変数を操作するときの文法はJinja2、Pythonにならい、
Jinja2に組み込まれているフィルタのほか、Ansibleに用意されている
フィルタなどを利用して変数の内容を動的に変更できるようです。

数字を数値に変換する


{{ value|int + 10 }}
valueが数字10のときは20になる

文字列の一部分を取得する

Pythonのスライス表記という方法を利用して実現していると思います。

{{ value[0:1] }}
valueが test のとき t になる

{{ value[0:2] }}
valueが test のとき te になる

{{ value[1:2] }}
valueが test のとき e になる

{{ value[1:] }}
valueが test のとき est になる
valueが foo1 のとき oo1 になる
valueが foo11 のとき oo11 になる

{{ value[:2] }}
valueが test のとき te になる

{{ hoge[3:]|int + 20 }}
valueが foo1 のとき 21 になる
valueが foo11 のとき 31 になる

指定する範囲の数値からランダムに値を取得する


{{ 59 |random }}
0~59の範囲でランダムに値が選ばれる

{{ 59 |random(step=15) }}
{{ [0,15,30,45] |random }}
0, 15, 30, 45のうち、どれか1つの値がランダムに選ばれる

cronの実行時間をランダムにしたいとき便利です。

ハッシュした値を取得する


{{ 'test' |hash('sha1') }}
sha1のハッシュ値になる

{{ 'password' |password_hash('sha512') }}
sha512のパスワードハッシュ値になる(ソルトはランダム)

{{ 'password' |password_hash('sha512', 'salt_value') }}
ソルトを指定する場合

password_hashはユーザのパスワードを設定するときに
利用できると思います。

他にもいろいろとフィルタがあるようですが、主に利用するケースを
挙げてみました。
バージョンによっては利用できないフィルタがあるので利用するときは
バージョンの確認が必要です。

今回確認したOS・バージョン
CentOS 6.7
ansible 1.9.2

2016年2月22日月曜日

Sublime Text 3 のパッケージを Dropbox で共有するときは

Sublime Text 3でインストールしたパッケージを Dropbox で共有する方法は
こちらに公開されていますが、別マシンでパッケージを反映するときは事前に
Package Controlをインストールしていなければ Dropbox でパッケージの
インストール情報を反映してもパッケージは自動的にインストールされません。

"Packages"や"Installed Packages"フォルダを Dropbox で共有すると
その中に含まれているファイルはOSごとに別に用意されているみたいで
OSが違う環境で共有してしまうと問題が起きるようです。
公式にあるようにパッケージのインストール情報を管理している
"Packages/User"フォルダのみ Dropbox で共有すれば良いようです。

別マシンに共有する手順(Windows7)
1. 別マシンにSublime Text 3をインストール
2. Sublime Text 3を起動してこちらにある手順からPackage Controlをインストール
3. Sublime Text 3を終了する
4. スタートメニューから"コマンド プロンプト"を探し、右クリックして
   "管理者として実行"を選択
5. cd %HOMEPATH%\AppData\Roaming\Sublime Text 3\Packages
   コマンド プロンプトで目的のフォルダに移動
6. rmdir /S User
   Dropbox で共有するためコマンド プロンプトで"User"フォルダを削除
7. mklink /D User [Dropboxに設置しているSublime Text 3のパス]
   コマンド プロンプトで"User"フォルダのシンボリックリンクを作成
8. Sublime Text 3を再起動すれば自動でパッケージがインストールされる

2016年2月1日月曜日

ヒアリングはいわゆる意見を聞くことですよね

ある内容について、関係するメンバーにヒアリングが行われるということがありました。
私も含まれていたので参加しましたが、終わってから疑問を抱きモヤモヤしたので書き残し。

ヒアリングが行われる前に進行役が、この場は意見を発信してもらって現状を知る・情報収集するためであって何かしらの答えを出すのではないという感じの前置きがありました。
いわゆるヒアリングの意味・説明。

モヤモヤした原因は、意見が上がる中で途中から討論にシフトしていった。
途中でそれることもあると思うけど内容が意見を聞きたい項目に対して、確認ではなく発言者の揚げ足を取るようなことばかり。

参加して意味のある時間だったとは思えなかった。

2016年1月18日月曜日

セールスの電話で断るときに気をつけていること

「○○のサービスをご利用されていますか」
「利用されている○○の料金が安くなります」
セールスの電話があったときは断っていますが、
そのときの返し方によって
相手は許諾したと思われることがあるようです。

曖昧な返答は避ける

これが正解と思いますが、頭でわかっていても
電話で返答するとき怠ってしまうことがあるんです。
断る意思を正しく伝えないと勝手に話が進む
なんていう不幸な出来事が起こるかもしれません。

「必要ありません」
「不要です」
と言って断る意思を伝えて早めに切ったほうが
無難ですね。
「今は」とか付け加えると今後は可能性アリなんて
思われるかもしれないので、付け加えないほうが
良いと思います。

当たり前のことなのかもしれませんが、考え方を
何かしらアウトプットすることで意識付けることが
できるのではないかと思います。

なので、書いてみました。
新年1発目の記事でした。