読者です 読者をやめる 読者になる 読者になる

雑記帳

ソフトを中心に雑記を書いてる割とすぐ転職したい28歳。

さ〜て、再始動。。。

言いたいこと

かなり長期に空いてしまいましたが、またブログ再開します。

何すんの?

とりあえず勉強の成果を少しでも書いていこうかと。
はかどっていないけど、勉強してない訳じゃなくてブログに書いてないのが大きい。

Fuse26に行ってきました

背景

地元でITの情報を捕まえるのが大変だなぁと思っていて、 これとか

efsta.doorkeeper.jp

これとか

sites.google.com

にお邪魔してきて、さらにそこで話が出ていたので連鎖的に参加しました。

目的

さて、一応目的を整理しておきます。

  • IT方面のネットワークを広げたい
  • 久々に制作活動的なことをしたい
  • IGDAの地元での活動を知りたい
  • GameJAMとかに参加するきっかけになれば
  • 地元で技術研究会的な活動をしたい
  • 何か技術的に習得できれば良いな

やったこと

大体こんな感じ。

  • 制作的なこと
    • 本サイトへの操作方法などの書き込み
    • プレゼン資料の作成
    • 必要なリソースの分析と準備依頼、日程管理
  • SEやBGMの準備
    • フリーサイトから落としてきて少し加工しただけです

コードを書いてないじゃないかって?
すいません、今回はそっち方面をやりたい人がいたようなのでやめました。

個人的な成果

ショートゲームの作る順番の目安

次のような手順で作ると、それっぽいものを落ち着いて作れそうでした。

  • メインのゲーム画面を表示する(最初は背景だけで良い)
  • タイトル画面を作る
  • ゲームオーバー、ゲームクリア画面を作る
  • 上の3つの画面を繋げる
  • 後の手順はご自由に

皆、本命部分を作るのに一生懸命になってしまい、ガワの部分が無くてそれっぽくならなさそうでした。
個人的には見栄えがかなり変わるので、重要な要素だと思っています。

素材量の計算の仕方

誰かに聞いた訳ではないけれど、以下のような考えを持つと必要な素材の数が大体分かりそうと思いました。

  • BGM素材 = 画面のカット分
  • SE素材 = 出現するオブジェクト数 x 2 (出現、消滅) x アクション数
  • 絵素材
    • タイトル、ゲームクリア、ゲームオーバー
    • 出現するオブジェクト数 x モーション数 x ステップ数
    • 背景(カット数分)

その場で即興で準備する場合、1個あたりの準備時間は、慣れていても大体10〜30分程度っぽいです。
「すぐに用意できるから」と言っても、5分を切ることは無さそうな感触。
全体の作成時間が実質4,5時間程度なので、どんなに頑張っても1人あたり30個程度が限度な気がする。
これはフリー素材などを落として来ても変わらなさそうです。
経験豊富な人が弾を持っていれば別ですがそれは例外でしょう。

それっぽく見せる要素で忘れがちなもの

  • タイトル自体
  • タイトル画面
  • ゲームオーバー画面
  • 背景
  • BGM

感想

とりあえず楽しめました。
最後になって、プログラマさんに「そういえば音出したことありません」と言われて少々焦りましたが、まあそれも経験と言えば経験でしょう。
ソフト製作の速度自体は、講師の方も大差ない気がしました。(生意気かもしれないけど)
あとはやっぱり経験値による引出しの多さが必要です。
スマホを扱い慣れていればすぐ作れるし、3Dの描画や操作や見せ方に慣れてればそっちにすると早いし。

成果物1

結果の制作物はここに転がってるはずです。
シューティングゲームのひな形的なものを作りました。
特有の難しさなどはあまり無いでしょうか?
とりあえず何かを飛ばす系をやりたかったようなので、その辺はチームメンバーに任せました。

FUSE - ゲーム開発 / ハッカソン / GameJam | jam:fuse_26:team_a:index

成果物2

その1週間前くらいに予習で作ったシューティングです。
こちらも何の変哲もないシューティングです。
マップチップで動かすところまで作れたのが良かったか。

Kei-Fujikura/OneDayShooting · GitHub

Pythonのコードを高速化(はじめてのNumba)

大昔の記事を書き足してなんとかしたいなぁと思いつつ、いつまでも更新出来ずにいました。
少し諦めてもう少し最近のことを書くことにしました。

背景

最近仕事でPythonのコードでツールを作って間に合わせることが増えたけれど、
実行時間が遅くてコマリンスなことになることもあったので、高速化のアプローチをしてみましたとさ。

最近はこんな本を読んでます。

Cython ―Cとの融合によるPythonの高速化

Cython ―Cとの融合によるPythonの高速化

英語kindle版がとてもとても安かったので買ってしまいました。

で、Pythonでは下のように色々な高速化手法が色々あるけど、さてどんな感じかなと。

  • Numpy
  • MultiProcessing
  • Cython
  • C拡張
  • Numba
  • ???

紹介した本と関係なしに、今回は聞いたこともなかったNumba様を使ってみます。

 やってみよう!

本サイトはこちら。 解説本とかは探したけど見つかりませんでした。

Numba — Numba

時間測定方法

ipythonsample.pyに対して実行するときは大体こんな感じ。

> %timeit -n 5 %run sample

普通に書く

何もしない時

def fibo(n):
    if n < 2: return n
    return fibo(n-1) + fibo(n-2)


if __name__=="__main__":
    fibo(38)
In [83]: %timeit -n 1 %run sample
1 loops, best of 3: 15.7 s per loop

メモ化的なやつ

def fibo(n):
    a,b = 0,1
    for x in range(n):
        a,b = b,a+b
    return a
In [86]: %timeit -n 5 %run sample
5 loops, best of 3: 745 µs per loop

nを増やす

if __name__=="__main__":
    n = 10**6
    fibo2(n)
In [92]: %timeit -n 1 %run sample
1 loops, best of 3: 11 s per loop

Numba1

単にjitを使ってみる

@jit
def numfibo(n):
    a,b = 0,1
    for x in range(n):
        a,b = b,a+b
    return a
In [98]: %timeit -n 5 %run sample
5 loops, best of 3: 42.6 ms per loop

もっと増やす

if __name__=="__main__":
    n = 10**10
    numfibo(n)
In [116]: %timeit -n 1 %run sample
1 loops, best of 3: 3.32 s per loop

Numba2

型定義を入れる

@jit(int64(int64))
def numfibo2(n):
    a,b = 0,1
    for x in range(n):
        a,b = b,a+b
    return a
In [118]: %timeit -n 1 %run sample
1 loops, best of 3: 3.23 s per loop

少し条件を変えてみる

if __name__=="__main__":
    n = 10**10
    numfibo2(n-2)
    numfibo2(n-1)
    numfibo2(n)

Numba2

In [120]: %timeit -n 1 %run sample
1 loops, best of 3: 9.61 s per loop

ベクトル化

@vectorize([int64(int64)])
def numvfibo(n):
    a,b = 0,1
    for x in range(n):
        a,b = b,a+b
    return a
In [122]: %timeit -n 1 %run sample
1 loops, best of 3: 9.66 s per loop

結果

単にJITを入れるだけでも割と高速化されそうな印象。
型定義はおまけ程度に早くなるのかな?何度やっても多少早かったので。
ベクトル化は使いどころを知らないと高速化出来なさそう。
guvectorizeもあるけど、チュートリアルを見ても使い方がぱっとは分からない割に早くなってくれなかったのでアレゲ。。。

雑記

仕事中に遊びで少し使ってみたけど、数値計算的な所以外ではjitを入れても速くはならなかった。
というより、JIT分遅くなっている所もあるので闇雲に突っ込んでも逆効果かも。
普通のWebアプリケーションだと、計算よりも分岐とか文字列の分離結合のが多いと思うので、案外使い道が無いのではなかろうか?

PythonとSparkであそぼ(1)

Python Spark BigData 入門

背景

<< 略 >>
今をときめくインメモリ分散処理エンジンSparkを使いたいなぁと思ったりそうでもなかったりするから。 SQLチックに使えたり、機械学習エンジンあるしなんかスゲーじゃん?

参考

またどっかの本読んでます。
本家サイトでEarlyReleaseのEbookを買って読んでいたけど、今のKindle価格の方が安かったりするというちょっと残念な話。

Learning Spark: Lightning-Fast Big Data Analysis

Learning Spark: Lightning-Fast Big Data Analysis

続きを読む