Denoばた会議 Monthly 第7回参加メモ

Denoばた会議 Monthly 第7回 - connpass

Permissions オプションの挙動が変更(破壊的変更)

v1.20 から test の permission 絞り込みがちゃんとした。 test の permissions に与えていない permission は無効になった。 今までは与えていなくても、コマンドラインで指定してある permission があれば有効だった。

deno task コマンド

deno.json という設定ファイルがある。 そこへ tasks というプロパティが増えた。 tasks プロパティに shell が書ける。 そこの shell を自前で実装していて、WindowsMacLinux 間の非互換性を吸収する。

ryが不在時に導入が進んでしまい、あまりryは納得していないっぽい。 shellは古い機能なので、web的な何かで実装した方が良いのでは。

deno bench コマンド

ベンチマークを実行してくれる。 標準ライブラリにもベンチマーク用のモジュールがある。 それとの兼ね合いはどうなるのか?

HTTP レスポンスの自動圧縮

deno test --trace-ops

リソースリーク検出時のエラー内容が改善。

Deno.connectのAPIが変更

Deno.listenTlsでcertとkeyがサポート

パフォーマンス改善

V8から外の世界にアクセスする時にopを作る必要がある。そこが改善。 atob/botaはbase64処理部分が改善した。 Jarredさんがパフォーマンス争いを挑んでくるのが、denoパフォーマンス向上に貢献している。

その他の変更点

Web Streams APIへの移行について

GoスタイルのAPIからWeb Streams APIへ移行している。

dotenvモジュールが追加

deno_std/nodeの改善

crypt-browerify/publicEncrypt

deno.landがNode.jsからDenoへ移行

 Fresh Island Archtechture

 RemixでのDenoサポート

 OakのNode.jsサポートについて

capsid -- フロントエンド

 Node学園 38時限目 オンライン Node.js vs Deno 徹底討論のふりかえり

オブリビオン (字幕版)を観た

荒廃した地球で、無人偵察機のメンテナンスをするジャック・ハーパー(クルーズ)。数十年前、“スカヴ”と呼ばれるエイリアンの襲撃により地球は壊滅。人類は別の惑星へ移住を果たした。高度1000メートル上空に居を構え、地球の監視という職務を遂行していたジャックだったが、墜落した宇宙船で眠る美女を救出したことで、平穏な生活に変化が訪れる。美女の出現によって、ジャックは自身を取り巻く環境に疑問を抱くようになり、さらには人類の運命をその手に委ねられることになる―。

Amazon.co.jp: オブリビオン (字幕版)を観る | Prime Video

視聴前の宇宙人が地球を侵略するストーリーというイメージからいい意味で裏切られた。
綺麗にまとまったSF、サスペンス、ラブストーリーになっている。
映像も美しい。
視聴後の気持ちも、スッと腑に落ちるような納得感のある終わり方だった。

Spring framework Transactional annotation を使いこなせずはまった

下の記事に救われた、ありがたや

ti-tomo-knowledge.hatenablog.com

下のケースをやってしまっていた

更新処理をするメソッドが直接呼ばれているか

これはクラス全体ではなくメソッドにアノテーションを付与した場合に関係することですが、コントローラなどから別メソッドを呼び出して更新処理をする場合、@AutowiredでDIしたクラスのメソッドを直接呼び出す形でないとトランザクションは効きません。

アノテーションつけてりゃ、どんな呼び出し方でも、その範囲でトランザクションが効いてくれると思うじゃん。
そりゃないよー  

Laravel Middleware 呼び出し順序ログ

Laravel の Middleware を2つ登録した場合に、リクエスト前後の処理がどのような順序で実行されるか確認するため、ログ出力してみた。  

そのメモ。  

<?php

namespace App\Http\Middleware;

use Closure;

class Middle1
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        logger("Middle1-before");
        $response = $next($request);
        logger("Middle1-after");
        return $response;
    }
}
<?php

namespace App\Http\Middleware;

use Closure;

class Middle2
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        logger("Middle2-before");
        $response = $next($request);
        logger("Middle2-after");
        return $response;
    }
}
<?php

namespace App\Http;

use Illuminate\Foundation\Http\Kernel as HttpKernel;

class Kernel extends HttpKernel
{
    /**
     * The application's global HTTP middleware stack.
     *
     * These middleware are run during every request to your application.
     *
     * @var array
     */
    protected $middleware = [
        \App\Http\Middleware\TrustProxies::class,
        \App\Http\Middleware\CheckForMaintenanceMode::class,
        \Illuminate\Foundation\Http\Middleware\ValidatePostSize::class,
        \App\Http\Middleware\TrimStrings::class,
        \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull::class,
        \App\Http\Middleware\Middle1::class,
        \App\Http\Middleware\Middle2::class,
    ];

// 以下、省略

laravel.log

[2021-09-28 14:30:22] local.DEBUG: Middle1-before  
[2021-09-28 14:30:22] local.DEBUG: Middle2-before  
[2021-09-28 14:30:22] local.DEBUG: Middle2-after  
[2021-09-28 14:30:22] local.DEBUG: Middle1-after  

以上