なんでタイムスタンプにしねえんだこのやろう part-2

なんでタイムスタンプにしねえんだこのやろう part-1

こんな感じで.net coreで書いてたのだが、もうWindowsのShell参照するならWindows.Formsでいいよね……。(下のはExifではなくファイルのLastWriteTimeを見てリネームしてます)

https://gist.github.com/dobusarai2016/f437d246f185a052a6c7951fd257889c

せっかくなので、後々カスタマイズして使えるレベルのツール作るわ。暇なので。

追記 2020-10-18

ツール作りました。
動画等の”メディアの作成日時”で一括リネームするツールを作りました。

なんでタイムスタンプにしねえんだこのやろう part-1

[GAS] Google Drive File Rename

上でも書いたように、甥っ子の画像/動画ファイルをdriveで共有しているのだけれど、俺の他の人達のファイル名がバッラバラでリネームに苦労している。dropboxさんが"Y-m-d H.i.s.mp4"みたいな良い感じで上げてくれるのでそれに準拠したいのだが、VID000498.mp4みたいにされるとわりとめんどくさくてゲロ吐きそう。画像は自前で書くまでもなく、大抵はRexiferみたいなツールを使えば一瞬なのだが、動画は困った困った。

この"メディアの作成日時"を取りたいのだが、Exifでも無いっぽいし当然ファイルの作成/更新のタイムスタンプではない。それらを取得してリネームするツールもなさそう。Rexiferや古のFlexible Renamerとかも使ってみたが取れない。で、気づいたのだが、Windowsのエクスプローラで取れてんじゃねえか!!!

どうやら、Shell32.dllを使えばいけるらしい。あれれー??.net coreから遠ざかるどころかP/Invokeか?まさかなあ!だるいのにFormデザイナ使わずに、.net coreプロジェクト&&コードビハインドでForm書いたのに?

で、次回に続く。酔ってて眠いから。あと各スマホメーカはカメラのファイル名はタイムスタンプにしやがれくそったれ。ぶちころすぞ。

追記 2020-10-18

ツール作りました。
動画等の”メディアの作成日時”で一括リネームするツールを作りました。

[PHP Phalcon 3.4] メールフォーム作った

https://www.dobusarai.net/contact/

repository https://bitbucket.org/dobusarai/phalcon-micro-mailform/

Phalconは常にToolsのcreate-project --type simpleで作っていたのだが、Controller無しのmicroで今回は書いた。CSRF周りはControllerにあるのだけど、今回はPhalcon\Security\Random()使って自前。問題はないはず。FormActionの隠蔽などもちょっとだけ考えた。

view以外はほとんどここ。
https://bitbucket.org/dobusarai/phalcon-micro-mailform/src/master/app/app.php

一点めんどくさかったのはToolsでの雛形作成で、volt使うって指定しても使わねえでやんの。
※追記 : PhalconToolsのVersion上げれば直ってるのかも

# phalcon create-project hogefuga --type=micro --template-engine=volt

serviceのviewの部分でregisterEnginesを追記する。
https://bitbucket.org/dobusarai/phalcon-micro-mailform/src/master/app/config/services.php

/**
 * Sets the view component
 */
$di->setShared('view', function () {
    $config = $this->getConfig();
    $view = new View();
    $view->setViewsDir($config->application->viewsDir);
    // use volt engine
    $view->registerEngines([
        '.volt' => function($view){
            $config = $this->getConfig();
            $volt = new VoltEngine($view, $this);
            $volt->setOptions([
                'compiledPath' => $config->application->cacheDir,
                'compiledSeparator' => '_',
                'compileAlways' => false
            ]);
            return $volt;
        }
    ]);
    return $view;
});

[.net framework] Pasori RC-S380でNFCのUID読み取り

※タイトルを修正しました。IDmはTYPE-F(Felica)でTYPE-AはUIDという名称のようです。

PCSC-sharp(winscard.dllのC#ラッパー)を使います。PCSC, PCSC.Iso7816をNuGetでゲット。ボタンを押して読み取る、みたいなサンプルが多く転がっているが、常に待機していてカードをかざしたときに取得するようにした。Monitorを使えば容易に実装が可能だ。例によって例外、破棄については適当。

https://gist.github.com/dobusarai2016/fe92058bef3581bcdd3da1d64ea8cce9

※IDは一部変えてます

ex) https://github.com/danm-de/pcsc-sharp/blob/master/Examples/MonitorReaderEvents/Program.cs
ex) https://qiita.com/mindwood/items/103fc0fb52bca7773e47

それでも俺はアフィに抗ってみせる

chromiumが拡張API(主に広告ブロック関連)を制限する云々というニュースが流れたので、某巨大掲示板のアフィ嫌いたちが大騒ぎしていた。いやいや、そうはいってもBraveだってあるしねぇ……とか、まあ大丈夫だと考えている(*1)のだけど、chromium使って自前でアドブロックしちゃえばいいんじゃね?と思いついたので。

ベースとなるソースは過去のエントリから。
https://www.dobusarai.net/blog/chromium-web-browser2019/

            backGroundPanel.Controls.Add(chromium);
            chromium.Dock = DockStyle.Fill;
            chromium.LoadingStateChanged += Chromium_LoadingStateChanged;
            chromium.LoadError += Chromium_LoadError;
            chromium.FrameLoadEnd += Chromium_FrameLoadEnd; // これ追加
        }

        private async void Chromium_FrameLoadEnd(object sender, CefSharp.FrameLoadEndEventArgs e) {
            // LoadStringForUrlが走るとここのChromium_FrameLoadEndも走って無限ループ
            // LoadStringForUrlの場合、HttpStatusCode=0なのでそれ以外で下記を実行
            if (e.HttpStatusCode != 0) {
                var source = "";
                await chromium.GetBrowser().MainFrame.GetSourceAsync().ContinueWith(
                    task => {
                        source = task.Result.ToString();
                    }
                );
                source = source.Replace("//affiliate.url.com/", "//127.0.0.1/");
                chromium.GetBrowser().MainFrame.LoadStringForUrl(source, e.Url);
            }
        }

ex) http://cefsharp.github.io/api/57.0.0/html/M_CefSharp_IFrame_LoadStringForUrl.htm

*1
まあAdGuardの有料垢持ってるのでいざとなったらデスクトップでも使うだけだしなー。というかこんなブラウザ作るよりもローカルプロキシ鯖作ったほうがパフォーマンスは良いのかな。その時はその時試すわー。