OSM データから POI データを抽出する

OSM データの読みだしには Overpass API というのがあり、それを介してデータを取得することができる。

手取り早くこれを試すには GUI で Overpass API を試せるサイトがあるので、これを使ってみる↓

https://overpass-turbo.eu/


この左側に以下のクエリを書く。

この例では "public_transport"="station" として、駅データを抽出しているが、条件を変更することで、いろいろなデータを抽出できるはずだ。 OSM の参考リンク

[out:json];
area["name"~"日本"];
node(area)["public_transport"="station"];
out body;


で「実行」ボタンを押すと、以下のように駅一覧が地図上にマークされる。

f:id:daisuke-t-jp:20200217224329p:plain

さらにこの結果を JSON で欲しければ、

メニューを「エクスポート」→「クエリ」と進んでいき

「OverpassQL (コンパクト) へ変換」をクリックする。

すると API にクエリがくっついた形のリンクがあるので、これを使用する。 たとえば、今回の場合だと

https://overpass-api.de/api/interpreter?data=%5Bout%3Ajson%5D%3Barea%5B%22name%22%7E%22%E6%97%A5%E6%9C%AC%22%5D%3Bnode%5B%22public%5Ftransport%22%3D%22station%22%5D%28area%29%3Bout%3B%0A

になり、駅一覧の JSON データが得られる。


プログラムやバッチ的にやりたい時は

たとえば Python の Overpass API ラッパーが用意されていたりするので、これを使うと良さそうだ。

https://github.com/mvexel/overpass-api-python-wrapper

SwiftUI の UIView を画像にして保存するサンプル

SwiftUI で UIView の内容を画像(UIImage)にして、アルバムに保存するサンプルを作った。

SwiftUI は現在の View を直接 UIView として扱うことは難しいので UIApplication 経由で UIView を取得する感じになる。

extension UIView {
    
    func image() -> UIImage {
        let renderer = UIGraphicsImageRenderer(bounds: self.bounds)
        
        return renderer.image { rendererContext in
            layer.render(in: rendererContext.cgContext)
        }
    }
    
}

extension UIApplication {
    
    static func image() -> UIImage? {
        guard let rootViewController = shared.windows[0].rootViewController else {
            return nil
        }
        
        guard let view = rootViewController.view else {
            return nil
        }
        
        return view.image()
    }
    
}

SwiftUI(iOS 13.3) / ScrollView 上に配置した List の項目選択が残る問題

SwiftUI iOS 13.3 で

  • ScrollView 上に List を配置する
  • その List から NavigationLink で遷移する

を試すと、項目の選択が残ったままになる。

再現させる最小限のサンプルを GitHub においた↓

iOS 13.2 の時点で発生していたんだけど、 iOS 13.3 になっても変わらず。。。

困ったもんだね。




似たような問題が StackOverflow でも上がっていた↓

非税理士が申告書などを作成するソフトを開発、販売することは禁止されているか?

税理士の業務は、独占業務なので、非税理士が事務をすると違法になる場合がある。

では、ソフトウェア・アプリで税理士に関連したものを開発するとどうなるのか?




https://www.nta.go.jp/taxes/zeirishi/zeirishiseido/ihan/qa02.htm

問2-3 他人の求めに応じ、業として、申告書等の作成ソフトを開発又は販売することは、非税理士により行うことが禁止されている税理士業務に該当しますか。 答 非税理士が申告書等の作成ソフトを開発又は販売することは、非税理士により行うことが禁止されている税理士業務のいずれにも該当しません(問2-1参照)。 【参考法令等】

法第2条、第52条

大丈夫そうである。

SwiftUI で iOS アプリを個人開発&ストアに公開した

2019年に Apple から SwiftUI が発表された。

今回、その SwiftUI を使ってアプリを開発&ストアに公開までしたので、実際 SwiftUI 使ってみての感想などをメモする。

公開した iOS アプリ

公開したアプリは以下である。

複雑で難易度が高いアプリだと SwiftUI も慣れていないため、挫折しそう。。
なので、ある程度やりやすそうな題材を選んだ。

最初、審査に提出したら内容がコンパクトすぎたのか、Minimum Functionality でリジェクトされた。。

その後、すこし機能追加して、無事審査は通った。

SwiftUI の初期印象

最初に触ったみた SwiftUI の印象

  • あくまでも UI を記述するたの機構
    • 今までの Swift コードの View, ViewController にあたる部分が SwiftUI で書き換えれるイメージ
  • SwiftUI は Swift 固有の言語(DSL:domain-specific language)であるので Swift とは別に学習が必要であり、すこしとっつきにくい
  • UI コンポーネントの名前が UIKit と微妙に変わっていてややこしい
    • UITableView -> List
    • UISwitch -> Toggle
  • データフローまわり、よくわからない・・・
  • SwiftUI を使うと iOS 13 以降が対象になる -> なんか未来感があってイイ

よく理解できず、これでアプリが作れるんだろうか? という不安を感じた。

SwiftUI チュートリアルで学ぶ

まず公式のチュートリアルは鉄板なので、動かしてみてみる。

このチュートリアルをみていくと、アプリをつくるために必要な

  • NavigationView (画面遷移)
  • List(UIKit でいえば UITableView)
  • Environment (アプリ全体でつかうデータ)
  • @State (UI で変更した値と連動)

などの要素を学べる。

このチュートリアルで基礎を学んだら、いろいろ自分で、こういうのは SwiftUI でどう実現するのかな? という題材をつくり、トライして理解度を高めてゆくとよい。

SwiftUI サンプルを作って理解度を高める

いろいろサンプルを作って、動作を確かめていく。
私は以下のサンプルを作って試した。

参考になった情報

マネーフォワードさんが SwiftUI で実際にアプリをリリースした時の記事。

SwiftUIの大変なところ 現状のSwiftUIには様々なバグや不足しているAPIなどまだまだ残っているなという印象です。

先行していろいろ試している方の記事を読んで「諦めが肝心」というマインドを得た。


こちらのリポジトリには、まとまった SwiftUI コードがあって、実装の上で大変参考になりました。
Appleチュートリアル以外で、ある程度の規模がありながら、動作する SwiftUI のコードは貴重である)

感想

アプリを開発/公開したり、いろいろ調べた結果
2020/1/7 現在、SwiftUI でアプリ開発することはまだ辛いな、という印象。

以下、理由

一方で

今は SwiftUI そのものが改善されていくのを日々体験できる、という特別感があり、今後行き先はどうなるのか、楽しみではあります。 (Swift は OSS ですが、 SwiftUI は Closed な Apple 感があるような気がしますね)

複数の SVN ワーキングコピーの内容を最新に保つ

SVNGUI クライアント(たとえば TortoiseSVN)を使うと、簡単に SVN 操作をできる。
しかし、複数の SVN ワーキングコピーに対して一括で操作したい場合、ひとつひとつ手作業をすると手間になる。


具体的には複数の SVN ワーキングコピーに対して、以下を実行したい

  • ワーキングコピーがある場合は svn update でワーキングコピーを更新する
  • まだワーキングコピーがない場合は svn checkoutSVN リポジトリをチェックアウトする
  • update/checkout 時にエラーが発生したら svn cleanup をする


この問題に対応するために Python スクリプトを作成した。
https://github.com/daisuke-t-jp/svn-working-copy-updater

詳しい使い方は上記 GitHub の README.md を参照すること。




ところで

このスクリプトをテストするにあたり、現在まだ commit が継続されている現役の複数の SVN リポジトリを探すことに難儀した。
2019年現在、 やはり Git が主流(というかほぼ全て)になり、SVN でメンテナンスしているプロジェクトは少なくなった。

探した結果、Apache はまだ現役で SVN を使って複数のプロジェクトのバージョン管理をしているので、今回はそれをテストに使用した。

https://svn.apache.org/repos/asf/

subversionhttpd などがメンテナンスされていることが確認できる。


Apache 以外だと大きいところでは gccSVN 管理されている。(GitHub にある gcc リポジトリは mirror である)

https://gcc.gnu.org/viewcvs/gcc/