Django GirlsのREADMEを読んでいて、インターネットの仕組みの項目を読んでいた。
そこに海底ケーブルマップのサイトのリンクがあった。
すごい。色々すごいけど、志摩市の海底ケーブルの本数がすごい。志摩スペイン村しか知らなかったのに。
オホーツク海のケーブルや、クック諸島にぽつーんとケーブル引かれてるのが見てて面白い。
海底ケーブルって途方がなさすぎて全然イメージできないんですけど、こんなに張られてたんですねぇ。あと地下鉄感がすごい。
Django GirlsのREADMEを読んでいて、インターネットの仕組みの項目を読んでいた。
そこに海底ケーブルマップのサイトのリンクがあった。
すごい。色々すごいけど、志摩市の海底ケーブルの本数がすごい。志摩スペイン村しか知らなかったのに。
オホーツク海のケーブルや、クック諸島にぽつーんとケーブル引かれてるのが見てて面白い。
海底ケーブルって途方がなさすぎて全然イメージできないんですけど、こんなに張られてたんですねぇ。あと地下鉄感がすごい。
Raspbian用のSDカードの容量を小さくしたかった。
以前にもやったので、その方法を備忘録として残していました。試行錯誤の結果、以下の記事のまんまやればよいことがわかりました。
で、やってたらエラーが起きました。エラーの詳細を読むと、以下のような感じのことが書いてありました。
e2fsck cannot continue aborting is mounted /dev/sda2 is mounted
/dev/sda2をアンマウントしてるのにおかしいなーと思ってたんですが、小一時間悩んで理由がわかりました。
私は以下のような構成でやっていました。
これではラズパイは起動中なので実際にはアンマウントできていないのが原因でした(たぶん)。
本当に必要な構成は、
でした。
まあ記事をちゃんと読むとそう書いてあるんですけど、以前にやったことあったので適当に流し読みしてしまっていました。気を付けよう。
(SDカードのリーダライタが大きくて、ラズパイのUSBにそのまま2つ挿せなくて延長ケーブルが必要になって面倒くさかった)
Pythonで、ファイル名を出力してくれる__file__
は、対話モードで実行するとエラーになります。
> python Python 3.7.1 (default, Dec 10 2018, 22:54:23) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32 Type "help", "copyright", "credits" or "license" for more information. >>> print(__file__) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name '__file__' is not defined
対話モードなので、ファイルなんてないので当然といえば当然なエラーでしょうか。
ファイルで実行するときちんと出力してくれます。
# sample.py import os print(__file__) a = os.path.dirname(os.path.abspath(__file__)) print(a) a = os.path.dirname(os.path.abspath("__file__")) print(a)
> python sample.py
sample.py
C:\Users\XXXX\workspace
C:\Users\XXXX\workspace
Bitbucketで、masterブランチのブランチタイプ(Branch type)がMAINかつDEVELOPMENTになっていたので、developブランチをDEVELOPMENTにしたいという話です。
設定 > Branching model で、Development branchを変更して、保存します。
ブランチ画面に行き、ブランチタイプの変更ができていることを確認します。
ブランチタイプの説明は以下の公式に詳しく書いてあります。
Google App EngineのHello Worldのチュートリアルを進めていたらデプロイ中にエラーが発生しました。
(python_docs_samples) C:\Users\XXXX\workspace\python-docs-samples\appengine\standard_python37\hello_world>gcloud app deploy Services to deploy: descriptor: [C:\Users\XXXX\workspace\python-docs-samples\appengine\standard_python37\hello_world\app.yaml] source: [C:\Users\XXXX\workspace\python-docs-samples\appengine\standard_python37\hello_world] target project: [PROJECT_ID] target service: [default] target version: [20190126t190818] target url: [https:/PROJECT_ID.appspot.com] Do you want to continue (Y/n)? Y Beginning deployment of service [default]... #============================================================# #= Uploading 5 files to Google Cloud Storage =# #============================================================# File upload done. Updating service [default]...failed. ERROR: (gcloud.app.deploy) Error Response: [9] Cloud build AA-BB-CC-DD-EEEEE status: FAILURE. Build error details: Access to bucket "staging.PROJECT_ID.appspot.com" denied. You must grant Storage Object Viewer permission to 9XXXXXXXX8@cloudbuild.gserviceaccount.com. . Check the build log for errors: https://console.cloud.google.com/gcr/builds/AA-BB-CC-DD-EEEEE?project=9XXXXXXXX8
注目すべきエラーメッセージは Build error details: Access to bucket "staging.PROJECT_ID.appspot.com" denied. You must grant Storage Object Viewer permission to 9XXXXXXXX8@cloudbuild.gserviceaccount.com.
.
の部分で、「バケットへのアクセスが失敗」と言われています。
さらに「9XXXXXXXX8@cloudbuild.gserviceaccount.com」に「Storage Object Viewer権限を与えてくれ」と言われています。
権限のエラーはIAMをいじれば解消できるはず。IAMの設定をろくにしたことがないので以下のリンクを読みます(バケットに対するIAMについても書いてあります)。
Using (Cloud IAM) Permissions | Cloud Storage | Google Cloud
なんとなくわかったところで、GCPから「IAMと管理」の画面を開き、9XXXXXXXX8@cloudbuild.gserviceaccount.comの編集アイコンをクリックします。
「別の役割を追加」で「ストレージオブジェクトの閲覧者」を追加します。
そして再度デプロイするといけるはず……たぶん。
(python_docs_samples) C:\Users\XXXX\workspace\python-docs-samples\appengine\standard_python37\hello_world>gcloud app deploy Services to deploy: descriptor: [C:\Users\XXXX\workspace\python-docs-samples\appengine\standard_python37\hello_world\app.yaml] source: [C:\Users\XXXX\workspace\python-docs-samples\appengine\standard_python37\hello_world] target project: [PROJECT_ID] target service: [default] target version: [20190126t193649] target url: [https://PROJECT_ID.appspot.com] Do you want to continue (Y/n)? Y Beginning deployment of service [default]... #============================================================# #= Uploading 0 files to Google Cloud Storage =# #============================================================# File upload done. Updating service [default]...done. Setting traffic split for service [default]...done. Deployed service [default] to [https://PROJECT_ID.appspot.com] You can stream logs from the command line by running: $ gcloud app logs tail -s default To view your application in the web browser run: $ gcloud app browse
デプロイできました!
gcloud app browse
を実行するとWEBアプリケーションにアクセスできます。
"CHange CodePage" の略らしいです。
ターミナルでchcp /?
と打つと、
>chcp /? Displays or sets the active code page number. CHCP [nnn] nnn Specifies a code page number. Type CHCP without a parameter to display the active code page number.
Specifies a code page number
と書いてあるので、たしかにcode pageの略で間違いなさそうです。ところでcode pageってなんでしょう。
コードページとは、特定の符号化文字集合を指定するための数字、またはその数字で指定された符号化文字集合、あるいはそのような方法で符号化文字集合を指定するためのシステムのことである。cpと表示されることもある。それぞれの符号化文字集合は「コードページ○○(○○は2桁から5桁の数字)」という形で管理される。
「符号化文字集合」とあるので、文字コード(charset)のイメージでよいのでしょうか。
そして、
コードページという用語は、システムベンダ各社が管理している符号化文字集合を指す時にしか用いられず、ISO等の公的な規格の文字集合を「コードページ○○」などということはない。IBMおよび、マイクロソフトは各自、コードページを定めて管理している。マイクロソフトのコードページ群はMS-DOSやWindowsなどで利用されている。IBMのコードページはSystem iやDB2等の文字データ表現体系(CDRA: "Character Data Representation Architecture")をサポートするIBMシステムで利用されている。
とあるので、文字コードをコードページと言い換えてベンダ各社が勝手に定義している…という理解でいいのかな。
最後によく使うchcpコマンド。
# 現在のcode pageを確認する > chcp Active code page: 932 # UTF-8に変更する > chcp 65001 # SJISに変更する > chcp 932