[夏休みの宿題][IchigoJam] パプリカのスマホ操作
子供(小6)が通っている塾で
マイコンボードIchigoJam(https://ichigojam.net/)を使った
プログラミング講座を受けており
一通り操作ができるようになったようで
今年の夏休みの宿題にそのIchigoJamで制御可能なロボット
paprika(パプリカ)(http://pcn.club/paprika/)を購入して
夏休みの宿題にしてみた
またついでにIchigoJamに取り付ける無線LANボード
MixJuice(http://mixjuice.shizentai.jp/)も購入して
スマホやタブレットから操作できるように遊んでみた
パプリカの組み立ては子供が担当
IchigoJamへの5ピンソケットの半田付けだけはこちらで処理
制御プログラムも自分で入力して無事期待どおりに動作することを確認
ここからはこちらの作業だが
MixJuiceの設定でいきなり躓く
http://fukuno.jig.jp/1771
にあるようにどうも1.2.2より古いファームでは
USキーボードでアンダーバーの入力不可となっており
自宅のアクセスポイントのSSIDや事前共有鍵が入力不可
とりあえず職場に眠っていたPS/2の日本語キーボードを借りてなんとか対応
他にはUSBシリアル接続で直接パソコンから入力できそうだったが未確認
無事無線LAN設定が済んだので
http://fukuno.jig.jp/1382
を参考にIchigoJam用のプログラムを作成
スマホやタブレットのブラウザから操作するために
簡単なPHPの操作ボタンページも作成
こちらからどうぞ
GitHub - hariki/paprika-remocon
具体的にはスマホやタブレットで入力した操作情報をPHPでファイル保存し
そのファイルを1秒毎にIchigoJamとMixJuiceがhttpで取りにくるしくみ
なので最大1秒程度の遅延が起きる
これを例えば0.5秒にするとIchigoJam(?)の動作が不安定になったので
あまり短時間にもできなさそう
本当にリアルタイムで遠隔操作したいなら赤外線センサとかにすべきかも
ファイルに記載されたアルファベットに応じてパプリカが動作しているだけ
なのでプログラムの追加修正でもっと複雑な動作も可能かと思われる
実際に動かした動画がこちら
パプリカリモコン on Vimeo
Raspberry Piにh2oをインストール
Raspberry PiをRaspbian Jessie Liteにアップグレード - kame-tの日記の続き
こちらもメモ程度
Jessieにするとcmakeも3になるのでh2oのインストールOK
方法はh2oのマニュアルhttps://h2o.examp1e.net/のとおり
% sudo apt-get install cmake mruby libmruby-dev bison % git clone https://github.com/h2o/h2o.git % cd h2o % cmake -DWITH_MRUBY=ON % make % sudo make install
あとLet's Encryptでサーバ証明書を取得する
これもKazuho's Weblog: Using H2O with Let's Encryptに書いてあるとおり
% git clone https://github.com/letsencrypt/letsencrypt.git % cd letsencrypt % ./letsencrypt-auto certonly --standalone \ --email $EMAIL \ --domain $HOSTNAME
あとはお好みで
起動時はmasterモード(-m master)で
Raspberry PiをRaspbian Jessie Liteにアップグレード
以前Raspberry Piのインストールログ - kame-tの日記で
インストールログをまとめたが
先日Raspbian Jessie Liteがリリースされたのを受けて
https://www.raspberrypi.org/forums/viewtopic.php?f=63&t=127060
自宅のサーバをアップグレードしてみた
前回同様メモ程度
- 作業端末でイメージの書き込み
% sudo dd if=2015-11-21-raspbian-jessie-lite.img of=/dev/sdd
- マウントして固定IPアドレスに変更
サーバ利用するのでIPアドレスを固定に変更
/etc/network/interfacesではなく
DHCPを使うので/etc/dhcpcd.confの設定を下記に変更
interface eth0 static ip_address=192.168.0.xx/24 static routers=192.168.0.oo static domain_name_servers=192.168.0.oo 8.8.8.8
SSHがデフォルトで動作しているのでリモートで接続
% ssh pi@192.168.0.xx
- root領域の拡張
$ sudo raspi-config
localtimeは作業PCからscp
$ sudo cp ~/localtime /etc/localtime $ sudo localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 $ cat /etc/locale.gen ja_JP.UTF-8 UTF-8
- apt-get
# apt-get upgrade # apt-get install postfix # apt-get install postfix-policyd-spf-python # apt-get install dnsutils # apt-get install procmail # apt-get install fetchmail # apt-get install telnet # apt-get install emacs # apt-get install emacs-mozc # apt-get install mozc-data # apt-get install gnupg2 # apt-get install ruby # apt-get install sqlite3 # apt-get install ruby-sqlite3 # apt-get install ruby-dbd-sqlite3 # apt-get install stunnel4 # apt-get install git # apt-get install tcsh # apt-get install screen # apt-get install ntpdate # apt-get install pwgen # apt-get install libssl-dev # apt-get install ntpdate # apt-get install squid # apt-get install pptpd # apt-get install golang # apt-get autoremove
pptpdはデフォルトでdisableなので
# systemctl is-enabled pptpd.service disable # systemctl enable pptpd.service
不要なサービス起動の停止
# insserv -r rsync # insserv -r fetchmail # insserv -r stunnel4 # insserv -r saned
- ユーザの作成とバックアップからのホーム領域の復元
% rsync -ac bk/home/xx 192.168.0.xx:/home/xx
すでにgit cloneしているので
% cd Mew % make distclean % git pull % ./configure % make % sudo make install % sudo cp /usr/share/emacs/24/site-lisp/subdirs.el /usr/local/share/emacs/site-lisp
- hyperestraier and qdbm
バージョンは変わらず(T_T)なのでそのまま再コンパイル
% cd qdbm-1.8.78 % make distclean % ./configure --enable-zlib % make % sudo make install % sudo ldconfig
% cd hyperestraier-1.4.13 % make distclean % ./configure % make % sudo make install
$ for i in /usr/share/ca-certificates/mozilla/*; do cp $i ~/.certs/`openssl x509 -hash -noout -in $i`.0; done
動作確認
% openssl s_client -connect imap.gmail.com:993 -CApath ~/.certs/
fetchmailrcはこんな感じ
sslcertck
sslcertpath "~/.certs"
また今回はRaspbianデフォルトのstunnelで接続できた
(require 'mozc)
(setq default-input-method "japanese-mozc")
但し遅い...raspberrypi2なら大丈夫かも
イントラネット用とインターネット用デーモン(違うポート番号・公開鍵限定)
Port 22 Port xxxx PermitRootLogin no PasswordAuthentication no Match Address 192.168.0.0/24 PermitRootLogin without-password PasswordAuthentication yes
上位ルータで22番は閉じてハイポートxxxxのみを開放
なおMatchは最下行にする必要あり
わざわざコンパイルしていたが
mackerel-agentのARM版バイナリーはRaspberry PI 2でもさくっと動く - Qiitaみたい
/usr/local/sbin/mackerel-agentにコピーして
/usr/local/etc/mackerel-agent.confをバックアップから復元
/etc/init.d/mackerel-agentを置いて
% sudo insserv mackerel-agent
Raspberry PiでMackerelの続き
本バージョンよりビルドには Go 1.3 が必要となります。ご自分でビルドされ
http://blog-ja.mackerel.io/entry/2014/06/26/164202
ている方は、環境のアップデートをお願いいたします。
おーすごい勢いでバージョンアップしているけど
いちいちビルドしてついていくのはかなり面倒
とりあえずgolang1.3にバージョンアップして
# これは仕方なし
オリジナルのMakefileをコピーして適当なフォルダに置いて
BIN = mackerel-agent all: clean build test test: deps go test github.com/mackerelio/mackerel-agent/... build: deps go build \ -ldflags="\ -X github.com/mackerelio/mackerel-agent/version.GITCOMMIT `git rev-parse --short HEAD` \ -X github.com/mackerelio/mackerel-agent/version.VERSION `git describe --tags --abbrev=0 | sed 's/^v//' | sed 's/\+.*$$//'` " \ -o build/$(BIN) \ github.com/mackerelio/mackerel-agent install: build sudo cp -f ./build/$(BIN) /usr/local/sbin/ deps: go get -u -d github.com/mackerelio/mackerel-agent clean: rm -f build/$(BIN) go clean
% pkill mackerel-agent % ln -s ${GOPATH}/src/github.com/mackerelio/mackerel-agent/.git . % make install
ついでにrcスクリプトも作って
#!/bin/sh ### BEGIN INIT INFO # Provides: mackerel-agent # Required-Start: # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 ### END INIT INFO PATH=/bin:/usr/bin:/sbin:/usr/local/sbin:/usr/sbin DAEMON=/usr/local/sbin/mackerel-agent CONFFILE=/usr/local/etc/mackerel-agent.conf OPTIONS="-conf=${CONFFILE} -verbose=false" PIDFILE=/var/run/mackerel-agent.pid NAME=mackerel-agent case "$1" in start) echo -n "Starting $NAME Daemon: " start-stop-daemon --start --quiet --pidfile $PIDFILE --background --exec $DAEMON -- $OPTIONS ;; stop) echo -n "Stopping $NAME: " start-stop-daemon --stop --quiet --pidfile $PIDFILE ;; restart) echo "Restarting $NAME: " start-stop-daemon --stop --quiet --pidfile $PIDFILE start-stop-daemon --start --quiet --pidfile $PIDFILE --background --exec $DAEMON -- $OPTIONS ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac exit 0
% sudo /etc/init.d/mackerel-agent start
かな
Raspberry PiでMackerel
https://mackerel.ioだが
いきなり本番機ではなくまずは自宅のサーバで動かしてみる
Linux用バイナリをダウンロードするもRaspberryPiのarmでは動かず(T_T)
下記ソースをみると
https://github.com/mackerelio/mackerel-agent
とりあえずgolangをインストール
apt-getがうまく動かなかったのでリポジトリから直接ダウンロード
% dpkg -l | grep golang ii golang-go 2:1.2.1-2 armhf Go programming language compiler ii golang-go-linux-arm 2:1.2.1-2 armhf Go standard library compiled for linux_arm ii golang-src 2:1.2.1-2 armhf Go programming language compiler - source files
% setenv GOPATH ~/gocode % git clone https://github.com/mackerelio/mackerel-agent.git % cd mackerel-agent % make build % build/mackerel-agent --conf=~/downloaded/mackerel/binary/mackerel-agent/mackerel-agent.conf
で動いた!
VineLinuxでdvipdfmx時にフォントを埋め込む
VineLinuxで
「IPA明朝とIPAゴシックを埋め込む」
http://ml.vinelinux.org/vine-users/msg32074.html
http://trac.vinelinux.org/browser/people/munepi/ptl09vl6/
の指示どおりにする
またTgifのフォントTimes-RomanとHelveticaも埋め込むために
下記を変更する
/usr/share/ghostscript/x.xx/Resource/Init/gs_pdfwr.ps
/.standardfonts [ /Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique % /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique % /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic /Symbol /ZapfDingbats ] readonly def
/usr/share/texmf/dvipdfmx/dvipdfmx.cfg
%D "gs -q -dNOPAUSE -dBATCH -sPAPERSIZE=a0 -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 -dAutoFilterGrayImages=false \ -dGrayImageFilter=/FlateEncode -dAutoFilterColorImages=false \ -dColorImageFilter=/FlateEncode-dUseFlateCompression=true \ -sOutputFile=%o -dNOKANJI -c '.setpdfwrite << /NeverEmbed \ [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique \ /Helvetica /Helvetica-Bold /Helvetica-Oblique /Helvetica-BoldOblique \ /Times-Roman /Times-Bold /Times-Italic /Times-BoldItalic \ /Symbol /ZapfDingbats /Ryumin-Light /GothicBBB-Medium] >> \ setdistillerparams' -f %i -c quit" D "gs -q -dNOPAUSE -dBATCH -sPAPERSIZE=a0 -sDEVICE=pdfwrite -dCompatibilityLevel=1.3 -dAutoFilterGrayImages=false \ -dGrayImageFilter=/FlateEncode -dAutoFilterColorImages=false \ -dColorImageFilter=/FlateEncode -dUseFlateCompression=true \ -sOutputFile=%o -dNOKANJI -c '.setpdfwrite << /NeverEmbed \ [/Courier /Courier-Bold /Courier-Oblique /Courier-BoldOblique \ /Symbol /ZapfDingbats /Ryumin-Light /GothicBBB-Medium] >> \ setdistillerparams' -f %i -c quit"
XOOPS Cube Legacy 2.1を無理やりPHP5.3に対応する
古いパッケージですが
XOOPS Cube Legacy 2.1を無理やりPHP5.3に対応する
http://xoopscube.jp/forum/6557
http://blog.netandfield.com/shar/2010/12/xoops-cube-legacy-php-53.html
のようにdeprecatedなエラーが画面に表示される
なぜか.htaccessやphp.iniで制限しても表示されるので
# phpのソースに書いてあるのかも(?)
まじめにエラーと向き合う
基本的にこれ
https://php.net/manual/en/migration53.deprecated.php
を見てねですむがログは残しておく
1. "Deprecated: Assigning the return value of new by reference is deprecated in xxx"
そのまま書いてあるとおりなので
リファレンスではなくそのまま返り値にいれる
//$instance =& new $classname();
//を以下に直す
$instance = new $classname();
かなり数が多いので気合で直す
2. "call_user_func_array() expects parameter 1 to be a valid callback, non-static method xxx() should not be called statically in file core/XCube_Delegate.class.php line xxx"
これは第2引数を参照にする
//call_user_func_array($callback, $args);
//を以下に直す
call_user_func_array($callback, &$args);
下記が大変詳しくて参考になる
http://sotarok.hatenablog.com/entry/20090826/1251312215
3. "Deprecated: Function ereg() is deprecated in xxx"
eregはpreg_matchで書き換える
//ereg("Windows",$ua); //を以下に直す preg_match("/Windows/",$ua);
4. require_onceでPEAR.phpを/usr/share/pear/PEAR.phpから読もうとする
原因がよくわからないがとりあえずプルパスでファイル名を記述する
//require_once 'PEAR.php'; //を以下に直す require_once '/home/foo/var/xoops_trust_path/xanhte/lib/PEAR.php';