Vagrant でvboxsfを使ってmount出来なくなった

なぜかmount出来なくなったようだ

最近新しいboxを使ってVMを構築しようとしたら下記のエラー。

Vagrant was unable to mount VirtualBox shared folders. This is usually
because the filesystem "vboxsf" is not available. This filesystem is
made available via the VirtualBox Guest Additions and kernel module.
Please verify that these guest additions are properly installed in the
guest. This is not a bug in Vagrant and is usually caused by a faulty
Vagrant box. For context, the command attempted was:

最初はGuest Additionsをアップデート

VirtualBoxをアップデートしていたのでゲストのGuest Additionsをアップデートのためにプラグイン導入。

vagrant plugin install vagrant-vbguest

それでもvboxsfのエラーは修正できず。
なんぞやと探ってみるとmount.vboxsfが無いご様子

mount.vboxsfへのシンボリックリンク貼り直し

mount.vboxsf -> /opt/VBoxGuestAdditions-5.1.20/other/mount.vboxsf ← ファイルが存在しない

Guest Additionsのミスなのか分からないが、とりあえずエラーなのでここを修正する。
下記の場所にあるという情報なのでここへシンボリックリンクを貼り直す。

rm /sbin/mount.vboxsf
ln -s /usr/lib64/VBoxGuestAdditions/mount.vboxsf /sbin/

これでVM を再起動すれば完了!

Windows の Sublime text の CTags プラグインで Auto Complete を使用する

CTagsの.tagファイルで自動補完リスト

このプラグインには、実は.tagファイルを関数の補完リストとして使用する機能が実装されている。
だがしかし!みんな大好きWindowsでは、この機能がなぜか動かない。

というわけで、CTagasのプラグインにCTagsAutoCompleteというClassがあるのでメンバ関数を確認…
f = os.popen(
"awk \"{ print " + prefix + "$1 }\" \"" + tags_path + "\"")

awk…

というわけで、理由はawkと呼ばれるテキスト処理ソフトウェアが必要ということが判明。
なのだが、Windowsには標準で入っていない。

ならばawkとやらをインストールだ。

Auto Completeを使えるようにする

なんとたったの3ステップ!

  1. Gawk for Windows から Binaries のzipをダウンロード
  2. zipを解凍
  3. PATHの通ったフォルダにawk.exeを設置

これで単語補完が働いたときに.tagsファイルに含まれる関数群がリストアップされてより仕事がはかどるという寸法です。

ただ、.tagsファイルが大きいと単語補完にも時間がかかる。
今はまだ、不要な関数群(composerで入れたライブラリとか)はtagファイルのビルド時に無視リストに入れておいた方がよさげ。

そして、VimFxへ……

さよなら、Vimperator…

Firefoxがe10sへの移行を始め、Firefox51になった途端にVimperatorがほぼ動作しなくなった…。
そんなわけで、とうとうVimperatorに見切りを付けVimFxへ移行。

何はともあれツリー型タブ

なにげに使っていたVimperatorのプラグイン「TreeStyleTab.js」。
何が出来るかっていうと、ツリーを開く・畳むがショートカットに割り当てられるようになる。

プラギン作者さんに感謝!

そんなわけで、下記のカスタムコマンドをconfig.jsへ追加すれば使用できるようになるはず。
処理自体はTreeStyleTab.jsほぼそのままで動作。

vimfx.addCommand({
    name: "tree_style_tab_expand",
    description: "ツリーを開く",
    category: "location",
}, ({vim}) => {
    const gBrowser = vim.window.gBrowser;
    if (gBrowser.treeStyleTab) {
        gBrowser.treeStyleTab.collapseExpandSubtree(gBrowser.selectedTab, false);
    } else {
        vim.notify("need TreeStyleTab");
    }
})

vimfx.addCommand({
    name: "tree_style_tab_collapse",
    description: "ツリーを畳む",
    category: "location",
}, ({vim}) => {
    const gBrowser = vim.window.gBrowser;
    if (gBrowser.treeStyleTab) {
        gBrowser.treeStyleTab.collapseExpandSubtree(gBrowser.selectedTab, true);
    } else {
        vim.notify("need TreeStyleTab");
    }
})

ショートカットは好きに設定すればいいと思うけど、以前からのだとこれでやってる。
開く → zo
畳む → zc

まだだ、まだ終わらんよ!

e10sになるとFirefoxもかなり軽くなるようだし、これでまだ10年は戦えるんじゃないかな。

Paypalの資金源編集

資金源に特定のカードが使えない

いくつか登録しておくと、決められたカードがメインで使用されてしまいます。
そんなわけで、メインの資金源を変更しておく方法。

  1. Paypalサイトで明細確認
  2. 「旧バージョンのページに移動」
  3. 「資金源の編集」
  4. 「利用可能な資金源の編集」
  5. 使用したいカードにチェックを入れて保存

これでメインを好きなカードに設定可能!

PaypalのWEBサイトのUIが地味に分かりづらい…

CentOS (Vagrant) でPuppetのGPGキーエラー

CentOS 6.7のvagrantイメージで出るエラー

Downloading Packages:
warning: rpmts_HdrFromFdno: Header V4 RSA/SHA1 Signature, key ID ef8d349f: NOKEY
Retrieving key from file:///etc/pki/rpm-gpg/RPM-GPG-KEY-puppetlabs-PC1

The GPG keys listed for the "Puppet Labs PC1 Repository el 6 - x86_64" repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.

PuppetのGPG KEYのライセンス切れらしい

というわけで、下記の場所からひとまず新しいGPG KEYを取得して使用できるようにする

wget http://yum.puppetlabs.com/RPM-GPG-KEY-puppetlabs
wget https://yum.puppetlabs.com/RPM-GPG-KEY-puppet
rpm --import RPM-GPG-KEY-puppet
rpm --import RPM-GPG-KEY-puppetlabs

おそらくこれで使えるようになるはず。

年初の意気込みとかそういう感じの

明けましておめでとうございます

昨年はPHP漬けの毎日であまり新しいことにチャレンジ出来ない年でした。
とはいえ、初めてPHPのフルスタックフレームワーク(Phalcon)を使ったり業務のインフラ構築したりとある意味新しいこともやれた一年ではありました。

今年は新しいプログラミング言語を覚えていきたいところです。
おそらくC#あたり。
もちろん引き続きSublime Textのプラグインも必要に応じて公開・更新していきたいですし、PHPでもPythonでも何かWebアプリを作っていく所存です。

そんなわけで、今年のやっていくことは

  1. 身体を鍛える
  2. ミニマリズムの実践
  3. 瞑想
  4. 新たなプログラム言語を覚える
  5. 早寝早起き

の5本でお送りいたします。
大まかには「心身の鍛錬」と「プログラミング」の2つのカテゴリ。
一気にやるわけではなくて、あくまでも習慣づけていくということで。
1~4は同時進行でも出来そうだけど、早寝早起きがほんと難しい。

ちなみに昨年年始に「グルテンフリーやる」とか突然奥さんに宣言して小麦断ち始めたわけですが、腹痛減ったしお肌ツルツルだし鼻炎は治らないしといった感じでした。
鼻炎が治らないの残念無念。これは一番の目標だったのに。でもグルテンフリーは引き続き行っていきます。

Sublime Text 3 のCtagsプラグインfork版公開中

プルリクに反応してくれなかった…

そんなわけで、いくつか変更した機能があるのでそれをfork版として公開しておきます。
github で公開中: naoyukik/CTags

変更内容

Fork: 0.5.0 リリース(2017-02-14)

  • .sublime-projectファイルからCTagsの設定を読み込めるように変更
  • このバージョンからmasterリポジトリをDefaultとし、タグを追加

developmentにて実装(2016-12-09)

  • Sublime Text 3 で実装された関数ジャンプ(Goto Definition)とクイックパネルでのファイルパスと同等の機能を実装
  • ctagsのオプションファイルをプロジェクトのルートフォルダから読み込めるように実装
  • Ctagファイルの自動更新に対応

上記ともに、セッティングファイルに使用フラグを追加してあるのでそれぞれ設定してからご使用ください。

たぶんST2でも使える…かな。

CTagsのプラグイン(本家): https://github.com/SublimeText/CTags

phpのarray_columnやばい

配列のあるキーを使って構造を変更することが簡単に出来るようになるarray_column(PHP5.5以上)
http://php.net/manual/ja/function.array-column.php

説明
array array_column ( array $input , mixed $column_key [, mixed $index_key = null ] )

array_column() は、 配列 input の中から column_key で指定した単一のカラムの値を返します。 オプションで index_key も指定できます。これを指定すると、 入力配列内のカラム index_key の値に基づいて結果を並べ替えます。
-- PHPマニュアルより引用

説明読んでもイメージがわかねぇ…

そこで例を見てみる。
下記例はPHPマニュアルより引用。

例1 レコードセットからのファーストネームの取得

<?php
// データベースから返ってきたレコードセットの例
$records = array(
    array(
        'id' => 2135,
        'first_name' => 'John',
        'last_name' => 'Doe',
    ),
    array(
        'id' => 3245,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
    ),
    array(
        'id' => 5342,
        'first_name' => 'Jane',
        'last_name' => 'Jones',
    ),
    array(
        'id' => 5623,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
    )
);

$first_names = array_column($records, 'first_name');
print_r($first_names);
?>

上の例の出力は以下となります。

Array
(
    [0] => John
    [1] => Sally
    [2] => Jane
    [3] => Peter
)

簡単にfirst_nameの別配列が作れる。

例2 レコードセットから姓を取得し、”id”で並べ替える例

<?php
// 先ほどの例と同じ $records 配列を使います
$last_names = array_column($records, 'last_name', 'id');
print_r($last_names);
?>

上の例の出力は以下となります。

Array
(
    [2135] => Doe
    [3245] => Smith
    [5342] => Jones
    [5623] => Doe
)

id => last_name で配列を作成出来た。

PHPマニュアルの例には出てないが、第2引数をnullにすると、第3引数の値を元になる配列全体のキーにして返してくれる。

$ids = array_column($records, null, 'id');
print_r($ids);
?>

上の例の出力は以下。

array(
    2135 => 
    array(
        'id' => 2135,
        'first_name' => 'John',
        'last_name' => 'Doe',
    ),
    3245 =>
    array(
        'id' => 3245,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
    ),
    5342 =>
    array(
        'id' => 5342,
        'first_name' => 'Jane',
        'last_name' => 'Jones',
    ),
    5623 =>
    array(
        'id' => 5623,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
    )
)

DBから取ってきたデータの整形あたりでよく使えそう…特に例2はもっと早くこれを知っておけば使えた場面があったように思える…。

教訓

マニュアルやバージョン差分は目を通しましょう。