NEW XPS 13(9370) の紹介

DELL XPS体験モニターとして届いた NEW XPS 13(9370) について、届いた製品を紹介します。
このポストは DELL アンバサダーへの参加記事です。

スペック

まずは届いたパソコンのスペックを置いておきます。
実際購入する場合には用途に応じたスペックになると思いますが届いたものは最高クラスのものでした。

NEW XPS 13(9370)
CPU Core i7-8550U
メモリ 16GB
ストレージ SSD 1TB
モニタ 13.3インチ 4K(3840x2160)(タッチパネル)

インターフェイス

外部機器の接続などをするインターフェイスは USB-C が3機(左側2機、右側1機)、セキュリティケーブルスロット、microSDスロット、ヘッドセットジャックがあり、AC 電源は USB-C を使って接続するタイプです。
USB-C のみになっているため、USB-C から USB-A に変換するケーブルが1本付属しています。

電源のアダプタは非常にコンパクトにできていますが、AC アダプタとコンセントを繋ぐケーブルは割としっかりしたケーブルになっているため、アダプタごと持ち運ぶ場合は少し場所を取るかもしれません。

アダプタに関してデメリットに感じる方もいるかもしれませんが、 XPS 13(9370)の公称バッテリ駆動時間は19時間46分(FHDディスプレイの場合)となっているため、通常の外出ではアダプタが必要になる場面は少なそうなので問題なさそうです。

サイズ・ディスプレイ

以前から XPS 13 という名前のついている機種は13インチノートパソコンの中でも小さい部類でしたが、今回の 9370 モデルではディスプレイの額縁が狭くなりフットプリントが小さくなっています。
ディスプレイの額縁は以前の5.2mmから4.0mmへ、本体の厚さも以前の最薄部9~15mm程度だったものが7.8~11.6mmになり持ち運びがさらに楽になっています。
本体も外側が金属ボディになっているため荷物の多いバッグに入れても安心できそうです。

f:id:k-side:20180625205201j:plain
ディスプレイ額縁は4mm

この機種はタッチパネルを採用しているにも関わらずディスプレイ部も厚くならず薄さを保っています。
ディスプレイも発色が綺麗でしたが、やや輝度が高く感じました。もちろん設定で下げてあげれば問題ないレベルにできます。

4Kディスプレイで高精細な表示が可能です。Windows のスケーリングを100%で使うとアイコンなどが非常に見にくくなりますが、初期状態で Windows 10 の推奨値300%になっていて、必要に応じてスケーリングを変更できます。今回はスケーリング 225% で使用したところ使いやすい表示になりました。

キーボード・タッチパッド

キー配列はほぼ一般的なキー配列と言って良いのではないでしょうか。輝度や音量調整のキーとファンクションキーが一体になっていてそのまま押すと音量調節などの機能を使うことができ、Fn キーとのセットでいわゆるファンクションキー(F1など)を利用できます。左右カーソルの上側にPageUp、PageDown がありますが、ファンクションキーの挙動なども含めて既に「一般化」していそうな部類のものです。

本体も薄いため、キーボードのタイピング感が心配でしたが打ちやすい作りになっています。適度な反発のためか。普段会社で使っているワイヤレスキーボードよりも打ちやすく静かな印象です、。
1.21kgほどの本体ですが、タイピング中も安定感があり打ちやすくなっているのかもしれません。

モニター機は日本語キーボードでしたが販路によって(DELL 公式からとか) US キーボードを選択できます。

タッチパッドは高感度で思ったとおりに動いてくれます。製図や 3D データをグリグリ編集するような用途でなければ非常に使いやすいものになっています。

Windows Hello

Windows 10 のサインイン機能 Windows Hello 対応の指紋認証と顔認証用赤外線カメラが付いています。

指紋認証は電源ボタンと一体化していて電源オンからスムーズにログインできます。

f:id:k-side:20180625205018j:plain
電源ボタンと一体化している指紋認証(DELETEキーの右側)

顔認証はヒンジの付け根部分中央についていて、真ん中に DELL の文字、文字の下にカメラ、カメラの外側に赤外線認証が付いています。
Windows Hello の設定で顔を覚えさせて使います。登録時には PC メガネなしで登録しましたが、認証時に PC メガネをかけていても大丈夫でした。この辺は環境やメガネによって変わるかもしれません。

f:id:k-side:20180625205140j:plain
顔認証デバイス(フラッシュが映り込んでる…)

使った感じはまた別の記事で。

Zabbix API を使ってホストを無効化する

会社から自宅の Zabbix に登録されたホストの監視を無効化しました。

自宅にあるファイルサーバーを停止させるにあたって、Zabbix での監視を無効化しておかないと Slack にアラートが飛んできてしまうのでサーバーの停止の前に監視を無効化させます。
みんな大好き curlAPI を呼んでいます。

API の詳細は公式ドキュメントで → 19. API [Zabbix Documentation 3.4]

なお、この方法で無効化した後に「VPN で繋がるならポートフォワーディングでブラウザからフロントエンドにアクセスできんじゃね?」ということに気づいてしまい、設定してみたら繋がっちゃいました、ぐぬぬ

ログインしてアクセスキーを取得する

ログイン情報を環境変数に入れてアクセスキーを取ります。

$ export ZABBIX_URL=%ZabbixフロントエンドのURL%
$ export ZABBIX_USER=%Zabbixユーザー名%
$ export ZABBIX_PASSWD=%Zabbixユーザーのパスワード%

curl にこんな風な JSON を渡します。

{
  "auth":null,
  "method":"user.login",
  "id":1,
  "params":{
    "user":"${ZABBIX_USER}",
    "password":"${ZABBIX_PASSWD}"
  },
  "jsonrpc":"2.0"
}

帰ってくるアクセスキーも環境変数に入れたいので最終的に curl はこんな感じで実行しました。

$ export API_KEY=`curl -k -d "{\"auth\":null,\"method\":\"user.login\",\"id\":1,\"params\":{\"user\":\"${ZABBIX_USER}\",\"password\":\"${ZABBIX_PASSWD}\"},\"jsonrpc\":\"2.0\"}" -H "Content-Type: application/json-rpc" ${ZABBIX_URL}/api_jsonrpc.php | sed -e "s/^.*\"result\":\"\([^\"]*\)\".*$/\1/g"`

こちらを参考にしています→ zabbix-apiにcurlでログインする | CloudAdvisor

ホスト一覧を取得する

ホストに関する APIを見ると host.get でホストの情報を取得して host.update で状態を変更すれば良さそうです。
host.get した時に返ってくるホストの情報は Host object に出ています。内容は英語ですがページ翻訳すればだいたい大丈夫。host.update を見ると host.update で無効化したいホストの ID を添えて対象ホストの status1 にすれば良さそうです。

host.get でホスト一覧を取得して対象ホストの ID を確認します。JSON で返ってくるので適当な名前のファイルに保存しました。
curl にはこんな風な JSON を渡しています。

{
  "auth":"${API_KEY}",
  "method":"host.get",
  "id":2,
  "params":{
    "output":"extend"
  },
  "jsonrpc":"2.0"
}

API を呼びます。

curl -k -d "{\"auth\":\"${API_KEY}\",\"method\":\"host.get\",\"id\":2,\"params\":{\"output\":\"extend\"},\"jsonrpc\":\"2.0\"}" -H "Content-Type: application/json-rpc" ${ZABBIX_URL}/api_jsonrpc.php -o hostlist.json

これでホストの情報が hostlist.json に保存されます。中身を確認して対象のホストの ID を見てやります。

cat hostlist.json | jq "." | less

今回の対象は 10106 でした。この ID を無効化します。

対象のホストを無効化する

今度渡す JSON はこんな

{
  "auth":"${API_KEY}",
  "method":"host.update",
  "id": 3,
  "params":{
    "hostid":"10106",
    "status":1
  },
  "jsonrpc":"2.0"
}
$ curl -k -d "{\"auth\":\"${API_KEY}\",\"method\":\"host.update\",\"id\": 3,\"params\":{\"hostid\":\"10106\",\"status\":1},\"jsonrpc\":\"2.0\"}" -H "Content-Type: application/json-rpc" ${ZABBIX_URL}/api_jsonrpc.php

こんな JSON が返ってくれば OK っぽいです。

{"jsonrpc":"2.0","result":{"hostids":["10106"]},"id":3}

最後にホストのステータスを確認します。
こんな JSON を渡してステータスを確認。

{
  "auth": "${API_KEY}",
  "method": "host.get",
  "params": {
    "filter": {
      "hostid": ["10106"]
    }
  },
  "id": 5,
  "jsonrpc": "2.0"
}
$ curl -k -d "{\"auth\":\"${API_KEY}\",\"method\":\"host.get\",\"params\":{\"filter\":{\"hostid\":[\"10106\"]}},\"id\":4,\"jsonrpc\":\"2.0\"}"  -H "Content-Type: application/json-rpc" ${ZABBIX_URL}/api_jsonrpc.php | jq "." | less

ページャに渡された整形済 JSON を見て status1 になってれば OK です。

最後にログアウトしておきます。

$ curl -k -d "{\"auth\":\"${API_KEY}\",\"method\":\"user.logout\",\"id\":5,\"params\":[],\"jsonrpc\":\"2.0\"}" -H "Content-Type: application/json-rpc" ${ZABBIX_URL}/api_jsonrpc.php

この後監視を無効化したホストの Zabbix-Agent を停止してアラートが飛んでこないか確認して、ホストをシャットダウンしました。

国際信州学院大学へのアクセス地図(の一部)に OpenStreetMap が使われている件

実在性に疑問が投げかけられている()国際信州学院大学のウェブサイトにある大学へのアクセスのページで OpenStreetMap が使われていると一部で話題になっていました。

そのページで表示される地図には国信大が表示されているわけですが、今のところ大学関係者以外の第三者がその実在性を確認していないため、OpenStreetMap にその地物を書き込むのは OSM への破壊行為になりかねません。
しかし当該ページで地物が表示されているものの OpenStreetMap 上 では地物のオブジェクトは書き込まれていませんでした。

どのようになっているか興味があったので国信大のアクセスについてのページのソースを見ると iframe で地図専用の HTML を読み込んでいます。
今度は地図専用の HTML を表示してソースを確認すると次のような記述がありました。

//OSM本家に負荷をかけないよう、またまぜか国際信州学院大学が表示されない(おそらく知名度不足)ので
//12以上でズームしていてキャンパスの近くなら自前の地図で表示 国際信州学院大学 周辺地図 のソースより引用

タイルレイヤーの取得に際してズームレベル12以上で国信大(が存在すると主張する地域)の周辺タイルを取得しようとした時だけ国信大のウェブサイトのページに保存されたタイル画像を取得していることになります。

良く見れば地図の出典を表示する部分では「© OSM contributors / modified by SUI」となっていて、変更した事実が明示されていました。

ここからは推測とポエム

OSM では地上に存在するものをマッピングする ことになっていて、実在性が疑われている国信大が OSM 上のデータを編集していた場合、OSM コミュニティによって実在性の確認や否定がなされていた可能性があります。
コミュニティによる実在性の確認の中で国信大の実在を証明することになったかもしれませんが、彼らは自分たちで実在性を証明()や知名度の向上()をしていきたいのかもしれません。

OpenStreetMap ではそのデータをダウンロードして独自に地図タイルサーバーを構築することができます。switch2osm を見るとその構築方法が書かれているので構築可能ですし、Portable OpenStreetMap を構築すればオフラインで使う OpenStreetMap も構築できます。これらのシステムを使って独自に編集した地図タイルを用意し、自信のウェブサーバーに特定エリアのタイルを置いているのかもしれません。
Google マップ API の埋め込みが有料化されたので OpenStreetMap を使うことにしたらしいので高いマシンスペックが要求される動的なタイルサーバーを動かしているとはちょっと考えにくい気がします。それとも特定エリアだけのデータを持ったタイルサーバーなのかしら。

なんか面白いな、自分でも同じ事が出来ないか試してみたい。

DELL XPS体験モニター(期間付き)に当選

DELL アンバサダーが行っているデル アンバサダー限定!XPS体験モニターの第5回 モニタープログラムに応募したところ、モニター対象として当選しました。
対象機種は2018年1月26日に発売されたnew XPS 13のプラチナシルバー&ブラックです。

当選後の流れ

モニター当選の後アンバサダープログラムへ機材の送付先を登録する必要があります。割と余裕がありますが登録を忘れると機材が送られてきません。 なお、住所の登録と同時に次のような注意事項に同意することになります。借用書となるものですね。
当然ですが変なものはありません。

  • 返却日を遵守
  • 借入物品の分解、解析、改造、改変等は禁止
  • 返送前に備品等の確認をしたうえで、貸し出したときと同様の状態
  • 三者への譲渡、販売、質入れ、貸し出しは禁止
  • 借入物品を修理する場合には、修理代金に相当する費用を弁償
  • 返還不能及び修理不能の状態になった場合には、借入物品の価格と同額を弁償
  • 故障させた場合にはサポートに連絡

住所の登録が終わるとメールが飛んできます。

当選者座談会

今回の当選者にはモニター当選者座談会の案内が送られていると思います。当選者が都内で集まり、どのように使っているかや製品への要望などを直接メーカーに伝えることができる場のようです。
参加するといくつかのメディアに写真が掲載されるかもしれないとのこと。
今回は日程が合わないので見送ることにしました。

モニター機器の使い道について

OpenStreetMap を JOSM でマッピングする、翻訳作業を行う、なんかのコードを書く、マイクラ、など一時的に ThinkPad T460s を置換える形で使ってみるつもりです。
new XPS 13は小型モバイル機なので意識的に持ち出すようにしてみたいですね。

TextQL を Windows で使う

CSV ファイルや TSV ファイルに直接 SQL をかけて結果を受け取れる TextQL というコマンドが Twitter の TL に流れてきたので Windows にインストールしました。PowerShell で使えるようにした作業メモです。

流れてきた紹介記事

TextQL - CVSファイルに対してSQLを実行できるコマンドラインツール | ソフトアンテナブログ

GitHubリポジトリ

Go Lang の設定

TextQL は Go Lang で書かれているっぽいのでまず Windows で Go Lang を使えるようにします。

The Go Programming Languageのダウンロードページから Windows 用のインストーラ goX.X.X.windows-amd64.msi あたりをダウンロードしてインストールすればOKです。

なお自分は goX.X.X.windows-amd64.zip をダウンロード&展開して環境変数GOBINGOROOTPATH を設定しました。
GOROOT が zip ファイルを展開したディレクトリ、GOBINGOROOT の中の bin をセット。PATHGOBIN のパスを追加して終わり。

> go version
go version go1.10 windows/amd64

とか出れば OK。

gcc の設定

gcc も使うっぽいので Sourceforge から mingw-w64-install.exe をダウンロード。インストーラを起動して途中の Architecture を間違えなければインストール完了です。

PowerShell を再起動して gcc -v が実行されれば OK。実行されていなければ C:\Program Files\mingw-w64\x86_64-X.X.X-posix-seh-rt_v5-rev0\mingw64 あたりの中にある bin までパスを通せば使えるようになるはず。

TextQL のインストール

ここまで来れば簡単。

> go get -u github.com/dinedal/textql/...

とすれば GOBIN にビルドされた実行ファイルができてきます。
Excel に突っ込んでからフィルタかけたり Access に突っ込んでから SQL かけたりしなくていいので超快適。

Linux で iPhone をマウントして Mapillary アプリの写真を取り出す

Mapillary へ画像をアップロードする前にそれなりの大きさの画面で写真を見たいじゃないですか。LinuxiPhone をマウントする時に毎回ググるのがアレなので自分用にメモを残しておきます。

操作を始める前に iPhone の Mapillary アプリで写真に EXIF 情報を付与しておくとパソコンから Mapillary へアップロードできる。

iPhone のマウント

こちらの gist を見るとやり方が書いてあります。

On Ubuntu 16.04, since iOS 10 update, libimobiledevice can't connect to my iPhone. This is my attempt to document a fix. · GitHub

ざっくり流れを書くと

  • libplist (場合によってはいらない)
  • libusbmuxd
  • libimobiledevice
  • usbmuxd
  • ifuse

辺りを入れる。ビルドをする場合はビルドに使われるパッケージ類を入れておくこと。

パソコンに iPhone を接続したら認証させる。iPhone 側でコンピューターを信頼するかどうかのダイアログが出てたら信頼しておかないとダメなはず。

$ idevicepair pair

SUCCESS: Paired with device XXXX~ が表示されれば OK。出なかったら適当にトラブルシュートする。

$ ifuse --documents com.mapillary.app /home/zoar/mapillary/

普通にマウントしても見えなかったのでアプリを指定してマウントする。

アンマウントするときは

$ fusermount -u /home/zoar/mapillary/

写真の取り出し

マウントしたディレクトリに移動すると日付時刻ディレクトリの中に写真が入っているので必要なものをコピーする。今回は全部コピーした。

$ cd ~/mapillary/
$ cp -r ./* /pathToDir/

取り出した写真を見ながら不要な画像を削除したりモザイク処理をする。2000枚近くの写真から人の顔とか車のナンバーを認識してモザイク処理してくれるソフトないかしら。

アップロード

Mapillary tools でアップロードする。
iPhone のアプリ側で EXIF 情報を付与しておけば Mapillary のユーザー情報も一緒に入っているので upload.py でアップロードできる。
普通の写真に位置情報を付けたファイルの場合には upload_with_authentication.py とかでアップロードする。

あとは公開されるのを待てば OK。

2枚の Mapillary 画像から地物の位置を取得する実験(の途中)

先日参加した Mapillary Meetup 2018 Tokyo : ATND の懇親会で思いついた2枚の Mapillary 画像から地物の位置を特定するやつをどうにかしようと模索中です。

適当に動作するっぽい JavaScrpt までは書けました。続きができる気がしないけど。

f:id:k-side:20180306160021p:plain

右上の地図で濃い緑矢印は画像の方向角、赤いラインは画像間の基線です(これはいらないなぁ…)。
地図上の青いラインと画像上の青いラインは連動していて、画像上のマウスポインタの位置が画像上でどの方向かを見るためのものです。緑ラインも同じ様な動きをしますが、こちらはマウスをクリックした位置に固定して表示されます。
各種数値を正しく取得できれば緑ラインの交点が地物の位置になるはずです。サンプル画像では写真内から道路案内標識の位置を出そうとしていますが、地図上の交点がはるか街区内に突っ込んでいるので正しい位置を出せなかったことがわかります。

画像の持つ画像自体の方向角が正しくなかったり、画角の情報や画角の計算に必要な情報を持っていない画像で試したため(なぜその画像を選んだ…)結果として地物の正しい位置を取得できませんでした。

課題をまとめるために記事を残しておきます。あー、でもこんな記事書いたらなにか出来上がった気になってしまうかもと思いつつ。

やり残していること

さて、実装できるでしょうか。

Mapillary から直接画像の取得

今のはファイルをローカルに保存してデータを取っているので REST API か Mapillary.js を使ってクライアントサイドで完結できるようにしないと使い勝手が悪すぎる。

画角の取得

画角情報が保存されていないと画角とマウスの移動量を正しく連携させられないので、画像の2点と地図上の2点から挟角を設定できるような機能が必要そうです。

画像方向角の調整

画像の方向角は電子コンパスが正しく動作していないと正確な方向角を記録できません。せっかく画像から風景が見えていて、右上に地図を表示できているのでこの画面上で方向角を補正する機能を追加すれば正しい方向角を向くはずです。

ラインの拡縮追従

地図を拡大・縮小した時にラインが取り残されてしまいます…。

交点計算の改善

最小自乗法とかで計算したらかっこよさそう。

使ってるもの

地図表示は leaflet.js でその他のオブジェクトは d3.js でなんとかしています。
これに使うつもりで d3.js を練習してたわけではないのですが、なんか使えましたね。たまたま…。

というか誰か作って(ぇ