風待ち

プログラミングの勉強や日々の出来事のログなど

WindowsのCMDを使ってCOPYコマンドでファイルを連結する

file1とfile2を連結してfile3を作る

CMD> COPY file1 + file2 file3

ただし、出来上がったfile3の最後に空白行が入る。 なので、例えば、CSVなんかを連結して、SQLLoderに食べさせる時にこれを使うと最後の行がエラーになるので注意が必要。

空白行を入れたくなければCOPYコマンドではなくTYPEコマンドとリダイレクトでやれば最後に空白なんて入らない。

CMD> TYPE file1 file2 > file3

ちょっとした計算をコマンドライン上でやりたい時のPowerShellとBashでのやり方の違いメモ

電卓を開くのが面倒な時に覚えておくと便利かも

PowerShellはそのまま

PS> 100 - 50
50

Bashは算術式展開?で書かないといけないみたい

$ echo $((100 - 50))
50

これだけ見るとPowerShellよりもBashの方が面倒か

ちなみに変数に入れるのは

PowerShell

PS> $x = 100
PS> $x
100

Bash

$ let x=100
$ echo $x
100

vimの:sort uをemacsではどうしたらいいか調べたのでメモ。

20年近く使ってきたvimからemacsに乗り換えようとしている。

けれど、ついつい使い慣れたvimを使ってしまう。

特に、急いでいる時はemacsで開いていても、vimで開き直してしまう事もある。

これは単に慣れの問題だと思うので少しづつでもemacsを使っていこうと思う。

ファイル内の行を並べ替えて重複を削除する

vim

:sort u

emacs ファイルの先頭にカーソルがいる事

M-x sort-lines
M-x delete-duplicate-lines

たまに乗り換えなくてもいいのではないかと思う時もあるけど、久しぶりに「ハッカーと画家」を読んだからさー。熱が冷めるまでは仕方ないね。

年末の大掃除のついでにシステムの監視用にログを取っているSQLiteのファイルも大きくなっていたので、こっちも掃除するかといらなくなったログデータを削除してもファイルサイズが小さくならなかったのでvacuumして小さくした。

複数のシステムを運用していると、バッチなんかで出力されるログが溜まっていく。

定期的に削除されるようにしているし、個別のファイルに吐かれているものだから検索も面倒なので使い勝手が悪い。

なので、そのログのファイル名と内容をけっこう雑にSQLiteに入れて、ログDBとしてあとでWebから検索できるようにしている。

ログ自体はテキトーに入れているが、バッチがエラーになった時なんかに、過去に同じエラーが出たことがないかを調べたり、他のバッチでも同じエラーがないか調べるのには当初考えていたよりも便利に使えている。

そのログDBも放置しているといつの間にかサーバーのディスクを圧迫する容量となっていたので、同僚たちが大掃除している中、一人、サーバー内の掃除をしていた。

最初は単純にDeleteしてしまえば、SQLiteのファイルサイズが小さくなるだろうと思っていたけど、そうはならなかった。 Oracleだと自動拡張とかを考えなければ最初から指定した容量を取ってるからそれと同じノリか。一度、伸びると縮まらないジャージのゴムを思い出した。

調べると「vacuum」ってすると小さくなるらしいので試した。

CMD> sqlite ファイル名.sqlite

sqlite> vacuum;

それほど時間がかかる事もなく、容量が小さくなった。

これで、サーバーの容量が足りなくなったと、夜中に呼び出されることもないだろう。

Raspberry Piにカメラをつけて、コマンドで撮影するのは問題なく上手く行ったけど、ピント合わせが面倒だったのでライブカメラにして合わせようと思ったらMotion-mmalが動かず、motionEyeを入れることでなんとか使えるようになった。

TechShareのRaspberry Pi用カメラモジュール(Standard,Adjustable Focus)というものを購入。

Amazonですすめられるままに買った。動作報告のレビューもあるし問題ないだろう。

届くと、説明書なんかはなくてURLが書かれているだけ。まぁ安いものだし。

Camera -Raspberry Pi 用カメラモジュール

そこに書かれているままにセットアップしてコマンドを打つと問題なく撮影された。

raspistill -o image.jpg

上下左右が逆さまになったが、これはカメラの取り付け方が反対みたいだ。

Raspberry Pi本体とつながっているケーブルを上にして置くと逆さまになるみたい。

これについては、オプションをつければ問題なく撮影してくれる。

rasbstill -vf -hf -o image.jpg

ここまでは良かったが、ピント合わせが面倒で仕方なかったので、Motion-mmalを入れることにした。

が、これが難航。どうやっても「libavformat.so」なるものがないといわれる。

調べつつ「apt-get」で入れようとするもない。途方にくれていたらmotionEyeを発見。説明に従って入れていく。

motioneye Install On Raspbian

途中、4のところでエラーになるがおもむろにもう一度同じコマンドを実行したら上手く行った。失敗した理由も再実行で上手く行った理由もわからないし、Issuesに近いものが書かれているがよくわからん。まぁ上手く行ったのでよしとしよう。

4.Install the dependencies from the repositories:

$ apt-get install python-pip python-dev libssl-dev libcurl4-openssl-dev libjpeg-dev

説明の最後まで行けば、あとは、/etc/motioneye/motioneye.confに書かれているポート番号を調べてブラウザで「http://Raspberry PiのIPアドレス:調べたポート番号/」にアクセスすればライブで映像が見れる。

これで、ピントの調整も上手く行ったのでmotionEyeは止めてcronで5分に一回撮影する。

$  systemctl stop motioneye

cronで動かすShellスクリプトは「camera.sh」としてこんな感じのシンプルなものにした。

#!/bin/bash

DATE=$(date +"%Y-%m-%d_%H%M")

raspistill -vf -hf -o /home/pi/camera/$DATE.jpg

カメラフォルダの下に年月日と日時のファイル名で保存していく。

さて、何が写るか。

これでうちの家の庭を荒らしまわっている犯人を特定できるだろう。おそらく、ネコかムジナだろうけど。

夜の撮影はやめておく。カメラも普通のものだし、他のものが写ったら嫌だし。しかし、ムジナだと犯行は夜か…

Raspberry Pi3でどうやってもWifiにつながらなかったので、network-managerに変更したらあっさりつながった。

ずっと有線で作業していて、いよいよWifiを使うとして、調べながらwpa_supplicant.confを書いても上手くいかず。

GUIで操作してSSIDをクリックするとパスワードを求められるが、それにパスワードを入力しても一切反応がない。 (最初はraspbian_liteを落としていたのでCUIしかなく、仕方なくまた一晩かけて落としなおした。)

/etc/network/interfacesを見るが、どうも上手くいかない。

外の防犯カメラを作るためにRaspberry Piを買ったので無線でなければ準備がものすごく面倒になる。

あきらめかけていたところ、network-managerなるものがあると知ったので、そっちに切り替えることにした。

  1. インストールと削除
  2. /etc/NetworkManager/NetworkManager.confを編集
  3. /etc/network/interfacesのこれまで試行錯誤した設定をコメントアウト
  4. 接続したいWifiを探して
  5. 設定する
$ sudo apt-get install -y network-manager
$ sudo apt-get remove -y dhcpcd5

managed=falseをmanaged=trueに変える

managed=true

interfacesは全部「#」でコメントアウトしてしまってよさそう。小心者なので最初はwlan0系だけコメントアウトした。

# allow-hotplug wlan0
# iface wlan0 inet dhcp
#     wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

※eth0もコメントアウトしないと今度は有線が使えなくなったけど、無線でだけで十分なのでどうでもいい。

Wifiを探す

$ nmcli dev wifi list

接続したいWifiSSIDとパスワードを設定

$ nmcli d wifi connect SSIDを書く password パスワードを書く

これで接続できるようになった。

それでも上手く行かない時は一度、ちゃんとデバイスが認識されているか見た方がいいかも。

$ nmcli dev status

ネットで調べながらだとOSのバージョンが違って上手く行かなかったりすることも多い。

情報にも鮮度があるから、調べる時にはいつ書かれたものかを意識した方がよさそう。

仕事では古い技術を使うことが多いから、逆に過去のものをあさる事が多いんだけどね。

VB6とかVB6とかVB6とか。

Raspberry Piを買ったけど、ネットワークが細すぎてraspbianをブラウザでを落とそうとしてもエラーになったのでwgetで落とした。

FireFoxで落とそうとしたけど、13時間かかると出る。使ってるネットワークが細いことは知ってたけど、ここまでとは思わなかった。

そして、放置していたらいつの間にかエラーになって止まっていた。

再開しても、最初からやり直しになるので結局、2時間もたたずにエラーになってしまう。

そこで、Windows7ではあるものの、wgetを使っていたのでそれを使ってダウンロードした。

URLはFireFoxのエラーになったものを右クリックして「ダウンロード元のURLをコピー」した。

CMD> wget.exe http://director.downloads.raspberrypi.org/raspbian_lite/images/raspbian_lite-2017-12-01/2017-11-29-raspbian-stretch-lite.zip

一晩放置していたらダウンロードが終わっていたので、SDカードに書き込むと問題なく起動した。