ねむい...
Oculus Rift dk2会社で遊んだけどやっぱり位置トラッキング出来るのは良いな.
やっぱ移動をトラッキングできるとできること広がるので,前に作ってたAndroidのセンサを使った位置トラッキング用のプログラムまたいじる.
そういえば,カフェなどで将来について話しませんか的なメール,何度かファミレスで普通にごはん食べたけど一般的には飲み物以外を頼むの許容範囲なんだろうか...話の内容はあまり興味が持てなくて少し罪悪感は感じる.あまり変なことするとブラックリスト的なものに入れられそうだけど.
やることたくさんあるのに全然できていない.
中学生くらいの時は,自分が老人になる頃には延命技術発達しているだろうし,どこかのタイミングで不老不死になって,少し待ってれば若返る技術もどうにかなるだろうという楽観的な人生設計して生きてきたけど,今の技術の進歩の速度だとそろそろ雲行きが怪しいと最近感じ始めた.
医学的に死なないようにしたり,意識をそのまま情報として残したりするのは怪しくなりつつあるけど,インターネット上で自分の頭より高性能なCPUで何らかのプロセスを実行し続けるくらいはできるだろうし,まだどうにでもなりそうな感じはある.現状,生きてないと銀行口座やクレジットカードを持てないのどうにかしたいところだけど.
会社休んでICFPとか.
*ICFPC 2014
ICFPC終わりました.
72時間,寝てる時間と食べてる時間以外はずっとLambda-Manについて考えていた.
やり残したことはたくさんあるし,結果は分からないけど,楽しかったのでよかった.
終了後,いつも通り肉を食べに行く.
眠い...
*ICFPC まとめ?
コンテストの内容はどこかに説明があるだろうし省略.
http://icfpcontest.org/
今年はsafiiとkmuroi含めた3人で.eldeshにも何度か電話かけたのだけど,応答がなかった.
時間経過ごとのスコアのグラフ.72時間のうちの60時間分くらい.最初の12時間は問題読んだりコンパイラを書いたりしていた.
Lambda-Manのスコアなので,上がっている所はLambda-Man側が強くなったところで,下がっているのはGhostが強くなったところ.最後の12時間位でGhostが強くなったのであまりスコア上がらなくなった.
終了5分前の時点でのやつをサブミット.・・・したのだけど,最後の修正をソースだけコミットしてて,コンパイル結果をコミットしてなかった.気になってたバグの原因に終了10分前に気づいて急いで直したのだけど,うっかりしていました.そんなに影響は無いはずだけど悲しい.
たぶんLISPコンパイラを作るのが正常なのだろうとは思ったけど,LISPとかあんまり書けないし,独自言語作ってその上で開発することにした.
作ったオレオレ言語で書かれたコード(の断片).
// (current, next1, ... next_n)
// g = (probably[1..1024],(x,y),d)
function estimate_ghosts_position(ghosts, map, pos, n) {
_alloc gh, ghlist(0), gpos, prob(1024), d(n);
// current
gh = ghosts;
gpos = 0;
while (atom(gh) == 0) {
gpos = ( (prob, cdr(car(gh))) , gpos );
gh = cdr(gh);
}
ghlist = (gpos, ghlist);
while(n) {
gh = 0;
prob /= 2;
gpos = all_ghost_next(map, car(ghlist));
while(atom(gpos) == 0) {
if (distance(pos, car(cdr(car(gpos)))) < d) {
gh = (car(gpos), gh);
}
gpos = cdr(gpos);
}
ghlist = (gh, ghlist);
n -= 1;
if (list_length(gh) > 50) {
n = 0;
}
}
return list_reverse(ghlist);
}
ローカル変数は関数の先頭でまとめて宣言しないと,効率の悪いコードが生成されるせいで,なんか昔のC言語っぽさもある.随所に出てくる,carとかcdrが元のアーキテクチャの匂いがしますね.
class Memo(a) {
function get() {
return a;
}
function set(s) {
a = s;
return;
}
}
最初,クロージャを作ってたのだけど,関数を複数まとめられたら便利だろうと思ってこんなふうにしたら,「それ僕の知ってるクロージャと違う」と言われたので「function」って書いてた場所を「class」にしたら,なんか普通っぽい言語に.
*ICFPC 2014
ピザ食べた.
コンパイラほぼ良い感じになった.コンパイル時の畳み込みとか細かい最適化周りをいじったり,バグとったり.
まじめに書く.
セットした覚えのない目覚ましが7時に鳴ったせいで眠い...
*ICFPC 2014
最初の24時間はずっとコンパイラを書いていた.IC"F"Pだけど,いつもどおりFunctionalとか無視して手続き型言語を実装する.状態持てるし副作用あるの素晴らしい.
寿司食べた.
有給取ったので休み.
*ICFPC 2014
ICFP Programming Contest 2014が今日から始まりました.
今年は Pack Lambda-Manか.
謎のアーキテクチャのCPU上でうごく,Lambda-ManとGhostを戦わせるゲームらしい.Lambda-ManのCPUはLISPっぽいアーキテクチャで,Ghostは実際にありそうな8ビットマイコン.
日中に部屋を片付けたりして,夜から集まって開始.
ねむい...
今週は金曜も休みの予定なので3日しかない.
連休中にやろうと思ってたことが全然終わってないな...
先週のBluetoothモジュールで遊びたいし,マトリクスLEDどうにかしないとだし,IRCボットにも手を入れたいし,Ruby用エクセル方眼紙ライブラリも公開したかったし.他にも何かあったような.
メモ: https://github.com/phoboslab/jsmpeg
jsでのMPEGデコーダの実装.なんか間違ってる感がとてもあるけど,普通に動くっぽいな.
こういうの見てると,NaClとかasm.jsでは足りなくてjsからHDL吐かせたくなる未来がきっと来ると思えてしまう.WebGLのシェーダで頑張る何かも出てきそうだけど.
*[3dcg]メタセコイアとかMMDとか
MMDで認識されるようにボーン入れなおしたり,物理演算用に剛体とジョイント入れてみたりした.モデルも気になったところを少し直したり.ExportPMDは'[]'が付いたやつにも左右の文字列つけてくれるのか.便利.
mqoファイルをRubyのスクリプトでがりがりいじってるけど,メタセコイアのPythonスクリプトで書くべきか...Pythonほとんど書いたことないけど.
こういうアプリケーションを動かすスクリプトが特定の言語に縛られていること多いけど,とても不便だなあ.APIのABIではないけどオブジェクトの共通のインターフェイス定義が欲しい.PythonからRubyのクラスのインスタンス生成できたりすると良い.そういう意味だとWindowsのCOMとWSHとかの思想は良いんだけどな.あんな感じでOS非依存かつ実装がライトな感じのやつが必要...
メタセコイアのバージョン上げたらmqoの中にサムネイル画像データがテキストで埋め込まれるようになってgitのdiffがひどい感じになった...一応設定でOFFにはできるのか.
毎年恒例(?)の肉を焼く日.
ワニとカエルとカタツムリとかも食べた.とはいえウシとブタが一番おいしいなあ.
Webページで使うアイコン等をttfにしようかと思った.手っ取り早くsvgからttfを作れるツール無いかと探してみたところ,IcoMoonがよさげ.
ただsvgファイルをインポートしたり,作りなおすときの操作が面倒なのでコマンドラインツールが欲しいな.
テレビ見て餃子食べて亀戸観光する日.
カラオケ屋に集まってノートPC開きながらテレビを見る.テレビ見るの正月以来な気がするな.テレビ見つつRN42を試す.
ねむい...17時半頃に帰ってきて寝る.
スマホとつなぐデバイスを作るときはバッテリー周りが面倒くさいな.USB充電回路付きリチウムイオン電池そのへんで売ってないかな.http://www.switch-science.com/catalog/506/ このあたり買うか.
*RN42モジュールを試す
秋月で買ったRN42モジュールを少しだけ触る.手っ取り早く試したかったのでUSB接続できるやつを買いました.
このモジュール,すぐに入手できてかつ技適マークがあるものの中ではかなり安い上に,動作モードも色々選択できて,マスターにもなれるし,HIDとかも喋れる.SPPだけなら他にも選択肢はあるけど,HID使えるのでAndroidとつないで遊んでみたくなった.
基本的には秋月電子のページからリンクされてるマニュアル見ればだいたい分かる.DIPスイッチやシリアルでコマンド送って指定した動作モードにする.
FTDIのシリアル変換ICが使われてるのだけど,PCにつないだら勝手にCOM4として認識された.
Androidでデバイスを見つけた後に,キーボードになったりゲームパッドになったりするとよく分からないことになるので,設定変えるときはペアを解除した上で一度Bluetoothを無効にするのが良さそうかも.
*USB ISPのHIDaspx化
昨日買ったUSB ISPのファームウェア上書きしてHIDaspxにした.使い慣れたコマンドが使えるし,こっちのほうが書き込み速い.
載ってるのは普通のmega8なのでUSBasp互換になってるっぽいのでUSBaspにも出来る.
http://wiki.efihacks.com/index.php?title=USBasp_Experiences
アルミ製のカバーは特に接着とかされてないので簡単に外せます.キャップを外してUSBのコネクタを平らな面に押し当てて押しこむのが簡単.
-
基板上の"UP"と書かれたランド同士をショートさせるとRESETがつながって書き込める
-
USB ISPを2つ直結して接続できたらOK
-
フラッシュはロックされてなかったので一応バックアップ取る
-
HIDaspxのusbconfig.h と main.c をmega8用に書き直す
-
mega8用に直したhidaspxのファームウェア main.hex (GPLv2です.Cのソースは万が一欲しい人がいたらどこかに置きます)
3つあるので,会社用と家用と予備にしておこう.
色はもっと種類あったのだけど,昨日aitendo行ったら黒と茶色のしか無かったので黒2つ.液晶工房は無くなってしまったけどaitendo直営なっても良くわからないもの色々買えるので困らない感じだ.
暑い...
電子パーツ買う日.
秋月でRN42が載ったBluetoothモジュール売ってたので買う.以前は技適マークが付いてて安いモジュールが無かったのだけど.とりあえずUSBにつながる開発キットが2400円だったのでそれを.モジュール単体なら1500円です.
AVRとか細かいパーツも色々.
あとは先週見つけたUSB ISPを2個追加.
定例的な飲み会.
よく考えたら昨日の店と数十メートルしか離れてない場所だな.
いつもよりちょっと高いコース.
ヒラメとかキンメダイとかウニとか肉とか食べた.
雰囲気次第で(?)自動的に色々出てくるのだけど,何かすごいの出てきた.
普段ほとんどアルコールは飲まないのだけど,色々出てくるのでうっかり飲み過ぎる...
昨日もさっさと寝てしまったので,朝9時に目が覚めた.
*ICPC国内予選に参加しました
とはいっても学生しか出れないので,スポンサー枠の体験参加です.会社の人とチームで参加しました.大学生の時出たのが確か2006と2007年なので,7年ぶりでした.
仕事を早々に切り上げて,ドワンゴ社内のカフェテリア(通称リフレ)に集まる.普段IRCでしか見ないので,顔を合わせると新鮮(?).
Aの問題とか10分くらいで出来るだろうと思っていたら開始から40分経ってた...おかしい.慣れないOSと慣れないキーボードだったとしてもダメっぽい.2007-07-06の日記を見ると7分で解けたとか変なこと書いているのできっと別の誰かに違いない.
いつのまにかmesoさんが写真をアップロードしていた(ので勝手にここに転載した).
https://twitter.com/meso/status/487515539565060096
奥のほうが新卒チームで手前が我らが「おっさんチーム」.名前ひどい.
koizukaはわりと近くにはいたけれど,一緒にコード書くのは初めてな気がする.小学生の頃遊んで凄いなーと思ったゲームの開発者と一緒に同じディスプレイ見ながらコード書いてるのも感慨深いと写真見ていて思った.
結局4問目が答え合わなくて時間切れ.あとちょっとというところ.コンテスト系は良くても悪くても常にあとちょっとだったのに…という感想が残る.
まぁ即席チームで3問解けたのだから普通に見れば悪くない成績か...
終わったあと,K社の人と一緒に懇親会.競技プログラミングの話いろいろ聞けて興味深かった.
昨日,眠くて帰ってすぐ寝てしまったせいで8時前に目が覚めた.
そして夕方眠くなる...すぐ元に戻るだろうけど人間ドックのせいで生活リズム変わってしまった.
メモ:
ストックが無いので買う:2313,mega88,ICソケット(32,16,28pin)
朝7時に起きて人間ドック.バリウム飲んだりした.とても眠い.
16GBのSO-DIMMが全然出回らないなあ.IMM2G64D3はIn Productionとか言ってるのにどこにも売ってない.
眠いので早めに帰って,そのまま寝る.
明日は早起きしないと...なので早めに寝る.
*[golang] golangでIRCボットを書くときのメモ
昨日のハッカソンで,go-irceventを使ってみたので,その時に試しに書いたやつを.
go getで必要なものをインストール.最近はgoコマンドがなんでもやってくれて便利.
go get github.com/thoj/go-ircevent
go get code.google.com/p/go.text/encoding
go get code.google.com/p/go.text/encoding/japanese
IRCだとまだISO-2022-JPを使うこともあると思うので,文字コードはgo.textで変換するのが良い.会社のIRCはUTF-8なので不要なのだけど.
ライブラリの依存関係の管理はgodepとかが主流なのかな.そのうち試そう.
IRCボットの簡単なサンプル.設定はjsonファイルに出しました.
package main
import (
"os"
"log"
"strings"
"encoding/json"
"io/ioutil"
// go get github.com/thoj/go-ircevent
"github.com/thoj/go-ircevent"
// go get code.google.com/p/go.text/encoding
// go get code.google.com/p/go.text/encoding/japanese
"code.google.com/p/go.text/encoding/japanese"
"code.google.com/p/go.text/transform"
)
var settings struct {
Server string `json:"server"`
UserName string `json:"user"`
NickName string `json:"nick"`
Channels []string `json:"channels"`
JisEncode bool `json:"jis_encode"`
}
func main() {
configFile, _ := os.Open("settings.json")
jsonParser := json.NewDecoder(configFile)
if err := jsonParser.Decode(&settings); err != nil {
log.Println("failed: load config.", err.Error())
}
configFile.Close()
con := irc.IRC(settings.NickName, settings.UserName)
err := con.Connect(settings.Server)
if err != nil {
log.Println("failed: connect irc")
return
}
con.AddCallback("001", func (e *irc.Event) {
for _, ch := range settings.Channels {
con.Join(ch)
}
})
// auto join
con.AddCallback("INVITE", func (e *irc.Event) {
//log.Println("invited " + e.Arguments[0] + "," + e.Arguments[1])
con.Join(e.Arguments[1])
})
con.AddCallback("KICK", func (e *irc.Event) {
if e.Arguments[1] == settings.NickName {
log.Println("KICKED " + strings.Join(e.Arguments, " "))
}
})
con.AddCallback("PRIVMSG", func (e *irc.Event) {
log.Println("PRIVMSG " + strings.Join(e.Arguments, " "))
ch := e.Arguments[0]
msgString := string(toUtf8(e.Message()))
log.Println("MSG " + e.Nick + ":" + msgString)
if strings.Contains(msgString, "oreo") {
con.Notice(ch, fromUtf8("オレオ"))
}
})
log.Println("Start bot.")
con.Loop()
}
func toUtf8(s string) string {
if !settings.JisEncode {
return s
}
if msg, err := ioutil.ReadAll(
transform.NewReader(strings.NewReader(s), japanese.ISO2022JP.NewDecoder())); err == nil {
return string(msg)
}
return ""
}
func fromUtf8(s string) string {
if !settings.JisEncode {
return s
}
if msg, err := ioutil.ReadAll(
transform.NewReader(strings.NewReader(s), japanese.ISO2022JP.NewEncoder())); err == nil {
return string(msg)
}
return ""
}
"oreo"と書き込むと"オレオ"と返事をします.
なぜかWindows上で実行しているとCtrl+Cで止まらなかったりするので,IRCのコマンドで再実行できるようにしておくと良いかも.
作ったボットも業務に関係ないやつなら公開しても問題ないとのことなので,GitHubに置く.
ハッカソン&エンジニア決起集会という名のピザ食べる日.だけど,30分ミーティングするために会社に.
さりげなく「ドワンゴハッカソン&エンジニア決起集会」の文字.
あまり仕事で使わない言語やフレームワークが推奨されてるので,GoでIRCボット書いていた.
新卒研修の結果発表も会って,最優秀賞がよさ気なものだった.5年前は変な色のカレー(と図書カード)とかだったのに.
昨日のマトリックスLED.ハッカソンとは関係ない.
一応大丈夫そう.写真だと少し白飛びしてしまってるけどもう少し色ははっきり出ます.ただ,近くで見るとRGBが分離して見えるので拡散するために半透明のシートなどを貼ったほうが良さそう.
tiny2313を壊してしまったので一時的にmega88を載せてます.
今気づいたのだけど,2313だとRAMが128バイトしかないので,1ドットあたり12bitだとしても,フレームバッファを1枚しか作れないのか...今どきmega88が170円とかになってるし,もうこれで良い.それかtiny861Aも200円か.って2313が150円に値上げされてる.見ない間に色々変わってる.
メタセコイアとKeynoteと.
入れたはずのkeynoteプラグインが見えない...と思ったら32ビット版じゃないとダメか.前にも同じことやった気がする.
メタセコイア3と4の32ビット版と64ビット版で3つインストールされてるのどうにかならないかな.
1つのアンカーの対象オブジェクトを複数にしたいのだけどよくわからず.細かくオブジェクト分けてるのをまとめれば良いのだけど作業しにくい.オブジェクトを同じ名前にすれば対象になっているようなので,試しにfoo|fuga と foo|hogeという名前にすると,両方ともanchor|fooでコントロールできた.
ひと通りボーン入れて,keynote上でアニメーションさせてみたり.細かい調整はめんどい.そして,MMDは遠い.
電子工作欲が出てきたので,秋葉原に.
8x8のRGBマトリクスLEDがaitendoで500円だったので4つ買う.あと,USB ISPとかいうドライバインストール不要なUSB接続の怪しいAVRプログラマが600円だったのでこれも買う.どうでもよいですが色が何種類かあって良い.
*怪しいAVRプログラマ
買ってきたUSB ISP,PCに挿したらHIDデバイスとして認識された...あれ?どっかでそういうの見たことあるな.アレがHIDなのはV-USBを使ったLowSpeedデバイスとして作る都合でそうなったのだけど,常識的に設計すればCDCにするだろうに...すごく気になったのでちょっとだけ中身を覗いたらやっぱりという感じでATmega8Lをオーバクロックの12MHzで動かしてる.気をつけないといけないのは入出力に何も入っていないので,うっかりレベルの違う回路につないだときにちょっと怖い.
ちなみに,書き込みはprogispというソフトで使えるらしい.回路はほぼ同じなので,あとでファームウェア書き換えて使い慣れたhidaspxにしてしまおう.
*フルカラー8x8マトリクス
ORM 2088RGB-5. RGBはアノードコモン.ピン配置は綺麗に並んでて間違いにくい.
電子パーツ,結構会社のデスクに置きっぱなしであまり手持ちがないので,たまたまあったTiny2313とBA823を3つつないで.
http://www.binzume.net/library/avr_matrix_led.html このときのとほぼ同じ回路.
カソードをBA823を3つつないで駆動しているので,デューティ比は1/24になる.それなりに電流を流す必要あるのだけど,手元に調度良い抵抗が無いな.
モデリングとかする日.メタセコイア4の使いたかも分かってきた.次はkeynoteとかでボーン入れてみるかな.
分かってはいたけど,マウス無いと効率悪いな...
飲み会的なやつ.新しくチームに来た人の歓迎会.どんどん人数増えるな...