Pixel3でおサイフケータイを初期化する前にPixel3を初期化してしまった時のおサイフケータイの初期化方法
Pixel4aを買ったので、Pixel3(simフリー)を初期化して近くのゲオに持っていった。 そこで店員におサイフケータイが初期化されてないことを店員から告げられ、買取価格も26400円から100円(ジャンク品)になるとのことだったので、一旦買取は諦めて家に持ち帰った。
色々調べてみると、Pixel3の初期化後におサイフケータイの初期化をすることは出来ないとのことが書かれていて諦めかけた。
けど、物は試しにPixel3をセットアップしておサイフケータイに残ってたnanacoアプリを開いたところ、 機種変更の設定が可能だったため機種変更の設定をしたところ、無事おサイフケータイの初期化ができた。
なのでsimフリーのPixel3 or Android端末でも、再セットアップ(google アカウントは同じものでログイン)すればおサイフケータイの初期化も可能である。
ついでにゲオの買取でセットアップしておサイフケータイ調べてるけど、まれにセットアップ後、NFCが反応しないときがあるので事前に確認するかsuicaで残高確認とか事前に確認しておくと良いかもしれない。
ついでにゲオでは、iPhone/iPad は買取価格 20%up、Android端末は 10%upのキャンペーンをやっているので、売れて良かった。
龍高飯店
家の近くにあるおいしいと評判な中華を食べに行ってきた。
梅雨の合間の夏日でとても暑かったので、冷やし淡々麺を頼みました。
大きいトマトも入ってて辛さもちょうどよくとても美味しかったです。
ジャンボ鉄鍋焼餃子 4本セットなんですが、とっても大きくて、外はパリっとしててとても美味しかったです。
ホームページを見ても駐車場があることは書かれてますが、その場所は書かれてませんでした。お店の前に貼ってあるのですが、お店の前に1台、横の駐車場に1台が止められるようです。
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
)すれば問題なく動く。
今回読んでる本
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)
- 作者:Bill Lubanovic
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/12/01
- メディア: 単行本(ソフトカバー)
上海観光
Open Infrastructure Summitでの初中国、初上海。時間がなくてほとんど観光地については調べずに行きました。
日本から3時間程度で行ける国で、上海に行って思ったのは日本よりやってることが飛び抜けていてとても栄えてる印象でした。
幸い、少しだけ時間があったので、観光スポット的なところに30分ぐらい寄れましたが、事前に調べてこれだけはあった方が良いっていう上海の情報をまとめようと思います。
あった方が良いと思ったもの
あった方が便利です。
NeoMoney ( https://www.neomoney.jp/services/moushikomi/ ) で申し込めてとても便利です。1~2週間ぐらいで届くので余裕を持って申し込むと良いです。
セブンイレブンのATMでチャージでき、帰国して残高が残っていれば出金もゆうちょのATMとかで可能です。パスワードは4桁登録しますが、中国国内で使う場合はパスワードが6桁になるので要注意。
- Alipay or WeChat Pay
2019年11月からAlipayもWeChat Payも旅行者でも使えるようになりました。
パスポートとか色々登録必要ですが、銀聯カードぐらい便利だと思います。
私が上海にいる間に開始したので使ってはいませんがだいたいどこでも使えるので重宝するでしょう。
- DiDi
Uberのような配車アプリを日本で登録しておけると便利です。
- 高徳地図
バイドゥの地図は英語で検索できませんが、高徳地図は英語でも検索可能です。
- ちょっと話せるぐらいの中国語
全体に日本語はもちろん英語も通じないし、話しかけると若干拒絶されるので中国語が少しわかるともっと楽しかったかなーと思います。
ホテルでも中国語以外がわかる人、わからない人はいるので、今回たまたまかもしれないですが、わかってた方がよかったかもなーと思いました。
空港編
今回、羽田空港から虹橋国際空港へ行く便で上海に行きました。
虹橋国際空港の情報を調べてみるとあまり出てきません。出てくるのは、もう一つの浦東国際空港の情報ばかりだったので、今回はまざ虹橋国際空港について書きます。
虹橋国際空港は元々軍用空港として使われていたものを民間で使えるようにした空港らしく、羽田からの便と帰りに使う便が発着する第1ターミナルは2017年にリニューアルオープンされた新しい空港です。
実際に使った感想としては、新しく、仕事できるようにしっかり机と椅子がたくさん並んでいたし、トイレや待合の長椅子も綺麗でした。
ちなみに空港にはさぼてんが入っていて帰国前にとんかつが食べられます。
移動編
上海では地下鉄とバスが一般的な移動方法らしいです。タクシーやdidi(中国のタクシー配車アプリ)も使えますが、現金は使えなかったり、クレジットカードも銀聯カードのみだったりします。didiで呼ばない場合のタクシーは日本語も英語も通じないので、中国語を覚えずに訪れる場合は地下鉄とバスが手取り早いのではないのかなと思いました。
地下鉄
3~5元(1元15円なので45円から75円)ぐらいでだいたいの場所にいけます。安いです。
上海公共交通カードというものもありますが、これは空港で銀聯カードがないと買えないので準備してから上海に行くのがおすすめです。地下鉄に限らず重宝します。
上海公共交通カードの買い方
右の券売機が上海公共交通カードの券売機です。同じような券売機でも、画面に赤、青、黄色、緑の大きいボタンがないものは買えません。また、このカードを購入するにもUnion Payカード (銀聯カード) が必要です。現金では買えないと言われました。
持ってない場合は、左にある普通の券売機で切符を購入する必要があります。こちらは現金で購入できます。
上海公共交通カードはディポジットが20元で50元からチャージできるようです。5日間の滞在で100元チャージ(内20元はディポジット)でも15元ぐらい余ってました。
帰りに返すことも可能だそうです。返却すれば20元は戻ってきます。
私は記念に持ち帰りました。
タクシー
日本でdidi(中国版)をインストールして、設定してからいくのをおすすめします。
AppleのiPhoneは日本版しかダウンロードできなくて中国に行かないとダウンロードできないそうですが、Android端末は日本でインストールして設定していけます。
街中でタクシーに拾おうとすると白タクがくるのでそう言った観点から考えてもdidiがおすすめです。
あと、えんじ色のタクシーは避けた方が良いらしいです。
観光編
1枚目はイギリスから返却された後に建てられたビルで、2枚目はイギリスが建てたビルです。ここら辺はプロジェクションマッピングやビルの ライトアップがとても綺麗でした。
街中編
中国の街中は結構整備されていて自転車(モーターバイク?)用の道路もしっかり確保されています。また、日本と違い路駐もすくなくゴミゴミしている印象はあまりありません。
10月に台湾に行った時も感じましたが、歩いてる人が少ない印象です。
手前のおじさんが乗ってるバイクみたいなものですが、エンジンではなくモーター?で動いているそうで、ものすごく静かです。まれに歩道を走ってるのも見たので自転車扱いなのかなーと思いますが、これのおかげかはわかりませんが、結構使ってる人がおおく、とても道を歩いていても静かでした。
その他
ポッキーとかLOTTE商品のパッケージがLINE FRIENDSのキャラクターだった。中国国内ではVPNがないと使えないですが、LINE FRIENDSのアニメは中国でも見れたようで人気があったという話を同僚の中国人に聞きました。
(中身は普通のポッキーでした。)
D02 地球の歩き方 上海 杭州 蘇州 2019~2020 (地球の歩き方 D 2)
- 作者: 地球の歩き方編集室
- 出版社/メーカー: ダイヤモンド・ビッグ社
- 発売日: 2019/07/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
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を使用することが出来るとのこと。
該当コード読んでみよう。
まだまだ新しいタイプの対応や、自分が見えてる範囲でのイシューはあるのでしばらくはバグフィックスにも取り組んでいこうと思いました。
英語の復習メモ
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
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.