2018年振り返り

今年の抱負は無事達成しなかった。
去年出したアプリの広告料がお小遣い程度に入ってきてるから微妙に達成してるのかもしれない。

転職したら所定労働時間が1時間増えて、そしたら首ヘルニアによる様々がめちゃくちゃに悪化して半年以上退勤したらベッドに横たわって何もしない日々が続いてた。
8時間働くの諦めたら徐々に回復して、今はよっぽど調子悪くなければ起きてる間は椅子に座ってられるくらいになった。

健康面は、健康診断的には問題なかったけど、膝が壊れつつあるので少しずつ筋肉をつけて崩壊を遅らせたいという感じになってる。

去年に引き続き、VCつないでゲームすることが多くてとても楽しくすごせた。
今はちょうどいいゲームやってないんだけど、またなんか出たら遊んでくれという気持ち。

今年お世話になった方々や仲良くしてくださった方々ありがとうございました。来年もよろしければよろしくお願いします。

2018年買ってよかったものまとめ

首コリ肩コリに悩んでる人は是非って感じのやつ。

発売開始してすぐ存在知ってたんだけど、刺激無いのに効くとかPanasonic製と言えどそんなことは……って感じで買わなかったんだけど、首肩がつらすぎて藁にもすがる思いで買ってみたらめっちゃ効いた。

初めて付けたとき血が流れてる〜って感じですごかった。

僕は4個入りの買ったんだけど、2個入りの方が手出しやすいかなって思って2個入りのを貼ってる。慢性的な首コリ肩コリに悩んでいてPanasonicを信用出来るなら4個入り買っちゃっても良さそう。

腰にも効果あるらしいんだけど、腰には使ってないので不明。夏に買ったので、冬は楽にすごせるといいな〜って思ってる。

今年新規に読み始めた漫画の中で一番おもしろい。

主人公の女の子と、「青野くん」という幽霊とのラブストーリーという感じなので、幽霊とか苦手じゃない人は2巻まで読んで欲しい。

あらすじとか何も見ないで読み始めて欲しい。

オートロック無い家に引っ越したら宗教やらセールスやらが休日になると必ず来るみたいな感じだったので、試しに買ってみた。

めっちゃ効果あるっぽくて貼って以来1回しかセールス来てない。

チラシ・勧誘印刷物の無断投函は一切お断り! 高耐候性ステッカー 30X150mm ヨコ型

チラシのやつもおすすめ。

チラシのやつ3年くらい前の家に貼ってたけど、きれいに剥がれたので賃貸でも安心して使える。

入居時に配置されてたやつが汚かったので買った。

プラスチック製のに比べてステンレスのほうが傷付きにくいので、長く清潔に使えるかなと思ってこれにした。

排水口に置いとくだけでぬめりが付きにくくなるやつ。 掃除の頻度下げても大丈夫になってよかった。

3Lの酒瓶が家にあるのけっこう引くけど、これと炭酸水を買っておけばコンビニでビール買うより安くシュワシュワしたお酒が飲めるので良かった。

僕は750mlの瓶に移し替えて飲んでた。瓶を冷凍庫に入れて、炭酸水はチルドルームに入れておけば氷無しでヒエヒエのハイボールが飲める。 氷無しでヒエヒエのハイボールが飲みたい理由は知覚過敏で氷あると辛いからです。

エルゴトロン LX デスクマウント デュアルモニターアーム 縦/横型 45-248-026

エルゴトロン LX デスクマウント デュアルモニターアーム 縦/横型 45-248-026

モニターをめっちゃいい感じに設定できるので首肩の負担が減ってめっちゃいい買い物だったと思ってる。

これを買う前はパイプみたいな安いモニタアーム使ってたんだけど、一番高く設置しても、姿勢を正すと高さが足りなくて微妙だった。探した限りだと、パイプみたいなモニタアームだとめちゃ長いポール買えば高く設置できるみたいな感じで、邪魔だろうしで困ってた。

このアームはだいぶ高くまで設定できるので、良い姿勢でディスプレイ見られるようになった。

それと、設置したあとに細かく位置とか調整したり、椅子のリクライニングに合わせて大きく動かせるのも良い。

けっこうお高いので、アーム1本の長身ポールのやつ買ってみて良さげだったらアーム買い足すとかでも良さそう?だけどどっちにしても高いな。

PS4のHDDをSSDに換えた。

ロードが早くなるので良いんだけど、ケチらずに1TBとか2TBのやつ買えばよかったって思った。

使ってるだけでマウスが充電されるマウスパッド。対応機種のマウスを充電してくれる。

おすすめ度はまあまあ高いけど、値段も高いのでそこのバランス考えるとそこまでおすすめではないけどおすすめ。

ヘッドホンは大学だか高校のときに買ったやつをずっと使ってるんだけど、イヤーパッドがヘタヘタになっていたので、なんとなく思い立って買ったら快適になった。

買って以来交換してなくて今思うとマジで汚えって感じするので年1くらいで換えようと思った。

結構いろんなヘッドホンと互換あるイヤーパッドあるみたいなので、どうでしょう。

nasneをやっと買った。

便利ですよね。

脇やら股やらの毛をトリミングすると夏を快適に過ごせるので良い。

前使ってた安いやつと比べるとモーターが強くてめちゃ快適に毛を刈れる。

ELECOM 表示スペース付結束バンド LD-ST100WH20

ELECOM 表示スペース付結束バンド LD-ST100WH20

コンセント抜き差しするときにどのコンセントなのか分かりやすくなって良かった。

椅子とか机とか様々なネジ締めるのに良い。 組み立て時に付いてたレンチ取っておかなくてもこれあれば足りて良かった。


エルゴトロンのモニタアームとコリコランが今年のベスト2なんだけど、これ上に2つ持ってくと高え!ってなって最後まで見てもらえなくなるかな……って思って分けた。

分けたものの、今年は全体的にお高めのやつが多いので金をいっぱい使ったんだろうなという感じがする。

前の年で書いたやつは今年もおすすめでも省略してる。

6月6日は誕生日だった。

去年は歳を重ねたことについて、なんかいろいろと思うところあったんだけど、ここ数ヶ月でなんか公私共にいろいろとあって何も思うところがなかった。なんか脳みそが働かない感じがして、現在のこととか将来のこととか全然考えなかった。脳みそが働かない感じがするのは、ぐぐったところストレス/初期の鬱/脱水が原因であるという情報が出てきて、どれも心当たりある〜って感じだった。

なんかダラダラと書き始めてたんだけど、ネガティブな内容しか出てこねえわ!つって消した。

最近はFortniteとDbDをPS4でやってる。LoLSplatoon2にハマってた時期に一切やってなかったド下手だったのがドクソ下手になってARAMを時々やるくらいになってしまった。それ以外の時間というかゲームやる時間の倍くらいは首痛くて横たわってる。横たわってるときに本でも読みたいんだけど、首が終わってると全く頭に入らないのでどうにかなってほしい。首痛いのは、病院変えたら筋弛緩薬とかボルタレンとかを貰えて、だいぶましになったので薬はすごい。

今年のメインミッションは「MBPを買い換える」で、サブミッションは「ゲーミングPCを買う」。

そんな感じで誕生日プレゼントください!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

http://amzn.asia/fTKvuY0

Swift で値クラス的なのを実現したい!

Swift で API/DB から取得した値の ID 型指定はたぶん通常 StringInt などを指定するのが一般的なのかな?と思う。 メソッド等に ID を渡すときに、プリミティブ型だと渡したい ID を取り違えたときにスッとコンパイル通ってしまって困る。

Scala には値クラスっていうのが存在して、ある型に別名を付けて、それと区別するみたいなことが出来る(理解が曖昧かつ雑)。

値クラスと汎用トレイト | Scala Documentation

要は、以下のようなことがしたい。

struct UserID: AnyVal {
  let value: String
}
struct MediaID: AnyVal {
  let value: String
}

var userID = "1234"
let mediaID = "4321"

// ↓ここでコンパイルエラーが出て欲しい
userID = mediaID

なんかそういうことするの難しそうで、とりあえずメソッド等の定義に使えればいいやということで、typealias でお茶を濁していた。

だけどメソッドの引数に指定した UserID にミスって MediaID を渡してしまってもコンパイル通ってしまう。 テストも人間が書くものなので100%信用できるわけではない。

ということで、いろいろ調べてそれっぽいことが出来そうなコードを書いてみた。 さっきそれっぽいところまで行ったので、まだ開発中のアプリで使ったりはしていない。

struct UserID: ExpressibleByStringLiteral, CustomStringConvertible, CustomDebugStringConvertible, RawRepresentable, Hashable, Equatable, Codable {
    private(set) var rawValue: String

    var description: String { return rawValue }
    var debugDescription: String { return "\(String(describing: type(of: self)))(\(rawValue))" }

    init(stringLiteral value: String) {
        self.rawValue = value
    }

    init?(rawValue: String) {
        self.rawValue = rawValue
    }
}

struct MediaID: ExpressibleByStringLiteral, CustomStringConvertible, CustomDebugStringConvertible, RawRepresentable, Hashable, Equatable, Codable {
    private(set) var rawValue: String

    var description: String { return rawValue }
    var debugDescription: String { return "\(String(describing: type(of: self)))(\(rawValue))" }

    init(stringLiteral value: String) {
        self.rawValue = value
    }

    init?(rawValue: String) {
        self.rawValue = rawValue
    }
}

var userID: UserID = "1"
print(userID) // => 1

userID = "2"
print(userID) // => 2
print(userID.debugDescription) // => UserID(2)

// ↓Error🎉
// let mediaID: MediaID = "2"
// userID = mediaID

print(userID == "0") // => false
print(userID == "1") // => false
print(userID == "2") // => true

let string: String = userID.rawValue
print(string) // => 2

// Equatable 追加すれば以下も可能
// print(userID == UserID(rawValue: "2")) // => true

一応出来たぞ〜〜〜って感じでこれ以上書くことが無いんだけど、いい方法知ってたりしたら教えてください!!!!!!!!!!!!!!!!!!!!!!

エアギア再読した

エアギアを土日で1巻から最終巻まで再読した。

化物語のコミカライズを大暮維人が担当するってことで Twitter でもフォローしてる人たちが色々言っていた。

大暮維人の作品はどちらかと言うと「面白くない」とか「セリフ付きの画集」とか言う人の方が多いように見える。

正直、僕も「エアギアや天上天下を通しで見て面白いか」というところは自信を持って面白いと言えなくて、連載当時もあんま深く考えずに刹那的に楽しんでいた。カズかっけ〜とか俵文七かっけ〜〜とか。

連載でエアギア最終話読んだときは「よく分からん」って感想で、コミック最終巻でも「よく分からんけどエモい」みたいな感想だったことをさっき思い出した。

エアギアの連載終わってから5年以上経って、その後も色々漫画やらなんやらを嗜んで、多少目が肥えた(かもしれない)今読んだらどう感じるんだろう?もしかしたら全然面白くないじゃんってなったりするのかな?って思って読んでみることにした。

再読前は「俺は好きだけど、もし人に勧めるとしたらベヒーモス編まで」って感じで、再読後は「俺はめちゃくちゃ好きだけど、もし人に勧めるとしたらやっぱりベヒーモス編までかな」って感じだった。画集として読むなら天上天下のほうが描き方をいろいろ試している様子があって面白いと思う。

たぶんコミックだと10巻くらいまで。それ以降は、人を選ぶと思う。

以下はネタバレとかあるかもしれない感想文。

続きを読む

iOS アプリの言語設定をコードで変える

調べてる途中で必要なくなって中途半端な感じだけど備忘録的な。

システムの言語設定とかが UserDefaults に渡されて、NSLocalizedString とかはそれを見て返す言語を変えてるらしかった。 以下のように言語とかロケール系の設定を上書きすると、次回起動時から上書きした設定が使用される。 3つ上書きしてるけど、最低限どれを変えれば良いのかとかは調べてない。 userDefaults.synchronize() した後に NSLocalizedString 読んでも上書き前のものが返ってきてた。

let userDefaults = UserDefaults.standard
let identifier = "ja-JP"
userDefaults.set([identifier], forKey: "AppleLanguages")
userDefaults.set([identifier], forKey: "NSLanguages")
userDefaults.set(identifier, forKey: "AppleLocale")
userDefaults.synchronize()

参考

GitHub - trailblazr/LocaleOverrider: Demonstrator how to override the apps locale in case you need to provide fast Locale switching.

2017年振り返り

今年の抱負は無事達成しなかった。

今年は転職したくらいしかこれと言ったイベントが無かった気がする。

あと筋トレを習慣付けた。

そろそろ健康に気をつけたい気がする。

今年お世話になった方々や仲良くしてくださった方々ありがとうございました。来年もよろしければよろしくお願いします。