おはよう君需要なし

求不得苦な日々

Selenium Serverを使用しようとして proxyで躓いた話

昨今、Chromeがheadlessモードに対応するなどして、ブラウザの自動制御がひそかに激アツになっているのをご存知でしょうか。

まぁぼくもつい最近まで知らなかったので色々と試してみているんですが、使えん!!!となって1週間ぐらい悩んでしまったので状況をシェアしたいと思います。

プロキシ環境で使う場合には注意

というわけで、proxyで使う場合には注意が必要です。

本当に情けない話なんですが、proxyってあんまり使ったことなくて慣れてなかったのもあり、色々と手探りでやっていました。

環境変数http_proxyhttps_proxyを設定しておけばnodeは適当に通信してくれるのでnpm installコマンドなどはすべて問題なく使用でき、Seleniumでブラウザを立ち上げる場合でもブラウザのプロキシさえちゃんとしておけば問題ないだろうと思っていました。

しかし、実際にWebDriverIO(Seleniumのラッパーライブラリ)を使用してブラウザを制御してみようとすると、コンソールには謎のproxyのエラーが。むむ、こやつは何を通信しようとしているのだ…?となります。

原因:localhostへの通信

調べてみると、よくあるタイプのSeleniumラッパーライブラリは直接WebDriverを使用しているわけではなく、WebDriverを使用してくれるSelenium Serverに対して通信を行い、何らかのプロトコルで通信しているみたいでした。

今回はselenium-standaloneという、localhostSelenium Serverを立てて使用できるパッケージを使用していたため、proxy経由でlocalhostに通信を試みようとし、エラーが発生してしまったのだと考えられます。

解決策:no_proxyはちゃんと書きましょう

クソみたいな結論で本当に申し訳ないんですが、環境変数no_proxyは面倒くさくてもlocalhostぐらいは定義しておきましょう、という教訓でした。cmdで

> set no_proxy=localhost

この一文を追加するだけですんなりSelenium Serverを使用することができましたとさ。トホホ

Javaで3Dゲームプログラミング※(第0回)

(※ただしOpenGLなどGL系の支援は使用しない。)

第0回としましたが、第1回があるかは謎です(笑)

はじめに

OpenGLとか勉強していると、ややこしい行列とかがバババーッと出てきて知らない間にうまい具合に表示されておーすごいって感じなんですがイマイチ直感的じゃない気がしていました。

数学的に正しいのはわかるんだけど手を動かして実際に計算してみればわかるんだけど、それを再確認することって大切だと思います。OpenGLをそのまま使ってしまうのは完全にブラックボックスなわけで計算している実感がわきませんし

というわけで、これからOpenGLを使用せずにJavaで3Dレンダリングを用いたゲームプログラミングについて記事を書いていこうと思います。

なぜゲームプログラミングなのか

ゲームプログラミングって色々と学べることがあるんじゃないかと思います。例えば、

などなど。最近はCPUパワーで押せばほとんど書けてしまうので意識しないとあんまり使う機会がなくて微妙かもしれませんが。クオリティを上げていけばわかりやすく効率的な書き方が求められていくと思うので、こういった勉強も無駄にはならないと思います。

現状

現状としてはベースの部分は割としっかり実装できてきて、シェーディングやテクスチャについても考慮したレンダリングができています。ただ、ハードウェア支援を受けていないCPUのシングルスレッド処理ですべて書いているため解像度を上げると途端にFPSが落ちてしまいます…

それを改善すべくあーだこーだ実装してみているんですがあまり改善する兆しは見えません。というかCPU100%に張り付いていないのにFPSが落ちるってどういうこっちゃ(CPU以外がボトルネックになっている?!)

というわけで

現状あまり人様に見せられるような仕上がりにはなっておりません…

とりあえず、次回から行列演算についてちょっと書くぞ~~~