ProxyPassReverseにajp://~と書くのは間違い

【やらかしてたこと】
Apache HTTP Server(以後httpd)の後ろにTomcatを配置して処理を行っている。
そのため、proxy.confに以下の様に記載していた。

ProxyPass /hoge ajp://localhost:8009/hoge
ProxyPassReverse /hoge ajp://localhost:8009/hoge

ProxyPassReverseは、上記の記述では何も動かないただのおまじないだとようやく気付いた。

【ProxyPasReverseディレクティブ】
[マニュアル]
http://httpd.apache.org/docs/2.4/ja/mod/mod_proxy.html#proxypassreverse

[文法]

ProxyPassReverse path url

[機能概要]
httpdの後ろにTomcatがいる構成でTomcatがリダイレクト用レスポンスを返却する際、クライアントが直接Tomcatにアクセスさせない様に(必要であれば)調整するための機能である。
なお、ProxyPassは、httpd経由でTomcatにアクセスする際のURLを書き換えるための機能である。

f:id:yoneyore:20210324001859p:plain
リダイレクトの際もhttpdを経由して欲しいのにそうなってくれない場合に利用するディレクティブ

[挙動から理解した仕様]
・リダイレクトさせるためのレスポンスを返す際のLocationヘッダーを編集する。
・ProxyPassは、リクエストを書き換える機能のため、pathをurlに置換する。
 ProxyPassReverseは、レスポンスを書き換える機能のため、urlをpathに置換する。
・やっていることはLocationヘッダーに対して、文字列置換を行っているにすぎない。
 論理情報(url, ポート番号, コンテキスト名, プロトコル, etc...)は一切解釈してなさそう。
・urlは相対パスでも絶対パスでもどちらでも良い。
 但し、先頭一致はしている必要が有る(部分一致で置換はしていなさそう)。
・pathも相対パスでも絶対パスでもどちらでも作用した。
 (使い方として正しいかどうか分からないが、現時点では動く事は確認済)
Cookieを用いている場合は、Cookie側も想定通りか確認しておく必要がある。
 書き換えが必要な場合は、ProxyPassReverseCookieDomainやProxyPassReverseCookiePathを用いる。
・Locationディレクティブを用いて記述する事も可能である。

<Location "/hoge">
ProxyPass ajp://localhost:8009/hoge
ProxyPassReverse /hoge
</Location>

 但し、Locationディレクティブでは表現しにくい場合がある。
 その場合は、Locationディレクティブで無理にくくろうとせずに記述した方が良い。

【ProxyPasReverseディレクティブの具体例】
実際は個々のリクエストでなく、色々なリクエストを気にしないといけないので、下記例が実際に必要になることはないだろうが、ProxyPassReverseの理解を行う際の一助のために記載する。

[例1]
https://example.jp/hoge1/topにアクセスし、リダイレクトに/hoge1/menu1と返却する。
proxy.confに以下の様に記述しておいたとする。

ProxyPass / ajp://localhost:8009/
ProxyPassReverse /manager /hoge1/me

この場合、リダイレクトする際のURLは、https://example.jp/managernu1となる。

[例2]
https://example1.jp/hoge1/topにアクセスし、リダイレクトにhttps://example1.jp/hoge1/menu1と返却する。
proxy.confに以下の様に記述しておいたとする。

ProxyPass / ajp://localhost:8009/
ProxyPassReverse http://example2.jp/hoge2/menu2 https://example1.jp/hoge1/menu1

この場合、リダイレクトする際のURLは、http://example2.jp/hoge2/menu2となる。

【使いどころ】
・レスポンスのLocationがTomcatのホスト名を含めた絶対パスを返却してしまう場合
・レスポンスのLocationがdockerなど仮想環境のホスト名、ポート番号を返却し都合が悪い場合
・レスポンスのLocationがTomcat内の外部には公開していないパスも含めた相対パスで返却してしまう場合

【その他】
・必要の無い場合は、書かなくても良いディレクティブ
・現時点でProxyPassReverse ~ ajp:// ~ と書いてたら削っても問題ないはず
 (実際は怖くてすぐ消せないけど…)

サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)

サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)

  • 作者:鶴長 鎮一
  • 発売日: 2012/03/23
  • メディア: 単行本(ソフトカバー)
詳解 Tomcat

詳解 Tomcat

Androidで電話の着信のみ一時的に通知しない様にしたい

ユースケース
学習部屋などでスマホのデザリングを使ってネットは行いたい。
しかし、電話やLINEなどの対人が関わるアプリは遮断したい。

【対応方法】
1.フォーカスモードを用いる
2.サイレントモードを用いる

【フォーカスモード】
[効能]
特定のアプリの利用を一時的に遮断する。

[設定方法(Pixel5の場合)]
対応方法1:クイック設定パネル(※1)でフォーカスモードをONにする
対応方法2:設定 -> Digital WellbeingでフォーカスモードをONにする

※1 上部を下にスワイプしたら出てくるボタン群のこと

[カスタマイズ方法(Pixel5の場合)]
設定 -> Digital Wellbeing - フォーカスモード を選択するとアプリを選択できる。

[設定の注意点]
・フォーカスモード利用時でもバイブの設定などしていた場合は、連動する模様
 (この仕様がまだ作りこみされていないところかもしれないので今後変更になるかもしれない)
・通話が発生するとフォーカスモードのため遮断してますが解除しますか?
 というポップアップが表示される。これを非表示にする設定は今のところなさそう。

【サイレントモード】
[効能]
許可した内容以外を一時的に遮断する。

[設定方法(Pixel5の場合)]
対応方法1:クイック設定パネルでサイレントモードをONにする
対応方法2:設定 -> Digital WellbeingでサイレントモードをONにする
対応方法3:設定 -> Digital Wellbeingでおやすみ時間モード(※2)をONにし、
      おやすみ時間モードがONのときのオプションで
      おやすみ時間モードでサイレントモードをONにする設定をする

※2 ミュートにしたり、 画面をグレースケールに変更したりする機能

[設定の注意点]
・サイレントモードの詳細設定で通知の表示オプションを設定しないと通話が表示される
 お勧めの設定は通知の非表示、通知音なしである。
 この設定にすると、モードONの時には表示されないが、モードOFFの時に表示され検知できる。
 一方、カスタムで全設定をOFFにすると、アプリに着歴は残るが気づくタイミングが無い。

【共通の注意点】
楽天モバイルの場合は楽天Linkアプリを止める必要がある
 同様に利用している通話アプリがデフォルトと異なる場合はそちらを加える必要がある
 そのため、事前に遮断できるかどうか試しておいた方が無難
・電話を遮断する訳ではない
 相手からしたらコールしたまま待っている形となる。
 そのため、電話アプリなどを触っているともしかしたら繋がる可能性は可能性としてはあり得る。

【その他】
・アプリで非通知にする様なアプリがあるかもしれないが、そちらは未調査である。
 (該当しそうなアプリあったが、着信してすぐ切るみたいな挙動ぽかったのと、
  あまり通話関連の操作の権限を良く分からないアプリに設定したくないため)
機内モードも最近はBluetoothはONのままにできるので、
 ネットワークも使わないけど音楽は使いたいという人は検討の余地あり。
 但し、機内モードの場合は、相手先は圏外として取り扱われる。

ペイントだけでモザイク処理を実現する方法

【やりたいこと】
車のナンバープレートや人の顔など自分の変えたい部分だけ簡単にモザイク処理を行いたい

【対応方法】
1.Win → paintなどでペイントを起動
2.画像をペイントに読み込ませる
3.ホームメニューをクリックし、選択をクリック
4.モザイクかけたい領域を選択
5.Ctrl + wを押して、サイズ変更と傾斜を呼び出す
6.水平方向と垂直方向を100より大きい値を入力し画像を縮小(※1)
7.Ctrl + wを押して、再度サイズ変更と傾斜を呼び出す
8.水平方向と垂直方向を100より大きい値を入力し画像を拡大(※1)

※1 値の指定方法
100を6.の縮小で指定した値で割った値を、8.の拡大で100にかけた値として指定
例) 縮小で50を指定したら、拡大では200を指定する
なお、水平方向と垂直方向の値は、縮小・拡大時も同じ値
(縦横比を維持するのチェックボックスがONなら自動で同じ値が設定される)

【その他】
・縮小や拡大で指定できる値は1~500まで
・私のお勧めは、今のところ2パターン
 [原型留めるモザイク]
  20で縮小、500で拡大
 [原型留めないモザイク]
  20で縮小し、再度20で縮小
  その後、500で拡大し、再度500で拡大
・昔は4.の処理の後、Ctrl + -/+で縮小/拡大というショートカットができていたと思うのだが、今はどうもできない。
・この手法(MSペイントの画像縮小/拡大でモザイク処理)自体は、WoodStreamのデジタル生活で話されていた内容が原案です。
windows-podcast.com

P78 投資効果の検討(NPV/PBP/IRR/ROI)

NPV[Net Present Value]:正味現在価値

将来のある時点におけるお金の価値を、現在のお金の価値に換算したもの。
将来見込まれているキャシュイン/アウトを現在の価値に換算するために割引率を考慮する。
(キャッシュインであれば金利、キャッシュアウトであれば利息)
NPVがプラスであれば経済価値があり、マイナスであれば採算性がないことを指す。
NPV | みずほ証券 ファイナンス用語集

IRR[Internal Rate of Return]:内部収益率

NPVをゼロにする際の割引率を指す。
投資において最低限達成しなければいけない目標の利益率と考えられる。
glossary.mizuho-sc.com

PBP[Pay Back Period]:回収期間

投資額を回収するために必要な期間のこと
例えば、投資額が100万円、1年間のキャッシュインが50万円が続くのであれば、回収期間は2年である。

ROI[Return Of Invesment]:投資利益率

投資額に対する利益の割合で、利益/投資額で求めれる。

関連用語

ハードルレート

投資をする上での判断基準とする指標で、これよりも収益率が低いと投資不適切とする指標である。
一般的には、資本コスト[WACC:Weighted Average Cost of Capital]にリスクプレミアムを勘案した値となる。

資本コスト

資金調達のために企業が必要なコストのこと。
資本調達のための借入金の利息支払いや、社債のコスト、株式の配当金などを勘案した費用である。

ROE[Return of Equity]:自己資本利益率

自己資本に対する利益が占める割合で、当期純利益/自己資本で求めれる。
企業が自己資本をいかに効率的に運用して利益を生み出したかを表す指標である。

ROA[Return of Asset]:総資本経常利益率/総資産経常利益率

総資本・総資産を用いてどれだけ稼げているかを表した比率である。
経常利益/総資本or総資産で求める事ができる。
www.keieibunseki.com

自己資本・純資産・他人資本・総資本

返済する必要がない資金で、株主から集めた資金と、経営活動の結果得られた剰余金を合算したお金のこと。
類似語に純資産があり、これは自己資本に加え、新株予約権や少数株主持分なども含まれる。
対義語は他人資本であり、支払手形・買掛金・借入金・社債などを合算したお金のこと。
自己資本他人資本を合わせて総資本と呼ぶ。
kabusenlife.com

流動資産・固定資産・繰越資産・総資産

流動資産は、比較的短期間に換金できる資産である。
(ex. 現金、預金、受取手形売掛金棚卸資産短期貸付金、有価証券)
固定資産は、長期間にわたって利用または所有する資産である。
(ex. 土地、建物、機械、ソフトウェア、投資有価証券)
繰越資産は、支出の効果が1年以上にわたって影響するものとして資産として計上するものである。
(ex. 開発費、創業費、社債発行費、株式交付費、創立費)
繰延資産|意味は?種類は?会計処理はどうする?|税理士検索freee
総資産は、流動資産・固定資産・繰越資産を合算した値であり、金額は総資本と同じ値になる。

社内プロキシ(認証有)な環境でdockerのイメージをビルドしたい

【行いたい事】
・docker-composeを用いて、dockerfileのビルドをWindows10のPCで行いたい
・WIndows10のDocker Desktop for Windowsでコンテナを起動させたい
・社内プロキシ(認証有)な環境で行いたい

【事前設定・嵌った時の振り返りポイント】
・Docker Desktop for Windowsのプロキシ設定を確認しておく
 多分ビルドの時は直接アクセスするパターンが主ではあるが、コンテナ起動後の問題になるので
環境変数を確認しておく
 http_proxyなど定義されているかどうか、それが想定通りなのかどうか
・Windows10のプロキシ設定
WinHTTPプロキシの設定方法 - maruko2 Note.
・docker-composeを実行する環境のプロキシ設定
 上記を全て確認したのに、実行するコンソールの時だけ想定と狂っている事ないか

【対応方法】
●ゲストOS, ゲストOS内pip用
docker-composeを実行する際に引数としてプロキシ情報を渡してあげる
大文字と小文字両方定義しておく方が無難

set USER=hoge
set PASS=hogehoge
set PROXY=http://%USER%:%PASS%@proxy.example.com:8888
docekr-compose build --build-arg HTTP_PROXY=%PROXY% --build-arg HTTPS_PROXY=%PROXY% --build-arg http_proxy=%PROXY% --build-arg https_proxy=%PROXY%

●ゲストOS内npm用
dockerfileにプロキシを参照する記述を行う
docker-composeで渡された環境変数を利用できるので、それで設定する
registryのデフォルトがhttps~なので、http~にしないと動かない場合がある(串次第?)

RUN npm config set proxy $http_proxy
RUN npm config set https-proxy $https_proxy
RUN npm config set registry http://registry.npmjs.org/

【その他】
●利用したいnpmパッケージによっては、上記を設定しても動かない場合があるかも
私の場合は、JupyterLabでJavaScriptを利用するためのijavascriptが導入できなかった。

Step 15/21 : RUN npm install -g ijavascript
 ---> Running in f3dd86b4f755
npm ERR! code 1
npm ERR! path /usr/lib/node_modules/ijavascript/node_modules/zeromq
npm ERR! command failed
npm ERR! command sh -c node scripts/prebuild-install.js || (node scripts/preinstall.js && node-gyp rebuild)
npm ERR!
npm ERR! Error: connect ECONNREFUSED 52.192.72.89:443
npm ERR!     at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1146:16) {
npm ERR!   errno: -111,
npm ERR!   code:

それ以外は無事導入できている事や、
他のパッケージで上記エラーをパッケージ側で直している事から多分自力では無理かも。
github.com
ただ自分のせいで無い事が証明できないのでissue登録できない…

●ホスト名が解決できない場合は、docker-composeに定義すれば解決できる
qiita.com

●プロキシの認証ユーザー名やパスワードのところにダブルクオーテーションが無いからエラーとか見かけた。
それを付ければ動くんだという回答と、それで動いた!ありがとう!というやりとりを見かけた。
よって、利用している社内プロキシによってはあり得るのかもしれない。
但し、私の環境では特にそんなことしなくても無事動いた。

【参考リンク】
future-architect.github.io
qiita.com

Node.js超入門[第3版]

Node.js超入門[第3版]

改訂版 Pythonユーザのための Jupyter[実践]入門

改訂版 Pythonユーザのための Jupyter[実践]入門

Jupyter LabでPlotly Expressの図が表示されない

【事象】
Pandasのplotメソッドで表示した図は表示されるのに、Plotly Expressで表示した図が表示されない。

f:id:yoneyore:20210301004744p:plain
Plotly Expressのplotメソッド部分が何も表示されていない

【原因】
Jupyter Labにplotly-extensionを追加できていないため

【対応方法】
以下のサイトに従い、plotly-extensionを追加する
jupyterlab-plotly - npm

jupyter labextension install jupyterlab-plotly
f:id:yoneyore:20210301005425p:plain
無事表示された

【補記事項】
・jupyter serverextension enable --py jupyterlab-plotlyと書くとエラーが発生する。
 なお、jupyter serverextension enable --py jupyterlabさえすれば活性化される。
・jupyter labextension install @jupyterlab/plotly-extensionはdeprecatedなので、使わない。
・Jupyter Labは一度再起動した方が良い

Jupyter LabのLauncherにJavaScriptを追加したい

【前提】
node.jsがインストールされている

【対応方法】

npm install -g ijavascript
ijsinstall

改訂版 Pythonユーザのための Jupyter[実践]入門

改訂版 Pythonユーザのための Jupyter[実践]入門

Node.js超入門[第3版]

Node.js超入門[第3版]