投稿

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 WARNINGS LOAD の結果、追加したデータに何らかの不備があって WARNING が発生した場合は、直後に SHOW WARNINGS すれば WARNING 内容を確認することができる。 SHOW WARNINGS; データベースのバックアップ 表の定義を含めたデータベースのバックアップは mysqldump コマンドを使う。こ...

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())

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 mercurial git clone して、ソースコードを用意する: git clone https://git.openwrt.org/openwrt/openwrt.git cd openwrt このままでは有無を言わさず最新のソースコードが使われてしまい、ライブラリーとのバージョンの不整合が起こるため、自分の使っている stable バージョンに絞って checkout する。 git check...

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: VPN サーバー

イメージ
VPN は tun モードでセットアップした(が、それとは別に tap モードでもセットアップし、両立させた)。基本的には OpenWrt 公式のガイド(👉 OpenVPN Basic )に従ったが、必ずしも公式ガイドその通りに uci コマンドを使ってセットアップせずとも、コンフィグファイルを直接編集したり、一部の操作は LuCI でも代用できると思う。 PKI の準備 PKI をセットアップ(= Easy-RSA をインストール)し、必要な証明書等を生成する。これはガイドの通りにそのまま。 👉 OpenVPN Basic: PKI VPN 用の仮想の物理インターフェースの作成と、論理インターフェースの作成 仮想の物理インターフェース tun0 を紐付けた論理インターフェース vpn_router を作成する。プロトコルは none(LuCI 上では Unmanaged と表示される)👉 OpenVPN Basic: Network また、これは独自にやり方を見出したが、tap モードでセットアップすることもでき、物理インターフェース tap0 を作った場合は、論理インターフェースを新設せず、論理インターフェース lan の物理インターフェースの一つとして tap0 を追加するだけで良い(上のスクリーンショット。論理的に lan の一部として存在するので、tun モードの場合のように、Firewall の設定をする必要はない)。 OpenVPN Services OpenVPN サービスをセットアップ(= openvpn-openssl をインストール)し、設定する。ガイドでは uci コマンドを使っているが、luci-app-openvpn をインストールすれば、LuCI の GUI でも代用できないことはないと思う。ガイドの uci コマンドでは環境変数を使って自動化している部分があり、何らかの理由で不具合がある場合には、あとで適宜設定を修正する必要があるかもしれない。また、VPN 用のネットワークアドレスも、自分で使いたいものに修正する。👉 OpenVPN Basic: VPN-Service ポート番号が重複しないようにすれば、同時に、tun と tap のサーバー(上のスクリーンショットの router_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 で扱っても良さそうだが、もしかしたら、一度試して支障が生じたことがあるかもしれない。現状では LuCI から Enabled を切るだけにして、/etc/config/network の VLAN の項目自体は無理に削除せずに放置している(Enabled を切ると、option enable_vlan '1' が削除されるだけである)。 /etc/config/network 以上のような形で、/etc/config/network の内容は、wan のエントリーが削除され、lan のエントリー部分が以下のようになった: config int...

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

イメージ
Unsplash の Adam Nowakowski が撮影した写真 二階堂重人『最新版 株デイトレードで毎日を給料日にする!』(すばる舎、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...

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

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

神隠しというよりは神足通か

イメージ
Unsplash の Lisanto 李奕良 が撮影した写真 711:本当にあった怖い名無し:2012/02/15(水) 12:45:08.87 ID:EEZ2lDiO0 身バレしそうで怖いけど、いまだに不可解な体験をひとつ。 私が中学生の頃、友達と一緒に、近所の稲荷祭りに出かけました。 小さい境内に似合わず、人もたくさんくる賑やかなお祭りで 準備はもちろん、出店もほとんど、近所の人たちでやっているので 少しくらい帰りが遅くなっても大丈夫なので(最後には誰かしら一緒に帰ってくれる人がいる) 私は毎年遅くまで居座っていました。 その年も、夜9時くらいにお祭りが終わり、近所に住む友達と一緒に 後片付けを手伝っていたのですが、最後に、残った生地でお好みを焼いてもらったので お稲荷様におすそ分けして、友達とお社のまえに設置された椅子に座って、わいわい食べていると 「○○(私)ちゃん○○くん、そろそろ帰るべし、いっしょにあんべ~」と呼ばれました。 はーいと返事したのですが、呼んでくれた近所のおいちゃんは気付かず 私たちの名前を呼び続けていました。 おかしいなと思って、立ちあがって、大きめの声で返事しながら手を振ったのですが おいちゃんは気づきません。 それどころか、「○○と○○、どこさいったか知らねぇか?」と、他の大人に 聞いていてまわりはじめていました。 こんなに近くにいるのにと思いながら、急いでゴミを袋に入れて おいちゃんのところへ行こうとしていたら、おばちゃんが 「あれっ、二人して、そこで食べてたけど」って、私たちのほうを指さして言ってました。 えっと思いながら、おいちゃんとおばさんのところに、ここにいるよーって 大声だしながら走っていたのですが、ぜんぜん気づいてくれません。 肩とか叩いているのに、無視されているというかなんというか…… ちょっと怖くなって、一緒にお好み焼き食べてた友達の手をにぎったら その子は「なんだろう、どうしたんだろうね」と、首をひねっていましたが そのうち、私たちを探し始めて大騒動になってきました。 (まとまりなくてすみませn) 715:本当にあった怖い名無し:2012/02/15(水) ...