hiragram no blog

iOSとか

UIViewのアニメーション中にタップイベントが発生しなくてハマった自戒

起きたこと

  • UITableViewをスクロールしてると、たまに指が滑る(縦にスワイプしてもtableViewが追従してこない)ような違和感があった
  • 最近、UITableViewのセル内の画像をUIViewのtransitionWithViewを使ってフェードインさせるように改修してた
  • フェードインが怪しいと思ってdurationを10秒とかにして試してみたら案の定アニメーション中に画像を触ってもなにも反応しなかった
  • 直すぞ
  • 直らん

やったこと

UIResponder周りかな…?

もともとタッチの判定をUIResponderのtouchesBeganをオーバーライドしてやってたのでその辺から疑ってかかった。

確かにフェードインのアニメーション中に画像をタップしても、touchesBeganが呼ばれてない。

じゃーアニメーションしてる間のタップイベントはどこに通知されてるんだと思い子やら親やらいろいろ見たけどどこにも行ってないっぽい。

「こいつがイベントを受け取ってないなら、どっかで受け取ってるビューがいるはず」と思い込んでしまい、そいつを探しはじめてハマってしまった。

transitionWithViewからanimateWithDurationに変えてみる

結果同じ。

UIResponderじゃなくてUITapGestureRecognizer使ってみる

てっきりUIResponderが悪いと思っていたので、recognizer作ってイベント貼ってやれば通知来るだろうと思ったけど来なかった。これ結構がっくりきた。

UIViewAnimationOptionsのドキュメントもっかい見た

UIViewAnimationOptions ここ

struct UIViewAnimationOptions : OptionSetType {
    init(rawValue rawValue: UInt)
    static var LayoutSubviews: UIViewAnimationOptions { get }
    static var AllowUserInteraction: UIViewAnimationOptions { get } // <- あっ
    static var BeginFromCurrentState: UIViewAnimationOptions { get }
    static var Repeat: UIViewAnimationOptions { get }
    static var Autoreverse: UIViewAnimationOptions { get }
    static var OverrideInheritedDuration: UIViewAnimationOptions { get }
    static var OverrideInheritedCurve: UIViewAnimationOptions { get }
    static var AllowAnimatedContent: UIViewAnimationOptions { get }
    static var ShowHideTransitionViews: UIViewAnimationOptions { get }
    static var OverrideInheritedOptions: UIViewAnimationOptions { get }
    static var CurveEaseInOut: UIViewAnimationOptions { get }
    static var CurveEaseIn: UIViewAnimationOptions { get }
    static var CurveEaseOut: UIViewAnimationOptions { get }
    static var CurveLinear: UIViewAnimationOptions { get }
    static var TransitionNone: UIViewAnimationOptions { get }
    static var TransitionFlipFromLeft: UIViewAnimationOptions { get }
    static var TransitionFlipFromRight: UIViewAnimationOptions { get }
    static var TransitionCurlUp: UIViewAnimationOptions { get }
    static var TransitionCurlDown: UIViewAnimationOptions { get }
    static var TransitionCrossDissolve: UIViewAnimationOptions { get }
    static var TransitionFlipFromTop: UIViewAnimationOptions { get }
    static var TransitionFlipFromBottom: UIViewAnimationOptions { get }
}

あっ

UIView.transitionWithView(self, duration: 1.0, 
  options: [.TransitionCrossDissolve, .AllowUserInteraction], 
  animations: { () -> Void in
    self.alpha = 1
  },
  completion: nil
)

これでいけた(.TransitionCrossDissolveは元から渡してた)

反省

ドキュメントを読みましょう

メソッドにoptionとか渡してたらまずそこを見ましょう

反省します。

さよなら2015年

あんまりテレビが面白く無いのでTwitterの全ツイート履歴を見ながら1年を振り返ってみる。

ちなみに月ごとのツイート数はこんな感じ。

f:id:hiragram:20151231200646p:plain

←1月           12月→

1月

初めて自宅にサーバーを置いた。

アニメ録画環境を作った。

2月

21歳になったけどTwitterで全く言及してなかった。

仕事の表目標とプライベートの裏目標を立ててたんだけど、どっちも未達のまま22歳になりそう。

3月

Swift書き始めた。

仕事もほとんどPHPからObjective-Cに変わってたと思う。

4月

初めてクラブイベントに行った。

秋葉原のMOGRAに連れて行ってもらった。

5月

Twitter Flock Tokyoに参加。

初めてデベロッパーカンファレンスみたいなのに参加した。

Twitterの財力にびびった。

6月

社員旅行で北海道に行った。

今回は救急搬送されなかった。

7月

自作のSwift製UIライブラリをGitHubに公開したりした。

8月

初めてYAPC::Asiaに参加した。

9月

一般道で東京から仙台までドライブした。

10時間かかった。

もともとご飯たべる予定で集まったメンバーでいきなり頭悪い旅行をしてしまったけど楽しかった。

10月

デレステのスクショ解析するアプリを作り始めた。

まだ完成してない。

11月

ついにCharlotteを見た。はまった。

12月

港区から埼玉に引っ越した。

家賃が4万さがった。

総括

正直上半期の出来事は全然覚えてないというか、記憶に残るような出来事が全然なかった気がする。 エンジニアとしては、初めてライブラリをOSSにしたり、外部の勉強会とかカンファレンスとかに行きまくったりして、インターネットぽいエンジニアにつま先浸かった感じなので、来年はどっぷり浸かれるようにがんばりたい。

2016年の抱負みたいなのも考えてるけど、それは年明けにでもまとめようと思う。

僕の中のすてにゃん

僕とすてにゃん

この記事は、すてにゃん Advent Calendar 5日目 の記事です。すてにゃんまじごめん。

みなさんはすてにゃんを知っていますか?

すてにゃんというのは猫のことなんですが、僕は最初プログラマの人間だと思っていました。

今日は僕の中のすてにゃんの印象の変遷をつらつらと書いていこうと思います。

すてにゃんを知った日

これからのエンジニアとしての自分 - すてにゃんのガチ勢日記

確かこの記事だったと思う。当時はブログの名前が違ったような。

Twitterに流れてきたのをみてたまたま読んで、僕と同い年(か1個違い?)であること、帰国子女っぽいこと、文章を書くのが上手いことなどがわかった。

あと、

開発が終了するのはユーザーが完全に満足したときです

このフレーズが激刺さりしたのを覚えています。

「アメリカに留学してるめっちゃ頭いい人」という印象がこの時形成されました。

Twitterフォローしたのはこの時?あんま覚えてない。

すてにゃんと会った日

すてにゃんとTwitterで繋がって数ヶ月、YAPC::Asia Tokyo 2015が開催され、すてにゃんと初邂逅を果たすチャンスがやってきた。

一番でかいホールで、遠目にすてにゃんの姿を確認。

ぼく「つよそう」

なんだろう。何を喋ったかあまり覚えてないけど、「はてな強い」っていう話をした気がする。気がする。

すてにゃんは背がでかい。

今の僕の中のすてにゃん

すてにゃんははてにゃんで、外から見てもとがった人の多いはてな勢のなかでも一際異彩を放っている感じがします。

個人的にちょろっとScalaに興味がでてきたお年ごろ(主に関数型プログラミングの文脈で)なので、Scalaにゃんにいろいろ教えてもらえたらなと思ってます。

開発が終了するのはユーザーが完全に満足したときです

開発が終了するのはユーザーが完全に満足したときです

開発が終了するのはユーザーが完全に満足したときです

これ強烈すぎん?

超カッコええやんな

なんかアドベントカレンダーめっちゃ遅れたのもあってめっちゃすてにゃんヨイショになってしまった感あるけど堪忍な

ユーザーが満足してどっか行っちゃわないように、常にワクワクを提供できるエンジニアになりたいなあと、自分を振り返り見つめるきっかけになったフレーズでした。

なんか勉強会とかで会う機会あったらまた挨拶したいぞ〜

よろしゅうな〜

近況(8月~)

仕事がいろいろ変わって(not転職)、SwiftiOSアプリを作り始めました。これまでは既存のObjcなアプリをメンテナンス&機能追加していくような感じでしたが、今度はゼロから全部をひとりで。めちゃめちゃ周りの力を借りながらやってます。

Apple Watch買いました。良いです。1日だけ裸で使ったけど、普段腕時計をしないのでうっかりぶつけまくりでやばいと思ったのでSpigenのGショックみたいなケースを買いました。画面保護フィルムもついてるし現状良いです。

facebook辞めたい。友達かもみたいなところに弟が出てきたし。Twitter黒歴史クリーナーみたいに過去の投稿をゴリゴリ消すスクリプトを書いたりしたんだけど、どうやら投稿したアプリからじゃないと消せないっぽい。やめて欲しい。

引っ越しを迷っている。今年の年末で部屋が更新になるので、更新するかどうか。もうちょっと都心から離れて、車買いたい。けど今のところ普通に気に入ってる。うーむ。

そんなかんじ。

YAPC::Asia2015のトートバッグに書いてあるコードをいじいじする #yapcasia

どうもどうも。1日に2度ブログを書くのは初めてです。

YAPC::Asia 2015のお土産でみんなもらったトートバッグにPerlのprint文が書いてありますよね?

f:id:hiragram:20150820224732j:plain

おみやげの内容については、さっき僕が書いた記事を御覧ください。

YAPC::Asia 2015のお土産を紹介するぞー #yapcasia

YAPCにいる最強のPerlプログラマのみなさんはおそらく実行するまでもなく出力を読み取ることができたんだろうなあと思うんですが、僕はPerl力が無いので得体のしれないコードを無防備に実行してしまいました。すみません。

さて、トートバッグに書いてあったコードはこんな感じです。

print 115.117.112.112.111.
114.116.101.100.32.98.
121.32.76.105.118.101.
115.101.110.115.101.32.
73.110.99.46.10;

これらのピリオドで連結された数字一つ一つがアスキーコードで、それぞれがアルファベット1文字に対応しています。

アスキーコードについてはWikipediaを。

ASCII - Wikipedia

ほかにも色々試してみた。

#!/usr/bin/perl

use strict;
use warnings;

print 115.117; # -> 115.117
print "\n";

print 115.117.112.
112.111.
114.116.101.100; # -> sup112.111rted
print "\n";

print 115 . 117 . 112 . 112 . 111; # -> 115117112112111
print "\n";

print 192.168.0.1; # -> �
print "\n";

結合する数字が2つだと小数点、スペースが入ると文字列結合とみなされる。

以下のコードで任意の文字列が表示されるYAPCトートバッグが作れるはずです。

#!/usr/bin/perl

use strict;
use warnings;

my $message = $ARGV[0];
my @ascii = unpack("C*", $message);
print "print ". join('.', @ascii). ";\n";

引数に文字列を渡します。

$ perl yapc.pl "にっこにっこにー♪
あなたのハートににこにこにー♪
笑顔届ける矢澤にこにこー♪
にこにーって覚えてラブにこー♪"
print 227.129.171.227.129.163.227.129.147.227.129.171.227.129.163.227.129.147.227.129.171.227.131.188.226.153.170.10.227.129.130.227.129.170.227.129.159.227.129.174.227.131.143.227.131.188.227.131.136.227.129.171.227.129.171.227.129.147.227.129.171.227.129.147.227.129.171.227.131.188.226.153.170.10.231.172.145.233.161.148.229.177.138.227.129.145.227.130.139.231.159.162.230.190.164.227.129.171.227.129.147.227.129.171.227.129.147.227.131.188.226.153.170.10.227.129.171.227.129.147.227.129.171.227.131.188.227.129.163.227.129.166.232.166.154.227.129.136.227.129.166.227.131.169.227.131.150.227.129.171.227.129.147.227.131.188.226.153.170;

確認します。

$ perl -e "print 227.129.171.227.129.163.227.129.147.227.129.171.227.129.163.227.129.147.227.129.171.227.131.188.226.153.170.10.227.129.130.227.129.170.227.129.159.227.129.174.227.131.143.227.131.188.227.131.136.227.129.171.227.129.171.227.129.147.227.129.171.227.129.147.227.129.171.227.131.188.226.153.170.10.231.172.145.233.161.148.229.177.138.227.129.145.227.130.139.231.159.162.230.190.164.227.129.171.227.129.147.227.129.171.227.129.147.227.131.188.226.153.170.10.227.129.171.227.129.147.227.129.171.227.131.188.227.129.163.227.129.166.232.166.154.227.129.136.227.129.166.227.131.169.227.131.150.227.129.171.227.129.147.227.131.188.226.153.170;"
にっこにっこにー♪
あなたのハートににこにこにー♪
笑顔届ける矢澤にこにこー♪
にこにーって覚えてラブにこー♪

これでトートバッグも作り放題です。

Twitterもよろしく

YAPC::Asia 2015のお土産を紹介するぞー #yapcasia

今日前夜祭でした。明日からが本番です。

id:y_uukiさんのブログ論、とてもおもしろかったです。

僕は個人スポンサーチケットで参加したので、スポンサー特典も含めて頂いたノベルティを紹介しますー。

トートバッグ

YAPC::Asiaの缶バッチもついてます。

f:id:hiragram:20150820224729j:plain

Perlのprint文がべろべろ書いてある。気になる人は自分で実行してみてください。

追記: 記事書きました YAPC::Asia2015のトートバッグに書いてあるコードをいじいじする #yapcasia

f:id:hiragram:20150820224732j:plain

イベントパンフ

と、タイムテーブル。

f:id:hiragram:20150820224736j:plain

クリアファイル

ステーションメモリーズ

モバイルファクトリーさん。実はこれ貰ったの2枚め。

f:id:hiragram:20150820224822j:plain

pixiv/岸田メル

裏には「お絵かき楽しす」って書いてありました。

f:id:hiragram:20150820224809j:plain

アカツキさん

「ゲームには世界を変える力がある」かっこいい

f:id:hiragram:20150820224813j:plain

Tシャツ

茶色Tシャツ(一般)

両面プリント。背番号はみんな10です。

f:id:hiragram:20150820224754j:plain f:id:hiragram:20150820224758j:plain

赤Tシャツ(個人スポンサー)

鮮やかな赤です。何日目にどっちを着て行こうか迷う。 こちらは背面はプリント無し。

f:id:hiragram:20150820224819j:plain

パーカー(個人スポンサー)

着る季節はもう少し先ですが。

f:id:hiragram:20150820224801j:plain

シンプルかつキャッチーで素敵です。

f:id:hiragram:20150820224804j:plain

タンブラー(個人スポンサー)

アルミ製のタンブラー。YAPC::Asia TOKYO 2015と刻印されていてめっちゃかっこいい。

会社の机に置こう。

f:id:hiragram:20150820224739j:plain

ステッカー/企業チラシなど

いろいろ。

f:id:hiragram:20150820224816j:plain

ステッカーは他にも。 YYCは予想外でしたよmixiさん。

f:id:hiragram:20150820224742j:plain

その他

サイリウム

なんでw

f:id:hiragram:20150820224745j:plain

Seesaaさんの手ぬぐい(?)

長い薄い布が入ってたけど手ぬぐいであってるのか

f:id:hiragram:20150820224749j:plain

シャノンさんの付箋と@typeのウェットティッシュ。

f:id:hiragram:20150820224751j:plain

おいしかったです。

f:id:hiragram:20150820224726j:plain

明日からが本編

今日も夜なのにわざわざビッグサイトまで人が集まってすごい熱気でした。

実は今年YAPC初参加で、今年で最後なのが非常に残念ですが、楽しみたいです。

Twitterもよろしく

高専の良し悪し

僕は高専卒です。

学校の中で一番新しい学科で、最先端の情報教育が受けられるらしいです。

高等専門学校 - Wikipedia

どこの高専かはここには書かないけど聞かれれば普通に答えるのでTwitterとかで聞いてください。

高専に進学してよかったか -> Yes

パソコンが好きだったな〜というのと普通の勉強が嫌いだったな〜という気持ちがあって、高専だったら好きなこと学べるのかな〜と。

入ってから知ったけど結局歴史も生物も古典も普通にあった。

大学受験

あと中学で進路考えてる時点で大学受験が嫌すぎた。中学からの進路考えてる/勉強してる時点ですでに嫌気が指していたからもっと勉強しないといけない(というイメージの)大学受験とかまともな事にならないと確信していた。18歳になろうかという一年を大学受験のための勉強に潰されなくて済んだのでこの点については特に高専を選んで大正解だったと思う。

自分のパソコンが当たり前に持てた

プログラム書くしレポートも書くのでノートPCを買ってもらった。

多分普通の高校行ってたらそんなもん無かったと思う。うちは裕福ではない。

寮に入った

僕がいた高専は1年生は全員入寮する決まり(2年め以降は自分で決められる)だったので初めて親元を離れて暮らした。寮には2年いた。

中学の頃は家庭のごたごたがあってあんまり家に居たくなかったので、めちゃめちゃ早く登校して7時には学校にいたりしたし、それくらい家に居たくなかったので寮に入りたかった。

寮ではいいことも悪いことも学んだしまあまあ有意義だったと思う。

高専の教育に満足か -> No

中学生向けの学校案内パンフには「これからは情報が〜最先端の教育が〜」みたいなことをいっぱい書いてあったからまんまとそれに釣られたなという感じ。どこが最先端やねんという感じ。

歴史も生物も古典もある

暗記系の科目がとにかく嫌いだったし意味ないと思ってたので普通の高校でそんなんやりたくないから高専選んだというのもあって、入学して時間割が配られた時にそれらの嫌い科目がそこにいた時はまあまあ衝撃だった。

基礎が大事マンしかいない

基礎が大事なのは大いにわかるが結局基礎しか教えてないじゃないか。

プログラミング全然最先端じゃない

プログラミングを教えるのも基礎が大事マンなのでプログラミングとはこういうものである、逐次分岐反復である、みたいなのしか教えてもらった記憶が無い。

1年次でC、2年次でC++やったけど、C++はprintfがcoutになっただけみたいなコードばっかりだったし、作ったものもレジとかじゃんけんゲームとかとにかくモチベーション全然上がらないものばっかり。

本1冊で全部学べそうな薄い内容だった。

他の学科ではJavaとかPerlとかやってたみたいで、そっちが羨ましくてしょうがなかった。

高専卒で就職してよかったか -> Yes

学校にいたとき

僕がいた学科では半分くらいが就職して半分くらいが大学3年に編入してった。

これは多分どこのも一緒なんじゃないかな〜と思うんだけど、高専って地元企業と仲良しこよしなので、地元就職狙うんだったら最強な気がした。地元の企業のおじさんが体育館に集まって会社説明するみたいなイベントも学内でやった。選ばなければ就職できないことはまず無いと思う。

でも僕は東京に出たかったので地元でブイブイ言わせてる学校ネームみたいなのはクソほども役に立たない。わかりきってること。

就活のときまだ18歳というのがまあまあ目立ててよかったと思う。

高専の使命は多分地元の企業に便利に使える若い学生を誘導することなので、学校と縁もゆかりもない東京に出ていこうとするような奴は学校的にはどうでも良かったんだと思う。勝手にやれば〜って感じ。

地元就活組は最終学年が始まる春くらいにようやくそれっぽい企業研究はじめて先生にあてがわれた会社に吸い込まれていったけど、自分でやりたいこといきたいところがちゃんとあるなら学校の流れに乗っかってると確実に失敗する。

就職率を売りにしている高専だから、就職留年とか進路未決定のまま卒業とかそういう不名誉な生徒は許されず、自力で就活に失敗したら地元の工場で作業員として労働力その1になるだろう。

就職してから

働き出して1年と4ヶ月くらい経つが、進学じゃなくて就職を選択したのは正解だと思う。

同期はみんな年上だし、今年入ってきた後輩も全部年上だからたまにやりづらい時はあるけど、学生やってた頃よりは普通に毎日楽しい。

業界的にも、まさに学歴より実力という感じなので、2年学ぶか、2年働くかはどういう仕事するかにもよるだろうけど僕は働く方を選んだ。

高専をおすすめするか -> No

僕はたまたま運が良かっただけだと思っていて、中学の段階で工業に絞って選択肢を狭めるよりも、普通に高校に行ってそこでもう少し勉強して、それから大学でやりたいことをやればいいと思う。

教育の質は、間違いなく大学よりは低い。

中学生の皆さん、頑張ってください。

現役高専生のみなさん、まあ頑張ってください。