カエレ (・∀・)

午後に呼び鈴が鳴る。通販が届く予定はないのだが、忘れたころに懸賞などの景品が届くことがあるので無視もできない。インターホンに出ると、「今お住まいの住宅の契約についてお話が」

は!? ここ、某大手賃貸管理会社と契約してるんだが、管理会社の人なら絶対最初に社名を名乗る。この時点で警戒レベルが1段階上昇。インターホンじゃなく直接話したいというので玄関に。思えば初手をミスった気がするが、まぁ出ちゃったものはしょうがない。

ドアを開けると以前こんな紙を届けたのだが見てないかという。全く記憶にない。間違って捨てたのではないかとも言うが、数日間放置することはあれ、一応ポストに入ったものはチラ見はする。意外と白のコピー用紙にトナーでプリントされた紙は少数派で目立つ。三つ折りしてあったと言うのでさらに目立つ。

全く記憶にないと答えると、おかしいなという雰囲気を見せながら屋内に入っていいかという。は!? 天気もいいし気温もちょうどいい。外にいるのがつらいとも思えない。二手目もミスったかもしれないが、まぁ入れる。警戒レベルもう1段階上昇。

入ると次は、持ってるノートに書いて説明するからテーブルみたいなものはないかと言う。以前来た電力会社の営業さんなんか、床に置いて書いておられましたが。適当なものがなかったので、失礼とは思いつつ洗車の時に使うバケツ(台座にもなるやつ)を置く。「部屋にテーブルとかはないのでしょうか」こいつ、部屋に入り込む気らしい。あるけど上に物がたくさん置いてあるのでここには持ってこれないと返答。ここの対応はまぁ良かったのではないだろうか。警戒レベル1段階上昇。

家の奥に入れないぞとの意思をバケツで示すと、今度は社に電話をしていいかと言い出す。これから話を始めますと報告しないといけないと言う。そんな営業活動する会社初めて見た。仲間を呼ばれるんじゃないかと思い、同意せず。警戒レベル(略)

洗車バケツにノートを置いたものの、どこに勤めているのだとか年はだとか個人情報を聞いてくる。もうどれだけ警戒レベル上げさせるのよ。で本題はと聞くと、ですから紙を受け取ってないかと言う。そもそもあなたは誰と聞いても名刺一つ出ず、紙は見てないでいいから本題はと聞いても、なんだかんだで紙の話に戻す。どうやら紙の話を想定通りに持って行かないとコンボを開始できないらしい。

一向に本題を言いそうになかったので、あなたのことは信用できない(素性を明かさない・本題を言おうとしない・話を始める前に電話しようとする)から帰って欲しいと切り出す。こういう輩はやんわり話を切ろうとすると人の話くらい最後まで聞けとか言い出すので、詐欺と疑わしいから聞く気はないとはっきり。結果は「人の話を最後まで聞きもしないでなぜ怪しいと決めるんだ、最後まで聞いてくれ」、同じか。

ならば紙は見てないから本題を言えと言うと、また紙の話から始めようとする。だけど先ほどあなたを疑っていると言い放ったおかげで、帰らないなら警察呼ぶぞというカードを切ることができた。すると「あなたの態度はおかしい」「非常識だ」と言ってきた。まっとうな業務をしている会社から来ているなら、お前最低の営業だな。今まで受けてきた強引な勧誘電話で慣れてますけどね。「そうですか、ありがとうございます」と受け流す。

いよいよ電話かける(ふりを)とするかとスマホを取り出しロックを解除したところ、その前に起動していたカメラアプリが動いていたようでフォーカス音がする。「何撮ってんだよ!」と怒鳴りスマホを取り上げようとする相手。本性出したね。ストラップを握っていたのでスマホは取られず。

「これ、私の証言次第じゃ暴行罪容疑だよ」とはったりをかますと、顔には出なかったけど焦ったのかもしれない、しばらくすると彼のスマホが着信。会社と話している体で、私が詐欺呼ばわりして話を聞いてくれないと報告。「ほら、話聞いてくれないから電話かかってきちゃうんですよ」と。知るか、そんなお前の会社の俺ルール。だいたいかかってくるタイミングが良すぎる、自演乙。

もう一度、帰れ、警察呼ぶぞ、二度と来るなと言ってようやくご退場。

こういう勧誘の手法として、相手に少しでも引け目を感じさせることがあるらしい。人間の心理としてそういう引け目や借りを作ると返そうとするので、それを利用して家の中に入り込んだりして自分のペースに持ち込むんだとか。今回の場合、紙・話を聞かない・非常識が向こうの足掛かりなんだろうけど、いまだに紙の話でどうしたらフラグが立ったのか分からない。以前に別の者が届けに来ているはずとしきりに繰り返していたけど、そのために事前に紙をポストに入れるような仕込みをするとは思えない。はじめから渡してない紙を紛失したとこちらの過失にしたかったのだろうか。まぁ入っていたとしても、それを読まなかったことに引け目を感じる私じゃないですけどね。

— posted by mu at 11:00 pm   commentComment [0]  pingTrackBack [0]

動作を勘違いしてました

自戒の意味を込めて記録。LINQで

の動作は違う。例えば{1, 2, -1, 3, 0}という配列に使った場合、前者の答えは3、後者は2。

前者の動作を後者と同じと思い込んでいたため、翌日大量のエラーに直面することに。

— posted by mu at 12:04 pm   commentComment [0]  pingTrackBack [0]

MySQLがDNSキャッシュをやっていた

いまさらネタ。

リモートクライアントマシンのIPアドレスを変更した後にアクセスしたら、IPアドレスの元持ち主マシンと判断されアクセス拒否。MySQLサーバのコマンドラインからnslookupで調べてもDNSは変更後のアドレスを正しく返しており、小一時間悩む。

原因はMySQL 5.6.5から入ったDNSキャッシュ(host_cache テーブル)Link 。mysqlコマンドからFLUSH HOSTSを実行して解決。

リモートクライアントがMySQLに接続するのはIPアドレス変更後初めてですが、変更してから1週間経つんだよなぁ。キャッシュはエントリ数の上限はあるようだけど、有効期限は無いかかなり長いらしい。

— posted by mu at 03:48 pm   commentComment [0]  pingTrackBack [0]

Jupyter Notebookをリバースプロキシで使う

[2017/5/17 追記] Pythonが動かない模様。ブラウザからはWebSocket接続に問題があるように見えますが…要調査。

Dockerなどで動かしているJupyter Notebookをリバースプロキシで/以外にマウントする方法。

まずはJupyterの設定変更。Docker運用でない方は直接jupyter_notebook_config.pyを編集してJupyterを再起動してください。

  1. docker ps -aでJupyterコンテナIDもしくはNAMEを調べる
  2. シェルに入る
  3. docker exec -it コンテナIDまたはNAME /bin/bash
  4. jupyter_notebook_config.py(/home/jovyan/.jupyter/jupyter_notebook_config.py)の設定に以下を追加。'jupyter'はリバースプロキシでマウントしたいパスと一致するように適当に変更。
  5. c.NotebookApp.base_url = '/jupyter/'
    
  6. シェルを抜ける
  7. Jupyterの再起動
  8. docker restart コンテナIDまたはNAME
    
これでJupyter Notebookがhttp://localhost:8888Link ではなくhttp://localhost:8888/jupyterLink でアクセスできるようになります。あとはURL書き換えなどを使ってWebサーバアドレスをlocalhost:8888に書き換える。IISのURL Rewriteの例だと
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
          <rules>
            <rule name="ReverseProxyInboundRule1" stopProcessing="true">
              <match url="jupyter/(.*)" />
              <conditions>
                <add input="{CACHE_URL}" pattern="^(https?)://" />
              </conditions>
              <action type="Rewrite" url="{C:1}://localhost:8888/{R:1}" />
            </rule>
          </rules>
          <outboundRules>
            <preConditions>
              <preCondition name="ResponseIsHtml1">
                <add input="{RESPONSE_CONTENT_TYPE}" pattern="^text/html" />
              </preCondition>
            </preConditions>
            <rule name="ReverseProxyOutboundRule1" preCondition="ResponseIsHtml1">
              <match filterByTags="A, Area, Base, Form, Frame, Head, IFrame, Img, Input, Link, Script" pattern="^http(s)?://localhost:8888/(.*)" />
              <action type="Rewrite" value="http{R:1}://Webサーバアドレス/{R:2}" />
            </rule>
          </outboundRules>
        </rewrite>
    </system.webServer>
    <system.web>
        <identity impersonate="false" />
    </system.web>
</configuration>

Jupyter・リバースプロキシで検索するとWebサーバの/にマウントする例がよくありました。私は/以外にマウントしたかったのですが、jupyter_notebook_config.py書き換え無しにIISのURL Rewriteだけで行おうとすると以下の点でハマりました。

  • '/foo/bar'のようにサーバ名を含まないURL表記も'/jupyter/foo/bar'と書き換えないといけないのですが、JavaScript内も変更するためfilterByTags="None"、つまりHTML全文を置換対象する必要があり、余計な部分にマッチしない正規表現にしないといけない。ルールが複雑になると、後のJupyter側の変更で不具合起こす可能性あり。
  • CSS内の'/foo/bar'も'/jupyter/foo/bar'に書き換えないといけない。
  • JupyterのログインフォームでNext=%2F(Next=/)という部分がありログイン成功後に進むページが指定されるのですが、ここを
    • 書き換えないとWebサーバー側の/に飛んでしまう
    • Next=%2Fjupyterなどと書き換えるとJupyterにとっては知らないパス/jupyterに飛べと指定されるのでエラーになる

私は3つ目の理由でURL Rewrite単独での解決は断念しました。

[参考]

— posted by mu at 01:51 pm   commentComment [0]  pingTrackBack [0]

Docker pullが失敗する

仕事で機械学習を覚えるように言われ、手探りで始めることに。とりあえずdocker+tensorflow+jupyter notebook環境を構築すべく仮想マシンにubuntuを入れ、dockerをインストール。次にtensorflow-notebookを入れようとすると、
$ sudo docker pull jupyter/tensorflow-notebook
Using default tag: latest
latest: Pulling from jupyter/tensorflow-notebook

693502eb7dfb: Pull complete
a3782c2efb41: Pull complete
9cb32b776a40: Pull complete
e539f5722cd5: Pull complete
b4690d4047c6: Pull complete
121dc465f5c6: Pull complete
c352772bbcfd: Pull complete
0057b9e76c8a: Extracting    568 B/568 B                                                                 
e63bd87d75dd: Download complete
055904fbc069: Download complete
d336770b8a83: Download complete
d61dbef85c7d: Download complete
6c4990ff8475: Download complete
e5968c6a2a7f: Download complete
bedf924ebae8: Download complete
b52514c7f277: Download complete
335ed19f8aeb: Download complete
0d61bb7891a3: Download complete
17c31ceff0f0: Download complete
de094493e821: Download complete
4d60ed225ef8: Download complete
4e17fd01128d: Download complete
c6a0f58de8b1: Download complete
7fea7b1d8bb9: Download complete
failed to register layer: open /var/lib/docker/aufs/layers/3dd85cabcd0d7bc18c5ccee0e071e2a7f8956765e84498c580d9b180f1433bce: no such file or directory

となり失敗。何回繰り返しても同じ。

この出力だけ見ると最後の'failed to register layer'に目が行きますが、途中を見ていると'0057b9e76c8a: Extracting 568 B/568 B'の行がずっと止まったままなので、以降がダウンロード完了しても展開が始まらないように見える。だいたい568バイトって何よ、あり得ないとは言えないけど小さすぎ。

とりあえず以下の方法で回復しましたが、何分初心者なので正しい対処か分かりませんので、参考程度に。

  1. 裏でdocker pullが動いているなら止める。
  2. Extractingで止まっている0057b9e76c8aで検索。今回は1個だけ出てきましたが(sha256:の後にヒットしています)、複数出てきた場合は内容で判断(まぁレアケースでしょうけど)。
  3. $ sudo grep -r 0057b9e76c8a /var/lib/docker
    /var/lib/docker/image/aufs/distribution/v2metadata-by-diffid/sha256/cda29d030c7debb657eaf6a780dc926d7d1ea900f5e87e79b205bdff35f95ec7:[{"Digest":"sha256:0057b9e76c8a523a63a6418fdfc9580811083be2a505468a24eaf06348151f9b","SourceRepository":"docker.io/jupyter/tensorflow-notebook"}] 
    
  4. 出てきたディレクトリを削除 or どこかに退避
  5. $ sudo rm -rf /var/lib/docker/image/aufs/distribution/v2metadata-by-diffid/sha256/cda29d030c7debb657eaf6a780dc926d7d1ea900f5e87e79b205bdff35f95ec7
    
  6. dockerデーモンを再起動
  7. $ sudo service docker restart
    
  8. 再度pull
  9. $ sudo docker pull jupyter/tensorflow-notebook
    

ちなみに/var/lib/docker/aufs/layers/3dd85cabcd0d7bc18c5ccee0e071e2a7f8956765e84498c580d9b180f1433bceはno such file or directoryとある通り本当に無いので、探すだけ無駄です。

[参考]

— posted by mu at 12:04 am   commentComment [0]  pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0175 sec.
prev
2017.9
next
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30