お給料を上げてもらうための作戦

私は過去に、技術部門の管理職をやっていて誰のお給料をいくら上げるかを決める立場にありました。 お給料が増える人には色々なパターンがあります。以下にまとめました:

1) 査定の前からお金が欲しいことをリマインドしておく

人事査定の時点では誰が昇給するかが決まっていることがありますので、 もっと前からアピールしておきましょう。四半期の1回のレビューやランチを同席する際に 明るく、ポジティブに伝えましょう

2) 何が欲しいか(この場合はお金)を明確にし、伝える

上司は部下が何を求めているか、案外わからないものです。特に部下が多い場合。 トイレが混むので増やして欲しい人、残業なしで早く帰宅したい人、パソコンにメモリを増設してほしいひと、 ニーズは人によって様々です。お金が欲しい場合はその旨、伝えると良いでしょう。

3) ストーリーを絡める

単にお金が欲しい部下と、お金が必要な背景(ストーリー)がある部下では違いが出てくる可能性が大です。 本当でも嘘でもいいのでお金が必要な理由のストーリーを作って、伝えましょう:

情に訴える作戦:

 実家の年老いた両親への仕送りをもう5000円増やして、  冬、暖房を気兼ねなく使えるようにしてあげたい

共感を誘う作戦:

 上司の方も子供がいて、マイホームを持っているとします。  「うちも、上司さんのようにマイホームを立てて、子供部屋を作ってあげたいんです」

戦力UPをアピールする作戦:

 いただいたお給料は、書籍の購入や資格取得に使って、  より、戦力になれるように自己投資にまわしたいのです

4) 今回の昇給が希望額より少なかったら、次年度に向けて釘をさしておく

意外かもしれませんが、部下の希望に答えてあげたい上司は多いです (特に部下が平均以上に仕事ができる場合)。

しかし悲しいかな、会社から割り当てられる昇給原資が足りないことが多々あります。 そのため上司は部下の給料を上げたくても、ちょっぴりしかあげられない場合があります。

あなたが提示された昇給額が希望額に満たない場合、上司も気まずい・残念である場合があります。 こういった場合、上司の方は面談を早く切り抜けたいので、

 いろいろと厳しい中、ご配慮くださいましてありがとうございます。  今後はもっと頑張りますので、来年は是非、希望額の○○円まであげてください!

といった具合に釘を刺しておきましょう。ここで上司がOK!とでもいえばしめたもの。

(つづく)

Chromeでdevドメインのサイトに接続できない(ERR_ICANN_NAME_COLLISION)

Googleさんが非常に困ることをやってくれました。 Chromeのバージョン63以降(2017年12月リリース)でdevドメインのサイトに アクセスすると強制的にHTTPSになります。サーバがちゃんとした証明書を搭載した HTTPSで動いてない場合は…接続できません。

対策ですが…

  • Safari等、他のブラウザを使う
  • HTTPSで動くようにする。ただし、オレオレ証明書(self-signed certificate)では動きませんのでちゃんとした証明書が必要です
  • devドメインから変更する。例えば、testドメインであれば問題ありません。

ですかね。かんべんしてください、googleさん…

f:id:thebaker:20171216071513p:plain

DotfileをGitで管理する

.bashrcやら.vimrcやらを同期するのが面倒なのでgitに入れることにしました。

リポジトリの作成

ここではdotfilesというリポジトリを作成したとします

ファイルの登録

リポジトリに登録したいdotfileを置いてあるサーバにて、

cd
git init
git remote add origin git@github.com:ユーザ名/dotfiles.git
git add .bashrc .bash_profile .vimrc
git commit -m "first commit"
git push origin master

とします

他のサーバでdotfileを取得

既存のファイルの削除

.bashrc、.bash_profile等を退避させておきます:

cd
mkdir dotfile_backup
mv .bashrc dotfile_backup
mv .vimrc dotfile_backup

リポジトリからdotfileを持ってくる

cd
git init
git remote add origin git@github.com:ユーザ名/dotfiles.git
git pull origin master

ソフトウェア・ライセンスについて

どこかわかりやすいページないかな、と思って探していたらありました:

http://jpn.nec.com/oss/osslc/doc/OSC20080913ShimaneBassui.pdf

LGPLって、静的リンクしている場合はリバースエンジニアリングを許可しなければならないんですね…

Git:ブランチ名をコマンドプロンプトに表示する

以下、CentOS7/Amazon Linuxでの例です。

git-completion.bash と git-prompt.bashの入手

cd /tmp
git clone https://github.com/git/git.git

ファイルを設置

sudo mkdir -p /usr/local/git/contrib/completion
cd /tmp/git/contrib/completion
sudo mv * /usr/local/git/contrib/completion

.bashrcにて有効化する

source /usr/local/git/contrib/completion/git-prompt.sh
source /usr/local/git/contrib/completion/git-completion.bash
GIT_PS1_SHOWDIRTYSTATE=true
export PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '

.bashrcの読み込み

source ~/.bashrc

PHP:有効期限付きのURLを作る

とあるプロジェクトで、有効期限付きのURLを作る必要がでてきました。

これまではURLにパラメータを入れて、 そのパラメータと有効期限をデータベースに保存する方法を取っていました:

http://hoge.foo.bar/?expiry=0ddxg9des23A
expiry_string expires
0ddxg9des23A 2018/01/01 23:59:59

さて、データベースを使うのが面倒なのでURLに有効期限を入れてしまうことにしました。 しかしそのままでは有効期限を改ざんされてしまうので、有効期限を暗号化することにしました:

<?php

$now = time();
$expiry_string = $now + (5 * 60);
$password = '適当なパスワード';
$cipher = 'AES-256-ECB';

$encrypted_expiry_string = rawurlencode(openssl_encrypt($expiry_string, $cipher, $password));
?>

あとはこの$encrypted_expiry_stringをURLにつけます。 リクエストを受けたプログラムはそれを復号化します:

<?php

$now = time();

$encrypted_expiry_string = rawurldecode($_GET['encrypted_expiry_string']); // 等々
$expiry = openssl_decrypt($encrypted_expiry_string, $cipher, $password);

if( intval($expiry) < $now ) {
  echo "有効期限が切れています";
}

さて、上記の方式ですが、cipherAES-256-ECBを使っています。メリットとしてIVが必要ない、という点があります。 IVを使った場合、IVをデータベースに保存する必要があり今回の「DBを使わない」という目的から外れてしまいます。

デメリットは有効期限が同じであれば暗号化された有効期限も同一であることです。 このデメリットが許容される用途であるかどうかが重要ですね。

CakePHP3:アップロードのプログレスバー

PHP5.4からは、ファイルアップロード時の進捗を知ることができるようになりました。 CakePHP3でハマったポイントがありましたのでここに列挙します:

セッション管理の方法

app.phpでは、セッション管理の方法を以下の様に指定できます:

    'Session' => [
        'defaults' => 'php',
    ],

ここでdefaultsの値にphpを指定している場合はOKですが、databaseの場合は進捗を取得できません。databaseを使いつつ、進捗を取得するにはおそらく、カスタムのセッションハンドラーを作る必要があります。

php.iniのsession.nameとCakePHPのsession.name

デフォルトでは、php.iniのsession.nameはPHPSESSID、CakePHPCAKEPHPです。 これをどちらかに寄せる必要があります:

CakePHP側をphp.iniに寄せる場合

app.phpを次のように変更します:

    'Session' => [
        'defaults' => 'php',
        'cookie' => 'PHPSESSID' 
    ],

php.iniをCakePHPに寄せる場合

php.iniの設定を次のように変更します:

session.name = CAKEPHP

上記のどれか1つでも抜けていると、$_SESSIONを覗いても進捗に関する変数が入ってない現象が発生します。