The Pragmatic Ball boy

iOSを中心にやってる万年球拾いの老害エンジニアメモ

gitでHEADの代わりに@を使う

いままで@派をあまり見かけたことがないので、もしかして認知度が低いのかな・・と思い今更感がすごいことを書いておきます。 ドキュメントに書いてあるように HEADって打たなくても@(アットマーク)で代用できます。 @ alone is a shortcut for HEAD. Git …

SwiftのDictionaryのsubscriptとupdateValueの違い

SwiftでDictionaryの値を追加、変更するのに2通りのやりかたがあります。 ひとつはsubscript、dict["key"] = "value" もうひとつはupdateValue、dict.updateValue("value", forKey: "key") です。 どちらを使ってもDictionaryの値を変更できますが、微妙に…

Xcode10で地味にInterfaceBuilderで変わっているところ

UIの追加 Xcode9までは右下に出ていたのが、Xcode10だと右上の方にあるボタン(○の中に□のボタン)を押すと出てくるようになりました。 Xcode9 Xcode10 Image Literal Xcode9だと画像名を入力すると補完されていましたが、Xcode10だとやり方が変わりました X…

git2.19以降のbranchのsort

gitの2.19がリリースされました Highlights from Git 2.19 | The GitHub Blog 個人的な目玉機能はbranchのsortが楽になったという点です。 git branch --sort=-authordate とすると更新日順にbranchが表示されます。 更に git config --global branch.sort -…

Horizontal StackViewで左寄せにする

横方向のStackViewを普通に使うと余白は詰められて横幅いっぱい使うようになってしまいますが、たまに左寄せにしたい(右に余白を開けたい)場合があります。 そんなときはこのように空のViewを一番うしろに突っ込んでやることで解決できます。 let spacerVi…

RxSwiftのVariableとBehaviorRelayとBehaviorSubjectの違い

動機 RxSwiftのVariableがdeprecatedになったということで、その代わりとしてBehaviorReplayに置き換えようと思ったときに、BehaviorRelayに単純に置き換えてよいのか?BehaviorSubjectもあるけどこっちはどうなんだっけ?という視点で調べてみました。 結論…

linuxでSwiftのObjCBool.boolValueを呼ぶとerror

不具合 SwiftでObjCBoolのboolValueをこのように呼び出すと var isDir: ObjCBool = false let isExist = fm.fileExists(atPath: directory, isDirectory: &isDir) XCTAssertTrue(isDir.boolValue) osxだと大丈夫だけどlinux環境だとerrorになる・・ error: v…

electron-vueのproductionビルドで気をつけるところ

electron-vueでアプリを作ってみて、npm run devで開発環境で動かしたときは動いたけど、npm run buildで本番向けにビルドしたときは動かないみたいなことがちょいちょいあったので、それの対応方法です。 ファイルが見つからない productionビルドの場合はw…

Electronに見えないwebviewを埋め込んで処理させる

すでにWeb版が存在してるけどショボいのでネイティブアプリでいい感じにしたいときがあったりすることもあります。 これを、Electronで作ったネイティブアプリの画面上に見えないwebviewを置くことで実現します。 方法 見えないwebviewの埋め込み Electronア…

MacでIEとEdgeのテスト環境をつくる

MSからVirtualBoxのイメージが配布されているのでそれを使います。 1. VMのダウンロード ここからVirtualBox用のVMをダウンロード 2. VMの起動 1でダウンロードしたzipを回答すると MSEdge-Win10というフォルダ内にMSEdge-WIn10-disk001.vmdkとMSEdge-Win10.…

Prettierで.vueをフォーマット

Prettierのv1.10でVueのsingle file componentをformatできるようになりました。 それまではeslintででたエラーを人手でポチポチ直してたのでこの辺りが自動化できるのは最高です。 やることはすでにprettier導入済みであれば*.vueを対象のファイルにいれる…

ReactでESCキーを押したときにモーダルを閉じる

このようにdivにonKeyDownをつけた場合、キーを押してもonKeyDownは呼ばれません。 <div onKeyDown={this.onKeyDown} > tabIndexをつけて要素にフォーカスを持つことができるようにすれば解決します。 <div onKeyDown={this.onKeyDown} tabIndex="0" ></div></div>

SwiftTweets 2018 Winterの資料のまとめ

SwiftTweets 2018 Winterの資料のまとめです。 https://swift-tweets.github.io/2018-winter 発表 どうやってSwiftのOSSをメンテナンスしていくか https://twitter.com/ikesyo/status/954687472369201155 Swift Foundationにコントリビュートする https://tw…

2017振り返り

2017年の振り返りです。 仕事 これまで長らくiOSをやっていましたが、4月からフロントエンド担当になりYADOKARIというメディアを開発してます。 React.jsとかVue.jsを使ったりしてますが、ES6時代だとそんなにJavaScriptについての学習コストがかからないの…

Vue.js Tokyo v-meetup #6 資料まとめ

v-meetup #6の資料のまとめ イベントページ Vue.js Tokyo v-meetup #6 - connpass 資料 speakerdeck.com docs.google.com github.com docs.google.com speakerdeck.com

potatotips #44 iOS資料まとめ

Togetter togetter.com 資料 speakerdeck.com speakerdeck.com speakerdeck.com speakerdeck.com WkWebViewのキャッシュについて調べた from firewood www.slideshare.net speakerdeck.com speakerdeck.com speakerdeck.com

Jestで環境変数を設定する

JestでテストするときにwebpackのDefinePluginなどで環境変数をセットしている場合、テスト時にもセットしたいときがあります。 package.jsonのjestのところにglobalsを追加することで設定できます。 Configuring Jest · Jest EXAMPLE package.json "jest": …

ルートVueインスタンスのプロパティ

こんな感じにroot Vue instanceのpropsを使って初期値とかを与えたい場合があったりします。 html <div id='root' props='initial-value'> javascript const vm = new Vue({ el: '#root', props: ['initialValue'], data: { value: '', }, beforeMount: function() { this.value = this.initialVal</div>…

slackのbotでmentionが飛ばせなくなった対応

9/11からslackのusername指定が使えなくなりました。 A lingering farewell to the username | Slack これにより、botなどでユーザーにメンション飛ばしていた場合にusernameを使っているとmetionが飛ばなくなります。 対応方法 <@username>を<@userID>に変…

Markdown Night 2017 Summer 資料まとめ

Markdown Night 2017 Summerの発表資料のまとめです。 イベントページ connpass.com ハッシュタグ twitter.com 資料 なぜMarkdownは拡張されるのか Markdownはなぜ拡張され続けるのか | bitjourney Kibela esa Markdownの思想とデザイン esa-pages.io Markdo…

Vagrantでwebpackのwatchが動かない

Vagrant上でwebpackのwatchオプションを使ってファイルの変更を監視しても、変更を検知しないという現象に出くわしました。 こちらに(Webpack Watch in Vagrant/Docker )書いてあるように webpackのconfigファイルに以下のようにpollingするようにする必要が…

Ubuntu16.04にyarnを入れる

Ubuntu16.04にNode.jsの6系とyarnをインストール sudo curl -sL https://deb.nodesource.com/setup_6.x | sudo bash - sudo apt-get install -y nodejs sudo curl -o- -L https://yarnpkg.com/install.sh | bash -s -- --version 0.24.4

Ubuntu 16.04にDocker環境を作る

Ubuntu 16.04上でDocker動かすのにちょっと手こずったのでメモ。 とりあえずこれを実行すれば、Docker CEとdocker composeがインストールされるはず。 yes | sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-properties-co…

Fetch APIを使ってRailsのAPIを叩く

JavaScript(es2015)でFetch APIを使ってRailsのAPIを呼ぶときの方法。 ポイントとしては、'credentials: same-origin'をつけることと、 CSRFを有効にしている場合はheaderにX-CSRF-Tokenをつける点です。 const getCsrfToken = () => { const metas = docume…

iOSのFrameworkのVersionについて

iOS

Frameworkにはversionがいくつかあってそれらの違いの雑な説明です。 その1 ひとつはお馴染みのinfo.plistに書くやつ これはちょっと省きます その2 Umbrella Headerに書いてあるやつ FOUNDATION_EXPORT double FwVersionNumber; FOUNDATION_EXPORT const un…

AutolayoutでレイアウトしたViewを外して元に戻す

InterfaceBuilderやStoryboardでAutolayoutを使って配置したViewをremoveFromSuperviewしてから、 再度addSubviewしたい!ということがたまにあります。 普通にremoveFromSuperviewしてaddSubviewすると元には戻りません。 なぜならremoveFromSuperviewした…

独自のNotification名を追加

独自のNotification名を追加する場合はこんな書き方がよいような気がします。 extension Notification.Name { struct AppName { public static let DidLogin = Notification.Name(rawValue: "com.example.appname.didLogin") } } 通知名の文字列には通知名の…

CircleCIでipaファイルを作ろうとするとExport Failedする

ローカルではarchiveからipaにexportできるのにCircleCIだとExport Failedになる場合の対処法です。 原因としてはCircleCIの環境変数が悪さをしているようで、以下のをunsetすればなおりました unset BUNDLE_BIN_PATH unset BUNDLE_GEMFILE unset BUNDLE_ORI…

Visual Studio Codeをemacs keybindingにする

Visual Studio Codeを使うときにEmacs Keybindingにする方法です。 Emacs Keymap(Emacs Keymap - Visual Studio Marketplace)というのが存在するので、これを使ってみます。 Shift + Command + Xを押して拡張機能を開きます 検索窓でemacsといれるとEmacs Ke…

SwiftでKVOするときはObjective-Cのプロパティ名を使う

当たり前といえば当たり前なんですが、 iOSのKVO(addObserver(_:forKeyPath:options:context:))はObjective-CのNSObjectのメソッドなので、指定するkeyPathはObjective-Cのプロパティ名じゃないとだめです。 例えばUIViewのisHiddenをKVOしたい場合は↓のよう…