pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


JSONデータのキーをカンマ区切りで取得したい

JSONデータのキーをカンマ区切りで使用する必要が出たので、方法をメモしておく。

$ curl [URL] | jq -r '.rootProperty[0]|keys_unsorted|@csv' | sed 's/"//g'
$ curl [URL] | jq -r '.rootProperty[0]|keys_unsorted|@tsv' | sed 's/\t/,/g'

基本的には jq に丸投げしつつ以下のことを行っているだけ。

rootProperty の部分は実際のJSON配列名等に書き換えます。

  • keys_unsorted でキーをソート無しで取得
  • @tsv または @csv に変換
  • sed で余計な文字を切り落とす

本当は @csv でダブルクオートなしの出力が得られればよかったのだけど、そういうわけではなさそう。だから @csv したものを sed で後処理している。

同様の理由により、@tsv した場合も sed での後処理が必要っぽい。

Oracle12g を Docker で動かす

Oracle12g も立てる必要がでてきたので、同じく Docker で立ててみる。

DB2 は公式ストアから入手してみたけど、Oracle はこちらの手順でやってみることにします。

qiita.com

そうすると以下の設定で接続できるものができました。

  • ポート番号 = 1521/TCP
  • Service_Name = ORCLPDB1
  • パスワード (SYS, SYSTEM, PDBADMIN) = コンテナの生成ごとに振られるランダム文字列

TNSの接続なら、こういう文字列ですかねえ。

  • (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = IPアドレス)(PORT = 1521)))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = ORCLPDB1)))

起動したコンテナは Ctrl + C すると一時停止しますが、docker start [コンテナ名] と実行すれば再開します。

以下では docker run の初回実行時のコマンドとログをメモとして残します。公式ストアから入手する方法は別途試そう。

$ sudo docker run -p 1521:1521 -p 5500:5500 --name Oracle12g -i oracle/database:12.1.0.2-ee 
Password:
ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: (生成されたパスワード)

LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 27-FEB-2018 13:03:37

Copyright (c) 1991, 2014, Oracle.  All rights reserved.

Starting /opt/oracle/product/12.1.0.2/dbhome_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 12.1.0.2.0 - Production
System parameter file is /opt/oracle/product/12.1.0.2/dbhome_1/network/admin/listener.ora
Log messages written to /opt/oracle/diag/tnslsnr/8bd9ba867228/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.1.0.2.0 - Production
Start Date                27-FEB-2018 13:03:38
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /opt/oracle/product/12.1.0.2/dbhome_1/network/admin/listener.ora
Listener Log File         /opt/oracle/diag/tnslsnr/8bd9ba867228/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
The listener supports no services
The command completed successfully
Copying database files
1% complete
2% complete
27% complete
Creating and starting Oracle instance
29% complete
32% complete
33% complete
34% complete
38% complete
42% complete
43% complete
45% complete
Completing Database Creation
48% complete
51% complete
53% complete
62% complete

64% complete
72% complete
Creating Pluggable Databases
78% complete
100% complete
Look at the log file "/opt/oracle/cfgtoollogs/dbca/ORCLCDB/ORCLCDB.log" for further details.

SQL*Plus: Release 12.1.0.2.0 Production on Tue Feb 27 13:30:14 2018

Copyright (c) 1982, 2014, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> 
System altered.

SQL> 
Pluggable database altered.

SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options
The Oracle base remains unchanged with value /opt/oracle
#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
Tue Feb 27 13:30:00 2018

XDB initialized.
Tue Feb 27 13:30:10 2018
Thread 1 advanced to log sequence 12 (LGWR switch)
  Current log# 3 seq# 12 mem# 0: /opt/oracle/oradata/ORCLCDB/redo03.log
Tue Feb 27 13:30:14 2018
ALTER SYSTEM SET control_files='/opt/oracle/oradata/ORCLCDB/control01.ctl' SCOPE=SPFILE;
   ALTER PLUGGABLE DATABASE ORCLPDB1 SAVE STATE
Completed:    ALTER PLUGGABLE DATABASE ORCLPDB1 SAVE STATE
Tue Feb 27 13:38:59 2018
Resize operation completed for file# 9, old size 563200K, new size 593920K
Tue Feb 27 13:55:17 2018
Warning: VKTM detected a time drift.
Time drifts can result in an unexpected behavior such as time-outs. Please check trace file for more details.
Tue Feb 27 13:55:17 2018
Default pga_aggregate_limit value is too high for the
amount of physical memory in the system
pga_aggregate_limit is 2048 MB
limit based on physical memory and SGA usage is 1199 MB

IBM DB2 を Docker で動かす

DB2の試験環境が必要になったのだけど、仮想マシンで普通に立てるのはリソースの無駄遣いなので Docker で立ててみます。

Docker のホストは macOS を使用。macOS 向けの環境構築手順は割愛します。

store.docker.com でポチっておく

ここでポチります。開発版なので費用はかからない。 https://store.docker.com/images/db2-developer-c-edition

ポチったら、手順に従って pull して実行します。

コンテナを実行したい環境で docker pull

ストアからの入手ではログインが必要のようですから、ログインしておきます。そして macOS で利用する場合は x86_64 を入手します。

$ docker login 

$ docker pull store/ibmcorp/db2_developer_c:11.1.2.2b-x86_64

設定ファイルを作る

.env_list という名前でファイルを作ります。今回はこんな内容で。

LICENSE=accept
DB2INSTANCE=db2inst1
DB2INST1_PASSWORD=password
DBNAME=testdb
BLU=false
ENABLE_ORACLE_COMPATIBILITY=true
UPDATEAVAIL=NO
TO_CREATE_SAMPLEDB=true
REPODB=false
IS_OSXFS=true # Only specify this parameter if you are running on macOS
PERSISTENT_HOME=false # Only specify this parameter for Docker for Windows users

実行する

今回はこんな感じで。-v でホスト側のディレクトリをコンテナ内にマウントさせた場合はうまく動かなかったので、とりあえず -v 抜きで動作確認しています。

docker run -h db2server_container \
  --name db2server \
  --restart=always \
  --detach \
  --privileged=true \
  -p 50000:50000 -p 55000:55000 \
  --env-file .env_list \
  store/ibmcorp/db2_developer_c:11.1.2.2b-x86_64 

接続確認する

任意のツールで確認すればよいと思います。

とりあえず手元では RAD Studio 10.2 Tokyo の IDE からデータエクスプローラで操作できることを試したり、DB Artisan で接続できることを確認しました。

FireDAC での設定箇所と DB2 の .env_list の対比はこんな感じです。

FireDAC DB2 .env_list
Database DBNAME
User_Name DB2INSTANCE
Password DB2INST1_PASSWORD
Server (実機のIPアドレスまたはホスト名)

Windows標準コマンドだけでMD5を計算表示しつつクリップボードにもコピーする

右クリックメニューの拡張でMD5を取り扱う事例はググれば出てきますが、自分が欲しい機能は「結果を表示する」ことと「クリップボードにもコピーする」ことの両方だったので、それを行えるような処理をバッチファイルで書くことにしました。

使い方はイロイロあるでしょうけど、とりあえず作ったバッチファイルだけ貼っておきます。

@echo off

if "%1" == "" goto ERROR

: 一時ファイルにMD5の計算結果を格納
set md5tempfile=%temp%\%RANDOM%.txt
certutil -hashfile "%~1" MD5 > %md5tempfile%

: クリップボードにMD5SUMだけをコピーする
type %md5tempfile% | findstr /V ":" | clip

: ファイル名とMD5SUMをメッセージボックスとして出力する
(
echo %~1
type %md5tempfile% | findstr /V ":"
) | msg %username%

: 一時ファイルを削除
del %md5tempfile%
goto :EOF

:ERROR
echo usage: md5sum.bat [filename] | msg %username%

:EOF

Citrix NetScaler のCookie情報にはバックエンドのWebサーバの情報が含まれている

自社のあるサイトが Citryx NetScaler を利用しているのだけれど、たまに不安定なことがあり、なおかつその機材の管理チームと不安定な状況の改善に向けてやり取りしていてもラチがあかないので、合法的な範囲で調べてみるテスト。

Cytrix NetScaler というのはロードバランサー機能を含む複数の機能を提供するアプライアンス製品なわけですが、少なくともIPアドレスやポート番号の情報が NetScaler の生成する Cookie には含まれているようです。この Cookie 情報を用いて、特定のクライアントとの通信が特定のバックエンドに振り分けられるようにしているようです。

そこで、NetScaler が生成する Cookie の意味を具体的に調べていたら、これに関する情報が下記のコンテンツにありました。

itgeekchronicles.co.uk

そしてCookieをデコードする方法は無いものかと思って読み進めてみると、先程の記事の最後に下記の GitHub リポジトリが紹介されていて、ここにコードがありました。

github.com

PythonJavaScript コードがあるようですが、とりあえず Python を試してみます。

実行方法はカンタンで、実際にやってみると、こんな感じ。手元の Cookie の現物を晒すのはイヤなので、GitHub リポジトリの readme に記載の Cookie で試してみます。

$ ./nsccookiedecrypt.py NSC_Qspe-xxx.bwjwb.dp.vl-IUUQ=ffffffff50effd8445525d5f4f58455e445a4a423660
vServer Name=www.**********-HTTP
vServer IP=xxx.xxx.xxx.xxx
vServer Port=80

うん、たしかにデコードされた。そして手元の現物も同じようにデコードできた。

wena wrist pro を買ってオメガスピードマスターとDYIで組み合わせてみた

色々考えてみたけれど、やはりバッテリーが持たないスマートウォッチは基本的に受け入れられないし、画面が常時表示では無い機種もイマイチです。

なので、いっそのこと、画面なし、バッテリ長持ちな通知受け専用デバイスに手を出して見ることにしました。

購入したもの

今回購入したのは、 wena wrist pro Silverwena wrist pro Silver WB-11ASと、wena wrist pro用エンドピース20mm Silver SONY (ソニー) WB-EP200-Sエンドパーツ 20mmの2つです。

今回は組み合わせる時計が オメガ スピードマスター プロフェッショナル なのですが、こいつはバンド幅が20mm、wena wrist pro の標準のエンドピースは22mmなので、エンドピースの付け替えが必須なのです。

また、無謀にもDIYでやろうと思ったので、メタルバンド用のコマ外し工具も調達してみました。

コマ調整の手順

普通は時計屋さんに持っていくことを強くお勧めします。

今回購入したコマ外しは標準のエンドピース22mmをバンドから外す用途には微妙に不向きでした。(エンドピースがバンド側から時計側に向かって斜めに広がる形なので、真っ直ぐに押し込むことが難しい)

さて、それでもDIYでやる、という方には、私が行った手順を紹介しておきます。

エンドピース20mmが無理なくつけられそうかどうかを確かめる

手元のスピードマスタープロフェッショナルは、時計の上下バンド部分の幅に微妙に違いがありまして、片方はスムースにつけられそうなのですが、もう片方がクリアランスがなさすぎて入りませんでした。

仕方がないので少量のCRC5-56を塗りつつ、付ける側を入れ替えたりしていたら、ある向きから差し込んだ場合になんとか入りました。(が、多分、傷がついたかもしれない)

上下ともスムースにつけられそうでしたら、特に気にせずにエンドピースをバンドにつけてしまってOKですが、確認せずにバンドを準備した挙句、上下逆じゃないとつけられなかった、なんてことになったら、バンドとエンドピース を再度つけ直しですね。DIYでやるには楽しくない作業です。

エンドピース 22mmを wena wrist pro から外す

最終的なバンドの長さがわかっている場合は、エンドピースだけではなく、長さ調整用のコマも抜いてしまいます。

私の場合は調整用コマを2つ(両端からそれぞれ1つ)外していますが、これは長さが微妙に足りない感じがするので、調整ピースを入れて少し伸ばそうかと思っています。

エンドピースの外し方ですが、たまたま、手元にあったバネ棒外しの反対側がちょうどピンと同様の太さだったので、私はそれをピンに当ててハンマーで軽く叩いてピンをずらし、あとはラジオペンチで引き抜く、という方法で抜いてしまいました。

なお、この時計のバンドはピンがバンドの中でCリングを通って固定されていますが、Cリングは非常に小さい部品なので、DIYの場合はバンドの中から落ちないように注意して作業する必要があります。

Cリングが外れてしまった場合は安全ピンなどの針に軽くさしてバンドに押し込めば大丈夫です。ピンセットでつまんでなんとかしようとすると紛失の元です。

時計 + 20mm エンドピース にバンドを取り付ける。

取り付けの向きに注意してつけましょう。バンドとエンドピースを合わせて、ピンを所定の向きから押し込みます。今回購入したコマ外しはピン押し込みも可能なので、これを使ってじわじわと押し込んで行きます。ある程度押し込んだら、ピン抜き用の方でピンを押して、ピンの頭がバンドから隠れる程度に押し込んでおきます。

こういう工具がない場合は、ペットボトルの蓋を机の上において、半刺しのピンを垂直に押し当てて押し込む、という力技も一応は可能ですが、ピンが折れると残念なことになるので不慣れな方にはお勧めしません。また、この方法ではピンの頭がバンドから隠れるところまで押し込むことは難しいです。

バンド長を調整する

長すぎる場合はコマ抜き、足りない場合はコマを足して調整します。長さ調整のコマのパターンは取扱説明書を参考にしつつ行います。

とりあえずの感想

  • 電池は4日くらい持ちます。
  • スピードマスタープロフェッショナル + wena wrist pro は重量が150gくらいあるので、Pebble Time に比べると重量感がすごいです。

スマートウォッチを買うのか、それとも既存の時計をスマートウォッチにするのか

というようなことを考えているのですが、まずはスマートウオッチを選ぶときの条件を整理してみる

機能ごとの優先度

必須要件

  • 各種通知が受けられる
  • 時計の盤面を変えられる
  • アクティビティトラッカー
  • 睡眠分析

この4つは必須だと思っています。

よりベターな要件

  • バッテリーの持ち
  • 常時表示できるか?

バッテリーが持たない時計は使い物にならないので、最低限3日くらいは充電せずとも動作してほしいものです。また時計なのですから、盤面は基本的に常時表示されることが望ましいです。

Apple WatchAndroid Wear はバッテリーが持たなさそうなので、これらに移行することは当面なさそうです。

あったら良い要件

  • プレインストール以外のアプリを入れてカスタマイズできる

これは必ずしも必要ではないと考えてます。Pebble にはいろんなアプリを入れてみたけれど、ほとんど使わなかった。

なくても困らない要件

心拍計はあったら情報が取れて良いけれど、なかったらなかったで不便とまでは感じない。GPSはアウトドアで運動する方には必須だろうけれど、自分の場合は自転車に乗るくらいしか無いので、GPSは必須では無い。通話や音楽再生の機能に至っては、欲しいと思ったことが無いので、なくても困らない。

こうやって考えてみると、Pebble はやはり自分に向いていた。Pebble が終焉に向かいつつある中で、次の時計をどうするかが悩ましいですねえ。

そもそも、既存の腕時計をスマートウォッチにできないだろうか?

Pebble 亡き後の選択肢として、手持ちの Omega Speedmaster Professional にスマートウォッチの機能をつけられないかなあ、と考えています。

そういう場合に、日本製なら wena wrist、海外製だと Smart Buckle, Trivoly, Chronos などがありますね。

wena wrist はまあまあ悪く無いけれど、バンド自体を交換するわけで、お値段が少々高め。またエンドパーツを時計に合わせて選ぶ必要があるので、時計によっては追加のコストがかかります。

Trivoly, Chronos は時計の裏面に貼り付けるデバイスなので、時計によっては微妙にアンバランスになりそう。 Smart Buckle は革ベルトのバックル部分を取り替えるだけ、という点では一番自然かも。メタルバンドが使いたい方向けには厳しいですけど。

これらはスマホからの通知のための盤面を捨てることで機能が絞り込まれていますが、その条件で問題が無いなら選択肢としてはありかも。

さーてどうしたものか。