thirose’s blog

openstackやpythonなどなど

Pixel3でおサイフケータイを初期化する前にPixel3を初期化してしまった時のおサイフケータイの初期化方法

Pixel4aを買ったので、Pixel3(simフリー)を初期化して近くのゲオに持っていった。 そこで店員におサイフケータイが初期化されてないことを店員から告げられ、買取価格も26400円から100円(ジャンク品)になるとのことだったので、一旦買取は諦めて家に持ち帰った。

色々調べてみると、Pixel3の初期化後におサイフケータイの初期化をすることは出来ないとのことが書かれていて諦めかけた。
けど、物は試しにPixel3をセットアップしておサイフケータイに残ってたnanacoアプリを開いたところ、 機種変更の設定が可能だったため機種変更の設定をしたところ、無事おサイフケータイの初期化ができた。

なのでsimフリーのPixel3 or Android端末でも、再セットアップ(google アカウントは同じものでログイン)すればおサイフケータイの初期化も可能である。

ついでにゲオの買取でセットアップしておサイフケータイ調べてるけど、まれにセットアップ後、NFCが反応しないときがあるので事前に確認するかsuicaで残高確認とか事前に確認しておくと良いかもしれない。

ついでにゲオでは、iPhone/iPad は買取価格 20%up、Android端末は 10%upのキャンペーンをやっているので、売れて良かった。

buy.geo-mobile.jp

龍高飯店

家の近くにあるおいしいと評判な中華を食べに行ってきた。

梅雨の合間の夏日でとても暑かったので、冷やし淡々麺を頼みました。

大きいトマトも入ってて辛さもちょうどよくとても美味しかったです。
f:id:hirosetakahito:20200713173242j:image

  

ジャンボ鉄鍋焼餃子 4本セットなんですが、とっても大きくて、外はパリっとしててとても美味しかったです。

f:id:hirosetakahito:20200713173249j:image

 

ホームページを見ても駐車場があることは書かれてますが、その場所は書かれてませんでした。お店の前に貼ってあるのですが、お店の前に1台、横の駐車場に1台が止められるようです。
f:id:hirosetakahito:20200713173525j:image

 

龍高飯店
〒134-0088 東京都江戸川区西葛西7-3-2
2,000円(平均)1,000円(ランチ平均)
r.gnavi.co.jp

 

Docker-Compose を使って volumeをマウントするときにpermission errorが返ってくる

前提

Docker/Kubernetes 実践コンテナ開発入門 の 2.6 Composeによる複数コンテナの実行 で 以下のようにvolumesをマウントするところでの問題です。

version: "3"
services:
  master:
  container_name: master
  image: jenkins: latest
  ports:
    - 8080:8080
  volumes:
    - ./jenkins_home:/var/jenkins_home

問題

上のdocker-compose.ymlを実行すると

$ docker-compose up
Creating master ... done
Attaching to master
master    | touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
master    | Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
master exited with code 1

このように Permission deniedとなり起動できません。 そのため、以下の対応が必要になります。

対応

version: "3"
services:
  master:
    container_name: master
    image: jenkins:latest
    ports:
      - 8080:8080

docs.docker.com こちらに書かれているようにvolumesを追記してあげればファイルを共有できるようになります。

$ docker-compose up
Creating master ... done
Attaching to master
master    | Running from: /usr/share/jenkins/jenkins.war
master    | webroot: EnvVars.masterEnvVars.get("JENKINS_HOME")
master    | Jan 28, 2020 10:09:19 AM Main deleteWinstoneTempContents
master    | WARNING: Failed to delete the temporary Winstone file /tmp/winstone/jenkins.war
master    | Jan 28, 2020 10:09:19 AM org.eclipse.jetty.util.log.JavaUtilLog info
master    | INFO: Logging initialized @370ms
master    | Jan 28, 2020 10:09:19 AM winstone.Logger logInternal
master    | INFO: Beginning extraction from war file
master    | Jan 28, 2020 10:09:21 AM org.eclipse.jetty.util.log.JavaUtilLog warn
master    | WARNING: Empty contextPath
master    | Jan 28, 2020 10:09:21 AM org.eclipse.jetty.util.log.JavaUtilLog info
master    | INFO: jetty-9.2.z-SNAPSHOT
master    | Jan 28, 2020 10:09:22 AM org.eclipse.jetty.util.log.JavaUtilLog info
master    | INFO: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet
master    | Jenkins home directory: /var/jenkins_home found at: EnvVars.masterEnvVars.get("JENKINS_HOME")
master    | Jan 28, 2020 10:09:22 AM org.eclipse.jetty.util.log.JavaUtilLog info
master    | INFO: Started w.@47404bea{/,file:/var/jenkins_home/war/,AVAILABLE}{/var/jenkins_home/war}
master    | Jan 28, 2020 10:09:22 AM org.eclipse.jetty.util.log.JavaUtilLog info
master    | INFO: Started ServerConnector@458342d3{HTTP/1.1}{0.0.0.0:8080}
master    | Jan 28, 2020 10:09:22 AM org.eclipse.jetty.util.log.JavaUtilLog info

確認

$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
494f2620e919        jenkins:latest      "/bin/tini -- /usr..."   16 seconds ago      Up 14 seconds       0.0.0.0:8080->8080/tcp, 50000/tcp   master
$  docker exec -it master /bin/bash
jenkins@494f2620e919:/$ cat /var/jenkins_home/
cat: /var/jenkins_home/: Is a directory
jenkins@494f2620e919:/$ ls /var/jenkins_home/
.bash_logout                         .profile                             hudson.model.UpdateCenter.xml        jenkins.CLI.xml                      logs/                                plugins/                             secrets/                             users/
.bashrc                              config.xml                           identity.key.enc                     jenkins.install.UpgradeWizard.state  nodeMonitors.xml                     secret.key                           updates/                             war/
.java/                               copy_reference_file.log              init.groovy.d/                       jobs/                                nodes/                               secret.key.not-so-secret             userContent/                         

ファイルまで確認。volumesのマウントとは違うけどとりあえず見れたから目的は達成。

ここらへん確認してると、まず一回volumeマウントしないで chown -R 1000 /var/jenkisn_home するような解決作もあるっぽいけど、 今回はそれはなんか違う気がしたのでいったんこれで。

追記

jenkins_home ディレクトリの権限を編集( chmod 777 jenkins_home )すれば問題なく動く。

今回読んでる本

Docker/Kubernetes 実践コンテナ開発入門

Docker/Kubernetes 実践コンテナ開発入門

python で json.loads() したときに 特定の制御文字列が入ってるとJSONDecodeErrorが返ってくる

問題

今回は以下のような文字列を json.loads() してみたときにおきた問題があったときの対応をまとめました。

sample_text = '{"key": "value \t value"}'

再現させる

>>> import json
>>> sample_text = '{"key": "value \t value"}'
>>>
>>> json.loads(sample_text)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/www/.pyenv/versions/3.6.5/lib/python3.6/json/__init__.py", line 354, in loads
    return _default_decoder.decode(s)
  File "/home/www/.pyenv/versions/3.6.5/lib/python3.6/json/decoder.py", line 339, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/home/www/.pyenv/versions/3.6.5/lib/python3.6/json/decoder.py", line 355, in raw_decode
    obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Invalid control character at: line 1 column 16 (char 15)

問題は、 valueに入っている \t が入っていることが原因のようです。
以下 json moduleのドキュメントを読んでわかる通り、

strict が false (デフォルトは True) の場合、制御文字を文字列に含めることができます。ここで言う制御文字とは、'\t' (タブ)、'\n'、'\r'、'\0' を含む 0-31 の範囲のコードを持つ文字のことです。

json --- JSON エンコーダおよびデコーダ — Python 3.7.6 ドキュメント
との記述があります。

ということは、strictがTrue(default value)だった場合には含めることができないです。

解決策

>>> json.loads(sample_text, strict=False)
{'key': 'value \t value'}

引数をデフォルトの true から false に変更すればjson loadsできるようになります。 ということで、defaultが True の値を False に設定してあげれば、json.laods()できるようになります。 Decoderのobjectには他にも以下のように引数もあります。

class json.JSONDecoder(*, object_hook=None, parse_float=None, parse_int=None, parse_constant=None, strict=True, object_pairs_hook=None)

入門 Python 3

入門 Python 3

上海観光

Open Infrastructure Summitでの初中国、初上海。時間がなくてほとんど観光地については調べずに行きました。

日本から3時間程度で行ける国で、上海に行って思ったのは日本よりやってることが飛び抜けていてとても栄えてる印象でした。

幸い、少しだけ時間があったので、観光スポット的なところに30分ぐらい寄れましたが、事前に調べてこれだけはあった方が良いっていう上海の情報をまとめようと思います。

 

あった方が良いと思ったもの

あった方が便利です。

NeoMoney ( https://www.neomoney.jp/services/moushikomi/ ) で申し込めてとても便利です。1~2週間ぐらいで届くので余裕を持って申し込むと良いです。

セブンイレブンのATMでチャージでき、帰国して残高が残っていれば出金もゆうちょのATMとかで可能です。パスワードは4桁登録しますが、中国国内で使う場合はパスワードが6桁になるので要注意。

f:id:hirosetakahito:20191115135211j:plain

 

2019年11月からAlipayもWeChat Payも旅行者でも使えるようになりました。

パスポートとか色々登録必要ですが、銀聯カードぐらい便利だと思います。

私が上海にいる間に開始したので使ってはいませんがだいたいどこでも使えるので重宝するでしょう。

japanese.engadget.com

  • DiDi

Uberのような配車アプリを日本で登録しておけると便利です。

 

play.google.com

  • 高徳地図

バイドゥの地図は英語で検索できませんが、高徳地図は英語でも検索可能です。

 

高德地图-精准地图,导航出行必备

高德地图-精准地图,导航出行必备

  • AutoNavi Information Technology Co. Ltd.
  • ナビゲーション
  • 無料

apps.apple.com

play.google.com

  • ちょっと話せるぐらいの中国語

全体に日本語はもちろん英語も通じないし、話しかけると若干拒絶されるので中国語が少しわかるともっと楽しかったかなーと思います。

ホテルでも中国語以外がわかる人、わからない人はいるので、今回たまたまかもしれないですが、わかってた方がよかったかもなーと思いました。

 

空港編

今回、羽田空港から虹橋国際空港へ行く便で上海に行きました。

虹橋国際空港の情報を調べてみるとあまり出てきません。出てくるのは、もう一つの浦東国際空港の情報ばかりだったので、今回はまざ虹橋国際空港について書きます。

虹橋国際空港は元々軍用空港として使われていたものを民間で使えるようにした空港らしく、羽田からの便と帰りに使う便が発着する第1ターミナルは2017年にリニューアルオープンされた新しい空港です。

実際に使った感想としては、新しく、仕事できるようにしっかり机と椅子がたくさん並んでいたし、トイレや待合の長椅子も綺麗でした。

ちなみに空港にはさぼてんが入っていて帰国前にとんかつが食べられます。


f:id:hirosetakahito:20191114192743j:image

移動編

上海では地下鉄とバスが一般的な移動方法らしいです。タクシーやdidi(中国のタクシー配車アプリ)も使えますが、現金は使えなかったり、クレジットカードも銀聯カードのみだったりします。didiで呼ばない場合のタクシーは日本語も英語も通じないので、中国語を覚えずに訪れる場合は地下鉄とバスが手取り早いのではないのかなと思いました。

 

地下鉄

3~5元(1元15円なので45円から75円)ぐらいでだいたいの場所にいけます。安いです。

上海公共交通カードというものもありますが、これは空港で銀聯カードがないと買えないので準備してから上海に行くのがおすすめです。地下鉄に限らず重宝します。 

f:id:hirosetakahito:20191115135222j:plain 

上海公共交通カードの買い方

右の券売機が上海公共交通カードの券売機です。同じような券売機でも、画面に赤、青、黄色、緑の大きいボタンがないものは買えません。また、このカードを購入するにもUnion Payカード (銀聯カード) が必要です。現金では買えないと言われました。

持ってない場合は、左にある普通の券売機で切符を購入する必要があります。こちらは現金で購入できます。

上海公共交通カードはディポジットが20元で50元からチャージできるようです。5日間の滞在で100元チャージ(内20元はディポジット)でも15元ぐらい余ってました。

帰りに返すことも可能だそうです。返却すれば20元は戻ってきます。

私は記念に持ち帰りました。

f:id:hirosetakahito:20191114234800j:plain

 

タクシー

日本でdidi(中国版)をインストールして、設定してからいくのをおすすめします。

AppleiPhoneは日本版しかダウンロードできなくて中国に行かないとダウンロードできないそうですが、Android端末は日本でインストールして設定していけます。

街中でタクシーに拾おうとすると白タクがくるのでそう言った観点から考えてもdidiがおすすめです。

あと、えんじ色のタクシーは避けた方が良いらしいです。 

 

観光編

1枚目はイギリスから返却された後に建てられたビルで、2枚目はイギリスが建てたビルです。ここら辺はプロジェクションマッピングやビルの ライトアップがとても綺麗でした。
f:id:hirosetakahito:20191114192843j:image
f:id:hirosetakahito:20191114192858j:image

街中編

中国の街中は結構整備されていて自転車(モーターバイク?)用の道路もしっかり確保されています。また、日本と違い路駐もすくなくゴミゴミしている印象はあまりありません。

10月に台湾に行った時も感じましたが、歩いてる人が少ない印象です。
f:id:hirosetakahito:20191114192655j:image

 

手前のおじさんが乗ってるバイクみたいなものですが、エンジンではなくモーター?で動いているそうで、ものすごく静かです。まれに歩道を走ってるのも見たので自転車扱いなのかなーと思いますが、これのおかげかはわかりませんが、結構使ってる人がおおく、とても道を歩いていても静かでした。

f:id:hirosetakahito:20191114234849j:plain

f:id:hirosetakahito:20191114234648j:plain

 
 

その他

ポッキーとかLOTTE商品のパッケージがLINE FRIENDSのキャラクターだった。中国国内ではVPNがないと使えないですが、LINE FRIENDSのアニメは中国でも見れたようで人気があったという話を同僚の中国人に聞きました。

(中身は普通のポッキーでした。)


f:id:hirosetakahito:20191114192604j:image

 

 

D02 地球の歩き方 上海 杭州 蘇州 2019~2020 (地球の歩き方 D 2)

D02 地球の歩き方 上海 杭州 蘇州 2019~2020 (地球の歩き方 D 2)

 

 

Open Infrastructure Summit Shanghai

11/4~11/6に行われたOpen Infrastructure Summitに参加してきました。

初サミットは昨年のバンクーバーなので今回が2回目です。前回と違い今回は(通らなかったけど)proposalを出したし、ある程度背景もわかった状態での参加なので前回より理解度は高いかと思います。

ただ中国語のセッションは全くと言っていい程理解出来ませんでしたが、新しい体験でした。

 

今回の1番の目的は自分が担当してるDesignateのコアな方々と話すことです。

弊社のDNS as a Serviceでも使っていて自分が主にメンテナンスをしているので、こういう機能あると嬉しいなーという提案や最新版はどうなの?等話を出来ると良いな思って行って、実際に話出来たのは成果かとおもいます。

 

そのなかでShared ZONEという機能について、弊社と最新版の違いを紹介出来ればと考えています。

Shared ZONEとは

1つのOpenStackクラスタ内の異なるプロジェクトで同じZONEを使う為の機能です。

パブリッククラウド的な考えだと必要性がそこまで大きいものではないかと考える方もいるかも知れませんが、プライベートクラウドだとユーザから社員で複数のサービスを提供している場合に必要性が増します。

サービスごとにプロジェクトを作り、各プロジェクトごとに異なるZONEを使う。つまり一つの会社がサービス毎にZONEを買う必要が出てくるし、そもそも管理が煩雑になります。

ユーザから見ても統一性がないと思われるかも知れません。

そのため、弊社では本家Designateが実装する前からShared ZONEを実装し運用しています。

ではどのように実装しているのか。

また、本家Designateの違いは何なのかという説明をします。

 

弊社のShared ZONE

Designateにはattibuteというユーザが自由に使えるカラムが存在していて、そこに対して、shareして使うものかどうかというフラグを追加します。

それをベースにZONE一覧を取るときにその情報をもとに使えるZONEとそうでないZONEをフィルターしています。

 

それに対して本家Designateでは何をしているか?

ネットワークベースでの割当可否判断をするようです。

同じネットワークを持つプロジェクトは同じZONEを使用することが出来るとのこと。

該当コード読んでみよう。



f:id:hirosetakahito:20191109235730j:plain

まだまだ新しいタイプの対応や、自分が見えてる範囲でのイシューはあるのでしばらくはバグフィックスにも取り組んでいこうと思いました。

 

 

英語の復習メモ

expression

should have + 動詞の過去分詞

should have ~: ~すべきだった

という表現になるのですが、どういった場面で使われるのか、というと、
たとえば、I should've introduced myself. I'm ~ みたいな何かしなくていけないけどするの忘れてましたねー。
みたいな時に使う。

New vocabulary

  • stop by ~: to visit something space or place.
  • etiquette: formal rule
  • brick: hard block for building walls
  • receptionist: someone job is to welcome and deal with people in a building or a hotel
  • construction: the process of building things such as houses.

Explain

f:id:hirosetakahito:20191030235354p:plain
two_man

When I explain such a picture, If I explain the right side man the man on the right side.
I said the man of the right side before. This is not correct.
I learned it from a rare job tutor.