それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

マネックス証券のパスワードは8−10文字

IPOくじにチャレンジするためにマネックスの講座を復活させた。

口座を作ろうとしたら、すでに登録済みだった。休眠してた。

パスワードが10文字まで?

マネックス証券のアカウントを発掘したので、パスワード再発行させていただいた。

パスワードは8−10文字まで

最大文字数に制限があるのは、とても怖い。ハッシュ化せずに保存してるのではないだろうか。文字列長に制限があるというのは、DBのカラムのvarchar の制限を受けている可能性が考えられる。

f:id:takuya_1st:20180611191740p:plain

ログインIDは、顧客コード

顧客コードは公開情報なので、公開情報でログインIDの憶測が可能になるので嫌。

f:id:takuya_1st:20180611192707p:plain

うーん

あんまり近寄らんとこ。

input type=hidden の値が変わったら通知したい。

JSをデバッグしててhiddenがどこから更新されてるのか知りたかった。

ある操作をしたら、input[type=hidden] が書き換わるので、そのJSを特定しようと頑張ろうとした。

めっちゃめんどくさい。hidden には onchangeイベントが発火しないんですよ。

MutationObserverを使うとできるんです。

var observer = new MutationObserver(function (MutationRecords, MutationObserver) {
  debugger;
});

observer.observe(document.querySelector("input[type='hidden]"), {
  childList: false,
});

これで監視はできるんだけど、面倒なので input[type=hidden] を input[type=text]にして、display:none にしたほうが早い。そりゃそうだよね。ってすごく納得した。

参考資料

INPUT要素でtype属性がhiddenの要素のvalue値に変更があったらchangeイベントを発火させる - babu_babu_babooのごみ箱

printf で左寄せ

printfで文字列の左詰めをやる

意外に忘れているので、メモ

printf で文字列を右余白の左寄せをやろうとおもったらこれ

マイナスをつけたら左に寄ります。

%-5s

例 シェルでやるばあい

takuya@Desktop$ printf "%-5s\n" a ab abc
a
ab
abc

ruby でやるばあい

>> %w/a aaa aaaa/.each{|e|  printf "%-5s--\n", e  }
a    --
aaa  --
aaaa --

printf 便利ですねー

MacのicloudキーチェインとSafariのキーチェインは別物だった。

Mac のキーチェインiCloud項目

Macのキーチェイン・アクセスにはiCloudの項目があって、これが同期されていて、別のMacにAppleIDでログインしたら使えるんだけど。

ScrenCaptured 2018-06-08 13.47.53

iOSMac Safari でパスワードがどうも使えない。

同期したはずなのに、パスワードがどうも使えない。パスワードが補完されない。 とても不便でアレコレ試していたけど分からなかった。

Appleサポートにもキーチェインが同期されないと聞いてみたけど、徒労だったんですね。

Mac Safari のパスワード管理は別物だった。

ふとSafariを見ていて気づいたのですが、MacSafariのパスワード管理は、OSのキーチェインとは全く別の管理のものが存在していた。

何言ってるかわからないだろう。僕も最初これがなになんのか分からなかった。

Safari が管理しているパスワード。

Safariの設定で、パスワードのタブを開くとパスワードが出てくる。これがSafariが管理しているパスワード。

f:id:takuya_1st:20180608134628j:plain

iOSSafariに同期されるのはどうやらこいつ。

MacのキーチェインのiCloudの項目にパスワードを突っ込んでもだめだったんですね。

いや、本当に驚いたというか、そりゃパスワードが同期されないわとおもった。 いつからなんだろうか・・・

iOS / macOS は別物

2つのOSは本当に別物というか、iCloudキーチェインですら別物だったとは・・・これは気づかない。

データ同期すらべつの領域だったんですね。iOSとの融合とかどうでもいいから、パスワードとか一番使うものととっとと融合してほしいわ。

原因はわかった、でもどうすれば、Macの大量のパスワードをiOSに持っていけるのだろうか

りそな銀行のセキュリティ喚起のメールが異次元すぎて悲嘆した。

りそな銀行からメールが来た。

りそな銀行からメールが来たので開いた。

パスワードをブラウザに保存しないでください

f:id:takuya_1st:20180607184145p:plain:w250

ブラウザにパスワードを保存すると、危険です。

えっと、覚えやすいパスワードのほうがずっと危険ですよね?

記憶より、外付け記録ですよ。

ウイルスに感染すると保存したパスワードが流出します。

f:id:takuya_1st:20180607184149p:plain:w250

マルウェアに感染してたら、それ、もう保存云々関係ないから!!!

マルウェアによるパスワード漏洩が、保存済みパスワードに対する攻撃だけだと、妙な誤解を与えるのはセキュリティ意識の啓蒙として酷いですよこれ。

読み進める。

読み進めると、更に驚く。 f:id:takuya_1st:20180607184155p:plain:w250

危険なのでキャリアメールを使え。

この会社大丈夫なの?

f:id:takuya_1st:20180607184159p:plain:w250

いまどきキャリアメール推奨ですか???

携帯スマートフォンのキャリアメールを使ってください。

え・・・ちょっと・・・ないわ・・・

f:id:takuya_1st:20180607184203p:plain:w250

WEBメールは危険。

ここは、2000年のインターネットでつか?

りそな銀行的にはGmailiCloudメールもLive.comもだめなんですかwww

f:id:takuya_1st:20180607184206p:plain:w250

何が言いたいんだろう。

ちゃんと注意喚起してるから、うちには責任はないですよ。と言いたんでしょうか。

訳がわからない。

暗号化通信に微塵も言及しない注意喚起メールってあまりにひどいから笑うしか無い。

極めつけは、

このメールは冒頭と末尾がさぁ。

「このメール、非配信登録のお客様にも送付しております。」 「なお、お知らせメールが不要なときは、登録解除してください。」

どうしろと・・・どこが重要な内容なんですかね。

f:id:takuya_1st:20180607184140p:plain:w250

パスワードは自動保存でいいよ。

見ながら入力できる程度のシンプルな文字列にしろっていうのか? 記憶できるパスワードは使い回しの危険性も高い。

パスワード最大12文字に制限してるりそな銀行はさすがですね。

前回の件といい、この会社は、パスワードをハッシュ化してない気がする。

全文です。

メールの全文を掲載しておきます。ひどい。

f:id:takuya_1st:20180607185347p:plain

三井住友VISAの利用明細を郵送に切り替えても追加料金無しだった話。

三井住友VisaカードのWEB明細がクソすぎる。

WEBでの明細というのは、どうしてめんどくせええんだろう。疑問に思います。

明細は、郵送であればパパッと見られるのに、WEBで閲覧しようとしたら、途端にめんどくさくなるのはなんでなんでしょう?

WEBで閲覧する利用明細が面倒なので郵送にすることにした。

登録解除画面で、脅された

郵送にすることにして、WEBから郵送をに切り替えようとしたら、次のように、脅された

f:id:takuya_1st:20180607181721p:plain

割引なくなるよ!!!って脅してくるの。

でもまって、Amazonのカードは年会費無料じゃん?

年会費無料のカードで年会費がかかるって訳がわからない。

問い合わせた。

年会費無料のカードに、年会費がかかるってどういうことなんでしょうか?
年会費は発生していて、割引が適用されているってことなんでしょうか?
であれば、年会費無料の表示は不当表示ですよね。実質無料と書くべきでしょ?

ちなみに、電話料金はこっち持ちですよ。

回答をもらった。

個人情報の確認などで、待たされること10分程度、回答を頂くことができた。

お客様のAmazon カードは、年会費無料のカードであるために、郵送に切り替えても優遇がなくなるわけではありません
郵送に切り替えることで料金は発生しません。

驚いた。

表示されていた文言をもう一度見てみよう

f:id:takuya_1st:20180607182705p:plain

僕は何に同意すればいいのでしょうか

本当にアホらしい。

解除した。

WEB明細の利用を停止し、郵送にすることにし、WEBから所定の手続きで申し込みました。

完了画面で驚愕した!

申込みの完了の画面の表示を見て飛び上がった。

解除後もWEB明細はご利用いただけます。

f:id:takuya_1st:20180607182204p:plain

は?なにこれ?

警告画面は何だったんだ。

実際には、追加料金はかからない(誤認)さらに封書で利用明細書を配達を受けても、WEBは継続して利用できる。

会社の都合が全面に出てきててマジ参った。

三井住友Visaはどうなってんの

WEB明細をほぼデフォルトで強制してくるのは完全に向こうの都合じゃん。

ログインがだるすぎていらないんですよ。WEB明細。

絵合わせ認証がだるい

ブラウザからクッキーが消えると絵合わせ認証になる。すごく不便。

f:id:takuya_1st:20180607181129p:plain:w300

職業柄ブラウザのCookieを消去とかわりと気軽にやっちゃうので、ブラウザの永続Cookieで認証されるのはうざいの一言です。

絵合わせ認証は認証ですらないし、ボット避けなら別の方法があるし、ブルートフォースやリバースブルートフォースを警戒するなら、別の手段もあると思うんですね。

愚痴

リスクベース認証というのであれば、「設定変更」(Write)と「閲覧」(Read)をベースをにリスクを分けるのが筋ってもんでしょ。

  • 絵合わせ認証とかいう謎認証
  • ブラウザのクッキーを消せない問題。
  • スクレーパーがめんどくさくなった。

ログインがめんどくさくなりすぎて本当にアホらしい。スクレーパーもめんどくさくなりすぎ。明細系のアプリでも初期設定がめんどくさい。

「紙見たら済む話」を「わざわざ見に行って」取得するというのがわからん。

パスワードを入れてるなら、メールで暗号化PDFを送ってきて、そのPDFのパスワードを取得するためのログインならまだわかるって話だよ。

今回解除したカード

以上2枚のカードのWEB明細を解除して郵送にすることができました。

クレカの明細を郵送にしてもネットで見れるので皆さんも試してみては?

 関連URL

これが今回の問題のページです。

phpstormでSCSSを自動的にトランスパイルする。

css を作成するのに、scss をコンパイル

gulp のタスクとか、python の filewatcherとかでやってたんだけど、いい加減に限界だし、codekit も買ってみたんだけど、なんかめんどくさい。

ふと、Jetbrains の製品ならできるだろうと思ったけど、調べるのがめんどくさいので、やってなかった。

ざっくりやったので、あとで見直すためにメモをとる。

設定方法

プロジェクトの設定( phpstorm にはプロジェクトごとの設定がないので、設定を開くとプロジェクトごとの部分はプロジェクト毎になる。)

設定画面から、file watcher を探してscssのWatcherを追加

f:id:takuya_1st:20180606213122p:plain

設定に項目が追加されたら、ファイル名を指定する。

わたしの場合、assets/style.scss でインポートするように書いているので、 assets/style.scssstyle.css style.css.map に展開するように設定を書いた。

f:id:takuya_1st:20180606213607p:plain

ファイル名やパスが解らない場合は

コンソールに常に出力するようにし、STDOUTをアウトプットするようにした。とりあえず設定中はチェックオンにした。

f:id:takuya_1st:20180606213758p:plain

正常に出力できたら

設定のチェックをを外した。 auto save (自動保存)で File Watcher のジョブをキックするかは迷ったけど、とりあえずオンで。

f:id:takuya_1st:20180606214013p:plain

あ、これ便利。

設定してみて思ったんだけど、これ便利だわ。外部のgulpタスクをいつも内蔵ターミナルで起動してた手間がなくなった。

ほかに、babel ができたり、任意のコマンドに対応しているので、ファイルが更新されたら即時 rsync 起動とかできて便利になるかもしれない。

ちなみに、Vscode でもできそう

visual studio codeにもtask があって同じようなことができそう。

https://code.visualstudio.com/docs/editor/tasks

参考資料

http://www.webopixel.net/develop/860.html

Macのコマンドでスクリーンセーバー・画面ロック・画面オフ

2019-05-08 追記

macOS Sierra からのロック画面のキーボードショートカットは次の通り。

Command - Ctrl - Q
Command - Shift - EJECT
Command - Shift - Power

これだけ。Windowsみたいに離席する前にCommand-Ctrl-Q

Macで画面オフのショートカットが欲しい。

Windowsと違って、Macで困るのは、 Win-L のキーボードショートカットが無い所

ちょっと離席するときにMacを弄くられてデスクトップの背景をアニメ絵に変えられたり、妙なTweetを投稿されないようにしたい。

本当はTouchID があればいいんだけどね。

Macをロックする方法

画面をロック(ログイン画面にする)方法は大きくわけて3つ在る。

  1. 画面オフ・スクリーンセーバー起動時に画面ロック設定を環境設定でチェックする
  2. ユーザー切替を使ってログインスクリーンを表示
  3. Keychains.app を使って画面をロックする

手軽なのは1でしょうかね。ただプレゼン中にスクリーンセーバーになって画面ロックされるのは割と面倒くさいので、わたしは2/3の方法を取りたいと思ってた。

どの方法を選んでも画面ロックをしてパスワード入力が必要にすることが出来るので、これらを起動するコマンドをしっておけば、あとはキーボードショートカットを割当てたりロックコマンドを作ったりAppをつくってSpotlightから呼び出せるよね。

これらのそれぞれの方法を見ていきましょう。

1. 画面オフ・スクリーンセーバーを使った画面オフ

画面オフ・スクリーンセーバーが起動したら、ロックを掛ける。

f:id:takuya_1st:20180518093643p:plain:w200

この設定を行った上で、コマンドラインから、スクリーンセーバーを起動するか、画面をオフにする。

1.1 スクリーンセーバーを起動する

コマンドラインでターミナルから、スクリーンセーバーを起動するには、 ScreenSaver のフレームワークの中にあるバイナリを実行する。

/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine

または  open で  ScreenSaverEngine.app を起動する。

open  /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app

1.2 画面をオフにする

ディスプレイの電源OFFを起動する方法は、次の通り pmset は power management settgins の略だと思う。

pmset displaysleepnow

またはFinderにスリープを実行させる。

osascript -e 'tell application "Finder" to sleep'

 2. ユーザー切替を使ってログインスクリーンを表示

ユーザーの切替を使う方法。

メニューバーの右上にある、「ログインウィンドウ」を使って、ロックをする。 この場合のデメリットは、ユーザー名を再度入力が必要になる点だ。

f:id:takuya_1st:20180606103835p:plain:w300

コマンドラインからは次のようにする。

/System/Library/CoreServices/Menu\ Extras/User.menu/Contents/Resources/CGSession -suspend

長いので alias でもしとけばいいかと。

環境設定 と併せて使う必要がある(スクリーンセーバー・画面オフ)

これらスクリーンセーバーと画面オフと使った場合、画面ロックを使うには環境設定で設定が必要

f:id:takuya_1st:20180518093643p:plain:w200

スクリーンセーバーの解除時に画面ロックをするのオプションを使わないといけないのが少しめんどくさい。 冒頭にも書きましたが、ログイン関連でロックするには、環境設定が必要になる。

3. Keychains.app を使って画面をロックする

キーチェーンには、画面ロックするメニューが用意されているので、コレを使えばロックを掛けることが出来る。

f:id:takuya_1st:20180518095034p:plain

このメニューバーのメニューを起動してあげればいい。 起動する方法はいくつか在るが、Foundation を使ってパパっとPerformSelectorを実行すればいい。

キーチェーンを使う方法。

キーチェーンの機能を使うと、ダイレクトに画面ロックを起動できるから便利。

キーチェインでロックすることができる。キーチェインのボタンを押せば良いんだから、 キーチェーンの参照を取ってきて、performSelector して押すだけ。

キーチェインに該当メニューがないときは、keychains.appの設定でメニューバーに表示するように設定しておけばいい。

事前設定

f:id:takuya_1st:20180518095838p:plain:w200

performSelector する場合

lockscreen のコマンドをつくった

lockscreen を起動する。

lockscreen-macos/main.m at master · takuya/lockscreen-macos · GitHub

#import <Foundation/Foundation.h>

int main() {
  @autoreleasepool {

    NSBundle *bnd = [NSBundle bundleWithPath:@"/Applications/Utilities/Keychain Access.app/Contents/Resources/Keychain.menu"];

    Class pc = [bnd principalClass];
    id k = [[pc alloc]init];

    [k performSelector:@selector(_lockScreenMenuHit:) withObject:NULL];
  }
  return 0;
}

lockscreen-macos/main.m at master · takuya/lockscreen-macos · GitHub

コンパイルしておけばSpotLightから呼び出せる。

作ってコンパイルした実行ファイルを適当なところに置いてSpotlightで起動すれば、手軽に画面のロックが出来るので楽。本当に楽。これで捗る

この方法が不便なのは事前に、キーチェーン設定でメニューバーに表示しておく必要が在る点だけ。

f:id:takuya_1st:20180518095727p:plain

f:id:takuya_1st:20180518095727p:plain:w200

組み合わせて離席用に

画面ロックとディスプレイをオフを組み合わせてコマンドにしてもいいよね。

画面をスリープさせるだけのコマンド sleep display をコマンドにして

#!/bin/sh

exec pmset displaysleepnow

画面ロックするだけのコマンド lock screeenとを組み合わせておけば、使い分けも簡単。SpotLightでできる。

#!/usr/bin/env bash


sleep_display_power_off
lockscreen

f:id:takuya_1st:20180812123048p:plain:w240

まとめ

  • スクリーンセーバー
  • 画面オフ      - 事前設定が必要      - プレゼン中や作業中に画面オフになったりすると面倒くさい。
  • ユーザーの切替
    • 環境設定が必要
    • 再ログイン時にユーザー名入力(選択)からになるのが面倒くさい。
  • キーチェーン
    • キーチェーンをメニューバーに表示する必要がある。

スクリーンセーバーと画面オフの使用頻度にも依るのですが、いくつか選択肢があって好きな方法を選べるのが嬉しい。

あとはどの方法でも好きなものをキーボードショートカットに割り当ててしまえばWin-Lのような使い方が出来る

画面オフは「パワーボタン押す」なので、強い意味のパワーオフでCtrl-Shift-パワーとかでしょうかね。

次に調べること

ユーザー切替のログインスクリーンを表示するをCLIで起動する方法。 pmset はオモシロそうなので全部のコマンドを試したい。

2018-08-12追加

lockscreen で検索にマッチしなかったのでキーワード追加。最近のGoogleはほんとに。。。

参考資料

https://apple.stackexchange.com/questions/80058/lock-screen-command-one-liner

ゴミ箱を空にするのをコマンドから呼び出す。

Mac の「ゴミ箱を空にする」をコマンドからやる

ゴミ箱を空にするをコマンドからやろうと思って、AppleのDeveloperサイト読んでたけど、それっぽいのはないので、シェル経由でこのコマンドで解決。

find ~/.Trash -mindepth 1 -delete 

単純に ~/.Trash の中身を削除すればいいみたい。

確実にゴミ箱を消す srm

srm と組み合わせて、確実にゴミ箱から消すを選ぶこともできるけど、SSD搭載のMacBookだとほぼ意味がない。

find ~/.Trash -mindepth 1 -exec srm {}\;

srm コマンドあったの忘れてたわ。

brew cask install で vscodeが見つからない。

vscode 入れようとしたらNot Found

takuya@$ brew cask search vscode
No Cask found for "vscode".

ありゃ・・・?macbrew cask って VSCODE がないんかな?

とおもったら、名前が違っただけだった。 visual-studio-code でいれるんですね

takuya@$brew  cask install visual-studio-code
==> Satisfying dependencies
==> Downloading https://az764295.vo.msecnd.net/stable/d0182c3417d225529c6d5ad24b7572815d0de9ac/VSCode-darwin-stable.zip
######################################################################## 100.0%
==> Verifying checksum for Cask visual-studio-code
==> Installing Cask visual-studio-code
==> Purging files for version 1.23.1,d0182c3417d225529c6d5ad24b7572815d0de9ac of Cask visual-studio-code
Error: It seems there is already an App at '/Applications/Visual Studio Code.app'.

参考資料

https://github.com/Microsoft/vscode/issues/40066

unarが Uncaught exception NO Character Conversion Exception

unar をシェルコマンド経由で自動実行してたらエラーになった

unar: Uncaught exception NO Character Conversion Exception
Unar Can't get cString from Unicode string

などとエラーになる。

調べてみたら LANGが無いことが原因だった。 LANG=c の状態でzipファイルの中に日本語ファイルがあると変換できないっぽいね

LANG=ja_JP.UTF-8 unar -o /tmp sample.zip

のように、LANG環境変数をつけたらわりとすんなり動くので嬉しい。

手早くランダムな文字列を作成する

簡単に衝突しないような文字列をつくってファイルを保存するようなことをしたい。

OpenSSLを使えば割と楽

require 'openssl'
str =  [OpenSSL::Random.random_bytes(12)].pack("m*").delete("\n")
puts str

ワンライナー

ruby -r openssl -e 'print [OpenSSL::Random.random_bytes(12)].pack("m*")'

パスワードに使えるのか?

ある程度はランダムな数字の配列をBase64にしているので、Base640-9,a-z,A-Z,+/なので + / がパスワードとして嫌われそうで面倒くさい。 (とうぜん使えるべきなんですがね)

Base64化のアルファベットのした文字出現頻度に偏りがなければ大丈夫なのですが、単なる符号化だしほぼランダムだと思う。

記号を置換すれば、使いやすくなるかも?

takuya@untitled$ ruby -r openssl -e 'print [OpenSSL::Random.random_bytes(12)].pack("m*").tr("+/","-_")'

ループして作ってみる

takuya@untitled$ for i in {1..3};
do
  ruby -r openssl -e 'print [OpenSSL::Random.random_bytes(12)].pack("m*").tr("+/","-_")' 
done
NTJ0XFAlWCcwZsiG
5M5UGQQikFE0TVNh
i9mq-nbxfI7mS3pJ

まぁこの手法は require "securerandom" が内部やってる処理とほとんど同じなんだけどね・・・

dockerでターミナルが変な折り返しで辛い現象を何とか解決する

docker でターミナルの折返しがキツイ

Dockerでbash などの ttyで接続すると、横幅サイズがおかしくなるとの、折返し時に、妙なイチに折り返すのでキツイ。

github のissue スレ見てるとエラーの原因は docker exec -it を実行したときに、 /exec/${EXEC-ID}/resize" が実行されないことにあるらしい

折り返しがおかしくなる例

f:id:takuya_1st:20180524170711p:plain

幅がおかしくなる例

f:id:takuya_1st:20180524170546p:plain

折り返すのがおかしくなるのは、linesが合わないことに依るもので、幅がおかしくなるのはcolsが合わないことによる。

そのうち解決されるんだろうけど

いずれバブフィックスで治りそうだけど、いま辛い。

とりあえず治す方法

docker exec -e COLUMNS=$(tput cols) -e LINES=$(tput lines) -it CONTAINER_ID bash

MySQL などのコマンドも同じく

docker exec -e COLUMNS=$(tput cols) -e LINES=$(tput lines) -it CONTAINER_ID mysql -p -u MYSQL_USER DATABASE

docker側の問題で利用者の私達に環境が原因ということでもなく、 bash を割当てている tty に設定が届かないことによるので、環境変数で明示的に設定してまえば、何とか回避することが出来る。

dockerfile の環境変数bash起動時になにか実行することで解決もできそうだけど、dockerfile や環境変数をすべてのインスタンスに書くのは現実的じゃないので、exec 実行時にフィッティングするのが妥協点っぽい

解決した

とりあえず解決する。

f:id:takuya_1st:20180524172308p:plain

これでしばらくは戦える。

サイズは sttyかtput で確認ができる。

stty をつかうか、 tput を使うことで、現在開いているターミナルのサイズをしって、ソレを使うことが出来る。

takuya@sakura:~$ tput  lines
52
takuya@sakura:~$ stty size
52 180
takuya@sakura:~$ tput cols
180
takuya@sakura:~$ tput lines
52

参考資料

https://github.com/moby/moby/issues/35407

GitLabのIssueで作業時間の記録がとても楽だった

gitlab のコメントに spend と書けばいい。

/spend 1h

とか書くと、次のように、作業時間が記録される。 /estimate だと見積もり時間も併せて保存できる

実際に作業時間を記録した例。

f:id:takuya_1st:20180516005640p:plain

仕事に掛けた時間がわかる。

タイムトラッキングを使うことで、課題管理を中心にしてどれくらいの時間をコードに費やしたか解るようになってて便利。

GitLabの課題管理は最強では

コミット後に時間を記録

コミットを中心としたワークフローが割と便利なのです。gitlab がタスク管理として最適になってた。

  • まずイシュー挙げて
  • そこから作業開始して何処までやったをメモする。
  • 作業内容をコミットし
  • コミット・メッセージにIssue番号を紐付ける。
  • 最後にissueに時間を書く

シンプルで、割と導入に負荷もかけず、簡単にタイムマネジメントとタイムボックスで仕事ができる。

完了報告メールなども特に必要なく、関係者がissueをサブスクライブしておけば、購読者にメールが行くので、「○○ができました」とか無駄なメールを作成する時間が無くなるし、自動メールと通知で済むので、「メールの江戸しぐさ」も気にしなくていい。

これは便利なんじゃないのか。

参考資料

brew で php のインストール(homebrew/php/喪失以降)とモジュール(xdebug)のインストール

phpbrew で入れようとしたら、エラー

Homebrew/php (deprecated)

です。

f:id:takuya_1st:20180513170025p:plain:w300

世の中の brew install で書かれた意識高いPHP'erのゴミ記事が役に立たなくなりました。

どうするのか?

php はtapから本家に戻りました。なので、以下の通りで十分です。

brew install php 
brew install php71

extensionどうするのか?

PECL 使います。

プレビルド版はなくなりました。php利用者層を考えるとバッドな感じはあるけど、仕方ないですね。

brew install php 
hash -r 
pecl install xdebug

beta 版の利用などは、suffix を付けて対応します。

pecl install gmagick # stable が無いのでエラー
pecl install gmagick-beta

pecl なんて懐かしいな。長いこと使ってないや。

pecl install は

php.ini を直接書き換えてしまうようなので注意が必要

pecl でいれた モジュールの有効化には、conf.d を使いたいのですが、なぜか php.iniを書き換えくれるので、

vim /usr/local/etc/php/7.2/php.ini # pecl が書き換えた extension を削除

extensionsを conf.d に記述

conf.d にモジュールのロード記述を描くといい。

/usr/local/etc/php/7.2/conf.d/ext-gmagick.ini
/usr/local/etc/php/7.2/conf.d/ext-xdebug.ini

brew で入れたphpの場合にエクステンションのパスを記述するとき、 バージョンの枝番(7.2.9 の場合 9 ) を入れてしまうと、頻繁なアップデートで最小バージョンが合わなくなってファイルの読み込みに苦労する。

そこで次のように記述する

[xdebug]
zend_extension="/usr/local/lib/php/pecl/20170718/xdebug.so"

よく無い記述の例

[gmagick]
zend_extension="/usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so" # 7.2.5 → 7.2.6になるだけでエラー

好ましい書き方の例

こう書くのがベター

[gmagick]
zend_extension="/usr/local/lib/php/pecl/20170718/gmagick.so"

zend apiバージョンは半年くらい変わらないので brew upgrade で 7.2.7 → 7.2.8 とかにマイナーバージョンの更新があった時でも特に問題なく設定が維持される。

iniファイルの書き換えをやらないとエラー

このように、同じエラーが2回出てきているときは、extensionの記述が2回あるということです。

takuya@conf.d$ php =v
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so' (tried: 
/usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so (dlopen(/usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so, 9): image not found), 
/usr/local/Cellar/php/7.2.9_1/lib/php/20170718//usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so.so 
(dlopen(/usr/local/Cellar/php/7.2.9_1/lib/php/20170718//usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so.so, 9): image not found))
in Unknown on line 0

Warning: PHP Startup: Unable to load dynamic library '/usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so' (tried: 
/usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so (dlopen(/usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so, 9): image not found), 
/usr/local/Cellar/php/7.2.9_1/lib/php/20170718//usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so.so 
(dlopen(/usr/local/Cellar/php/7.2.9_1/lib/php/20170718//usr/local/Cellar/php/7.2.5/pecl/20170718/gmagick.so.so, 9): image not found)) 
in Unknown on line 0

困る人は

phpenv の利用を考えたほうが良いのではないでしょうか。

参考資料

https://github.com/Homebrew/homebrew-php