2019年12月17日火曜日

Ubuntuでファイルをrenameする

image1.jpeg, image2.jpeg ...というファイルがあるとして、imageの部分をphotoにしたいとします。

ubuntuの場合はこう書きます。

$ rename "s/image/photo/;" *.jpeg
vimのようなsubstitubeですね。

普通に検索したら他のlinuxでのやり方が出てきて、エラーが出ます。

$ rename image photo image*.jpeg
これはUbuntuではエラー
Bareword "image" not allowed while "strict subs" in use at (user-supplied code).

英文を1行1文なるようにvimで整形する

PDFからコピペしたときなど、英文を1行1文に改行したいときがあります。vimでの整形します。

文頭が行頭になるようにする


This
is
my pen.



This is my pen.

とするには
:g/\w\s\?$\n[a-z]/ join
とします。

g/ / join はファイル全体でマッチしたものにjoin適用の意味

\w\s\?$  は文字(とスペース)で行末
\n  改行
[a-z]  小文字にマッチ

これだと3行ある場合は2回マッチしないとダメです。

This
is
my pen.



This is
my pen.

になるので、もう一度実行します。

1行に2文あるときも改行する



Hello.
This is my pen.



Hello.
This is my pen.

というようにするには、

:%s/\.\zs\s\ze[A-Z]/\r/gc

とするとピリオドと大文字の間のスペースにマッチして、それを改行(\r)に置換します。


日誌2019年12月

2019/12/17

ソリューションで提供している顧客が○○社と○○社で、、とロゴで表記していることがよくあります。取引実績として掲載しているわけですが、どうやって許可とっているんでしょうか?単に営業で明らかにしてよいかを確約とったり契約の中に入っていたりするんでしょうか。

時雨堂ではHP掲載しないと料金が上がることになっていますね。

2019年12月16日月曜日

薬物で逮捕された芸能人リスト

薬物関連で芸能人が逮捕されると、ニュースになったりします。政治的な批判から目を反らすための手段として使われている、という説を聞くこともありますが、どうなのか確かめたくなり、リストを作っています。

結論としては、特に関係ないのでは、という印象です。
  • 曜日は規則性なし(例えば、企業の発表などは株価への影響を気にして金曜日にすることが多いがそういうニュアンス)
  • そもそも、政治的な批判は常にされているような・・・。


AWSで見知らぬPosgtresがあるがIAM用?

チュートリアルを触って、DBを作ったら最後に消しているはずなのですが、気づけばRDSに1つインスタンスがありました。しかもこれが無料枠を全て使っているようです。

データベース名は database-1 です。


CloudWatchで調べてみると、出てきた日時は分かりました。

その後、database-1のdetailsを見ると

Created Time
Fri Nov 08 09:42:58 GMT+900 2019

というパラメタがあるのが分かりました。

その付近ではIAM Roleを作ったりしていて、そういうパラメタが入っているようです。

snapshotを毎日とっていたり、certificate updateが通知されていたりします。


TODO:また調べたら追記する

2019年11月23日土曜日

UbuntuでFiddlerが動かないのを直した

徳丸本をやっていてUbuntu16.04でFiddlerを入れました。

mono というフレームワークの上で動くそうです。
https://askubuntu.com/questions/922377/how-to-install-fiddler-on-ubuntu

起動はできて、動いているような気がするんですが・・・キャプチャできないんですが。Windoowsだったら簡単にできるんでしょうか?

なんだかすごく簡単なところでつまずいている気が・・・。

エラーメッセージを見ていなかった

GLib-GIO-Message: 19:21:46.568: Using the 'memory' GSettings backend.  Your settings will not be saved or shared with other applications.

というエラーが出続けていて(直していなかった)、これが問題だったようです。

Pythonの話題ですが、これで直りました。

export GIO_EXTRA_MODULES=/usr/lib/x86_64-linux-gnu/gio/modules/

https://stackoverflow.com/questions/44934641/glib-gio-message-using-the-memory-gsettings-backend-your-settings-will-not-b


もう1つエラーがある


monoのエラーみたいなのですが、いまいち不明。

can not parse as value of type 'i':

公式フォーラムでもスルーされているようですが・・・。

https://www.telerik.com/forums/crash-fiddler-on-linux-and-lost-all-the-internet-connection

VagrantとVirtualBoxをアップデートした

二年前くらいにインストールしたっきりなので使えなかったのでアップデート。(Ubuntu16.04)

vagrantはエラーメッセージが丁寧ですね。

$ vagrant up
No usable default provider could be found for your system.
Vagrant relies on interactions with 3rd party systems, known as
"providers", to provide Vagrant with resources to run development
environments. Examples are VirtualBox, VMware, Hyper-V.
The easiest solution to this message is to install VirtualBox, which
is available for free on all major platforms.
If you believe you already have a provider available, make sure it
is properly installed and configured. You can see more details about
why a particular provider isn't working by forcing usage with
`vagrant up --provider=PROVIDER`, which should give you a more specific
error message for that particular provider.
起動できなかったのですが、強制的にやってみなさいと。

$ vagrant up --provider=virtualbox
The provider 'virtualbox' that was requested to back the machine
'default' is reporting that it isn't usable on this system. The
reason is shown below:
Vagrant has detected that you have a version of VirtualBox installed
that is not supported by this version of Vagrant. Please install one of
the supported versions listed below to use Vagrant:
4.0, 4.1, 4.2, 4.3, 5.0, 5.1
A Vagrant update may also be available that adds support for the version
you specified. Please check www.vagrantup.com/downloads.html to download
the latest version.
vagrantの対応しているvirtualboxのバージョンが5.1までですよと(6.0に上げていた)。

VirtualBoxアップデート

全部削除して

入れる手順は公式どおり

Vagrantをアップデート

最新版のzipファイルの中身は"vagrant"ファイルでできず。oldfilesのところから.debファイルを探してインストール。
sudo dpkg -i vagrant_2.2.6_x86_64.deb
これで古いvagrantは上書きされました。


・vagrant公式ページの手順ではできないことがありました。

削除はファイルを捨てるだけとか。
https://howtoprogram.xyz/2016/10/23/uninstall-vagrant-ubuntu-16-04/
apt-cacheを見るとそれに残っているバージョンでインストールされるようです。
https://howtoprogram.xyz/2016/07/23/install-vagrant-ubuntu-16-04/

Linuxターミナルでignorecaseにする

terminalで大文字小文字を無視(ignorecase)にしたいときは、
このコマンドをターミナルで実行します。
# If ~/.inputrc doesn't exist yet: First include the original /etc/inputrc
# so it won't get overriden
if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi
# Add shell-option to ~/.inputrc to enable case-insensitive tab completion
echo 'set completion-ignore-case On' >> ~/.inputrc
https://askubuntu.com/questions/87061/can-i-make-tab-auto-completion-case-insensitive-in-bash
ターミナルを再起動すれば適用されています。

2019年11月22日金曜日

PythonでJSON整形

ファイルnopretty.jsonを読んで、整形して別のファイルpprint.jsonに書き込む。
出力がユニコードにならないよう日本語のままにする。

# format_json.py
import json
from pprint import pprint
with open('nopretty.json') as infile:
    data = json.load(infile)
pprint(data)
with open('pprint.json', "w", encoding="utf-8") as outfile:
    json.dump(data, outfile, ensure_ascii=False, indent=4)

pprint(data)は結果のstdout出力なので、コメントアウトにしておいてもよいです。

参考
https://stackoverflow.com/questions/18337407/saving-utf-8-texts-in-json-dumps-as-utf8-not-as-u-escape-sequence

2019年11月21日木曜日

PATHの表示が繋がっていて見づらいので整形する

Pathを表示させるとつながっていて醜いので、改行させます。How to pretty print path in terminal? でしょうか英語では。


LinuxでのPATH表示


~/.bashrc または ~/.bash_profile にこれを書いて pathを入力するとOK

function path(){
    old=$IFS
    IFS=:
    printf "%s\n" $PATH
    IFS=$old
}



https://www.cyberciti.biz/faq/howto-print-path-variable/


WindowsでのPATH表示


for %a in ("%path:;=";"%") do @echo %~a

https://stackoverflow.com/questions/5471556/pretty-print-windows-path-variable-how-to-split-on-in-cmd-shell

2019年11月20日水曜日

Windowsでmecab+Pythonの文字化け対策

Windowsでmecab+Pythonを使っていると文字化けして困っていたりします。コマンドラインからmecabが使うのは問題ないので、Pythonからsubprocessで呼び出すことに。



これを$ python mecab_call_from_cmd.py で実行するかJupyterで実行するとおなじみの結果が出ます。文字化けなし。

すもも 名詞,一般,*,*,*,*,すもも,スモモ,スモモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
も 助詞,係助詞,*,*,*,*,も,モ,モ
もも 名詞,一般,*,*,*,*,もも,モモ,モモ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
うち 名詞,非自立,副詞可能,*,*,*,うち,ウチ,ウチ
EOS

2019年11月19日火曜日

Raspberry Piでログイン画面ループを直す

状況


あるときRaspberry Piを再起動すると・・・

起動してログイン画面が現れる
→正しいID, passwordを入力する
→再びログイン画面が現れる

というループになりました。

※ID、パスワードが間違っているときは、その旨が表示されるはずなので、
正しく入力できていることは確認できます。

結論


再起動する直前にインストールしたもの(bash-complete)が、起動時にエラーを出していたので起動できていなかった。削除して再起動したら回復。


調べた方法


「Ctrl-Alt-F2」で仮想コンソールを出す(起動中いつでも。戻るときは「Ctrl-Alt-F7」)

$ cat .xsession-errors

でエラーを確認すると、bash_completionでエラーが出ていることが分かりました。

当該の /etc/bash_completion

を消して再起動したらループせず。回復できました。


参考

https://www.raspberrypi.org/forums/viewtopic.php?t=194764

2019年11月18日月曜日

redashをdockerから起動したらflaskのエラー

redashをdockerからインストールして起動して、設定画面で入力して進んだらエラー画面。
flaskが止まってるみたいですね。修正できるのかしら。。

FileNotFoundError
FileNotFoundError: [Errno 2] No such file or directory: '/app/redash/settings/../../client/dist/index.html'
Traceback (most recent call last)
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2463, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python3.7/site-packages/werkzeug/middleware/proxy_fix.py", line 232, in __call__
return self.app(environ, start_response)
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2449, in wsgi_app
response = self.handle_exception(e)
File "/usr/local/lib/python3.7/site-packages/flask_restful/__init__.py", line 269, in error_router
return original_handler(e)
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1866, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 2446, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1951, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.7/site-packages/flask_restful/__init__.py", line 269, in error_router
return original_handler(e)
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1820, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1949, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.7/site-packages/flask/app.py", line 1935, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/usr/local/lib/python3.7/site-packages/flask_login/utils.py", line 261, in decorated_view
return func(*args, **kwargs)
File "/app/redash/handlers/static.py", line 32, in index
return render_index()
File "/app/redash/handlers/static.py", line 16, in render_index
response = send_file(full_path, **dict(cache_timeout=0, conditional=True))
File "/usr/local/lib/python3.7/site-packages/flask/helpers.py", line 629, in send_file
file = open(filename, "rb")
FileNotFoundError: [Errno 2] No such file or directory: '/app/redash/settings/../../client/dist/index.html'
The debugger caught an exception in your WSGI application. You can now look at the traceback which led to the error.
To switch between the interactive traceback and the plaintext one, you can click on the "Traceback" headline. From the text traceback you can also create a paste of it. For code execution mouse-over the frame you want to debug and click on the console icon on the right side.
You can execute arbitrary Python code in the stack frames and there are some extra helpers available for introspection:
dump() shows all variables in the frame
dump(obj) dumps all that's known about the object

docker-composeの実はパーミッションエラー

$ docker-compose up -d

とすると

Couldn't connect to Docker daemon at http+docker://localhost - is it running?

というエラー。なんのことだろう、と思ったら、

sudo をつけていなかった、というだけでした。

2019年11月17日日曜日

AWSメモ

AWSでプロキシ下でSSHログインするとき


ssh -o ProxyCommand='connect -H proxy.yours.com:8080 %h %p' -i 'path\to\MyKeyPair.pem' ex2-user@ipaddress

こういうエラーが出ますが、これは最初だけ出るそうです。
TheThe authenticity of host '' can't be established.
ECDSA key fingerprint is    SHA256:TER0dEslggzS/BROmiE/s70WqcYy6bk52fs+MLTIptM.
Are you sure you want to continue connecting (yes/no)?

D3 メモ

初歩的なメモ

ローカルでテストするとき サーバを立ち上げておく

js がhttp通信をするために必要。

開きたいindex.htmlのあるディレクトリで

$ python -m http.server 8000 --bind 127.0.0.1

とするとシンプルサーバが立ち上がります。

 http://127.0.0.1:8000/index.html

を開くとD3が使えます。


file:// でアクセスすると、エラーが出ます。

URL scheme must be "http" or "https" for CORS request.
Fetch APIを使っているからhttp通信が必要とのこと。

2019年11月12日火曜日

Google Search Consoleのカバレッジでfeedburnerがあるので消す

Google Consoleを見始めたのですが、

blog-post.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed:+blogspot/WepfD+(以前のサイト名)&m=1


という変なのが「カバレッジ インデックス登録されましたが、サイトマップに送信していません」の中にありました。

よく考えると、かなり前にfeedburnerというのに登録したのでした。

ということで、Boggerの

設定→その他→サイトフィード→フィード リダイレクト URL の登録

を削除しました。

https://help.shopstorm.com/article/300-how-to-disable-feedburner-for-your-blog
https://support.google.com/webmasters/forum/AAAA2Jdx3sUgQxotpq4sY8

2019年11月9日土曜日

フレイバーで公式オンラインショップが閉鎖していた件

昔利用していたシフォンケーキのお店の公式オンラインショップがマルウェアに感染して閉鎖したそうです。ランサムウェアでデータが復旧できなくなったんですかね。

"2019年2月に発生したマルウェア被害の影響によりお客様の情報を含む全てのシステムを消失するに至り"

だそうです。自分はポイントも何もなく、ずっと放置していたアカウントがあっただけなので特には問題ないんですが・・・。

と思ったら、ここのホームページはhttpでした・・・。

オンラインショップを独自でやっていたものの、今後は楽天とYahooでやるようですね〜。なかなか大変です。

2019年11月4日月曜日

世のサイトのクラウド環境などをメモする

aguse.jpでサーバを調べたりできます。



//labo.tv/2chnews/

www849.sakura.ne.jp
Gehirn Managed Certification Authority - RSA DV
組織名Gehirn Inc.
部門名
所在地Chiyoda-ku / Tokyo / JP

219.94.128.59


まとめサイト速報+
135.120.212.49.static.www3607m.sakura.ne.jp


楽天市場 akamai
rakuten.co.jp

逆引きホスト名HELP


a23-210-220-176.deploy.static.akamaitechnologies.com

2019年11月3日日曜日

nmap localhostでポートスキャン

ポートスキャンする

$ sudo apt-get install nmap

でnmapをインストールします。

$ nmap localhost

とすると、開いているポートが確認できます。その中で、

5000/tcp open  upnp

という表示が出ているのでポートが使用されていると確認できました。

$ nmap localhost
Starting Nmap 7.01 ( https://nmap.org ) at 2019-11-03 13:57 JST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000060s latency).
Not shown: 993 closed ports
PORT     STATE SERVICE
25/tcp   open  smtp
80/tcp   open  http
631/tcp  open  ipp
3306/tcp open  mysql
5000/tcp open  upnp
5432/tcp open  postgresql
8888/tcp open  sun-answerbook
Nmap done: 1 IP address (1 host up) scanned in 0.11 seconds
smtp, http, 
ipp はInternet Printing Protocol でプリンタ用
upnpはUniversal Plug and Play
sun-answerbookはjupyter notebookなのですが、sun-answerbookに意味は特にないようです。

sudo netstat -antop | grep 8888
で調べると

tcp        0      0 127.0.0.1:8888          0.0.0.0:*               LISTEN      5035/python      off (0.00/0/0)
tcp        0      0 127.0.0.1:34432         127.0.0.1:8888          ESTABLISHED 27320/firefox    keepalive (11.99/0/0)
こういうのが出てきます。



2019年11月1日金曜日

日誌 2019年11月

2019/11/03

bloggerを移転したのですが、検索での順位が下がってしまって、流入が減ってしまいました。これは再計算によってまた上がってくるのでしょうか。Googleの計算方法をあまり気にしていないのですが・・・。

2019/11/04

Chromeのブックマークを整理する方法を考えていたのですが、エクスポートの情報を見てみると、add dateというのがあるようです。これ順にならべておけばよいのかも。

2019/11/05

最近はAWSとRaspberryPiで遊んでいます・・・。世の中のオープンソースに助けられているなぁという実感がありますね。


2019/11/07

AWSで「すべて表示する」のリンクを踏むと・・・

構築の学習

ステップバイステップのガイド、ラボ、およびビデオを通じてソリューションをデプロイする方法を学びましょう。すべて表示する

「ご指定の条件に一致するコンテンツは見つかりませんでした。」と出る件。困ったことです。

2019/11/09

最近はアニメと勉強のコラボレーションがあったりするんでしょうか。K-POPアイドルのファンクラブに入ると韓国語を動画で教えてくれるとか・・・そういうのもあったりして。いいことかなーと思いますが。


2019/11/13

そろそろ、ubunntuをアップデートしておくか。

Ubuntu 16.04 LTSを使用している場合は(※1⁠)⁠,インストールの前にリポジトリのアップデートを行ってください。
※1
ほとんどいらっしゃらないでしょうが……。
と書かれていました。
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0588?page=1


2019/11/19

anacondaが壊れてしまった、というかPythonだけを消したりしたので当然なんですけど・・・。venvの中で消しても本体に影響するのか・・・とここらへんがよく分かってないです。

2019/11/26

とあるパスワードが突然大文字も1文字以上使わないとだめ、とかになっていました。セキュリティ的には正しいんでしょうけど、面倒なことこの上ない。8文字だったら2**8だけ候補が増えるわけで、いいのかな。

興味深いリンクを保存しておく


Cirroteuthid Octopus Billows Like a Circus Tent | Nautilus Live
タコの動画

全ての中国人が1メートルの高さから飛び降りたらその震度でアメリカまで津波が起きて大被害が起きると聞いた事があるのだけど如何なもんでしょう?

Read, Attend and Comment: A Deep Architecture for Automatic News Comment Generation
Ze Yang, Can Xu, Wei Wu, Zhoujun Li
A.Ngのメールに書いてあった論文。フェイクコメントを自在に作れるようになってしまう?

株式会社ビヨンド
サーバ導入、運用


2019年10月30日水曜日

AWSの無料枠って実質的にはいくらなのか

無料枠についての説明は多いのですが、実質何円相当なのか、というのがないので計算してみたときのメモです。基本的には月額(30日)で計算しています。


結論的には、無料のつもりで使い続けると金額が比較的大きいので気をつけるのはEC2とDBでしょうか。あとはSageMakerとかインスタンスを使うものは当然高いです。

EC2の無料枠の計算

750 時間/月の Linux、RHEL、または SLES t2.micro インスタンスの使用

Linuxで計算すると、

t2.micro1変数1 GiBEBS のみ0.0116USD/時間

https://aws.amazon.com/jp/ec2/pricing/on-demand/

の表にあるので、0.0116USD * 24 時間 *30 日 = 8.352 USD

これが12か月で100.224USDが無料枠です。

S3の無料枠


5 GB の標準ストレージ  0.023USD * 5 
20,000 件の Get リクエスト 20 * 0.00037 USD
2,000 件の Put リクエスト 2 * 0.0047USD

・・・月額相当 0.1318 USDでした。1年で1.5816USDです。

S3 標準ストレージ
最初の 50 TB/月0.023USD/GB


PUT、COPY、POST、または LIST リクエストリクエスト 1,000 件あたり 0.0047USD
GET、SELECT および他のすべてのリクエストリクエスト 1,000 件あたり 0.00037USD



RDSの無料枠


750 時間/月の db.t2.micro データベース使用 (適用可能な DB エンジン)
20 GB の汎用 (SSD) データベースストレージ
20 GB のデータベースバックアップおよび DB スナップショット用ストレージ

Postgresで


MySQLは0.026USDで10%くらい安い。

24*30*0.028 = 20.16USD/月

241.92USD が年間の無料枠です。


データベースが思った以上に高くつきますね。

Amazon DynamoDB


※無料利用枠は、いつでも毎月無料の枠と同じ。

25 GB のデータストレージ
毎月最初の 25 GB の保管は無料 0.285 * 30 = 7.125USD 相当
それ以降は月額 0.285USD/GB

DynamoDB ストリームからのストリーム読み込みリクエスト 250 万回
25 * 0.0228 = 0.57 USD 相当

毎月最初の 2,500,000 の DynamoDB ストリームの読み込みリクエストは無料
それ以降は 10 万の DynamoDB ストリーム読み込みリクエストごとに 0.0228USD

AWS のサービス全体での合計データ転送 (アウト) 1 GB もともと 0 USD
データ転送送信 (アウト) 1 GB/月まで 0.00USD/GB

https://aws.amazon.com/jp/dynamodb/pricing/on-demand/


Cloudwatch


10カスタムメトリクスおよび10アラーム 0.30 USD
100万件のAPIリクエスト 10USD 

ダッシュボード 毎月最大 50 個のメトリクスに対応するダッシュボード 3 個 * 3 = 9 USD


アラーム 10 件のアラームメトリクス (高分解能アラームには適用されません) * 0.3 = 3 USD

ログ 5 GB データ 0.033 USD * 5 = 0.165 USD

イベント カスタムイベントを除くすべてのイベントが対象

SageMaker


※初めて SageMaker リソースを作成した最初の月から 2 か月間

モデル構築のためのノートブック利用に t2.medium または t3.medium インスタンスを 1 か月あたり 250 時間
0.0608 USD

トレーニングに m4.xlarge または m5.xlarge インスタンスを 50 時間
0.361 USD

リアルタイム推論とバッチ変換用の機械学習モデルのデプロイに m4.xlarge または m5.xlarge インスタンスを追加で 125 時間
1.445 USD

あまり性能の高いインスタンスではないので安いです。


AWS Lambda

毎月無料枠

1,000,000 件のリクエスト/月 0.2 USD 相当

400 GB-秒 1 か月あたりのコンピューティング時間。0.00666668 USD相当

https://aws.amazon.com/jp/iot-core/pricing/

AWS IoT Core 

接続時間 2,250,000 分
メッセージ 500,000 件
レジストリまたはデバイスシャドウのオペレーション 225,000 回
トリガールール 250,000 件、実行アクション 250,000 件
例えば、50 台のデバイスを使うワークロードを実行する場合、無料利用枠では各デバイスを以下のように使用できます。
毎日 24 時間接続
1 日あたり 300 件のメッセージ交換 (メッセージサイズが 5 KB 以下の場合)
1 日あたり 130 回のレジストリまたはデバイスシャドウオペレーションの実行 (レジストリまたはデバイスシャドウのレコードサイズが 1 KB 以下の場合)
アクション 1 件を実行するルールの 1 日あたり 150 件の実行 (処理するメッセージサイズが 5 KB 以下の場合)

Amazon Lightsail


3.5 USD 相当が 1か月無料


Elastic Load Balancer

0.0243USD/Application Load Balancer 時間 (または 1 時間未満)
0.008USD/LCU 時間 (または 1 時間未満)

ちょっと細かいのであとで







2019年10月27日日曜日

gitのローカルからgithubにマージしてやり直すとき

git commitまではOKで、git push origin masterを違うディレクトリでしてしまい、
違うディレクトリが入ってしまった件。

revertしてgitをやり直し

先にNGだった例

# これはNG
git reset --hard ORIG_HEAD
# これはNG
git revert b7cffe03b6e9b05b5b5e429e178e12b6f081f1a8
# これはNG
git revert HEAD
# こんなエラーが出ます
error: Commit b7cffe03b6e9b05b5b5e429e178e12b6f081f1a8 is a merge but no -m opti
on was given.
fatal: revert failed

成功した方法と、を調べる方法

# グラフィカルにログを見れる(分かり難いかも)
git log --graph --oneline
# これで親がわかる
git show

commit 89e52f23917d1c4aa1e2e8c587139276014295ea
Merge: 6554f3a be99d45
この場合、6654f3a が親ですので、これに戻せばいいです。


# これをrevertする
git revert 6654f3a
git pull origin master
git push origin master

https://reasonable-code.com/git-push-cancel/
http://a01.hatenablog.com/entry/2017/04/17/230252
https://yakst.com/ja/posts/2515

2019年10月24日木曜日

Powershellでgitを使うときのフォントカラーを変更する

Powershellでgitを使うと、カラーになった部分の色が見にくいです。デフォルトでは特にエラーの赤色が背景とのコントラストで見えない・・・。

.gitconfig ファイルにこれを記載します。.gitconfigはhomeにあります。

[color]
    ui = true
[color "status"]
    changed = red bold
    untracked = red bold
    added = green bold
    nobranch = red bold 

https://stackoverflow.com/questions/18420139/changing-git-status-output-colors-in-posh-git


nobranch は HEAD detached at とかの部分。
redは暗いので、red boldにします。


configについてはこちら。color.status. という設定になっていて、の部分にbranchやheaderをいれて設定する。

https://git-scm.com/docs/git-config

2019年10月20日日曜日

htmlでindex ofを表示する

ファイル名一覧を表示したかった(Index of)

.htaccessファイルを編集した。

・日本語ファイル名が文字化けしているのでutf-8にした(一部は文字化けが残った)
・ファイル名が短く、途中で切れる(変更の仕方が不明)

Options Indexesがマイナスになっていたので消した
IndexOptions Charsetをutf-8にした

Options Indexes
IndexOptions Charset=utf-8


2019年10月16日水曜日

ドメイン取得で悩んでいる

ドメインを取ろうかと思っているのですが、名前を何にするのか悩むところです。

欲しいドメインが売りにでているかはドメイン屋さん(レジストラ)で調べればよいらしいです。

お名前ドットコムなんかでも売られています。試しにonigiri.comなんて探してみると、既に使われていてありませんでした。.inc と .workは即使えるようです。使用中になっている、http://onigiri.net/ を開いてみると、3500ユーロで売ると書いてあります。なかなか高いですね。50万円ですか。

https://www.whois.net/ というサイトもあってwhois lookupという項目で値段が出ています。ものによりますが、35ドルとか24ドルが多いかもしれません。

anime.funは82万円とからしいです。お名前ドットコムのプレミアムドメインというやつですが、高いです。高いのsky.xyz, rugby.funで165万円です。


ドメイン廃止


廃止するときのやり方について調べました。お名前ドットコムだけ、期限前に廃止するときは証明書の提出が必要と明記されていました。検索した限りでは、この会社だけのようですが・・・。

お名前.com


・自動更新設定を解除しておけば、登録期限日から一定期間経過後に自動的に廃止
・登録期限日前に廃止する場合は廃止申請が必要
廃止申請には上記の登録内容を証明する公的証明書の提出が必要
https://help.onamae.com/answer/8294

ムームードメイン

・コントロールパネルから操作
・解約後も有効期限までドメインが利用できる

https://muumuu-domain.com/?mode=faq&state=answer&id=000206


スタードメイン

・管理ルーツから利用停止
・契約更新日とドメインの期限日は異なるので、事前に利用停止申請を
・他社への移管の際もあらかじめ解約申請すること

https://www.star-domain.jp/faq/domain_delete.php

2019年10月14日月曜日

pandasで日時の列を作る、Matplotlibの横軸に日時を使う

Pandasのdata_rangeを使って日付の列を作る

例えば2019年1月1日から2020年1月1日までの間にある、月末日を求めたいときは
pd.date_range(start='1/1/2019', end='1/1/2020', freq='M')
DatetimeIndex(['2019-01-31', '2019-02-28', '2019-03-31', '2019-04-30',
               '2019-05-31', '2019-06-30', '2019-07-31', '2019-08-31',
               '2019-09-30', '2019-10-31', '2019-11-30', '2019-12-31'],
              dtype='datetime64[ns]', freq='M')
となります。
start, end, freqを入力すればよいです。日付は 月/日/年がデフォルトです。
freqはDate Offsetの記号で多数あるようです(使い勝手が悪そうなものも多いですが)。
Mは月末でMSが月初というのが注意点です。
W Week(W-SUN) W-MON Monday W-... (他の曜日) M MonthEnd MS MonthBegin D Day H Hour
https://pandas.pydata.org/pandas-docs/stable/user_guide/timeseries.html#dateoffset-objects

Matplotlibで横軸に日時の列を使う

# 日時を作る 2020年1月1日から4月1日までの水曜日の列
d = pd.date_range(start="1/1/2020", end="4/1/20", freq="W-WED")
v = np.linspace(1,10,len(d))
plt.plot(range(d.size), v, 'o')
# ticks, labelを作る
xticks = range(len(d))
xticklabels = [(d[0]+d[0].freq*x).strftime('%-m/%-d') for x in range(len(d))]
# xticksをセット
plt.xticks(xticks, xticklabels)
# x軸の左右のマージンをなくしている
plt.autoscale(True, axis='x', tight=True)
plt.show()
# 日時d の中身
DatetimeIndex(['2020-01-01', '2020-01-08', '2020-01-15', '2020-01-22',
               '2020-01-29', '2020-02-05', '2020-02-12', '2020-02-19',
               '2020-02-26', '2020-03-04', '2020-03-11', '2020-03-18',
               '2020-03-25', '2020-04-01'],
              dtype='datetime64[ns]', freq='W-WED')

2019年10月12日土曜日

Pythonでの表記統一

PEP8確認にflake8を活用する。
vimプラグイン vim-flake8 で保存するたびに確認する。

/home/.flake
を作っておき、例外を設定する。

blackでPEP8に合うように

TODO: flake8とblackで判定基準が異なる部分があるので統一したい。スペース行のカウントなど。

isort モジュールの順番を統一する

2019年10月1日火曜日

日誌2019年10月

2019/10/08
9月ごろからこのブログを移転しています。なかなか進みませんが、手作業で見直しをしたりcodeをprettyprintにしたりしています。面倒くさい・・・。未来ではコーディングももっと簡単になるのでしょうか。あまり想像できませんが、実行したいことを言うとコードが突然現れるみたいな。

InstantRstの整備をしています。レスポンスも早くてほとんどこちらの思う通りに動くのでいいですね。Cssの設定がいまいち分かりませんでしたが、templateのindex.htmlを直接書き換えるという方法でなんとかなりました。molokaiはできないけどrythmはできました。なぜ。。
https://github.com/gu-fan/InstantRst/issues/18

2019/10/09

ubuntuのtimeshiftって必要なんでしょうか。使ったことないですけど・・・。あまりわからずに入れているだけという気がしなくもないです。ファイルだけがやたらと多いのですが。snapshotを保存する設定があるのかな。

2019/10/26

AWSを個人で登録して試してみようかな、と思っているのですが。7、10月には25ドル分のクーポンがついていたとか、おそらくクリスマスにもクーポンが出るということを考えると、もう少し待ってもいいのかなーとか思ったりしています。別に特にやりたいことがあるというよりかは試してみたい、チュートリアルをやってみたい、という程度なんですが。

2019/10/27

gistをhtmlに載せることは簡単なのですが、これをGmailのhtml表示でできないものかな、と思ってしらべていました。よく考えるとhttpsのアクセスをし直さないと更新されないのでできないんでしょうね。
メールの拡張サービスをしているところではできるようですが。
https://mixmax.com/blog/product/github-email-how-to-embed-gists-in-gmail/


2019/10/28

bloggerの設定のためのメール通知が、Gmailで迷惑メールとして扱われていました。ちょっとビミョーですよね。それだけスパムとして使われているということでしょうか。

パスワードのソーシャルハックが少し前に話題になっていました。ああいうのを改変していろいろなscamが行われるんでしょうね。


2019年9月29日日曜日

rstファイルをvimで編集リアルタイム更新

rstファイルをリアルタイムでプレビューできるriv.vimをインストールしました。ちょっと大変でした。Python2と3が混ざっている感があります。

Ubuntu16.04 LTS ではOK。
Windowsでは×です。

インストール方法(無理やり感あり)


riv.vim (vim) とInstantRst (web server) を組み合わせます。サーバはflaskと同じ仕組みを使っているようです。

riv.vim, InstanRstを入れる。instant-rst.pyを入れる。こちらはPython2.7用しかないので、追加の設定が要りました。

・python2.7のディレクトリのパーミッションを追加する。

pipでThe directory '/home/.../.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.

と出るので sudo -H でインストールしました。

・python2.7のPATHを追加する。


 instantRst test.rst で起動すると、こんなエラーが出ていました。
 instantRst -f test.rst
test.rst
WebSocket transport not available. Install eventlet or gevent and gevent-websocket for improved performance.
 * Serving Flask app "instant_rst.server" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off

Some error/exception occurred.
(, TypeError('port must be an integer',), )


Portがintになっていないということで見てみると、Python2から3に値を渡すときに変換されているということでした。

エラーの該当部分はpython2.7/dist-packages/werkzeug/serving.py で、追加した結果はこうなりました。

port = int(native(port))  

if not isinstance(port, int):
    raise TypeError("port must be an integer")

入力されるportをtype(port)として調べると、型は future.types.newint.newint となっており、これは

from future.utils import native
int(native(port))

でintにできました。nattive(port) によって long にしてからint を使っています。

https://python-future.org/what_else.html

これで無事にInstantRstサーバが立ち上がって、ほぼリアルタムでrstファイルの更新ができます。

使い方メモ

起動するには、vim で rstファイルを開いた状態で
:InstantRst
これでブラウザが立ち上がります。

デフォルトのブラウザはfirefoxですが、
let instant_rst_browser='usr/bin/google-chrome'
とすることでクロムに変えました。vimrcにこれを書いても効果ないようです。

2019年9月23日月曜日

condaが壊れたので再インストールで直した

Ubuntu16.04, conda 4.7.10

condaで何かをインストールしたときに、conda自身もアップデートして、そのときに壊れました。アップデート時にcondaが壊れる現象は、他でも起こっているようです。

結論


解決方法を試行錯誤しましたが上手く行かず。結局、再インストールしました。

壊れたのを確認


condaを呼んだらモジュールありません、というエラーが出ました。PATHの設定が壊れたのかと思って確認しましたが、変わっていませんでした。

Traceback (most recent call last):
  File "....py", line 6, in
    from conda.cli import main
ModuleNotFoundError: No module named 'conda'

解決しようとした方法 -- 失敗


https://github.com/conda/conda/issues/2463
に同様のケースがあって、

https://github.com/conda/conda/issues/1733#issuecomment-150641779
に再インストールする解決策がありました。

※anaconda というディレクトリに入っているとします。
※user名はwakari

# 現状の名前を変えておく
cd anaconda
mv anaconda anaconda_orig
# sh ファイルをインストールする
wget Anaconda.shchmod a+x Anaconda.sh./Anaconda.sh # install to /opt/wakari/anaconda(Downloadしてから)
sh pathto/Anaconda_hoge.sh

# 新しいanacondaディレクトリに元のディレクトリと同期させる
rsync -a anaconda_orig/ anaconda/

# アップデートする
chmod -R a+rX anacondachown wakari:wakari anacondasudo /anaconda/bin/conda update conda
sudo /anaconda/bin/conda install -f conda-env


しかし、上手くできませんでした。コンフリクトしまくりのようです。
The environment is inconsistent, please check the package plan carefully
The following packages are causing the inconsistency:

  - https://repo.continuum.io/pkgs/free/linux-64::path.py==10.0=py36_0
  - defaults/linux-64::pycosat==0.6.3=py37h14c3975_0
  - defaults/linux-64::pathlib2==2.3.4=py37_0
こういうエラーが延々と続きます。
Package setuptools conflicts for:
wurlitzer -> python[version='>=2.7,<2 .8.0a0="">=3.6,<3 .7.0a0="">=3.7,<3 -="" .8.0a0=""> pip -> wheel -> setuptools
pandas -> numpy[version='>=1.11.3,<2 .0a0="">=1.9,>=1.9.3,<2 -="" .0a0=""> mkl_random[version='>=1.0.2,<2 -="" .0a0=""> numpy-base[version='>=1.0.2,<2 -="" .0a0=""> python[version='>=2.7,<2 .8.0a0="">=3.5,<3 .6.0a0="">=3.6,<3 .7.0a0="">=3.7,<3 -="" .8.0a0=""> pip -> wheel -> setuptools
<2 .8.0a0=""><3 .7.0a0=""><3 -="" .8.0a0=""><2 .0a0=""><2 -="" .0a0=""><2 -="" .0a0=""><2 -="" .0a0=""><2 .8.0a0=""><3 .6.0a0=""><3 .7.0a0=""><3 -="" .8.0a0="">
<2 .8.0a0=""><3 .7.0a0=""><3 -="" .8.0a0=""><2 .0a0=""><2 -="" .0a0=""><2 -="" .0a0=""><2 -="" .0a0=""><2 .8.0a0=""><3 .6.0a0=""><3 .7.0a0=""><3 -="" .8.0a0="">

結局、再インストール

原因は、 py3.6で最初にインストールして、途中で3.7にしたので、もう戻れない、ということのようです。 Anaconda丸ごとクリーン再インストールしました。

(コマンドは上の続きで)

sh pathto/Anaconda_hoge.sh
でAnacondaを再インストールして
cp -ar dir_new dir_old
で全部をコピーします。

2019年9月9日月曜日

seleniumで認証つきページのログイン(むりやり感あり)

ログイン画面がポップアップで現れるページにseleniumで自動で入りたい、ということがありました。

成功した方法(むりやり)


アドレスにusername:passwordをつけて、http://username:password@www.xxxx.co.jp としてアクセス。

それ以外のやり方ではログイン画面をseleniumがつかめませんでした。

ここからは失敗例


import time
from selenium import webdriver

try:
    driver = webdriver.Firefox()
    time.sleep(3)
except:
    quit()

driver.get(target_url)

これでブラウザは起動できます。Username, Passwordの入力画面が出ます。画面のidがわからないので画面ごとつかみます。

alert = driver.switch_to_alert()

alert.textなどはOKですが、alert.sendkeys()、alert.authenticate()はNGで、こんなエラーが出ます。

WebDriverException: Message: User prompt of type promptUserAndPass is not supported
WebDriverException: Message: POST /session/..../alert/credentials did not match a known command


--ここまで失敗例--

別に今の目的では、アドレスに直接打っても問題ないのですが、ちょっともやっとしますね。

答えが書いていたもの。

その他参考


2019年9月7日土曜日

メモ ソフト起動方法

VirtualBOX


ログイン、ターミナル立ち上げ

$ cd MyVagrant/MyCentOS

に入る。(VagrantFileがあるところ)

$ vagrant up

でVirtualBOX立ち上げる


Filezilla


$ filezilla

SiteManager の項目→Connect

RemoteSite は空白

LocalSite /home/username/


1回設定していれば設定が保管されているかも。

実用的なリンク集

HR系会社のコンサルタントインタビューがたくさんある
https://hrbc.porters.jp/magazine/topconsultant/?pageID=1

マネーフォワード 基礎知識が充実している。
https://biz.moneyforward.com/

freeeバックオフィスの基礎知識
https://www.freee.co.jp/kb/

クロネコファイナンス経営に役立つブログ
https://www.yamato-b2b-pay.com/blog

三井住友カードの法人、起業関連の知識ブログ

https://www.smbc-card.com/hojin/magazine/bizi-dora/index.jsp


ーーー

調査レポートR&A発行「オタクのコンテンツ消費の行動と心理調査」
https://www.kddi-research.jp/topics/2018/062701.html

「オタク」市場に関する調査
https://www.yano.co.jp/press-release/show/press_id/2070

jupyter %%timeit を使うときにセルの一行目にないとエラーになる

%timeit は一行を測定
%%timeit はセル全部を測定します

s = (size, size)
%%timeit -n1 -r1 m = np.zeros(s, dtype=np.int32)
mandelbrot_cython(m, size, iterations)

というように、同じセルの中でやると

UsageError: Line magic function '%%timeit' not found.

となります。

この内容をやっていたときに起きたエラーです。
https://ipython-books.github.io/55-accelerating-python-code-with-cython/

読書メモ

サブスクリプション のメモ

フォード車で、「好きな色のT型フォードを買える、ただし黒である限り」という言葉がある。黒色は乾くのが速いから生産が速かった。3分に1台。

コロンビアハウスは通販ビジネスで加入者との関係性のマネジメントに失敗した。最初の無料のお試しやディスカウントにつられて登録すると、解約し損ねると続けて請求された。不透明な請求、複雑なキャンセル手続き、お粗末なコミュニケーション。顧客無視のゾンビビジネスモデル。

インタラクティブ・アドバタイジング・ビューローによると、2016年に支出された全オンライン広告費の49%がグーグルに、40%がフェイスブックに。

アドビは2011年11月にサブスクリプションモデルに以降を発表した。その翌日から、経営陣が恐れていたほどではないが、株価は暴落した。

シュナイダーエレクトリックとそのパートナー企業は、ニュージーランドの農場と協力して灌漑水管理、天候予想、電力購入管理などのためのセンサーを設置している。


2019年9月4日水曜日

IT勉強メモ

閉域接続 通信業者が提供する特定ユーザどうしのグルーピングサービス。通話の制限など。

リバースプロキシ 外部からのアクセスに対してキャッシュを返すプロキシサーバ

SOAP Simple Object Access Protocol は、XMLをベースとした、他のコンピュータにあるデータやサービスを呼び出すためのプロトコル


2019年9月2日月曜日

subprocessでPythonからコマンドを打つときJupyterは使えない

Ubuntu16.04, Python3.6

Pythonからコマンドラインを呼んで、test.pyを実行しようとします(他のプログラムとかでもOK)。これをJupyterでやってしまうとNGです。

import subprocess
import sys

p = subprocess.Popen(["python", "test.py"],
                    stdout=sys.stdout)
p.communicate()
Jupyter(ipython)上で実行するとこういうエラーが出ます。
---------------------------------------------------------------------------
UnsupportedOperation                      Traceback (most recent call last)
 in ()
      3 
      4 p = subprocess.Popen(["python", "test.py"],
----> 5                     stdout=sys.stdout)
      6 p.communicate()

/home/shimo/anaconda3/lib/python3.6/subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors)
    665         (p2cread, p2cwrite,
    666          c2pread, c2pwrite,
--> 667          errread, errwrite) = self._get_handles(stdin, stdout, stderr)
    668 
    669         # We wrap OS handles *before* launching the child, otherwise a

/home/shimo/anaconda3/lib/python3.6/subprocess.py in _get_handles(self, stdin, stdout, stderr)
   1182             else:
   1183                 # Assuming file-like object
-> 1184                 c2pwrite = stdout.fileno()
   1185 
   1186             if stderr is None:

/home/shimo/anaconda3/lib/python3.6/site-packages/ipykernel/iostream.py in fileno(self)
    357 
    358     def fileno(self):
--> 359         raise UnsupportedOperation("IOStream has no fileno.")
    360 
    361     def write(self, string):

UnsupportedOperation: IOStream has no fileno.

Jupyterでなく、コマンドラインからPythonを呼ぶとOKです。

# from_commandline.py
import subprocess
import sys

p = subprocess.Popen(["python", "test.py"],
                    stdout=sys.stdout)
p.communicate()

$ python from_commandline.py     

でtest.pyが実行されるはずです。


https://stackoverflow.com/questions/31080829/python-error-io-unsupportedoperation-fileno
https://github.com/ipython/ipykernel/issues/272

参考:Powershellを呼ぶ場合


subprocess.Popen(["powershell.exe", ".....ps1"], stdout=sys.stdout)

2019年9月1日日曜日

日誌2019年9月

2019/09/01

アップルミュージックが「1か月分の料金で3か月ご利用できます。」という告知をしてくるのですが。ファミリープランで登録してしまっているので、これを個人プランに変えてから3か月にしたいんですけど・・・どうにもできなさそうです。ネットで情報を調べても同じようなオファーは少ないのか?出てきません。ほとんど3か月無料の情報しかないです。


2019/09/02

adsenseがいつのまにか独自ドメイン必要、となったようです。このブログはかつてadsense貼っていて外したまま忘れていてそろそろ再開しよっかな、と思ったらひっかかってしまったようです。こりゃこまりました。1000円くらいだから出してもいいのかな、とは思いますが。


2019/09/06

adsenseが無料で使えなくなったという理由で、別のbloggerに移転しようとしています。しかし面倒だな・・:・。

天気が不安定でゲリラ豪雨などで大変ですね。こういう災害から見を守るためのサービスが流行るんでしょうね。最近のゲリラ豪雨は雨量が多すぎて、等高線の最大のエリアの(80ミリ/時かな)を超えている範囲が大きすぎだったりしますね。これもそのうち変更されるんでしょう。年間雨量の統計とかどうなっているんでしょうか。

2019年8月25日日曜日

WiFiを掴んだら勤怠打刻 を自宅で試そうとした

メルカリラスクルの記事で、勤怠管理を「個人スマートフォンでWifi接続したら打刻」として記事がありました。

家でもできるのかな、と思ってやってみました。

MACアドレスの接続はわかる

ただし、離脱したかどうかは分かりません。

Wi-FiルータはAternという機種です。ルータを設定したあとにネットワーク上からhttp://aterm.me/ から認証して設定ページに入れます。



ログを見るには、「情報」→「通信情報ログ」とします。

時刻、address assigned, IPアドレス, MACアドレス、というログがあります。どの機器にいつアドレスが割り振られたかは分かりますが、いつ途切れるか記録されていないようです。



定期的にMACアドレスの接続を確認する→離脱が判る


snmpコマンドを試してみましたがPPPoEルータではこのコマンドは使えないのでは??と。(あまりわかっていません)

とりあえず、1つずつIPアドレスにpingすれば確認できそうです。つまり、流れとしては

・MACアドレス→IPアドレスの組合せを上記ルータページ  http://aterm.me/index.cgi/log_mainをスクレイピングする。

・各IPアドレスに対して反応を見る→使っているなら反応あり、在室。反応なければ不在とする。

ということをすれば良さそうですね。本当は1分単位で勤怠をつけるのが労働基準法に沿っている気がしますが、15分毎に動作すればよいのではないでしょうか。

※IPアドレスの割り振りは24時間有効ということで、別の機器を同じIPで振り分けることはなさそう。

世の中のWEB勤怠システム


製品版ならどうなのかな、と思って少し調べてみると、内容はいろいろありそうですが価格的には

・初期費用 5万円〜20万円(無料トライアルのところも)
・月額 数百円 /ユーザ

でした。初期費用が無料トライアルというのは概ね大手企業の系列のサービスですね。ソニーとか日本電気とかリクルートとか。

カードリーダーと読み込むクラウドだけ作っておけばよいからそれなりに低価格でできるんでしょうね。とか思ったりして。

2019年8月19日月曜日

LAMPメモ

Ubuntu, Apache2, MySQL, Pythonの組合せでWebアプリを動かしてみたいのでメモ。

https://linux.keicode.com/servers/lamp.phpのとおりにTaskselで一括設定。
Pythonを有効にしてtest.pyが見れるところまで。
return str とするとflaskと同じように表示できるようです。

アクセスログは /var/log/apache2/access.log

sudo apt update
sudo apt upgrade
sudo apt install tasksel
sudo tasksel install lamp-server
sudo service apache2 restart

として、localhostを開くとApache2 Ubuntu Default Pageが出る。

止めるには
sudo service apache2 stop

sudo /etc/init.d/apache2 start
でも開始できる。
httpd をインストールして
/etc/init.d/httpd start でも可能?です。
違いはhttps://okwave.jp/qa/q1237460.htmlにかいてあるが、RedHat系では・・・という差です。

TODO


・~/name/ とやらないようにしたい
・.hatccessの設定方法
・アクセスログの読み方がよくわからない。Mozilla, Chrome, Safariの3つの情報がある

2019年8月17日土曜日

tmuxのメモ

ubuntu16.04,  tmux 2.1
ubuntu20.04 tmux 3.0

(バージョンを見るときは $ tmux -V )

※赤くハイライトしている部分は個人的に重要だと思っていて、よく使うものです。
---

tmuxとは

  • terminal multiplexer (マルチプレクサ)
  • 1つのウィンドウで複数のターミナルを管理できます。
  • 便利ですが、少し学習が面倒です

tmux便利だと思うところ

  • ターミナルを1つにまとめられること
  • ウィンドウを閉じても、ログアウトしても再開できること(tmux -a で再開)

tmux不便なところ

  • デフォルトではかなり使いにくい(→configファイルを書く)
  • コピーペーストは、右クリックしながらでないとできない
  • マウスではスクロールが大きくできない
    • バーが出てこないのでマウスでは移動し辛い。
    • 対応策→viの移動を使う。
      • 『マウスカーソルを動かす』、または『 C-b, [ 』 でコピーモードに。viの移動が使えるようになる
        • Ctrl d / u / f / bで半画面下/上/ 1画面下/上
        • C-b のときはPrefixをかぶるので2回押さないといけない

インストール

$ sudo apt install tmux

用語

  • Prefix・・・コマンド入力を開始するキー。デフォルトはCtrl+b 。押しづらい。
  • クライアント(=セッション)・・・ターミナルに相当
  • ウィンドウ・・・ターミナルの中の画面
  • ペイン・・・ウィンドウを分割したもの

コマンド

※ $ ...  はターミナルでのコマンド。 $ なしは tmux上でのコマンド
※ C-b, a  は  Ctrl-b のあとに a  の意味
※ a[ttach] は a でも attach でも同じ の意味

$ tmux  起動

C-b, d tmuxから抜ける。デタッチ

$ tmux a[ttach] 前回デタッチしたところから起動

$ tmux a[ttach-session] -t num セッション番号numを起動

$ tmux ls   立ち上がっているクライアントを確認できる

$ tmux kill-session -t num  セッション#num を消す

$ tmux kill-server  全セッションを消す

C-b, ?  コマンド一覧を表示
C-b, "  ペインを上下に分割
C-b, %  ペインを左右に分割
C-b, ↑↓←→ カーソルを上下左右のペインに移動する
C-bを押したまま↑↓←→ ペインサイズ変更 (=ペインの端をマウスドラッグ)
C-b, Altを押したまま↑↓ 同上
C-b, o  ペインを移動する(ローテーション)
C-b, z  カレントペインが最大になる(C-b, z/o で戻る)
C-b, x  ペインをkill(=C-d ,  $ exit)
C-b, &  ウィンドウをkill

paneを別windowを移動させるときは

C-b, : でコマンドモードに入る
:join-pane  [-s src-pane] [-t dst-pane]  

今いるペインをwindow[1]に送る  

join-pane -t :1

: が必要なので注意

https://unix.stackexchange.com/questions/14300/moving-tmux-pane-to-window/14301


こちらでもできそう
https://askubuntu.com/questions/824496/how-do-i-access-tmux-session-after-i-leave-it

tmuxターミナルの下側のバーの意味


こんなの→[1] 0:bash*ZM

[1]  Session num
0: Window num
bash Window name
* current window
- previous window
Z one pane is maximized
M Marked pane

Marked pane については
・-s to join-pane, swap-pane and swap-window のデフォルトのターゲットになる
・C-b m で On/Offできる
あまり使えていない。
https://superuser.com/questions/1056977/uppercase-m-at-the-right-of-window-name-in-tmux

コピーペースト

マウスでドラッグ, コピー

(set -g mouse on を.tmux.confに記入すること)
SHITFキーを押しながらドラッグ右クリック ※先にドラッグできない


viモードでコピペ

(set-window-option -g mode-keys vi を .tmux.confに記入すること)

C-b, [  コピーモードに入る。viの操作で移動できるようになる。
→ Spaceでドラッグ開始。
→ Enter でクリップボードにコピー、通常モードに戻る

ペースト
C-b, ] 
※コマンドをコピーすると

xclipをインストール
.mux.confに下記を記入
bind -t vi-copy y copy-pipe "xclip -sel clip -i"

マウスで上の画面を表示しようとするとコピーモードに入ります。移動はviのコマンド: gg(先頭へ) G(末尾へ) C-u (半画面上へ) C-d (半画面下へ)が使いやすい。

ペインを別ウィンドウに移動する

C-b, :pane-join -s :0 -t :1

とすると、Window0のアクティブペインが、Window1のアクティブペインの下に移動します。
https://unix.stackexchange.com/questions/14300/moving-tmux-pane-to-window

使い勝手をよくするため、 .tmux.conf にオプションを書く

.tmux.conf
をホームに置いて、オプションを書く。


方法1. 再読み込みコマンド(再起動は不要)
$ tmux source-file ~/.tmux.conf

方法2. tmux kill-serverで全て消してから再起動する

.bashrcが反映されないとき

tmuxに入るとbashrcの内容が反映されないということがあります。bash_profileを使うからなので、.bash_profile の末尾に 
. ~/.bashrc 
と入力する。これでpash_profileからbashrc を呼び出してくれる。

https://stackoverflow.com/questions/9652126/bashrc-profile-is-not-loaded-on-new-tmux-session-or-window-why

.tmux.confの例

シンタックスハイライト

set -g default-terminal "screen-256color"

日時表示を右下のバーに

set -g status-right "#[fg=cyan]%Y/%m/%d %H:%M %A"

とすると、

fontはcyanで、2020/02/22/ 12:00 土曜日 のように表示されます。

マウスを使えるようにする(>2.1)

set -g mouse on

デフォルトではマウスで操作できないので、できたほうが嬉しいです。tmux2.1からこの書き方になったようで、以前の書き方をコピペすると unknown option: mode-mouse というエラーが出たりします。

新しいウィンドウ、ペインをHOMEではなくカレントディレクトリで開く 参考

bind c new-window -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"

my .tmux.conf

# When create new window, use current directory
bind c new-window -c '#{pane_current_path}'
bind '"' split-window -c '#{pane_current_path}'
bind % split-window -h -c '#{pane_current_path}'

# vi key-bind in copy mode
set-window-option -g mode-keys vi

set -g mouse on
set-option -s set-clipboard on
set-option -g default-command bash
set -g default-terminal "screen-256color"
set -g status-fg white
set -g status-bg black
set -g status-right "#[fg=cyan]%Y/%m/%d %H:%M %A"


画面コマンドチートシート

2019年8月8日木曜日

【e+より】退会済みのお客様へのメール誤配信のお詫び

このメールが届いたのは今日(2019/08/08)で、そもそも自分がいつ退会したのかも覚えていないのですが、最終のメールは2016年12月でした。おそらくその頃に退会したのでしょう。2年以上も保持していた、ということでしょうか。すみやかに削除させていただきます、というのは・・・・。いずれにしてもきちんとして欲しいものですね。

--ここから引用--

━━━━━━━━━━━━━━━━━━━━━━━【e+より】退会済みのお客様へのメール誤配信のお詫び━━━━━━━━━━━━━━━━━━━━━━━
8/8(木)にお送りしました「【e+より】便利になったイープラスアプリを利用してみませんか?」という件名のメールについて、一部退会済みとなっているお客様にも、誤ってメールを配信してしまっておりました。この度はご迷惑をおかけいたしまして誠に申し訳ございません。
退会済みのお客様の個人情報については、退会後も一定期間弊社内で保持させていただいておりましたが、本メールを配信後、すみやかに削除させていただきます。
今後このようなことのないよう、十分注意して参りますので何卒、ご容赦くださいますようお願い申し上げます。
この度はご心配とご迷惑をおかけいたしまして誠に申し訳ございませんでした。重ねてお詫び申し上げます。


※本メールは送信専用のため、直接返信いただいてもお問合せには答えできませんのであらかじめご了承ください。
イープラス

2019年8月3日土曜日

日誌2019年8月

2019/08/03

RealForceのキーボードの2個目を買いました。注文から2ヶ月待ちましたけど・・・品薄なんですね〜。しかし、発注かけて納期が判明したときにはキャンセルできなくなっているというyahooショッピングのシステムには辟易しました。先に納期を聞いておきましょう、ということですね。「入荷次第発送」という表記には気をつけましょう。

Pythonや各種コマンドのスニペットを書き散らしてきたのですが、これらをまとめたりするのはどうしたら良いんでしょう・・・と思っています。アクセスが全くないものは消していいかな、とも思います。

2019/08/04

モニタを大きくするか、ずっと悩んでいます。24インチから27インチにしたいけど、そこまで自分が活用できていないので。目に優しい画面って何なんでしょう・・・。

2019/08/06

cronの設定が上手くてきていないというか、ubuntuを再起動したときにどうなるかが不明なのですが。これはcrondが生きてるかを確認すればよいということかな。


2019/08/08

CRONのログを見ようと思って、Pythonを動かしているのでsyslog | grep python としていたら

org.debian.apt[1054]: /usr/lib/python3/dist-packages/aptdaemon/worker/pkworker.py:35: PyGIWarning: PackageKitGlib was imported without specifying a version first. Use gi.require_version('PackageKitGlib', '1.0') before import to ensure that the right version gets loaded.

というよく分からないエラーが出ていました。debianのホストに繋いで?何かしようとしているようですが・・・。少し調べてみたいですが、いまいち辿り方がわかりませんね。

2019/08/11

tmuxというターミナル分割アプリケーション、マルチプレクサというらしいですが、を使おうとしています。が、何がいいのかいまいちわかりません。まず移動がしにくすぎるのですが。これはキーバインドを何とかするとそれでいいのかしら。自分の使い方ではあまり恩恵が受けられないのかも。

2019/08/16

大きめのマウスが好きなのですが、最近減ってきている気がします。おそらく、amazonで中国メーカーの安くてそれなりに良いマウスが増えてきているから、バリエーションを増やすと採算が合わなくなるんでしょうね。と推測。


2019/08/18

CRONが動かない理由がやっとわかりました。エラーをファイル出力してみないとわかりませんね。勘に頼って確認しているようでは・・・。大規模なファイルを操作できるようになりたいものです。

2019/08/19

Rを使ってみたいけど、Windowsでは文字コードが解決できないことが多くて使えないんですよね〜。かといって自宅のUbuntuで使っているかというと微妙ですけど。アカデミックな人たちの残している情報はRで書いてあるのが多いので使えると(せめてPythonに移植できると)嬉しいんですけど。

2019/08/25

adsenseを付けようとしているのですが、できないです、他のbloggerにはつけているんですけど、サイトを登録っていうのがどうもできなくなったようですね。


2019年8月2日金曜日

matplotlibでA4サイズにセットする

Python matplotlibでグラフを描くとき、あとでA4サイズで出力したい、というときに便利な技です。

fig = plt.figure(figsize=(11.69, 8.27))

とすると、横11.69インチ、縦8.27インチに設定できますが、これがA4相当です210mm × 297mm)


import matplotlib.pyplot as plt
from matplotlib.backends.backend_pdf import PdfPages
fig = plt.figure(figsize=(11.69, 8.27))
plt.plot([1,2,3,4], 'o')
plt.show()



PDFファイルとして保存します。

#set path
pp = PdfPages("pdf_test.pdf")
# save and close
pp.savefig(fig)
pp.close()



こちらが保存したPDFファイルのプロパティです。Paper SizeはA4になっています。

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ヶ月払うはめになっていたのですが、それも今日で終わりです。というより、終了に設定していても期限までは使えるので早めに変更しておくのが重要かと。




2019年6月30日日曜日

UbuntuでSystem Settingが消えたとき

Ubuntuを使っていて、いつの間にかSystemSettingが消えてしまいました。Displayも表示できません。何かの際に消してしまったようですが・・・。

調べてみると、unity-control-centerを再インストールすれば良いようです。

$ sudo apt-get install unity-control-center

これで直りました。Unity-Tweak-Toolがおかしかったのも同時に直っています。

以下のコマンドではデスクトップを全部入れなおすようですが、ここまでやらなくても、ということで↑のが紹介されていました。

$ sudo apt-get install ubuntu-desktop

https://askubuntu.com/questions/453440/missing-system-settings-after-removing-some-packages

2019年6月22日土曜日

C++で括弧を省略できる

基本的なことみたいですが、初心者なりに混乱したので。

C++ ではforやifの括弧{}を省略できる


for ( int i = 0; i < N; i++){
    m += i;
}

for ( int i = 0; i < N; i++)
    m += i;

とだけ書いてしまってもいいと。
ストラウストラップの本でもそうなっていました。

しかしどこまでが、というと 『; が出てくるまで』ですね。

括弧を書いた方が安全性は高まるという議論があるようです。

https://el.jibun.atmarkit.co.jp/hidemi/2009/07/post-29fb.html
http://bashalog.c-brains.jp/09/08/05-004630.php

2019年6月18日火曜日

Pythonのimport mathのfactorial(階乗)

Pythonのimport mathでfactorial(階乗)が使えるのですが、その中身はどういうコードになっているのか調べてました。

ローカルの中では、
mathmodule.c

に書かれていました。

githubでソースを見ると・・
cpython\Modules\mathmodule.c

という場所にあります。

n! の計算 factorial は
binary split という計算方法のようです。

http://www.luschny.de/math/factorial/binarysplitfact.html
がオリジナル?

ビットをカウントしている部分の解説
http://www.mwsoft.jp/programming/java/java_lang_integer_bit_count.html

すごいテクい(死語?)んですけど・・・。
勉強になったけど自分では書けないですね〜。