Javascriptで連想配列にキーが存在するかチェックする方法
連想配列にキーが存在するかチェックしたい時やりがちな判定
var map = {"key": 0}; if (map["key"]) { // "key"がmapに存在する }
でも、これだと if (0)
となるためkeyが存在するのにfalseとなる。
そこで以下のようにするのが正しい
var map = {"key": 0}; if ("key" in map) { // "key"がmapに存在する }
jQueryで親要素へのイベント伝播を防ぐ
jQueryでクリックイベントを設定する際、以下のように子要素と親要素両方にイベントを設定すると、子→親の順にイベントが走る。
これを イベントバブリング
と呼ぶらしい。
<tr> <td>Test</td> <td>
jQuery(function($) { $('tr').click(function(e){ alert('tr click'); }); $('td').click(function(e){ alert('td click'); }); });
子要素のイベントだけ発生させ、親要素のイベントは発生させたくない。そんなときは stopPropagation()
を使うことで、子から親への伝播を止めることができる。
jQuery(function($) { $('tr').click(function(e){ alert('tr click'); }); $('td').click(function(e){ alert('td click'); // 親へのイベントの伝播を止める e.stopPropagation(); }); });
こんな感じで。
iOSデバイスにiOS12ベータ版を入れる方法
公式見れば全部書いてあるけど一応備忘録として。
- アップデートしたいiOSデバイスから https://beta.apple.com/profile このURLにアクセスする
- ページ中程にある
プロファイルをダウンロード
ボタンを押す - Appleデベロッパーアカウントでログインするとプロファイルが自動でダウンロードされる
- ダイアログが表示されるので、インストールすることを許可して端末再起動
- このタイミングではiOS12へのアップデートはまだ終わっていなくて、
設定->一般->ソフトウエア・アップデート
を見るとアップデートの進捗が確認できる。終わるまで待つ。 - 終わったら同じ画面内に
今すぐインストール
みたいな表記が出るので、タップしてインストール。終わり
当然、iOS12サポート対象端末じゃないといけないので注意。
Navigation Architecture Component を使えるようにする
Google I/O 2018 でAndroid Studioの新機能、Navigation Architecture Componentが発表されました。
どうやらXcodeで言うところのStoryBoardのようなものらしいです。iOS開発をしたことがないので一つもピンときていません。
とりあえず、Navigation Architecture Componentを使えるようにするところまでやってみたいと思います。
1. Android Studio 3.2をインストールする
2. build.grade
の dependencies
更新
プロジェクトを作成し、 build.grade
の dependencies
に以下の記述追加
def navigationVersion = '1.0.0-alpha05' implementation "android.arch.navigation:navigation-fragment:$navigationVersion" implementation "android.arch.navigation:navigation-ui:$navigationVersion"
- バージョンは現時点のものなので、都度最新を確認してください。
3. Android StudioのNavigation Editor機能を有効にする
Android Studio > Preferences
(windowsの場合はSettings
) からExperimental
を選んでEnable Navigation Editor
にチェックを入れる
4. Navigationファイルを作る
- Navigationファイルというものを作って、その上にポンポンとレイアウトを配置していくイメージのようです。
- Android Studioの
res
ディレクトリ上で右クリックし、New > Android Resource File
を選択します。 - リソース作成ダイアログが表示されるので、ファイル名適当、
Resource type
をNavigation
にしてOKボタンを押します。Navigation
が選択肢にない人は手順3の設定見直してAndroid Studio再起動したら出てくるかもしれないです。Root element
とDirectory name
はデフォルトでいいです。
- OKボタンを押すと
res
配下にnavigation
ディレクトリが作成され、その中に先ほど指定した名前でNavigationファイルが作成されています。
これでNavigation Architecture Componentを使う準備が整いました。 Navigation Architecture Componentの使い方については追々記事にしていければと思います。
参考 Implement navigation with the Navigation Architecture Component | Android Developers
iPhoneで開発サーバーにのみ繋いでインターネットには接続させない方法
背景
自社サーバーには繋がっているけど他社のAPIサーバーには繋がっていない状況を作り出してテストしたい、なんてことがありました。
解決方法
結論から書くと、開発マシンにプロキシサーバーを立てて、iPhoneからそのプロキシサーバーを経由してネットワークアクセスさせました。 ※開発マシンはmacの想定
手順
- Squid をインストールする
- プロキシサーバー立てることができるソフト
- brewで簡単インストール
brew install squid
squid.conf
っていう設定ファイルあるけど、今回の用途だとデフォルトで問題なしbrew services start squid
で起動
- iPadでプロキシ経由するよう設定
- wifi設定から設定可能、調べればすぐわかる
- 各々、アプリ内のAPI接続先を開発マシン上のサーバーに設定しておく
おしまい。
これで開発マシン上で公開しているAPIサーバーには繋がるけど、インターネットには繋がらない状況を作り出せます。
Vagrant upでのエラー
Vagrant up
したときに
Vagrant was unable to mount VirtualBox shared folders. This is usually because the filesystem "vboxsf" is not available. This filesystem is made available via the VirtualBox Guest Additions and kernel module. Please verify that these guest additions are properly installed in the guest. This is not a bug in Vagrant and is usually caused by a faulty Vagrant box. For context, the command attempted was: mount -t vboxsf -o uid=1000,gid=1000 vagrant /vagrant The error output from the command was: /sbin/mount.vboxsf: mounting failed with the error: No such device
上記のようなエラーが発生することがある。
これは、ホスト側のVirtual BoxのバージョンとBoxにゲスト側にインストールされているVirtualBox Guest Additionのバージョンが異なるため発生している場合があり、vagrant-vbguest
を実行することで解決できるようです。
まずはvagrant-vbguest
のインストール
vagrant plugin install vagrant-vbguest
vbguest実行
vagrant vbguest
これでvagrant up
してもエラーが出なくなるはず。