blog.8-p.info

iKnow をスクレイピングしようとしたら https://iknow.jp/login が派手に JavaScript を使っていた。

仕方がないので Ghost Driver 経由で PhantomJS を呼ぼうと思ったら、最近 Ghost Driver はあまりメンテナンスされていないらしく

If you need a better maintained WebDriver implementation, and write your code in Java, why not checkout Machine Publishers’ jBrowserDriver? Tell Dan Hollingsworth I sent you.

代わりに、jBrowserDriver がすすめられていた。jBrowserDriver は

A programmable, embedded web browser driver compatible with the Selenium WebDriver spec – fast, headless, WebKit-based, 100% pure Java, and no browser dependencies

をうたうライブラリで、JavaFX の javafx.scene.web.WebView を使っている。

    val driver = new JBrowserDriver(Settings.builder.timezone(Timezone.AMERICA_NEWYORK).build)

    driver.get("https://iknow.jp/login")

    driver.findElement(By.name("user[email]")).sendKeys("alice@example.com")
    driver.findElement(By.name("user[password]")).sendKeys("pa55w0rd")

    driver.findElement(By.tagName("form")).submit()

こんな感じに使える。

実装

実装を少し見てみると、JBrowserDriver を new するたびに、java を子プロセスとして起動して

  public JBrowserDriver(final Settings settings) {
    ...
    sessionId = new SessionId(launchProcess(settings, configuredPortGroup.get()));
    if (actualPortGroup.get() == null) {
      Util.handleException(new IllegalStateException("Could not launch browser."));
    }
    JBrowserDriverRemote instanceTmp = null;
    try {
      synchronized (lock) {
        instanceTmp = (JBrowserDriverRemote) LocateRegistry
            .getRegistry(settings.host(), (int) actualPortGroup.get().child,
                new SocketFactory(settings.host(), actualPortGroup.get(), locks))
            .lookup("JBrowserDriverRemote");
        instanceTmp.setUp(settings);
      }
    } catch (Throwable t) {
      Util.handleException(t);
    }
    remote = instanceTmp;
    ...
  }

子プロセスとは RMI 経由で通信していた。

  @Override
  public String getPageSource() {
    try {
      synchronized (lock) {
        return remote.getPageSource();
      }
    } catch (Throwable t) {
      Util.handleException(t);
      return null;
    }
  }

なにもインストールせずに Java から簡単に WebKit が呼べるというのはちょっと面白い。

いままで使っていた /ja/post/2016/09/30/slug/ という形式がちょっと長い気がしてきて /post/ という部分を外してみた。過去のリンクは Nginx でリダイレクトしています。

後日談

リンクを変更しただけの古い記事が Feedly で新着記事としてあがってきてしまい、ごめんなさいという感じになった。

妻の MacBook Air が Mac の起動時に「?」マークが点滅表示される場合 になってしまい、その状態からは Command + R を押しながら起動することで脱出できたんだけど、そろそろ寿命かなあと思って AirMac Time Capsule を買った。

Apple べったりなのに少し躊躇がありつつも、でも、無線 LAN 経由で勝手にバックアップされていくのは便利で良い。ルーター機能もついていて、CenturyLink のルーターでは fast.com 調べで 5.3 Mbps しか出ていなかったのが、なんと 42 Mbps になった。体感で8倍も速くなった感じはしないけれど。

ちなみに、日本では AirMac Time Capsule という名前だけど、アメリカでは AirPort Time Capsule という名前で売っている。

The Stranger newspapers

The Stranger はシアトルのフリーペーパーで、アパートの近くのニューススタンドに置いてあるのもあり、たまに手にとって読んでいる。

意識して読むようになったのは 2015年1月28日号 からだったと思う。”New to Town!” 特集の冒頭に

For some reason, The Stranger’s staff has decided that the end of January is a perfect time to publish a package of stories about moving to Seattle. (Is January an especially noteworthy month for people to move to Seattle? Who knows! Who cares! Has The Stranger ever published anything according to a reasonable plan?)

と書くさまに、これはなにか変だと思って Wikipedia の The Stranger の項 を読むと、発行人が The Onion の創業者のひとりだというので納得した記憶がある。

特集

ほとんどの号には、特集というかテーマみたいなものがある。最近の号 は、主催する The Genius Awards の候補者紹介に加えて、別冊のアートガイドもついてくる芸術特集で、Haruki Murakami Bingo を彷彿とさせる Seattle Theater Bingo がかわいかった。

読ませるものだと、シアトル出身でレズビアンの著者が、自分の彼女の実家を訪れる My Girlfriend and I Just Visited North Carolina, and We Did Not Get Beat Up

Mary Anne told me Charlotte was like Bellevue, so I imagined it as sort of a fancy strip mall featuring narration by William Faulkner.

Then, of course, I started reading about House Bill 2, a piece of legislation signed by Governor Pat McCrory that went into effect earlier this year and that prevents local municipalities in North Carolina from passing LGBTQ antidiscrimination laws.

著者が身構えるわりには、そこまで大きな事件もなく、そこもふくめて良かった。

また、Rui さんが出ていた回の Rebuild にバンクーバーの話があったけど、A City of Empty Towers ではバンクーバーの住宅事情の悪化を詳しく報じている。

なお、Stranger は政治的にはリベラルよりで、Should I Vote for Hillary Clinton? A Flowchart なんてものも載っている。

連載

連載のコラムもいくつかあり、私は We Saw You と I, Anonymous をよく読んでいる。恋愛相談の Savege Love も著者の本がでるくらいに人気みたいだけど、私にはちょっと長い。

We Saw You は Stranger のスタッフが街でみたニュースを紹介するコーナーだ。とはいえ、9月6日号 でとりあげられている「ニュース」は

  • 鳩に餌をやりすぎ男がいた
  • 服のばし工場についてはなす二人組
  • #WHITETRUCKSMATTER とはってあるトラックをみかけた
  • Eric Frye が良かった

と、毎号この調子。最近だと 自宅でポルノを見ているのが外から丸見えですよ という話に 続報 があったのが酷かった。

I, Anonymous は匿名投書コーナーで、投稿される話は Thanks for Coming のような良いものから、Disgraceful Delivery Guy のような酷いものまで幅広い。個人的には「Yelp にネガティブレビュー書いてないで、店にいえば?」という Zero Stars が、Yelp を使いはじめたあたりに読んだのもあり、印象に残っている。

テック業界

悲しいことに、The Stranger においては、テック業界はあまり良い感じには取り上げられない。冒頭でとりあげた “New to Town!” 特集の The Mysteries of Seattle’s New-to-Town Tech Workers も事実を伝えているとは思うけど、大歓迎という雰囲気では無い。

以前に読んだ Hacker News のスレッド では

As I am reminded by the Seattle Times, the PI, and the Stranger (particularly), techies are not really welcome by the True Seattlite, and we aren’t Welcome - (this is even true on reddit r/Seattle, which is the techiest of the techy).

と、Stranger の傾向を強調したうえに、それを “True Seattlite” まで拡大するコメントがあって、ちょっときびしみがあった。

前に何回か試しては挫折していた f.lux だけど、たぶん 佐野さんの日記 を読んだあたりから、また使いはじめている。電話は Android なので Twilight を使っている。

最初は画面の赤さにびっくりするけど、だんだん慣れてきた。ちょっと寝つきがよくなった気がするのと、赤い画面をみると「そろそろ寝ないとな」と思うのが良い。