雑記

特別管理産業廃棄物

UPS(無停電電源装置)のバッテリーを交換して処分しようと色々調べてみたところ,かなり面倒なことが判明しました。自動車用バッテリーと同じ仕組みのバッテリー(鉛蓄電池)なので,内部に希硫酸や鉛といった有害物質が含まれていて,「特別管理産業廃棄物」という産業廃棄物の中でも特に厳しく管理を求められるものに該当してしまうことがわかりました。

まず,特別管理産業廃棄物管理責任者の資格を得るための講習を受けました。講習自体はWeb上のe-learningで受講できるのですが,修了試験はリアルな会場でマークシート式の試験です。それに合格した上で,自らを特別管理産業廃棄物管理責任者に選任した届を都庁に提出しました。

しかし,なかなか処分業者がみつかりません。1Kgあたり10円程度の安価での買い取りを提案してくださる業者様はいくつかみつかったのですが,この価格では運搬費用を考えると赤字になってしまいます。消費者として処分するならまったく問題ないのですが,事業者が産業廃棄物として処分する場合はこの方法では有価物の譲渡とは認められず,「不適切な産業廃棄物処理」となってしまうのです(注1)。1ヵ月あまり探し回って,ようやくきちんとマニフェスト対応までやってくださる業者をみつけることができました。

注1)東京都環境局による不適正事例の説明

「不要になった物を、自ら自動車で運搬し(燃料費100円)、業者に、1円で買い取ってもらった。」という行為が「形式的な有価物」として不適正とされています。

https://www.kankyo.metro.tokyo.lg.jp/resource/industrial_waste/improper_handling/case.html

JDK

Java 20

Java 20がリリースされました。今回は小規模な変更に留まっているようです。まったく新しく導入された機能はScoped Valuesのみで,他は2回目以降のインキュベーターまたはプレビューとしての更新です。

  • Scoped Values (JEP-429)
  • レコードパターン (JEP-432)
  • switch文のパターンマッチ (JEP-433)
  • 外部メモリ/ファンクションAPI (JEP-434)
  • 仮想スレッド (JEP-436) 
  • 構造化同時実行 (JEP-437)

Scoped Values

大規模プログラムにおいて,コンポーネント間で安全かつ効率的にデータを共有するための新たなメカニズムのようです。ScopedValue<T>というクラスが導入されています。Javaでは変数のスコープはクラスやメソッド,ブロックなどで定義される静的なスコープでしたが,今回導入されたスコープは動的なものです。

以下の例ではScopedValue<>型のstatic変数PRINCIPALを用いて,ServerクラスからDBAccessクラスへデータを共有させています。Serverクラスの(1)の部分で作成されたオブジェクトをDBAccesクラスの(3)の部分で読み取ることができるようになるというもののようです。Webサーバへアクセスしてきたユーザにデータベース接続権限がなかった場合は例外をスローするということが,メソッド呼出の際に権限情報を渡さずとも実現できるということでしょうか・・・。

class Server {
    final static ScopedValue<Principal> PRINCIPAL = new ScopedValue<>();   // (1)

    void serve(Request request, Response response) {
        var level     = (request.isAdmin() ? ADMIN : GUEST);
        var principal = new Principal(level);
        ScopedValue.where(PRINCIPAL, principal)                            // (2)
                   .run(() -> Application.handle(request, response));
    }
}

class DBAccess {
    DBConnection open() {
        var principal = Server.PRINCIPAL.get();                            // (3)
        if (!principal.canOpen()) throw new  InvalidPrincipalException();
        return newConnection(...);
    }
}

https://openjdk.org/jeps/429 より引用