2015年プログラム書き初め

 

はじめに

一昨年は書き初めにCで素数を出力するプログラムを作った。60行くらいでできて、役にも立たないあんまり面白くないものだった。

去年は書き初め何にしようか考えてたら2月になってたから書いてない。

それで今年は役に立つものを作ろうと思った。

 

f:id:panchiga:20150102044246p:plain

作業中に動画を流すということをよくやるのだが、某動画サイトを見てる時に一つの動画が終わった後次の動画に変えるために一度作業を中断して、また作業に戻って集中し直す。

これが微妙にめんどくさかった。

なのでこれを、また自動化した。

 

プログラムの流れ

1. 某動画サイトのURLを入れる

  • input site url:
  • ここで正しいURLを入れられればちゃんと動く

2. 見たいタイトルを正しく入力する

  • input PERFECT title:
  • 大文字とか小文字とかの処理をしてないのでこれもまた正しく入力しないと動かない

3. どこからどこまで見るかを決める

  • input 1 or 2の部分
  • -> 1を入力すると"1から25"
  • -> 2を入力すると自分で範囲を決められる

4. 1つの動画が終わったら次の動画に遷移する

5. 最期の動画が終わるとプログラムが終了する

 

コード

gist62d1eb2b2eb378a2b016

 

まとめ

  • Seleniumはすごい便利
  • 自動化最高
  • やっぱりrubyはいいなあ…

 

感想

*1の役に立つものを作れる様になったので成長を感じる…

本当は日記帳でも作ろうかなあって思ってたんだけど思ったよりjavascript難しくて1日じゃ絶対終わらないぞっていうことで急遽今回のものになった。

 

ところで動画見ながら作業ってたぶん絶対はかどらないですよね。

 

最期に今年の抱負です。

f:id:panchiga:20150102044203p:plain

 

参考

RubyでSeleniumを使ってスクレイピング - Qiita

Selenium WebDriver

ruby - Selenium-Webdriver: Get attributes after finding an element - Stack Overflow

Web書道.com

 

*1:自分

DDRの難易度を移動距離で評価し直してみた

 

クリスマスでも音ゲーやってる皆さんこんにちは。

この記事は音ゲーマー達の発信所(4枠目)の24日目の記事です。 

#音ゲーマー達の発信所 (4枠目) Advent Calendar 2014 - Adventar

 

前の人: op31_lyricism

次の人: R7iF

  

今回はDanceDanceRevolutionについての記事を書きました。

f:id:panchiga:20141224020255p:plain

 

はじめに

「Spanish snowy dance激が15なわけがない! 詐欺だ!」とか「FLOWER鬼は17レベルもない! 逆詐欺だ!!!」的な、表記されているレベルに見合っていないのではないか?って曲があると思う。

 

もしも「俺は15レベルならもしかしたらクリア出来るかも知れないけど、16は無理…」って人が16レベル相当の15レベル曲をプレイしてしまったら結果はたぶん悲しい事になると思う。

 

そこで、「曖昧なレベルって言う基準じゃなくてもっと明確な基準を作ればいいんだ」って事で今回は移動量を基準にしてむずいランキングを作りました~。

 

計算方法

単純に移動距離だけだとノーツ数多いやつが勝つに決まってるので、BPMなども加味して考えたのが以下の式。

 

疲れる度 += (今のBPM * 2ノーツの距離 * 四分の何倍か) / 2ノーツの隙間

疲れる度を求めたあと、偏差値を求める。

 

用語について

2ノーツの距離: 前に(右|左)足で踏んだノーツと今(右|左)足で踏んだノーツとの距離

  • 上→下など、反対の位置は56cm
  • 上→右など、隣の位置は40cm
  • 上→上など、縦連は足をあげる高さとして30cm
  • ジャンプはパターン分け直すのめんどかったので全部80cm

2ノーツの隙間: 上と同様にその隙間

gistadefa2394c90c3eda7c6

だったら"2"みたいな

四分の何倍か

八分なら四分の2倍速いから"2"みたいな

 

DDRの譜面は基本的に交互に踏むようにできてるのだが、たまに交互に踏もうとすると回転しないといけない時がある。

しかし、そういう場合とかを考えるとちょっとめんどいので、今回は腰のねじりに制限のない人を想定して作った。

 

#腰のねじりに制限無さそうな人 

f:id:panchiga:20141224194528j:plain

流れ

1. ddr_travel.rb移動距離を求める。

2. 1で求めた値をtravel.csvに追加していく

3. すべての曲が終わったらcalc_std.rb偏差値を求める

4. 3で求めた値をresult.csvに書き込む

5. result.csvを偏差値順に並び替える

 

コード

rubyで書いた。ちょっと長いのでリンクを。

わあいスパゲッティ~~~

 

対象曲

たまたま持ってた1stからX3までと嘆きの樹。

激譜面鬼譜面のみ。

合計745譜面!

 

むずいランキング

全文はここのall_result.csvで公開。

all_result.csv (https://github.com/panchiga/DDR_travel/blob/master/all_result.csv)

今は20レベル表記だが、旧曲だと10レベル表記なのでたまに10とか9が不思議なところにいるのがすごい嫌。Xからだけだと寂しいし仕方ないね…

あと、今は入ってない曲とかコースとかかな?が入っちゃってるけど分かる人が楽しむ感じで。

 

全部出すと本文より長くなりそうだったので上位30曲を順に並べた。

 

gist63e058505a2b4946748c

 

結果を見てみて

足19曲、両曲とも堂々の偏差値100超え!!!!!!

すごい!!

足18曲がやっぱりすごいけどそこに混じってくる16とか17はなんなんだろう

NEPHILIM DELTAがトップ30に入ってるのがちょっと面白い。運動量だけで言えば確かに疲れるから納得はできる。

Δ MAXどっちも17のくせして顕著な差がでたね…

FLOWER鬼(元17)、これ見る限りでは888激(14)より弱いね

 

課題点

ソフランとストップをどうしたら難しさとして数値に正しく出せるかを考えたい

・フリーズ踏みながらもう片足で捌くみたいなのの場合を今回考慮してないのでそのへんも課題点

・DPの対応も出来ないことはなさそうだし次の課題だ 

まとめ

  • 足19はやっぱりおかしかった
  • 偏差値的な値は分かりやすい
  • 10段階と20段階を混ぜると危ない
  • オブジェクト指向できてない!
  • rubyのコピーちょっとなんなんだ

感想

わりと正しい感じの値が出てよかったなあと。ただ、レベル毎にソートしてグラフを出したかったんだけどそれが出せなかったのが残念。

趣味で書くプログラムは本当に楽しいなあ…楽しかったなあ…

コードレビューお願いします!お願いします!コードレビューじゃなくても、もっといい計算式とかあるよって人、コメント待ってます。

 

最期に

Aizuアドベントカレンダーに参加させて頂いて記事を書いたら燃え上がって、人気ブロガー気分味わえて楽しかったです。見てない人は見てね!!

FF10の雷除けを自動化した話 - panchiga's blog

 

 

FF10の雷除けを自動化した話

これはAizu Advent Calender 2014の9日目の記事です!

Aizu Advent Calender 2014

 

前の人: @MiZuKi_Sonoko

mizukindevelop: Hackathonに参加しよう {Aizu Advent Calendar 2014 [8]日目}

次の人: @a_r_g_v

 

はじめに

FF10はみんな知ってるよね?

FF10には七曜の武器っていう伝説の武器みたいなものがあって、入手方法がゲーム中のミニゲームをなんかすごいやるみたいな感じ。

例)

その中で巨乳おっぱいさんルールーの「雷平原のサブイベント・雷除けを200回連続で成功する」というものがある。

おっぱいさん

f:id:panchiga:20131228210446j:plain

 

雷除けとは

画面が光ったら◯ボタンを押す。それを200回繰り返す。そんな作業。


雷平原 雷避けチャレンジ20140517 - YouTube

 

 

こんな作業を人間がやる必要無くないか…じゃあ自動化してみよう!!!ってなったので

自動化をしてみた。

 

準備

今回使った物

 

 手順

  1. Webカメラから画面をキャプチャする
  2. キャプチャした画面情報から光ったかどうかの判定
  3. 光っていたら◯ボタンを押させる
  4. 光ってなかったら↑ボタンを押させる

 

コード

gist086a1a0c2a2bc05a70c2

 

gistf19a396b0924a1ba547d

 

配線

f:id:panchiga:20141209083845p:plain

 

 

f:id:panchiga:20141202043020j:plain

きったね

 

グランドか電源かわからないけど黄色の線が繋がってるのがリレーの入れ替わらない部分。

青色で繋がってるのが◯ボタン

灰色でつながってるのが上ボタン

 

灰色のとこから伸びてる黄色は上以外のボタンを押したい時に使う用

灰色のとこから伸びてる赤色は意味が無さそうので気にしないで…

 

それにしてもひどいな… 

 

動かす


[ff10]雷除けの自動化 - YouTube

 

動いてるね

 

 200回達成!!やったぜ!!!!

 

辛かったこと

Webカメラが勝手にホワイトバランスとか調整しちゃうのでミスが出る。それに気づくまで何が悪いのか全然分からなくて閾値とかスリープの時間とか変えたりしてわからんわからんってしてた。Logicoolwebカメラ使ってたので公式で配ってる調整ソフト(?)使って解決できてばんざい! 

トランジスタがなかったけどたまたまリレーがあって良かった。

 

まとめ 

  • PSコントローラーの基板直接使えばPC側から操作できるの最高
  • pythonシリアル通信超簡単
  • OpenCV強い
  • Arduino便利
  • リレー便利

 

感想

手でやりたくないことを機械にやらせよう的な事が計算みたいにコンピュータの中だけで済ませていたものから、PS2のゲームをやらせる的な現実の世界にまで飛び出して、行動の幅と言うかまさに世界が広がったなって感じがしてる。

電子工作って面白いなあって思いました。

 

次の人 → @a_r_g_v

 

 

Arduinoをはじめようキット

Arduinoをはじめようキット

 

 

【永久保証付き】Arduino Uno

【永久保証付き】Arduino Uno

 

 

 

openCV使いたい…openCV使いたくない?

f:id:panchiga:20140717031812p:plain

はじめに

以前opencv使いたいなーって思ってOpenCV2プログラミングブックという書籍を参考にやってて途中で飽きて放置していました。
 
その本ではmacportsを使っているのですが、当時と違い私はhomebrewを使うようになってしまいました。
その為競合が発生するとのことで、もうmacportsが使えない体になってしまいました。
 
するとOpenCV2プログラミングブック通りには進められないので一工夫必要でした。なのでその苦労を書きます。
 
HomebrewでopenCVというのを紹介してるブログはいっぱい有るのでそのへんは適当にぐぐりましょう。
 
$brew install opencv
 
ここでは躓かなかったとします。
 

早速使う

早速サンプルプログラムを動かしてみようとしたところ、無理やでwって言われた。
brew installしたらパスは勝手に通ってるのではと思っていたので、
 
$g++ test.cpp
 
とかやってたので 
#include <opencv2/opencv.hpp>
         ^
1 error generated.
とかいうエラーくらってなんでだろうなあとか思ってました。
 
つまりincludeするファイルはどこにあるのかを教えてあげないといけないのです。
 
g++のオプション

今回使うオプション

-L :ライブラリファイルのディレクトリを指定する。
-I :インクルードファイルのディレクトリを指定する。
 

解決した 

g++ test.cpp -I /usr/local/Cellar/opencv/2.4.9/include/opencv2 -I/usr/local/include -L/usr/local/lib -lopencv_highgui -lopencv_core

 
死ぬほど長いですね。
でもお陰で無事にコンパイルできて実行ファイルが出力されました!やったね!
 

まとめ 

g++力があまりにも足りませんでした。あとググり力も足りませんでしたね。
さて次は-L /usr/local/libに何がいるのかを知る必要がありますね。
 

感想

なんというか、知らないことが多すぎるなあって感じでした。
何かを使う時、何が書かれてるか考えないでコピペするのはとても駄目ですね。せめて意味を理解してから使おうって思いました。
openCV使えると面白いことがいっぱいできそうなのでいっぱい使っていこうと思います。

 

図工 200円でDDRコントローラー(小)を作る

用意したもの

・PS用のDDRマット(100円)

・アルミホイル(60円)

・皮膜付きの導線60cm(40円)

・サーバーとか買った時についてくる発泡スチロールみたいの

・ラジオペンチ

・CDケース

・ガムテープ

 

手順

  1. DDRマットを切って基板だけ取り出す
  2. それがちゃんと動くことを確認する
  3. アルミホイルが電気通すことを利用してスイッチを4個作る(上下左右)
  4. アルミホイルと導線と基板とガムテープで頑張る
  5. 完成

 

完成です。簡単な図工ですね。

 

結果

f:id:panchiga:20131220072316j:plain

f:id:panchiga:20131220072312j:plain

f:id:panchiga:20131220072308j:plain

 

上の汚いのが完成品。

中のがスイッチ押したら動いた時の写真。ぶれまくった。

下のが実際動かしてみた奴。

 

スコアは散々だけど動きました。

自分の手のサイズに合ってなくてミスばっかだけどね。

 

感想とか

アルミホイルすげー!ガムテープすげー!

プロトタイプなので見栄えはあれだが無事に動いてよかった。スイッチ部分をどうにかもっといい方法探せば・・・

アルミホイルじゃなくてアルミの板とか使って、もっときれいにスイッチ作ってやればミニDDRが作れるんじゃないかって思えるものにはなるって確信できた。

スイッチ・・スイッチなあ・・・・

あとコントローラーが大した構造じゃないので自作もできるなって思った。

すぐ終わるだろwって舐めてかかったら3時間くらいかかってたので意外と辛かった。

 

EXTREMEは自慢です。近所で1000円くらいで買えました。MAX.クリアできません!

Processing

Arduinoでもっと遊ぶにはprocessingは必須らしい

ので初めて知ったことを書こうかなと

 

void setup()

は最初に実行されて初期状態を決めてる。Arduinoと同じだね。
小さいプログラム動かすくらいだったらいらなかったりする。
 
draw()って関数があるらしい
mousePressedを使ってマウスクリックを認識する
mouseX, mouseYでmouseのウィンドウ上の座標を取る
 

f:id:panchiga:20131213044115p:image

Exportをすると.app形式のファイルを作りだしてくれるんだが
10行程度のコードでやってみた結果
     Embed Javaのチェックを外すと5MBくらい
     つけるとなんと100MB!!あほか!!
 
 
リファレンスがExampleよりわかりやすい文になってるのでなにかやりたいのがあったら見るといいらしい。結果付きだからさらにいい。
 
図形を書くことが簡単にできるが(quad,line,ellipseなど)だいたい(座標1、座標2、…)ッて感じで書く。
 
arc()が面白い。欠けた円がかける。
 
size(480,480); 
arc(240,240,80,20,0,radians(257));

f:id:panchiga:20131213044118p:image

 
 
図形の描画は上から順にされる。
つまり
 

size(480,480);

triangle(50,50,50,240,240,400);
ellipse(100,200,150,150);
 
ellipse(300,200,150,150);
triangle(300,30,250,240,300,400);

f:id:panchiga:20131213044124p:image

こんな感じに
 
色とか線の太さとかも変えられる
色: 
background(int);
          背景色の設定
fill(int); 
          図形の色の設定
Stroke(int);
          輪郭の色の設定
noFill();やnoStroke();などで決めたことを無効化する
 
 
決まってない形を作る
beginShape();
vertex(x1,y1);
vertex(x2,y2);
vertex(xn,yn);
endShape();
 
これがあればtriangleとかいらないんじゃないっすかねえ・・・


感想
 
1日あれば本1冊くらい余裕だろって思ってたんだけだまさかの1章しか進まないっていう・・・
やる気あるんすかね
作業用BackGround Movieなんてありえないって学びましたね・・・
 
 
参考
 
 

numeron

numeronやろうぜ!って人がいた。

だから作った。

 

gist7683096

 

ターミナル開いて

ruby ファイル名

で一人用numeronです。

 

分かってて書くプログラム超楽しい・・・

次は敵になるCPUとか作りたいですね。

2人対戦とかも必要ですね。

 

 

コードレビューしてください!