@kotyのブログ

PythonとかAWSとか勉強会のこととかを、田舎者SEがつづります。記事のライセンスは"CC BY"でお願いします。

ローカルプロキシで、Chromeへのレスポンスを編集する(Mac OS BigSur)

やりたいこと

背景は聞かないでください。

  • 特定のサイトにアクセスした時に
  • 「本番サイトです!」とHTMLに表示

f:id:kkotyy:20210213203948p:plain

方針としては、ローカルプロキシを立てて特定のサイトの場合だけ当該プロキシを経由、プロキシでレスポンスを編集することを考えた。

ローカルプロキシ

GUIを備えたプロキシもあるようだが、導入がお手軽そうだったmitmproxyというのを使ってみた。

インストール

brew install mitmproxy

いったん起動する

mitmproxy

この状態で、プロキシ経由で証明書をダウンロードする

curl -x 127.0.0.1:8080 'http://mitm.it/cert/pem' > /tmp/mitm.pem

証明書をMacのKeyChainに登録し、Trustする。

タグ挿入スクリプト

BeautifulSoupを使うので入れておく。よく分からんがmitmproxy独自のpython仮想環境がある模様。

/usr/local/opt/mitmproxy/libexec/bin/pip install beautifulsoup4

pythonコードを書く。text/html のレスポンスにタグを挿入する。

import os
from bs4 import BeautifulSoup
from mitmproxy import http

class Injector:

    def response(self, flow: http.HTTPFlow) -> None:
        if flow.response.headers.get("content-type") and flow.response.headers.get("content-type").find("text/html") != -1:
            html = BeautifulSoup(flow.response.content, "html.parser")
            if html.body:
                tag = html.new_tag("span", id="mitmproxy", style="color: red;")
                tag.string = '本番サイトです!!!'
                html.body.insert(0, tag)
                flow.response.content = str(html).encode("utf8")
addons = [Injector()]

書いたスクリプトを指定して、起動しておく

mitmdump -s inject_alert.py

Chromeの設定

Chrome extensionをインストールする。 chrome.google.com

proxyの設定

f:id:kkotyy:20210213203631p:plain

auto switchの設定

f:id:kkotyy:20210213203729p:plain

最後に、extensionのアイコンから auto switch を選択する。

f:id:kkotyy:20210213203858p:plain

大成功の図

なんというか、そもそもこんなことをする必要に迫られたくない。

f:id:kkotyy:20210213203948p:plain

参考サイト

「モノリスからマイクロサービスへ」読了後メモ

モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイド

モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイド

  • 作者:Sam Newman
  • 発売日: 2020/12/26
  • メディア: 単行本(ソフトカバー)

  • マイクロサービスに分割されていることで、一部分だけ新しい技術で作り替えやすくなる。これは顧客にとって良い結果を提供する意外にも新しい技術を習得することで開発者の満足にもつながる。
  • 分解しやすさ、分解による利益の2軸で分解する機能の候補を絞る
  • 一発で分解するのではなく、段階的にリライトを繰り返す

4章の「データベースを分割する」ではデータベースリファクタリングで出てきた話題と割と共通していた。まずはトリガーやデータ更新時、日時バッチ等で新旧両方のDBに更新をかけ、徐々に切り離していくっていう辺りが。

トランザクションをかけられない場合にどうデータの整合性を維持するか

2フェーズコミット、オーケストレーションベースのサーガ、コレオグラフィベースのサーガなどが紹介されていたが、どれも私が関わっているシステムには過剰に感じた。保守できる気がしない。

ロールバック用のロジックを用意しておくのが現実的である。

マイクロサービス間の依存関係をどう管理していくか

現実のシステムでも徐々にシステム間連携が増えてきている。何らかの方法で依存関係を見える化しておかないと、ある改修が意図しない箇所に影響してしまうことが先々ありそうな気がする。 サービスメッシュてのが紹介されていたが、これがいいんだろうか。。。

マイノリティであることの不利益を人生で初めて実感した話

通っていたジムの営業時間が縮小して非常に使いづらくなってしまった。 これまでは朝7時から開いていたので、息子を保育園に送った帰りに泳いでから仕事できた。 しかし今後は10時から営業となった。夕方も17時に閉まってしまう。 サラリーマンの私にいったいいつ泳げというのか。 さらには、コーチがやってくれるレッスンも縮小されてしまった。

この件の記事が新聞に載っていて「利用者の8割は高齢者」だそうだ。 今後は主たる利用者にターゲットを絞って営業するとのこと。 つまり少数派である現役世代はスコープ外となったわけだ。 このご時世でスポーツジムは経営が厳しくなり、生きる道をどうにか探した結果で仕方のないことだと思う。 しかし仕方のないと理解はするものの、子どもたちがスイミングを卒業したらサヨウナラで彼らが就職後に水泳を続ける場所は提供せんなどという焼き畑みたいなことをしていていいんだろうか。中長期的に理念を追うことは忘れないでほしい。

これまで何度か人と違う選択をしてきてマイノリティ側になることが多かったものの不利益を被ったことはなかった。 それが今回マイノリティであることの不利益を初めて経験している。

特に結論は無い。あまりネガティブなことは書きたく無いんだけど、今のお気持ちを記録しておく。

「教育格差 ──階層・地域・学歴」読了後メモ

かなり重い内容ではあった。

本書では、大卒か否かで生涯賃金に厳然たる差があること、さらには大卒か否かは家庭の環境と強い相関があることを客観的に示しており、やはり大学は卒業しておいた方が良さそう、また何らかの親の介入が必要そうという認識を持った。こんなことはほかのご家庭であれば常識なのだろうな。

自分の親は高卒かつ、健康でありさえすればどうにかなるという考え方で、私の進路に何らアドバイスをしたことも選択肢を提示したこともなかった。 三者面談のときに私の志望大学を聞いて「そんな大学があるんですか?」と言い放って担任を唖然とさせたのは今でも語りぐさである。本書で言う低SES家庭である。 しかし偶然たまたま私は選択肢を自力で見つけ、偶然たまたまその選択肢に向かって努力でき、大卒者となった。 この体験があるので、自分の子供に対して選択肢を提示することや勉強を促すことに本書を読んだ後もまだ抵抗がある。健康でありさえすれば大卒であろうがなかろうが自由でいいのではないか、偶然たまたま大学に行ければそれでいいんではと。。。

日本は教員免許制度、教科書検定などの義務教育の諸制度のおかげで傍目には平等な教育機会を持てているように思われている。しかし生まれた家庭や地域によって機会の不平等があると客観的に本書では示している。そして階層、地域による教育格差を縮めていくためにいくつかの提言をしている。

とまあそれはそれとして、せっかく持っている学歴を活かした子育てをした方が、多額の資金を投じて大学へ行かせてくれた私の両親への恩返し(恩を売ったつもりはないだろうけど)にもなるし、社会にも資するのではないかと、ひとりの親としては感じたのだった。

謹賀新年2021

あけましておめでとうございます。例年通り、振り返りと今年やりたいことなどを書きます。

昨年の振り返り

健康問題が大きかったです。

コロナの影響は公私ともにありました。個人的には良いことも悪いこともありました。悪い面は保育園の行事が中止になったとか、旅行できなくなったとか、出社できなくなったとかですかね。 でも良い事もあって、消防や地域の要らん飲み会がなくなったりイベントが簡素化されたりしたことです。なので割と穏やかに過ごせた面もあり良かったです。

転職2年目

新規サービスのシステム面を任されました。割とうまくいっていると評価されているようでほっとしています。自分のスキルに合った規模、テクノロジーであったことが大きいと思います。 エンジニア、非エンジニア問わず周りが非常に優秀でなかなか自信を持って業務するに至っておりませんが、この調子で少しづつ成功体験を重ねて、会社になじんでいきたいです。

一番苦手なのは要件を決めるための調整ですね。利用者側は運用が固まる前にシステム化を望むことが多いのですが、それをしてしまうと無駄なものを作る危険があるのでまずは極力て運用で始めて業務フローが固まったら本格的にシステム化するように意識して調整を試みます。devのリソースで作れてopsのリソースが回る業務フローを提案&調整するのがほんと苦手。手を動かすのは楽しいのですけどね。でも今後ITに詳しい人間として飯を食っていくためには必要なスキルなので引き続きやっていきます。

ちなみに去年担当案件をどうにか世に出したいと書いていた件はいろいろあって世に出ていません。。。

コロナ禍の前から在宅勤務していたので、自分自身の働き方はほとんど変わりませんでした。唯一、月2回ほど出社していたのがなくなったのが地味につらいです。最後の出社は2020年1月で、さすがに出社したいです。

技術的には、引き続きRails+jQueryが主、vue、GASが少々という感じでした。Rails+jQueryはストレスがたまります。。。

IT勉強会関係

思い返せばNSEGが立ち消えしてしばらく経ちまたコロナで対面の勉強会もなくなり、すっかり参加するモチベーションが落ち、まったく勉強会には出ませんでした。なので昨今の最新技術に疎くなっている危機感があります。 PyConJPがオフライン開催されていれば情報交換する機会もあったのでしょうが。。。

英語

英会話は挫折してしまい、podcastを聴くくらいしかしませんでした。それでも耳はだいぶ慣れて、最初聞き始めた時にめっちゃ速いと感じた実践ビジネス英語はほぼ聞き取れるようになりました。聞き取れるだけで、知らん語彙が多いのは変わらず。 一方ネイティブ向けのpodcastはめっちゃ速くてほぼ聞き取れません。実践ビジネス英語でもゆっくり話していたんだと気付かされます。

また、English Journalを購読していたのですがこれは私には合いませんでした。割と俳優とか歌手のインタビューが多く、自分は興味が湧きませんでした。

水泳関係

ここ数年家族旅行を兼ねて出場していたOWSに今年は出られませんでした。フォームをいろいろ試行錯誤したり、練習時間を取ったりして一時期よりは泳力はついたように思います。まだ1,500mを22分半(1分半/100mペース)で泳ぐのは諦めていません。

夏場に水球の練習に参加できたのも良かったです。やはり水球は楽しいです。

家族

健康問題が大きく、夫婦ともに入院しました。健康第一。

koty.hatenablog.com

koty.hatenablog.com

息子が元気なのが救いです。

上記投稿でも書いたのですが、これらを無理なく乗り越えられたのは会社の理解があったからでほんとうに感謝しています。開発スケジュールの調整が効く一方、運用にしわ寄せが行っているのではという心配もあります。

今年の抱負

息子が小学生に上がるので、多少自分の時間が増えるのではと。。。

仕事

予定している新規サービスは非Railsなので楽しみです。少なくない量のGAS資産の保守も続くので、こちらの効率的な管理も模索したいです。

勉強会

新規案件で採用を予定している技術のコミュニティに入っていきたいです。 PyConJPも今年はどうにか現地開催できるといいけど、厳しいかな。

水泳関係

通っているジムがコロナ禍で事業縮小した関係で朝営業をやめてしまうのが痛いですが、引き続きがんばります。

OWSの大会に出たいです。1,500mは23分30秒くらいで泳げるようになりたいな〜。

英語

English Journalは合わなかったのでCNN English Expressを購読してみます。

このご時世で受検を控えていたTOEICを今年はどうにか受けれたらと思います。英会話はモチベーションがあれば。。。

プライベートのモノづくり

家業のシステムをいい感じにしたいなー。試用してみたShopifyはいまひとつ合わなかったので、自作する機運が高まっています。

今年もよろしくお願いします

健康第一で。

2ヶ月ワンオペ記録

奥さんが10月の末に入院し近頃退院しまして、その期間の所感です。

平日

食事は同居する私の母に作ってもらってたので、完全なワンオペではありません。世の中のひとり親さんはすごいと思います。

  • 5:00 私起床。洗濯等
  • 6:00 息子起床
  • 7:00 朝食
  • 7:45 保育園に送る
  • 8:30 自宅に戻り始業
  • 17:50 終業
  • 18:00 保育園迎え
  • 19:00 風呂、夕食
  • 21:00 就寝

この前からだけど、ほぼ定時で仕事をできていたのも今の所属会社の理解あってのおかげです。超絶ホワイト会社です。

休日

休日は食事は私が用意していました。(2世帯住宅なので)

最近は本をよく読むので、図書館に行くことが多かったです。

所感

常に一緒というのと食事が辛かったかな〜。

休日はこれまでは奥さんが息子を見て自分が自由にできる時間がありましたが、常に一緒にいたのが地味に辛かったです。保育園の友達の家に息子だけ外泊させてもらったのは大きな息抜きになりとても感謝しております。

食事は自分は今まで「食べれれば良い」レベルのものしか作らず美味いものを作る努力をしてきませんでした。奥さんはそういうものも食べてくれますが子供は残酷です。そんなわけで私の作ったものを食べないことが多く、「せっかく作ったのになんで食べないんだ」「なんで美味いものが出てこないんだ」と両者不幸でした。最終的に短期的にうまいものを作るのは諦めて、中食、外食をするようにしました。大人になるまでには「ご飯を作る人が一番偉い」ことを学んで欲しい。私は「レシピに沿って料理を作る」ことを学ばねば。。。手順書見ながら作業するの苦手なんだよな。

育児はひとりでするものではないことを痛感しました。世の中のひとり親の皆さんに幸あらんことを。

実践Rust入門 読了後メモ

実践Rust入門[言語仕様から開発手法まで]

実践Rust入門[言語仕様から開発手法まで]

Rustの調査のために手にとった。

言語自体の難しさもあるかもしれないけど、中級者以上向けといった感じで、特に解説無くPythonコードが出てきたり「クロージャ」という単語が出てきたりする。

説明は詳細なので、Rustの基本部分は理解できるのではないかな。

しかしRustは常駐プロセスのようなミドルウェア向けでWebアプリにはあまり向いていないようだな。 メモリを厳密に管理できるのは良いが、Webアプリを作るのにそこまで気にしたくなく業務ロジックに集中したいのが本音である。

それに、比較的使われているWebアプリケーションフレームワークのactix webでさえマルチパートpostをサポートしていないとか。。。