NEW XPS 13(9370) こんな風に使いました

DELL XPS体験モニターとして届いた NEW XPS 13(9370) について、どの様につ買っていたかを書いていきます。 このポストは DELL アンバサダーへの参加記事です。

用途概略

こんな感じの作業をしていました。

  • 翻訳・記事作成作業
  • 地図のマッピング
  • マインクラフト
  • Web サイト編集

翻訳・記事作成作業

Chrome ブラウザと Visual Studio Code をインストールしてブラウザ上で記事の作成作業をしていました。
メインの英語の概略記事、関連するリンク先のウェブサイト複数、翻訳用タブを開いた上で実際に記事を作成する VS Code を開いての作業です。

タブを開けば開くほどメモリを使う Chrome で40~50タブ開いていましたがメインメモリの大きさと SSD の性能もあってか反応が悪くなった印象はありません。もっとガンガンにタブを開いてブラウズしている方もいると思います。ページによっては通常の表示だけでなく Google のページ翻訳をかけた状態です。さらに他の作業をしている時もそうですが、TweetDeckは常に開きっぱなしです。
ディスプレイサイズは13インチということでそれほど大きな画面ではありませんが、高精細であるため複数のウィンドウを並べて表示しても問題無く作業できます。

英語の記事から文章を選択して翻訳ページにコピペする作業を含めタッチパッドを使いましたが感度のいいタッチパッドのため細かい操作も拾ってくれるので快適に作業ができました。

さて、単語を翻訳してくれた日本語から基本語記事を組み立てたり、このモニターの前半記事の文章を書くなどは VS Code で行っていました。
前半の記事でも紹介しましたが軽量化された本体とは思えないほど安定感があり、キーにほどよい反発感(?)があるためか文字の入力作業は快適でした。そこそこの文章量を打ったつもりですが入力しにくいなと思う場面は出てきませんでしたね。

地図のマッピング

OpenStreetMap 用地図エディタの JOSM とそれを動かすために必要な Java をインストールして地図の編集を行いました。概ね CAD の編集操作のようなものです。
ここではさすがにタッチパッドでの編集は難しく、マウスを使うことにしました。最も、この高感度タッチパッドであれば使い込む中でちょっとした CAD 操作はできるようになるのではないかと思うほど使い勝手のいいものです。ThinkPadトラックポイントで CAD 編集をしていた時期を思い出せそうでした。

ここでは森林のポリゴンにあるエラーを修正するために1万点前後のポイントを持ったポリゴンをダウンロードしてきて操作しますが、反応は快適なままで編集を終えることができます。

マインクラフト

以前は GPU を搭載したパソコンでないと快適なプレイができなかったマインクラフトですが、グラフィック性能の向上もあって拡張機能を追加しないいわゆるバニラ環境(動作を軽くさせる軽量化の拡張も使いませんでした)では CPU に載っているグラフィックでも十分で、特に今回は Core i7-8550U が持つ UHD グラフィックス 620 が強力なこともあって描画領域を少しくらい広げても快適なプレイが可能です。

動きのあるオブジェクトが増えてくると CPU ファンが回り始め、本体下部などの排気口から体感できる排熱が起こります。本体にアルミが使われていることもあり、排熱性能は高そうです。

ここでもさすがにマウスを使いました。

Web サイト編集

jekyll を使った Web サイトの編集を行いました。ここでは Windows Subsystem for Linux を入れて debian に rbenv で Ruby を入れて Windows 側の VS Code で内容を編集します。

まず rbenv で Ruby をインストールするときに Ruby をビルドしますが、さすが Core i7 のマシンだけあって短時間でビルドできました。
サイトの編集でファイルに変更があるとサイトのビルドをやり直すようにオプションを付けていますが、これくらいの作業であれば一瞬でサイトがビルドされるのですぐに内容を確認できて非常に快適です。

記事の作成と同じようにキータイプの多い作業です。記事の作成と同様安定感のある本体と打ちやすいキーボードが活きました。
VS Code の他に WSL のコンソール、PowerShell のコンソール、Chrome のウィンドウ、Chromeデベロッパツールを開いています。さすがに一度に全部を表示させることはできませんが、ここでも感度の良いタッチパッドのおかげで切り替えもスムーズに行え、編集は苦にならずに済みました。

今回の機種はキーボード面がカーボン仕様になっていてとてもカッコイイです。

f:id:k-side:20180625205056j:plain
カーボン仕様のキーボード面

まとめ

高性能な部品を使うことは他のパソコンでも可能ですが、キーボードのタイプ感や本体の安定感を出すための設計、その上で薄型軽量で丈夫というのはなかなかある機種ではありません。
メモリも8GBが上限になっている残念なノートパソコンが多い中、コンパクトタイプにもかかわらず16GBを積めるようになっているのは素晴らしいです。

本体が丈夫ということはそのままカバンに詰め込んで出かけても心配が少ないということですね。

処理性能と携帯性の両方を満足させる機種だと思います。

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。