2016年2月25日木曜日

RaspberryPi2で使うツールをPython(pyside)で作ってみた(´;ω;`)

こんばんわ(; ・`д・´)

(`・д´・ ;)少しショックなことがあってこんな表情をしています。

実は、前回のブログで書いたミニゲームのチョコゲットですが、
バレンタインという大イベントにのっかって
モゲラさんで1日で500アクセスくらいいっちゃうかなー( ^ω^)タハー
とか、ひそかに期待していたのにバレンタイン効果ほぼゼロ
3週間経過した今も合計で300もいかず失速中です(´;ω;`)

まぁ、あれです。
1日半で作った作品だし、そうそう簡単にヒットはしないですよね。
そう思うことにします。ԅ( ˘ω˘ ԅ)


(2016/02/25 21:20追記)
ふりーむ!もDL数 23本 (9552位) と予想通りの残念な結果でしたが
ひとつだけ朗報がありました!
ふりーむ!で初めてレビューがつきました!!!ヽ( ´¬`)ノ ワ~イ !!
チョコゲット ChocolateGet のレビュー:無料ゲーム by ふりーむ!

本当にうれしいです!
このレビューを読むだけで、やる気が出てきます。
本当にありがとうございます(´;ω;`)<今度は感動の涙


作ったツールの話


で、タイトルのとおり、 RaspberryPi2 で使うツールを Python で作ったりしたので
久しぶりのブログのネタにでもしようかと思いアップしました。

はっきりいって、コマンド打てばいいじゃん?という人には不要なものだと思います。
GUI にすると何か落ち着くという方には需要があるかもしれません。

HSP とか Unity とかも GUI を作りやすいですが PySide もなかなか便利でした。

ツールの紹介画像の下にある .py のソースを python で実行するだけで動作します。
起動するための .bat や .sh についても後述します。

MountGUI.py について




MountGUI.py


MountGUI は LAN の外部 PC の共有フォルダをマウントして、アクセスするツールです。
Mount トグルボタンを OFF に戻すかウィンドウを閉じるとアンマウントを自動でします。

  • Mount Local Path はマウント先のローカルフォルダです。
  • Mount Remote Path は外部 PC の共有フォルダのパスです。
  • UserName は外部 PC のログインに使うユーザ名です。
  • Password は外部 PC のログインに使うパスワードです。
  • Option は mount コマンドのオプションです。既定では win 7 64bit にアクセスするために使ったオプションが設定されています。
これらの設定をすませて、 Mount すると Mount Local Path のフォルダにマウントされます。
Open ボタンを押すと Mount Local Path のフォルダを起動します。
Open では Raspberry Pi のエクスプローラ的なソフトである pcmanfm をコマンドで起動します。
おそらく他の環境ではうまく動かないので .py の Open ボタンのイベント処理を適宜変更して使ってください。

後で記述する .sh ファイルから呼び出すことで、入力欄の既定値を設定することができ、
起動後に変更しないで、より簡単にマウントすることができるようになります。

DragAndDropAndRunGUI.py について




DragAndDropAndRunGUI.py

DragAndDropAndRunGUI はファイルをドラッグ&ドロップすると、パスをリストに追加します。
リストを右クリックして表示された Remove メニューアイテムで削除できます。

画面の上半分がパスのリストです。画面の下半分はログです。

真ん中にあるチェックボックスで、ドラッグ&ドロップされたパスのフィルタリングができます。
Unique URL チェックボックスですでにリストにある同じ文字列のパスは追加しません。
File Only チェックボックスでフォルダのパスは追加しません。

 Run ボタンを押すと、リストのパスを使った処理を順次します。

Run で行う処理は .py ファイルを編集して書いてください。
処理結果をログ出力したい場合は addLog というメンバ関数を使うと出力できます。

ダブルクリックでやりたいというこだわり(甘え)


基本 Windows の GUI 環境でふにゃふにゃに育ってきた子なので
コマンド文字列ばりばり打って実行するというのが面倒に感じます。

一部の人からはお叱りを受けるかもしれませんが、
とりあえずダブルクリックすれば動くよ!
という状態が大好きなのです( ˘⊖˘)

そこで RaspberryPi でもこの .py をファイルをダブルクリックするだけで動作するように工夫してみました。
Windows なら .bat ファイルを作って、それをダブクリでバッチOKなことを知っているので、同じ感じをシェル .sh ファイルでやってみました。

.sh 自体はぐぐれば解説がたくさんでてきて、次のような感じでいけました。

MountGUI.py 起動用のシェル


MountGUI.py は引数を4つ与えると初期値が指定できます。
.sh ファイルごとにマウント先の情報を保持しておくと便利です。

#!/bin/bash
python MountGUI.py ./mount-point //192.168.1.20/shared username password

DragAndDropAndRunGUI.py 起動用のシェル


DragAndDropAndRunGUI.py は引数をとらないのでこんな感じです。

#!/bin/bash
python DragAndDropAndRunGUI.py

ちなみに Windows の .bat でやる場合はこんな感じです。

START C:\~\pythonw.exe DragAndDropAndRunGUI.py

シェルファイルのプロパティ設定


ここまでで .sh ファイルの設定はすみました。

しかし、 RaspberryPi2(Raspbian) で .sh ファイルをダブルクリックしても実行されずテキストエディタが開いてしまいます。

その場合は、右クリックのコンテキストメニューで、ファイルのプロパティを選択します。
現れたウィンドウのパーミッションタブの実行の選択肢がなしになっていると思うので、すべてなどに変更します。
そうすると、 .sh ファイルをダブルクリックすると実行するか編集するかが選択できるようになります。


Raspbian のファイルのプロパティウィンドウ
実行(E)の選択肢を[なし]から[すべて]に変更

近況について


twitter でウディタのコモンイベントについて少し書いたとおり、ウディタでちょっと作っています。

去年作った「デスチェリー農場」の派生作品で、今回はバトルで普通に戦えるようにしたいと思っています。
配布されているコモンイベントのおかげで最低限の実装はできていて、
ストーリーも大筋できたのですが細かなところでうまくつながらないところがあり止っています。

止まってはいるのですが、前作のむちゃくちゃな農場がなぜできたのかを妄想したりすることは楽しいです。
そのうちいいアイデアがうかんでストーリーがうまくつながったら早めにリリースしたいです。

Unity で作っているソフトはスローペースながら少しずつ進んでいます。
でもまだまだ実装できるかどうかすらあやしい段階で、試行錯誤の最中なので、
まだブログにのせられるようなことがありません。

RaspberryPi2 もまだまだ使い勝手をよくしたいことがあるのでちょくちょくいじろうと思います。

2016年2月8日月曜日

バレンタイン緊急企画!「チョコゲットChocolateGet」リリース(・`ω・´)

皆さんこんばんわ。
今年もあの恐ろしい呪文が発動しようとしています。(´Ծ_Ծ´)


 非リア充限定精神重圧呪文 
バ レ ン タ イ ン   
効果範囲:非リア充族全体。発動条件:2月14日(休日の関係で前後する)   
効果の説明

非リア充族は、その重圧によりいつもより挙動がおかしくなるものが多い。
メダパ○やザ○キやニフ○ムを混ぜて範囲を極大にしたものと解釈される。 
非リア充族でも悟りを開いた者に対しては、 この呪文は効果がないらしい。

非リア充族以外に対しては、
テンションを上げステータスを強化する効果があるらしいが
詳しいことは不明であるし、知りたくもない。 
対策:  
チョコという道具を授受することでこの重圧から解放されるらしい。
ただし、授受する相手によって効果が異なりダメージを受けることもある。 
非リア充族でも得られる可能性のあるチョコは義理チョコと呼ばれ
心優しき女神がくれる。  
しかし、チョコを受け取った場合、ホワイトデーという返済期日が設定され
より高価なものをお返しする必要が出てくる可能性があるらしい。


怖いですね。恐ろしいですね。(´Ծ_Ծ´)
冬場の凍てつく波動だけでもつらいのに、心が2、3本折れかねません。₍₍ (ง ˘ω˘ )ว ⁾⁾
いったいどうすればいいのか・・・。

そこに一人の非リア充が立ち上がった。
バレンタインの迷える子羊に光あれ!(`・ω・´)
安心しろ!ミニゲーム作ってきたぞ!

チョコゲット
ChocolateGet





ダウンロード版(ふりーむ!様)へのリンク

ブラウザ版(モゲラ様)へのリンク

これで思う存分チョコがゲットできるぞ!
これでバレンタインの重圧から解放されるぞ!よかったな!ԅ( ˘ω˘ ԅ)


何なのこれは?


簡単に言えばお手軽なもぐらたたきゲームです。
もぐらの変わりに現れては消えるチョコをクリックしてゲットします。
制限時間は30秒なのでタイトルから結果発表まで全部含めても1分で終わります。

つい出来心で作ってしまいました。(´・ω・`)

最近1ヶ月くらい別のソフトを作っているのですが、
完成の目処がたたない状態で、
達成感というか充実感がない日々でした。

1日であほなゲームを作る ahoge みたいなのを
ふとやってみたくなり1日半かけて作りました。

言語はHSPを使いました。

A4用紙にメモ書き程度の仕様を書いて、
たった 1個の .hsp ファイルのプログラムをいじって、
お絵かきしたスプライトシートを読み込んで、
魔王魂様の音源を読み込んで完成です。

小規模なゲームを作るなら HSP は本当に使いやすいと思います。


既知の問題


HSP3Dish を使うことで、ブラウザ版も簡単に作ることできます。
しかしというか当然というか、ブラウザによって微妙な動作の違いがあります。

ダウンロード版がきっちり動作しているので、それと比較した違いや問題を書いておきます。

・一部文字がかける

・ブラウザ版では、 MISS の効果音を再生しません。

ダウンロード版では、 GET! と MISS の効果音(.wav)を両方再生していますが、
ブラウザ版で両方再生すると BGM の音楽(.mp3)が停止してしまうことがたびたびありました。
mmplay の説明に、同じ形式のデータを複数同時に再生することができないかもしれないというようなことが書いてあったのでそれが原因かもしれません。
BGMが再生されないのはかなり違和感があるので、 MISS の効果音を鳴らさない仕様に変更しました。
ブラウザのチョコゲットを複数立ち上げると chrome で BGM が再生されなくなることもありましたが、チョコゲットを1つだけ起動する場合は発生しませんでした。
また、 IE では効果音(.wav)がそもそも再生されませんでした。

・ゲームの経過の速度が違う。

await によって1フレームの長さを25ミリ秒になるようにしていて、それを足し算して経過時間を計測しています。
これがブラウザごとに誤差があるのか定かではありませんが、ブラウザごとにずれがあります。
ダウンロード版では説明どおり30秒ですが、 
chrome では約40秒、 IE では約35秒
にプレイ時間が延びています。

このようにブラウザ版は多少不具合がありますが、
お手軽に遊んでもらえる位置づけでリリースします。

遊んでくれる皆様へ


興味を持っていただきありがとうございます。

このミニゲームで少しでもバレンタインの重圧から解放されてほしいです。
もちろんバレンタインやチョコに関係なく、遊んで楽しんでもらえたらうれしいです。

あとは、チョコを奪い合う人たちに
「私のために争わないで(´;ω;`)」
といいながら、さりげなく「チョコゲット」を出して
「より多くのチョコをゲットした人にチョコをあげる!(´;ω;`)」
とかわけのわからないことを言い出してもいいんじゃないかと思います。

作者のダウンロード版のハイスコアは103です。
テストプレイで当初は80~90台でしたが、
無心でチョコをゲットする境地になって100を超えることができました。
chrome ブラウザ版では118個とることができました。

目標があったほうが楽しめるという方は、
作者超え(前例からたぶん余裕でされると予想)を目指してやってみてください。

今後の予定


RaspberryPi2 の復旧もだいぶ終わってきたので、
先月から作っている Unity ベースのソフトの開発にまた戻ろうと思います。

#HSP の GUI も今はやりの Unity で採用されているイミディエイトモードモデルなのかな?
#HSP は進んでるなー。
#GUI のプログラミングはこのやり方がわかりやすくていいなと思ってます。

無駄に妄想を膨らませて凝りすぎて
結局完成できなくなるパターンにはまりかけている気がして
ストレスがたまってきていたように思いますが、
ミニゲーム作りで少し気分もリフレッシュできたので、
自分のできるやり方で、こつこつやろうと思います。


2017年02月15日追記

月に数回アクセスがある程度だったチョコゲットですが、今年は思い切って3日間ほどバレンタインデーの前にキャンペーン(ツイッターで朝と夜に宣伝)をしてみました。
キャンペーンとリツイートやいいねのおかげもあって、おかげさまでチョコゲットに半月で160アクセスがありました。ありがとうございます。
チョコゲット神もきっと喜んでいると思います。

2016年2月3日水曜日

LibreOffice Writer 文書の差分 (WinMerge x TortoiseGit) + 社畜PCの原因と対策

お久しぶりです。皆様におかれましてはお風邪などをひかれてはいませんでしょうか。
春と秋だけあればいいのにヽ(`Д´)ノとつい思ってしまう SakuraCrowd です。

今日はいつものような製作日記ではなく、ちょっとした役立つメモを書きました。
タイトルにもあるとおり、 TortoiseGit への WinMerge の導入の仕方です。

今まではソースコードくらいしか差分で確認しなかったので、 TortoiseGit 標準の Diff ツールで問題なかったのですが、 LibreOffice の Writer が最近自分の中で便利だと話題になっていて、それを差分表示するためにちょっと調べてみました。

#Writer は、文章書いて、ちょっと絵をいれたり表を作るのに便利だと思います。
#リッチテキストのエディタを探していて、これが一番よさそうな気がしたので使ってます。

それとブログを書くときはあまり長く書かないつもりだった、 Win7 PC が社畜PCになってしまった際の原因と対策も後半に書きました。割と有用な情報かもしれませんので、時間がありましたらご覧下さい。

まずは TortoiseGit で Writer の odt ファイルを管理して、差分も普通に表示させる方法です。

WinMerge(+plugin) 導入手順


すでに TortoiseGit はインストールしてある前提ではなします。

1.信頼と実績の窓の杜様から WinMerge 日本語版をダウンロードします。

WinMerge - 窓の杜ライブラリ
私の PC は 64 ビット版なのでそちらを選びました。

2.WinMerge をインストールします。

フォルダを指定し普通にインストールできます。
インストール直前の設定で TortoiseGit をチェックしておくと自動的に TortoiseGit の利用する Diff ツールの設定を置き換えてくれるようです。
これの設定は TortoiseGit の設定の Diff ツールの項目で確認できます。

3.LibreOffice Writer のファイルを読むためのプラグインをダウンロードします。

ぐぐって出てくる英語版のDLサイトは応答がなかったりしましたが、日本語版は大丈夫なようでした。
(2016/02/06追記 表示されなかったのは、セキュリティソフトのせいでした)
WinMerge 日本語版 様から xdocdiffPlugin64 のリンクをたどって、xdocdiffPlugin64 からダウンロードします。

4.ダウンロードした圧縮ファイルを解凍したら WinMerge のフォルダにいれます。

MergePlugins/amb_xdocdiffplugin.dll は、 WinMerge インストールフォルダの同じフォルダにいれます。
xdoc2txt.exe は WinMerge インストールフォルダの直下にいれます。
他のドキュメントも一応同じように入れておきました。

5.プラグインの設定を確認します。

上記の手順だけだと、 .odt ファイルを 2 つ選択して WinMerge を起動してもエラーで表示されないかもしれません。私はそうでした。

WinMerge をファイル指定しないで起動して、メニューバー>プラグイン>手動展開のチェックを自動展開にしてください。 これで .odt を比較することができます。

6.TortoiseGit の拡張子ごとの差分コマンドを編集する

2つの odt ファイルを指定して WinMerge で開けても、 TortoiseGit の差分からは開けないしエラーも出ないかもしれません。私はそうでした。

安心してください!(`・ω・´)直せますよ(たぶん)

TortoiseGit の設定の差分ビューアの「異なるリビジョンのファイルの比較に使用するプログラムの設定」を確認してみてください。
 WinMerge のコマンドになっているかもしれませんが、高度な設定を見るとさらに拡張子別に異なるコマンドを指定できます。

odt ファイルも↓こんな感じで設定されています。優先されてこれが実行されているようです。
wscript.exe "C:\Program Files\TortoiseGit\Diff-Scripts\diff-odt.vbs" %base %mine //E:vbscript 

この odt の設定を削除すると、 WinMerge のコマンドが適用されて差分が表示されるようになると思います。



これで odt も楽チンに差分を確認できるようになるはず!₍₍ (ง ˘ω˘ )ว ⁾⁾
まだ、ほとんど使っていないのでアレですが、たぶん大丈夫。

近況報告

進捗ダメです(´・ω:;.:...
ちょっとずつ進んではいるんですが新しいジャンルだったので、すごく SLOW ԅ( ˘ω˘ ԅ)
きっと想像以上にややこしい不慣れなことをしているんだろうと言い聞かせ
あせらず、あまり落ち込まないように進めようと思います。

あと割り込みが結構多かったかも。

interrupt1. RaspberryPi2 のマイクロSDカードが昇天

バックアップもなかったので新規のカードにインストールしてました。スクリプトとか残してないからまた一から書くはめになったけど、まだそこまではやってない。

interrupt2. Win7 が休止状態を勝手に解除するようになった ( 社畜PCの原因と対策 )

スリープ・休止状態にしても5分くらいですぐ起きて動き出す、
社畜もびっくりの24時間働けます状態にうちのPCがなってしまったのでその原因を探ってた。
#電気代高いのに・・・(´・ω:;.:...


いろいろやったけどダメ('∀`)だった内容

USBを外しては休止状態にして5分くらい待つ地味に時間のかかる作業でいらいらしました。
USBを外しても勝手に復活。
デバイスマネージャでUSBやキーボードやマウスの電源の管理のチェックボックスも確認してOFFにしても勝手に復活。
デバイスマネージャのLANの同じような設定はすでにOFFだった。

究極的にはコントロールパネルの電源オプションの詳細設定で「スリープ解除タイマーの許可」を無効にすると直ったが、その他の有用なタイマーも無効になってしまって、自動で起きてほしいときも起きなくなったので却下。


イベントビューアで見ると、 PowerManagement TroubleShooter みたいなやつが svchost プロセスによって休止状態を解除させたみたい。
svchost はいろんなところから利用されるらしくこれ以上の特定は難しそう。

Trouble Shooter が Trouble を Make してどうするんだよおおおヽ(`Д´)ノウワァァァン!!

少しいじっては休止状態にして真っ暗な画面の前で正座待機する作業飽きたお(´Д⊂ヽ

と思っていたら、 Windows 10 へのアップグレードが悪さをしていることがあるらしいと知恵袋に書いてありました。
スリープモードに入っているパソコンが勝手に復帰してしまい困ってい... - Yahoo!知恵袋

そのリンクをたどって、 Windows 10 へのアップグレードのための更新プログラムをアンインストールして、自動でそれらの更新プログラムをインストールしないように設定したら見事に社畜PCから一般PCに戻ることができました。(非公式なので自己責任でお願いします)
「Windows 10」、予約しなくても約6GBのファイルを自動ダウンロード(回避方法あり) - ITmedia ニュース

Windows 10 追い込みバルーンも消えてすっきりです。ヽ( ´¬`)ノ ワ~イ !!
ただうざいだけのバルーンかと思いきや善良なPCを社畜PCに変えてしまう恐ろしいバルーンだったのか(; ・`д・´)…ゴクリ…(`・д´・ ;)
#閣下の蝋人形みたいな言い方で「お前も Win10 にしてやろうかぁ?」って言ってるように思えてきた。(´・ω・`)

だがしかし、第二第三の追い込みバルーンがやってくることも考えられ油断できない。
本当に必要な更新に紛れさせていれてこられたら、どう対処すればいいのだろう。。。

まだまだ油断はできない現場からは以上です。(`・ω・´)ゞ