【読書】死に山 世界一不気味な遭難事故《ディアトロフ峠事件》の真相

死に山: 世界一不気味な遭難事故《ディアトロフ峠事件》の真相

死に山: 世界一不気味な遭難事故《ディアトロフ峠事件》の真相

去年の秋頃ネットで話題になっていてすぐ買ったが結局読まなかった本。最近部屋を掃除していたら発見したので読んでみることにした。そして読み終わった日にヤフーニュースに本事件のことが載っていてタイミングの良さに驚いた。なんでかなと思ったが事件が起きてからちょうど60年が経ったからだった。

本書の題名になっている「ディアトロフ峠事件」とは、1959年ロシア西部の極寒のウラル山脈で起きた遭難事件で、登山経験豊富な9人全員が犠牲になった。9人全員が安全なテントから1kmも離れたところで発見された。
雪山にも関わらず全員靴を履いておらず、あるものは頭蓋骨骨折、あるものは舌が喪失、あるものは衣服がずたずたにされ、衣服から高濃度の放射線が検出された。そして当時の警察による最終報告書は「未知の不可抗力によって死亡」と結論づけられた。
このような奇妙の状況のため事件当初から現在まで様々な事故原因が考えられた。雪崩説、強風説、現地少数民族の攻撃、ソ連軍や脱獄囚による攻撃、旧ソ連の兵器実験の影響、UFO説など。
筆者はこの奇妙な謎に魅せられ、関係者への取材や事件現場となった冬の「ディアトロフ峠」の登山を通じて、考えられる最も現実的な事件を真相を説明する。というのが本書の概要である。

本書の構成は、犠牲となった9人の若者の登山道中の様子、遭難後救助に向かった捜索隊の様子、そして筆者の調査、これら3つの話が章ごとに変わっていくスタイルで、読み進めていくと事件の様相がよくわかってくる。それだけでなく、9人(正確にいうと10人)の登山隊の人物像や登山中の様子、雪山の寒さ・暗さ・怖さなどの情景がありありと伝わってきて、ただの謎解き本で終わってないところが本書の面白さだと思う。
もちろん本事件の真相についても面白い。最後の章に筆者が唱えた仮説のもと、事件発生時の9人の登山家の行動を描いている。読んでみて違和感はなく、確かにそうだったのかもな、と納得した。事件の真相ググったら分かってしまうが、本を通しで読んでいった方が納得するのではないかなと思う。

Markdownエディタ「Typora」が良い感じ

最近Markdownを書く機会がちょこちょこある。
シンプルで書きやすいし、きれいに書けるなあと思う半面、プレビュー画面が別というのがストレスだった。

何かこう、ワードやパワポみたいにデザインがそのまま見えるようなエディタがあったらいいなあと思っていたら、ありました。

それがTyporaでした。

typora.io

markdown エディタ」で検索中、下記記事を発見。

msyksphinz.hatenablog.com

この記事を読んでこれだ!と思いすぐインストールした。
すべては上記事に書いてあるが、Typoraの良い点は、

  • 編集画面とプレビュー画面が同一。
  • UIがシンプルで美しい。

というところ。

どんどん使っていきたいと思う。

逆問題について勉強する

数年前から逆問題について興味があり勉強してみたいと思っていた。

逆問題とは、結果(計測データ)から原因(モデル)を推定する問題のこと。病院で使われるCTスキャンが分かりやすい例で、CTは直接は見えない体内の様子(モデル)をX線を周囲から照射して得た計測データを解析することで体内の様子を可視化している。

先日本屋でぶらぶらしていたところ面白そうな逆問題に関する本を見つけた。

応用例で学ぶ逆問題と計測

応用例で学ぶ逆問題と計測

この本は基礎編と応用編に分かれている。基礎編では逆問題の概要と逆問題を解析するために必要な数学について説明され、応用編では拡散・波動・個体変形という代表的な3つ物理現象についてそれぞれ逆問題を設定し、どのように解析していくかを解説している。

基礎編と応用編のバランスがよさそうで応用例も面白そうだったので購入し、少しずつ読み進めていくことにした。

勉強していったことをメモとして残していきたいと思う。

Google Maps API をローカル環境で使う際のAPIキーの利用制限について

Google Maps APIAPIキーを取得したらAPIキーの利用制限をする必要がある。制限をかけないと、他の人にAPIキーを自由に使われてしまい、無料の割り当て量がすぐに超えてしまう可能性があるからだ。

とりあえずローカル環境でAPIを使ってみようと思ったときに、どうやってAPIキーの利用制限をするか試行錯誤したのでまとめておく。

なお、OSはWindows10を使用。

ローカルのファイルパス(file:///)の登録

file:///__file_url__//と書き換えてURLを入れればOK。

やり方がわからず色々調べていたが公式ドキュメントに載っていた。

例えば、C:/Users以下のファイルを登録したい場合は下図のようにワイルドカードである「*」を使い__file_url__//C:/Users/*と書いて保存すればよい。

APIキーの制限にファイルパスを登録する場合

WEBサーバーのローカル環境(localhost)の登録

Apacheでwebサーバーを立ち上げた場合、http://localhost/*と入力すればOK。

APIキーの制限にローカルのwebサーバーのパスを登録する場合

APIを使ってみる

公式ドキュメントにのっているコードを使う。
取得したAPIキーはscript要素のYOUR_API_KEYのところに入れる。
マップの表示位置を変える場合は、initMap関数のlatとlongの数値を変えればよい(コードでは東京駅付近の緯度経度を設定)。

<!DOCTYPE html>
<html>
  <head>
    <title>Simple Map</title>
    <meta name="viewport" content="initial-scale=1.0">
    <meta charset="utf-8">
    <style>
      /* Always set the map height explicitly to define the size of the div
       * element that contains the map. */
      #map {
        height: 100%;
      }
      /* Optional: Makes the sample page fill the window. */
      html, body {
        height: 100%;
        margin: 0;
        padding: 0;
      }
    </style>
  </head>
  <body>
    <div id="map"></div>
    <script>
      var map;
      function initMap() {
        map = new google.maps.Map(document.getElementById('map'), {
          center: {lat: 35.681, lng: 139.765},
          zoom: 17
        });
      }
    </script>
    <script src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap"
    async defer></script>
  </body>
</html>

無事ローカル環境でマップの表示ができました!

Google Maps APIを使ってマップを表示

GoogleマップのAPIを使うためにGoogle Cloud Platformに登録してみた

GoogleマップAPIを使ってみたいなと思い調べてみると、Google Cloud Platform (GCP) にクレカ情報を登録してAPIキーを取得しないといけないことが分かった。

そもそもAPIというものを使ったことがなく、GCP??という感じの全くの初心者だが、とりあえずGCPを使ってみることにした。

参考になったサイト

nendeb.com

基本的に上記のサイトをの通りに進めていったらAPIキーの取得までできた。

 

悩んだ点

上記サイトの「APIと認証情報の設定方法」という項目で「Maps JavaScript API」を有効にして新しいAPIキーを作成しているが、サイトの手順通り最初からやっていると「Maps JavaScript API」はすでに有効になっているし、そもそもAPIキーはすでにできている。そして他の(16個?)のAPIも有効になっており、これはちゃんと設定できているのか??と不安になった。

しばし考えたが、別に最初に作られたAPIキーをそのまま使って問題ないと思われる。とりあえずサイトに合わせて「Maps JavaScript API」以外に有効になっていたAPIをすべて無効にしたが、別に無効にしなくてもよさそう。認証の「アプリケーションの制限」のところで使うAPIを選べばよいと思われる。

そして「アプリケーションの制限」の「HTTPリファラー」のところは結構悩んだ。これは別記事に書こうと思う。

とりあえず、GCPに登録してAPIキーを取得という目標を達成したので良かった。

 

 

 

ラズベリーパイ3でサーボモーターSG90を使ってみた

リーズナブルでよく使われていそうな「SG90」というサーボを買ってラズパイで動かしてみた。
標準入力で角度を指定すると、サーボがその角度動くようにしてみた。
割とすんなり動いて感動しました。

デジタル・マイクロサーボ SG90 (5個)

デジタル・マイクロサーボ SG90 (5個)

SG90とラズパイの配線

ラズベリーパイ3とSG90の配線

上図のように配線した。サーボ制御用のPWM出力のピンをBCMの17番にしている。

ラズパイのGPIOからサーボを直接駆動させるとラズパイに良くないみたいな記事があった気がする。理由は理解できていないが、モータードライバを介してサーボを動かした方がよいかもしれない。(本プログラムでサーボは動くが、動かすとガタガタする。)

サーボの角度制御

SG90のデータシート

秋月にのっていたSG90のデータシートより引用

SG90のデータシートによると、50HzのPWM信号に設定した場合、デューティー比とサーボの角度の関係は、

  • 0.5ms (デューティー比1%)   ⇒ -90°
  • 1.45 ms (デューティー比2.9%)  ⇒ 0°
  • 2.4 ms (デューティー比4.8%)  ⇒ 90°

のようになっている。

デューティー比とサーボの角度は比例関係なので、動かしたいサーボの角度をX[deg]とすると、それに対応するデューティーサイクルY[ms]は以下の式で求まる。

Y = (12-2.5)/180*(X + 90) + 2.5

ラズパイにこの値を渡せば、サーボを動かすことができる。

サーボを動かすプログラム

標準入力でサーボの角度を指定して、サーボを動かせるようにしてみた。while文を使い、繰り返しサーボを動かせるようになっている。endを入力すればサーボは止まる。

動かすと少しガタガタするが、指定した通りの角度にサーボが動く。
次はモータードライバを使って動かしてみたい。

import time
import RPi.GPIO as GPIO
import sys  # 引数取得

# pin number
PIN_servo = 17   # for servo

GPIO.setmode(GPIO.BCM)      # GPIOへアクセスする番号をBCM番号で指定することを宣言
GPIO.setup(PIN_servo, GPIO.OUT)     # 出力ピンに設定

# servo setup
servo = GPIO.PWM(PIN_servo, 50)
servo.start(0)

# サーボの角度を初期化(0degにする、とりあえず)
time.sleep(0.5)
servo.ChangeDutyCycle(7.25)
time.sleep(0.5)

# servo -90deg <= x <= 90deg
# -90deg -> 0.5ms, 90deg -> 2.4ms (from spec. sheet)

# whileで繰り返し処理
while True:
    # 標準入力によりサーボの角度を指定
    print('サーボの角度(-90~90deg)を指定してください。endを入力すると止まります。')
    input_num = input('>')

    if input_num != 'end':
        # サーボを動かす
        move_servo_msec = (12-2.5)/180*(int(input_num) + 90) + 2.5 
        servo.ChangeDutyCycle(move_servo_msec)
        time.sleep(0.5)
    else:
        break

# while文抜けたらサーボストップ
servo.stop()
GPIO.cleanup()

写真データのメタデータ Exifについてのメモ

写真に入っているGPS情報を抽出したいなあと思いExifについて調べたのでメモっておく。

Exif (Exchangenable image file format) とは

Wikipediaによると以下の通り。

富士フイルムが開発し、当時の日本電子工業振興協会 (JEIDA)で規格化された、写真用のメタデータを含む画像ファイルフォーマット。デジタルカメラの画像の保存に使われる。

 デジタルなカメラで撮影したデータには、そのデータの属性情報が色々含まれるということ。

これもWikipediaに載っていたものだが、例えば、

「撮影日時・メーカー名・画像の解像度・撮影方向・シャッター速度・F値ISO感度焦点距離GPS情報・サムネイル(160x120)」

など色々な情報が記録される。

 

PythonExifに含まれるデータを取得するには

今後pythonでデータ抽出してみようかなと思っていたので調べてみた。

まだ試していないが、画像処理ライブラリのPillow (PIL)を使えば比較的簡単にできそう。

以下参考サイト

 

その他Exifを確認する方法(Windowsを対象)

お手軽な方法

写真データを右クリックして、「詳細」タブ内にExifデータがある。Exifデータの削除もできる。

 

ソフトウェア(Exiftool)を使用

色々なフリーソフトがあるが、「ExifTool」は使いやすく、おそらくExifの全情報を表示してくれる。

作者のサイト(ExifTool by Phil Harvey)からファイル一式をダウンロードして、exeファイルに写真ファイルをドラッグ&ドロップすると、その写真データのExifデータ一覧が画面に表示される。便利である。

 

WEBアプリケーションを利用

試していないが、「Exif確認君」(http://exif-check.org/)、「Exifチェッカー」(https://lab.syncer.jp/Tool/Exif-Checker/)など色々ある。

 

とりあえず、以上の方法でExif内の情報を調べることができそう。
WEBアプリはどういう仕組でできているのか気になるところ。面白そうだ。