食道楽1日目
スーツとか言うの明らかにspdにマイナス補正だし就職するとおおよそ外せなくなるしマジ呪いの装備
東京行くとスーツ来てない人増えるしもっとそういう文化広まれ
まじで飛行機初心者は1時間前についてるべき
満席につきアップグレードされた。喜ぶところなんだろうけどめっちゃビビるからやめて頂きたい。。。
朝食べていなかったので鶏カツサンドを頂いた。
650円もしただけに美味しかった
満席だったからか、搭乗手続きが遅くてビビった。
誘導が十分じゃなかったからビビる。
BTを利用した短距離情報提供サービスが実際欲しい
席は中央の一番前だった。CAさんの仕事をチラ見で来て面白いけど外は見れない。。。
タクシングしてるだけでテンション上がるあるある
タービンたんはぁはぁ
離陸まで大して走ってなくて、ストールとかどんだけなんだろうと思った
スロットルによって体感Gが変わるの面白い
カーテン「CAさんが見えるといったな。あれは嘘だ
一時間半のフライトなのに機内食がアンブッシュ「アイエエエ、かにごはん、かにごはん
カニが微妙にいる感じの仕出し弁当ッて感じだった。
アルコールも頼めたけど流石に控えた。。。
札幌まで行くのは何事もなかった
とりあえずホテルに荷物をシュウウウウウ
ちょっと北大まで、フラフラしようとか考えたら死にかけた。ひろすぎんよー(駅から徒歩20分強顔
今日はデバイスのセッション行こうと思ってたら、満席かほぼ満席ばっか。。。
仕方ないので大した興味もなかった有機太陽電池のセッションをうつらうつら聞いていた。
学会のプログラムにwifi使えますって書いてあったからおって思ってたら、(ただし1室に限る)で(゚Д゚)ハァ?ってなった。
しかたがないのでインターネッツリーチャブルマンになりにホテル(全室wifi完備)にチェックインしたら、輻輳してるのか知らんが繋がらなかった(何個もあるルータのSSIDに特に考えずに単一のを振ってたから?)
仕方なく駅前にあったヨドバシカメラでUSB給電の小型無線LANルータを買った。
インターネッツにつながるようになったので札幌、ラーメンで検索、検索ぅしたら、ラーメン共和国の白樺山荘さんが美味しそうだったので行って、みそチャーシューめん(980円)と山形だしのかけ丼(250円)を頂いた。
腹ごなしに駅の南側を散歩してたら、よさ気なイタリアンダイニングと大将がいる寿司屋があったので、かけ丼を食べてなかったら危なかった(´・ω:;.:...
ホテルに帰ってサッポロクラシックを飲みながらこれを投稿してる。
RasbPiにminidlnaを入れてメディアサーバーにする
MiniDLNA?
ReadyMedia (formerly known as MiniDLNA) is a simple media server software, with the aim of being fully compliant with DLNA/UPnP-AV clients. It is developed by a NETGEAR employee for the ReadyNAS product line.
It is not in any way endorsed by the Digital Living Network Alliance®.
SourceForge見ても最終更新日が14/08/26だしシンプルで良さそう(小並感
install
sudo apt-get install minidlna
config
/etc/minidlna.conf media_dir={{サーブしたいファイルがあるフォルダ}}
これだけ書いておく。
register
sudo minidlna -R
するとdbにファイルを登録する。
start
sudo service minidlna start
firewall
もしファイアウォールを利用しているなら8200番を開けておく。
golangでpipeするときのpattern
元ネタ
Go Concurrency Patterns: Pipelines and cancellation
読んでいて、このパターン使えばよかったのかという気づきがあったので内容を抜粋してメモする。
channelの基礎の基礎
channelを使って送信、受信したい時は、それぞれch <-, <- chと書けば良い
ch <- x //xをchに送信 <- ch //chから受信 x := <- ch //chから受信した内容をxに代入
channelからいくつの値が送信されるのかが分かっているのならば、この受信演算子を用いることもできなくもない
for i := 1; i < 4; i++ { fmt.Println(i, "th value is ", <-ch) // channelから3回受信する }
rangeとclose
channelをrangeで回すことによってchannelからの受信を簡単にすることができる。
for i := range ch { process(i) }
また、channelをcloseすることでrangeのイテレーションを止めることができる。送信するべきデータを送り終えたり受信側のchannelがcloseした時に、送信側のchannelをcloseすることで処理の終了を伝搬させることができる。
というか、rangeで回すときはcloseしなければ恐らくdeadlockして怒られる。みんな経験あるよね?(震え声
途中終了
rangeとcloseを用いることで処理の終了を伝搬させることができるが、これでは正規に送信が終わるまで、処理を途中で止めることができない。
途中で処理を終了したいときは、途中で処理を終了するためのchannelを新たに作る。このchannelを引数として渡すことで、関数の外から処理を終了させることができるようになる。また、この新たに作ったchannelとそれまで使っていたchannelのどちらからも受信できるように、select構文を用いる。
go func() { defer close(out) for n := range in { select { case out <- n * n: case <-done: // doneから受信したら即座に処理を終了する return } } }()
goroutineの生やし方
func processX(done <-chan struct{}, in <-chan <T>) <-chan <T> { out := make(chan <T>) go func() { defer close(out) for n := range in { select { case out <- processX_(n): case <-done: return } } }() return out }
こんなものが載ってた。<T>は何か知らんが型名
言葉にすると、関数の最初で出力channelを作って、goroutineな無名関数の中で実際の処理を行い、返り値は出力channelってパターン。
むっちゃpipeって感じがして、とりあえずこれを知っておけばgolangでできることがかなり増えそうだと思った。
最後に
golangのgoroutine周りあまり上手く使えていないので、誰かいいチュートリアル教えてください。なんでもしますから
触れなかったこと
- channelのbuffer
- runtime.GOMAXPROCS
golangで、実行ファイルがあるディレクトリに移動する
すごくテキトウな目的用のアプリケーションの場合、バイナリと同じ場所に設定ファイル置いておけばいいやーってなるのだけれど、そんな時どうするか
コード
package main import ( "fmt" "os" "path" ) func main() { dir := path.Dir(os.Args[0]) fmt.Println(dir) os.Chdir(dir) }
golangでもふぁぼ爆したい
anacondaのgodochttp://godoc.org/github.com/ChimeraCoder/anaconda
WaitGroupとanacondaでurl.Valuesをどう使えばいいか知れて良かった(konami
golangでスライスのdeep copy
結局http://blog.golang.org/go-slices-usage-and-internalsこれ読んだほうが早いのだけれど
package main
import (
"fmt"
)
func main() {
s := []int{1, 2, 3, 4, 5}
s_ := s[3:5]
s__ := make([]int, cap(s))
copy(s__, s)
fmt.Println(s, s_) // [1 2 3 4 5] [4 5]
s[4] = 1
fmt.Println(s, s_, s__) // [1 2 3 4 1] [4 1] [1 2 3 4 5]
}