現在、当社のWebサイト(https://www.fourthgate.jp/)が閲覧できなくなっています。
VPSのOSをUbuntu18.04にアップデートした → PHPが7.2になった → Webサイトに使っていた BaserCMS 3 が動かなくなった
ということです。
ちょっと時間がないので、しばらくはこの状態です。
現在、当社のWebサイト(https://www.fourthgate.jp/)が閲覧できなくなっています。
VPSのOSをUbuntu18.04にアップデートした → PHPが7.2になった → Webサイトに使っていた BaserCMS 3 が動かなくなった
ということです。
ちょっと時間がないので、しばらくはこの状態です。
subversionを使っていますが、いい加減、gitに切り替えないとと思いつつ幾星霜…
ようやく重い腰を上げて、gitlab をインストールしてみようかと思い立ちました。
が、予想外に四苦八苦。
一つ目は、ラズパイの起動ディスク。
SDカードに全部突っ込むのはさすがにどうかと思い、USB-HDDからの起動とします。
mpd用のラズパイでは、USBストレージからいとも簡単に起動したので、すんなりいくだろうと思ったのですが…
システムが起動したりしなかったりします。どうやらHDDケースのせいのようです。
オートパワーオフなどの機能が入っているケースだとうまくないようです。
ずっと以前に買った、USB/IEEE1394兼用ケースにしたら、うまく起動するようになりました。
二つ目は、gitlabのメモリ使用量。
gitlabのデフォルトの設定のままだと、ラズパイではメモリ不足でスワップしまくって、かえって遅くなってしまうらしいです。
ということで、先人達の記事にあるとおり、postgresqlにアサインするバッファ容量を減らして対応しました。
ようやく、gitlabのスタートラインに建てました…
こんな遠回りしているから、イカンのですよね(笑)
先日、Ubuntu 18.04.2をインストールしようとしたところ、以前の記事と同じく、途中でループしてインストールできないという症状が起きました。
ぐぐってみたところ、こんな記事にたどり着きました。
https://forums.ubuntulinux.jp/viewtopic.php?pid=119684
インストールの言語を日本語にすると、この現象に遭遇するようです。
ということで、言語を英語のままインストールを続行すると、すんなりインストールできました。
わかってしまえばなんと言うことないですが…
先日のラズパイ温度計、延々と温度計測を続けています。
一日の温度変化は、測定データを全て取得すればよいですでが、週間とか月間といった長いスパンになると、データをはしょったほうがよいです。
ということで、測定データの移動平均を取ってみようと思い立ちました。
色んなサイトを参考にさせて頂いて、なんとか実装することができました。
CakePHP3でのコードはこんな感じです。
$hm_data = $this->ondo_data->find( )
->join( [ .....(3)
'table' => 'temperature_histories',
'alias' => 'subtbl',
'type' => 'LEFT',
'conditions' => [
'TIMESTAMPDIFF(MINUTE, TemperatureHistories.measuring_datetime, subtbl.measuring_datetime) BETWEEN -35 AND 35',
'TemperatureHistories.sensor_id = subtbl.sensor_id',
],
] )
->select([
'dayhhmm' => "DATE_FORMAT(TemperatureHistories.measuring_datetime, '%d %H:%i')",
'hourAvg' => 'AVG(CAST(subtbl.temperature AS SIGNED))', .....(5)
'measuring_datetime' => 'TemperatureHistories.measuring_datetime',
])
->where(function ($exp, $q) use ( $sdate, $edate ) { .....(1)
return $exp->between( 'TemperatureHistories.measuring_datetime', $sdate, $edate );
})
->where( ['MINUTE(TemperatureHistories.measuring_datetime)' => '00', 'TemperatureHistories.sensor_id' => $sensor_id ] ) .....(2)
->group([ 'TemperatureHistories.measuring_datetime' ]) .....(4)
->order([ 'TemperatureHistories.measuring_datetime' => 'ASC' ]) .....(6)
->all();
temperature_histories はテーブル名。
temperature へ計測結果が入ります。
measuring_datetime は計測日時。
sensor_id は、温度センサーのIDです。
大ざっぱな解説は…
(1)集計期間は、$sdate と $edate の間です。
(2)データを取得するのは、$sensor_id 指定されるセンサー、時間は正時(00分)毎とします。
(3)subtblという別名で自分自身をjoinしますが、その際に、測定時間の前後35分間の測定値も取得します。
(4)joinしたテーブルからは複数のデータがくるので、TemperatureHistories.measuring_datetime でグループ化します。
(5)上記(3)でjoinしたsubtblから取得したデータの平均値を計算します。
(6)当たり前ですが、測定時間でソートします。
temperature を CAST しているのは、temperatureが数値型ではなく文字列型のためです。
最初に、あまり深く考えずに、文字列型にしてしまったので、こんなことになっています。
dayhhmm はグラフ化する時に横軸で使用するためです。
色々あって、Let’s EncryptはTLS-SNIを無効にしますよと、メールが届いていました。
当たり前ですが、放置するわけにもいかんので対応しました。
以下、備忘録代わりです。
といっても、
https://certbot.eff.org/
にアクセスして、Webサーバとディストリビューションを選ぶと、手順が表示されます。
それに従って実行するだけですが…
取引先の方から、室温を測ってグラフ化したいんだけど…という相談を受けました。
その話は実施には至らなかったのですが、いろいろ調べてみると、温度センサーは安価でしかもAmazonあたりでも売られています。
また、ぐぐってみると、それほど難しい作業でもないようです。
ということで、ユニバーサル基板や端子台などを買ってきて、組んでみることにしました。
なんだかんだで20年ぶりくらいの電子部品の半田付けです。
買ってきたばかりの半田ごて、最初にハンダをなじませることをしなかったもんで、すぐに黒さびが吹いてしまうというチョンボからのスタートです。
すったもんだがありましたが、三本の温度センサーのプローブと人感センサーを取り付けました。
温度センサーと人感センサーの出力を10分間隔で取得して、データベースに保存させて、それをグラフ化するというプログラムを組んでみました。
これらのプログラムはPHPで組んでいます。
グレーの網掛けの部分は、僕がPCの前にいるということを示しています。
グラフの生成は、Chart.jsを使用しました。
これはなかなか楽しいです。
mpd(Music Player Daemon)のリモコンとして動作するWebアプリ、mpcbridge ver 5.8をリリースしました。
↓↓ダウンロードはこちら
https://mpcbridge.fourthgate.jp/files/download/mpcbridge.zip
ver 5.7から以下の修正、変更を行っています。
1) タグにアルバムタイトルが空または存在しない場合に、DB構築でエラーになる問題を解消
2) mpdの楽曲DBをMySQLデータベースにインポートする際のパフォーマンスをちょっとだけ改善
3) フリーテキスト検索の処理を、CakePHP3本来の構造に近づけました
4) アーティスト情報を更新
5) CakePHPコアを3.6.14にアップデート
これまでRaspberry Pi 3 BをTimeMachine用に使っていましたが、これをRaspberry Pi 3 B+に変更しました。
設定内容を備忘録として…
公式サイトからRaspbian Stretchをダウンロードして、SDカードに書き込みます。
Raspberry Piを起動させて、必要があればネットワークの設定を行います。
僕は、IPアドレスをdhcpから固定に変更しました。
まずは、sshを起動させます。
sudo systemctl enable ssh.service
sudo systemctl start ssh.service
とりあえず、インストール済みパッケージを更新。
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install rpi-update
次に、netatalkのインストールに必要なツール類をインストールします。
sudo apt-get install build-essential
次は、netatalkのビルドに必要なライブラリ類をインストールします。
詳細は、http://netatalk.sourceforge.net/wiki/index.php/Install_Netatalk_3.1.11_on_Debian_9_Stretchを参照してください。
sudo apt install libevent-dev libssl-dev libgcrypt20-dev libkrb5-dev libpam0g-dev libwrap0-dev libdb-dev libtdb-dev libmariadbclient-dev avahi-daemon libavahi-client-dev libacl1-dev libldap2-dev libcrack2-dev systemtap-sdt-dev libdbus-1-dev libdbus-glib-1-dev libglib2.0-dev libio-socket-inet6-perl tracker libtracker-sparql-1.0-dev libtracker-miner-1.0-dev
netatalkのソースコードをダウンロードして展開し、ビルドします。
./configure \
–with-init-style=debian-systemd \
–without-libevent \
–without-tdb \
–with-cracklib \
–enable-krbV-uam \
–with-pam-confdir=/etc/pam.d \
–with-dbus-daemon=/usr/bin/dbus-daemon \
–with-dbus-sysconf-dir=/etc/dbus-1/system.d \
–with-tracker-pkgconfig-version=1.0make
sudo make install
ひとまずインストールは完了。
次は、TimeMachine用のHDDの接続とフォーマットして、マウントします。
ここでは、/mnt/timemachine としておきます。
netatalkの設定ファイル( /usr/local/etc/afp.conf )を編集します。
[Global] セクションに、以下を追加します。
mimic model = AirPort
これで、アイコンがTime Capsuleになります。
また、以下を追加します。
[RaspberryTimeMachine]
path = /mnt/timemachine/backup
time machine = yes
以上で設定は終了したので、netatalkを起動します。
sudo systemctl enable avahi-daemon
sudo systemctl enable netatalk
sudo systemctl start avahi-daemon
sudo systemctl start netatalk
Macからは、これでTime Machine先に選べるはず。
今年もオープンソースカンファレンスに参加してきました。
百道のSRPで開催だったのですが、学生さんが多かった印象です。
オジサンは少なかったですが、ラズパイオーディオの話だけはオジサンがそれなりにいたような…
お昼過ぎまでしか会場にいなかったんで、そんなに沢山の話は聞けませんでした。
MySQL 8のGIS系のお話は、緯度経度が測地系によって微妙に違う話や、平面に投影する座標系の話とか、昔地理の授業で習ったような話で面白かった。
また、その昔ガラケーの位置情報で今いる場所を調べようとしてた時に、いくつかの座標系があって面倒だったのですが、その経緯も知れました。
また、東経135度の話も面白かった。建前上は、明石の天文台が東経135度にあることになっているけど、地図で使われている測位系では明石市役所付近が東経135度らしい。
もっとも、米軍が使っているWGS84と、日本が使っているJGD2011では、またすこし違うらしいですが。
というわけで、MySQLのGIS関数では、どの測地系を使うかの設定もできるようになってるとか。
git超入門も拝聴いたしました。
gitは使ってはいるものの、pullして、ちょこちょこっと変更して、commit、pushしているだけなので、わかっているとは到底言いがたく(笑)
大変勉強になりました。。
BaserCMSは、いよいよCakePHP3化ということだそうです。
一部のホスティングサービスでは、いまだにPHP 5.4が使われている現状では、CakePHP3ベースに移行するのはどうかということだったそうです。
さすがに最近はそれもなくなり、PHP7が主流になりつつあるから、いよいよ移行ということでした。
最先端の案件だと、こんなことは気にしなくて良いのでしょうが、中小企業のWebサイトだと、ずっと昔からのホスティングサービスを使っていたりしますからね。
次バージョンでは、プラグイン化してcomposerでインストールできるようにするということでした。
とはいえ、Cakeは2から3でかなり変わるので、大変だろうなあ。
僕もCakeの2から3では四苦八苦しています。。。
備忘録として…
CakePHP3で画像をストリームとして吐き出す場合のコード。
この辺、CakePHPがアップデートする度に、結構変わってて、ググっても古い情報が結構ヒットするので…
ファイルを吐き出す場合
use Zend\Diactoros\Stream;
$this->autoRender = false;
$imageinfo = getimagesize( $imagefile );
$stream = new Stream($imagefile, ‘rb’);
$response = $this->response->withType($imageinfo[‘mime’]);
$response->getBody()->write($stream);
return $response;
データベースから読み込んだ場合、
$this->autoRender = false;
$data = $this->Model->get( $id );
$imagestream = stream_get_contents($data->image);
$response = $this->response->withType($data->mime);
$response->getBody()->write($imagestream);
return $response;