投稿

2020の投稿を表示しています

OpenWrt での uHTTPd 設定

USB メモリースティックドライブを前提として、uHTTPd がそのマウントされた外部領域を使うように設定することにする。やったことは以下で、SSH で設定ファイルを直接編集して行なった。(参考 👉 uHTTPd Web Server Configuration)uHTTPd 用に /etc/config/uhttpd の option home を linux home パーティションのマウントポイント(/mnt/data)下に指定する。/www/luci-static, /www/cgi-bin/luci のコピーを /mnt/data 下の対応する場所に置くあとは、index.html を自前のものに変更するなりして、動作を確認した。デフォルトの index.html は、LuCI の管理画面である、/cgi-bin/luci にリダイレクトされるようになっているので、この index.html を別のものに変更してしまったとしても、直接 /cgi-bin/luci にアクセスすればちゃんと管理画面に入ることができるので、何も問題はない。CGIちなみに、/etc/config/uhttpd を見ると、PHP や Perl は cgi-bin 以外の場所でも実行可能なように設定できるようだが、Python ではできないようだった(設定してみても、無効のようだった)。その他試しに uHTTPd の代わりに Apache を入れようとしたが、正常に動かすことができなかった。現在(OpenWrt 19.07)では、NGINX の環境が整っており、自分の場合は uHTTPd はアンインストールして使わず、LuCI も含めて SSL 対応版の NGINX で使っている(👉 OpenWrt で NGINX と PHP 7(FPM)環境を整える)。

OpenWrt で NGINX と PHP 7(FPM)環境を整える

例えば WordPress をインストールするためには PHP 7 が Web サーバーと連携して使える状態(FastCGI)を整えておく必要がある。この文書では、WordPress のことはとりあえずおいておいて、一般的に OpenWrt に Web サーバーとして NGINX(SSL 版)を利用し、PHP 7 を FPM(FastCGI Process Manager)で連携する方法について記す。前提状況:USB メモリースティックドライブWWW 用のデータを置く場所として USB メモリースティックの外部ドライブを用意(👉 OpenWrt での USB メモリースティックドライブ)し、/mnt/data にマウントしていることを前提としている。LuCI もろとも Web サーバー(HTTPd)を SSL 対応 NGINX 化する以前の OpenWrt 18.x とは飛躍的に進歩して、19.07 では SSL 対応版の NGINX が opkg として用意されている(以前は自前で Linux ソースコードからモジュールをビルドする必要があった)のみならず、NGINX 版 LuCI がセットアップされている opkg すら用意されており、OpenWrt コミュニティの旺盛な活動を感じる(👉 LuCI on other web servers > LuCI on nginx)。 opkg update opkg install luci-ssl-nginx opkg remove uhttpdLuCI 用にデフォルトでインストールされている uHTTPd は不要になるのでアンインストールした。用意した USB の外部領域(/mnt/data)があるので、デフォルトの Web ルート(/www 以下)を /mnt/data/www/default 以下にコピー。 mkdir -p /mnt/data/www/default cp -rp /www/* /mnt/data/www/defaultそれに連動して /etc/nginx/nginx.conf の設定を変更して、Web ルートが /mnt/data/www/default を指し示すように修正する。ただし、元々の root オプションが http ブロック直下にあったのを、2 番目の ssl 用の …

OpenWrt での USB メモリースティックドライブ

イメージ
(公式ガイド:👉 Using storage devices)関連パッケージのインストール opkg install kmod-usb-storage opkg install usbutils opkg install block-mount opkg install gdisk opkg install f2fs-tools opkg install kmod-fs-f2fsUSB ドライバーは kmod-usb-storage のみusbutils はコマンド lsusb -t を使って USB メモリーが接続されているかどうかを調べるため(オプショナル)block-mount はコマンド block info を使ってパーティション情報を表示するため(オプショナル)gdisk はパーティション操作のため(後述)f2fs-tools と kmod-fs-f2fs が USB メモリースティック用のファイルシステムのためのドライバーgdisk によるパーティション操作今回は 2GB の USB メモリースティックを使い、そのうち 256MB を swap パーティションに、残り 1.6GB をデータ用パーティションにした。gdisk コマンドでデバイス(/dev/sd*)を指定して実行すれば、あとは対話形式でパーティションデザインを行う形となる。 Disk /dev/sda: 3915776 sectors, 1.9 GiB Model: Storage Media Sector size (logical/physical): 512/512 bytes Disk identifier (GUID): 257F8D9E-B548-49DA-AC35-DF64271AA16E Partition table holds up to 128 entries Main partition table begins at sector 2 and ends at sector 33 First usable sector is 34, last usable sector is 3915742 Partitions will be aligned on 2048-sector boundaries Total free space is 2014 secto…

複式簿記システムの構築

イメージ
[STEP 1] Google SpreadSheets に蓄積した仕訳を SQLite + Python で処理するシステムの確立個人的に青色申告による複式簿記が必要なので、そのための必要十分なシステムを構築する。
(市販の会計ソフトは決して「必要十分」ではなく、単なる「十分」(つまり不必要な余計な要素を過剰に備えている)ので、論外。)おおまかなイメージとしては:逐次発生する会計イベントは人手によって「仕訳」してデータを入力し、1 年を通じてデータベース(仕訳帳)に蓄積する年間の蓄積された仕訳帳に基く年度末の「総勘定元帳の集計」と「決算整理仕訳」と「損益計算書の作成」は、Python プログラムで自動化する。具体的には:仕訳帳は Google SpreadSheets を利用して家族で共有集計・決算整理・損益計算は、Google SpreadSheets から TSV をダウンロードして、SQLite にインポートし、Python で SQL を駆動してそれらの定型化された作業を行い、結果を複数の TSV としてアウトプットする。最後にそれら TSV を単一の .xlsx ファイルにマージして一つの総勘定元帳として得る。仕訳帳のスキーマ(Google SpreadSheets) create table Journal ( id integer primary key, parent_id integer, date date, amount integer, debit text, credit text, description text ); ID は Google SpreadSheets 上では、単に「行番号+1」の計算式を使っただけのもの。親IDは、借方 or 貸方が諸口(複数科目)となる場合の「一対多」または「多対多」の仕訳のために用意した要素。グルーピングするエントリーのIDを親ID として指し示す。通常の一対一の仕訳「ID」「日付」「金額」「借方科目」「貸方科目」を示し、「親ID」は NULL一対多(または多対多)の仕訳の親エントリー「ID」「日付」を示し、「親ID」は NULL
「金額」「借方科目」「貸方科目」は両方とも「諸口」の場合は NULL だが、片方が単一の場合は、そのままその科目…

実家ネットワークの微修正

イメージ
ゲートウェイルーターの置き換え』でゲートウェイルーターを OpenWrt 化した R7800 に置き換える計画は無事完了した。これまで、ホームゲートウェイ直下の実質 DMZ である 192.168.0.0/24 と、ゲートウェイルーター(GateKeeper)の後ろにあるプライベート LAN の 192.168.1.0/24、VPN の仮想ネットワークの 192.168.255.0/24 という風に IP を割り付けていた。しかし、これだと、これら全体の 192.168.0.0/16 を DMZ と LAN に再分割しようとする場合に、LAN にはプライベート LAN と VPN をグルーピングしたいのだが、サブネット的に無理である。192.168.0.0/24 と 192.168.1.0/24 は隣り合っているので、192.168.0.0/23 としてまとめることは可能だが、隔離したいのは DMZ 用の 192.168.0.0/24 の方なので、意味がない。 そこで、プライベート LAN を 192.168.1.0/24 から 192.168.128.0/24 にすることで、192.168.0.0/16 を 192.168.0.0/17 と 192.168.128.0/17 で真っ二つに分けると、前者には DMZ 用の 192.168.0.0/24 が、後者には プライベート LAN 用の 192.168.128.0/24 と VPN 用の 192.168.254.0/24 が含まれるという風に上手くサブネットでデザインできる。(※ ちなみに、VPN 用を192.168.255.0/24 から 192.168.254.0/24 にするのは、単なる気まぐれである。何となく、偶数に揃えたかっただけという)192.168.0.0/1711000000.10101000.00000000.00000000~11000000.10101000.01111111.11111111
すなわち、192.168.0.0~192.168.127.255192.168.128.0/1711000000.10101000.10000000.00000000~11000000.10101000.11111111.11111111
すなわち、192.168.128.0~192.168.255.…

VPN から LAN 内のブリッジ(Aterm WG1200HP)にアクセスできない

イメージ
WireGuard VPN の仮想ネットワーク(192.168.255.0/24)から、接続先の LAN(192.168.1.0/24)内でブリッジ運用している Aterm WG1200HP(192.168.1.254)にアクセスできない。クイック設定 Web だけでなく、PING も反応なし。一方、このブリッジの向こう側にあるホストについては PING 等に応答は戻ってくる。OpenVPN で TAP(ブリッジ)接続すると、WG1200HP に問題なく接続できる。TUN(ルーター)接続だとやはり駄目。要するに、サブネット(セグメント)が異なると駄目なようだ。単にブリッジ運用しているだけなので、VPN からアクセスできなくとも大して支障はないのだが、ともかく気持ち悪かった。調べてみると、「送信元検証機能」が原因だった。(参考 👉 へっぽこ薬剤師のチラシの裏) 「使用しない」にして問題は解消、 VPN(別のサブネット)からでもクイック設定 Web と PING が ok となった。はっきり言って、NEC のマニュアルの表現がおかしい。送信元を詐称した通信を遮断する送信元検証機能により、LAN側、WAN側からのアクセスを監視し、送信元のアドレスが不正なパケットを廃棄します。別に「不正」じゃなくても、敵味方関係なく無差別攻撃しとるやんけ!ユーザーを守る頼もしいヒーローのふりしてカッコつけたりしないで、「単純バカだから、サブネットが異なるのは、何も考えないでパケットを DROP」とでも書けばいいんだよ。こんなだから、ガラパゴス化して、国内トップでも国際競争力ゼロなんだよ……。

クレジットカードの海外事務手数料

最近(2020-07-29 時点)、あちこちで Mastercard / VISA 系の海外事務手数料の値上げが発生しているようなので、まとめてみた。(税込)Mastercard / VISA楽天1.63参照エポス1.63参照ポケット(Mastercard)1.90参照エムアイ2.00参照VIEW2.20参照セゾン2.20参照Yahoo!2.20参照JACCS2.20参照Orico2.20参照三井住友2.20参照MUFG2.20参照d2.20参照ポケット(VISA)2.20参照Gold Point +2.20参照セディナ2.20参照JCBVIEW1.60参照楽天1.60参照Yahoo!1.60参照JACCS1.60参照Orico1.60参照ポケット1.60参照セゾン1.60+0.55参照セディナ2.20参照AmEx楽天2.00参照セゾン2.00参照エムアイ2.00参照

OpenWrt での NTP 設定

イメージ
System 設定Timezone は Asia/Tokyo にした。 NTP サーバー候補ntp.nict.jpntp.jst.mfeed.ad.jp0.openwrt.pool.ntp.org

OpenWrt での SSH 設定

イメージ
Wi-Fi の有効化作業に次いで、この SSH の有効化作業もインストール後に最優先となる作業だ。OpenWrt の設定・管理は LuCI だけでは作業が完結させることができず、SSH でログインして CUI 環境で作業しなければならないこともある。そのままでもパスワード認証で SSH にログインできるが、面倒なので、認証用の公開鍵を登録しておいた。System > Administration で(まだパスワードを設定していない場合にはルーターのパスワードを設定し、)SSH 用の公開鍵を登録しておく。 また、WAN に直接繋がっておらず LAN 内部からしかアクセスできないルーターならば気にしなくてもいいかもしれないが、(DMZ に設置したり、公開用の WWW サーバーを兼ねている等の)WAN 側からアクセス可能なルーターの場合は、Dropbear の設定で Interface を LAN のものに絞っておくことによって、SSH が LAN 内部からしかアクセスできないようにした方がいいだろう。一方、公開鍵を登録した場合、パスワード認証の方を無効化することも可能だが、上記設定により LAN 内部からしかアクセスできない状態にしているため、それほどセキュリティを心配する必要がないと考え、(Dropbear の設定で)パスワード認証を無効化するようなことはしていない。むしろ現状では、設定を色々といじっていて公開鍵認証でログインができなくなったりした場合に、パスワードで SSH ログインできないと面倒なことになるというリスクの方が大きい。

OpenWrt での Wi-Fi 設定

イメージ
OpenWrt をインストールしたら、まず最初に手を付ける作業が Wi-Fi(Network > Wireless で該当デバイスを Edit)。初期状態では Wi-Fi が無効化されているため、Wi-Fi を有効化しておかないと、有線 LAN で直結していないノート PC(Macbook)から作業できない、というのが個人的には決定的な理由。設定自体は特に難しくはなく、基本的には 2.4G 帯と 5G 帯それぞれについて、暗号化キーを決め、SSID や周波数チャンネル、出力強度をカスタムしたりする程度。最後に Enable して Save & Apply する。Device 設定5G のチャンネルは auto で問題ないと思うが、2.4G の方は auto にすると、12ch 以降が選ばれてしまう場合があり、受信側端末によっては 11ch までしか対応していないこともあるので、手動で 1~11ch を選んだ方が良い。 あと、出力について、OpenWrt や DD-WRT ではパブロフの犬のように「出力が 10mW を超えると日本で違法どーだこーだ」の話になりやすいようだが、物好き者「dd-wrtの電波出力調整に関して」によると:電波法でいう10mWっていうのは、10mW/MHzです。
このMHzというのは帯域幅のことですので通常のWi-Fiは1chにつき20MHz幅です。つまり10x20=200(mW)までは日本の電波法の許す上限になります。28mWも63mWも可愛いものです。アンテナを4dBi程度のものにしてもまだまだ余裕があります。日本のホテルのロビーや公共施設なんかに備えられてるWi-Fiはもっと強いですよ。ちなみに特小は1000mWまで無免許で使えますがWi-Fiは特小に含まれてません。40MHz幅や80MHz幅のチャンネルを広く使って速度をあげる製品も出てますが、文字通りの解釈ですと10x40=400(mW)とか10x80=800(mW)がOKになりそうなものですが、総務省も馬鹿ではないので、40MHz幅の場合は5mW/MHz、80MHz幅の場合は2.5mW/MHz、160MHz幅の場合は1.25mW/MHzと明記してます。それなら最初から200mWまでって書けば良いのにと思いますけど。ということらしい。例えば Buffalo WZR-HP-…

板読み投資術

坂本慎太郎『朝 9 時 10 分までにしっかり儲ける板読み投資術』(東洋経済新報社、2017-07-27)年収 1 億円ディーラーの投資術板読みの基本の基本板読み投資の基本テクニック銘柄選びの基本テクニック板読み投資の実践テクニック最後はメンタル──テクニックよりも大切なこと第 1 章:年収 1 億円ディーラーの投資術「板が薄いから誰も売ってこないんだよ」
目から鱗とは、まさにこのことです。
私は、いつでも逃げられるように買い板の厚い銘柄を選んでトレードしていましたが、この先輩は、「買い板が薄くて逃げにくい銘柄だから、誰も売らないので株価が安定している」というロジックで、わざわざ買い板の薄い銘柄を選んでいたのです。ときどき成行の投げ売りをしてくる投資家もいますが、それで株価が下げたときには、単なるイレギュラーによる売りだから、買えばいいというスタンスなのです。この話を聞いたとき、これは株式投資の縮図だと思いました。
やはり、イレギュラーによって生じた株価のブレを取りに行くのが、トレードの基本です。そう考えると、この先輩のトレードは、究極の板読みではないかとも思えたものです。
何しろ、いまはここの買い板が無いけれども、いずれ株価が下がれば自然のうちに買い板が出てくるという考え方に基づいて、それに先回りしてポジションを取っているのですから、これは上級の板読みトレードです。したがって、この先輩は常に 30 銘柄、50 銘柄というように、実に幅広い銘柄に分散投資していました。
たくさんの銘柄に買いを入れていくので、この先輩はまだ板がほとんど出ていないような、朝の 8 時くらいから、それこそ数百銘柄の板を見ていました。
そして引けた後、もう一度、数百銘柄の板を見ているのです。
こうして数千円、1 万円という小さな利益を積み重ねて、1 日の利益を生み出していました。第 2 章:板読みの基本の基本約定ルール(優先順位)成行より高い買い指値、より安い売り指値より早い注文強い板・弱い板買い板の厚い板を選ぶのは、「確実に上がる」からではなく、いち早く他の買い勢に売り付けて逃げるため。上がる目算の方は、売り板の薄さで選ぶ。この双方での期待値的なイレギュラー度の高さを板の「強さ」と捉えているようだ。板に表れる投資家機関投資家ダラダラと続く儲けたいアルゴリズムスキャルピング高速売買で板情報…

WireGuard の OpenWrt での運用

イメージ
VPN と言えば、以前は OpenVPN だったが、最近のトレンドは WireGuard(言うなれば、Apache に対する nginx のような?)。先日まで OpenVPN の設定を徹底的にやり込んで納得行く状態が確立できたばかりなので、引き続き、VPN のこと自体にある程度フレッシュな知見がある今のうちにと思って、手がけてみることにした。ソフトウェアR7800(hnyman ビルド)では、デフォルトで wireguard-tools、kmod-wireguard、luci-app-wireguard、luci-proto-wireguard がインストールされていたので、wireguard のみ、LuCI から追加でインストールした。鍵ペアの用意 mkdir -p /etc/wireguard cd /etc/wireguard wg genkey | tee privatekey | wg pubkey > publickey/etc/wireguard/privatekey と /etc/wireguard/publickey が生成される。さらに、おまけとして presharedkey も使う場合には: wg genpsk > presharedkey/etc/wireguard/presharedkey を生成する。以上のファイルのパーミッションを念のため、600 にしておく。 chmod 600 *keyネットワークインターフェースの追加Network > Interfaces で WireGuard 用の論理ネットワークインターフェースを追加する。プロトコルを WireGuard VPN にするのがポイント。名前は wg0 にしておいた。 OpenWrt では、LuCI では専用のメニューが用意されている OpenVPN と違い、WireGuard はこの Network の Interface としての設定ですべてを管理するようになっているようだ(つまり /etc/config/network に記載される)。Private Key の欄に /etc/wireguard/privatekey の内容をコピー&ペーストListen port: 51820(標準のポート番号を使うことにした)IP Addresses: 192.168…

OpenWrt で Adblock

イメージ
OpenWrt を運用している R7800 用の hnyman ビルドでは、Adblock がデフォルトでバンドルされているので、とりあえず enable して動かしていたが、本当にブロックされているのかよくわからなかったので、DNS Report(デフォルトでは無効)を有効化してみた。Please note: this needs additional 'tcpdump-mini' package installation and a full adblock service restart to take effect.と、書かれているように、tcpdump-mini をインストールした上、service adblock reload する必要があった(※)。※ OpenWrt ルーター自体を再起動した場合にも、一度 service adblock reload しないと、adblock が始動しないようなので注意。 現時点ではデフォルトの adaway、adguard、disconnect、yoyo に加えて、Youtube と、日本用のフィルターとして豆腐フィルタ豆腐フィルタのセットアップを参考にして行った。レポートを見ると Netflix 関係のものがバンバンブロックされているようだ。これは、4K 放送用チューナー(PIX-SMB400)が何やら四六時中動いているせいだ。それでも、5ch に貼られているような下品な広告の表示が消えているので、役に立っているのがわかる。

楽天 UN-LIMIT の MTU、MSS サイズ

イメージ
楽天 UN-LIMIT の MTU サイズが調べてみたら 1340(MSS は 1300)だった: 放っておいても macOS が自動で上手くサイズを調節しているとは思うが、念のために手動で 1340 に設定しておいた: ──が、公衆 Wi-Fi など、楽天 UN-LIMIT のテザリング以外の他の環境でも使うわけなので、やはり自動に戻した。

OpenWrt の OpenVPN(サーバー)についての包括的メモ

イメージ
一応、公式に基本ガイド(👉 OpenVPN Basic)があるが、「OpenWrt の OpenVPN 基本ガイドの徹底解析」で先日述べたように何かと不満があるので、自分用を兼ねて包括的なメモを記しておくことにする。情報の鮮度的には、古い方のルーター(OpenWrt v18.06.2)が OpenVPN v2.4.5、新しい方のルーター(OpenWrt v19.07-SNAPSHOT)が OpenVPN v2.4.7 である。また、クライアント側は、macOS の Tunnelblick を使用している。ソフトウェアopenvpn-openssl と openvpn-easy-rsa(と luci-app-openvpn)を LuCI からインストールした。PKIPKI については基本ガイドや巷の情報でほとんど十分だと思うので基本的に割愛する(👉 Easy-RSA 3 QuickstartEasy-RSA 3)。PKI 用の easyrsa コマンドは /etc/easy-rsa で実行し、PKI のパスが /etc/easy-rsa/pki となりその以下に各ファイルが配置されている。ただし、openvpn コマンドで作成する tlscrypt.key のみ、/etc/openvpn に置いている。 cd /etc/easy-rsa easyrsa init-pki easyrsa build-ca nopass easyrsa build-server-full openvpn-server nopass easyrsa build-client-full openvpn-client nopass easyrsa gen-dh openvpn --genkey --secret /etc/openvpn/tlscrypt.keyTAP サーバーとして動かす場合TAP サーバーとして設定するのは特に難しくなく、既存の情報で何か不足するようなこともない。tap0 の準備OpenVPN 自体の設定に一所懸命になっていると、この作業を思わず忘れてしまっていて動かずに原因がわからずに悩む場合があるが、仮想のものではあるとは言っても、まずは tap0 というインターフェースを用意してアサインしないことには、外部から何ら情報を受け取ることができない。LuCI の N…

OpenWrt の OpenVPN 基本ガイドの徹底解析

イメージ
OpenWrt 公式の OpenVPN の基本ガイド(👉 OpenVPN Basic)について。(日本人にとっては英語情報であるということ以前に、たとえネイティブであってとしても)ただ単に設定方法のシェルコマンドが掲載してあるだけで、ほとんど説明がされていないので、今回はかなり細かく解析して検証してみたいと思う。ソフトウェアのインストール opkg update opkg install openvpn-openssl openvpn-easy-rsaこれは一目瞭然だと思うが、openvpn-openssl と openvpn-easy-rsa パッケージをインストールしているだけ。LuCI からアプリをインストールするのと何ら違いはない。 openvpn-openssl が OpenVPN サーバー本体。openvpn-easy-rsa は証明書と鍵を生成するための認証局用のプログラム(easyrsa コマンドを使えるようにする)。この OpenWrt ルーターで証明書・鍵を直接発行せずに、他の PC 等で別途用意した証明書・鍵をルーターに持ってきて使用する場合には、openvpn-easy-rsa の方のインストールは必ずしも必要ではないのかもしれない。証明書・鍵の発行これだけが openvpn-easy-rsa に関する作業で、OpenVPN 本体とは直接関係がない、下準備に関する話ので、先に説明を済ませておくことにする。 easyrsa init-pki easyrsa gen-dh easyrsa build-ca nopass easyrsa build-server-full server nopass easyrsa build-client-full client nopass openvpn --genkey --secret /etc/easy-rsa/pki/tc.pem各コマンドの意義は原文のコメントにある通り:Remove and re-initialize the PKI directoryGenerate DH parametersCreate a new CAGenerate a keypair and sign locally for a serverGenerate a keypair and sign locally for…

iTunes と macOS Catalina (10.15) と QNAP の問題

イメージ
これまで長い間 QNAP の NAS と Mac を使っていながら、iTunes を使ったことがなかった。自分が全然 iTunes で音楽を聴くというような行動スタイルがなかったからだ。ところが、家族が Mac で NAS に取り込んだ音楽を聴けるようにする要請があり、今さら、QNAP の NAS を iTunes サーバー化してみようかということになった。元々、QNAP が iTunes にも対応しているということは管理画面でも知っていたが、調べてみると、たった 1 ページの説明で済む簡単な作業のようだった。 ところが、iTunes Server を有効化して、macOS (Catalina) のミュージック.app から QNAP 上の iTunes サーバーが見えるようになるまでは簡単にできたのはいいのだが、NAS 上のアルバムを選択しても、再生ができない。調べてみると、macOS Catalina (10.15) から新しくなったミュージック.app の仕様の変更が原因で、古い DAAP(Digital Audio Access Protocol)に対応しなくなったため(プロトコルのメッセージ中の「:」が「@」に変更されているとか)。原因はそれなのだが、悪いのはむしろ、とっくの昔に開発が停止した古い DAAP 用のサーバーアプリ(Firefly)のままで放置している QNAP の怠慢である(同じ台湾メーカーの Synology も似たりよったりな状況らしい)。Firefly の後継の forked-daapd にとっくの昔にリプレースしておくべき話だという。Docker で forked-daapd を入れる(Docker)そこでどうにかする方法としてネットに出ているのが、Docker を使って forked-daapd を入れてしまうという方法。ところが、Docker を入れられないモデルの NAS の場合はどうしようもない!そう、うちの QNAP の NAS、HS-210 がそうだ。ふざけんな QNAP!macOS Catalina に iTunes.app を入れる(Retroactive) 仕方がないので、以前の iTunes.app を入れることで、当面の時間稼ぎをすることにした。Retroactive 1.8 で一番新しい iTunes.app を…

R7800 OpenWrt(hnyman ビルド)のファイアーウォールの変更箇所

イメージ
ゲートウェイルーターの置き換え計画の下、新しく入手した NetGear R7800 のファイアーウォール設定を、初期状態から変更した箇所を解説。※原則として /etc/config/firewall を直接編集するのではなく、LuCI の GUI を通じて設定しており、以下に掲載する Traffic Rules は、その GUI 操作による結果が反映されたものである。 デフォルト設定 config defaults option syn_flood '1' option input 'ACCEPT' option output 'ACCEPT' option forward 'REJECT' 変更せず。lan ゾーン config zone option name 'lan' list network 'lan' option input 'ACCEPT' option output 'ACCEPT' option forward 'ACCEPT' 変更せず。wan ゾーン config zone option name 'wan' list network 'wan' list network 'wan6' option input 'REJECT' option output 'ACCEPT' option forward 'REJECT' option masq '1' option mtu_fix '1'「option mtu_fix '1'」を削除。これは WAN 側がモデムを介したプロバイダー側ネットーワークに直結しているケースを前提とした設定のものと思われ、実家の LAN 環境での LAN 間に設置する GateKeeper として運用するこのルーターでは不要。フォワーディング設定 config forwarding optio…

need, require, want 等の目的語となる動名詞

My car needs to be repaired.My car needs being repaired.My car needs repairing.👉「動名詞と TO-不定詞の使い分け」で述べたように、これもやはり、動名詞と to-不定詞の根本的違いの観点から理解すれば特に不可解なことはない。1. My car needs to be repaired.本質的に to-不定詞は M であり、need は自動詞として存在するから、意味上の主語は SV の S と同じである。従って to-不定詞句は受動態で表現することになる。2. My car needs being repaired.動名詞句 being repaired は他動詞 need の目的語(O)である。S は O に他動詞を介して働きかける関係であるから、O の意味上の主語が my car となることは S と O が一致することとなり、他動詞の原理的に有り得ない。つまり、意味上の主語は S の my car 以外の他者を意味しているので、being repaird という受け身ではなく repairing という能動表現が適切である。ちなみに、being repaird とすると、受動表現ではなく、my car 以外の他者を意味上の主語とする進行形表現となってしまう。3. My car needs repairing.要するにこれは My car needs someone('s) repairing. の someone が不特定の人物なので明示せず省略された表現と考えれば良い。もちろん、repair する人物が特定している状況においては当然、My car needs the mechanic's repairing. という形の表現となるだろう。

動名詞と to-不定詞の使い分け

動詞によって目的語に動名詞を取る場合と to-不定詞を取る場合、両方を取る場合がある。動詞+動名詞動詞+to-不定詞両方(意味は同じ)両方(意味が異なる)このような分類を受け容れると、結局はそれぞれの動詞群を暗記するしかなくなる。動名詞と to-不定詞の根本的な違いで理解するならば、そのような必要はなくなる。1. 動詞+動名詞ex. avoid, deny, enjoy, finish, mind, stopこの場合、本質的に動詞は他動詞であり、SVO の O として動名詞が存在する。なので、O の具体的存在感が重視される。2. 動詞+to-不定詞ex. afford, expect, hope, pretend, wishこの場合、本質的に動詞は自動詞であり、SVM の M として to-不定詞が存在する。なので、SV によって叙述が一応完結し、to-不定詞は付加的情報としての漠然とした曖昧模糊とした存在感となる。3. 両方(意味は同じ)ex. begin, continue, like, start日本語に訳す場合に同じ表現になるというだけで、本当は違うことになる。4. 両方(意味が異なる)ex. forget, remember, regret, stopSVO か SVM かの違いが、「過去〜現在」の具体性か、「未来」の漠然性か、という違いを生むことになる。要するに 4 ケースに分けてそれぞれの動詞群を暗記するようなことをする必要はなく、単に、「動詞+動名詞(SVO)か、動詞+to-不定詞(SVM)か」ということを理解していれば良い。

動名詞の意味上の主語

Do you mind my smoking?Do you mind me smoking?動名詞の意味上の主語が、「述語動詞の目的語との混同で目的格(この例では me)となる場合がある」という説明がよくされるが、間違っている。後者の smoking は動名詞ではなく、分詞であり、目的語 me を修飾する形容詞である。名詞と形容詞の区別は極めて初歩的な物事のはずだが、それができていない場合は、たとえ英語の専門教育を受けていて教育に携っているような人であっても、解説の方は信用してはならない。ただ、その道の情報について博識だというだけの話。私の喫煙行為を気にしますか?喫煙する私のことを気にしますか?そもそも、より本質的なことを言うと、「動名詞」なんて分類もおかしな話で、あくまでも分詞、そのうちの名詞的用法に過ぎないわけなのだが。

疑問詞+to-不定詞

I don't know what to do with him.特別視する必要はなく、単なる名詞+不定詞(形容詞的用法)である。彼と一緒にするべき何か(を、私は知らない)要するに疑問詞 what はここでは名詞である。

m3u8 ファイルをダウンロードして ffmpeg で MP4 に変換・結合

.m3u8 形式の動画ファイルを公衆 Wi-Fi 環境でダウンロードして、後で部屋でゆっくり観ることができるようにする要請が生じたため、調べてみた。.m3u8 ファイル自体をダウンロードするFirefox 版の動画ゲッターを使った。動画の視聴を始めると、プラグインが .m3u8 を認識し、.m3u8 ファイルをダウンロードできるようになる。動画ゲッターでは .m3u8 ファイルの中身の .ts ファイルもダウンロードできるが、そこまでする必要はない。もちろん、面倒臭くなければ、ページの HTML ソースを直接見て、該当すると思われるプレイリストの .m3u8 を含む URL を抜き出してしまえば、動画ゲッターを使うまでもない。動画ゲッターで取った .m3u8 に記載されている URL が相対 URL だったりするなど、場合によってはこちらの方が手っ取り早い場合もある。動画ゲッターでダウンロードした .m3u8 の中身 #EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1500000 https://???.cloudfront.net/???/???.m3u8 #EXT-X-I-FRAME-STREAM-INF:BANDWIDTH=1500000,URI="https://???.cloudfront.net/???/???_iframe.m3u8" 動画ゲッターでダウンロードした .m3u8 ファイルの中身の https://???.cloudfront.net/???/???.m3u8 のアドレスを ffmpeg コマンドの入力ファイルとして使った。ffmpeg で .m3u8 ファイルから MP4 に変換・結合するffmpeg を使うのがシンプルかつ強力なので、Homebrew で ffmpeg をインストールした。インストール brew install ffmpegffmpeg コマンド ffmpeg -protocol_whitelist "file,crypto,http,https,tcp,tls" -i ???.m3u8 -c copy -bsf:a aac_adtstoasc out.mp4m3u8 の中身である断片化された多数の .ts ファイルのダウンロー…

GIMP の Python-Fu でウォーターマークの自動付加

イメージ
100 個近くの一組のファイル画像群のウォーターマークを一斉更新する必要が生じたので、この機に GIMP の Python-Fu を使ってみることにした。エラーがない状態でないと、Python-Fu スクリプトとしての認識自体がされない。Python-Fu スクリプトとして認識させるために、一定のフォーマットを整える必要がある。Python 2.x に基いているようなので、Unicode の扱いや str.format など 3.x と違う点に留意しなければならない。macOS では ~/Library/Application Support/GIMP/2.10/plug-ins に置く。上述のように、そもそもデバッグが不可能なので、スクリプトとして正常に認識されるフォーマットのスケルトン状態から一つ一つの機能を確実に実装して確認していくやり方でスクリプトを完成させていくのが適切な開発手法だろう。使える機能(pdb.*)のリファレンスはヘルプ > プロシージャーブラウザーにある。 # -*- coding: utf-8 -*- from gimpfu import * WATERMARK = 'https://www.scaredeer.com' def watermark(infile, outfile): pdb.gimp_context_set_foreground((255, 255, 255, 255)) # RGBA image = pdb.gimp_file_load(infile, 'background') pdb.gimp_image_scale(image, 350, 600) # 縮小 background = pdb.gimp_image_merge_visible_layers(image, EXPAND_AS_NECESSARY) pdb.gimp_rotate(background, 0, pi) # 180°回転 text_layer = pdb.gimp_text_layer_new(image, unicode(WATERMARK, 'utf-8'), 'Arial Bold', 18, 0) p…

R7800 OpenWrt(hnyman ビルド)のファイアーウォールの初期設定

イメージ
OpenWrt は fw3 を使っている。fw3 では iptable を直接いじるのではなく、設定ファイル(/etc/config/firewall 等)から一連の iptable を生成して、それを netfilter に渡す。netfilter に渡される iptable 自体はかなり複雑でユーザーが直接いじれるものではなくなっている。従って、fw3 に渡す設定ファイルの方を扱うことを考えればよく、UCI や LuCI で CUI/GUI を通じて操作するのも、設定ファイルの方である。 デフォルト設定 config defaults option syn_flood '1' option input 'ACCEPT' option output 'ACCEPT' option forward 'REJECT' グローバルに適用されるデフォルト設定(👉 Defaults)。通信のルーター自身への出入は許可し、通過は拒絶する。syn_flood プロテクションを on。lan ゾーン config zone option name 'lan' list network 'lan' option input 'ACCEPT' option output 'ACCEPT' option forward 'ACCEPT' lan のゾーン設定(👉 Zones)。lan 側インターフェース(lan)をこのゾーン(lan)に割り当て、全ての通信を許可。wan ゾーン config zone option name 'wan' list network 'wan' list network 'wan6' option input 'REJECT' option output 'ACCEPT' option forward 'REJECT' option masq '1' option m…

SyntaxHighlighter から Prism へ移行

プログラムのサンプルコードの表示用のツールを SyntaxHighlighter から Prism へ移行した。このサイト(www.scaredeer.com)は Blogger で運用しており、Blogger の記事・ページとして生成されるファイル以外に、自分で任意のファイルを置けず、当然、Prism 用のファイル(prism.css と prism.js)も設置できない。仕方ないので、DNS の設定でサブドメイン www2 の A レコードを追加して、別サーバー(nginx で運用)を用意し、そこに設置した Prism 用のファイルをこの Blogger から指し示すようにして運用している(👉 Blogger と独自ドメインの設定)。Blogger のテーマの HTML のカスタム箇所 <head> ... <link href='https://www2.scaredeer.com/prism/prism.css' rel='stylesheet'/> </head> <body> ... <script src='https://www2.scaredeer.com/prism/prism.js'></script> </body>

Favicon Generator

イメージ
Favicon Generator (realfavicongenerator.net) を使って SVG 画像から各種 favicon とそれ用の head 内記述用タグを自動生成できる。 今回は、Blogger サイト用の favicon を生成して、Blogger の外部サイト(www2.scaredeer.com)を用意してそこに各種の favicon データを置いてみた(👉 Blogger と独自ドメインの設定)。Blogger の favicon ガジェットを使うと、自動で 16x16 に圧縮された物凄く汚ないアイコン画像しか使えないからである。以下、Blogger のテーマの HTML を修正するわけだが、その場合の注意点:各タグが閉じられていないので、タグの最後の > の直前に / を入れて /> の形式にしておく必要がある。head 内記述用タグの挿入する位置は CSS 定義よりも前にした方が良い(自分はテーマ HTML の viewport 定義と title の間にした)。そうしないと、meta theme-color が反映されなかった。cf. This value is used by the user agent to draw the background color of a shortcut when the manifest is available before the stylesheet has loaded.生成される manifest のファイル名が web.manifest となっているが、これは json ファイルなので、manifest.json にファイル名を変更して Web サーバー側で .json ファイルとして適切に MIME が認識されるようにした。これに伴って、head 内記述用タグの manifest のリンク先も修正した。ついでに manifest の中のエントリーとして description の情報も補っておいた。head 内記述用タグmanifest.json { "name": "ししおどし", "short_name": "鹿威し", "description&q…