sedコマンドで置換する際に複数の処理を追加する方法

sedコマンドの-eオプションでパターンを流すことでログの文字列を置換することができるが、-eオプションを指定することで複数のパターンを同時に置換できる。1行のログに対して二種類の置換をかけたい場合に有効。ちなみに試しに実行してみたらhoge1という置換が行われてからhoge2という置換が行われるようだ。左側から実行されるのかな。

cat hoge.log | sed -e 's/pattern1/hoge1/g' -e 's/pattern2/hoge2/g'

Ubuntuでsarコマンドを使えるようにする

インストール

sudo apt install sysstat

初回実行してもこのままでは利用できない

sar -b
Cannot open /var/log/sysstat/sa18: No such file or directory
Please check if data collecting is enabled

sudo vi /etc/default/sysstatで有効化をします。

ENABLED="true"

その後しばらくしてからもう一度実行してみると。

$ sar -b
Linux 4.4.0-97-generic (ubuntu-xenial)  10/18/2017  _x86_64_    (2 CPU)
01:35:01 AM       tps      rtps      wtps   bread/s   bwrtn/s
01:45:01 AM      0.03      0.00      0.03      0.00      0.51
01:55:01 AM      0.02      0.00      0.02      0.00      0.35
02:05:01 AM      0.03      0.00      0.03      0.00      0.43
02:15:01 AM      0.03      0.00      0.03      0.00      0.40
02:25:01 AM      0.04      0.00      0.04      0.00      0.59

出るようになりました。

参考

http://y0m0r.hateblo.jp/entry/20130207/1360243853

Kotlin 1.1.50のビルドでBUILD FAILEDになる不具合の対応

Gradleのバージョンが3.2.1でKotlin 1.1.50のプロジェクトのビルドでBUILD FAILEDになる。エラーは下記のようになっている。

$ gradle build
Parallel execution with configuration on demand is an incubating feature.
:jk:compileKotlin
:processResources UP-TO-DATE
:processTestResources UP-TO-DATE
Using Kotlin incremental compilation
e: java.lang.NoSuchMethodError: kotlin.reflect.jvm.internal.KClassImpl.getData()Lkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;

Kotlin Discussionsによるとコンパイラはkotlin-reflectを使っているそうで上記のエラーが出ている。Gradleのバージョンを上げることで解決するそうです。

私はGradleをHomebrewでインストールしていたので、下記のようにしてGradleのバージョンを上げることでビルドに成功しました。

brew update
brew upgrade gradle

Symfony3でSoftDeleteableを一時的に無効にする

Symfony3にはSoftDeleteableという論理削除機能があります。指定したフィールドがnullで削除していないとし、nullでなければ削除したとして扱ってくれますので、オペレーションミスによってデータが消えても復元可能にできるわけです。

ただし、管理者側ではデータを完全削除したい場合があります。この時だけはSoftDeleteableを無効にして論理的に削除されているレコードも表示して選択的に削除させたいです。

Symfony3はこういったケースにも対応することができます。

$em = $this->getDoctrine()->getManager();
$em->getFilters()->disable('softdeleteable');
$itemRepository = $this->getDoctrine()->getRepository('AppBundle:Item');
$items = $itemRepository->getItem($tag);

最初このdisableの所にsoft-deleteableって書いたら以下のようなエラーが出てしまいました。

{"code":500,"message":"Filter 'soft-deleteable' is not enabled."}

Symfony2の時の書き方なのかな?以下のページのおかげで助かりました。
https://github.com/Atlantic18/DoctrineExtensions/issues/1159

JavaScriptで親子要素間でイベント発生順序を制御する

addEventListenerの第三引数にはuseCaptureという引数がありまして、こいつはデフォルトではfalseで、falseの場合は子から順にイベントが実行される。こいつがtrueになると親から順に実行される。useCaptureについて深く理解せずにデフォルト値を採用して今まで書いていたので、イベントとは子から必ず実行されると思っていたが誤りだった。

今回は既にあるコードでtrueが指定してあり、追加子要素に同様のイベントを付与しても動作しなかった(親が動作をキャンセルしていた)事によって気付いた。

参考