ベスパリブ

ベスパもってないです。バイク買いました。

ラズパイでgpartedを実行、"e2fsck cannot continue aborting is mounted"エラー

Raspbian用のSDカードの容量を小さくしたかった。

以前にもやったので、その方法を備忘録として残していました。試行錯誤の結果、以下の記事のまんまやればよいことがわかりました。

qiita.com

で、やってたらエラーが起きました。エラーの詳細を読むと、以下のような感じのことが書いてありました。

e2fsck cannot continue aborting is mounted

/dev/sda2 is mounted

/dev/sda2をアンマウントしてるのにおかしいなーと思ってたんですが、小一時間悩んで理由がわかりました。

私は以下のような構成でやっていました。

  • ラズパイ(起動中。gpartedを実行する。コピー元のSDカードでもある)
  • コピー先のSDカードをUSBに挿す

これではラズパイは起動中なので実際にはアンマウントできていないのが原因でした(たぶん)。

本当に必要な構成は、

  • ラズパイ(起動中。gpartedを実行する)
  • コピー元のSDカードをUSBに挿す
  • コピー先のSDカードをUSBに挿す

でした。

まあ記事をちゃんと読むとそう書いてあるんですけど、以前にやったことあったので適当に流し読みしてしまっていました。気を付けよう。

(SDカードのリーダライタが大きくて、ラズパイのUSBにそのまま2つ挿せなくて延長ケーブルが必要になって面倒くさかった)

Pythonの__file__は、対話モードで実行するとエラーになる

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でブランチのブランチタイプを変更する

Bitbucketで、masterブランチのブランチタイプ(Branch type)がMAINかつDEVELOPMENTになっていたので、developブランチをDEVELOPMENTにしたいという話です。

f:id:takeg:20190131152325p:plain
masterブランチがMAINかつDEVELOPMENT

設定 > Branching model で、Development branchを変更して、保存します。

f:id:takeg:20190131152408p:plain
Deveropment branchの変更

ブランチ画面に行き、ブランチタイプの変更ができていることを確認します。

f:id:takeg:20190131152704p:plain
developブランチがDEVELOPMENT

ブランチタイプの説明は以下の公式に詳しく書いてあります。

ja.confluence.atlassian.com

はてなブログをHTTPS化した

私のはてなブログHTTPSじゃなくて、「いつになったらはてなHTTPS対応してくれるんだろーー~~~~~~~~~~ばなな」って口を開けて待ってたんですが、普通に公式からアナウンスがありました。

help.hatenablog.com

移行方法

ダッシュボードから設定画面にアクセスし、「変更する」を選択してください。

ワンクリックでHTTPS化できました。はてなさんありがとう。

Access to bucket "staging.PROJECT_ID.appspot.com" denied. You must grant Storage Object Viewer permission to ... エラーの解消

Google App EngineHello 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の編集アイコンをクリックします。

f:id:takeg:20190128160804p:plain
9XXXXXXXX8@cloudbuild.gserviceaccount.comの編集アイコンをクリック

「別の役割を追加」で「ストレージオブジェクトの閲覧者」を追加します。

f:id:takeg:20190128160910p:plain
「ストレージオブジェクトの閲覧者」を追加

そして再度デプロイするといけるはず……たぶん。

(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アプリケーションにアクセスできます。

chcpコマンドは何の略なのか

"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ってなんでしょう。

Wikipediaによれば

コードページとは、特定の符号化文字集合を指定するための数字、またはその数字で指定された符号化文字集合、あるいはそのような方法で符号化文字集合を指定するためのシステムのことである。cpと表示されることもある。それぞれの符号化文字集合は「コードページ○○(○○は2桁から5桁の数字)」という形で管理される。

「符号化文字集合」とあるので、文字コード(charset)のイメージでよいのでしょうか。

そして、

コードページという用語は、システムベンダ各社が管理している符号化文字集合を指す時にしか用いられず、ISO等の公的な規格の文字集合を「コードページ○○」などということはない。IBMおよび、マイクロソフトは各自、コードページを定めて管理している。マイクロソフトのコードページ群はMS-DOSWindowsなどで利用されている。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

2019 Japan IT Week 関西 1/23 レポート

インテックス大阪で企業向けイベント2019 Japan IT Week 関西 がありました。それに一般参加し申した。出展はしていません。

朝10:00に入場。

3つのセミナーに参加しました。7000円するセミナーは早割で6000円であった。どの内容も面白く、参考になる部分もあり、大変良かったのだが、6000円は個人的な感覚で高杉晋作なのですけれど、企業向けでは相場価格なのだろうか。まあ会社のお金なんですけど。

名古屋大学の方のお話を聞いたのですけど、自動運転の技術者を増やすためにもAutowareっていうソフトウェアをOSS化していたらしいです。初めて知りました。自動運転OSSデファクトスタンダードみたいな立ち位置になってきているらしいです。

セミナーが終わったら自由にブースを回りました。メインはIoT展で、今後の製造業をIoTでビッグデータしてディープラーニングするための情報収集であった。

スーパーミーティングメモという音声認識議事録はちょうど社内で「こういうの欲し~誰か作って~」みたいに言ってたものなので非常にタイムリーでした。

個人的に驚いたのがSkyの情報資産管理システム(いわゆる社内のPC管理・監視とかのソフト)で、どのPCがなんのファイルをいつ作成したとか、ファイル名を変更してもハッシュ値を保持してるから追跡できたりとか、誰がどのWEBページを見たかとかが履歴でわかりやすく表示されるとこで、情シスの話は噂レベルでしか聞いたことなかったですけど、こんなん私が朝はてブ見てることとか(テクノロジーカテゴリで情報収集のためですよ、先輩)、誤クリックで増田の記事読んでしまったこととかバレバレじゃん!!って思いました。他にもUSBメモリを読み取りのみ・使用不可の制御を端末ごとはもちろんネットワーク、グループごとに出来たり、色々痒いところに手が届いてるな〜〜と言った感じでした。多分大手インフラ企業とか導入してそう…してるに違いないと思うなどしました。

印象に残っているのが日本マイクロソフトのデモプレゼンで、Surfaceのプレゼンのはずなのだけれど、最初の導入が日本の長時間労働の話から始まり、働き方改革の話に続いた。日本マイクロソフト社内の課題を見える化などし、どう働き方改革を進めたかみたいな話が中心で、「行きたくなるオフィス」「使いたくなるデバイス」という話が出て、その「使いたくなるデバイス」の文脈で最後の最後にSurfaceをちょろっと紹介してデモは終了した。 私だったら「今からSurfaceの新機能を紹介します。」とか言ってSurfaceのスペックや機能の話でプレゼンをはじめてしまうと思ったのだが、プレゼン力の違いを見せられた。おそらく百聞は一見に如かず実機を触ってくださいとのことなのでしょう。あとブースのバランスチェアがめっちゃよかったので会社で使いたいなど思った。

個人的に印象が悪いと思ったのが、恐らく営業だと思われる方が説明して、「ほら、あとはお前の番だぞ」と開発者っぽい人に話を振り「え、俺っすかw」みたいな感じで詳しい説明に入るのはやめたほうが良いと思った。自分も出展側に回ることもあり、そういう風に営業の方から話を振られることがあったのだが、内輪ノリとまではいかないまでもそういうのを社外の人に見せるのは諸刃の剣だと感じた。気をつけたい。

あと組み込みシステム・開発技術ブースにGitHubジャパンが出展していた。プライベートリポジトリの宣伝だろうか。でもちょっと謎感が否めなかったが、たくさんステッカーをもらって帰った。

さくらインターネットさんがLoRa製品を出してた。

その他色んな出展企業をまわった。

ところでこういう展示会って本当にその場で商談成立したり企業側にメリットあるんでしょうか。せいぜい企業の存在感をアピールするくらいが関の山で、あとは一般参加者が楽しんで観覧したり、コンパニオンを雇ってる企業を見てその企業のカラーを知って楽しむと思っているのは私だけ……ですね。これ以上はやめましょう。

帰りにタイ料理を食らいました。バナナマンの日村氏がおいしいとかラジオで言ってたような気がするプーパッポンカリーを食した。味は美味しかったけど食感がひどすぎる。

パクチーの酎ハイ、パクチュウはパクチー好きにはたまらない、そうでもない人には地獄のような飲み物だった。見えてる地雷を踏んどいて文句言ってごめんなさい。

余談。

JR大阪駅は乗降人数が多いくせに2列分のエスカレーターかエレベーターしかないし、ホームには時刻表も、どこの駅に行くのかの看板や情報がマジで皆無だし、どうなってるんだ?