ネガティヴをポジティブに変換する意識

頑張っても落ち込むことはある

人はどんなに気を張ってても落ちるときは落ちる。

ではどうすればいいのか?
受け入れるのか?
内に籠もってやり過ごすのか?

否。

踊れ!

ダンスだ!
宴だ!
ルアウだ!
アローーーーハーーーーー!

本当に踊らなくてもいいんだ。
意識するだけで。

例えば漫画ワンピースでは事件解決後に豪華な宴が催される。壮絶な戦い後の大宴会。それを想像するのだ。

にぎやかな宴。音楽とダンスと食事。

これを思い浮かべるだけでちょっとやそっとのネガティヴイベントには屈しない心が出来るはずだ。

INAX のサーモスタット付きシャワーバス水栓の温度調節が出来ないのを辛うじて使えるようにした

温度調整出来ないとか

サーモスタットの場合、温度調節を水とお湯の量を別々に調整する必要がないからすんごい楽。
だが、それはそれで罠にはまるって話。

どうやら温度調節する機能が上手く動いてないっぽい。いや、もしかしたら仕様かもしれない。
説明書には「温度調整出来なくてぬるいことあるから指定温度を高めに設定してね(意訳)」とある。
※温度調整はRINAIのパネルで行う。

問題の再現方法

  1. お湯を出しながらサーモスタットの温度を水レベルまで下げる
  2. サーモスタットの温度を上げる
  3. 水温が上がりきらないお湯が出続ける

真冬だったら風邪引くよ!

なんとか温度が上がるようにする手順

これを直す方法を先に提示しておく。
1. 水を出しながらサーモスタットを水レベルまで下げる
2. 水止める
3. サーモスタットの温度を上げる
4. ヒャッハー!お湯が出る!

調子に乗って温度上げると火傷するよ!

水にしてから一度止めると内部の水温設定がリセットされるのかね、これ。

※業者を呼んで見てもらったところ故障でしたw

PHP で var_dumpのフォーマット

var_dumpデバッグしすぎ問題

複数のvar_dumpを出力させてどこに書き込んだか分からなくなった、なんてことないだろうか? (俺だけ?)

で、var_dump でデバッグしたいとき、こんな感じのフォーマットで設定しておく。

/**
 * 下記のフォーマットで書くと出力はこうなる
 * ExecFile: 呼び出したファイル名(行数)
 * Function: 呼び出した関数名
 * 値
 */
var_dump('ExecFile: '.basename(__FILE__).'('.__LINE__.')', 'FUNCTION: '.__FUNCTION__, variable, variable,...);
// var_dump は引数をカンマ区切りで無制限に渡せる。

Sublime Text 3 での Snippet設定

Sublime Text 3 のSnippetは下記設定例。
“var” を入力すると上記のスニペットが展開できるようになる。

ファイル名: var_dump.sublime-snippet

<snippet>
    <content><![CDATA[var_dump('ExecFile: '.basename(__FILE__).'('.__LINE__.')', 'FUNCTION: '.__FUNCTION__, ${1:variable});]]></content>
    <tabTrigger>var</tabTrigger>
    <scope>source.php</scope>
    <description>var_dump Debug</description>
</snippet>

PhalconでPHPビルトインサーバー時にドハマり

Phalcon を使ってみた

Phalconは「A full-stack PHP framework delivered as a C-extension」というフレームワークです。
ベンチマークで超絶速度(PHPフレームワークにおいて)をたたき出すポテンシャルを持っています。
Phalcon 公式はこちら

Phalcon、PHPビルトインサーバーでも動作するってよ

Phalconの公式ドキュメントはかなり詳細なことまで書かれています。
もちろん、サーバー設定方法まで丁寧に記載されています。

で、PHP5.4から搭載されたPHPビルトインサーバーの設定も書かれていました。
PHP ビルトインサーバーの利用

この設定は .htrouter.php というファイル(.htaccess的なもの)で、これを行わないとPhalconのデフォルトと同一の設定になりません。

<?php
if (!file_exists(__DIR__ . '/' . $_SERVER['REQUEST_URI'])) {
    $_GET['_url'] = $_SERVER['REQUEST_URI'];
}
return false;

このファイルを使用してサーバーを起動

php -S localhost:8000 -t /public .htrouter.php

これで.htrouter.phpを使用してサーバーへアクセするようになります。

ところがどっこい

さて、これを使用していたもののタイトル通りにここではまってしまいました。
例えばGETにクエリ(パラメーター、Query String…等呼ばれ方はいろいろ)を付与し “/foo/bar?baz=qux” というURLへアクセスすると、ルーティングが上手く動作しなくなります。

変数などをダンプしてみると、
“bar?baz=qux” という文字列がルーティングの判定時に使われています。
本来この時点で取得しなければいけないのは “bar” という文字列だけです。

Phalconのルーティングは、ControllerクラスのActionと呼ばれる関数を使用して動的に呼び出しています。
上記の場合、bar?baz=quxAction()みたいな呼ばれ方をしてしまうということです。
本当はbarAction()を呼ばなければならない。

ならば正せばいい

実際のところ、このことが全く分からず(むしろ勝手にクエリストリングが分割されると思い込んでいたのも問題だった)、1日ハマって見つけたサイトがこちら。
Route not matches URI with querystring · Issue #379 · phalcon/cphalcon
ハイ、公式のgithubのissuesでした。

このissueを読んで上記のルーティングの仕組みをやっと理解。
出来上がった .htrouter.php はこちら

<?php
if (!file_exists(__DIR__ . '/' . $_SERVER['REQUEST_URI'])) {
    if (!empty($_SERVER['REQUEST_URI'])) {
       $uriParts = explode('?', $_SERVER['REQUEST_URI']);
       $uri = $uriParts[0];
    } else {
       $uri = '/';
    }
    $_GET['_url'] = $uri;
}

return false;

このポイントの記事が全く見つからず、きっとPHP ビルトインサーバーをみんなが使ってないだけ俺の知識が浅いんじゃないうんきっとそうに違いない。と自己弁護しつつPhalconライフをお楽しみたいと思います。

追伸: 実はvar_dumpで$_GETとかを見ていればヒントがあった。困ったときはvar_dump。

読書しよう、読書

世間では読書なんていらないなんてこともたまに言われますが

そうは思わない。
本というのは知識はさることながら、時間まで凝縮されてる。
自分でやったら1年かかることでも本を読んだら数時間で知識を手に入れられる可能性がある。
なのに読書しないなんてもったいないよ。

いつ読めばいいの?

読む時間なんてそこら中に転がってる。
朝活、通勤、ランチ、帰宅時……。
昔の上司は常に文庫をポケットに忍ばせておいて、ちょっとした休憩に読んでいた。
技術書は大きいものが多いので難しいけど、最近は電子書籍をスマホで読む、という選択肢もとれる。
ちょっとした待ち時間にどんな本でも読めるのはスマホの利点だ。

読んでも覚えられない……

もし、そんな理由で読書を辞めている人がいるなら、そんなことは気にしないでいいんだ。
誰だって一回読んだくらいじゃ本の内容なんて完璧に (いや、ほとんど) 覚えてられない。
印象に残るのなんてほんの数行、ひと言……そんなもんだ。

もちろん世界には本当に一回読んだだけで覚える人もいるかもしれないが、他人は他人。
書評とかをまとめている人たちは、メモを取って紹介したい場所を外部に記憶しているだけ。覚えていられないんだからメモっておけばいい、というわけだ。

ただし何度も読む

同じ本を繰り返し読むのは正直しんどい。流し読みでもしんどい。
だから同じ分野の本、同じ人が書いている本を数冊読む。
同じ人が書いた同じテーマの内容でも、たとえ話や別確度からの内容が書かれていることがよくある。
そうやって同じようなテーマの本を3~5冊読めばおぼろげながら (もしくはかなりはっきりと) いろいろ掴めてくるはずだ。

技術書読むの?

まずは興味のある分野の本を手に取ろう。
自分がやりたい開発の本じゃなくても構わない。
私の場合、結構デザインの本とか仕事術、自己啓発と幅広く読んでいる。
自分が興味があるなら何でも片っ端から読んでいけばいい。

気楽に読もう

どんな本でも気楽にいこう。
つまらなかった次にいっちゃえばいい。

本の読み方にコレってことはない。
とにかく、流し読みでも何でもいいから気楽にいこう。

Sublime text はプロジェクトを使う。

Twitter読んでると、プラグインがうまく動かないといった話がよくある。
そもそも Sublime Text はプロジェクトを設定することを前提として作られている。
もちろんプロジェクトがなくても動くけど、設定ファイルはプロジェクトフォルダ内から探す。みたいなプログラムがプラグインではよくされている。

ちょっとした開発でもプロジェクトをまず作りましょう。

systemd-nspawnを使ってみた

使ってみた

当初は conoha に立てた Arch Linux へ Docker をインストールして、そこでredisとかnginxとかを動かそうかと調べていた。
しかし、systemdが動いてるなら systemd-nspawn なるコンテナ型仮想化システムがいい感じだと風の噂で聞いたのでこちらを試すことにした。

習うより慣れてみる

コンテナ化の知識は全くなく、Dockerでさえどうやって使うのかさえ分からなかった。
自分で構築したことでそれなりに理解出来た…気がする。

以下はとりあえず、Arch Linux のsystemd-nspawn の解説をかいつまんで進行します。
ぶっちゃけちゃると、今回の記事の情報はArchWikiに全部載ってます。
ArcyWikiは、Linuxに関する基本的なところから充実の内容なのでビギナーの方からでもお勧めです。

コンテナの作成

mkdir ~/MyContainer
pacstrap -i -c -d ~/MyContainer base

コンテナの手動起動

systemd-nspawn -bD ~/MyContainer

-bDn という感じで書くとエラーで起動しないです。

コンテナのサービス起動

systemctl enable machines.target
mv ~/MyContainer /var/lib/machines/MyContainer
systemctl enable systemd-nspawn@MyContainer.service
systemctl start systemd-nspawn@MyContainer.service

トラブルシューティング

pacstrapがインストールされていない

sudo pacman -S arch-install-scripts

上記のスクリプトをインストールすることでいろいろ便利スクリプトが入る。

ログインが出来ない

arch-nspawn login: root
Login incorrect

こう出たときはコンテナのディレクトリ上にある /etc/securetty のターミナル名のリストに pts/0 を追加。このファイルはホストから開く(どっちにしてもログインできないので)。

ホストとRedisコンテナとuwsgiコンテナをProxyで繋いだりしたのでそこら辺も書く予定。

Sublime Text 3 のPHP系プラグイン覚え書き

自分が使用しているSublime Text 3 の PHP向けのプラグインメモ。
随時追加していく予定。

Windows Application

Sublime Text とは関係ないけど、PHPerは使用できるようにしておいた方がいいと思われるアプリケーション。

Composer

PHP界隈では必須になりつつあるPEARに変わるライブラリ管理ツール。

  • インストール 公式サイト: Composer
  • 下記パスを環境変数に追加
    ※追加しないとcomposerでインストールしたものがパス無しで実行できない
%USERPROFILE%AppDataRoamingComposervendorbin

登録するコマンドは下記

composer config -g repositories.packagist composer http://packagist.jp

完了

Sublime Text 3 Plugins

SublimeLinter

SublimeLinter-phpcs

コマンドラインツールのPHP CodeSnifferを使用するとコーディング規約をチェックしてエラーを表示してくれる

  • コマンドラインツールのインストール
composer global require squizlabs/php_codesniffer=*

SublimeLinter-phpmd

コマンドラインツールのPHP Mess Detectorを使用するとプログラムで怪しいところをチェックしてエラーを表示してくれる

  • コマンドラインツールのインストール
composer global require phpmd/phpmd=*

ST3 日本語環境向けプラグイン SublimeCodic の紹介

SublimeCodic とは?

プログラミングで使用する日本語を技術者向けに英語へ翻訳してくれるサイトの翻訳APIをSublime Text 3で使用できるようにしたプラグインです。
github:SublimeCodic

この素晴らしいAPIを提供していただいているCodicのサービスは、公式サイトからも使用できます。
codic 公式サイト

このプラグインを作成はしたものの、すでにほぼ同一のCodicへのプラグインがPackage Controlへ公開されており、また公式でも公開しているので私が作成したプラグインの存在意義はかなり薄いです…。
私はもちろん使っていますが…。

それでも使ってみたいという奇特な方は、githubに登録方法などが記載してあります。
ぜひご活用ください。

今後の予定

現状は特に無さそう。
要望には対応できそうなら対応します。

LibreOfficeのピボットでハマる

ハマリどころ

・ピボットテーブルは文字列の大文字小文字を判別しない。

元データはこれ。

ID 課金額
aaaa 100
aaaa 200
AAAA 100
bbbb 200

このデータを元にピボットテーブル作った時、

ID 課金額
aaaa 300
AAAA 100
bbbb 200

を想定していたのですが、作られたのは

ID 課金額
aaaa 400
bbbb 200

というテーブル。
実際のデータは50万件とかで、目視で確認するのはもはや難しい…というところでふと天啓が降りてきて数日間の戦いに終止符を打ちました…。

確かExcelは重複排除を行うと大文字小文字判別を行わずに削除するのでこれもハマリどころ。