Java 14から導入されたRecordのjavadoc

見たほうがはやい。

recordであるということは明記される模様。パラメーターについては@paramで書いておけば、レコードコンポーネントとして表示される。 メソッドのドキュメントは自動生成されたものになるが、引数名のみが表示されて@paramで付けた名前が見えないのでちょっと不便かもしれない。

f:id:megascus:20211004172101p:plain
ソースコード

f:id:megascus:20211004172626p:plain
javadoc

Microsoft 365(Exchange Online)を使用してメール送信する場合に2022年10月から基本認証が使えなくなるそうです。

2022年10月からメール送信に限らず、Exchangeで基本認証が無効化されるとのこと。 メール送信(SMTP AUTH)については事前のオプトアウトはできますが、無効化された後には再有効化はできないようなので注意な。

つまり、ちまたのJavaMailを使用したメール送信のサンプルがたいてい動かなくなる。。。

SMTP AUTH以外は10月以降オプトアウトもできないし、ランダムで選ばれて勝手に無効化されるとか言ってるし、怖え。。。。 ※ランダムで選ばれて勝手に無効化されるのはオプトアウトできる

情報のソースはこちら。 techcommunity.microsoft.com

認定Webアプリケーション 脆弱性診断士 公式トレーニングが面白かった。

会社で受ける機会をもらったので受講してきたけど思ってたよりも面白かった。

当然のように徳丸本は読んでいて、セキュリティを考えたアプリケーション実装は常にしてるのですが、 実際にアタックを掛けてみるというところを実際にやってみるというのは非常に良い経験でした。

簡単にアタックを掛けれるツールを使ってやってくれるので、セキュリティ?そんなの気にしなくても悪いことする人はいねえよみたいな認識の人を黙らせるのには良い感じです。

全くの初心者には厳しい気がするけど、徳丸本やIPAの安全なウェブサイトの作り方を読んで腑に落ちきっていない人は受講する価値があるんじゃないだろうか。

www.gsx.co.jp

Oracle XEで容量を超過した場合

Oracle 18c XEはディスク量に12Gの制限があるが、そちらを超過した場合はデータベースをオープンできなくなる。 その状態でデータをメンテナンス(削除)するのは至難の業なので、バックアップから復旧するしかない。

ヌーラボ backlogエンタープライズで最近アクセスしていないユーザーの一覧を取得する。

backlogエンタープライズはユーザー数による課金になっているので、アクセスしていないユーザーについては削除を行いたい場合があります。 ただ、backlogのAPIは貧弱で、画面からは最終ログイン日時が取れるのにAPIからは最終ログイン日時が取れない、APIを使用して取得できるユーザーのアクティビティ情報は自分が参加しているプロジェクトに参加しているユーザーしか取れない等問題があって、使い物にならないので直接DBにSQLを発行します。

データベースへの接続方法はエンタープライズのインストール時に作成した設定ファイルを参照すればわかるので、DBには接続してSQLを発行できる前提で話をします。

なお、完全にダーティーハックの世界だし、ヌーラボのbacklogはテーブル設計については公開していないので、正しいかどうかの保証はありません。 また、gitの読み取り専用ユーザーとして運用している場合、APIの読み取りのみ使用しているユーザーについては調べがつかなかったので、CIで自動的に何かやってる場合は注意が必要です。 gitにコミットをしている場合は課題IDを入れてれば大丈夫(なはず)。

以下の2つのSQLを発行します。

//最近作られたわけではない1回もログインしていないユーザーの一覧
select id, user_id, last_login_time from users 
where last_login_time is null and created < date_sub(now(), interval 10 day) and disabled = '0' order by user_id asc;

//最近1年にログインしてない、もしくはアクティビティがないユーザー
select id, user_id, last_login_time from users 
where last_login_time <= date_sub(now(), interval 1 year) and disabled = '0' and id not in (select user_id from  project_activity_notify where created > date_sub(now(), interval 1 year)) order by user_id asc;

後はAPI使って削除するだけ。 usersテーブルのIDとしてのuser_idとusersテーブルのuser_idが紛らわしいので注意してくださいね。

Oracle DBの表領域ごとの使用率を出力する

ぐぐって出てくる既存のSQLだと正しい結果が出てこなかったのでメモ。 19cで確認。 Oracle SQL DeveloperのDBAコンソールで使われてるものほぼそのままです。

select a.tablespace_name as "Tablespace Name",
       round(a.bytes_alloc / 1024 / 1024) "Allocated (MB)",
       round(nvl(b.bytes_free, 0) / 1024 / 1024) "Free (MB)",
       round((a.bytes_alloc - nvl(b.bytes_free, 0)) / 1024 / 1024) "Used (MB)",
       round((nvl(b.bytes_free, 0) / a.bytes_alloc) * 100) "% Free",
       100 - round((nvl(b.bytes_free, 0) / a.bytes_alloc) * 100) "% Used",
       round(maxbytes/1024 / 1024) "Max. Bytes (MB)"
from  ( select  f.tablespace_name,
               sum(f.bytes) bytes_alloc,
               sum(decode(f.autoextensible, 'YES',f.maxbytes,'NO', f.bytes)) maxbytes
        from dba_data_files f
        group by tablespace_name) a,
      ( select  f.tablespace_name,
               sum(f.bytes)  bytes_free
        from dba_free_space f
        group by tablespace_name) b
where a.tablespace_name = b.tablespace_name (+)
union all
select 
       h.tablespace_name as tablespace_name,
       round(sum(h.bytes_free + h.bytes_used) / 1048576) megs_alloc,
       round(sum((h.bytes_free + h.bytes_used) - nvl(p.bytes_used, 0)) / 1048576) megs_free,
       round(sum(nvl(p.bytes_used, 0))/ 1048576) megs_used,
       round((sum((h.bytes_free + h.bytes_used) - nvl(p.bytes_used, 0)) / sum(h.bytes_used + h.bytes_free)) * 100) Pct_Free,
       100 - round((sum((h.bytes_free + h.bytes_used) - nvl(p.bytes_used, 0)) / sum(h.bytes_used + h.bytes_free)) * 100) pct_used,
       round(sum(f.maxbytes) / 1048576) max
from   (select distinct * from sys.gv_$TEMP_SPACE_HEADER) h, (select distinct * from sys.gv_$Temp_extent_pool) p, dba_temp_files f
where  p.file_id(+) = h.file_id
and    p.tablespace_name(+) = h.tablespace_name
and    f.file_id = h.file_id
and    f.tablespace_name = h.tablespace_name
group by h.tablespace_name
ORDER BY 2

sqlplusでデフォルトの接続先を変更する。

Windowsの場合は環境変数 「LOCAL」にtnsnames.oraの値を書き込む、そうでないOSの場合は「TWO_TASK」に指定するらしい。 Linux版(と思われる)記事はたくさんあったけど、Windowsで確認しました。

stackoverflow.com