mattak's blog

人生を1ミリ進める

目標: 2016

スローガン

  • 気力とアクティビティを高いまま維持する
  • 生活習慣をガラリと変えたい

  • ランニング 40km / 月. 週2ペースで走る
  • 腹筋 20回 / 日 を継続 (少しづつ増やす)
  • 腕立て 20回 / 日 を継続 (少しづつ増やす)
  • 年末までに体脂肪率10%, 55k

英語

  • rarejob初めてみる.
  • 週1ペースでつづける
  • 楽しく会話できるくらいにしたい

習慣

  • 原則9時以降は食事しない. お菓子禁止
  • 10時以降は刺激物禁止. (ゲーム, アニメ, プログラミング...)
  • 読書のみ許す
  • 刺激物をやりたければ、朝するようにする

  • 読書記録をとる
  • 漫画、小説、真面目本問わず

リリース

  • 月1ペースを目指す
  • ゲーム, ライブラリ, アプリ, ... 問わず
  • その時に興味のあるものを

  • +5万 / 月

ふりかえり

  • 各項目で記録する
  • 月1ペースでブログに残す

エンジニアでも作曲したい

前置き

ゲームジャムでゲームを作るときに作曲できると便利。 面倒な著作権問題やら回避できて、自由にアレンジや改変もし放題。

lycoris102さんと ayaki さんにいろいろ教えてもらって作曲はじめた。 自分で作った曲はいろいろとおかしいのだけど(自覚している)、まあ最近始めた初心者なので許してという感じ。

ツール

作曲に利用したツールDAW (Digital Audio Workstation) というらしい。

FL Studio

FL Studio 12

f:id:mattaclj:20151207003010p:plain

定番ソフトらしい。mac版はbetaでリリースされていて、プロジェクトの読み出しができないもののちょっとした曲を作る分には十分。 こんな曲をつくった。

soundcloud.com

GarageBand

Mac標準の作曲ツール。 いままではなんか邪魔なアプリが入ってるなー程度の認識だったのだけど、使ってみるとDAWとして初心者には十分な機能が入っている。 ドラムも良い感じに自動で鳴らしてくれるのですごい便利。 チュートリアルも充実してて、そもそも作曲とは?コードとは?みたいな人にもオススメ。

f:id:mattaclj:20151207003226p:plain

CMD + クリックでピアノロールに追加できるってことだけわかりにくいが、あとはなんとなく慣れでいける。 追加DLが多いのがたまにキズ。

これで作った曲。

soundcloud.com

GarageBand (iPhone)

モバイルでも作曲できるのだ。 しかもちょっとした打ち込みならこっちのほうがやりやすいくらい。 デフォルトのオートプレイや、スマートドラムもかなり便利。

f:id:mattaclj:20151207004745j:plain f:id:mattaclj:20151207004754j:plain f:id:mattaclj:20151207004751j:plain

少しわかりにくいのだけど、AirDrop やら Dropbox経由でPCに .bandファイルをシェアできる。

試しに作った曲。(ただのオートプレイの組合せ)

soundcloud.com

勉強したサイト

ドラムロールは適当に打ち込んでもリズムになりやすいのだけど、 ピアノロールには打ち込んでも、それっぽい曲に一向にならない。 ので少し勉強した。

YAMAHA コードについて学ぶ

コードについて学ぶ - 音楽について勉強しよう - ヤマハ株式会社

和音の作り方、7th chordあたりが勉強になる。

サビ、メロについて

構成 (曲) ‐ 通信用語の基礎知識

Aメロ、Bメロ、サビなど

そもそもサビの意味すらしらなかった・・・

Timさんの音楽教室

GarageBandを開くと標準でついてくるレッスン。 コードの基礎的な説明や楽器の使い方など、誰でもわかるようにかなり丁寧に説明している。 当たり前だけど楽器に会う演奏スタイルやコード進行があって、基礎を学ぶとそういうことを気づかせてくれる。

f:id:mattaclj:20151207014026p:plain

作曲の難しさ

いまは作れる曲を作るという場当たり的適当さで作っている。 狙った曲でその雰囲気を表現するのはやっぱり難しい。

副作用

自分で作曲をしてみると、世に流れている曲でどんな楽器で演奏しているのか? どんなコード進行をつかってるのか?だいたいドラムロールつかってるなーとか、雰囲気だけをだすなら複雑なメロディはいらないなーとか。 今まで見過ごしていたものへの気付きがある。

当たり前だけど世の中には曲があふれていて、何気ないアニメの一シーン (終物語やらごちうさの劇中歌とか、SEとか)にも耳が反応するようになった。 このパターンを蓄積して、どんな楽器をつかえばいい?こんなパターンがあるんだってのを積み上げてみんなうまくなるんだろうなーと (小並感

2015年においては、ツールも豊富で無料で作曲をはじめられるので良い時代だ。 曲作りは楽しいし、1日くらいで1曲できる手軽さなのでゲームジャムエンジニアにはおすすめです。

GameJam#6での学び

WIP. 社内でゲームジャムをやっていた時の学びメモ

Resources.Load()

digit.sprite = Resources.Load<Sprite("Sprites/digit/" + value);

みたいなのよくやる. as Spriteとか前はやってた。

ReactiveProperty

public LongReactiveProperty score = new LongReactiveProperty();
void Start() {
  score.subscribe(value => {
    SetScore(value);
  });
}

みたいな感じで値監視がすごい便利。スコアとかこれだけで出来る。

ProjectのBootstrap

毎回同じセットアップとか、同じロジックを書いてる気がする。 コーディングの半分くらいは無駄にしている感。 小分けにして、Utilityとしてまとめたい。UnityのBootstrapつくりたい。

Fabric

FabricBetaでデータを共有したかったが、Unityから書き出すと毎回データが書き換わる。 しかもFabricは導入がたるい。DeployGateのようにアップロード機能だけ切り出して欲しい。 Fabricの導入対応を血迷って初めにやってしまったのはミス。4時間くらい不毛に潰してしまった。

書き出し

Unityの書き出しはちょくちょくミスる。 これで作業時間がその都度15分くらい消耗されるのはツライ。 jenkinsとかで裏で書き出す仕組みが欲しいところ。 UnityのCloud Build試してみたい

またiOSのビルドもかなり待つ。

gh-pages

GithubPagesはゲームを手軽に共有するのに便利だ。 ただブランチ切り替えの前にきちんと物理コピーを取ることをおすすめする。 マックのクリップボードコピーは参照先だけ保持しているので、ブランチ切り替えでデータが消えて時間を浪費する。

機能をすてるということ

たとえば、ステージをロードするということはそれなりにロードする仕組みが必要だ。 現状の手持ちで間に合うかどうか、どのくらい時間がかかるか。それによってどのような影響があるか。 きちんと考えて必要な物を絞るのは大事だ。

Kotlin メモ1

open

Classes and Inheritance

継承元のクラスに引数を渡すとき、classにopen annotationをつける。

constructorの引数

public class Entity(name : String)public class Entity(val name: String) の違い。

valがつくと継承元のClassに引き渡せない。 valをつけると自動でクラス内のpropertyとしてmappingしてくれる。

returns label

foreachなどでreturnsするときに、ラベルをつかうみたい。

http://kotlinlang.org/docs/reference/returns.html

potatotips #19 いってきた

ただのメモ

Potatochips #19


@gfx

  • RxAndroidの先行きが不透明
  • RxJavaユーティリティを突っ込みたい

AndroidSchedulers

  • RxAndroidと同じ

Schedulers

  • ベストプラクティスあんまりわかんない
  • とりあえずthread2つでよさそう

AndroidCompositeSubscription

  • 同じinstanceをfinalで持ってる. 再利用可能

OperatorFilterLite

  • もうすこし軽く. objectを作り過ぎないようにしたい

RxAndroid/RxBindingの動向をみまもりたい


@yuseinishiyama

静的にもっと書きたい話

UIViewController

  • 例えばStoryboardとのヒモ付け、同じ情報を何箇所にも書かないといけない
  • 1Storyboard / 1ViewControllerがオススメ
  • global funcでstoryboard instantiateする関数

型名の抽出

  • 一般的な方法、nest classには使えない
  • mirror typeつかう
  • swift 2.0では selfのdescritionでおk

IndexPath

  • enum in enum で定義するとよさそう

UITableCell

  • class name == nib == class identifier

@futaboo

push通知周り

GCM

  • registoration idを保存
  • 送信

注意

  • 再起動するとregistration idが変わることがある

RECEIVE_BOOT_COMPLETED

  • GooglePlayの自動アップデートが効かなくなるのが問題

GCM診断

  • idを入力すると過去に届いたかどうか、その一覧がでる

問題

  • Dozeモード
  • 省電力

@kitasuke

  • fastlane meetupにいったよ
  • 日本語ガイドに紹介されてうれしい
  • Clipper = suika
  • Meetupいくといいよ

メソッドを外部から叩く技

  • c88 tech boosterに寄稿したよ
  • Method Http Exporter: つくったよ
  • 開発用のバックドア

仕組み

デバック

  • センサ系の操作に便利ですよ

Core Graphics

  • @shu22

watchOS2

  • 線、UIBezierPath、円、gradationのかける
  • 手書きできない

JS native間のmessage

htlm5 web messaging

  • 送信用ポート、受信用ポート
  • mWebView.postMessage()

  • html5標準なのでよさそう

  • いまはpreview 段階. M Preview

New Library for CoreData

  • Hiroshi Kimura

新しいデータストアライブラリつくってる

  • CoreStore

よいところ

  • swift
  • thread管理
  • mainthreadはread only / 書き込みはbackground
  • sqlite fileが複数使用可能. configでわけられる
  • sqlが結構シンプルに書ける
  • fetchの記述がシンプル
  • VCとの連携が簡単
  • migrationが充実

swift2.0対応中


はじめよう Data Binding

  • @sys1yagi

Android開発の課題

  • View周りが煩雑

View Binding

  • RoboGuice / ButterKnife
  • 助かるんだけど、全然足りない

Google IO Data Binding Library

  • com.android.databinding:dataBinder:1.0-rc0
  • minSdkVersion 2.1-

Layout XMLの記法を拡張してくれる

  • root要素にlayout書くだけ
  • compileの時にコードを吐いてくれる
  • view with idsでview holder
  • automatic setter
  • observable...

View With IDs

ViewHolderいらずに・・・

layout書くとViewHolderが出来上がる

実際に試すと超楽しい

  • ViewHolderの代わりにくらいからやると良さそう

夏コミ

Cookpadではすでにリリース済み


iOSの画面遷移と私

  • @tokorom

  • 紀元前: Storyboard登場まえ

  • 紀元後: Storyboard登場

self.presentViewControllerでやる

storyboard時代の遷移

  • prepareForSegue
  • 超嫌だ

watch kitの contextがよい

  • 疎結合 anyobject
  • 遷移後・遷移前で依存関係ができてない
  • interfaceで何でも渡せる

ライブラリつくった

  • SegueContext

NavigationController/TabController挟んでもへっちゃら


Breaking changes for Foundation API in iOS9

  • @kishikawa
  • Relm
  • meetup T-shirtくばるよ

NSMutableDictionary

- (void)setObject:(nullable ObjetType)obj forKeyedSubscript:(KeyType <NSCopying>)key

破壊的な変更なので要注意

  • nilを渡すと要素が削除される => xcode7
  • xcode6.x時代は NSInvalidArgumentException

GCM Topic Message

  • @mochicon
  • KAYAC inc
  • Lobi
  • C88 東A-39a

GCM Topic Messagin

  • グループユーザに送信
  • Topicに登録した100万件までに送信
  • ニュース配信とかに使える

GCMのGoogle APIsの利用方法が変わった

  • google-services.jsonというconfiguration fileを取るように変更された
  • project_number: sender_idに相当
  • 複数のアプリで使いまわせる

新しい方式

  • app/直下にconfigファイルをおいておくと、勝手にpluginがidを生成してくれる

UTI

  • hatena

extension / mime / uti

UTI

  • Uniform Type Identifier

mime type -> extensionを作れる

  • ライブラリある
  • UTI(mimetype: "image/jpeg").extension

DeepLinkDispatch

  • wasabeef
  • CA
  • ameba tv

DeepLinkDispatch

  • airbnb
  • deeplink schema 起動が楽
  • simple
  • anotation base

Activity

@DeepLinks({"wasabeef://deeplink/{id}"}) public class MainActivity extends Activity {}

  • Bundleにidが入ってる

Method Annotationも使える

  • static, returnでintent

ApplicationにDeepLinkCallbackをimplementするとエラーがくる

Test

  • adb shell am start -W -a android.intent.action.View -d "wasabeef://"

iPad Multi Tasking

  • @mpon
  • 参加レポートを1日づつかいた

Picture in Picture

  • 動画を再生しつつ操作できる
  • Youtubeとか

Slide Drawer

  • 引っ張ってくとSplitViewになる
  • Device Orientationを全部対応すればできる

iPadアプリ

  • safariが対応してる
  • ipadなのにiphoneサイズで閲覧されることがある

Flow, Mortar, Dagger2 Tips

  • @tai2

Fragmentのライフライクル問題

  • IllegalStateException

Flow

Mortar

  • getSystemServiceを拡張
  • Viewの永続化がBundleでできる

Dagger2

画面ごとにObjectGraphを作る

  • @WithComponent、画面に対応するobject graphを指定する

サンプル作った

  • github.com/tai2/flowmortardagger2demo

CookPadはRoboGuice使ってる


Teitenってアプリをつくった

  • @nakajijapan
  • pepabo
  • NKJxxx をたくさん作ってるよ

teiten

  • 自分を10秒毎に撮り続けるアプリ
  • osxあぷり

previewをdrag&drop -> LGTMできるようにしたい

  • NSTableView -> drag&dropに必要
  • NSDragOperation
  • NSPasteboardWriting

github / qiitaでclipboardにcopy&pasteできるのいいよね


APT

  • @izumin5210

Annotation Processing Tool

  • aptはjava7でdeprecated
  • もとはコマンド
  • Pluggable Annotaion Processing API

構成

javacのための入り口

  • autoservice

あがめよう

  • JavaPoetで生成するとよい
  • testはGoogleのCompile Testingをつかうとよい

小並感

  • cookpad 良いオフィスだ
  • dataBinderおもしろそう、導入しようか
  • DeepLinkDispatchもよさそう

kotlinことはじめ

kotlinでアプリを書き出すようになったので、勉強がてらメモ。

static method

kotlin.hatenablog.jp

基本staticは無いらしい。class objectで記述するみたい。

いつものアレをconvertしたらこうなった

public class SomeFragment : Fragment() {
    companion object {
        public fun getInstance(): Fragment {
            return Fragment()
        }
    }
}

val var

swiftのletにvalが相当する。変更不可能な値。 varは変更可能な値。

getBytes()

Stringに生えているgetBytes()はdeprecatedになっていた。 代わりにtoByteArray()をつかえとのこと

ByteArray

Basic types - Kotlin - Confluence

Arrayで配列を表現するみたい。 primitive型も対応する型が用意されているみたい。

Test

androidjvmテストを書く

src/test/kotlin/PKG/HogeTest.kt

package hoge

import kotlin.test.assertTrue
import org.junit.Test

public class HogeTest {
    Test fun hoge() {
        assertTrue(true)
    }
}

Annotationは@を外してつかうっぽい

butterknife

kotterknifeがあるっぽい

repositories {
    maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
}
dependencies {
    compile 'com.jakewharton:kotterknife:0.1.0-SNAPSHOT'
}
import butterknife.bindView

public class MapFragment : Fragment() {
    val mMapView: MapView by bindView(R.id.map)
}

Parameter specified as non-null is null

Caused by: java.lang.IllegalArgumentException: Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter savedInstanceState

というエラーがちょくちょく発生する。コレはoverrideしたjavaの関数にて、optionalを気にせずoverrideしてると呼び出し元の関数からnullが渡ってきてエラーが起きる。 java関数をoverride するときには、optionalかどうかを厳密に考えよう・・・。

traitはdeprecated

かわりにinterfaceをつかう。

data class

data public class Hoge(val name: String, val createdAt: String) みたいな感じでデータ宣言できる。

Signleton

taro.hatenablog.jp

object Singleton {  
  fun hello() {
    println("Hello")
  }
}

object declarationで簡単にかけるっぽい。

Game Graphics Groove #3 いってきたメモ

connpass.com

『パズクエにおけるUXテストとその結果&対応』

  • 細川奈々恵

UX Testの実施について

  • 9回くらいリリースまでに実施している

3つ決める

  • テスト目的 : 理解できるか?面白いか? 操作しやすいか?
  • テストスコープ: 初回起動、プレイ時間
  • 被験者要件: 誰にやってもらうか?

社内UXテストで観察した例

  • バトル画面 / フィーバー画面にすんなり入れるか?
  • 非開発系の部署 3人 (1人課金層, 2人無課金層)
  • ダメポイントがたくさんあった

発生頻度高い&重要

  • 召喚方法、フィーバータイムの条件、..
  • 負けた理由がわからない

観察

  • 敗北して初めてルールを考えだす
  • 負けたときにやり方を教えるのが有効っぽい

チュートリアルの分割

  • 必要なときに必要な要素を表示する
  • 敵の弱点など考えなくても進めてられるように

まとめ

  • testerは少なくてもいい
  • test目的が大事

ちょっと早口でわかりずらかったかも...

『Spineメッシュアニメーション応用編』

  • 二宮大輔

Spine

  • Cocos2d / Unityに対応してる Boneアニメーションツール
  • Meshアニメーションもできる
  • 動作が意外に軽い

不満点

  • パースごとのループができない
  • マスクが未対応
  • Scriptが打てない

うねる柔らかさ

  • Meshいいかんじだ
  • 先端から末端に伝わるときに遅延させるとよい

3Dっぽいこと

  • 3dの各頂点に対応するMeshポイントを中につくる.
  • 鍵マークをつけると移動できる

丸くても揺れるよ

まとめ

  • 柔らかさの表現できるよ
  • 3Dの表現も出来るよ
  • Live2Dを越える表現も

『ハコスコとUIとご飯』

  • 鈴木 匠太
  • 矢羽田 和徳

VR市場は1500億ドル?

バーチャルボーイうれなかった

  • ハードウェア価格高い
  • 一人でしか遊べなかった
  • コンテンツでない

VRの問題..

  • エロで攻めすぎ

ハコスコのいいところ

  • 安い
  • ケーブル不要でどこでも
  • いろんなスマホサイズに対応
  • デザイン自由。ファッションにできる
  • 開発難易度が下がった VRはUnityで開発できる
  • ARも可能
  • 普及している

未来

  • 女子高生 「今日スコッとく?」

個人的にはCardboard派だ...

www.amazon.co.jp

操作

  • 首振る
  • 視点移動
  • 上下にふることで歩く操作
  • ponと叩いて写真を撮る
  • Vufolia SDKでARで撫でる、触る

新しい操作方法が必要

  • チャンスかも知れない

SPAJAM

  • 寂しい食卓: 幻想飯
  • ご飯を容易
  • ARカード (和、洋、中、...)
  • ちゃんと画面が曇る、かなり豪華感ある演出

GDC

  • みんなVR発表してた。EpicはLoad of the Ringとか?
  • 期待感ある

『乖離したことから始まった、本質への回帰』

  • 窪 洋一

パネルディスカッション

UIデザイナについて

  • アニメーションはあんまりつくってない.
  • 内製のエフェクトツール使うことが多い.

企画ってどうやって決めてる?

  • 企画コンペやってるよ. 出した人がオーナーになる (クロスサマナー)
  • プロデューサーが何つくろっかーって決める
  • IPものは天上人が多い

クリエイティブ周りの決定権、誰が持っている?

  • プロデューサー.
  • ...

作りたいもの作れてる?