2019-01-01から1年間の記事一覧
こんばんは、final警察です👮 既存のコードにfinalをつけるのがめんどくさかったので、シェルスクリプトで一括finalをつけてみました。 Bashスクリプト 解説 git grep class.+:.*[, ]$CLASS_NAME\W while read ~ done < <(expr) なぜfinalをつけるか 締め Bash…
LLDBのcommand regexを使うと、zshのanonymous functionのaliasみたいな感じで、 引数に置換かけながらLLDBコマンドを実行するaliasが作れます。 これを利用することで、簡単なコマンドならば、Pythonスクリプトを用意する手間が省けます。 やりかた 構文は…
danger-xcode_warningsという名前で、Pull Requestを投げた際に、Xcodeのcompiler warningsやlinker warningsを指摘するDangerプラグインを作りました。 xcodebuildのログと、xcprettyで整形済みのログに対応しています。 github.com rubygems.org 実はだい…
コードレビューの補助に、Dangerを導入しているチームも多いと思います。 プラグインも簡単に作れるので、半分覚え書きですが、解説したいと思います。 プロジェクトの生成 ファイルの構成 プラグイン本体の書き方 RSpecの書き方 実際の例 テストの記述 プラ…
SwiftPMも本格的に使えそうなので、SourceKit-LSPを試してみました。 SourceKit-LSPは外部エディタ向けの、Swiftコードの補完やジャンプなどの機能を提供するLanguage Server Protocolです。 VScodeやVimなどのテキストエディタなどで利用することが出来ます…
毎回ソースコードいじってRxSwiftのdebug仕込むのってめんどいですよね。 そこで、スクリプトを使ってLLDBから仕込めるようにしました。 流れてくるイベントを簡単にチェックするのに役に立つかもしれません。
Swiftに`async/await`がなかなかこないので書いてみました。 コールバック地獄が嫌いな人向けの記事です。
どのブランチで最後にgit stashをしたかわからなくなることがあるので、シェルに表示されるようにしてみました。 これで誤popがだいぶ減りました。 How To stashされた一覧はgit stash listで確認できます。 % git stash list stash@{0}: WIP on feature/int…
Xcode10でNew Build Systemになってから、全体的にビルド時間は短くなりました。 しかし、それでも諸々の原因によりビルドがめちゃくちゃ遅い場合があります。 そんな場合でも、キレずに冷静に改善する方法紹介します。 ビルド時間の計測方法 ビルド設定の見…
少し前に、RxSwift5のSchedulerの実装を読んでみたので、初めての読んだ系記事です。 概要 observeOnとsubscribeOn Serial/Concurrent Scheduler 主な組み込みのスケジューラー MainScheduler ConcurrentMainScheduler SerialDispatchQueueScheduler Concurr…
若干話題になって出尽くしてる感がありますが、XcodeのLLDBを絡めたデバッグでよく使う手法をまとめてみました。 特定の行をスキップ 特定の行を書き換える ブレークポイントをon/offする アドレスからオブジェクトに戻して変数に格納する 組み込みメソッド…
忙しい人向けに、.xcactivitylogからメソッドのコンパイル時間を抽出するワンライナーです。 gunzip -c -S .xcactivitylog hoge.xcactivitylog | perl -pe "s/\r/\n/g" | grep -E "^\d+\.\d+ms" | sort -nr | uniq | head -100 中身はただのgzipですが、\rが…
Nimbleでテストを書いていた際に、共通部分を`Predicate`として自作してまとめたいことがあったので、実装の方法と簡単なサンプルを記しておきます。
あとからコミットメッセージ書きたいとか、rebase前提でとりあえず細かくcommit切りたいときに、雑にtempとかWIPとか書いて忘れそうになるので、hooksのpre-pushに警告をいれてみることにしました。 やり方 master pushを防ぐのとほぼ同じです。 masterへのp…
ターミナルからGitHubのもろもろを開く git管理下のディレクトリにいる時に、もろもろのよく使うページを開くワンライナーでエイリアスを作ってみました。 はじめに 説明に便利なので、ブラウザの立ち上げにmacのopenコマンドをつかっていますが、他のOSの場…
UIView.animateは引数が多く、animationとcompletionで2つクロージャーを引数に取り、ネストも深くなりやすいため、メソッドチェーンで書けるように改良してみました。 サンプル 実装 AnimationBuilder AnimationExecutor アニメーション開始用のstaticメソ…
curlで取ってくるだけですが、シェルから取れると便利なので割とよく使っています。 github.com このGitHubのリポジトリ(わかりづらい)のrawから取ってきます。 こちらは、CC0ライセンスらしいです。 スクリプト .bashrcやら.zshrcに置く。 gign() { cp .git…
assetsの画像を読む際に、template内のimgタグに直接記述するのではなく、スクリプト側の変数を利用してsrcを設定する際、~などがうまく意図したパスに変換されないことがあります。 例 このようにした場合、上のimgタグは適切なパスを参照するのに対し、下…
前にファイル出力できるロガーをつくっていたので、ターミナルで見やすいようにちょこっと改良してみました。 Xcodeのウィンドウでは色がつけられなくなってしまったので、出てきたものにPerlで色を付けています(ゴリ押し)。
Swiftには、assertと似た役割を持つメソッドとして、preconditionやfatalErrorがあります。 これらのメソッドの使い方について考えてみます。
UIPageViewControllerが登場したのが古いこともあり、公式ドキュメントや、ネットに出ているの情報だと、いまいち各メソッドの挙動までは掴みづらかったので、改めてまとめてみました。
タイトル通りで、UIViewControllerやUIViewのArrayから特定のサブクラスだけ抜き出す処理はよく書くので、 ただのaliasですが、少しでも楽しようとextensionにしてみる。 extension Array { func `as`<E>(_ type: E.Type) -> [E] { return self.compactMap({ $0</e>…
Spring Bootでは、プロファイルという機能を用いて、設定値をyamlファイルやpropetiesファイルとして外部に切り分けることができます。 これを使って、実行環境ごとの定数値をまとめたり、DIされるクラスを変えたりすることができます。 基本 実行時に読み込…
ルールとマナーを守って楽しくgit pushしよう!!
マイルストーン的な感じで、後で見返すように... 職務経歴書よりも、詳しい業務内容はぼかして、感じたことや業務外でおこなったことを追記してます。
boost::algorithm::splitの使い方です。
みなさんKotlin使ってますか? サーバーサイドでも便利なので、自分は最近よく使っています。 API側はよくみるので、今回はサーバーサイドレンダリングの方を書いてみます Kotlinのいいところ 準備 使うもの プロジェクト作成 雛形を見てみる indexページを…
普通のアプリの場合は、NSLocalizedStringにキーを渡すだけで大丈夫なのですが、frameworkを公開する場合、デフォルトだとアプリ側のBundleを参照してしまうので、そちらも正しく指定しなくてはいけません。 情報が少なかったので、その方法を記載しておきま…
正確には、RangeExpressionのような、containsで要素を含むかどうかを判定できる適当なクラスに落とし込みます。 今回はRange(0.0...1.0みたいなやつ)だけではなく、RangeExpressionに適合するのすべてのクラスに対応したいと思います。 Swift4.2からRange系…
シェルだけで簡単にコマンドを並列実行するのに、xargsの-Pオプションがあります。 GNU Parallelも便利ですが、そちらはmacユーザーだと別途インストールが必要なので、こちらを紹介します。 使い方 活用例 例1. 一括画像リサイズ 例2. 連番ダミー画像生成 …