2019年7月28日日曜日

コード整形ソフト Astyle使い方のメモ

対象は、C, C++, C++/CLI, Objective?C, C#, and Java:

導入が簡単でよい。部分的に整形するのはできるのか不明。

Windows7でのメモです。

■ダウンロード

公式ページからDownloadsページに行ってZIPダウンロード。
http://astyle.sourceforge.net/

解凍すると
The Windows package contains a compiled binary.
と書いてあるとおり、最初から実行ファイルexeが入っているのでそれを使う。

■整形する

コマンドプロンプトで
../AStyle/bin/Astyle.exe
のディレクトリに移動する。
(移動せずに絶対パスで呼んでもよい)

file.cppに対して、実行コマンドはこのようになる。
$ astyle --style=1tbs -s4 -S -N -Y -M80 -p -j -k1 -U -H file.cpp

※不要な行を消すのはできていない。

整形されたものが上書き保存され、元のオリジナルファイルが保存される。

https://shunirr.hatenablog.jp/entry/20120628/1340884145
で紹介されていたオプションをそのまま使っている。

「テクノロジーの地政学」読書メモ

シバタナオキ, 吉川欣也 テクノロジーの地政学を読んだときのメモ


ボストンダイナミクス
音が大きい。
非常停止ボタンを持った人が必ずついているらしい。


Peleton Technology
トラック2台をつないで走らせると、燃費が低減できる
前で4%, 後ろで10%らしい。ただ、スピードは落とさないといけないようだが。


インターレジャープロトコル
リップル社が2015年に提唱した決済方法の国際標準規格化

パグ犬は病気にかかりやすく、犬の保険に入れない
→そういうパグの飼い主を集めて保険を作る。インシュアテックの例

Qapital
生活習慣で自動で貯金していく。マクドでポテト食べたら1ドル、とか。

RetailNext
IoTの小売り。店舗などでIoTを有効的に使えるようにコンサル。

LetGo
メルカリのアメリカ版みたいな

2021年中国共産党が結成100年
2049年 中国建国100年
それに向けて頑張っている感ある?

AuFunder Agrifood Tech Investing Report 2017
Inagora - 日本 6800万ドル調達

「中国ではサプリメントなどの健康食品が敬遠されており、サラダをメイン料理として食べる習慣もありません。」

Aspire Food Group
コオロギを原料とした食品の製造

2019年7月16日火曜日

[未解決]Google RESIZERが使えない

Material Designが提供しているRESIZERというレスポンシブな表示を確認してくれるサイトが使えません。

Heads up!
The resizer is a tool for viewing non-Google websites using material design responsive UI breakpoints. The resizer will not ask for account information—you don't need to enter it when using this tool.

という表示が出て、GOT ITしても無限ループしてしまいます。『non-GoogleなWebsiteを、responsive UI breakpointsを使って見るサイトです。このサイトではアカウント情報を求めることはなく、アカウントに入る必要はないです』

・・・ということですが。。

レスポンシブ対応していないサイトを見ようとしたからかな、と思ったら違うようです。viewportで切り分けしていてもだめなようです。


繋がらないサイトもあるようです。yahooもだめ、googleも接続できず。





2019年7月14日日曜日

CRONでPythonを定期実行

LinuxのcronコマンドでPythonを定期実行させます。自己流なのであしからずご了承ください。


よく使っているやり方


8:45に定期実行する例

45 8 * * * (cd /path/to/file/ && python file.py >> cronlog.log 2>&1) 

  • python file.pyを実行しますが、先にcdでfile.pyのあるディレクトリに移動します。コマンドは&&で繋ぎます。これで.py内でのカレントディレクトリを気にしなくてよくなります。
  • >> cronlog.log 2>&1で同じディレクトリにあるcron.log.logにstd.out, std.errともログを書き足していきます。(微妙なので下記のPythonのlogging参照)
  • cronではローカルと環境変数が異なるので、ローカルの環境変数を使いたいときは.  * * * * *  (~/.profile && command) というようにprofile読み込みコマンドを前に入れます。

ログはPython側で

ログはPython側で設定しています。std.errだとタイムスタンプが入らないなど使いにくかったので(入れる方法は後述)。
testlog.pyというファイルに下記を保存して実行すると、testlog.py.logというログファイルが生成されます。exceptは端折ってますが本当は指定しないといけません。Pythonのロギングについては、こちらで詳しく書いています( python loggingメモ - shimo lab2 )
import logging

logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
fh = logging.FileHandler("log/" + __file__ + ".log")
fh.setLevel(logging.DEBUG)
formatter = logging.Formatter(
    "%(asctime)s, %(levelname)s, %(message)s", "%Y-%m-%d %H:%M:%S"
)
fh.setFormatter(formatter)
logger.addHandler(fh)

def main():
    1 / 0

if __name__ == "__main__":
    try:
        main()
    except:
        logger.exception("-" * 10)
ログファイルtestlog.py.logの中身
2021-02-19 18:09:01, ERROR, ----------
Traceback (most recent call last):
  File "testlog.py", line 29, in 
    main()
  File "testlog.py", line 23, in main
    1 / 0
ZeroDivisionError: division by zero

cronについて

  • 再起動しても自動でCRON処理を実行してくれる(スタートアップでcrond起動)
  • 実行ファイルとcronは別なので独立しているので、タイマー設定後にファイルを更新してもよい
  • 複数の処理を1つのファイル(crontab)で管理できる
  • 枯れた技術で安心

crontabで実行するスクリプトの準備

まず定期実行するpyスクリプトを用意します。
crontab_test.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import datetime
now = datetime.datetime.now()
text = now.strftime("%Y/%m/%d %H:%M:%S\n")
with open('file.txt', 'a') as f:
    f.write(text)
今回例として使うのは、時刻をテキストファイルに書き込むスクリプトです。

crontabを実行する

$ crontab -e
実行の時間やコマンドを記述するための、エディットモードが現れます。

※初めての実行では、エディタを何にするか聞いてきます(select-editorコマンドと同じ)。4のvim.gtkを使いました。5のvim.tinyではプラグインのエラーが出ていました。
$ select-editor
Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.gtk
  5. /usr/bin/vim.tiny

注意

$ crontab -r

crontabの内容が消えるので注意です(Remove)。自分はcrontab -eを辞書登録して呼び出していて、直接コマンドを打たないようにしています。

crontab -eの編集

定期実行する日時とコマンドを1行で書きます。毎時45分にpython crontab_test.pyを実行するCRONの書き方は・・・

45 * * * * python /path/to/crontab_test.py

ファイル名はフルパスで書いたほうがよいと言われています(/home/user/ から呼ばれています)

日時の書き方は順に
m h  dom mon dow command
分時 日月 曜日
※dow曜日0, 7が日曜, 1が月曜,...)
※アスタリスク* は「全ての」という意味

CRONのログを確認する

動作したか確認したいとき、システムログ /var/log/syslogを確認します。

$ less /var/log/syslog | grep CRON

上記で毎時45分に設定したpythonの結果はこのように出ます。
Jul 14 17:45:01 XXXX CRON[23197]: (user) CMD (python /path/to/crontab_test.py)

std.out std.errorをテキスト出力

stdoutのprint文はコンソールに出力されません。また、Pythonスクリプトが失敗してもエラーは表示されません。標準出力、標準エラーを、ファイルに書き込みます。

30 8 * * * /../../..py >>log.log 2>>err.log

log.logの前の>> は1>> とも書けます。
これで8:30に実行するpyスクリプトの標準出力と標準エラーがファイルに書き込まれます。


同じファイルに出力する


上記で >>log.log 2>>err.log を >>log.log 2>&1

と書き換えると、stderrも同じlog.logに書き込まれます。


stdout にcron実行時間を書き込む


ロギングのところで実行時間が入らないと書きましたが、無理やり入れることは可能です。実行前にこれを入れます。

echo $(date +\%Y-\%m-\%d\ \%H:\%M:\%S) >> cronlog.log && <実行したいコマンド>

単に date表記を書き込んでるだけです。%とスペースはバックスラッシュでエスケープしています。
簡単なものならこれでもいいかな、と思っています。

長いので、変数をcrontabの中に書いて

ECHO_DATE=$(echo $(date +\%Y-\%m-\%d\ \%H:\%M:\%S) >> cronlog.log)

evalを使って呼び出したりしています。

eval $ECHO_DATE 

実行ファイルの絶対パスを取得する

cronでは絶対パスでpyファイルを呼び出しますが、このpyファイルの存在するディレクトリ名を出したいとき、os.getcwd()だと失敗します※カレントディレクトリは/home/user/になる。

os.path.abspath(os.path.dirname(__file__))

で実行しているファイルの絶対パスが出せます。


CRONのバックアップ

こちらのブログが参考になります。crontab -lで設定の内容が表示できますが、それをバックアップファイルにリダイレクトして、それ自体をcronで定期的実行するといいみたいです。

CRONTABで環境変数設定

通常の環境では実行できるのに、CRONでは止まっているようです。エラーログを見てみると、

ImportError: No module named numpy

html = urllib.request.urlopen(url).read().decode('utf-8')

AttributeError: 'module' object has no attribute 'request'
numpyがない、rullibでrequestがないとのことです。

結論: CRONで環境変数を設定する必要がある。

crontabの設定ファイル内に

PATH=/home/...:/home/.../

などと、記入すると解決しました。

--

cronで使っているPythonが別の場所にある可能性があるとき。
which python を使ったりしてpythonのフルパスを調べたりもできます。

環境変数を入れずに、フルパスでpythonを呼び出してもOK。



CRON JOBで実行するたびに環境変数設定をprofileから読み込む

例えば環境変数が/.profileにあってそれをハードコードしたくない場合、都度読み込んでからファイルを実行すればよいです。
0 * * * * (. ~/.profile && cd /path/to/file/ && python file.py >> cronlog.log 2>> cronerr.log)
これで毎時間0分に、/.profileを読み込んでからディレクトリ移動してpython実行となります。

2019年7月6日土曜日

海外通貨決済でクレジットカードを使ったときの計算

クレジッドカードでドルやポンドを使ったとき、レートは少しあとのものが使われるようです。さらにカード会社の手数料、三井住友VISAでは2%が上乗せされるとのこと。

適用される換算レートは、各地のVisaセンターまたはMastercardセンターから決済センターにデータが到着した時点で、Visaインターナショナル・Mastercardインターナショナルが交換するレートに、弊社が海外利用に係る事務処理コストとして2.00%(税抜き)を加えたものになります。実際にカードをご利用になった日のレートではありませんのでご注意ください。

https://qa.smbc-card.com/mem/detail?site=4H4A00IO&category=18&id=177


Visaインターナショナルの交換レートはこちらで調べられるようですが、ちょっと面倒ですね。
https://usa.visa.com/support/consumer/travel-support/exchange-rate-calculator.html

特に通貨(Currency)の選択が煩わしいのですが、表記は、円はJapanese Yen, 米ドルはUnited States Dollar というように国地域+通貨となっています。ちなみに英ポンドはBritish Pound (GBP)です。探しにくいですね。

VISAカードで1ドルいくらかを調べてみる

今日(2019/07/06)の時点での1ドルレートを調べます。

amount: 1
bank fee: 0
2019/07/06
左のCurrency Japanese Yen (JPY)
右のCurrency United States Dollar (USD)

にしてCalculate Exchange Rate(計算)ボタンをクリックします。





1USD = 108.639136 Yenとでます。


Googleで1ドルを調べてみると「108.46 円」と出ますので0.16円くらい上乗せされているということでしょうか。


ここからVISAの2%が上乗せされるということですね。110.81円となります。

2019年7月1日月曜日

日誌2019年7月

2019/07/02

今年も半分過ぎました。365日の半分でいうと、182.5日目はどこにあるんでしょう。2月が28日の年であれば、7月2日が183日目ですから、7月2日の午後0時が折り返しということになりますね。

とある駅からタクシーに乗ろうと思って、タクシー乗り場があるかをネットで調べていると、2017年くらいのQAサイトが出てきて、そこには「ありません」という回答しかありませんでした。しかし、実際はありましたよ、ということで、なかなか情報検索というものは難しいですね、という気がしています。

2019/07/06

metabaseを少し触りました。いまいち良さが分からないのですが、BIツールを使いたいときはすごくいいのでしょうか。絶賛するコメントばっかりだなーと思いながら見ています。

2019/07/13

同じような失敗をしたとき、それを上手くメモしておいて思い出させてくれるサービス、というのがあればいいのになと思います。AIがかなり進歩していないといけないけど。

みずほ銀行がメンテナンスで3連休の間決済ができないようになっているようです。これは計画的なシステムダウンだから稼働率には影響しないんでしょうか。ちょっと調べてみたいですが。

・・・こういう、「ちょっと調べてみたい」を自分の代わりにやってくれるAIを作れないかな、と思っています。


2019/07/14

ユニットテストで、先に作る方法しか紹介されていないようです。後から作るのは難しいから、最初からテスト駆動で作るしか無いということでしょうか。レガシーコードカイゼンの本などを読むとこれが書かれているのかもしれません。

BenQとDellの24インチのモニタを持っているのですが、BenQのは電源スリープ状態からの復帰が遅すぎてイライラしますね。3秒くらい遅い。この点はちょっと残念です。

価格コムの口コミでは、10秒くらいは普通で、スリープから5秒とのこと。一方で、PCとの相性や出力形式にもよるようです。確かに、DisplayPortからd-subに変えると2,3秒早くなった気がします。もう少しきちんと測定したほうがいいのかな。https://bbs.kakaku.com/bbs/K0000503951/SortID=20761828/

2019/07/17

モニターアームを導入しました。しかし机がガタガタするので、モニタがめちゃくちゃ揺れます。酔ったりはしませんが・・・。


初めてeBayで物を売りました。10ドルですけど・・・。SALでフランスに送りました。送料280円。安いですね。

2019/07/23

モニターアームがガタガタする件、机の足を少し調節したらマシになりました。イケアの安い机なので仕方ありませんね。

2019/07/26

アップルミュージックの3ヶ月無料の件で、ギリギリまで使おうと思っていたら、最終日の2日前に更新されてしまって有料を1ヶ月払うはめになっていたのですが、それも今日で終わりです。というより、終了に設定していても期限までは使えるので早めに変更しておくのが重要かと。