snt-nbzw Tech Diary

iOSやSwiftのこととか。

Lets Build That App - AppStoreJSONAPIsコース #5

f:id:hyaku-juu-ichi:20200326233105p:plain

気付き

  • navigationItem.hidesSearchBarWhenScrolling = false

    • ScrollしたときにNavBarからsearchBarが隠れないようにする。
  • searchController.dimsBackgroundDuringPresentation = false

    • 検索したときにviewの表示が暗くなるのを設定できる。
  • definesPresentationContext = true

    • searchBarから検索して遷移したときにtableViewの表示が崩れないようにする。
  • timerに0.5秒を設定しているのは、APIを毎回叩かないための対策、キーボードを打ってる最中はAPIを叩かない、など。

  • timer.invalidate() でtimerを破棄する。メモリーリークしないように。

  • numberOfItemsInSection内で検索の方法などを説明した文章の表示の切り替えを行う。

    • 例: enterSearchTermLabel.isHidden = appResults.count != 0
  • AutoLayout関係はUIViewのExtensionを用意しておくと呼び出し時に簡潔に書ける。

    • overallStackView.fillSuperview(padding: .init(top: 16, left: 16, bottom: 16, right: 16))
      • paddingに値を入れるとsuperviewに対して距離の制約がつけられる。

SDK・ライブラリ周りでハマったらChangedLog.mdを読む。

  • iOS12以前のシミュレーターで起動したらアプリがクラッシュすることがあった。
    dyld: Symbol not found: _OBJC_CLASS_$_AVAssetDownloadTask
      Referenced from: /Users/<UserName>/Library/Developer/CoreSimulator/Devices/E8F315F6-D663-4DE2-A086-0BB000E67DFB/data/Containers/Bundle/Application/A1F8C899-5877-458B-9AED-819AF80962E2/<App>/Frameworks/BrightcovePlayerSDK.framework/BrightcovePlayerSDK
      Expected in: /Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 12.4.simruntime/Contents/Resources/RuntimeRoot/System/Library/Frameworks/AVFoundation.framework/AVFoundation
     in /Users/<UserName>/Library/Developer/CoreSimulator/Devices/E8F315F6-D663-4DE2-A086-0BB000E67DFB/data/Containers/Bundle/Application/A1F8C899-5877-458B-9AED-819AF80962E2/<App>/Frameworks/BrightcovePlayerSDK.framework/BrightcovePlayerSDK

結論

  • BrightcoveSDKで問題があった。
    • ChangedLogをみたら同じ現象が起きていて一発で解決できた。
  • ライブラリ、SDK周りで怪しさを感じたら、OSSライブラリのChangedLogをみる。
  • そもそもプロジェクト内で使っているSDKなどは watch しておく。

参考

brightcove-player-sdk-ios/CHANGELOG.md at master · brightcove/brightcove-player-sdk-ios https://github.com/brightcove/brightcove-player-sdk-ios/blob/master/CHANGELOG.md

オデの日記@WEB系: dyld: Symbol not found: OBJC_CLASS$_NSJSONSerializationでハマった http://koexuka.blogspot.com/2013/05/dyld-symbol-not-found.html

Web業界未経験の若手エンジニア戦力化方法論|Engineer Career Lab #1 に参加しました

kiitok.connpass.com

スマイループス 森永さん

  • スマイループスと未経験エンジニア
    • ジョブクル転職
    • 今、Qiitaやteratailなど日本語の技術サイトがあって恵まれている。
    • 学習環境が整ってきて未経験採用でもハードルが低くなった。
    • 同じ価値観の人と働きたい
      • 良いチームは目指したい頂きが揃ってる。
      • 個人ではなくて、チームで勝つ。
      • チーム開発はドラクエみたいなもの。
      • できること、できないことがわからないとパーティーは組めない。
      • 毒から守りタイプに変わってよ。変わるのに挑戦してよ、が未経験でも会社に採用される方法。
      • やりたいこと、個人のwillを大事にする。
      • 教え合うことによって属人化しなくなる。
      • プリンターを作っていたエンジニアはひとりでiOSの改善なども行っていけるようになった。

div

  • 若手エンジニアの育成方法。
    • 2~3ヶ月後に目指す姿
      • 工数1週間程度の開発ができる(フロントもサーバーサイドも両方)
      • 開発を楽しくできている
      • 成功体験を早く積む。
    • 文化・価値観 クレド
      • クレドに合っていないとそもそもエンジニアになれない
        • 理念先行型
          • 主体的に動く
    • 育成の方法
      • 3人1人チーム
        • リーダー
        • メンター
        • 若手エンジニア
      • ペアプロ
        • コーディング方法のレクチャー
        • 考え方を伝える
        • 教えることでメンターも成長
        • なれない環境でのコミュニケーション促進
        • 放置しないようにする
      • システムを小さくする。
        • システムが小さい = リポジトリのコード量が少ない
          • コードの閲覧性が少ない
          • そのため修正が楽なことが多い
          • AWSのALBを使ったURL振り分け
      • 実際にやること
        • 第1段階
          • 本による学習(プロを目指す人のRuby入門)
          • テストの学習
          • ES6を使ったミニアプリの作成
        • 第2段階
          • 目に見える修正
            • 画面の修正
            • 文言の修正・削除
        • 第3段階
          • 差込形業務への対応
            • 急な依頼の対応
        • 成果
          • これまで全員が2~3ヶ月で成果を出す人になっている
          • 半年〜1年でリーダーができる人もいる。
        • 課題
          • 次の段階に行くためのものが課題。
        • 採用
          • 2年前 30人➡︎いま300人。
          • 事業が伸びているので、未経験のエンジニアも募集している。

育成方法編

  • 自分がサービスを作っていなくても、大枠のものを知っていればブーストが利く。
  • エンジニアリングを伸ばすより、自社のサービスを知ったほうがいい。
    • どこでこのエンジニアリングを使っているか。
  • 会社の理念に共感するのがスタート。
  • サーバーサイドの求人はやはり多い。
  • 「開発スキル」はどんなところを育成したい。
    • スキルは海、広大。
  • ライブラリ
    • gem
      • なんで選んでるのか、選んだ理由を教えてる。
      • 本で学べないことをレクチャーするのはべんきょうになる。
  • 仕様書にないからできませんはおかしくない
    • 基本的にはOJT 実際にお客さんと関わりながら勉強していく。
  • 自社サービスだと最近開発楽しくなくない。
    • チームの中に入って、少しずつ学んでいく。
  • コミュニケーションスタイルは個人によって変えていく。
  • 自分の中で考えこんじゃうような人は思ったように育成できなかったケース。
  • 質問をどんどんする人が伸びる。
    • どんどん質問してねっていう
    • どんどん成功体験を積ませる。
    • 質問をしてこなかったら、こちらからどうか聞いてあげる。
  • コード書いててハマったことありますか? 面接で必ず聞くこと。
    • 3回重ねて聞いていく。
      • それでも動かなかったらどうする。
      • 先輩に聞く
        • 2回目のどうする。
        • twitterになげる
        • ライブラリ作っている会社に電話しちゃいました。
        • この質問は課題に大してどういうアプローチをしていくのか。がわかる。
  • 会社の選び方
    • wantedlyの文言が...。
    • ちゃんとビジネスをみる!
      • ビジネスが成長している会社はエンジニアにお金をかけられる会社。
    • 未経験エンジニアの求人は常に求人を出しているわけではない。
      • 常に求人が変わらないな、という会社はやばい。
      • divは未経験エンジニアの求人はいまは育成できない場合は求人を出していない。

所感

  • ファシリテーターの池上さんをみて思ったが話し方、雰囲気はやはり大事。(話し方の本を読む。)
  • kiitokの勉強会、面白い。
  • 全然自分とは違う分野の勉強会のほうが視野が広がっていい。
  • Slackでもくだけたコミュニケーションが大事なので学ぶ。
    • 毎回お世話になっております。はいらないよね。
    • Managerとの1on1など。
  • 若手エンジニアの育成方法の話が結構刺さった。

Web系受託開発業界の注目企業のエンジニアが「業界の現場と未来を語る」に参加してきました

結構前に参加した勉強会になりますが、勉強になったのでブログに残しておきます。

kiitok.connpass.com

チームラボエンジニアリング 森山さん

会社紹介

  • 社員は全員エンジニア
  • 経験者から未経験社まで幅広く採用
  • 教育課題や実務を通してフルスタックを目指す。

クオリティの高いアウトプットを出す

  • ユーザ体験や構想の部分からお客様と一緒に考える
  • クライアント様と直接お取引

全ての開発工程をチームラボで担当する

  • 全ての役割をチームラボのメンバーで対応する。
  • 要件定義からエンジニアも積極的に案件に入ってもらう。
  • 要件定義を行いながらアーキテクチャ構成を検討する
    • 案件ごとに使用技術が異なる
  • リリース後の保守・追加開発も担当し、お客様のサービスにコミットし続ける。
  • よりクオリティの高いアウトプットを出し続ける。

案件紹介

ゆめみ 片岡さん

  • 創業メンバー全員学生だった。
  • Qiita投稿 No.1
  • Slack 活用 No.1
  • BnB2C事業
  • SIer
    • システム寄り
  • WEB系企業
  • 観点の転換
    • 事業会社(自社)か支援会社(受託)か
      • 事業志向か役割志向か
    • 日系か外資系か
  • 変わらないもの変わるもの
    • 変わらないもの
      • 志向性
        • 目標志向、状態志向
        • 目標志向は事業会社向け
      • 嗜好性
        • 顕示、完全性、支援
      • 思考性
        • プロトタイプ思考
          • モバイル向け
        • 問題解決思考
          • SE
        • 批判的思考
          • ビジネスアナリスト
    • 学びの勝ちパターン
      • Learnability
      • Teachability
        • 教わりやすさが大事
        • 誰が何を知っているかを知っているかが大事。
      • Group Learning
        • それぞれが技術を学習して検証する
        • 硬派なエンジニア
    • まとめ
      • 変わらないもの変わるものを見極める。

スタートアップテクノロジー 西村さん

  • スタートアップ向けの会社支援
  • エンジニア教育を行っている。
  • クロスファンクショナルなスキルを持ったエンジニアが多数
  • 開発部 / デザイン部で分かれている。
  • エンジェニアラウンドからシートアラウンドまで分かれている。
  • Whatなにを, Whyなぜをお客様と話し、Howをエンジニアで話し合う。
  • 月額制のアジャイル開発
  • 応募したい方がいたら、スライドで公開している。

Q&A

  • Web系受託でエンジニアとして働く醍醐味は何?
    • いろんな案件に携われる!
    • 短い期間で沢山の案件に関われる。
    • 案件ガチャとかをなくすために、社内転職制度ができる。(ゆめみ)
      • 違うなと思ったら違う案件に移ることができる。
  • WEB系受託のここが大変
    • 案件毎に技術が異なるので、チケット管理ツールが変わったり大変。
    • スタートアップだとスピード感を求められる。
      • しゃにむにやらないといけない時がある。
    • 大企業の場合はお客様との調整など。
    • 受託に向かないのは、どんなタイプ?
      • いまあるもの、サービスをより良くしていく事業開発向き。
      • 極端だけど飽きっぽい人は受託向き。
    • 顧客とどのくらい対面コミュニケーションをとりますか?
      • フェーズによる
        • 要件定義のフェーズは頻繁にお客様先に向かう。
        • カタリスト(PM)はよくいく。
          • エンジニアは毎回行く訳ではない
        • 案件の最初は関係性を気づくために短期集中のワークがある。
    • 自社サービスからジョインしてきた人はいますか?
      • いる。小さいスタートアップからジョイン。
      • 垣根なく技術に触れたいという人からジョイン。
        • 技術が足りてなくて技術を伸ばしたい人。
    • やはり残業は多いのでしょうか?
      • リリース前などは多くなる。
        • 22時くらい。
      • スタートアップの時は多くなる。
      • 創業から時間が経つと、落ち着いてくる
        • 0,1で事業をはじめると残業時間も増えてくる。
    • どうしてそんなに福利厚生を充実させられるのでしょうか
      • 福利厚生そんなに使う人がいない(yumemi)
      • 有給取り放題→半年間遊んでくるみたいな人はいない。
        • 介護などで使っている人がいる。
          • 週1~2日で使ってる人がいる。
    • 受託開発は仕事に対する情熱は持ち続けられるか?
      • エンジニアだとポートフォリオで出すのは出しづらい。
      • 身の回りで使うサービスなので、そこで情熱を持っていける。
    • チャレンジングなことを受託で行おうとした時工数が気になりますが、やりたいことのバランスは取れているか。
      • 受託だと、まだあまりにも触れていない技術は使うことはできない。
        • 案件の中でもやれたりはするが、尖ったことはできない。
      • 便利ツールを作る。
        • そういった中でチャレンジングなことを行っている。
      • 案件の中ではチャレンジング的なことをしていない(スタテク)
        • 社内勉強会で評価してから新しい技術を入れるかどうかは判断する。
      • チャレンジングな案件はある。
    • AWSなどのインフラ環境は顧客の環境にデプロイするのか
      • 案件による。
    • 経験の浅いエンジニアを採用する時は、技術力以外に一番重視するのはどんな点ですか?
      • yumemi ゲーム採用
      • 意欲があれば60点は学べる。
      • 仕事を楽しめるか?(チームラボ)
      • コミュニケーションは取りたい。
        • 相手が期待する答えを出しているか。
        • 面接時に出会って3秒で好印象にする技術などを使っている
    • モダンな開発スタイルの受託があるのとそうじゃない会社があるのは何が違う?
      • 上流工程にどれだけ関われるかで変化する
        • 新しい技術を使わないと実現できない=>モダンになる。
      • 2次受け、3次受けになるとモダンな技術に触れていけなくなる。
      • サービスが成長フェーズにあるか、も重要になる。
    • WEB系受託企業はこれからどのように進化するのか?キャリア的な魅力は?
      • 受託 = 支援事業
      • エンゲージメントの事業
      • B to Cはグローバルな産業になっている。
      • いままではどこに任せていいか分からないから大企業に投げていた。
        • そこが変化しつつあり、実力ある受託会社に依頼が増えている。
      • 大企業の事業に関われるのが魅力。
      • SOE的な支援事業者
      • 世の中の流れがわかるというのが魅力。
      • 時代毎にシステムに求められる領域が変わる。
      • サイト毎に仕様が変わるのでそういった面で業務知識がつくので魅力になる。
      • 答えは難しい。
    • 自社サービスか受託で迷っているときに刺さる言葉は?
      • 様々な案件に関われること
        • 4~5の案件に関わると変わってくる。
      • その質問があったら、アトラクトが終わっている
      • 支援事業としてのyumemi、事業会社か
      • 比較する対象とは異なる。
      • 自社サービスと受託だと広すぎる...。
        • グノシーかスタテクで悩んでいる
          • あなたは何がやりたいのという質問になる。

SwiftUIで電卓アプリを作成してみた

f:id:hyaku-juu-ichi:20200323113318p:plain

気付き

  • previewでアシスト画面をみれる、resumeで同期する。
  • プロジェクト作成時、storyboardではなくSwiftUIを選択する。
  • simulatorを変更すると自動的にpreviewも合わせて変化する。
  • UIはZStack, VStack, HStackを組み合わせてレイアウトする。
  • previewのUIパーツ or コードをクリックするとどこの箇所で影響があるかわかるようになっている。
  • enumでUIパーツの設定(title, backgroundColor)を管理。
  • @EnvironmentObject
  • @Published
    • 監視するプロパティに付与する。

Github: GitHub - snt-nbzw/CalculatorSwiftUI: Practice SwiftUI

参考

Lets Build That App - AppStoreJSONAPIsコース #4

f:id:hyaku-juu-ichi:20200302000326p:plain

気付き

  • command + Ctrl + E でまとめてリネーム。
    • Refactor>Renameより簡単にできる。
  • stackviewを組み合わせて使うとレイアウトが簡単にできる。
  • addArrangedSubviewでstackViewの中にstackViewを追加できる。
  • verticalStackViewなどのカスタムクラスでリファクタができる。
  • StackViewを組み合わせてレイアウトを作成する。cellなどに相性よさそう。
    • overallStackView(全体)⇒VerticalStackView(縦方向に並べるStackView)など。
  • itunes store api
    • entity:softwareでAppを検索できる。
    • term: 文字列で検索、"Instagram"や"Twitter"など
    • softwareなどだけではなくmusicやmovie、podcastJSONで受け取れる。softwareなどもAPIで取得できる。
      • 自作アプリを作る上で、色々使えそうなAPI

affiliate.itunes.apple.com

  • ctrl+.でコード保管ができる。
    • 予定していたコードではないときに再検索できるのがいい。
  • viewdidloadが呼ばれた後にcollectionviewのdelegateメソッドが呼ばれる。
  • completion block( closure ) の使い方
    • fetchしたデータをcompletionblockで利用する方法。
    • completionでエラーハンドリングすることによって、エラーの種別がわかる。

Google Driveで画像の文字起こしをする

きっかけ

ブログに書こうと思ってエラー文をスクショでは撮ったが、文面をメモ帳にコピペしていなく。

手書きでエラー文を書くのはきついので画像の文字起こしをしてくれるサービスがないかしらべた。

以下のような画像の文字を自動でテキスト化してくれるのを探した。

f:id:hyaku-juu-ichi:20200301225903p:plain

結論

Google Driveで文字起こしができる。

方法は

  1. GoogleDriveに画像をアップロード
  2. 画像を右クリック「アプリで開く」→「Googleドキュメント」
  3. 以上。超簡単。

f:id:hyaku-juu-ichi:20200301230240p:plain

精度はめちゃくちゃいいので、おすすめです。

参考

【PC】画像の文字を一瞬でテキスト化する方法!文字の読み取り・文字起こしが簡単・無料で精度が抜群のオススメの方法!【OCR】 | のり部屋