【Linux Board】Raspberry Pi Zero

ラズパイZero

癖があるマシンではある。
最近の Raspbian は初期設定で ssh 接続がオフになっているので、ネットワークケーブル一本で設定できるわけではない。

Zero4U


Zero4U という専用USBハブとかがあると便利。これははんだ付けとかしなくてもいいので簡単。

別のアプローチ

他のラズベリーパイがあるなら、そっちで初期設定とかアップデートまでやって、microSD を挿しなおすのが簡単。

ピンアサイン

【Laravel】URLに指定したidなどをフォームリクエストでバリデーションする方法

URLに指定した値をバリデーションしてくれない!?

フォームリクエストバリデーションについては Laravel 5.4 バリデーション を参照してもらうとして、
例えば routes/web.php に
[crayon-5bf25046546df910993128/]
と書いておくと
[crayon-5bf25046546ea589641549/]
の様に受け取れるが、
これにフォームリクエストを追加した場合
[crayon-5bf25046546ee426760005/]
rule() を記述しても id のバリデーションは行われない。
心情としては \$id のバリデーションも CustomRequest で一括してやりたい。

推察

フォームリクエストのルールは $request に含まれているものに反応する。
上記の \$id の様に URL に直接指定した値は、上記の配列に含まれないので評価されない。

解決方法

validationData 関数を使用する。
フォームリクエスト内で \$this->id の様に変数名を直接指定した場合は値が取得できるので、リクエスト配列の後ろに値をマージしてやる。
これで通常の rule() で評価できるようになる。
[crayon-5bf25046546f4733520701/]

【Linux Board】Nano pi NEO2

alt
4cm角サイズだけれど、CPU は 64bit のクアッドコア、ギガビットイーサも持っている Linux基板。
イーサーとタイプAのUSBが一つあるだけで、音声や HDMI 出力等はなし。
基本、SSH などで接続して使う感じ。でも小ささは正義(笑) 低スペックで低価格の Nano Pi NEO 512MB もあるので注意!!
こっちで十分という方は利用シーンに合わせてチョイスしてください。

入手方法

秋月電子のホームページ http://akizukidenshi.com/catalog/g/gM-12302/ から通販するか、
秋葉の秋月電子に直接足を運んで、入り口前の平台の奥側にある。箱なしなので見つけにくいかも。
熱暴走が怖いなら、専用ヒートシンクも買っておくこと。http://akizukidenshi.com/catalog/g/gP-12303/

microSD の作成

OSダウンロードページ
https://www.mediafire.com/folder/ah4i6w029912b/NanoPi-NEO2
の offical-ROMs からイメージをダウンロード。今回は ubuntu-core-xenial を使用。
Win32diskimager を使って microSD に書き込み、本体に挿す。

接続

起動するとDHCPでネットワークにつながる。IPアドレスを調べて、ssh で接続する。
初期の接続ユーザは root パスワードは fa。非 root ユーザとして pi パスワードは pi がある。
両方ともパスワードはすぐ変更しておくこと。

npi-config

コマンドラインユーティリティ。言語設定とかアップデートとかできる。

CPU温度の表示

cat /sys/class/thermal/thermal_zone0/temp で表示された値を 1/1000 した値。1つだけ表示される。
または cpu_freq コマンドを実行。CPU毎に4つの情報が表示される。

ピンアサイン

GPIOを操作する

/root/WiringNP/gpio コマンドが使える。
[crayon-5bf2504655b48379190757/]
gpio -g mode 1 in を実行すると gpioA1 BCM 1 が in になる。
5V とか 3.3v とスイッチ経由でつなげればボタン状態が取得できる

関連サイト

メーカーページ | サポートページ | 回路図

NanoHatOLED

こんな hat もある。

NanoHat OLED
加筆中

Postgresql でジオメトリを扱う基礎の基礎

環境及び想定

環境は CentOS 7.3.1611, Postgresql 9.2.18
店舗情報などに緯度経度情報をもって、現在位置から一番近い店舗を検索する程度を想定

インストール対象確認

[crayon-5bf2504655e58436521006/]

インストール

[crayon-5bf2504655e61367692783/]

確認

[crayon-5bf2504655e65099000533/]

追加されるデータ形

定義 説明
ジオグラフィ geography 地理座標(基礎が球面)
ジオメトリ geometry 平面座標(基礎が平面)
ジオメトリダンプ geometry_dump geomとpathを持つ空間データ型
ジオムバル geomval geomとvalを持つ空間データ型
国内で地図データを扱うならジオメトリだけで十分

テーブル作成

[crayon-5bf2504655e6c453986953/]

値の設定

[crayon-5bf2504655e70212347964/]
通常使うのは POINT ぐらい?

値の取得

[crayon-5bf2504655e74368005129/]

おまけ

Postgresql のインストール

インストール、初期化、自動起動登録、起動 の順
[crayon-5bf2504655e79578372733/]

ユーザー追加

新しいユーザーが(の)...
-P:パスワードのプロンプト表示
-no-adduser:他ユーザー作成禁止
--no-createdb:データベース作成禁止
--no-createrole:ロール作成禁止
[crayon-5bf2504655e7d383890431/]

データベース作成・接続・削除

[crayon-5bf2504655e81716495498/]

トラシュー

Peer authentication failed といわれたら

パスワードを変更
[crayon-5bf2504655e85567150694/]

Ident authentication failed といわれたら

pg_hba.confを修正 ident の部分をすべて trust にして保存
[crayon-5bf2504655e8a027216191/]

【Laravel】ログインした後、固定ページに飛ばさずにログインボタンを押した画面に戻りたい。

ことの発端(ほったん)

色々な仕事があるわけで…
通常の管理画面とか必ず認証が必要なサイトであれば、
  1. 最初にログイン画面を出す。
  2. ログイン処理を行う。
  3. トップページに遷移する。
でいいんですが、こんな仕様もあったりします。
  1. ゲスト(未ログイン)でもサイトを参照できる
  2. 各ページの右上とかにログインボタンがある。で、好きな時にログインボタンからログインできるが、ログイン後はボタンを押したページに戻りたい。
  3. 認証が必要なページに行った場合は自動的にログイン画面になり、ログイン後は目的のページに遷移したい。
  4. ログインすると、各画面でユーザ情報が参照できる。
とりあえず、1 と 4 は作りの問題。3 は laravel の機能でできますが、
2 は、標準機能で、そのまま実装すると / に戻ってしまいます。

いろいろ解説

LoginController 解析

make:auth で作られる app\Http\Controller\Auth\LoginController.php はほぼ空っぽで
中味は、フレームワークの Illuminate\Foundation\Auth\AuthenticatesUsers で実装されています。 AuthenticatesUsers を見てみると
ログインできた後は redirect()->intended($this->redirectPath()); を呼んでいます。 これは、認証フィルターでキャッチされる前にアクセスしたURLへリダイレクトさせる処理です。
このため、上の「こんな仕様」の3番は、ログイン後に目的のページにリダイレクトできるのです。

instended 解析

instended は「意図された」という意味ですが、機能は以下です。
  • セッションの 'url.instended' に値が設定されていたらそこにリダイレクトする。
  • 値が設定されていなかったら '/' にリダイレクトする。

今回の問題と対策

認証フィルターはキャッチ前に 'url.instended' に参照元URLを設定しているわけですが、
ログイン画面が直接呼ばれた場合は、その値が設定されないため '/' 画面に固定で遷移してしまうわけです。
であれば、ログイン画面に遷移した際に 'url.instended' を設定してやれば認証フィルターでキャッチされたと同様の流れになるはずです。

実装

ログインフォームを表示する showLoginForm メソッドを LoginController.php にオーバーライドします。
直前画面を 'url.instended' セッションに設定します。
これで認証フィルターと同じ流れになるはずです。
LoginController.php
[crayon-5bf250465625b200265126/]
これで、どの画面でログインボタンを押しても、元の画面に戻れるようになりました。

いろいろ環境を作って実験しています

マルチサイトな日々
Wordpress の MultiSite プラグインを使ったサイトです。
BuddyPressな日々
Wordpress の BoddyPress プラグインを使ったサイトです。
Joomla な日々
Joomla3 を使ったサイトです。
Jimdo な日々
Jimdoを使ったサイトです。
※先ずはやってみるという実学が一番