2017年も安定して使い続けているもの10選
年の瀬ですね。この時期は◯◯年購入してよかったものというブログ記事がたくさん投下されますが、流行り廃りのありそうなものよりも長く使えるものを紹介してほしいと思うのは私だけでしょうか。というわけで長く使っているものを棚卸ししました。
続きを読むGoogle Maps の行動ログを抽出する
Google Mapsには行動ログを残すオプションがあります。正式名称はタイムラインで、これをオンにしておくと行動・滞留・滞在等の状態をよしなに判断して行動の履歴を残してくれます。
タイムラインをオンにする方法はこの辺を参考にしてください。で、このログはJSON形式でエクスポート出来ます。
タイムラインのエクスポート
Googleの各種サービスはtakeout.google.comからエクスポートできます。ブラウザで自分のアカウントにログインした状態で以下のURLにアクセスしてみてください。
https://takeout.google.com/settings/takeout
タイムラインの情報は比較的下の方にあります。「ロケーション履歴」の項目のみにチェックを入れて次に進みます。
ファイル形式、サイズ等の選択画面が出てきますのでいい感じに設定します。「アーカイブを作成」を押すと準備画面に遷移し、終わればダウンロードが始まります。
takeout-hogeのファイルを開くとJSON形式のログを見ることができるはずです。あとはこれを加工・編集するとGISデータとして使うことができますね。
Pythonを使ってZIPファイルを解凍する
ZIPファイルの解凍作業は面倒くさいです。なのでPythonを使ってZIPファイルを解凍しましょう。動作環境はPython3.6以上推奨。標準ライブラリだけでやっていきます。
1つのZIPファイルを解凍
フォルダ内のZIPファイルをまとめて解凍
階層構造が複雑なフォルダのZIPを解凍
1つのZIPファイルを解凍
os、zipfileを使います。最も基本的な処理なので、2・3の操作でもこれを使いまわしていきます。わからなければここに立ち返りましょう。
import os import zipfile with zipfile.ZipFile('sample.zip', 'r') as zf: for f in zf.namelist(): if not os.path.basename(f): os.mkdir(f) else: with open(f, 'wb') as uzf: uzf.write(zf.read(f))
複数ファイルを圧縮したZIPの場合を考慮し、os.path.basenameを使って条件分岐をかけています。これが基本。
フォルダ内のZIPファイルをまとめて解凍
globを使ってzipファイルを探し、個々に解凍処理を行います。上でやった処理にforをかけて回す感じです。
import os import zipfile import glob for i in glob.glob('*.zip'): with zipfile.ZipFile('i', 'r') as zf: for f in zf.namelist(): if not os.path.basename(f): os.mkdir(f) else: with open(f, 'wb') as uzf: uzf.write(zf.read(f))
これで作業ディレクトリ上に解凍されたファイルが生成されます。
階層構造が複雑なフォルダのZIPを解凍
これは以下のような状況で使います。稀に良くあります。
globを使ってzipファイルを探しに行きますが、今回は再帰的にディレクトリを深掘りしていくように指定します。
import os import zipfile import glob for i in glob.glob('**\*.zip', recursive=True): with zipfile.ZipFile('i', 'r') as zf: for f in zf.namelist(): if not os.path.basename(f): os.mkdir(f) else: with open(f, 'wb') as uzf: uzf.write(zf.read(f))
この処理だと作業ディレクトリに解凍ファイルが作成されます。各々のディレクトリ下に解凍ファイルを置きたい場合には、os.path.splitを使うと良いでしょう。
import os import zipfile import glob for i in glob.glob('**\*.zip', recursive=True): with zipfile.ZipFile('i', 'r') as zf: for f in zf.namelist(): d = os.path.split(i)[0] + '\\' + f if not os.path.basename(f): os.mkdir(d) else: with open(d, 'wb') as uzf: uzf.write(zf.read(f))
os.path.splitはなかなか便利なモジュールで、ファイルパスを食わせるとディレクトリ部分とファイル名に切り分けてくれます。
第一引数からディレクトリパスを持ってきて、そこに解凍後のファイル名を繋げています。
これで単純作業が減らせますね。
参考
Estimote社のBeaconについて調べた
Beaconを使った屋内測位、センサーデータ収集をやってみたいのでEstimote社から機器を取り寄せようかと思っています。現在EstimoteのBeaconは5種類あり、内屋内測位に使えそうなものが2種。他の3種はちょっと特殊な用途で使う用みたい。
ロケーションビーコン(Location Beacon)
定点設置型で位置情報を取得するビーコンには二種類あり、公式ページでは『Location UWB Beacon』と『Location Beacon』という名前になっています。
この2つの違いはAutoMappingかManualMappingかという点。Location UWB Beaconは専用のiPhoneアプリを使って建物の地図を生成できるようです。Location Beaconはその機能を持たず、自身で地図を生成する必要があるようで。
ともにバッテリーは5年もつとのことなので、一度設置をすると暫くは放置で大丈夫。非公式ではありますが電池交換も出来るみたいですね。
How To Change Estimote Beacon Battery
ステッカービーコン(Sticker Beacon)
上の2種は三角測量で端末の位置をとってくるのに対して、このステッカービーコンは貼ってあるモノの電波を受けて場所を特定します。ステッカーを貼った自転車が特定の場所に入ったときに信号を飛ばすような用途で使用できるため、常に位置を取れるわけではありません。
んで何を買うか
今回はLocation UWB Beaconを購入してみます。2014年時点では技適が無く、国内では使えない状態でしたが、どうやら最近のBeaconは技適とってるみたい。アプリを使った地図作成も気になるのでUWBの方を輸入して遊びます。
ちょっと却下。UWB Beaconで屋内地図作るには結構な数のBeaconを設置しないと駄目っぽい。自宅のCADデータ使って地図を作って、Location Beaconで動態分析するところから始めます。
来月は引っ越しを控えてるんで、できるだけ早く届いてほしいなあ。
音声読み上げ機能(iPhone)を使って効率的に読書する
KindleやReader Storeで電子書籍を買っておくといつでもどこでも読書ができます。
電車の待ち時間や休み時間で読書が捗る一方で、とうぜんのこと運転中は使えません。不便はしてなかったものの、娘が生まれて読書量も減って来た最中、こんな発言を見かけまして。
iPhone自動読み上げ機能+Kindleはたいへん便利でよく使うのだけども、読み上げ能力にはまだ問題が多い。たとえば書籍に画像があるとスキップせず止まってしまったり、坂本龍馬をリュウマと読んだり、掌に「てのひら」とルビがふってあるのにタナゴコロと読んだり、など。
— 平川哲生 (@bokuen) 2017年8月4日
そういえばiPhone、Androidには音声読み上げ機能があったじゃん。これを使えば電子書籍を音読させることもできんの?と言う感じでやり方を調べた次第です。使ってみるとかなり便利なんで、皆さま色々活用してみませんか。
続きを読むコマンドプロンプトとpg_dumpを使ってデータベース単位でのバックアップを取得する
前のエントリの続きです。
コマンドプロンプトでデータベースの一覧を取ってきたのは、データベース単位でダンプしたいからでした。PostgreSQLにはpg_dumpallという全バックアップの方法があるんですが、個別のデータベースを復旧させたい(それ以外のデータベースに影響を与えたくない)という状況には向いていません [^1] 。
先のエントリで取ってきたデータベースのリストを使い、個々のデータベースごとにバックアップファイルを作ります。
続きを読む