tech::hexagram

personal note for technical issue.

map(&:to_i)すると文字列は0として評価される

[4] pry(main)> array = Array[1,2,3,'user_id']
=> [1, 2, 3, "user_id"]
[8] pry(main)> sorted_array = array.map(&:to_i)
=> [1, 2, 3, 0]
[9] pry(main)> sorted_array = array.map(&:to_i).uniq
=> [1, 2, 3, 0]
[10] pry(main)> sorted_array = array.map(&:to_i).uniq.select{ |i| i > 0 }
=> [1, 2, 3]
[11] pry(main)> sorted_array = array.map(&:to_i).uniq.select{ |i| i > 0 }.sort
=> [1, 2, 3]

Objective-Cについて、後で調べたいこと

不思議な挙動だなと思ったことがあったので書いておく。

現象

@implementation ListClass

- (NSInteger)indexOfObjectWithBaseClass:(BaseClass *)baseClass
{
    NSUInteger index = [self.list indexOfObject:baseClass];
    return (NSInteger)index;
}

@end


@interface extendClass : baseClass
@end

こういった状態になっている時に、 ListClass#indexOfObjectWithBaseClassextendClassを引数として渡しても、内部ではextendClassとして解釈されるらしい。

調査結果

あとで書く

まとめ

あとで書く

2015年GWまとめ

今日でGWが終わるのでまとめておく。

今年は5/7(木)、5/8(金)を有給休暇でお休みしたので9連休。 連休をとったものの、関東圏内から出ることはなかったが飲み遊び学び色々と充実していた。

買った

ロードバイクを買いました。5/4に納車。 車種はcannondale SuperSix Evo 105。

http://www.cannondale.co.jp/jpn_jp/2015/bikes/road/elite-road/supersix-evo/supersix-evo-5-105www.cannondale.co.jp

パーツや工具なども揃えて大体1ヶ月分の給料くらいの大きな買い物をしたけど、周りでも乗っている人が多いしこれから買った額以上の体験ができそうで楽しみ。

初日は羽田空港まで試運転をした後帰宅。今日は赤レンガ倉庫に行ってみた。 サイクルコンピュータで図ると平地でも信号待ちで止められない限りは30km/hくらいは普通に出るし、少し下り坂が入ると40km/h手前くらい出るからもう怖い。

安全運転を意識しつつ、距離を伸ばしていけたらと思う。

作った

いつもの通り1週間分。先週の土曜と今週の土曜作った分を上げておく。

5/2

f:id:manji602:20150510224959j:plain

f:id:manji602:20150510225009j:plain

  • かぼちゃの煮っ転がし
    • 冷凍カボチャを煮るだけのいつものやつ
  • なすとじゃがいもと玉ねぎのカレー
  • なすの揚げ浸し
  • 大根の味噌汁
    • 今使っている味噌が大根を具にするとすごく美味しくできるので作ってみた。細切りがなかなかうまくできなくて適当に切ったら見栄えが微妙なことに…
5/9

f:id:manji602:20150510224905j:plain

f:id:manji602:20150510224912j:plain

  • かぼちゃの煮っ転がし
    • 冷凍カボチャを煮るだけのいつものやつ
  • 豚汁
    • 豚コマと豚汁の水煮、しいたけのあまりも入れて少しアレンジ
  • ほうれん草のおかか和え
  • ネギとしいたけと豚肉の生姜焼き
    • 本当は玉ねぎを使いたかったけどちょうどいい量で売ってなかったので適当に入れてみた。まぁまぁ美味かった

食べた

f:id:manji602:20150510224948j:plain

5/3にすき焼きを食べに。定期的に自分が幹事をして肉を食べる集まりがあり、富士見台の牛蔵という店が最近のもっぱらのチョイスとなっている。

遊んだ

f:id:manji602:20150510224930j:plain

5/5は同期とゲーセンに遊びに行った後焼き肉を食べ、そのまま同期宅でリアル猫集め。動物慣れないので手懐けるのが大変だった。

f:id:manji602:20150510224857j:plain

買ったチャリンコで横浜赤レンガ倉庫へ。海沿いを涼しい気候の中走るのは快適だった。

あとはラブライブ1期・2期一挙放送を一挙に見て目から汗をかいたり。

学んだ

  • 詳解Objective-C2.0を読んだ

    • 第10章くらいまで。流し読みしつつポイントをまとめている最中。半分くらいまでは読み進めることが出来たのでまた折を見て読みたい。
  • Rails Tutorialを進めた

    • 第7章まで。ユーザー登録まで出来たので次週以降はサインイン・サインアウトをやりつつ、会社の勉強会の課題のリポジトリも作り始めるつもり。

振り返ってみると結構充実してたんでいい息抜きになって良かった。 来週からまた仕事復帰なので頑張ります。

LINE Developer Dayに参加してきた

最近あまりカンファレンスに行けてなかったものの、渋谷開催で近かったのもあって久しぶりに参加してきた。

ラインナップとしては以下のとおり。細かいスライドの内容はgistに張ってあるのでそちらを参照してもらえると良いかと。

A-1 オープニング

10:30-10:40

A-2 LINE Global Cluture

10:40-11:00

A-3 LINE Messenger for the World

11:00-11:40

雑感

  • グローバル化を推し進める上で通信環境の差異を現地に足を運んで確かめるというのはすごく説得力があると思った。
  • レビューの星の数や本文を形態素解析し、モニタリングできるシステムを内製で作っているのでユーザーの声を拾いやすくする仕組みが整っているなと思った。
    • 弊社でもやりたい。
  • パキスタンからの通話のうち半数がサウジアラビアへの通話、1/4がパキスタン国内への通話というのが興味深かった。

A-4 LINE Platform Development Chronicle

11:50-12:30

雑感

  • サービスが拡大するにつれバックエンドの構成に問題が生じ、その度にスケールしやすく、レスポンスタイムが高速になるように最適化を行っていた。
  • マイクロサービスを作るときは短期間でiterationを回し、目的を達成したら縮小 or 解散。そのメンバー構成も組織図にとらわれないものというのはなかなか新鮮だった。

A-5 HBaseとRedisを使った100億超/日 メッセージを処理するLINEのストレージ

13:30-14:10

雑感

  • 専門用語が多くなかなか難しいセッションだったものの、HBaseの特性を活かしてテーブル設計しないと膨大なアクセスをさばくのは難しいことがわかった。テーブル設計は重要

B-3 グローバルなネットワーク環境と複数OSに対応するためのLINE Game Client Platform開発戦略

14:20-15:00

雑感

  • 通貨単位が大幅に違うと桁あふれが起きてしまうというのはなかなか危うい問題だと思った。

A-7 巨大化するスタンプ・着せかえ販売システム、その危機と復活の記録

15:10-15:50

雑感

  • ショップサービスの利用者数はLINEのユーザー x ショップサービスを利用する割合。このパラメータが短期的・長期的にどう変わるかを考えることでスケーラビリティを意識したサービス運用ができる。

B-5 ビッグデータを活用するための分析プラットフォーム 〜データ集計した先に求められる分析技術〜

16:00-16:40

雑感

  • エンジニア向けとプランナー向けでデータ分析のシステムを分けているというのが印象的だった。
  • サービスが拡大・グローバル化が進むに連れKPIが増えすぎて追えなくなる -> 自動化は避けては通れない道だと感じた。
    • 弊社も分析ツールがあるが、項目が多すぎて見切れていないのでは。
  • サービスが長寿化・多様化するに連れ訳の分からないフラグが増えまくる -> 共感出来すぎてヤバかった。

B-6 ベイズ推定とDeep Learningを使用したレコメンドエンジン開発

16:50-17:30

雑感

  • 望ましいレコメンド結果を手に入れるにはある程度の仮説や、パラメータのチューニングが必要。
    • 研究として扱うのであればそこもセンシティブに考える必要があったが、企業としてやっていくにはこれで十分なのでは。
  • システム構成が、インプットとロジックを変えるだけで様々なレコメンドに使えるというのは素晴らしいと思った。
  • 購買履歴がなくても画像の類似度でレコメンドができるというのは興味深かった。

Xcode6でオレオレライブラリをCocoapods経由で入れるときの注意事項

OSはMavericks。

pod spec lintでエラーが出ていないか確認する

$ pod spec lint targetfile.podspec

これを実行した際に、ERRORが出ている部分は修正する必要がある。自分は以下のエラーが出ていたので修正した。

Loading subst-jis...done
                    file.
    - ERROR | [name] The name of a spec should not contain whitespace.
    - WARN  | [source] Git sources should specify a tag.
    - ERROR | [iOS] [xcodebuild]  xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
    - WARN  | [iOS] Unable to find a license file

Analyzed 1 podspec.
  • ERROR | [name] The name of a spec should not contain whitespace.

    • これはpodspecのnameパラメータにスペースが入っていたため削除。
  • ERROR | [iOS] [xcodebuild] xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

おそらく2番目のエラーに起因すると思うが、Undefined symbols for architecture i386: "_OBJC_CLASS_ というエラーがコンパイル時に消えない場合はpod spec lintで確認すると良さそう。

このlinker errorに数週間悩まされていたので解決してよかった。。

今回、Nend SDKをcocoapods化したのでその際に見ていたサイトもリンクしておく。