Gmailで別メールアドレスを使用しての送信エラーの解決方法について

Gmailgmailアカウント以外のメールアドレスをエイリアス登録していて、 そのメールアドレスのSMTP経由でのメール送信がエラーになるようになったので、 その解決方法についての備忘。

症状

Gmailエイリアス登録していたメールアドレスからメールを送信した際、 一見正常に送信できたように見えるが、一定時間後、daemonさんから送信エラーのメールが届く。
当然、送信先では該当メールは受信できない。

原因

エイリアス登録しているSMTPドメイン名と、 SMTPサーバーの証明書のドメイン名が異なるとGmailセキュリティポリシー違反になるようになったことが原因らしい。

解決方法

エイリアス登録しているSMTPドメイン名と、SMTPサーバーの証明書のドメイン名を一致させる。
SMTPサーバーのアドレスは、(おそらく)複数種類配布されているはずなので、証明書のドメイン名と一致している方をエイリアス登録する。

方法については、以下の参考記事を参照すること。

参考記事

qiita.com

ブロックチェーンの学習備忘録

教材

www.udemy.com

Blockの構成要素

  1. previous hash
  2. transactions
  3. nonce
  4. timestamp

Proof of Work

  • previous hash+transactions+nonceでhashを求め、mining difficultyと一致するnonceを求める。
  • nonceは0...nでインクリメントしていく
  • mining difficultyはおおよそ10分で計算完了程度に調整される

Mining

  • 自アドレスへのmining award分のtransactionを含めたProof of Workを行い、新規Blockの作成を試みる。

Private keyとPublic key

  • ECDSA(curve=NIST256p)を使用して作成(bitcoin

Blockchain addressの作成

  1. Creating a public key with ECDSA
  2. SHA-256 for the public key
  3. Ripemd160 for the SHA-256
  4. Add network byte
  5. Double SHA-256
  6. Get checksum
  7. Concatenate public key and checksum
  8. Encoding the key with Base58

Transactionの署名

  • transaction
  • sender private key を使用してsignatureを作成
sha256 = hashlib.sha256()
sha256.update(str(transaction).encode('utf-8'))
message = sha256.digest()
private_key = SigningKey.from_string(bytes().fromhex(self.sender_private_key), curve=NIST256p)
private_key_sign = private_key.sign(message)
signature = private_key_sign.hex()

Transactionの認証

  • transaction
  • sender public key
  • signature を使用してtransactionを認証
sha256 = hashlib.sha256()
sha256.update(str(transaction).encode('utf-8'))
message = sha256.digest()
signature_bytes = bytes().fromhex(signature)
verifying_key = VerifyingKey.from_string(bytes().fromhex(sender_public_key), curve=NIST256p)
verified_key = verifying_key.verify(signature_bytes, message)

ブロックチェーンノード間のコンセンサス

  • 最も長いチェーンが採用される

プログラマーに転職するならプログラミング以外にもう一つ

プログラマーとして転職したいなら、プログラミングスキルは必須

どのポジションに転職したいかにもよりますが、プログラマーとして転職したいのであれば、独学であれスクールであれ、ある程度のプログラミングスキルの習得は必須になります。

 

転職後に困らないためにもう一つ

プログラミングのスキルは重要ですが、実務ではそれ以外にも、ハードウェア、ネットワーク、データベース、プロジェクトの工程など、幅広い知見が必要になってきます。

 

もし、プログラミング以外に、もう一つ何かする余裕があるのであれば、

基本情報技術者

の資格取得(もしくは学習)をおすすめします。

 

 基本情報技術者を取得(もしくは学習)するメリット

 基本情報技術者は、資格としてはレベルが高いものではありませんが、ITに関する知識を広く浅く求められますので、学習することで幅広く基礎知識を獲得することができます。

 加えて国家資格なので履歴書にも書くことができます。

 

資格自体に意味は薄くても学習のための土台としては有用

エンジニアへの転職は、ゴールではなくスタートラインです。

 

とにかく流れの早い業界なので、特定の技術だけでなく、可能なかぎり幅広く学習し続けないと、あっというまに時代に取り残されて陳腐化していきます。

 

基本情報技術者で獲得した知識の全てが実務に直結するわけではないですが、末永く続く学習の土台となりますので、プログラミングと平行して学習することをおすすめします。

Udemyで講座を購入してみた

Udemyでアカウントを作成すると一定期間ディスカウントされるので以下の講座を購入してみた。

【世界で2万人が受講】JavaScriptエンジニアのためのES6完全ガイド

(https://www.udemy.com/share/101WLmAEMbd1dUQXoB/)

学習済み

フロントエンドのフレームワークの前提条件の学習用

ここを1.5倍速で走り抜け、freeCodeCampで復習するといい感じで理解が深まった。

React - The Complete Guide (incl Hooks, React Router, Redux)

(https://www.udemy.com/share/101WbyAEMbd1dUQXoB/)

学習中

フロントエンドフレームワークの学習用

Vue.jsと悩んだけど、React Nativeにつなげたくてこちらを購入。

どうやらReactのバージョンアップに追随して講座もアップデートされるらしい。

ただし、音声も字幕も英語なため、自分の英語力では受講すると凄く疲れる。修行。

現役シリコンバレーエンジニアが教えるPython 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイル

(https://www.udemy.com/share/1013hkAEMbd1dUQXoB/)

学習済み

ときどきYoutubeの広告に出てきてた講座。めちゃくちゃ気になってた。

もともとPythonを体系だって学習したかったのと、あこがれのシリコンバレーで働く日本人エンジニアへの興味から衝動買い。

Pythonの文法だけでなく、巷でよく目にするMQ、非同期処理、Ansible、NoSQLなどが、基本機能だけでも動いている様を見れるのは、とてもお得。

Pythonいいよ。いいよPython

【世界で5万人が受講】実践 Python データサイエンス

(https://www.udemy.com/share/1013lqAEMbd1dUQXoB/)

学習中

上記Python講座受けるなら、どうせならその先までということでこちらもあわせて購入。

この講座で脳みそ慣らしてから、CurseraやらUdemyの英語版講座やらで深堀りしていくのがよいのかなと。

所感

動画でプログラミングの学習ってどうなの?と思っていたが、想像以上によい。

文字情報での学習の代替とはならないが、補完的に使用すると幸せになれるかも。

結局は、手を動かさないと身にならないんですけどね。

まあ、一番の感想は、シリコンバレーいきてーー。

JavaアプリApplication Insightsで日本語が文字化けする

AzureのPaasである AppService(Windows)で動かしているJavaのWebアプリ(Spring boot 2.x)からログをApplication Insightsに出力した際、日本語が文字化けした。

ロガー(logback)はUTF-8で出力用に設定済み。

 

ネットで調べてみると、AppServiceのデフォルト文字コードがcp1252(ラテン語)らしいのが原因っぽい。

なので、さらにネットで調べると解決策ありました。

Azureポータルのアプリケーション設定で以下のパラメータを追加すると文字化けなおりました。

 

JAVA_OPT:-Dfile.encoding=UTF-8

 

同パラメータでは、ヒープサイズの設定もできるんですね。

 

参考にした公式ドキュメントです。

https://docs.microsoft.com/ja-jp/azure/app-service/configure-language-java

 

 

 

CentOSとWindows10でファイル共有

CentOSを共有サーバにしてWindows10でファイルを共有する方法の備忘録

サーバ設定

全部ルートユーザで実行

1.SMB4をインストール

バージョン確認

smbd -V

旧バージョンがインストール済みの場合はアンインストール

yum remove samba
yum remove samba-common-*

SMB4をインストール

yum install samba4
2.共有ディレクトリ作成
mkdir /home/samba
chmod 777 /home/samba
3.smb.confで共有設定

/etc/samba/smb.conf

[global]
workgroup = ワークグループ名
netbios name = ホスト名
hosts allow = 127. 接続を許可するネットワーク(例:192.168.3.)
client min protocol = SMB3
client max protocol = SMB3
#この設定がないとWindows10からの接続ができなかった
[共有名(共有フォルダの名前になる)]
comment = Personal Share
path = /home/samba
browsable = yes
public = yes
writable = yes
guest ok = yes
guest only = yes
create mode = 0777
directory mode = 0777
4.プロセス起動
/etc/rc.d/init.d/smb start
/etc/rc.d/init.d/nmb start

クライアントから接続

エクスプローラーなんかから

\\サーバのホスト名\共有名

でアクセスしてみる。

Cloud9がディスクfullになってしまう事象の解決法

Cloud9でrailsアプリを開発してHerokuにデプロイしていると、tmpファイルに圧迫されてディスクfullになってしまう。

以下のコマンドで比較的使用量の大きいディレクトリを確認できる。

du -h -t 50M

Herokuを使用している場合、おそらく、以下のディレクトリの使用量が大きいはず。

~/.local/share/heroku/tmp

上記tmpディレクトリ内のtmpファイルを削除すれば当面のディスクfull状態は解消できる

cd ~/.local/share/heroku/tmp
rm -rf *
※ちゃんと該当ディレクトリに移動して削除してね。ルートディレクトリなんかで上記rmコマンドたたくと大事故になりますよ。

削除に関しては自己責任でお願いします。