投稿

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

縁起説

アッシジ長老がサーリプッタ長老に語ったとされる句:Ye dhammā hetuppabhavā,
tesaṃ hetuṃ Tathāgato āha
tesañca yo nirodho;
evaṃvādī Mahāsamaṇo.なぜか「諸法(事象・現象)が縁によって生じる」と解釈され、いわゆる「縁起説」として定着している。仏教の最も基本的な思想とされているが、この句の解釈は実は違うのではないか?Ye dhammā は Tathāgato āha に係っているだけで、実質は hetuppabhavā, tesaṃ hetuṃ, tesañca yo nirodho と(四諦のうちの)三諦を言ったに過ぎない。「Ye dhammā Tathāgato āha」は単に、「如来が語られたこの法は」と言っていて、「方法(dhammā)」という単語に、事象・現象などと多義的な解釈を持たせて、何やら大げさな神秘性を帯びた体系に、仏教の位置付けを飛躍させる必要はなかったのではないかと思う。hetuppabhavā は「原因から生まれる諸々の(複数形)もの」tesaṃ hetuṃ は「その原因(単数形)」、tesañca yo nirodho は「それら(原因から生まれた諸々のもの)が消滅するところの(原因に係る)」つまり、全体を訳すとこうなる。如来が語られたこの法というのは、
(一つの)原因から生じた諸々の結果(複数)と、それらの原因(単数)、
(その原因はまた)諸々の結果を消滅させる原因でもあるところのもの。
それ(その方法)を大沙門は説かれた。結果が複数で、それら複数の結果の原因となっているものが単数であるというのが一つのポイントである(参考)。そのように、神秘性の方向性なしに素直な話として解釈してみれば、その前後のコンダンニャ長老、サーリプッタ長老、モッガラーナ長老らの、最初に正見を得た時の常套句である、「生じるものは、滅する性質の云々」とイマイチ訳のわかったようなわからないようなセリフも、本来はどういうものであったかどうかが見えてくる気がする。つまり:「諸々の結果を生じている一つの(大元となる)原因がわかれば、それは反対に諸々の結果を一挙に消滅させる鍵ともなるわけだ」そういうやりとりだとすると、四諦→コンダンニャ長老の常套句、アッサジ長老の概説→サーリプッタ長老・モッガラ…

日商簿記 3 級

イメージ
今日、第 152 回の日商簿記 3 級試験を受験してきた。自分は、商業高校出身でも、経済・商学系の大学出身でもない門外漢の理系人間。ゼロからの完全独学独習。勉強期間は 2 ヶ月足らず。解答時間は 35 分程度だった。満点狙い。3 級はおそらく、商業高校の生徒なら、多くが在学中に 2 年生くらいの時に(高得点とは限らないまでも)合格してしまうのではないだろうか? 2 級の方は経済・商学系の大学では推薦入学の要素にもなることから、商業高校の生徒でも優秀な生徒に限られるとは思うが。使用した参考書・問題集は以下の 2 セットのみ:公認会計士よせだあつこのパブロフ流シリーズ『簿記教科書 パブロフ流でみんな合格 日商簿記3級 テキスト&問題集 第4版』(2019-02-20)『簿記教科書 パブロフ流でみんな合格 日商簿記3級 総仕上げ問題集 第3版』(2019-02-20)中央経済社の検定簿記シリーズ『検定簿記講義 3 級 商業簿記〔2019年度版〕』(2019-02-27)『検定簿記ワークブック 3 級 商業簿記』(2019-02-27)まとめ今 152 回から 3 級は大きく試験範囲が変わり、自営業向けだった内容が株式会社向けとなったので、参考書・問題集はちゃんと新しいもので揃えるというのがポイント。上に紹介した 2 セットのものは、それぞれかなり性格が異なった毛色のものを組み合わせた。おそらく、それぞれが強調する視点が異っているので、片方だけでは、独学での満点狙いは厳しかったかもしれない。結果満点逃しました……orz 敗因「455」を「445」と書き写しミスしたこと「のみ」による。これが満点を奪った、たった一つのミス。 書き間違えた「445K」をベースに貸倒引当金の計算も行っているため、そこから派生した項目も影響を受けて、おそらく別の採点対象の項目も巻き添えを食ってしまい、計 -6 点となったものと思われる。合計が合わなくなるミスであれば、気付くことはできたはずなのだが、これは貸借対照表と損益計算書の両方にセットで使われる値だったため、矛盾が発生せずに、気付くことにはならなかった。パブロフ式の著者さんでも見直し無しで解答時間が 48 分(参考)のところを、自分は 35 分で解けて、意気揚々と退出したわけだが、それがこの結果とは、トホホ……。

MySQL データベースのバックアップ

表のエクスポートMySQL で表を丸ごとファイルにエクスポートする場合は、SELECT * FROM table を応用した INTO OUTFILE file による指定が基本となる: SELECT * INTO OUTFILE '/mnt/data/tmp/sampletable.tsv' FROM Sample_Table; ファイル形式は TSV(TAB 区切りでエスケープ方式が TAB 区切り特有のルールとなっている。CSV よりも遥かにスマートなフォーマット)ファイルは上書き不可なので、既存の同名ファイルが存在してはならない。参考:MySQL 8.0 リファレンス(出力先ファイル名や、表名などは一例)エクスポートした表のインポート反対にエクスポートした表をデータベースにインポートして書き戻す場合は次の命令が対応する: LOAD DATA LOCAL INFILE '/mnt/data/tmp/sampletable.tsv' INTO TABLE Sample_Table; エクスポートしたファイルを編集してデータエントリーを付け加えてインポートし直すと、元から存在したエントリーについては warning となり skip されるだけなので、気にせずにエントリーの追加用途に利用できる。また、一部エントリーを元のデータに追加するのではなく、元のデータを修正して上書き更新したい場合であれば、TRUNCATE 命令を使って一旦消去してから全体丸ごと LOAD し直せばよい: TRUNCATE TABLE Sample_Table; LOAD DATA LOCAL INFILE '/mnt/data/tmp/sampletable.tsv' INTO TABLE Sample_Table; 参考:SHOW WARNINGSLOAD の結果、追加したデータに何らかの不備があって WARNING が発生した場合は、直後に SHOW WARNINGS すれば WARNING 内容を確認することができる。 SHOW WARNINGS; データベースのバックアップ表の定義を含めたデータベースのバックアップは mysqldump コマンドを使う。こちらは SELECT 文のような SQL 上の操作ではなく、MySQL の対話…

Python で Google SpreadSheets を CSV にエクスポート

OAuth2 を含めた gspread の説明は公式のリファレンス(👉 1、👉 2)が参考になる。また、CSV へのエクスポートについては Stack Overflow の記事(👉 Saving a google spreadsheet as a csv)を参考にした。 from oauth2client.service_account import ServiceAccountCredentials import gspread import csv JSON_KEYFILE = 'XXX.json' SPREADSHEET = 'テスト' WORKSHEET = 'sheet1' CSV_FILENAME = 'test.csv' SCOPE = ['https://spreadsheets.google.com/feeds', 'https://www.googleapis.com/auth/drive'] serviceAccountCredentials = ServiceAccountCredentials.from_json_keyfile_name(JSON_KEYFILE, SCOPE) gspreadClient = gspread.authorize(serviceAccountCredentials) worksheet = gspreadClient.open(SPREADSHEET).worksheet(WORKSHEET) with open(CSV_FILENAME, 'w', newline='') as csvFile: writer = csv.writer(csvFile) writer.writerows(worksheet.get_all_values())

Inkscape 0.92.4

Inkscape (0.92.4) の macOS 版は MacPorts 版を使うべし。MacPorts 版の Inkscape をインストールするには、もちろん、,MacPorts 自体をインストールして使えるように準備しておく必要がある。.pkg のインストーラーが使えるので、難しくはないはず。そして、MacPorts によってインストールするのは、Inkscape だけでなく、X.Org Server も必要になる。 sudo port install inkscape sudo port install xorg-serverこれでターミナルから inkscape を実行すれば Inkscape が立ち上がる。起動時の警告起動時に、ターミナル画面に警告メッセージが表示されるが: Dynamic session lookup supported but failed: launchd did not provide a socket path, verify that org.freedesktop.dbus-session.plist is loaded! Failed to get connectiondbus とやらのセットアップに関するもののようなので、sudo port load dbus による指摘に従えば解消できる: port notes dbus dbus has the following notes: Startup items (named 'dbus-system, dbus-session') have been generated that will aid in starting dbus with launchd. They are disabled by default. Execute the following command to start them, and to cause them to launch at startup: sudo port load dbusつまりこの場合 sudo port load dbus を実行して一度セットアップしてしまえば、以後は警告は出なくなる。 sudo port load dbusMacPorts 全体のアンインストール後…

OpenWrt on WZR-HP-AG300H: nginx

デフォルトの uHTTPd に替えて当初は Apache を入れようとしたが、マトモに動かなかった(公式のフォーラムでもそのような話が出ていた)。それで諦めかけていたのだが、どうしても Virtual Host を実現したいので、nginx を入れてみることにした。公式 wiki に従って(PHP は使う予定がないので、該当部分は飛ばした。)入れてみると、とても軽快で、さらに設定も /etc/nginx/nginx.conf に記載された内容で行うだけという、とてもシンプルなものだった。歴史が長過ぎて半ば妖怪化しつつあるような Apache と違って、一発で気に入った。Virtual Host は nginx.conf で server {} を追加するのが基本。ただし、デメリットも 2 点発生した。デフォルトでは HTTPS に対応していないCGI に対応していないOpenWrt 用 nginx の HTTPS 化nginx 自体は HTTPS に対応しているのだが、OpenWrt 標準の nginx モジュール(.ipk)は HTTPS 非対応でコンパイルされているため、自前で nginx モジュールをコンパイルして用意しなければならない。大変だったが(nginx の HTTPS 化そのものについては、一箇所しか情報が存在しなかったほど、情報が限られていた)、最終的に実現できた。【下準備】Linux で git を使える環境を整える:
apt install git-core build-essential libssl-dev libncurses5-dev unzip gawk zlib1g-dev subversion libncurses5-dev gcc-multilib flex gettext mercurialgit clone して、ソースコードを用意する:
git clone https://git.openwrt.org/openwrt/openwrt.git
cd openwrtこのままでは有無を言わさず最新のソースコードが使われてしまい、ライブラリーとのバージョンの不整合が起こるため、自分の使っている stable バージョンに絞って checkout する。
git checkout v18.06.2make menuconfig
Targe…

OpenWrt on WZR-HP-AG300H: MariaDB

データベースとしては、MySQL 互換らしい MariaDB を入れた。パッケージmariadb-servermariadb-client要点MariaDB 用に /etc/mysql/my.cnf の datadir と tmpdir を USB メモリーディスク(/mnt/data)下に作成した mysql ディレクトリと tmp ディレクトリに指定する。(my.cnf のコメントに、これらのディレクトリの配置場所として NAND フラッシュ領域を使わないようにと書かれている)さらに、/var/run に mysqld ディレクトリが存在しなければ、予め作成しておく。(mysqld.sock ファイルのために使われることになる。)my.cnf で Linux Native AIO を無効化しておく([mysqld] に innodb_use_native_aio = 0 を追加)。さらにスワップ(USB メモリーディスク参照)が有効だと、InnoDB のエラーが解消され、MariaDB-server が正常に動くようになる。(当然ながら)MariaDB-client もインストールしないと、mysql コマンド自体が使えない。動作テストができない。mysql コマンドで対話画面を起動して、ちゃんと動いているかを確かめる。システムログを見ると、InnoDB のエラーが出ていたりするのが確認できる。mysqldump コマンドなど1.4MB 以上を消費するが、mysqldump コマンドなども使いたい場合は、mariadb-client-extra のインストールも必要になる。User/Passwordデフォルトでは User: root; Password: (None) だが、デフォルト設定(/etc/mysql/my.conf)において bind-address = 127.0.0.1 となっていて、リモート接続が無効化されているので、セキュリティ的に気にする必要ないと思う。

OpenWrt on WZR-HP-AG300H: SFTP サーバー

/etc/config にある設定ファイルを扱う程度ならば scp コマンドで十分だが、WWW サーバーとしてセットアップすると、ファイルのアップロード作業が頻繁に発生するようになってくるので、FileZilla のような FTP クライアントを使ってファイルのやりとりが出来るように SFTP サーバーをセットアップしておくことにする。openssh-sftp-server をインストールする。もちろん、SSH の拡張的な SFTP ではなく、ちゃんとした FTP サーバーの方をインストールする手もある。👉 FTP servers

OpenWrt on WZR-HP-AG300H: Python3

32MB フラッシュの WZR-HP-AG300H では、python3 のフルパッケージも問題なくインストールできた。ただ、結局のところ、フルパッケージは「python3-light + 他の全ての追加パッケージ」に過ぎないので、必要になったら都度該当する追加パッケージを入れればいいだけだと思い、python3-light で入れ直した。

実家ネットワークの再構築

イメージ
目標 WAN 直結の DMZ(192.168.0.0/24)と、純プライベートな内部 LAN 領域(192.168.1.0/24)の二段構成とし、DMZ へのゲートウェイとなるルーター(OpenWrt 機)にネットワークセパレーターとしての役割を担せ、そこで集中的にセキュリティ管理する。現状従来の構成は、管理上の平易さから、LAN は全て 192.168.0.0/24 のみで、WAN へのゲートウェイとなるルーターを介して WAN に直結するフラットな一段構成である。今後 WWW サーバーを運用するなど外部向けの公開を念頭に入れると流石にセキュリティ上の懸念もあるため、WWW サーバーを置く DMZ とセキュリティを特に意識しないで済む内部 LAN 領域とに分け、この二種の領域の境界にネットワークセパレーターとしての OpenWrt 機を DMZ へのゲートウェイルーターとして置くという構成にしたいと考えるようになった。こうしておけば、たとえ WWW サーバーが侵入されたとしても、これを踏み台としてネットワーク的に分離された内部 LAN 領域に侵入されるわけではないので、内部 LAN 領域の安全性は維持できる(DMZ から 内部 LAN へのルーティングは行なわず、内部 LAN から DMZ への IP マスカレードによる一方的なアクセスのみ可能とする)。デメリット唯一のデメリットとしては、素人向けの話として丸暗記的に嫌われる「二重ルーター状態」になることで、UPnP に頼ることができなくなる点である。内部 LAN とそのゲートウェイルーターの間では UPnP を活用してもいいのだが、その設定内容に対応したポートマッピングを手動で WAN へのゲートウェイルーターにも設定する必要がある。とはいえこれは当然、得ようとしているセキュリティ上のメリットと表裏一体となる作業なのであるから、デメリットと呼ぶべきものではないことなのかもしれない。暫定措置理想としてはこのゲートウェイルーターに、Wi-Fi ブリッジ、OpenVPN サーバー、DHCP サーバーの役割も担わせた OpenWrt 機を当てたい所だが、現状、この位置にあるのはブリッジ運用中の NEC の Aterm WG1200HP で OpenWrt 化は無理。一方の手持ちの OpenWrt 機は WZR-HP-AG…

OpenWrt on WZR-HP-AG300H: VPN サーバー

イメージ
VPN は tun モードでセットアップした(が、それとは別に tap モードでもセットアップし、両立させた)。基本的には OpenWrt 公式のガイド(👉 OpenVPN Basic)に従ったが、必ずしも公式ガイドその通りに uci コマンドを使ってセットアップせずとも、コンフィグファイルを直接編集したり、一部の操作は LuCI でも代用できると思う。PKI の準備PKI をセットアップ(= Easy-RSA をインストール)し、必要な証明書等を生成する。これはガイドの通りにそのまま。 👉 OpenVPN Basic: PKIVPN 用の仮想の物理インターフェースの作成と、論理インターフェースの作成仮想の物理インターフェース tun0 を紐付けた論理インターフェース vpn_router を作成する。プロトコルは none(LuCI 上では Unmanaged と表示される)👉 OpenVPN Basic: Network また、これは独自にやり方を見出したが、tap モードでセットアップすることもでき、物理インターフェース tap0 を作った場合は、論理インターフェースを新設せず、論理インターフェース lan の物理インターフェースの一つとして tap0 を追加するだけで良い(上のスクリーンショット。論理的に lan の一部として存在するので、tun モードの場合のように、Firewall の設定をする必要はない)。OpenVPN ServicesOpenVPN サービスをセットアップ(= openvpn-openssl をインストール)し、設定する。ガイドでは uci コマンドを使っているが、luci-app-openvpn をインストールすれば、LuCI の GUI でも代用できないことはないと思う。ガイドの uci コマンドでは環境変数を使って自動化している部分があり、何らかの理由で不具合がある場合には、あとで適宜設定を修正する必要があるかもしれない。また、VPN 用のネットワークアドレスも、自分で使いたいものに修正する。👉 OpenVPN Basic: VPN-Service ポート番号が重複しないようにすれば、同時に、tun と tap のサーバー(上のスクリーンショットの router_server と bridge_server がそれぞれ該…

OpenWrt on WZR-HP-AG300H: ブリッジ化

イメージ
WZR-HP-AG300H では初期状態ではルーターとしてセットアップされている。つまり、図においての物理インターフェース eth1 が論理インターフェースの wan に紐付けられている状態である。 Network > Interfaces 設定なので、論理インターフェース的に wan と lan の二段構成になっている状態を解消して、単なるブリッジ状態にするには、LuCI 上で Network > Interfaces 設定で wan のエントリーを削除した上で、lan の Physical 設定で物理インターフェースの eth1 を lan に紐付け、さらに IPv4 のアドレス、ネットマスク、ゲートウェイ等の設定を UP ポート側の LAN に合わせたものにすればいい。基本的にこれだけで ok のはずである。作業上の注意としては、先に wan のエントリーを削除して lan の設定をする前の段階で、一旦変更を反映させてしまうと、UP ポートが単に使えない状態になってしまい、UP ポートに LAN ケーブルを接続して設定作業をしていたならば、LuCI 自体にアクセスできない状態になり、焦ってしまうかもしれない点である。Wi-Fi か、LAN ポートに LAN ケーブルを接続すれば問題ないはずである。Network > Switch 設定初期状態では VLAN がセットアップされており、LAN ポート 1 〜 4 は、VLAN のノード 1 である eth0.1 に属している。VLAN を使わないのであれば、VLAN 関係の設定を削除して、単純に eth0 で扱っても良さそうだが、もしかしたら、一度試して支障が生じたことがあるかもしれない。現状ではデフォルトのまま放置している。/etc/config/network以上のような形で、/etc/config/network の内容は、wan のエントリーが削除され、lan のエントリー部分が以下のようになった: config interface 'lan' option type 'bridge' option proto 'static' option netmask '255.255.255.0' o…

二階堂重人氏のデイトレード本

二階堂重人『最新版 株デイトレードで毎日を給料日にする!』(すばる舎、2018-11-27)株自体の入門書でもないのに、ロウソク足や信用取引についての説明にページ数を割くなど、どうでもいい情報があるので、「デイトレードのテクニックそのもの」についての情報は薄い。ポイントとしては 2 点程度か。デイトレ銘柄のキャッチの仕方チャートによる売買タイミング以上の 2 つの次元で構成されるという点は特に目新しいものではない。銘柄の選別はランキングを使う等の漠然とした話で、ありふれた手法だと思う。唯一、この本の中で詳細かつ具体的に著されているのは、ボリンジャーバンドと変動平均を組み合わせた売買タイミングの方法だけだと思う。著者のボリンジャーバンドと変動平均を組み合わせた売買タイミングの方法+2σ を上抜けする急上昇+1σ を割る反落5 分足の 12 本変動平均(1 時間分)を割らずに反発+1σ を抜けて 12 本変動平均がサポートとなる押し目を形成したことを確認以上で速やかに in する。この手法の主旨としては、急上昇の動きをキャッチしようとするところ(トレンドフォロー)にあるが、+2σ を上抜けしたからといって、トレンドフォローが正解の場合と、反対に反落する逆張りが正解の場合があり、これだけではバクチとなる。そのため、一旦反落して押し目を作り、再度、本格的な上昇が開始する前に乗ってしまおうという作戦だろう。押し目狙いなので、まず一旦は反落して一休みする流れは必要であるが、押し目となって再度本格的な上昇が始まるか、そのまま反落して元の黙阿弥になってしまうかを、1 時間分の変動平均がサポートとして機能しているかどうかを基準にしているわけである。空売りの場合はそのまま上下対称のやり方となる。ちなみに、利益確定については、特に定まった手法はないようだ。

WZR-HP-AG300H with OpenWrt

2 台目となる Buffalo の Wi-Fi ルーター親機 WZR-HP-AG300H をメルカリで入手した。ちなみに 1 台目は友人が不要になったものをたまたまもらっただけで、特に WZR-HP-AG300H であることを狙ったわけではない。もらってしまってから、DD-WRT というカスタムファームウェアに書き換えられること、それによって、OpenVPN が使えるということを知り、Buffalo 公式の OEM ファームウェアで使える(セキュリティ性能が脆弱な)PPTP ではなく OpenVPN を是非使いたかったので、それだけが目的で DD-WRT にしてみたという経緯であった。なので特に元の OEM ファームウェアに戻すことなど考えずに、その時はただ DD-WRT(v24-sp2 (12/22/14) std - SVN revision 25697)化した。2014 年頃で DD-WRT の方は(少なくとも WZR-HP-AG300H 用については)安定版のリリースが停滞してしまっている(専らベータ版のみ)。せめて KRACK 対策された安定版が欲しいところ。一方、OpenWrt の方は今でも WZR-HP-AG300H 用の最新版が用意されている。さらに、OpenWrt は色々と追加パッケージを自分で好きなように入れることができ、中には、Asterisk や Python やデータベースのパッケージもあるという。これは OpenWrt に俄然、興味を惹かれた。またよくよく調べてみると、昔の時点だけでなく 2019 年の今に至るまで、OpenWrt 用の Buffalo 製ハードとしては WZR-HP-AG300H はメチャクチャ最適な機種らしいということがわかってきた。型番の AG というのは、Wi-Fi の周波数が 5GHz 帯の IEEE 802.11a と 2.4GHz 帯の IEEE 802.11g の両対応という意味のようで、これ以前の機種や廉価版機種では G のみの型番のものが多く(それらはハードオフなどでも見捨てられてジャンクとして転がっている)、Wi-Fi 性能の点で一線を画している。さらに型番の 300 は IEEE 802.11n の通信速度 300Mbps のことだろう。とはいえ、後に 3x3 MIMO(450Mbps)や 4x4…

西澤ロイ『頑張らない英文法』

図書館で予約していた、西澤ロイ『頑張らない英文法』(あさ出版、2014年)が 2、3 年以上かかって順番が回ってきた。自分自身が独学で体得していたことが、大学の英語学科で学んだ専門家の言っていることとほとんど一致していることを確認できた。筆者がこの本で解説していることは、基本的に中学英語の範囲の文法事項だが、この中学英語の範囲の文法事項を、このような形で理解しているということが重要である。テスト勉強用の知識としていくら中学英語を 100 点満点の状態でインプットできていたとしても、意味がないのである。個人的には、自分のような体得に至っていない人には、この本は自分が人に英語を教える時に強調して言っていることと重複しているので、購入、一読をお勧めできる本である。自分自身として、この本を読んで一つだけ、得られたことは、情報の先後で意味合いが違うため、能動態と受動態といったような書き換えられた文の意味に違いが生じるという点である。情報の先後による違い自体は自分なりに理論を構築していたが、能動態と受動態などの書き換えによって生じる意味の違いについては、特に生じるか生じないかということ自体を意識することはなかったため、これについては一つの収穫だった。自分が理工学系的発想で築いた独自理論は、筆者がこの本で解説しているものよりも、さらにアグレッシヴにカスタマイズされているのだが、少なくとも、この本に書かれていることは、自分が学校教育の英語の文法とは違って独自に編み出したものと、同じ考え方が述べられていたので、それが決して的外れな我流理論というわけでもないことが確認できて良かった。