さわらブログ

さわら(@xhiroga)の技術ブログ

ターミナルで base64 エンコードが失敗すると思ったら echo が改行を吐いてた

タイトルで言い切りました。

TL;DR

good

echo -n Aladdin:OpenSesame | /usr/bin/base64
QWxhZGRpbjpPcGVuU2VzYW1l

bad

echo Aladdin:OpenSesame | /usr/bin/base64
QWxhZGRpbjpPcGVuU2VzYW1lCg==

Basic認証・Authorizationヘッダー・文字コードについて

なぜか開発環境のWebサイトへの外形監視が失敗するので困ったのがことの始まりです。

一番初めに疑ったのは文字コードでした。Basic認証が必要なWebサイトでは、レスポンス時にBasic認証に用いる文字コードを指定できます。

WWW-Authenticate: Basic realm="User Visible Realm", charset="UTF-8"

でもBasic認証で使う範囲の文字って ASCII だろうが UTF-8 だろうがバイト表現は同じになりません?

console.log(Buffer.from("Aladdin:OpenSesame", "ascii"))
// <Buffer 41 6c 61 64 64 69 6e 3a 4f 70 65 6e 53 65 73 61 6d 65>

console.log(Buffer.from("Aladdin:OpenSesame", "utf-8"))
// <Buffer 41 6c 61 64 64 69 6e 3a 4f 70 65 6e 53 65 73 61 6d 65>

なりますね。

そこで base64decodeしたら改行が見つかって問題解決しました。

unzip コマンドで warning: stripped absolute path spec from / と表示されたら zipファイルの中身を unzip -l で確認する

結論から言うと、Dropboxが自動生成したZipファイルはルートディレクトリのパスが含まれるらしい。

stackoverflow.com

unzip -l で中身を確認しよう。( zip -sf でもいいが、 unzip だとファイルサイズも確認できて嬉しい)

f:id:hiroga_cc:20201124060846p:plain
unzip -l

詳細

具体的には以下のエラーが出た。

$ unzip resources/worldometers.zip
Archive:  resources/worldometers.zip
warning:  stripped absolute path spec from /
mapname:  conversion of  failed
replace worldometers.zip? [y]es, [n]o, [A]ll, [N]one, [r]ename: 

$ unzip -l resources/worldometers.zip
Archive:  resources/worldometers.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  09-17-2019 10:27   /
   119574  09-17-2019 10:26   worldometers.zip
---------                     -------
   119574                     2 files

mapname: conversion of failed については、Zipファイルの中に同名のZipファイルが含まれていることで解答に失敗しているエラー。 -d オプションで解凍先を指定すればOK。

チーム開発で JetBrains/Youtrack を利用する際の私的注意ポイント

justInCase で開発にJetBrainsの製品を利用しています。

チームで利用する際に気を付けたいポイントをまとめました。なお、私も勉強中なので誤っている点があるかもしれません。ご指摘いだければ幸いです。

[JetBrains] OrganizationとTeamの違いを理解する

会社に相当する Organization と、プロジェクトやチーム相当する Teamの二つの概念があります。

Organiztion には クレジットカードを登録できるが、チームにはクレジットカードを登録できない、といった違いがあります。

(なお、直接支払いに利用されるクレジットカードはサブスクリプションごとに管理されている)

注意したいのは、Organizationのメンバーがライセンスを購入する際、新しいEメールアドレス(おそらくOrganizationのAdministratorではないアドレス?)で購入を行うと新たにチームが作成されることです。 たくさんTeamができて混乱するので、早めに社内購入フローを作りましょう。

sales.jetbrains.com

ちなみにトリビアですが、TeamのAdministratorをOrganizationのAdministratorに指定するとTeamのAdministratorから消えます。

[JetBrains] Startup割引の利用を検討する(Youtrackの場合は年払いのみ)

設立5年以内のスタートアップはStartup割引が利用できます。

IntelliJ Ulitimate のみならず Youtrackも対象です。ただし、Youtrackの場合は年払いのみが対象とのこと(セールスの方に確認)

www.jetbrains.com

[Youtrack] 課金対象になるユーザーの範囲を理解する

YoutrackにはユーザーのStatusを変更できる機能があります。

f:id:hiroga_cc:20201119122704p:plain
Youtrack ユーザーステータス

banされていないユーザーが課金対象なので、月払いかつその月に利用されていないユーザーがいる場合は積極的に banした方が良さそうです。

www.jetbrains.com

なお、ban以外のステータス(inactiveなど)が課金対象かは未検証です。

[Youtrack] 年払いの仕様を理解する。

簡単に言うと、年払い対象に指定した人数のみが年払い対象であり、それ以外は月払いになるようです。

以下の『年間「"True-Up"(調整)」払い』を参照。

www.jetbrains.com

Mac mini 2011 の HDD交換

Mac miniのHDDを交換しました。

f:id:hiroga_cc:20201115132738j:plain
Mac mini with HDD

組み込みのHDDはTOSHIBAの500GBのモデルですが、いま入っているのはWestern Digitalの4TBのモデルです。

Mac miniの処分のため元の500GBのHDDに戻すことにしました。その作業レポです。

手順

基本的にiFixed の手順を参考にしました。

www.ifixit.com

ただし、取り付けてあるWestern Digitalの4TB HDDはデフォルトのHDDより厚みがあるため、基盤を取り外してからHDDの換装をします。

購入したもの

レンチやドライバー、ケースから基盤を取り出すための部品が一揃いになったツールキットです。

レポ

f:id:hiroga_cc:20201115133046j:plain
底の蓋をひねって外しました。

f:id:hiroga_cc:20201115133243j:plain
WiFiアンテナプレートを外します。

f:id:hiroga_cc:20201115133324j:plain
ファンを外しました。

f:id:hiroga_cc:20201115133420j:plain
何かをガードするプラスチックの部品。これは外さなくても良かったかも。

f:id:hiroga_cc:20201115133504j:plain
HDDと基盤を接続するケーブルを外します。

f:id:hiroga_cc:20201115133810j:plain
コの字型の部品を穴に差し込み、ケースから引っ張り出します。

f:id:hiroga_cc:20201115133900j:plain
基盤の取り出し完了。

f:id:hiroga_cc:20201115133926j:plain
デフォルトのHDDに換装

f:id:hiroga_cc:20201115134000j:plain
換装完了。

チーム開発でコミットを公私混同しないための Git/GitHub 設定3選

最近PCを新しくしたので、チーム開発でGitを使う場合にやっておきたい設定をまとめました。

前提

GitHubはプライベートとチーム開発で同じアカウントを利用します。

一人で2つ以上のアカウントを持つことは利用規約違反だし、これから紹介する設定を利用すれば困ることは少ないはずです。

qiita.com

設定

[Git] コミット時のメールアドレスをチームのメールアドレスにする

リンク先で説明されているように、リポジトリごとにユーザー情報を設定することで可能です。

linuxize.com

私はリポジトリ数が多くて面倒なのでシェルで一括設定しています。(macOSのfindで動くようになっています。Linux等の場合は自分で書き直してください)

/usr/bin/find ./*/.git/config | xargs -I {} git config -f {} user.email "$EMAIL"

[GitHub] チームのメールアドレスによるコミットを、GitHub上で自分のコミットとして表示する

Emails から Add email address を設定してください。

f:id:hiroga_cc:20201114120446p:plain
GitHub - Emails

[GitHub] Organizationのリポジトリの通知はチームのメールアドレスで受け取る

Notification の Custom routing を設定することで可能です。

f:id:hiroga_cc:20201114120549p:plain
GitHub - Notification - Custom routing

IntelliJでTool WindowのCommitウィンドウとGitウィンドウを統合する

統合方法

Commitウィンドウのどこかにある "Switch to commit dialog" というメニューを選択すると、Commitウィンドウがなくなります。

それまでCommitウィンドウにあった Local ChangesタブはGitウィンドウに移動し、GitウィンドウでLocal Changes, Log, Consoleのすべてを参照できるようになります。

f:id:hiroga_cc:20201114111417p:plain
Local Changesが統合されたGitウィンドウ

この方法で2つのウィンドウを接続すると、たとえ Command + 0 (macOS標準のCommitウィンドウを開くショートカット) も効かなくなります。

解除方法

分かりません。

関係するか分かりませんが、私の環境だと Gitプロジェクトにも VCSウィンドウが出てきません。代わりにGitウィンドウが出ています。

まとめ

なんなんだろう?

Amplify Console 豆知識(Amplify Console 実践入門 第1.2版のアップデート)

(2版→1.2版に修正)

2020年9月に「Amplify Console 実践入門」という本を出品しました。

techbookfest.org

それ以降に業務でAmplify Consoleを使っていて得た知識をまとめました。いくつかは第2版にも記載しています。
ほお〜と思っていただければ幸いです。

ブランチの接続を解除するとWebサイトは403エラーになる

Amplifyアプリからブランチの接続を解除すると、ホスティングされているコンテンツが削除されます。結果、Webサイトが403 Errorになります。

f:id:hiroga_cc:20201108101325p:plain
403 Error

とはいえ、ブランチ切断の確認画面だとそれって分からないんですよね。よく考えれば確かに予想できるんですが...

f:id:hiroga_cc:20201108101624p:plain
Disconnect Branch

こちらはIssueにまとめているので、よければUp Voteをお願いします! github.com

DockerHubへのログインはできない。

以下のIssueで言及されている通り、DockerHubのRate Limitに引っかかってビルドができないことがあります。

github.com

そして2020-11-08現在、ログイン手段はありません。カスタムイメージを利用されている方は、こちらもIssueのUpVoteを是非お願いします。

CFn, CDKでは DependsOn を設定しよう

ブランチが存在しない状態で AWS::Amplify::Domain が先に作成されようとした場合、 SubDomainSetting に指定されているドメインが未接続のため CloudFormation/CDK のデプロイが失敗します。 DependsOn属性で明示的に指定してあげましょう。

GitHubのWebhookとIncoming Webhookは別物

形式がちょっと違うので、Incoming Webhookを再発行してもGitHub側に登録することはできません。

リポジトリの再接続でOK。

まとめ

以上、Amplify Consoleの豆知識でした。Issueに関しては今後のアップデートに期待ですね!

その他の豆知識も気になる方は、本をご覧いただければ幸いです。

techbookfest.org