2019年6月25日火曜日

【RaspberryPi】起動時やcronシェルスクリプトが途中から実行されていない?

う~ん
結構どーしようもない感じで詰まっていました。
原因さえわかってしまえば何ということはなかったのですが。

といった感じで今回の雑記です。
以前の記事で起動時やcronを使用してシェルを実行したり
といったことをしていたのですが、
この時にシェルが正しく動作してくれない時があって、なんでかなぁとなっていました。

起動後に端末からシェルスクリプト実行等していると
その時はちゃんと動いている(最後まで実行される)ので、
これはなんなんやと。


2019年6月20日木曜日

【javascript】プログラムリハビリ2、ローグライクダンジョン自動生成

前回、ダンジョン自動生成の区画作成と部屋作成を行ったんでした。
【javascript】プログラムリハビリ、ダンジョン生成

ちょっと期間が開いてしまいましたが、
少しずつやってます。




____________________________________

Runstant


前回に引き続きRunstantでプログラムを組んでいます。
Runstant


前回のからForkして作成しています。
流石にGitみたいな管理ではないのでバックアップを取っておかないと、
実行後に「あ、やっぱ動かねえわ」ってなってから
「あ、戻せねえわ」ってなって詰んだりします(2敗)
注意しよう…。


____________________________________

前回までのプログラムから



詳細は前回のリンク先で…
とりあえず区画と部屋を作るところまでやったんでした。


次は通路ですね。
部屋と部屋を通路でつなげていきます。


____________________________________

部屋と部屋を通路でつなぐ




で、部屋と部屋を通路でつないでいくのですが、
問題はどのようにつないでいくかですよね。
変につないでしまうと
「通路が交差したり」
「たどり着けない部屋が出来てしまったり」
といったことが起きてしまうと思います。


なので、前回の区画と部屋の情報を基に、
下記の条件で部屋をつないでいくことにしました。

1.部屋は区画に属する
2.区画を分割した際の方向に通路をつなぐ(縦or横)
3.通路は上記の分割方向から作成する(縦方向なら上下から)
4.二つの部屋A,Bから線を伸ばし、区画の境界でその通路をつなぐ


2の部分は本当は側面からも通路がつなげられると
自動生成のバリエーションがかなり広がるんですが、
ちょっと条件が面倒になるので今回はカットで…


で、それぞれ順を追って説明していきたいと思います。
結構雑多に書いているので分かりにくいかも~


1.部屋は区画に属する


前回、全体領域から区画(Section)を作成し、
その区画の中に部屋(Room)を作成したんでした。

この区画と部屋は一対一で対応しますので、
「部屋は区画に属する」とします。

また、下記の情報を格納しておきます
・区画作成時の分割方向
・区画サイズ
・部屋位置、部屋サイズ


上の部屋の場合は
「区画①の領域内にある部屋Aは区画①に属する」
という感じですね。


2.区画を分割した際の方向に通路をつなぐ(縦or横)


1の格納情報として「区画作成時の分割方向」を入れるようにしました。
区画作成時には縦か横で2分割するようにしていたので、
縦の場合は上(A)と下(B)
横の場合は左(A)と右(B)
で分割する形になります。


区画作成でBはさらに分割されていきますが、
通路はAを基準にして作成していくことにするので
「Aからどの方向に分割した区画があるか?」という情報を基に
通路を引いていくことにします。


上の①の部屋の場合は横方向に2分割(①と(②③④))してできた区画のため
このルールに沿った場合、横方向(右側)へ通路を作成します。


3.通路は上記の分割方向から作成する(縦方向なら上下から)



2で通路を作成する方向が決定しましたね。
次は区画Aの部屋からどの区画に属する部屋に通路を引くか、を決定します。


1でいろいろな情報が格納されているので、
下記の条件で部屋と部屋をつなぐことにします。
・すべての部屋を検索対象にする
・2つの区画の通路作成方向の境界が一致する


①の部屋の場合、
①と②、①と③、①と④をそれぞれ確認していきます。
④に関しては一致する境界がないですが、
①と②、①と③に関しては横方向で一致する領域が存在します。
このため、
①と②、①と③に横方向で通路を作成することにします。


4.二つの部屋A,Bから線を伸ばし、区画の境界でその通路をつなぐ


3で通路でつなぐ候補となる2部屋が決定したと思います。
この2部屋から区画の境界に向けて直線に通路を引きます。
境界位置まで引いたら、境界部分を通路として繋げれば出来上がりです。


これを全部屋分行えば出来上がりです。
ただ、無条件で線を引いてしまうと境界部分で共有する
ハブのようなダンジョンになってしまうので、
下記のような条件を追加しておきましょう。

・通路にする予定の境界部分が既に通路であった場合
 その部屋と部屋は通路ではつながない


①と②をつなぐ場合は下記のような順になりますね。
1.①から境界まで
2.②から境界まで
3.手順1~2の境界部分


   


同じように①と③をつなぐとこのようになります。


これらを一つのステップとして、
①と他の部屋に対して
②と他の部屋に対して
③と他の部屋に対して…
とすべての部屋を対象にして行っていきます。


____________________________________

結果(ダンジョン自動生成)


最終的にはこのような感じのものができるようになりました。
毎回リロードするのは煩雑なので、「ダンジョン作成」ボタンを設置しました。
ボタンを押すと領域内でダンジョンの作成が行われます。

 

 


見た感じ割とそれっぽいものが出来上がるんではないでしょうか?
たま~にすごく単純なダンジョンが出来てしまったりしますね。
左下のヤツとか、たまに作成されます。
そのあたりは乱数条件とかなんかな…。


もっと条件とか、分割単位を工夫していくと
もっとそれらしいものができると思います。


とりあえず今回はこのような感じで。


____________________________________

今後?



せっかく作ったので、これを使って何かやってみたいですね…。
というのはある。


ローグライクかー。


2019年6月17日月曜日

【RaspberryPi】cron設定で起動時に一度だけ実行する設定

とりあえず勉強したことは
何でもいいので書いていったらいいんじゃないの


今回は起動時に実行する処理とかに関して
はじめはrc.localとかに書いてみていたんですが、
どうもサービスの起動順の関係か、上手くいかなかったんで
別の場所を探してみました。


2019年6月14日金曜日

【RaspberryPi】ラズパイの電源に関して

RaspberryPiの電源系に関して

これまで適当な電源でRaspberryPiを動かしていたのですが、
起動時にレインボーなグラデーション画像が表示されるときや
画面右上に雷のマークが表示されることがあり、
なんでかなーと思って調べてみました。

あと、起動時にアクセスポイントモードの時は特に問題ないんですが、
起動時にWIFI接続のシェルを叩いたりする設定にすると、
再起動時に異様に時間がかかるようになるといった状況があり、
なんか関連性があるのか…等とこれまで考えておりました。

今回はそれに関して。







どうもこれらの問題は電圧が原因らしいです。
RaspberryPiへの給電が十分でないらしく、
稲妻アイコン等はその警告として表示されるのだそうです。


起動時にこんな画面が出たり


起動後のデスクトップのはしっこ(自分のは右上端)に
雷マークみたいなのが表示されたりします。



調べてみると現在使っているRaspberryPi3B+は
2.5A~3A出ている必要があるらしく、
足りていない場合に警告が出てくるみたいですね。


給電が足りていないと、警告マークが出るだけでなく、
動作が重くなったり、一部処理が失敗するときがあったり、
下手すると再起動やシャットダウンしてしまう場合もあるようです。


特に起動時やWIFI等の機器を使用するときのタイミングでは、
電流の必要量が一時的に高くなるらしく、
そういった時に電流が足りていないとOSが落ちてしまったり、
特定のサービスの開始が何故か失敗していたりとか
変な状況が発生しやすいみたいです。


これまで電源ってそんなに気を使っておらず、
「MicroUSBなんやしスマホの充電器でよくない?」
みたいな感じでテキトウな電源を使用していました。
スマホの充電器見ると「1.5A」とか書かれており、
確かに、電流が足りていない…気はします。


そんなわけで、専用の電源を購入することにしました。

Amazonとかにも何個かありますね。
NorthPada Raspberry Pi 3 Model B B+ A+ 対応 電源アダプター PSE認証 5V 3A LEDインジケーター/電源スイッチ付き ケーブル長150CM


買ったやつは上のとちょっと違うな…。



は~ん
確かに5V3Aって書いてありますね…。
あと、ボタンがついています。これで電源のON/OFFが可能です。


RaspberryPiは電源ボタンがなく、
MicroUSB差し込んだ直後にONしてしまうので
どうしても電源の抜き差しが多くなってしまいがちなんでこれは助かります。


実際に使用してみると、確かに起動時のレインボーマークや
画面右上の雷マークのようなのは出ない状態になっています。
あと、心なしか起動が早くなった?ような…これは気持ち的なものかな~。


個人的にはやっぱりボタンの存在が大きく、
これまでシャットダウンした後、電源を抜かざるを得なかったんですが、
シャットダウン後にスイッチをOFFして通電を遮断できるため、
次起動するときはスイッチをONにして通電させるだけでいいのが
ストレス削減となって非常によい、と感じました。


電源の抜き差しは地味に面倒で結構面倒なんですよ(面倒)


そんなこんなで、面倒事が少し減ったね良かったねって話でした。
まる。


2019年6月7日金曜日

【QT】ウィンドウを最前面に出す方法

ここ数年QTを仕事で使用しているんで、
ちょっとした詰まり処で分かったことも書いていっていいんじゃないかな…。


「もう、こんなんくだらないことだから出さなくていいよ」
みたいなことでも出していったらいいんじゃないかな。
たくさん出したらその中で一個か二個位は
役に立つもの出てくるもんじゃろ


で、QTのウィンドウを最前面に出すヤツ
C++とかMFCとかだとTopMostとかの設定で出来るヤツですね。
最近だとこの設定逆に邪魔だからなのか
あんまり見つかんなかったもんで、書いておこうと思います。

2019年6月4日火曜日

【javascript】プログラムリハビリ、ダンジョン生成


最近気候の関係とか、仕事の関係とか相関があると思うのですが、
ちょっと気持ち的に落ち込んできていて
ほんとうになにもやる気が起きなくてですね、
あ、これはいかんなって思ったんで少しjavascriptのプログラムでもやろうと
思ったので組んでみよう。