2019MEGAのクラウドデータをシンクロするバックアップを取っていなかったために悲惨な経験を何度もしている私は、なんとしてもMEGAのバックアップを取ろうとしたのですが、どうもLinuxのツールでもはうまく行かないようです。リポジトリにMegatoolsというのがありますが、クラウドからファイルコピー取りこぼしが多く、あまり使えません。rcloneでは認証方法が変わったせいかログインすらできません。調べてみると、MEGAcmdというツールがあったので試してみました。https://github.com/meganz/MEGAcmdNASサーバでコンパイル、インストールして使ってみます。helpでコマンド一覧がでますが、サイトのチュートリアルにあるようにsyncコマンドが実用的だと思われます。コマンドを使う方法はインターラクティブモード、ノンインターラクティブモードがあります。インタラクティブモードではmegacliでシェルを起動してからメールログインします。helpでコマンドの一覧を取得できます。シンクするにはNASに空のフォルダー/path/to/local/folderを用意してログインします。/これですべてをシンクできます。経過を見ているとどうもhttp接続のエラーが頻発したりPPPoE接続が途切れてアドレスが変わったりしましたが、繰り返しコマンドを実行したら無事シンクロができてたようです。ChromeBookのArchlinuxのアップデートでWifiの問題が発生したので調べてみました。-xfすると、次のようなエラーがありました。result=0x2...調べてみると過去数年に渡ってこの問題が繰り返しおこっており、カーネルを正常に動作していた前バージョンに戻すよりほかはありません。Archlinuxはローリング・リリースを採用していて、過去のパッケージは残らないようになっているので注意が必要です。/var/cache/pacman/pkgにダウンロードしたパッケージが置かれており、それを使ってダウングレードします。name>でダウングレードします。カーネルのinitramfsもアップデートする必要があります。successfulこれでカーネルパッケージのダウングレードは完了します。pacmanの設定ダウングレードができたらカーネルを更新しないように設定します。linux-armv7-chromebookshorewallのLoggingshorewallは複雑なFirewallの設定ができるので重宝しますが、なぜかLogメッセージが/var/log/messageと/var/log/syslogの両方に書き込みsyslogが見づらくなるので修正してみました。shorewallの新旧バージョンによって設定が異なるのようなので整理しました。shorewall.confでログ先を変更しても反映されないのでrsyslog側でメッセージを振り分けます。stop/etc/logrotate.d/shorewallは上記に同じPythonのLogging単純なログ出力であればとくに書く必要もありませんが、少し複雑になるだけで、チュートリアルを読まないとわかないくらい煩雑です。読んだだけだと今ひとつわからないというのがPythonのロギングです。目的はBotのログ出力を、Bot自体の生死用、取引用と2つないし3つのログを取るためです。不具合を修正したり、取引内容を解析したりするのに、つねに張りついて監視しているわけではないので、ログだけが頼りです。それなので解析しやすいログ取りは必須条件です。loggingモジュールの使い方を検索して調べ、寄せ集めで作りました。これを基本にBotに組み込めば良いはずです。Botはいくつかパーツに分けてあるため定義したログオブジェクトを渡せばプログラム全体通してログがとれます。このテストプログラムではtest_log(super_logger)としてあります。method')Pythonの日時の扱いPythonで非常に悩ましいのは日時の記述方法の手段が多すぎてどれを使ったらよいのか迷うことです。当初は次のように使っていました。'Asia/Tokyo'time.tzset()print(datetime.now())これでも良かったのですが、いろいろ他者さんのコードを眺めているうちに、これだと環境によって問題が起こることがわかってきました。旧型のWindowsはLocal時間をベースにしているので、問題が起こりそうなことは薄々分かっていました。なにぶん私の環境がLinuxなので問題はないのですが、コードがプラットフォームごとで異なる振る舞いをするのはあまり気持ちがいいものでもないので、一旦、Pythonの日時関係を整理してみました。ちなみにWindowsをUTCベースにするにはつぎのようにします。/fPythonの日時データを扱う上で大事なことはつぎの3つです。timeはUTCを基準として1970年のはじめから連続した数字です。Timeをベースにして時間の前後を計算するのには適しています。見やすいように表示となると変換が必要になります。datetimeのnaiveとawareですが、とくに指定がなければnaiveになります。UTC時間とLOCAL時間の混同を避けるためにも、Timezoneで明示しておくのは良い考えでしょう。awareでTimezoneを扱う方法はいくつかあり、どれがよいのか調べてみました。Pythonの日時データ型は次のとおりです。tm_isdst=0)サブクラスオブジェクト呼び出すときの注意datetimeモジュールのサブクラスの中には、他のモジュールと競合するものがあるので呼び出すときは注意が必要です。tzinfo=jst)unixtimeUnixtimeを求めるときは、time.time()で呼び出すのが簡単だと思いますが、プラットフォームにより違いがあるらしいので次の書式が定形式になっているようです。calendar.timegm(datetime.utcnow().utctimetuple())datetime型のデータなので次のように日時を入力すれば、Unixtimeが求められます。calendar.timegm(datetime(2019,9,22,8,10,59).utctimetuple())1569139859LocaltimeでUnixtimeを求める場合です。9注意:datetime.astimezone()だと正確なUnixtimeが求められません。読みやすいように日付型に日時データを変換する場合です。いった書式の文字列に変換します。返す現在の時刻が使われます。ロケール情報を使いません。エポックからの経過秒数で表現された時刻を、ローカルの時刻を表現する文字列に変換します。返す値を現在の時刻として使用します。