バランスと一点集中(偏り)
バランスを取るというのは凄く大事な事。
バランス良くXXXXをする、バランスのとれたXXXなど、バランスが良い状態は良い状態の一つ
それに対して一点集中(偏り)はバランスが悪い状態になる
バランスが良い状態と一点集中の状態をどう考えるか
バランスが良い状態に保てるのは基礎体力みたいなもので、バランスを意識してそれを保てる事は非常に重要
ここを上手く出来ない状態で一点集中の状態へ行くと、最終的にバランスを保ちたいとき(保たないと駄目なとき)に保てなくなるので危険
逆に、バランスを意識して保てる人が敢えて一点集中したとしても、必要に応じてバランスを保てるので危険は少ない
バランスを保つ事を意識的に行えるようになるまでは、バランスを重視し
バランスを保てるようになった段階で一点集中すれば良い
バランスを意識して保てる状態になる事でバランスを崩すタイミングを知る事が出来る
要はバランスですよ。
SpringBootのEmbeddedServletContainerでアクセスログをlogbackにする
必要なjarは
あとはEmbeddedServletContainerCustomizerを使ってセットする。jarの中にあるのでfile名の取得のところが気持ち悪いけど、設定で変更可能にすると幸せになれるかも
@Bean
public EmbeddedServletContainerCustomizer containerCustomizer(){
return new EmbeddedServletContainerCustomizer() {
@Override
public void customize(ConfigurableEmbeddedServletContainer factory) {
if(factory instanceof TomcatEmbeddedServletContainerFactory){
TomcatEmbeddedServletContainerFactory containerFactory = (TomcatEmbeddedServletContainerFactory) factory;
URL url = this.getClass().getResource("/logback-access.xml");
LogbackValve logbackValve = new LogbackValve();
logbackValve.setFilename(url.getFile());
containerFactory.addContextValves(logbackValve);
}
}
};
}
抽象化宗教
いくつかの宗教を抽象化してみた
この3つが主なキーワード
- 何のために生きるのか
人にはそれぞれ与えられた役割がある。それを全うすること
役割は自分自身の中に既にあるので自分と向き合う事
- どうやって生きるべきか
心を安定した状況に保ち、良い事を見て、聞いて、口にすることで心が良い方向に向かう
そうする事で自分の周りも良い方向に向かう
- 不安の対処
長い目で見れば悪い時もあれば良いときもある。悪いときにも心を安定した状態に保ち自分の役割を全うする事 そうすれば良いときには更に良い事が訪れる
死は全ての終わりでは無い、次への始まりである
応用
- 何のために作るのか
ソフトウェアにはそれぞれ与えられる役割がある
役割は既にその会社の中にあるのでそこから導き出す事
- どうやって作るべきか
安定した開発プロセスを使用し、必要な情報を見て、必要な人に聞いて、共有する事で良い方向に向かう
そうすることでユーザにとっても使いやすいソフトウェアになる
- トラブルの対処
プロジェクトの間には予想外の悪い事も起きるし、想定より良い事もある。予想外の時にも落ち着いて役割を全うするにはどうすれば良いかを考える
そうすればきっと解決の糸口が見つかる
ソフトウェア開発は終わりでは無い、運用の始まりである
SpringBootでEmbeddedServletContainerで別ポートのServletコンテナを起動する
この方法でコンテナとしてはいくつでも起動出来る
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(9090);
servletContainer = factory.getEmbeddedServletContainer((c) -> {
ServletRegistration.Dynamic dispatcher =
c.addServlet("dispatcher", new DispatcherServlet(appContext));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
});
servletContainer.start();
appContextは普通のWebApplicationContext あとは好きなフィルターを追加したり、initParamで識別用の文字列を設定したりする
もう来てる次の時代のアーキテクチャの単なるメモ
microservice:ちっちゃいさーびすをたくさん作ってそれらを連携させる
認証:ユーザのパスワードを使わないAPIベースの認証
認可:細かいレベルでのアクセス認可
クラウド:サーバが必要なタイミングで必要な数取得できる
service間連携:ちっちゃいサービスの間の自動連携
これらを上手く使ったアーキテクチャを実現するには・・・
メリットは
小さいサービスなので保守やメンテナンスが楽
API的な互換性さえ保てればどの言語やどんな環境でも使用できる
課題は
- サービスの粒度
大きすぎると今と変わらないし、小さすぎると・・・
- データの共有
ある種のデータは多くのサービスで参照される。そのデータをどうやって安全に同期するか
- レポートやデータの活用
レポートとしてまとめたり、データを二次三次で活用したいと思ったときに分散しすぎるんじゃないかと
Ninja インストール
IntelliJ IDEAのClojureプラグイン
言語だけなら普通にプラグインで入る La Clojure を入れる
でも、Leiningenも込みでサポートが欲しい場合はこれを入れる
Cursive: The IDE for beautiful Clojure code
ライセンスを書いてないのがちょっと気になる