ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

ここ最近のダラダラがやばい

あかん。読みたい本ややらねばいけないこと(仕事とか家族行事とか)があるのに、手が動かない体うごかないスマホゲームは進む。

脳みそ空っぽな作業や遊びは無限に時間を食ってしまうのでもったいないなとは思っているのだけど、中々始められない続けられないハマらない。

このまま30歳になるのはやばそうだな。ダラダラが悪いのではなくて、習慣つけないのいろんな人において行かれそうな気がする。うん。やばそう。

意欲がないのかな? 好きなことってなんだっけ?状態。酒飲む暴飲暴食が得意になってきている。あかんあかんあかん。

仕事でも色々失敗しているのでなんかこう。。。メリハリか夢中になれるものがほしいな。

そんな簡単にお金を使える生活ではなくなったので、すぐに夢中になれそうなものってやっぱりプログラミングかな。好きではあるけど、書くことが習慣にはなっていない。仕事・LT準備以外では全然書いていない。

最近聞いた話で、画像をBase64にするサービスみたいなものを大量に開発して、広告費で儲けている人がいるとかいないとか。これならすぐにでもできそうだからやってみようかね。前にモザイク判定するAPI作ろうとしていたからそれもこれから再開したい。

ダラダラした時間もったいない -> ダラダラするなら金稼ぎたい -> 色々な簡易サービスを作成する -> 広告費 or 寄付(paypalとか) -> お金も稼げるしレベルもアップ -> ダラダラした時間が少なくなる

これでいこう。おしやるぞ。

Unity良かった

昨日、こちらの勉強会にお邪魔しました。

igda-ryukyus.doorkeeper.jp

予想通り学生さんが多く、社会人のおじさんたちはちょっと恥ずかし(?)かったのですが、Unity面白かった!!!!

できたもの

f:id:aipacommander:20180430095746g:plain

学んだこと

  • Unityの開発環境の用語やUnityのオブジェクトの仕組み的な何かを簡単に理解するとクソゲーはすぐに作れる
  • c#で組んだ。プログラミングは細かい動き調整で必須だけど、ほとんどGUIでポチポチして作れるので良い
  • pygletで簡易ゲーム作ろうとしたことあるけど、あっちよりわかりやすいと思った

ねくすと

時間がちょっと余ったので、Unityで機械学習できないか調べてみた。

ml-agents

なんか見つけた

qiita.com

強化学習ですね。求めていたものだ。全体像は掴めなかったけど、今のところの理解としては。

  1. Unityでゲームを用意
  2. ml-agent用にc#を追加(状態、報酬など強化学習に必要は情報を返すメソッド定義)
  3. python側でtensorflowを叩き学習
  4. 学習した結果をunityで読み込んで学習結果を確認

といった流れっぽい

↑のURLの手順ではわからないところもあったので、下も参考にするといいかも。

qiita.com

python側のコードを読んでみた感じ、Kerasでも動きそうである(keras-rlは厳しそう)

今度試してみたい

学習した結果

エラーがでてうごかんかった。

TFException: Op type not registered 'ClipByValue' in binary running on xxx.local. Make sure the Op and Kernel are registered in the binary running in this process.

なんじゃろ?これ

今時間ないので、今度調べてみる。

雑感

強化学習させるゲーム作成はUnityでも全然良いのではないかと思った。

強化学習興味あるのでガンガン遊んでいくぞ!!!

rsyncのオプション`--exclude-from`で指定するファイルの書き方

ちゃんと理解していないけど、とりあえず動いたのでメモしておく。休みの日にでも理解したい。

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.12.6
BuildVersion:   16G1212

$ rsync -av --dry-run --exclude-from=rsync-ignore . ${USER}@${HOST}:~/a/
- .*
- __pycache__/
- module/config.yml
- module/data/
+ module/***
+ other_dir/***
- *

参考ブログmm

koseki.hatenablog.com

【PlayFramework2】Scalaテンプレートで動的処理を書くと改行されるやつを回避する方法

ない。

github.com

Closing. I would suggest using another templating language or post-processing your template output to remove the newlines. (Google翻訳)閉鎖。別のテンプレート言語を使うか、テンプレート出力を後処理して改行を削除することをお勧めします。

つらい。Viewとはなんだったのか。

まぁでも、この人が言っている通り、テンプレート出力したあとに改行を削除すればいいと思った。

部分的には難しいのでテンプレートに@test = {1}__s__のように改行を削除したいコードの後ろに文字を追加する。

views.html.text.hogehoge.render(args).toString().replaceAll("__s__" + System.lineSeparator(), "").trim()

と、することで、view側で処理したテキスト情報から__s__\nの改行を削除するコードができました。

これはひどい

Siv3Dさわってみた

今度、PyData.OkinawaでLT大会があるのでネタ探ししている。

C++で簡単にゲーム作れないかな?って検索したらこんなのがあった。

github.com

面白そうなので触ってみた(ちなみにC++は全然触ったことがない)

ダウンロード

scrapbox.io

自分のPCはmacなので、mac版をインストールしようとした。

インストールして動作確認したけど、うごかなかった。Sierra以降じゃないとダメらしい(El capitan...)

OSをアップデートしてHigh Sierraにしたらうごいたのでおk

チュートリアルを試す

github.com

画面を表示

# include <Siv3D.hpp>

void Main()
{
  while (System::Update())
  {
    
  }
}

うひょー。これだけで画面が起動した。

画面の座標

# include <Siv3D.hpp>

void Main()
{
    const Font font(30);

    while (System::Update())
    {
        Circle(Mouse::Pos(), 100).draw();

        font(Mouse::Pos()).draw(50, 200, Palette::Orange);
    }
}

? エラーになった。Mouseというモジュール?がない?

よくわからんが、Cursorに変更したら動いた。

# include <Siv3D.hpp>

void Main()
{
  const Font font(30);
  
  while (System::Update())
  {
    Circle(Cursor::Pos(), 100).draw();
    
    font(Cursor::Pos()).draw(50, 200, Palette::Orange);
  }
}

左上が(0,0)ということがわかった。

カラフル

# include <Siv3D.hpp>

void Main()
{
    Graphics::SetBackground(Palette::White);

    while (System::Update())
    {
        for (int32 i = 0; i < 36; ++i)
        {
            const double radian = Radians(i * 10 + System::FrameCount());

            const Vec2 pos = Circular(200, radian) + Window::Center();

            RectF(25).setCenter(pos).rotated(radian).draw(HSV(i * 10));
        }
    }
}

たのしい(なんでこうなるか全くわからんけど)

f:id:aipacommander:20180413031338p:plain

フォントとか画像の読み込み

// 間違ったプログラム
# include <Siv3D.hpp>

void Main()
{
    while (System::Update())
    {
        // NG! 毎フレーム テクスチャを作成する
        const Texture texture(L"Example/Windmill.png");

        // NG! 毎フレーム フォントを作成する
        const Font font(100);

        texture.draw();

        font(L"Hello").draw();
    }
}

メインループに作成するのはやめたほうがいいとのこと。だがそもそもうごかぬ。

No matching constructor for initialization of 'const s3d::Image'なんだろうかこのエラー。

初心者が書き直してみた。

# include <Siv3D.hpp>

void Main()
{
  const s3d::Image image(U"../assets/beer_cup_bin.png");
  const s3d::Texture texture(image);
  
  const Font font(100);
  
  while (System::Update())
  {
    texture.draw();
    font(U"Hello").draw();
  }
}

U""ってなに?)

f:id:aipacommander:20180413042019p:plain

雑感

疲れたので寝る.