TechNow! 編集部一覧

cwebp コマンドの使い方

cwebp

 cwebp コマンドとは、画像ファイルを WebP ファイルに変換するプログラムです。

 画像ファイルと言えば、現在最もスタンダードなのが JPEG (ジェイペグ) 形式です。JPEGが登場するまではBMP形式(Windows bitmap 形式)のファイルが主に使われていたという歴史的経緯があります。BMP形式とは、マイクロソフト社とIBM社が考案したファイル形式で BMP ファイルはデータ圧縮技術が使われておらず、名前の通りビットマッピングのローデータに近い状態のまま画像データを保持するものなので、いかんせんファイルサイズの肥大化になやまされていました。

 そこでJPEG形式の登場です。JPEGはデータ圧縮してファイル化するので、BMPと比べファイルサイズの削減効果が飛躍的に高まりました。圧縮形式にするデメリットは、ビットマップデータを表示する度に解凍しないといけません。瞬時に表示されるので解凍プロセスを意識させませんが、実際にはJPEGファイルの画像を表示する都度、データを解凍する処理が走っているのです。しかし近年のCPU速度の向上により、我々が今見ているように解凍は瞬時に行われ、表示までの時間も瞬時に行われています。圧縮&解凍の時間が掛からないのであれば、BMP形式は単なるファイルサイズを大きくするだけ、ストレージの負担を増やすだけのものになるので、最近はBMP形式での保存はほぼ無くなってしまいました。

 ちなみに、それではBMPの長所はまったく無いのかと言うと、実はそうでもありません。JPEG形式は圧縮する際に画像を間引いているのです。つまり論理的にはBMPよりも確実にJPEGファイルの方が画質が悪いという図式が成立します。JPEGで保存をする際「画質」という項目が多くのツールで存在しているのは、あなたも既に知っているでしょう。この画質の指定が画像データの間引き量の指定なのです。高画質でJPEG化すれば、人間の目では限りなく見分けが付きにくい劣化具合にできますが、その場合、間引き量が少ないため圧縮効果が低く、ファイルサイズが大きくなります。間引けば間引くほど圧縮効果が高まりファイルサイズは小さくなりますが、画質の劣化も激しくなるのです。

 BMP形式は圧縮していないので、何度再生成しても一切劣化しませんが、JPEG形式の画像は、それをもとに編集してJPEGで保存という事を繰り返すと、どんどん劣化するという性質があるのです。画像ファイルには非可逆性というキーワードも出てくることがあります。非可逆性とは、一方通行のようなもので一方向へ進んだら元の方向に戻せないことをいいます。BMP形式には非可逆性がありますが、JPEGファイルは劣化するのみなので非可逆性がないということになります。

 ただ、画像の劣化も近年の高画素数化すなわち画素数が増えた事により、多少のビットマップレベルでの画質劣化がそれほど人間として気にならなくなりました。それでBMP形式は廃れてJPEG形式の画像ファイルが長年愛用されるようになったというのが歴史の流れです。これまでの説明で理解できたと思いますが、JPEG 形式の画像ファイルはそもそもデータサイズが圧縮されているので、ZIPで圧縮しようと試みたところで大して圧縮効果は認められません。そもそもZIP圧縮でJPEGファイルのサイズを小さくしたところで、いちいちZIP解凍しなければいけないので使い勝手も悪いでしょう。

 そこで、新たな画像ファイル形式として WebP 形式が登場しました。WebP 形式は Google 社が考案し次世代の画像フォーマットとして提唱しているので、近い将来、画像ファイル形式のスタンダードが JPEG から WebP へと置き換わることになるでしょう。

 では WebP を使うと何が便利になるのか?というと JPEG よりも更なる圧縮効果が期待できるということです。今まで説明してきた通り、圧縮を高めると画質が劣化するという関係性に我々人類は悩んで来ましが、WebP は高圧縮しつつも画質を劣化させないという、まさに次世代の画像ファイル形式なのです。もうこの記事を読んだあなたは、今日から JPEGファイルを WebPファイルに変換しようじゃありませんか。WebPにするだけで、あなたのノートパソコンのストレージや、クラウドストレージが倍増するような感覚になれるのです。

 特にクラウドストレージは、ストレージサイズで毎月の支払いが変わるので、高効率で画像ファイルを保管すれば、それは毎月の支払いを安くできるということなのです。

 前置きが長くなりましたが、それでは JPEG などの既存の画像ファイルをどのように WebP に変換できるのかの説明に入ります。WebP 形式への変換には cwebp コマンドを使うことで実現できます。cwebp コマンドは、いわゆる「黒い画面」であるコマンドプロンプトから実行するコマンドです。ここからは、ある程度のパソコン中級者以降の話になります。黒い画面なんかわからん!という初心者の方向けにも、後ほど別の方法をご紹介します。

cwebp のインストール方法

MacOS の場合、お馴染みの Homebrew のコマンド一発でインストールできます。

$ brew install webp

参考ページ(Homebrew公式)
https://formulae.brew.sh/formula/webp

インストールの確認は以下の通り cwebp -version を実行して下記のように表示されればOKです。バージョンはそれぞれ異なります。

$ cwebp -version
1.2.0

cwebp の使い方

無事インストールできたのであれば、使い方の説明に入ります。基本構文は以下の通り。

cwebp [オプション] 入力ファイル名 -o 出力ファイル名.webp

説明

cwebp は WebP 形式で画像を圧縮します。
入力形式は、PNG、JPEG、TIFF、WebP、生のY’CbCr データのいずれかです。
アニメーションPNG と WebP ファイルを入力ファイルとすることはできません。
出力ファイルは WebP のみです。ファイル名の拡張子に .webp を忘れずに指定してください。

オプション

基本的なオプションは次のとおりです。

-o string

出力する WebP ファイルの名前を指定します。
省略した場合 cwebp 圧縮は実行されますが、統計のみが出力されます。
出力名を “-” にすると、出力が stdout に送られます。

-- string

入力ファイルを明示的に指定します。このオプションは入力ファイルが ‘-‘ で始まる場合に便利です。このオプションは最後に指定しなければなりません。これ以降のオプションは無視されます。

-h, -help

簡単な使用法のヘルプ表示です。-H より簡略化しています。

-H, -longhelp

すべてのオプションについてのヘルプ表示です。-h より細かくなっています。

-version

バージョン番号(major.minor.revision)を出力します。

-lossless

完全に損失なしで画像をエンコードします。完全に透明な領域を持つ画像の場合、非表示のピクセル値(R / G / BまたはY / U / V)は、-exact オプションが使用されている場合にのみ保持されます。

-near_lossless int

ほぼロスレスの画像前処理のレベルを指定します。このオプションは、圧縮性を高めるためにピクセル値を調整しますが、視覚的な品質への影響は最小限です。ロスレス圧縮モードを自動的にトリガーします。範囲は0(最大前処理)から100(前処理なし、デフォルト)です。一般的な値は約60です。損失があると、-q 100 より良い結果が得られる場合があることに注意してください。

-q float

0との間のRGBチャネルの圧縮率を指定します100。デフォルトは75です。

非可逆圧縮(デフォルト)の場合、係数を小さくすると、ファイルが小さくなり、品質が低下します。100 は最高品質の指定です。

可逆圧縮(-losslessオプションで指定)の場合、係数を小さくすると圧縮速度が速くなりますが、ファイルは大きくなります。最大圧縮は100の値を使用します。

-z int

lossless指定されたレベルが0〜9の圧縮モードをオンにします。レベル0が最も速く、9が最も遅くなります。高速モードでは、低速モードよりもファイルサイズが大きくなります。適切なデフォルトは -z 6 です。このオプションは、実際には、品質とメソッドのいくつかの事前定義された設定へのショートカットです。オプション -q または -m が後で使用される場合、それらはこのオプションの効果を無効にします。

-alpha_q int

0 と 100 の間のアルファ圧縮の圧縮率を指定します。アルファの可逆圧縮は、100の値を使用して実現されますが、値が低いと不可逆圧縮になります。デフォルトは 100です。

-preset string

特定のタイプのソースマテリアルに合わせて、事前定義されたパラメータのセットを指定します。可能な値は default、photo、picture、 drawing、icon、text。

-preset は他のパラメータの値を(-qを除いて)上書きするので、このオプションは引数の順番の最初に指定しましょう。

-m int

使用する圧縮方法を指定します。このパラメーターは、エンコード速度と圧縮ファイルのサイズおよび品質の間のトレードオフを制御します。可能な値の範囲は0から6です。デフォルト値は4です。より高い値が使用されると、エンコーダーは追加のエンコードの可能性を検査し、品質の向上を決定するためにより多くの時間を費やします。値を小さくすると、ファイルサイズが大きくなり、圧縮品質が低下する代わりに、処理時間が速くなる可能性があります。

-resize width height

画像を width x height のサイズにします。widthとheightのどちらか一方(両方ではない)が0の場合は、アスペクト比を維持したまま自動的にサイズが計算されます。

-crop x_position y_position width height

画像の左上の座標 (x_position, y_position) を基準として、width と height の範囲を切り抜きます。切り抜く領域はソースの矩形内に完全に含まれていなければなりません。

-mt

可能であれば、エンコードにマルチスレッドを使用します。

-low_memory

非可逆エンコーディングのメモリ使用量を圧縮サイズの4倍(通常の場合)節約します。これによりエンコーディングが遅くなり、出力の大きさや歪みが若干異なります。このフラグは、メソッド 3 以降でのみ有効で、デフォルトではオフになっています。このフラグをオフにすると、ビットストリームにいくつかの副作用が生じることに注意してください。パーティションの数(強制的に1にする)など、特定のビットストリーム機能が強制されます。このオプションを使用すると、ビットストリームのサイズに関するより詳細なレポートが出力されることに注意してください。

不可逆オプション

これらのオプションは、不可逆エンコーディング(デフォルト、アルファありまたはなし)を実行する場合にのみ有効です。

-size int

圧縮出力を試行して到達するターゲットサイズ(バイト単位)を指定します。コンプレッサーは、このターゲットにできるだけ近づくために、部分的なエンコードを数回パスします。との両方-sizeを -psnr使用すると、-size値が優先されます。

-psnr float

圧縮出力に到達するためのターゲットPSNR(dB単位)を指定します。コンプレッサーは、このターゲットにできるだけ近づくために、部分的なエンコードを数回パスします。との両方-sizeを-psnr使用すると、 -size値が優先されます。

-pass int

オプション -size または -psnr で使用される二分法の際に使用するパスの最大数を設定します。 最大値は 10 で、デフォルトは 1 です。オプション -size または -psnr が使用され、-pass が指定されなかった場合、デフォルト値の「6」パスが使用されます。

-af

自動フィルターをオンにします。このアルゴリズムは、バランスの取れた品質に到達するためにフィルタリング強度を最適化するために追加の時間を費やします。

-jpeg_like

JPEG圧縮の予想サイズによりよく一致するように、内部パラメータマッピングを変更します。このフラグは通常、同等のJPEG(同じ-q設定の場合)と同様のサイズの出力ファイルを生成しますが、視覚的な歪みは少なくなります。

高度なオプション:

-f int

非ブロック化フィルターの強度を、0(フィルタリングなし)から100(フィルタリング最大)の間で指定します。0を設定すると、フィルタリングは一切行われません。値が大きいほど、画像をデコードした後に適用されるフィルタリング処理の強さが増します。値が大きいほど、画像はより滑らかになります。一般的な値は、20~50の範囲です。

-sharpness int

フィルタリングのシャープネスを指定します(使用する場合)。
範囲は0(最も鋭い)から7(最も鋭くない)です。デフォルトは0です。

-strong

強力なフィルタリングを使用します(-f オプションのおかげでフィルタリングが使用されている場合)。強力なフィルタリングはデフォルトでオンになっています。

-nostrong

強力なフィルタリングを無効にし(-f オプションのおかげでフィルタリングが使用されている場合)、代わりに単純なフィルタリングを使用します。

-sharp_yuv

必要に応じて、より正確でシャープな RGB->YUV変換を使用します。このプロセスは、デフォルトの「高速」RGB->YUV変換よりも遅いことに注意してください。

-sns int

空間ノイズシェーピングの振幅を指定します。空間ノイズシェーピング(または略してsns)は、画像のどの領域で比較的少ないビットを使用するか、およびこれらのビットをより適切に転送する場所を決定するために使用される組み込みアルゴリズムの一般的なコレクションを指します。可能な範囲は 0(アルゴリズムがオフ)から100(最大効果)までです。デフォルト値は 50 です。

-segments int

snsアルゴリズムのセグメンテーションの際に使用するパーティションの数を変更します。
パーティションの数は 1 から 4 の範囲で指定します。デフォルト値は4です。
このオプションは、-low_memory が使用されていなければメソッド3以降に影響しません。

-partition_limit int

一部のマクロブロックで使用するビット数を制限して品質を劣化させます。範囲は0(劣化なし、デフォルト)から100(完全劣化)です。中程度の大きさの画像の場合、有用な値は通常30~70程度です。VP8フォーマットでは、コントロールパーティションと呼ばれるパーティションの上限は512kで、マクロブロックをスキップするかどうか、どのセグメントに属するか、イントラ4×4モードとイントラ16×16モードのどちらでコーディングするか、最後に各サブブロックに使用する予測モードなどの情報を格納するために使用されます。非常に大きな画像の場合、512kでは16×16マクロブロックあたり数ビットの余裕しかありません。マクロブロックあたりのビット数は最低でも4ビットです。スキップ、セグメント、モードなどの情報がこの4ビットのほとんどを使ってしまう可能性があり(そのようなケースはほとんどありませんが)、非常に大きな画像の場合には問題となります。partition_limit係数は、最もビットコストの高いモード(イントラ4×4)をどのくらいの頻度で使用するかを制御します。これは、512k の制限に達して次のようなメッセージが表示された場合に役立ちます。
Error code: 6 (PARTITION0_OVERFLOW: Partition #0 is too big to fit 512k). partition_limitを使っても512kの制限に満たない場合は、マクロブロックあたりのヘッダビットをより多く節約するために、セグメントの数を少なくする必要があります。segmentsオプションを参照してください。

ロギングオプション

これらのオプションは、出力のレベルを制御します。

-v

追加情報(特にエンコード時間)を出力します。

-print_psnr

平均PSNR(ピーク信号対雑音比)を計算して出力します。

-print_ssim

平均SSIMを計算して出力します(構造的類似性メトリック。詳細については、 http://en.wikipedia.org/wiki/SSIMを参照してください)。

-print_lsim

ローカル類似性メトリック(併置された隣接ピクセル間の最小エラーの合計)を計算して出力します。

-progress

エンコードの進行状況をパーセントで出力します。

-quiet

何も出力しません。

-short

テスト目的で、簡単な情報(出力ファイルサイズとPSNR)のみを出力します。

-map int

エンコーディング情報の追加のASCIIマップを出力します。可能なマップ値の範囲は1から6です。これは、デバッグを支援することのみを目的としています。

追加オプション

より高度なオプションは次のとおりです。

-s width height

入力ファイルが、ITU-R BT.601勧告に準拠した、4:2:0リニアフォーマットのY’CbCr生サンプルで構成されていることを指定します。輝度面のサイズは width x height です。

-pre int

いくつかの前処理ステップを指定します。の値を使用すると、2RGBA-> YUVA変換中に品質に依存する疑似ランダムディザリングがトリガーされます(不可逆圧縮のみ)。

-alpha_filter string

アルファプレーンの予測フィルタリング方法を指定します。複雑さと遅さの順に、none、fast、bestのいずれかを指定します。デフォルトは fast です。内部的には、アルファフィルタリングは4つの可能な予測(none、horizontal、vertical、gradient)を使用して実行されます。ベストモードでは、各モードを順に試し、より小さいサイズになるものを選びます。fastモードでは、すべてのモードを試すことなく、先験的な推測を試みます。

-alpha_method int

アルファ圧縮に使用するアルゴリズムを 0 または 1 で指定します。アルゴリズム 0 は圧縮しないことを示し、1 は WebP ロスレス形式で圧縮することを示します。デフォルトは1です。

-exact

透過部分のRGB値を保持します。デフォルトはオフで、圧縮性を高めるために設定されています。

-blend_alpha int

このオプションは、アルファチャンネル(存在する場合)を、16進数で0xrrggbbと指定された背景色を使ってソースにブレンドします。アルファチャンネルはその後、不透明な値である 255 にリセットされます。

-noalpha

このオプションを使用すると、アルファチャネルが破棄されます。

-hint string

入力画像タイプに関するヒントを指定します。
指定可能な値は photo、 picture、graph です。

-metadata string

入力から出力にコピーするメタデータのコンマ区切りリスト(存在する場合)。有効な値は、all、none、exif、icc、xmpです。デフォルトはnoneです。

各入力フォーマットは、すべての組み合わせに対応していない場合があることに注意してください。

-noasm

すべてのアセンブリ最適化を無効にします。

実行サンプル

cwebp -q 50 -lossless picture.png -o picture_lossless.webp
cwebp -q 70 picture_with_alpha.png -o picture_with_alpha.webp
cwebp -sns 70 -f 50 -size 60000 picture.png -o picture.webp
cwebp -o picture.webp -- ---picture.png

三菱UFJ銀行の法人口座オンラインバンキング BizSTATION を使ってみた

本記事では、法人の銀行オンラインバンキングサービスの利用比較を考察します。

三菱UFJ銀行 BizSTATION

BizSTATION という名称で法人用のオンラインバンキングサービスを提供しています。
動作環境とされているのは以下の通りですが、実際に編集部で利用してみたところ macOS では謎のエラーが表示されてログインはできませんでした。

上表の Windows 8.1 はマイクロソフト社がメインストリームサポート終了していて、早急にアップグレードが推奨されているOSです。できるだけ使わない方が無難でしょう。

macOS Catalina については古いバージョンとなっているので、今回は検証の対象から外しました。

編集部内の MacPro, MacBookPro でそれぞれアクセスしています。
【テスト環境】
macOS Big Sur 11.2.3
Safari 14.0.3
Firefox 87.0

macOS Big Sur で Safari も Firefox でも ID/パスワードを入力し、ログインボタンを押すと、上記エラーが発生。
どの mac でも同様の動作でした。

通常、必須環境としているスペックがクリアされていればアクセスできるべきですが、しかも日本を代表する都銀なのにこの状況、セキュリティ的にも不安を感じる法人も多いと思います。

気を取り直し、今度は Window でログインを試みます。そもそもログインするだけでこれほどの無駄な試練に直面しようとは編集部も予想だにしませんでした。これではサービス内容の評価以前です。

そして Windows の動作環境も中々ローテクっぷりが半端ありません。この時代に Microsoft 社自身がセキュリティ脆弱性があるので使わないでと警告を発している IE11 を使えと!?三菱UFJさん、正気でしょうか?

ログイン時は「クライアント証明書」が必要です。これはクライアントつまり個々のパソコンをサーバが認識して接続する為の技術で、指定された固有のパソコンでしか接続できないものです。なので、会社のパソコンどれでもログインできるわけではないということです。会社のデスクトップに設定している場合、リモート勤務にしていても手元のノートブックPCでアクセスできず、出社しなければなりません。
勿論、その仕組であればセキュリティは高いわけですが、利便性が著しく落ちるという事になります。

複数証明書があるのは使用不可となった証明書を消していないだけです

さらにこのクライアント証明書は1年間のみ有効となっていて、毎年更新作業をしなければなりません。
この作業、ITに詳しいスタッフであればそれほど苦ではないのですが、そうでない一般職の方には専門用語やいつもありがちな、はい・いいえ を数回クリックする事になるので、多少ストレスを感じるだろうというところです。

毎年更新なので、古い証明書は削除すればスッキリするのですが、証明書を消す操作は一般的な操作でもなく、これもハードルで、しかも有効な証明書を誤って消してしまうと大事です。なんせもう一切ログインできなくなるのですから。クライアント証明書の再発行の手続き、まず三菱UFJ銀行のBizSTATION窓口に電話して、その場では当然発行できず、郵送でのやりとりになります。まず再発行依頼の用紙が届くまで数日、記入して銀行印を捺印して返送するまで数日、その再発行依頼書を元に三菱UFJ銀行が再発行の通知が郵送されるまで、また数日。その間、会社の振り込みも取引明細の確認もできず。毎回、通帳と印鑑を持って三菱UFJ銀行の有人の支店へ出向いて手続きをしなければならないわけです。証明書、安易に消したくない気持ち理解できると思います。

証明書を選択した次の表示、デフォルトで拒否ですがこれはトラップ

ログイン時、有効なクライアント証明書をクリックすると、次は上図のメッセージが表示されます。なんとデフォルトで「アクセス許可の拒否」これ、条件反射的に「OK」を押しがちな人にはトラップです。この正解は付与の方です。

ようやく辿り着いたログイン画面

さて、ここまで頑張ってようやく辿り着いたログイン画面、契約者番号と利用者IDは、クライアント証明書に埋め込まれているので、この画面では入力不要、パスワードのみ入力すれば良いです。
クライアント証明書の無いパソコンからアクセスしても、この画面は表示されません。

BizSTATION の利用料金

月額 1,760円(税込)

振込入金メール通知あり。

※ BizSTATIONライトという無料のものもありますが、現在残高確認と振り込みのみしか利用できず、入出金明細などは表示されません。


Dovecot-Lda – Dovecot ローカルメール配信エージェント

名前

dovecot-lda – Dovecot ローカルメール配信エージェント

概要

dovecot-lda [-ek] [-a  address] [-c config_file] [-d username] [-f envelope_sender] [-m mailbox] [-o setting=value] [-p path]

説明

dovecot-lda は、MTAからメールを受け取り、それをユーザのメールボックスに配信し、Dovecot インデックスファイルを最新の状態に保つローカルメール配信エージェントです。

dovecot-lda の主な機能は次のとおりです:

  • メール配信中のメールボックスのインデックス作成により、後でメールボックスへのアクセスが高速化されます
  • クォータプラグインによるクォータ施行をします
  • Pigeonhole sieve プラグインで Sieve 言語をサポートします

オプション

dovecot-lda で利用できるオプション:

-a アドレス
宛先アドレス(例:user+ext@domain)。デフォルトはユーザ名と同一です。

-c config_file
別の設定ファイルのパス。

-d ユーザ名
宛先ユーザ名。指定した場合、ユーザ情報は userdb から検索されます。 通常は仮想ユーザで使用され、必ずしもシステムユーザである必要はありません。

-e
メールが拒否された場合は、拒否理由を stderr に書き込み、ステータス 77(EX_NOPERM) で終了します。デフォルトでは自分で拒否メールを送信します。

-f envelope_sender
エンベロープ送信者のアドレス。

-k
起動時にすべての環境をクリアしません。

-m mailbox
宛先メールボックス(デフォルトはINBOX)。メールボックスが存在しない場合、メールボックスは作成されません(lda_mailbox_autocreate 設定が yes に設定されている場合を除く)。何らかの理由でメールボックスにメッセージを保存できなかった場合、代わりに INBOX に配信されます。

-o setting=value
/etc/dovecot/dovecot.conf および userdb からの構成設定を指定された値で上書きします。複数の設定を上書きする場合、-o オプションを幾つでも指定できます。

-p path
stdin から読み込む代わりとして、配信するメールのパスを指定します。maildir を使っている場合は、可能であればファイルは宛先にハードリンクされます。これにより、ハードリンクを使って一つのメールを複数のユーザに配信することができますが、現在のところ、キャッシュファイルが更新されないため、本当に必要な場合でなければ使用しないでください。

終了ステータス

dovecot-lda は、以下のいずれかの値で終了します:

0   Delivery was successful. (EX_OK)

64  Invalid parameter given. (EX_USAGE)

77  -e option was used and mail was rejected.  Typically this happens when user is over quota and quota_full_tempfail
       = no is configured. (EX_NOPERM)

75  A temporary failure. This is returned for almost all failures. See the log file for details. (EX_TEMPFAIL)

関連ファイル

/etc/dovecot/dovecot.conf
          Dovecot's main configuration file.

/etc/dovecot/conf.d/10-mail.conf
          Mailbox locations and namespaces.

/etc/dovecot/conf.d/15-lda.conf
          LDA specific settings.

/etc/dovecot/conf.d/90-plugin.conf
          Plugin specific settings.

/etc/dovecot/conf.d/90-quota.conf
          Quota configuration.

バグレポート

バグ報告は doveconf -n 出力を含め、Dovecotメーリングリストdovecot@dovecot.org へ。バグ報告に関する情報は http://dovecot.org/bugreport.html で得られます。

関連項目

doveadm(1), dovecot(1), doveconf(1), dsync(1)

Related MTA specific documentation:

Postfix:
          postconf(5), transport(5), pipe(8)

Exim:

The accept router
          http://exim.org/exim-html-current/doc/html/spec_html/ch16.html

Generic options for transports
          http://exim.org/exim-html-current/doc/html/spec_html/ch24.html

The pipe transport
          http://exim.org/exim-html-current/doc/html/spec_html/ch29.html

Dovecot v2.x / DOVECOT-LDA(1)


MacBook の起動音を永久消音する方法

MacBook Air, MacBook などで電源を入れると「ジャーン」と鳴るMacの起動音、Macを買って最初のうちこそ「おーMacを買ったんだなあ🤤」とひと時のホノボノ感に浸ることもあったりしますが、そのうち慣れますし、起動音が邪魔になるシチュエーションだったりしても、当然ながら一度起動しないと起動音は消せません😱
静かさが求められる場所で、あの「ジャーン」は周囲に迷惑でしかありません。マナーモードのスイッチがあるわけでもなく困ったもの。
で、よくよく考えると、Macの起動音ってデメリットしかない事に気付くのですが。

そこでお悩みのあなたに! MacBook の起動音を消す方法をご紹介します。

特別なアプリをインストールする必要なんかありません!コマンドラインからコマンド一発実行すれば起動音は永久消音できます。

アプリケーション>ユーティリティ>ターミナル を選択してターミナルを開き、下記コマンドをコピペしてエンターキーを押してください。
パスワードを聞かれるので、パスワードを打ってお終い。試しに MacBook を再起動してみましょう。ほら、起動音が無音になっていますよね。

$ sudo nvram StartupMute=%01

やっぱり起動音が欲しい!聞きたい!と思ったら、ターミナルで下記コマンドを実行すれば起動音が復活します。

$ sudo nvram StartupMute=%00

これであなたの MacBook の起動音は自由自在!


UglifyJS 3 – JavaScript 軽量化 (難読化) 入門

JavaScript を難読化&軽量化したいならば UglifyJS 3 を使うのが便利です。
この記事では UglifyJS 3 の使い方をわかりやすく説明します。

オプション

-h, –help 使用法の情報を表示する。
使用可能なオプションの詳細については、「–help options」を参照してください。
-V, –version バージョン番号を表示する。
-p, –parse <オプション> パーサオプションを指定します。
`acorn` 解析にはAcornを使用します。
`bare_returns` 関数外でのリターンを許可します。
CommonJSを小さくする場合に便利です。
モジュールとユーザスクリプト
匿名関数のラップ(IIFE)
で指定します。ユーザー。jsエンジンの`caller`。
`expression` 単一の式をパースします。
プログラム(JSONのパース)。
`spidermonkey` 入力ファイルがSpiderMonkeyであると仮定する
AST形式(JSONとして)。
-c, –compress [オプション] 圧縮を有効にする/圧縮オプションを指定する
`pure_funcs’ 安全に実行できる関数のリスト
戻り値が
使用されない。
-m, –mangle [オプション] mangleの名前を変更/manglerのオプションを指定:
「予約済み」 削除してはならない名前のリスト。
–mangle-props[オプション]mangleプロパティを編集/manglerオプションを指定:
`builtins`重複するプロパティ名をマングル
を使用します。
`debug`デバッグ接頭辞と接尾辞を追加します。
「domprops」 重複するプロパティ名をマングル
と同じです。
`keep_quoted`mangleのみ


Materialize CSS でマテリアルデザイン入門

マテリアルデザインとは

マテリアルデザインとは、2014年に Google社によって発案されたデザインコンセプトです。
主に Android のUI のために考案され、仮想的である画面のタッチ操作や見え方(ユーザインタフェース)を現実の紙のように近付けて自然な操作を実現しようというものです。

マテリアルデザイン・コンセプト公式サイト(英文)

Materializeとは

では次に Materialize (マテリアライズ)とはですが、先程のマテリアルデザインのページを実際に作成するためのCSSフレームワークが Materialize です。

マテリアルデザイン・フレームワーク Materialize 公式ページ(英文)

実際に Materialize を使う

それでは百聞は一見に如かず。入門編なので一番簡単なサンプルページを作ってみましょう。
下記のコードをそのままテキストエディタなどにコピペするだけで動作します。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>マテリアルデザイン</title>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
<style>
* {
box-sizing: border-box;
}
</style>
</head>
<body>
<!-- プッシュボタン -->
<a class="waves-effect waves-light btn-small">送信ボタン</a>
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
<script> $(function () { }); </script>
</body>
</html>

このソースで上図のようなプッシュボタンだけのページが表示されたはずです。
ちなみにソースには、このままテンプレートとして使えるよう空のjQueryも埋め込んであります。

これだけで、エフェクトで飾られたプッシュボタンが作成できました。

何もインストールせずにmaterializeが動作しているのは CDN (Content Delivery Network) を使っているからです。CDNとはネットワークで利用できるコンテンツです。CDNを使うことで自分のサーバへコンテンツ(今回の場合 materialize ライブラリ)をインストールすることなく利用する事が可能となります。

以下にmaterializeライブラリのCDNを示します。これらをコードに含めれば materialize が機能します。

materializeのスタイルシートのCDN

<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">

materializeのJavaScriptのCDN

<script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>

Materializeのレスポンシブ・グリッドレイアウト

Materializeでは、Bootstrap同様に横幅をトータル12分割したレスポンシブデザイン対応のグリッドレイアウトが採用されています。

基本のグリッド

下記にサンプルコードを示します。

<div class="row">
  <div class="col m1 amber center">1</div>
  <div class="col m1 yellow center">2</div>
  <div class="col m1 amber center">3</div>
  <div class="col m1 yellow center">4</div>
  <div class="col m1 amber center">5</div>
  <div class="col m1 yellow center">6</div>
  <div class="col m1 amber center">7</div>
  <div class="col m1 yellow center">8</div>
  <div class="col m1 amber center">9</div>
  <div class="col m1 yellow center">10</div>
  <div class="col m1 amber center">11</div>
  <div class="col m1 yellow center">12</div>
</div>

<div class="row">
  <div class="col m4 l3 yellow">
    <p>このカラムは小画面12列(無指定)、中画面4列(m4)、大画面3列(l3)で幅指定</p>
  </div>
 
  <div class="col s6 m8 l9 amber">
    <p>このカラムは小画面6列(s6)、中画面8列(m8)、大画面9列(l9)で幅指定</p>
  </div>
</div>

上図がサンプルHTMLを実際に表示したものです。
それぞれのdivタグにあるclassに注目すると、row や col がありますが、これらの意味は

row: 行(ロー)
col: 列(カラム)

です。横一行となるのが row、縦の列が col です。

次に、再び class に注目すると m4 や l3 などで書かれているものがあると思います。これらは幾つの列幅を使うかの指定です。英字+数字の組み合わせの最初の英字の m や l (これらをスクリーン・クラス・プレフィックスといいます)は閲覧者のメディアの画面サイズです。
ざっくり書くと

s: スマートフォン
m: タブレット(パッド)
l: パソコン

という捉え方で構いません。

もし「m4」と指定した場合、タブレット閲覧時には4列の幅で表示するという意味になり、「l3」と指定した場合はパソコン閲覧時には3列の幅で表示するという意味になります。省略時(未記載時)は暗黙で12列幅を使うという事になります。

プッシュとプル

次にカラムを入れ替えるプッシュとプルです。サンプルソースを下に示します。

<div class="row">
 <div class="col m3 green">第一カラム</div>
 <div class="col m9 amber">第二カラム</div>
</div>

<div class="row">
 <div class="col m3 push-m9 green">第一カラム</div>
 <div class="col m9 pull-m3 amber">第二カラム</div>
</div>

上の行はノーマル状態、下の行にはプッシュとプルを設定しました。
すると下の行では第二カラムが左側に来たことが分かると思います。プッシュとプルでカラムの順番を入れ替えることができます。

オフセット

オフセットのサンプルソースを下に示します。

<div class="row">
 <div class="col m6 amber"><span class="flow-text">オフセットなし</span></div>
 <div class="col m6 offset-m4 green"><span class="flow-text">オフセット指定</span></div>
</div>

オフセット指定のしかたは、クラスに offset-m4 などのように offset- を頭に付けて指定します

サンプルは上下両行とも6カラム幅のサイズです。上の行はノーマル、下の行は m4 のオフセット指定をしました。

m4 なので4カラム分の空白が左側にセットされているのがわかります。

セクションと区切り線

セクションはコンテンツをまとめブロック単位にしたものです。
区切り線はコンテンツを分けるために用います。
以下にサンプルソースを示します。

<div class="divider"></div>
<div class="section">
 <h5>セクション</h5>
 <p>内容</p>
</div>
<div class="divider"></div>

サンプルではセクションの上下に区切り線を設置したものです。
区切り線は1ピクセルの線として表示されています。セクションは、1コンテンツ=1セクションという形で用います。

セクションの応用

それでは、セクションについてもう一歩理解を深めてみましょう。
以下サンプルを示します。

<div class="divider"></div>
<div class="row">
 <div class="col s4">セクションA</div>
 <div class="col s4 light-blue">セクションB</div>
 <div class="col s4">セクションC</div>
</div>
<div class="divider"></div>

1行に3つのセクションを横並びさせてみました。12分割を3で割り、それぞれのセクション幅は4カラムで均等にしています。
先程のサンプルと同様に上下に区切り線を入れています。
中央のセクションBには青の背景色を指定しました。

このようにセクションを横並びさせることもできます。
なお、このサンプルでは、それぞれのセクションの幅を均等にしましたが、勿論、s2/s8/s2 とすれば中央セクションのみを広い幅にする事もできます。

レスポンシブレイアウト

次にレスポンシブの動きの理解に進みましょう。

Materializeでは、自動的にレスポンシブデザインに対応しています。私たちが覚えておくべきはスクリーン・クラス・プレフィックス(s2やm4 などの s,m,l,xl)です。どの画面サイズの場合にどのようなレイアウトになるかを知っておく必要があります。

以下にレイアウト表を示します。

想定デバイススマートフォンタブレットノート
パソコン
デスクトップ
パソコン
プレフィックスsmlxl
画面幅
(ピクセル)
600px 以下601〜992px993〜1,200px1,200px 超
コンテナ幅90%85%70%70%

例えばプレフィックスが s の場合は 600px のデバイスで表示する際に有効となります。
これらグリッドシステムを活用して、デバイス毎に最適なレイアウトを組むことが可能となります。

それでは上記レスポンシブレイアウトを応用したサンプルを示します。

<div class="row">
 <div class="col s12 green"><p>s12</p></div>
 <div class="col s12 m4 l2 light-blue"><p>s12 m4</p></div>
 <div class="col s12 m4 l8 cyan"><p>s12 m4</p></div>
 <div class="col s12 m4 l2 teal"><p>s12 m4</p></div>
</div>
<div class="row">
 <div class="col s12 m6 l3 lime"><p>s12 m6 l3</p></div>
 <div class="col s12 m6 l3 light-green"><p>s12 m6 l3</p></div>
 <div class="col s12 m6 l3 orange"><p>s12 m6 l3</p></div>
 <div class="col s12 m6 l3 yellow"><p>s12 m6 l3</p></div>
</div>

このソースを組んだ場合、幅993px以上のデバイス(ノートPCなど=l)で表示すると下図のように表示されます。
下段の l3 が効いていることが分かります。二段目は l2/l8/l2 の指定です。

そしてタブレットなどの場合(幅601px以上=プレフィックス m)は下図のように表示されます。二段目の m4、三段四段目の m6 が効いています。幅はあくまで合計12カラムを超えないので m6+m6 までとなり、それを超えたオレンジ色と黄色の m6+m6 は四段目に配置されました。

次にスマートフォンなどの場合(幅600px以下=s)は下図のように表示されます。s12 が効いています。どの段も s12 に指定したので縦並びになりました。
横幅の狭いスマートフォンには最適な表示になります。

このようにMaterializeを使うことで、マテリアルデザインかつレスポンシブデザインを簡単に実装することが出来ました。

色指定のしかた(背景色)

背景色や文字色を指定する方法ですが、これも簡単でクラスを指定することで実現できます。以下サンプルを示します。

<div class="card-panel cyan accent-2">カードパネル</div>

サンプルコードの実行結果

このサンプルコードではカードパネルの背景色として「cyan accent-2」(シアン色の一種)という色を指定したものです。

materializeで指定可能な色の名称は下の通りです。ちょっと文字が小さいですがこういう感じということだけ覚えて戴ければ良いと思います。

色指定のしかた(文字色)

次にmaterializeで文字の色を指定する方法は、下記のサンプルコードのようにクラスに色の名称を記載することで可能です。

<span class="deep-orange-text text-darken-1">テキストの色を指定してみた</span>

サンプルコードの実行結果

このサンプルでは「deep-orange darken-1」(オレンジ色の一種)の色を指定していますが、背景色指定よりも、もうひと工夫必要で、”-text” や”text-“を付加しなくてはなりません。

「deep-orange darken-1」を文字色にしたい場合「deep-orange-text text-darken-1」という感じでハイフン+textの文字が必要です。ここらへん、ちょっと面倒ですね。

以上、materializeでの色指定のやりかたでした。マテリアルデザイン、意外とかんたんに導入できるんだなと思って戴ければ幸いです。
入門者向けの解説、まだまだ続きます。


Googleの2段階認証でドコモ・au・ソフトバンク等のキャリアメールが規制対象に

2019年12月1日より、Googleの2段階認証でドコモ・au・ソフトバンク 等の国内キャリアメールが使用不可になります。

これら国内キャリアのメールサーバは、いまだTSL等に対応しておらず平文で通信していることからセキュリティリスクが存在するので、グーグル社として2段階認証のセキュリティ確保のための措置と考えられます。

そもそも2段階認証はセキュリティ向上の為の仕組みなので、それに用いられるメールシステムが平文で通信するようでは意味がないわけです。

勿論、これら国内キャリアメール以外にもTSL通信非対応のメールサーバはネット上に存在しますが、流通メール数が格段に多いキャリアメールをBANすることで、よりよいセキュリティ確保が出来るという判断でしょう。

規制対象ドメイン

@ezweb.ne.jp
@docomo.ne.jp
@softbank.ne.jp

メディアの報道

Google公式発表


国会議員の資産を確認する方法

政治倫理の確立、不正防止を目的に、国会議員の資産が国民に開示されています。清く正しい政治には必要なことで、民主主義を採用している先進諸国に於いて政治家の資産状況の開示は世界的な常識となっていて、もちろん日本でもきちんと開示されています。

ただ、この開示情報はどうやって知ることができるのだろうかと思ったことはありませんか?そこで今回、再確認をしてみましょう。

まず国会議員と一言に言っても、我が国では参議院と衆議院の二院制となっていますね。それぞれ開示されています。

開示方法やその要領は法律に則ることになるので法律から考えてみると、
「政治倫理の確立のための国会議員の資産等の公開等に関する法律(平成四年法律第百号)」
で定められているのが分かります。

政治倫理の確立のための国会議員の資産等の公開等に関する法律 | e-Gov法令検索
電子政府の総合窓口(e-Gov)。法令(憲法・法律・政令・勅令・府省令・規則)の内容を検索して提供します。

そして、第七条を読むと、国会議員だけでなく、政令指定都市の市議会議員、県知事、市町村長も資産開示の対象であることがわかります。

第七条 都道府県及び地方自治法(昭和二十二年法律第六十七号)第二百五十二条の十九第一項の指定都市の議会の議員並びに都道府県知事及び市町村長(特別区の区長を含む。)の資産等の公開については、平成七年十二月三十一日までに、条例の定めるところにより、この法律の規定に基づく国会議員の資産等の公開の措置に準じて必要な措置を講ずるものとする。

では実際に、我々国民はどのように開示情報に辿り着けるのか?

衆議院の場合、ホームページでその方法が分かりやすく提示されていました。

衆議院議員の資産等報告書等の閲覧案内

閲覧場所に訪問すれば開示情報を見ることができるとのこと。閲覧場所は永田町の議員会館です。

衆議院第一議員会館
資産等報告書等閲覧室
東京都千代田区永田町2-2-1 地下1階  庶務部議員課内

閲覧できるのは原則、平日9時半〜17時半(12〜13時は休憩時間)です。

電車での行き方は、
千代田線・丸ノ内線で「国会議事堂前駅」(1番出口)もしくは、銀座線・南北線で「溜池山王駅」(5番出口)

地図は公式より引用させていただきます。

資産等報告書等閲覧室案内図

参議院の資産開示

https://www.sangiin.go.jp/japanese/annai/shisan.html

参議院の場合も衆議院と基本同じです。

参議院議員会館
東京都千代田区永田町2-1-1
地下2階 資産等報告書等閲覧室(資産公開室)

政治家の資産公開は、政治の適正化の一環で行われている制度です。有権者として政治の適正化に寄与することにもなるので、一度、閲覧に足を運ぶのも良いかも知れませんね。

閲覧はもちろん無料です。
議員会館に入館する機会もなかなかありませんから、貴重な体験になると思います。永田町周辺の観光のついでに立ち寄るのもオススメですね。


PostgreSQL でデータファイル格納ディレクトリまるごとバックアップ(上級者用)

PostgreSQL でバックアップする場合、通常は pg_dump コマンドを使います。今回は敢えて強引(?)にデータファイルごと根こそぎバックアップする方法をやってみます。

そもそもデータベースはデータファイルにのみ全情報があるのですから、Oracle だろうが SQL Server だろうが、データファイルさえ残っていれば何とかなるわけですから。

この記事の対象は、データベースの構造を良く知っている上級者向けと思ってください。初中級者の方にはあくまでも、それぞれ用意されているバックアップコマンドを使うことを推奨します。

さて本題の手順です

1.データベースファイルを格納するディレクトリを確認

psql に管理者権限でログインして SHOW data_directory を実行します。

$ psql -U postgres

postgres=# SHOW data_directory;
data_directory
——————————
/var/lib/pgsql/9.6/data
(1 row)

postgres=#

こんな感じで表示されます。上記の例では

/var/lib/pgsql/9.6/data

がデータフォルダです。勿論、環境によってディレクトリは異なります。

2.データベースを停止する

ディレクトリごとコピーする場合、必ずデータベース(RDBMS)を停止する必要があります。データベースを動かしながらコピーしたらぶっ壊れます

$ sudo systemctl stop postgresql

3.ディレクトリごとコピー(バックアップ)する

普通にコピーコマンドでディレクトリごとバックアップします。

$ sudo cp -R /var/lib/pgsql/9.6/data ~/backup_db

4.データベースを再起動する

バックアップ(コピー)を終えたらデータベースを再起動します。これですべて完了。

$ sudo systemctl start postgresql

このように至ってシンプル。なのに完璧なバックアップ。
但しRDBMSのバージョンが異なると動作しない場合があります。データベース構造まで熟知している上級者のあなたには理由はわかりますよね。

リストアする場合

逆にこのバックアップのリストア方法ですが、コピーしたディレクトリごと上書きすれば良いです。コピー作業前にデータベースを停止するのは当然ですね。

ちなみにバックアップ(コピー)先ディレクトリでそのまま動作させる事も可能です。

postgresql.conf の data_directory でデータディレクトリを指定してください。

$ sudo vi /var/lib/pgsql/9.6/data/postgresql.conf

data_directory = ‘/home/backup_db/data’ ←お好みのディレクトリ

この方法、実は PostgreSQL だけでなく、ほぼどんな RDBMS でもこんな感じで出来ちゃうので、一応知識として持っていると便利だったりします。


macOS版 IntelliJ IDEA 2019.2 の日本語入力不具合の対処法

 IntelliJ IDEA を 2019.2 にしてから、日本語入力でトラブルが頻発するようになりました。具体的には「ど」と入力しようとすると、ローマ字入力では do とタイプしないといけないのですが、d をタイプした瞬間に変換が勝手に確定されてしまい do と打つまで待ってくれないので漢字変換できない状態になるものです。

 一旦、テキストエディタに日本語で書いてからコピペすることで仮対応していましたが、コードを書く際にいちいち InteliJ IDEA とテキストエディタを往復するのはとてもストレスです。

 これでは堪りません、さすがにリサーチしてみるかと原因究明や対策を探してみたところ、JetBrains日本語公式ブログに対処法がアップされていました。こういうところ、JetBrains社 は頼もしいです。

 細かい手順は下にリンクを貼っておきますので、公式サイトを読んでいただくとして、この公式サイトでは2つの回避策が示されています。私がこの手順でやってみたところ、簡単な回避法の回避策1では何故か起動できませんでした。私の環境なのか原因不明ですが、とにかく起動さえしなくなったので、これではいけません。回避策2の方でやってみたところ、無事起動できるようになりました。

 そもそもこの日本語入力の不具合は毎回必ず発生するものではなく、何かのタイミングで発生していたので、これで解決できているのかは暫く使ってみるしかありません。不具合が発生しない事を祈るばかりです。

日本語公式サイトでの説明
https://blog.jetbrains.com/jp/2019/07/30/2025