vortispy's diary

ニートです

朝寝がしたい

再び労働者となって4ヶ月ほど経った。今回はなんと週に5日、一日八時間も労働をしている。
毎日労働するのはつらい。内容に関係なくただ労働するのが辛い。起きる予定を立てて眠るのは辛い。
電車で運ばれていると同じような労働者を目にする。大抵は私より年上でおそらく何年も労働を続けている。そんな人を見ていると自分とはまるで違う生き物を見ている気分になる。続けていれば慣れるものなのか。とてもそうは思えない。
確か東京に引っ越すことを決めたのは金のためだったはずだが、月に17万円程度ではとてもその目的を達成できたとはいえない。ただただ、時間が過ぎていくのを感じている。なぜ金が必要だったのかはもうわからなくなった。
金のことばかり考えている。数ヶ月は生きていけるだけの金はあるのでいつでも仕事はやめられる。しかし、それが長く続かないこともわかっている。だからその先に行くための金のことを考えている。なにか具体的な手段があるわけではない。「足りない」ことを確認しているだけだ。
労働に適応できないことがはっきりとわかった。早ければ冬が来る前にやめる。遅くとも春が来る前だ。

「3D ドットで遊ぼう! ~はじめてのモデリング編~」の感想的な

3Dドットで遊ぼう!〜はじめてのモデリング編〜 - 味噌煮研究所公式ショップ - BOOTH(同人誌通販・ダウンロード)
技術書典2でなんとなく目に入ったので買ってみた。ダウンロード版が上のリンク先から買えるっぽい。
MagicVoxelというソフトで3Dドットのモデルを作るという話。最低限の機能を説明して簡単なモデルを作ったりする。チュートリアルにはいい感じ。
3Dモデリングにそれほど興味があったわけではないけれど、ちょっとおもしろそうだったのでさらっと読んでやってみた。
f:id:vortispy:20170411210419p:plain
題材はキラキラ☆プリキュアアラモードのキュアホイップ。
Curewhip by vortispy - 3D model - Sketchfab
キラキラ☆プリキュアアラモード│キャラクター│キュアホイップ|朝日放送
髪の毛多すぎてつらかった。あんまり似てない気もするし、キュアハッピーと言われたらそんな風に見える。
これで2時間半くらい。形を作ってる最中は不安しかなかったけど、色を付けるといい感じになってきて楽しい。
MagicVoxelは無料で使えるけどソースコードは非公開のようだ。
似たようなのでgoxelというのがあった。こっちはGPLv3。
GitHub - guillaumechereau/goxel: Goxel: Free and Open Source 3D Voxel Editor
楽しめたので買ってよかった。

"Writing An Interpreter In Go"を読んだ

Writing An Interpreter In Go | Thorsten Ball
細かいことはよくわからんがとにかくインタプリタを作れる。
実際そういう内容である。字句解析、構文解析、評価、全部自分で実装する。一番わかりやすそうなやり方でやる。効率がどうのだとかめんどくさいことは気にしない。目的はインタプリタを作ることなんだからそれで良いのだ。だからといってソースが雑ってこともない。楽しい。
文章は英語だけど気にしないで良い。重要なことは全部ソースコード見ればわかるわかる。テストも書くし動けばオッケー。
そんなにGo言語詳しい必要もない。"A tour of Go"のBasicsとMethods and interfacesまでの内容がわかれば十分だ。Goroutineなんかは出てこない。
A Tour of Go
3章に入ると自作インタプリタが動き出してたまらん。なんか「うおー」ってなる。プログラミングはじめたときの気持ちをちょっと思い出す。これだよこれ。
色んな機能が足りてないのはわかる。ガベージコレクションは完全にGo言語に依存してるし、最適化なんて考えてない。それでもこの本が良いのは自分で「作れる」ということだ。なにか機能が欲しいなら自分で作れる。そういう気持ちになれるのが重要な気がする。
「知識は無いけどコンパイラつくってみたい」人にはおすすめだ。なにもわからないままでいるよりはちょっとだけでも理解できたほうがいい。なによりやっぱり楽しい。


ニートから低賃金労働者に

労働者となって3ヶ月が過ぎた。
3ヶ月前は出勤日の朝から少しの腹痛と吐き気があったが、今では制服に着替えるときに死にたくなる程度になった。悲しいことに労働に慣れてしまった。加えて、低賃金労働者であり続けるよりはもう少し収入の良い労働者になろう、という考えるようになった。前提として労働者であることを受け入れてしまった。
内容が辛いわけではない。蟹工船から程遠い、ただそこに存在することに賃金が発生する職だ。いわゆる「誰にでもできる仕事」である。それでもわずかな金銭のために首に縄をつけられ、自由を奪われるのはこの上なく悲しい。
週1日しか休みがない期間もしばらくあった。こうなると休日はさらに働かせるためのものであって、決して私のためにあるものではない。全ては雇用者の都合である。
出勤時に駅で電車を待っていると快速列車が目の前を通過する。幸いにも反対側の線路なので恨めしく眺めるだけである。この瞬間は少しだけ楽しい。
夜眠るときが悲しい。明日が来てしまう。明日を楽しみに生きていきたいわけではない、ただ安心して眠りたい。

労働に膝を屈することとなった

資本主義に敗北し、労働に従事することとなった。
最後に労働者だったのは2014年4月までであるから、無職期間は2年間にわたる。したがって、私は労働と2年間戦ったわけである。
今回は確かに私の負けである。だが、まだ1敗である。私と労働との闘争はどちらかが消滅するまで何度でも行われる。当然ながら私はまだ生きているし、戦いをやめるつもりは毛頭ない。
敗因は明確である。私の怠惰だ。2年の間に何かしら生活の糧、すなわち収入源を得ていれば結果は違っていたはずだ。「収入を得るための行動は労働ではないか?」という疑問はある。しかしながら、それは大事の前の小事であって、後の勝利を得るための意図的な敗北である。
原因があるなら対策を講じるだけである。それは簡単では無いがこのまま膝をついたまま生きるつもりはない。次は勝つ。

iOSアプリを作った覚え書き

Androidで作ったやつの移植
Androidアプリをつくった覚書 - vortispy's diary

StoryBoardで画面をつくる

ボタンのイベントで関数を動かすときは@IBAction
ラベルと変数を関連づけるのは@IBOutlet
をつかう。
そうするとStoryBoardのConnection inspectorに表示される。表示された関数か変数をマウスでドラッグして画面上の要素につなげると関連付けできる。

CocoaPodsでライブラリを管理

Podfileに必要なライブラリとバージョンを書けばインストールやアップデートを楽にできる

tableview

tableViewが表示されるとき最初に呼ばれるのはviewDidLoad。ここに初期化処理を書く。これは再度表示するときには実行されない。
それぞれのセルが表示されるときにtableView関数が呼ばれる。このなかで要素の初期化を行う。

アルバムから画像を取得する

imagePickerをつかう。UIImagePickerControllerDelegate, UINavigationControllerDelegateの継承が必要。

func addImage(){
        let imagePicker = UIImagePickerController()
        imagePicker.delegate = self
        imagePicker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
        presentViewController(imagePicker, animated: true, completion: nil)
}
    
func imagePickerController(picker: UIImagePickerController!, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]!) {
        //画像が選択されたときにする処理
        //処理終わり

        //この関数を呼ばないと画像選択画面からもどれない
        dismissViewControllerAnimated(true, completion: nil)
}
オプショナル

変数の型を宣言するときに"?"や"!"をつけることでその変数にnilが入る可能性を示す。

var foo: String? = "foo"// nilが入る可能性がある
var bar: String! = "bar"// 必ずどこかで初期化される
print(foo!)// 「nilではない」ことを"!"で示す必要がある
print(bar)// 宣言時に「どこかで初期化される」ことにしたので"!"が必要ない

Androidアプリをつくった覚書

アプリの概要

機能

boketeのようなアプリ。ユーザーがドヤ顔写真をアップロードしてその評価を競う。
必要なのはおよそ以下の機能

  • AWS S3へ画像のアップロード
  • Redisサーバへの登録
  • アプリでの評価をRedisサーバに反映する
  • 画像とその情報をアプリで取得する

画面の構成

一つの画面内にIMAGE LISTとRANKINGの二つのタブを表示する。それぞれのタブはリストでできている。
IMAGE LISTはリストの各要素に画像とその得点および評価ボタンを含む。
RANKINGは1位から10位までを表示し、各要素に画像、得点、順位を持つ。

やったことなど

ネットワーク通信はAsyncTaskを使う

Androidではメインスレッドで画像のアップロード、ダウンロード等の通信を行えない。なので通信を別スレッドで行うためにAsyncTaskを継承したクラスを実装しなければならない。とてもめんどくさい。それを楽にするためにAsyncTaskLoaderというのがあるらしいが使っていないので詳しくは知らない。
AsyncTaskと似たようやつでVolleyというのもあるらしい。
AsyncTaskを使った非同期処理のきほん | Developers.IO
ネットワーク通信用ライブラリVolleyを使いこなす | Tech Booster

リストビューのカスタマイズ

簡単なテキストだけのリストを作るならListViewとArrayAdapterをそのまま使えばよい。テキスト以外の要素をリストにするにはArrayAdapterを継承したクラスを実装する。最低限必要なのはgetViewだけなのでそれほど大変ではない。
現在はgetViewが呼ばれるたびに通信が発生する作りなので、最初に呼ばれたときのみ通信するようにすべきだ。
リストビューをカスタマイズする « Tech Booster
ArrayAdapterをつかったカスタムリスト - なか日記

タブの実装

ActionBarのタブナビゲーションを利用してタブを実装できる。これによりFragmentを切り替えれる。
アクションバーのタブ・ナビゲーション - Android 開発入門

Redis

今回はランキングを作りたかったのでSorted Setsを使った。ライブラリはJedis。

Github

とりあえずなんか実装するときはissueを作る。ブランチを作る。実装したらpull requestを送る。マージされたらissueを閉じる。
APIキーをうっかりプッシュしないように気をつける。