絶品ゆどうふのタレ

ふと気づいたことを綴るだけのメモ

Karabiner-ElementsでESCやCtrl+[キー押下時に日本語入力を解除できるようになっていた

タイトルで全て言った。

普段からメモにMacVimを常用してるのだけど、Karabiner-Elementsになってから日本語モードからの切替時に いちいち日本語IMEを自分で解除しないといけなくて、手間だった。

が、気づいたらこれをさっと実現するCustom設定が使えるようになってた。。。!

実は結構前からっぽい。 すごく幸せになれる設定だったので、早速入れてみた。

設定方法

Karabiner-Elementsの[Preference]->[Complex Modifications]

f:id:Yudoufu:20180114214204p:plain

下部の[Add rule] -> [Import more rules from the Internet(open a web browser)]

f:id:Yudoufu:20180114214226p:plain

これで、 Karabiner-Elementsの追加ルール群のページ が開くので、

f:id:Yudoufu:20180114214252p:plain

そこで [International (Language Specific)] -> [For Japanese (日本環境けの設定) (rev 3)] を import する

f:id:Yudoufu:20180114214304p:plain

f:id:Yudoufu:20180114214358p:plain

再びKarabiner-Elementsの[Add rule] 画面を開き、

  • escキーを押したときに、英数キーも送信する(vim用)
  • Ctrl+[を押したときに、英数キーも送信する(vim用) (rev 2)

の2つを Enable にする。

f:id:Yudoufu:20180114214415p:plain

これで、vim上で挿入モードを抜ける際に日本語入力を解除できるようになる。

快適で涙が出るっす。

補足と参考

この設定は別にvim専用の設定にはなっていないので、当然他のアプリ上でもESC叩くと英数キーが送信される。

個人的には困らないからいいかなーと思ってるけど、もし対象のAppを絞りたい場合には以下のように 自分で complex modificationの設定を書いて追加することが可能ぽい。

docker & Kubernetes on Mac の環境構築 at 2018初頭

ここしばらくインフラ方面の知識updateがなく、久々にdocker周りから復習するかーと思い立ってみました。

が、進化の速さとか大人の都合とかによって1~2年のうちに状況が2転3転していたようで様々な情報が入り乱れていて、入門するにしても「で、どれを信じればええねん」という感じに。

というわけで自分なりに状況を調べて、「少なくとも2018年1月現在において、こうセットアップしてくのが便利かつ標準そう」というのを手順とともにまとめました。

目指す環境

  • Mac上でdocker、およびKubernetesのローカル環境を構築する

リモートのdocker / Kubernetes はcliの docker / kubectl を使えばいいので、ひとまずこれだけ。

先にまとめ

先にまとめると、以下をやっとけば良い。

% brew tap caskroom/versions
% brew cask install docker-edge
% open /Applications/Docker.app
    -> Preference -> [Enable Kubernetes]

もう少し状況説明

  • Dockerについて

    • 現時点では Docker for Mac を利用するのが便利かつ標準
    • homebrewの場合は homebrew-caskのdocker を使うのが正解
      • homebrew本家が持ってるdocker fomulaは古いので使わない
  • Kubernetesについて

    • Docker for Mac の Edge版から入ってくるKubernetesを使うのが良さそう
      • 多分まだ世の中は minikube が標準
      • Docker for MacのKubernetesサポートによって変化が始まってて、どちらが標準をとるかはまだ不明
      • でも手軽さ分こっちかなーって思うので採用した
    • caskのversionsに docker-edge があるので、当面はこれが楽
      • brew にkubectlがあるが、Docker for Mac がまとめて入れてくれるのでそれは不要

 ちなみにKubernetesのInstall

これをチェック入れて、進めると

f:id:Yudoufu:20180113002647p:plain

これで完了。

f:id:Yudoufu:20180113002730p:plain

最後に

Kubernetesとかkubectlの発音って、DockerCon の動画見てると キューバネティス キューブコントロール って呼んでて、僕も今度からそう呼ぼうって思いましたまる

iOSDC Japan 2016 に参加してきた

https://iosdc.jp/2016/

iOSDC Japana 2016、まるっと一日参加してきました。 すごくたくさんの人と熱気で、トークも面白いものがぎっしり詰まっていてとても充実したイベントでした。

スタッフならびにスピーカーの皆様、素敵なイベントをありがとうございますっ!\\\٩( 'ω' )و ///

LTはペースに追いつけずにまとめられなかったんですが、今日聞いてきたトークはそれぞれログを取りました。 (資料が貼ってないものは、見つけ次第足します)

色々新しい情報とか参考になる話を聞けたので、明日は気になるところを少し深掘りとかしてみようかなー。

iOSDC Japan 2016 参加メモ: A-11 Xcodeで快適なデバッグライフを追い求める

Xcode

  • XcodeなくしてiOSの開発はありえない
    • 原因にいかに早くたどり着くか

クラッシュしたらAppDelegateだった問題

Exception Breakpointを追加

  • Breakpoint追加時に Exception Breakpoint を選んで追加

    • ただし、Exception前提で書かれていると意図と違うタイミングでbreakしてしまう
      • storyboardがなければフォールバックする、とか
  • Diagonosticsを設定

    • 不正なメモリ操作を検知
    • dynamic library
    • Edit Schemaから設定できる
      • Enable Zombi Object
      • Enable Address Sanitizor -> パフォーマンスは下がる
    • アセンブラレベルまでクラッシュした場合、これがあれば追える

どのViewControllerかわからない問題

  • 新しいプロジェクトに入ると。。。

  • Symblic Breakpointを追加

    • SymbolにviewWillAppear / viewDidLoadなどを追加
      • commandで bt 0するとでる
    • viewControllerで設定しておかないと、Symbolic Breakpointが効かない
  • Share Breakpointすると、チーム間で共有できる

起動時に特定のViewControllerにしたい問題

  • デバッグ時に深いページ開くの辛い。。。
  • Environment Variables
    • Edit Schemaから設定できる
      • この環境変数を参照して挙動を変える処理をAppDelegateに書いておく
    • メリット
      • Xcode から起動した時のみ有効になる!
      • 一時的な挙動の切替に便利

端末のログやファイルを取得したい問題

  • 実機のログやRealmをみたい

    • できるけどめんどくさい
  • LLDBを使って該当ファイルをSlackに送信

    • breakpointでbreakしてコマンドを打つ
    • gistに公開しました
      • ./llidbinit の中に呼び出しを入れておく

まとめ

  • 快適になると良いね!

QA

  • Closureの中でオブジェクトを参照する方法とかありますか?

    • lldbが巧くフレームを取れてないのが悪そう
    • 2連発で取ると巧く行くことはある。。。けど基本諦めてる
  • Breakpointとlogが多すぎてわからなくなるのはどうしてますか?

    • Loglevelを切り替えられるようにしたりして、フィルタしてる

iOSDC Japan 2016 参加メモ: A-10 SwiftでJavaScript始めませんか?

SwiftでJavaScript

JavaScriptCoreとは

  • JSのランタイム実行環境
  • Swiftとの相互運用が可能

  • 使用例

    • 再ビルドをせずに実装を差し替える
    • カスタムスクリプト環境を提供
    • JSを使ってネイティブアプリを制御できる
    • Web経由でソースコードをダウンロード、など

ちょっとまった

  • 強力すぎないか?
  • 審査通る?

    • 考えてなかった!
  • 環境

基本的な使い方

  • JavaScriptCoreをimport
  • JSContext生成
  • JSコード実行
    • evalの結果はcontextに溜まっていく
  • 実行結果をSwiftで受け取る
    • 返り値をSwiftで受け取れる

変数の扱い

  • JSValueで表現

    • toTypenameメソッドでSwiftの型にできる
    • isTypenameプロパティで判定してから取り出せる
  • オブジェクトもJSValueで

    • swift側からforPropertyなどで取り出したりできる

JavaScript API

  • JSの基本的な組み込み機能だけが備わっている
  • DOMなどの高度なものはない

  • 自分の手でAPIを構築していく

    • やり方は色々
      • JSからでもSwiftからでも
  • 変数/関数/オブジェクトをJSで定義する

    • 普通にeval
  • Swiftで定義する

    • setObjectすることで、JS上で参照できるようになる
    • 参照型だと共有しちゃう
  • 関数をSwiftから取り込む

    • クロージャをコンテキストに設定する
    • AnyObjectにキャストしてsetObjecすると、JS上から呼び出せる
  • Swiftの型をJSで使う

    • @objcをつけてNSObjct継承してやれば、渡せる
    • インスタンスを渡す事もできる
    • meta typeを渡すこともできるので、JSの中でインスタンス化することも可能
  • Swiftの機能をそのままJS上で使える!

コードを書きやすくする方法

  • 普通に書いてると読みづらい
  • プロジェクトにJSファイルを組み込んで、Bundleから読み込んでStringにしてevalに流してあげれば楽にできる

まとめ

  • JSをSwiftから簡単・自在に扱える
  • 審査通るかは、後日!

QA

  • ECMAScript 2016は対応してる?

    • 行けそう
  • JS側でSwiftのオブジェクトを参照した場合、開放されたオブジェクトの扱いはどうなる?

    • JS Managed Valueあたりを見るとわかるかも
  • React Nativeは使ってたはずなので、審査は通りそう

iOSDC Japan 2016 参加メモ: B-9 Swiftのこれまでの動向のまとめと今後のさらなる発展の期待

  • @_mono 小野 将之さん Join.us の中の人

Swiftの変遷

これまでをおさらい

  • 2014/06公開

    • WWDCでSwiftを公開
    • 良かった点
      • ダンな言語仕様
      • リファレンスの出来も良かった
      • Xcode 6ですぐ使えた
      • 既存との混在もできた
    • 悪かった点
      • 頻繁にXcode / コンパイラのクラッシュ
      • ビルドが遅い
        • ちょっとした変更でも全体ビルド
    • 当時はまだ色々言語仕様がなかったがまぁOKな範囲
  • 2015/09

    • Swift 2
    • 主な不満点が解消
      • クラッシュ頻度低下
      • 差分ビルド対応
      • 言語仕様が十分揃ってきた
  • 2015/12/03

これからの話

  • Swift 3.0

  • Swift 2.2

    • 3.0のプレリリース的扱い

Swift 3のアップデート内容

  • 最後の大きな破壊的変更

    • 微妙な言語仕様を全面見直し
  • あらゆるものをSwiftyに

互換性問題

  • 後方互換性の保証では、ない
    • バージョンアップのたびの破壊的な変更はなくなりそう
  • ABIの安定化は4.0に持ち越し
    • 古いSwiftでビルドしたライブラリとリンク可能になる

Swiftyにしていく

最後に

  • 連載もよろしくね!

QA

  • Swift 3を使いはじめるのはいつ頃をめどに考えればいい?

    • 仕様変更は、そろそろなくなると思う
    • 使い始めはエンジニアがどれくらい熟知しているか、かも
    • 自動コンバートツールもついてくる
  • 逆に3で不満な変更点は?

    • 個人としてそんなに反対な変更はない
  • 一番素晴らしい変更は?

    • 無駄な部分をそぎ落としていこうという姿勢がいいと思う
  • Swift3の正しい書き方とか、ガイドになるようないいものありますか?

iOSDC Japan 2016 参加メモ: A-8 デザイナーにStoryboardをお任せする技術

背景

  • はてなのデザイナーはWebアプリだとHTML / CSSのコーディングをして、git管理してる
  • でも、モバイルアプリはAdobe CCまで

  • 最近変わってきた

    • デザイナさんがAutoLayoutの書き換えまでやるようになってきている

今回のゴール

  • デザイナーがStoryboardを編集するワークフローの獲得
  • チームの生産性向上

導入

  • チームや個人のモチベーション重視
    • やる気がなさそうならさっさと諦める
  • 開発環境をセットアップ
  • 手取り足取り教える
  • 実際に触れてもらう

Interface Builder

  • 意外といろいろ新しい要素がある
  • デザイナ的には案外わかりやすい

  • 登場する要素について

    • View
      • ここはわかりやすい
    • ViewController
      • 黄色いアイコンのやつがViewControllerだよ!
      • Viewとペアになってるよ
    • AutoLayout
      • これが。。。。
  • UIKit User Interface Catalog

    • これを教えてあげるのが良い
  • ViewController Catalog for iOS
    • ちょっと古い

AutoLayout

  • 教えるべきことがたくさんある

    • Layout Constraint
    • Intrisic Content Size
    • Priority
    • Error / Warning
  • NSLayoutConstraint

    • 制約の式の中に対象のattributeなどを設定すると考える、というのを教えてあげる
    • 揃える、という意識とConstraintは対応してるので意外と行ける
  • Intrinsic Size

    • 固有のサイズって話でわかる
  • Priority

    • 伸びにくさ、ちぢみにくさのPriorityのことを徐々に教えてあげる必要がある
    • 絵で説明する
  • AutoLayoutのエラー

    • エラーがあると怒られる
    • どういう時に怒られるか知っておいてもらう
  • Adaptivity

    • Dynamic Text
    • Size Class
    • Trait Collection

ここまで学ぶのにどこまで大変か?

  • 3日かかった
    • 多分速い方
  • iOSAndroidのLayoutを理解してもらうのにかかった時間

ワークフロー

  • アプリの機能が企画される
  • デザイナーがレイアウトを決める
  • エンジニアが実装
  • デザイナが細部を調整
  • コードレビュー

Make App Designable

  • IBDesignable
    • Storyboardで見れる
  • IBInspectable
    • Storyboardから値を設定できる

ヒント

  • 前提を共有する
  • 同じドメイン知識を共有する

  • 用語をきっちり揃える

  • 独自のViewをたくさん作る

    • 再利用性のあるコンポーネント
    • パラメータを @IBInspectable
    • 最初から作り込み過ぎない
  • よく作る例

    • Border
      • 線の幅を指定できたり
      • 物理pixcelにしたい場合、とか
    • AttributedTLabel
    • BorderedButton

エンジニアにとって大事なこと

  • UIKitについて学ぶ
    • 知らないことは意外と多い
  • Storyboardを巧く管理する
    • 分割は必須
    • コンフリクトは最大の敵
    • 同じ所を同時に触らない
      • デザイン調整は後で、ぐらいでも良い
  • デザイナーを手助けする
    • 忙しい
    • 丁寧なサポートを心がける
    • レビューがあると安心感が出る

まとめ

  • 開発チームが協力することで実現
  • 難易度は高め
  • 大きなメリット

QA

  • Storyboardのレビューはどうしてる?

    • 複雑な場合はcheckoutしてアウトラインで見てみたり
  • ContainerViewを多用したい場合はどうしている?

    • エンジニア側でContainerを作ってStoryboardを分割してしまう
    • 中身だけお願いします、みたいな