tohokuaikiのチラシの裏

技術的ネタとか。

Gitの差分ファイルを削除リスト込みで取得する(WindowsのSourceTree)

既に9年前のエントリーになってしまっていたこれ… tohokuaiki.hateblo.jp

SourceTreeからカスタムアクションで使いたいなと思い、WindowsのBatファイル化できないかと思った。あ、PowerShellの場合は.ps1だっけ? SourceTreeでコミット間の差分ファイル一覧をテキストファイルに出力する方法 - Qiita

スクリプトの作成

ところが、SourceTreeには自前でbashが使えるので結局Shellファイルにした。 リポジトリのルートから

/usr/bin/bash get_gitdiff.sh <from-commit-id> <to-commit-id>

という感じで実行するイメージ。

get_gitdiff.shをこんな感じで作る。

ARCHIVE_INFO_FILE=archive_info.txt
DELETE_FILES_INFO=deleted_files.txt
T_TIME=`date "+%Y%m%d_%H%M%S"`
T_DAY=`date "+%Y%m%d"`

# $1に新しい方、$2に古い方のハッシュ
if [ $# -ne 2 ]; then
    echo "引数が不正です。コミットは2つ指定してください。" >&2
    exit 1
fi

if [ $1 = "-1" ]; then
    echo "未コミットを指定しないでください。" >&2
    exit 1
fi

# コミット情報の表示
echo "指定したコミット情報" > $ARCHIVE_INFO_FILE
echo "From: [古いコミット]" >> $ARCHIVE_INFO_FILE
git log --format="%cd - %cn<%ce> %s" -n 1 $2 >> $ARCHIVE_INFO_FILE
echo "Until: [新しいコミット]" >> $ARCHIVE_INFO_FILE
git log --format="%cd - %cn<%ce> %s" -n 1 $1 >> $ARCHIVE_INFO_FILE

# 削除したファイルの提示
echo "[削除したファイル]" > $DELETE_FILES_INFO
git diff --diff-filter=D --name-only $2 $1 >> $DELETE_FILES_INFO

# 差分抽出
git archive --prefix=$T_DAY/ $1 `git diff --diff-filter=d --name-only $2 $1` -o archive_$T_TIME.tar
tar -rf archive_$T_TIME.tar $DELETE_FILES_INFO $ARCHIVE_INFO_FILE
gzip archive_$T_TIME.tar
rm $DELETE_FILES_INFO $ARCHIVE_INFO_FILE
exit 0

後で見た時に、どのコミット間の情報かというのをarchive_info.txtに残し、削除したファイルはdeleted_files.txtにまとめて手動で削除してもらう。

これをリポジトリルートにおいておく。

SourceTreeのカスタムアクションに追加

ツール>オプション>カスタム操作
と選択して、「追加」する。

実行するスクリプトは、インストールしたSourceTreeの配下にあるbash
私は自分のユーザーディレクトリに入れたので、C:\Users\xxxx\AppData\Local\Atlassian\SourceTree\git_local\bin\bash.exe だった。

パラメータはこんな感じ

$REPO/get_gitdiff.sh $SHA

f:id:tohokuaiki:20191007130333p:plain

実行

Historyで2つのコミットを選択して右クリックからカスタムアクションで実行。

参考記事

Vagrant上のLaravelをPhpStormでXdebugしたい

…ができない。(2019/10/10できた)

VagrantIPアドレスが192.168.56.125である。OSはDebian GNU/Linux 10

Laravel側

$ php -v
PHP 7.3.4-2 (cli) (built: Apr 13 2019 19:05:48) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.4, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.4-2, Copyright (c) 1999-2018, by Zend Technologies
    with Xdebug v2.7.0RC2, Copyright (c) 2002-2019, by Derick Rethans

で、/etc/php/7.3/cli/conf.d/20-xdebug.ini

zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_host=192.168.56.1
xdebug.remote_port=9002
xdebug.idekey=PHPSTORM

として、

$ ./artisan serve --host=0.0.0.0

しておく。ブラウザでアクセス時に

$ for i in 1 2 3 4 5 6 7 8 9 10 11 12; do netstat -an|grep 9002; sleep 1; done

しておくと、

tcp        0      1 192.168.56.125:54642    192.168.56.1:9002       SYN_SENT
tcp        0      1 192.168.56.125:54652    192.168.56.1:9002       SYN_SENT
tcp        0      1 192.168.56.125:54660    192.168.56.1:9002       SYN_SENT

となって、ホスト側の9002ポートにアクセスしに行っているのが分かる。

PhpStorm側

settingで、Serverはこんな感じ。LドライブはVagrantのsamba共有をネットワークドライブに割り当て。 f:id:tohokuaiki:20190910183241p:plain

Debugはこんな感じ。
f:id:tohokuaiki:20190910183413p:plain

で、Run設定はこんな感じ。 (メニュー) Run > Edit Confirugations...「+」→「PHP Remote Debug」 f:id:tohokuaiki:20190910183654p:plain

ブラウザ側

COOKIEXDEBUG_REMOTE_SESSIONを入れろって言うのと、XDEBUG_SESSIONを入れろって言うのがあって、とりあえず両方を入れてみた。
f:id:tohokuaiki:20190910183806p:plain

…んが、ブレイクポイントを設定してリロードしても何も起きず…

なんでやねん。

追記(2019.10.10)

評価期間が終わったので買うかーとライセンスを買ったらできた。なんの変更も無く…

えー。そうなの?それとも1ヶ月でアップデート来てたから再インストールしたのが原因かしら?

ちなみに、CSSとか読みこむときにいちいち止まってたと思ったら

./artisan serve で起動したやつにつなげてserver.phpの1行目で止まるのでなんぞ―と思ったら

f:id:tohokuaiki:20191011154650p:plain

が不要だった。CSSもなんもかんもserver.phpだもんね。

拍と拍子についてScratchで再現するための知識

拍と拍子についてはよくわかんなかったけど、これが一番分かりやすかった。

拍は、リズムの中に大中小を付けるっていう事ね。 ameblo.jp

で、これをScratchで何秒周期…というのを考えると、楽譜の左上に♪120とかある。これはどういう意味かというと detail.chiebukuro.yahoo.co.jp

ということで、1拍が120分(ぶんの)の1分(ぷん)ということらしい。0.083秒・・・4分音符が0.5秒ね。

千と千尋の神隠しの 「いつも何度でも」は三拍子の歌なんだけど、楽譜を見ると♩120になってる(0.5秒)。実際にScratchでこの拍をとると若干遅い。♩132っていうのもある。(0.45秒)木村弓さんはこのリズムで歌ってる感じ。

Scratchの「〇秒待つ」は小数点以下をどれだけ認識してくれるのか問題

こんな感じで、300回ほどループさせた。 f:id:tohokuaiki:20190902122633p:plain

0.45秒待つ場合だと、300回=300×3×0.45=405秒、0.454545だと、300回=300×3×0.454545=409.0905・・6分の曲で4秒ズレる。

で、色々と数字を比較したところの結論から言うと…

結果
0.44 0.43 遅れ発生
0.451 0.459 同期
0.449 0.451 遅れ発生

ということで、どうも小数点第三位以下は切り捨てているらしい。

LaravelのAuthのURIを変更する。

routes/web.php

<?php
Auth::routes();

って書くと、自動的に

GET|HEAD | login                  | login            | App\Http\Controllers\Auth\LoginController@showLoginForm                | web,guest    |
POST     | login                  |                  | App\Http\Controllers\Auth\LoginController@login                        | web,guest    |
POST     | logout                 | logout           | App\Http\Controllers\Auth\LoginController@logout                       | web          |
POST     | password/email         | password.email   | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail  | web,guest    |
GET|HEAD | password/reset         | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web,guest    |
POST     | password/reset         | password.update  | App\Http\Controllers\Auth\ResetPasswordController@reset                | web,guest    |
GET|HEAD | password/reset/{token} | password.reset   | App\Http\Controllers\Auth\ResetPasswordController@showResetForm        | web,guest    |
GET|HEAD | register               | register         | App\Http\Controllers\Auth\RegisterController@showRegistrationForm      | web,guest    |
POST     | register               |                  | App\Http\Controllers\Auth\RegisterController@register                  | web,guest    |

が登録されるのがあれだなー、/loginじゃなくて、/user/loginとかにしたいなーって思ったときにどうしよう?って思ったんだけど、ひとつづつ

<?php
Route::get('login', 'Auth\LoginController@showLoginForm')->name('login');

とかしていけばいいのか。

いや、prefixを使えばよかっただけだった。

<?php
Route::prefix('admin')->group(function(){
    Auth::routes();
});

で全部adminが付いた。

更に、

<?php
Route::name('admin.')->prefix('admin')->group(function(){
    Auth::routes();
});

でNameにもadmin.がprefixされるようになる。

Confluenceの添付ファイルに擬似的にプロパティを増やす方法

Confluenceの添付ファイルのプロパティありますよね。

f:id:tohokuaiki:20190822120855p:plain

でも、これだと1つだけしか入れられないので

f:id:tohokuaiki:20190822120948p:plain

こんな感じにしたい!っていう要望を受けて簡単にJavaScriptで擬似的にコメント欄に無理やり入れ込んだ。

使い方

gist71f1c384c19ddda6f56250dbaa6c888c

で、これをどっかにアップして・・・まぁ、とりあえずなら
https://gist.githubusercontent.com/tohokuaiki/71f1c384c19ddda6f56250dbaa6c888c/raw/582465e4860a163c44243b81376fae93a90e5ede/confluence-comment-separator.js
を使っても構わないけど、

<script>
var sNew = document.createElement("script");
sNew.async = true;
sNew.src = 'https://gist.githubusercontent.com/tohokuaiki/71f1c384c19ddda6f56250dbaa6c888c/raw/582465e4860a163c44243b81376fae93a90e5ede/confluence-comment-separator.js'
var s0 = document.getElementsByTagName('script')[0];
s0.parentNode.insertBefore(sNew, s0);
</script>

というのを、ConfluenceのカスタムHTMLでヘッダに入れてやると添付ファイルのプロパティページで使用できる。

あ、でも、これConfluenceの6.6で作ったのでうまく動かなかったらセレクタ あたりを変更する必要があるかも。

項目名を変更したい

11行目の、extraAttachComments を変更するとできる。

var extraAttachComments = {
            title: '使用論文名',
            comment: 'コメント',
            url: '論文URL'
          };

のキーを変えなければ、既に登録した後で入力時のラベル名だけを変更することもできる。

理屈

1つあるコメント欄に複数のプロパティを入れてるだけ。表示時と保存時にセパレータである '<:>'と'|+|' で分割・結合してるだけなので、このセパレータが出てくると不具合が起こる。

セパレータを変えたかったら、4行目・5行目を適当に変更する。