vscodeでgoのlanguage serverがうまく動かない

前回 go modules に移行したが vscode で go の language server が実用にまだ達していなかった。 gocode は大元が開発を諦めて、forkされたものが対応しようとしているがそれもlanguage serverよりかはいいが、移行する前ほどの快適さはない。

sourcegraphが開発していたlang serverはすでに開発優先度は高くなく今後更新されなくなっていく。

github.com

代わりに bingo というのが現在開発されていて候補としては一番に上がって来る。 ただしこちらも使ってみた限りでは実用にはまだ耐えられない感じ。

github.com

もう一つはgoogleが開発しているgopls(golpsから最近改名された)。こちらもbingoとまだ大差ない感じだった。ただgoogleが開発しているので期待している。

github.com

なので現状はlanguage serverを使っておらず、gocodeのforkされたものを使っている。

go modulesに移行したらvscodeがまだ微妙だった

今やってるやつで dep から go modules にしたらvscodeの対応がイマイチだったのでメモ。 ついでにlanguage-serverの対応もする。

現状がここにまとまってる。 github.com

やったこと

  • goenv使っててvscodeで使ってたgoが古かったのでgoroot設定してgoenvで使ってるやつに直した
    • 実はvscodeのgoroot設定するだけではダメで、shellの設定からどのgoを使うか決定しているのでデフォルトのshellがbashの場合bashの設定ファイルにgoenvの設定が必要。普段zshにログインしているから気づかなかった
    • やらないとvscode上で使われるgoが古かったりする
    • langserverの起動に使われるgoはvscodeのshellをzshにしてもbashが使われるのでbashの設定にgoenvの設定を書く必要がある
  • ms-vscode.goが0.8.0以上か確認
  • Go: Install/Update Tools から gocode-gomod と godef-gomod と go-langserver インストール
  • langserverを入れる。go getでインストールできなかったのでcloneしてgo install GitHub - saibing/bingo: Bingo is a Go language server that speaks Language Server Protocol.
  • vscodeに以下の設定を入れる
"go.useLanguageServer": true,
    "go.alternateTools": {
        "go-langserver": "bingo"
    },
"go.languageServerExperimentalFeatures": {
    "format": false,
    "autoComplete": true,
    "rename": true,
    "goToDefinition": true,
    "hover": true,
    "signatureHelp": true,
    "goToTypeDefinition": true,
    "goToImplementation": true,
    "documentSymbols": true,
    "workspaceSymbols": true,
    "findReferences": true
}

goのversion切り替えツール使ってるとvscodeでどのversion使われるかでハマりがち。

YAPC Asia 2015 #yapcasia

さて、最後?のYAPC Asiaに行ってきました。

talkでよかったと思うのは裏のbonnuさんのとどっちに行くかすごい迷ったけど(すいません)、超直近仕事でgolangを 書いているのもありbradfitzさんのtalkは実践的でよかったなと思いました。 githubに全部のってるのであとからでも試せるのもうれしい。

github.com

そういえば2007にも来てたんですよね。そのときはtalk聞けなかったのでよかったなと。

懇親会では昔の同僚と、そのご友人といろいろ話して、だいたい話したなってなったら うろうろしてとりあえず話したい人に声かけまくろうみたいになって、直接は知らないけど 誰か知ってたらそのまま会話に参加みたいになって、いろいろな人と話せてとても楽しかったですね。 すごいお話するの久しぶりだったりで話しかけるか迷ったけど、HTTP2は広告配信に有効ですかねみたいな質問が できたのも大変よかったです。

思い出してみると2007年の津田ホールのときから参加していて、8年連続で参加できてその間に転職してて、 昔の同僚とかと会える同窓会みたいになってるし、優秀な人いっぱいいるし今後そういう人の発表が聞ける場が 減るのはやっぱ残念だねと、懇親会後の新橋二次会で話してたのでbuilderscon.ioが最後でてきてよかったなと 思いました。たぶんまだどうなるかわからないけど。

builderscon.io

最後にスタッフのみなさん、参加者のみなさんお疲れ様でした。 今年も楽しかったです。

銀行をスクレイピングする

最近、UFJ銀行スクレイプするの流行りみたいなので、スクレイピングモジュール出したし、乗らないわけにいかなかった。

元ネタはこれ

まだmechanizeで消耗してるの? WebDriverで銀行をスクレイピング(ProtractorとWebdriverIOを例に) - 詩と創作・思索のひろば (Poetry, Writing and Contemplation)

(ns web.scraper.sample.ufj
  (:require [web.scraper :refer :all]
            [clojure.pprint :as pp]))

(defn login []
  (let [client (default-mode! (make-client browser-chrome))
        form (get-form-by-name (get-page client "https://entry11.bk.mufg.jp/ibg/dfw/APLIN/loginib/login?_TRANID=AA000_001") "MainForm")]
    (let [submit (get-elem-from-nodelist-by-index 
                  (get-elements-by-tag-name form "a") 5)
          id (get-input-by-name form "KEIYAKU_NO")
          pass (get-input-by-name form "PASSWORD")]
      (input-form id (str (System/getenv "UFJ_ID")))
      (input-form pass (str (System/getenv "UFJ_PASS")))
      (click submit))))

(def logined (login))

(defn account []
  (-> (page->enlive logined)
      (select-text-node [:div#account :div.situation :table.situation_data :tbody :tr :td.number :p#setAmountDisplay])
      (as-> x (map clojure.string/trim x)
            (pp/pprint x))))

CIDER replで試す場合はrepl上げる前にemacsのsetenvで環境変数設定してね。 というか自分のモジュールで他にもあれやこれやスクレイプしてる。 APIあればいいのに。

Clojarsにweb-scraperというのを上げてみた

web-scraper 0.0.2 - Clojars

最近はClojureを趣味で書いてまして、web-scraperというものをつくって clojarsというサイトに上げたのでご報告。まあ、単なるWebページをスクレイプするという ものなんですが、HtmlUnitというJavaのライブラリを使っていてJavaScriptを解釈して くれるので、最近のJavaScriptいっぱい使っているサイトでもある程度スクレイプできる というものです。

こんな感じで project.clj に足してもらって lein deps でインストールして

:dependencies [[org.clojars.ka2u/web-scraper "0.0.2"]]

こんな感じでスクレイプできます。

(ns something.scrape
    (:require [org.clojars.ka2u/web.scraper :refer :all]
              [clojure.pprint :as pp]))

(defn scrape []
  (let [client (default-mode! (make-client browser-chrome))]
    (-> (get-page client "http://example.com")
      (page->enlive)
      (select-text-node [:div#foo :table :tbody :tr :td])
      (pp/pprint))))

(scrape)

まだ、Clojure書き始めてそんなにたってないので、書き方とか自信なかったんですが 先日 Tokyo.clj #22 という勉強会に参加して、主催者の@tnoborioさんとペアプロする 機会に恵まれ、このライブラリの中身を見てもらえまして、そこそこまともだということ がわかったのでよかったです。

ペアプロでは、3つのマクロをひとつに整理すること、set系のメソッドは!をつけるなどを やりました。時間内に終わらなくて、しかも最終的には2つのマクロになりましたが コードはだいぶ減りました。やはり、知っているひとにコード見てもらえるのは自信になるので とてもよかったなと思います。

YAPC::ASIA 2014

やばい。毎年YAPCでしかブログ更新してない。

というわけで、今年も行ってきました、YAPC::Asia 2014。
運営が変わってどうなるかと思ってましたが、今までと変わらずとても楽しめた。一年ぶりにひさしぶりですねみたいな人もたくさんいて、これでしか会わない人もたくさんいるなと思ったり。

トーク自体は2日間(+前夜祭ちょっと)ほぼいたので、Perl成分少なめではあったけど刺激を受けたのもいくつかあって、よかったなと思った。使わなかったけど、同時通訳は流れが切れないしとてもよい試みだったんではないかと思う。一個紛失があったのは残念でした。

そして、typoさんのキーノートはとても懐かしいのと、やっぱすごいなってのととても刺激があってよかった。近年のマネージメントの話もいいけど、やっぱりあんまり燃えない。サブテクのころもShibuya.pmとか参加してたけど、ああーすごい人いるなーっていう遠い世界で、Kamaitachi作ってたってころは、某氏に誘われてカヤックさんに遊びに行ったときにtypoさんKamaitachi作ってたなとか。懐かしい。懐かしすぎる。その時のhackathonに参加してたすごい人と今の会社で、一緒に働いてたりとかして長い間Perl書いてるとこういうこともあるんだなと思い返したり。20代へのアドバイスはそうですよねって感じで、20代は適切な場所で適切な努力をしよう。あと、30代にもアドバイス欲しい。あと、Jr.超かわいい

それと、お昼にはてなのみなさんと一緒できて楽しかった。実は寿司あんまり得意ではないのは内緒です。みなさんお疲れ様でした。

YAPC::Asia 2013 たぶんこれ見る

予定は未定

Day1

YAPC::Asia Tokyo 2013 オープニング
Postcards from the Edge The State of Perl 5 Development

Perlのモジュールを公開するときに気をつけておいたほうがよい**個のこと
BrowserStackを用いたクライアントサイドのテスト

ランチ

Inseide amon2-live-door-setup.pl with web application development 2013
SPDY, HTTP/2.0の使い方

モダンPerl Tips 50選
Dist::Zilla

僕の考えたFuture Perl

Build Your Own Exobrain

Lightning Talks Day1

Day2

Perlで書く結合テスト

これからのPerlプロダクトの形 & What's new in Carton & cpanm

ランチ

Emacs実践入門 Perl編 & 特別座談会

本当に遭ったレガシーな話
スマフォアプリ開発を支える認証認可アーキテクチャ

PhantomJSによる多岐にわたる広告枠の確実な表示テスト
フルテストも50msで終わらせたい

Lightning Talks Day2

Keynote

Closing