MKMapView の地図タイルをオーバーレイする

目的

  • iOS の MKMapView で表示する地図タイルを標準以外に差し替えたい(ベースタイルの変更)
  • またベースの地図タイルの上に、透明度のあるレイヤーをオーバーレイすることも試したい(範囲を示す、情報を含むタイルをベースに重ねる)

使用するタイル

今回は国土地理院のタイルを使用する。

国土地理院タイルを使用する際の注意点

国土地理院のサーバ上にある地理院タイルを、リアルタイムで読み込み表示するウェブサイトやソフトウェア、アプリケーションを製作する場合、地理院タイルは出典の明示のみで申請不要でご利用いただけます。

実際使用したタイル

MKMapView でタイルオーバーレイを使用する

タイルオーバーレイを追加する

MKMapView にオーバーレイを追加する。

// オーバーレイを作成
// Templete の URL を設定する
// z -> ズームレベル
// x -> x 方向
// y -> y 方向
let overlay = MKTileOverlay.init(urlTemplate:"https://cyberjapandata.gsi.go.jp/xyz/pale/{z}/{x}/{y}.png")

// canReplaceMapContent
// ベースタイル(タイルが不透明)ならば true 
// オーバーレイタイル(タイルに透明度がある)ならば false
overlay.canReplaceMapContent = true
overlay.tileSize = CGSize(width: 256, height: 256)

// MKMapView にオーバーレイを追加する    
mapView.addOverlay(overlay)


さらに MKMapViewDelegate の rendererFor を実装し MKOverlayRenderer を返す必要がある。

func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
  return MKTileOverlayRenderer.init(overlay: overlay)
}

タイルオーバーレイを削除する

// マップビューからオーバーレイを削除する
mapView.removeOverlays(mapView.overlays)

動作イメージ

港区台場の明治期の状態がみえる

リポジトリ

今回のサンプルのリポジトリ

備考

  • 他に無償で利用できる地図タイルには OpenStreeMap がある

『回転木馬のデッド・ヒート』(村上春樹)

回転木馬のデッド・ヒート (講談社文庫)

回転木馬のデッド・ヒート (講談社文庫)

村上春樹の短編集 / 1985年10月09日発行

収録

  1. レーダーホーゼン
  2. タクシーに乗った男
  3. プールサイド
  4. 今は亡き王女のための
  5. 嘔吐1979
  6. 雨やどり
  7. 野球場
  8. ハンティング・ナイフ

エピソードを照合する

  • 1冊を通して読むと、奇妙な連続性と反復性を感じた
  • それが何かを知りたく、気になった要素で各エピソードを表にして照合してみた
  • こう見ると直感で感じた「連続性」と「反復性」の説明がつきそうだ
エピソード 話者が女性 話者が男性 話中に男性側の不貞・情欲がある 食事を吐く
レーダーホーゼン
タクシーに乗った男
プールサイド
今は亡き王女のための
嘔吐1979
雨やどり
野球場
ハンティング・ナイフ

Git で Emoji Prefix に関してのメモ

はじめに

Git リポジトリに Emoji Prefix のコミットテンプレートを設定してみる。

Emoji Prefix を導入するメリットは

  • 絵文字とコミットが対になるので、コミットの役割が明確になる
    • バグ修正+リファクタリング+機能追加。。。など本来分割すべきコミットがごちゃごちゃ一緒になることを防げる
  • コミットログのプレフィックスに絵文字がつくため、ログの可視性が上がる
  • 明るい絵文字を使うとプロジェクトが殺伐としづらくなる作用

コミットテンプレートを用意する

今回は以下のコミットテンプレートを用意した。

commit-template.txt

# EMOJI PREFIX
# 🆙 : Version up
# ⚡️ : Add major feature.
# ✨ : Add feature.
# ♻️ : Refactoring
# 🔧 : Improve Performance
# 🐛 : Fix Bug
# 🧹 : Remove unsed feature / resource.
# 🎨 : Update resources.

リポジトリにコミットテンプレートを設定する

# config にテンプレートを設定する
$ git config --local commit.template commit-template.txt

# テンプレートが設定されているかを確認する
$ git config --local commit.template
commit-template.txt  # 問題なく設定されていた

リポジトリにテンプレートを設定する。ここでは対象範囲を local にしている。

  • config の対象範囲は以下になる。
    • local : リポジトリ単位
    • global : ユーザー単位
    • system : すべて

コミットテンプレートが設定されているか確認

$ git commit

をすると、下のようにテンプレートが表示されたので OK

f:id:daisuke-t-jp:20190824103753p:plain:w500

  • TODO
    • GitHub Desktop からコミットテンプレート使うには?

参考

Android Q is Android 10.

Android は今まで菓子の名前を使っていたが、それをやめるようだ。


First, we’re changing the way we name our releases. Our engineering team has always used internal code names for each version, based off of tasty treats, or desserts, in alphabetical order. This naming tradition has become a fun part of the release each year externally, too. But we’ve heard feedback over the years that the names weren’t always understood by everyone in the global community.

  • リリースの命名方法を変更する。
  • 従来はアルファベット順で「お菓子」「デザート」に基づいた名前にしていた。
    • この命名に関しての伝統も楽しめる部分があった。
  • しかし
    • グローバルコミュニティ全員が名前を理解している訳ではないというフィードバックがあった。

For example, L and R are not distinguishable when spoken in some languages. So when some people heard us say Android Lollipop out loud, it wasn’t intuitively clear that it referred to the version after KitKat. It’s even harder for new Android users, who are unfamiliar with the naming convention, to understand if their phone is running the latest version. We also know that pies are not a dessert in some places, and that marshmallows, while delicious, are not a popular treat in many parts of the world.

  • 一部の言語では L と R の発音の区別がつかない
  • 命名規則に慣れていないユーザが Androidバイスのバージョンを特定することが困難
  • Pie(パイ)は地域によっては「デザート」ではない
  • マシュマロはおいしいが、世界中でポピュラーなお菓子とは言えない

As a global operating system, it’s important that these names are clear and relatable for everyone in the world. So, this next release of Android will simply use the version number and be called Android 10. We think this change helps make release names simpler and more intuitive for our global community. And while there were many tempting “Q” desserts out there, we think that at version 10 and 2.5 billion active devices, it was time to make this change.

  • グローバルな OS は名前が明確であり、世界中の全ての人に関連していることが重要である。
  • したがって Android の次のバージョンは Android 10 と呼ぶ。
  • これによりグローバルコミュニティにおいても、名前がよりシンプルに、直感的になる。

LicensePlist を導入し、アプリで使用している OSS のライセンスを表示する

LicensePlist を使うと

  • iOS アプリに依存している OSS のライセンス表記をまとめることができる
  • CocoaPods も Carthage どちらも対応している

これを試してみる。

セットアップ

Homebrew 経由で LicensePlist をインストールする。

$ brew install mono0926/license-plist/license-plist


プロジェクトにルートに CarfilePodfile を配置する。 プロジェクトルートで LicensePlist を実行する。

$ license-plist 

成功すると com.mono0926.LicensePlist.Output フォルダが生成される。

原理的にはこれを Settings.bundle 直下にコピーすれば iOS の設定アプリ内で、使用している OSS ライセンスが表示されるようになる。

次に Integrate 継続的に Settings.bundle に LicensePlist の成果物ができるように Xcode の RunScript に以下を追加する。

if [ $CONFIGURATION = "Debug" ]; then
/usr/local/bin/license-plist --output-path $PRODUCT_NAME/Settings.bundle
fi

これでビルドごとにプロジェクトルートの下の $PRODUCT_NAME フォルダ下の Settings.bundle 内に LicensePlist の成果物ができるようになる。

最後に Settings.bundle 内の Root.plist を下のようにする。これをしないと、設定アプリ内にライセンス一覧の陸ができないことに注意。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>PreferenceSpecifiers</key>
    <array>
    <dict>
      <key>Type</key>
      <string>PSChildPaneSpecifier</string>
      <key>Title</key>
      <string>Licenses</string>
      <key>File</key>
      <string>com.mono0926.LicensePlist</string>
    </dict>
  </array>
    <key>StringsTable</key>
    <string>Root</string>
</dict>
</plist>

結果のスクリーンショット

f:id:daisuke-t-jp:20190823134151p:plain:w300 f:id:daisuke-t-jp:20190823134154p:plain:w300

サンプル

今回試した LicensePlist を使用したサンプルは GitHub にある。

注意点

  • LicensePlist は GitHub API を使用しているため、API 制限により時々失敗するかもしれない。その場合は license-plist コマンドにトークンを --github-token で指定すると良い。
  • Settings.bundle はあるが、設定画面に反映されない場合
    • アプリを再インストールしてみる
    • iOS を再起動してみる
    • .bundle がターゲットに含まれるかを確認する(プロジェクトのツリーにはあるが、ビルドに含まれていないと反映されない)

xxHash v0.7.1 リリース

https://github.com/Cyan4973/xxHash/releases/tag/v0.7.1

2019/8/15 にリリースされた xxHash v0.7.1 についてメモする

リリースノートを見る

このリリースは XXH3 に対しての多くのユーザフィードバックに基づいた大きな更新が入っている。

XXH3 はまだ実験段階であることに注意。安定するまでには、少なくとも2つのリリースの間、安定した状態を維持する必要がある。

そのほか一般的な改善

気になる点

  • XXH3 はまだ実験段階であり、v0.7.0 と v0.7.1 のハッシュ値には互換性がない
  • XXH3 にストリーミングが実装された

HEIC を JPEG に一括変換する

macOS であれば 下のように sips コマンドを使って HEIC -> JPEG 変換ができる

$ sips --setProperty format jpeg PIC.HEIC --out PIC.jpg


ただし、ファイル数が多いと一括で変換したくなるので Python スクリプトを作った。(内部で sipsを使用しているので macOS 専用)

使い方は下のリポジトリを clone してきて

$ git clone https://github.com/daisuke-t-jp/heic2jpg.git


以下のように HEIC があるフォルダを指定して実行。

$ python3 heic2jpg.py <HEIC があるフォルダのパス>


スクリプトが完了すると指定したフォルダの中に jpg フォルダができていて、その中に JPEG ファイルが入っている。

おわり