面白きことは良きことなり

拙く未熟なiOSエンジニアの備忘録と戯言

Akiba.swift 忘年会のAKIBA枠でLTしてきた

Akiba.swiftとは

岩本町にあるクラスメソッドのオフィスで開催される勉強会です。

classmethod.connpass.com

主催者は、ダンボー田中さんloveeさん

オフィスの広さの関係もあって、最大でも20人ぐらいの小規模勉強会で、名前からも察せるようにアキバ系が好きな人が多く集まります。

AKIBA枠

今回の忘年会から思いつきで追加されたアキバ系のネタ用LT枠

過去3回くらいオーディエンス参加したり、技術系のLTやったりと参加してきたので、今回も賑やかしに参加した。

発表内容

speakerdeck.com

Akiba.swift + AKIBA枠 + 技術者 = bpS(バトルプログラマーシラセ)
このネタをやるしかない!マイナーなお気に入りアニメの布教もできる!と思いつきで登壇

2箇所くらいは動画を差し込んで 時間稼ぎ 発表に面白みを付加していたけど、Speakerdeckにあげるために静止画へと置き換わっている。

今後

色々iOSやSwiftから離れたことをプライベートでちまちまやってたけど、それが落ち着いたのもあって今週あたりからSwift触ってやりたいこと試したいことを行なっていくので、知見をまたどこかのLTでアウトプットしていきたいところ。

最低限このブログ上でまとめることはやる。

iPhone Xで出来ないこと2点

iPhone Xを触ってて気づいたこと

iPhone Xを私物として購入し、触ったりコードを動かしていて疑問に思ったことを調べた結果、以下の2つが判明 * network indicatorが表示されない * 逆さまの縦持ち(portrait upside down)が存在しない

network indicatorが表示されない

これは割とiPhone Xが発売された最初のほうから言われているので有名。iOS11.2の現在でも表示されないままである。

UIApplication.shared.isNetworlIndicatorVisible = true を行うことで、従来ではステータスバーにindicatorを表示でき、通信していることを示せていた。

また、場合によっては、通信時にこの表示を行わないとリジェクトされることもあるという話を見た。

しかし、なぜかiPhone Xでは表示されなくなっている。ステータスバー領域がフロントカメラで狭くなったことも影響しているのだろうが、2017年9月の新機種発表の時だったか忘れたが、iPhone Xのステータスバー上で新しいデザインのnetwork indicatorが表示されているシーンを見た記憶がある。

iPhone X自体前倒しでリリースされたと言われているので、今後のiOSのアップデートで表示されるようになるのでは?と思っている。

逆さまの縦持ち(portrait upside down)が存在しない

前項のnetwork indicatorが実はフロントカメラの下で見えない可能性が微レ存か?と思い、上下逆さまの画面で確認したらわかるやーんと、お試しプロジェクトを作って発覚。

iPhone XはportraitUpsideDownは機能しない。

Apple Developer Forumsでは、Appleの人曰く、"It is by design. We're getting documentation updated in a future release to reflect that." forums.developer.apple.com

つまり、デザイン上そうなってるし、ドキュメントにもそのうち反映されるとのこと。

もともと、portraitUpsideDownなんて使い道なかったし、使ってるアプリ自体極めて稀なので、なくても困らないんだろうが…

おまけの備忘録

network indicator周りで他何か使ってハックしてでも表示できないかと思い、プライベートAPIとかの表示の仕方を調べた。割と検索しにくく、記事も古いため埋もれる可能性を考慮して残しておく

memo.sugyan.com

Apple Scriptで"scrapy crawl hoge"をshellで実行しようとして躓いた話

Terminalでは上手くいくのに、AppleScriptではエラー

Terminalを起動して、 do shell script "scrapy crawl hoge" を打つと問題なく動作するのに、Apple Scriptで do shell script "scrapy crawl hoge" のようにshellを実行しようとしたところ、 sh: scrapy: command not found とエラーが出てしまった。

PATHを通しているからTerminalでは正常に動いてるみたいだし、AppleScriptではPATHとか考慮されないぽい?

commandがなきゃ大本を見つけて叩く

scrapyが見つからないなら、直接commandを叩いてやろうと which scrapy でpathを調べ /Library/Frameworks/Python.framework/Versions/2.7/bin/scrapy だと判明する。

で、
do shell script "/Library/Frameworks/Python.framework/Versions/2.7/bin/scrapy crawl hoge" を実行するのだけれど、別のエラーが出てきた。

Scrapy 1.4.0 - no active project

Unknown command: crawl

Use "scrapy" to see available commands

大きな勘違いをしていた

scrapyは見つかったけど、今度はその引数が上手く渡せていないのか?と思って、引数の渡し方を必死に調べていた。 実際は、有効なspider nameが見つからない時のエラーが出ていたわけなのだが…。

Terminalでcommandを打っている時は、現在のpathを基点に打つので無意識的にApple Scriptも出力したファイルを実行するpathを基点に動いていると勘違いをしていた。

そこで、検証として下記のように順にshellを実行したところ…

-- "--"は、Apple Scriptでコメント
log (do shell script "pwd")                -- "/"
log (do shell script "cd /Users; pwd")     -- "/Users"
log (do shell script "pwd")                -- "/"

shellの実行は必ずrootを基点として始まってて、 do shell script "" 1行毎にrootを基点とすることが判明…。

なので、scrapy project内で scrapy crawl hoge を実行しないといけないのに、ずっとrootで実行しようとしていたわけだ。そりゃエラーにもなる。

思い込み怖い

最終的に do shell script "cd /Users/(Scrapy Project Path)/; /Library/Frameworks/Python.framework/Versions/2.7/bin/scrapy crawl hoge"

のように1行でpath移動とscrapyのcommandを書くことで正常にshell scriptが動くApple Scriptを作成できた。

もっと綺麗なやりかたもあるのかもしれないが、Apple Scriptは独特すぎて学習するのも面倒なので、必要ない限りは今回のようなやり方でいいかなと思ってる。

Xib(Nib)上で設定したfontの種類やサイズが適用されなくて困った話

遭遇した問題

とあるプロジェクトでXib上に配置したUILabelに対して、Xib上からfontの種類とサイズを変更した。
しかし実機上で確認しても、そのfontの変更は適用されていなかった。

原因

何が問題だったかというと、application(_ : launchOptions: ) -> BoolUILabel.appearance().font = UIFont(name: "System", size: 15.0) のようなことをしていた。

この appearance() は初めて知ったのだけど、説明は以下。

public protocol UIAppearance : NSObjectProtocol {

    /* To customize the appearance of all instances of a class, send the relevant appearance modification messages to the appearance proxy for the class. For example, to modify the bar tint color for all UINavigationBar instances:
        [[UINavigationBar appearance] setBarTintColor:myColor];
     
        Note for iOS7: On iOS7 the tintColor property has moved to UIView, and now has special inherited behavior described in UIView.h.
        This inherited behavior can conflict with the appearance proxy, and therefore tintColor is now disallowed with the appearance proxy.
      */
    public static func appearance() -> Self

...

appearance()で生成したclassのinstanceで行なった処理は、そのclassのinstance全てに対して同じ振る舞いをさせるもの。

Xibとか関係なくinstanceの設定が上書きされてしまうので、Xib上の設定は意味がなくなってしまう。

解決策

  • 可能なら appearance() 使ってるコードは削除する
  • コード設定し直す (今回で言えば、 UIFont(name:size:) を使ってfontを再設定する)

そもそも…

ダメ、ゼッタイ

  • 汎用的なUIKitのclassに appearance() は使うべきじゃない
  • appearance() 使うなら継承したclass等限定的に使われるもののみ
  • コードonlyなプロジェクトなら汎用的なUIKitのclassに使うのもありとは思う

これに関しては、Xibに限らずStoryboardでも例外なく発生するもののため、注意が必要。
自分はテスト用のプロジェクト作って調べまくったけど、再現しなくて分からず最終的に苦肉にも // 原因不明だけどXibで設定した内容が反映されないため、コードで設定 のようなコメントを残すことになった。
タスク完了した後、原因を知りフザケルナという気持ちになった。やるせない。

自分の無知故な部分もあるけど、コード書いた人は後に及ぼす影響を想像できなかったのだろうか…

退職エントリーと書いて"禊 -misogi-"と読む

転職した

空が青かったからとかそんな理由ではなく、どちらかといえば空が灰色だから転職をした。

ちなみに時系列的には結構過去の話だったりするかもしれないし、未来の話かもしれない。正確に言えるのは、今年の出来事ということ。

ここから先も一部伏せつつ話す部分があるのだが、ご容赦頂きたい。
また、あくまで私が見聞きした事実と感想を記載しており、他意はないので留意頂きたい。

前職

前職は株式会社スマートテック・ベンチャーズ(以下、STV)という会社にエンジニアとして所属していた。

元々は、別名の会社として存在しており、親会社から独立のような形で所属していた人が移籍して出来た会社である。

最盛期で60人近く在籍し、うちエンジニアは9割程くらいだったと思う。エンジニアの数とかだけ聞くと凄そうに聞こえるが、業務としてはSESによる客先常駐が8~9割を占める。端的に言ってITの出稼ぎである。

私が辞める時には、25人を切っていたし、そこから人づてに増えたという話も聞かないが会社のHPに従業員数50人と記載してあるのはいつも不思議に思う。

前職の不思議

他にも所属していた時、不思議なことがたくさん見聞きしたので、列挙する。昔のことなので記憶違いも含んでいる箇所はあるかもしれない。

<入社 / 契約編>

  • 私が入社するときには、素養を見るため全員に試験を行っていると説明されたが、高学歴者は試験免除で入社
  • 入社前の契約の説明で、給与は随時昇給と説明されたが、随時上がることはなく、常駐先を変える時に経験を積んだことで契約金を上げれるため、そのタイミングで上がることがある (上がらない人もいた)
  • 入社前の契約の説明で、賞与年3回と記載されているが、過去誰一人正社員で貰ったという話は聞かなかった
  • 有給申請は取得日以前であれば、業務に支障が出ない限り認められ、認めない場合は別日を提案しなければいけないことに法律上なっているが、前日に有給申請したら突っぱねられる

<上役編>

  • 上役の人が、本人のいない場所で他の社員に平気で「あいつ使えない」「無能」という発言をする
  • 報連相の大切さを説いてくれるが、上役の人からは報告や連絡なく、事後報告で自分の処遇を知ることがある

<帰社日 / 総会編>

客先常駐を行う会社は帰属意識を持たせるため、だいたい月1で帰社日を設定し、帰社させて講習や研修、ワークを行ったり同僚と交流を深める場がある。

  • 一時期帰社するたびに、報連相の講習が毎回行われていた
  • 総会では、営業利益が右肩上がりなことをとにかく推していた
  • しかし、赤黒情報や経常利益等の細かい話は聞いたことがない
  • 総会で、来期の目標を発表するが1度も前期の反省を聞いたことがない

<仕事編>

  • エンジニアとして採用された人が、常駐先で開発業務と全く関係ないことしてる話を聞く
  • 社員要望で退職者一覧情報が追加されたが、後に上役の独断で削られたため知らない間に人が退職している
  • ある人が退職メールをメーリングリストで全社員向けに送ったが、エラー等出ずメールは誰にも届かなかった
  • 有給は付与された新しいものから使用される (有給を余らせて持ち越すと消滅する可能性up)
  • 色々社員教育スキルアップ目的の施策を行われたが、継続されない

ネガティブだけではない

つらつらと思い返すと、ネガティブな話しか出てこないが、それでも入ってよかったという面もある。

IT業界で中途採用の場合、基本どこも即戦力を求めるので、プログラム等の業務経験がないと内定貰うのは難しい。しかしSTVは未経験者の育成を謳っていることもあって、業務未経験でも採ってくれる。

自分は、まともなアウトプットもなくプログラム知識が少しあるみたいな人だったので、どこの企業からもお祈りされてた。しかし、未経験者も採用してくれるSTVのおかげでエンジニアとして働けるようになったので、そこに関しては感謝しています。

入社したからこそ今の自分があるので入って良かったとは思う。

今回転職することにした理由は、

  • 会社のやり方に疑問が募った結果
  • 最初こそ経営理念の先義後利(義侠を優先することで後から利がついてくるという考え)が日本人らしく好きで共感していたが、実際に働く内に義では腹は膨れないと考えを改めるようになった

そんなわけで、新天地で頑張っていくことに。

割と会社の評判とか噂は調べても出てこないので、アウトプットの練習も兼ねて書いてみた。 STVの話を色々聞いてみたい方は、個別に連絡を取ってもらえればと思います。