タグ

ブックマーク / mattn.kaoriya.net (79)

  • Big Sky :: gocode やめます(そして Language Server へ)

    はじめに まず始めに言っておかなければなりません。 gocode 今まで当にありがとう この記事は、Go 言語歴10年になる僕がこれまで愛用してきた Go 言語のコード補完ソフトウェア gocode の歴史と功績、そして今、gocode 自らがその役割を終えようとしている姿をぜひ皆さんに知って頂きたいという思いから Go Advent Calendar 2018 の記事として起こしました。この記事では gocode が歩んできた歴史と苦悩を少しでも皆さんに分かる様に解説させて頂きつつ、そして次にやってくる Go 言語のコード補完の未来についてご紹介したいと思います。Vim について多めに書かれていますが、Visual Studio Code での Go 開発にも影響する話です。 gocode とは gocode は nsf 氏が開発した Go 言語のコード補完サーバです。 GitHub

    Big Sky :: gocode やめます(そして Language Server へ)
  • Big Sky :: Vim と日本語入力の話。

    8/31、patch 8.0.1026 で LinuxVim のとある挙動が修正されました。 patch 8.0.1026: GTK on-the-spot input has problems - vim/vim@5c6dbcb - GitHub https://github.com/vim/vim/commit/5c6dbcb03fa552d7b0e61c8fcf425147eb6bf7d5 この修正は、LinuxVim の IME (Input Method Editor) の挙動を修正する物ですが、この1つのパッチの為に多くの開発者が動いたという話です。 Vim と IME と僕 このパッチ、多い時で月に100個以上もリリースされる大量のパッチの1つに過ぎないのですが、実はこのパッチには思い入れがあり記事にせずにいられませんでした。この問題が修正されるまでに至った経緯を

    Big Sky :: Vim と日本語入力の話。
  • Big Sky :: Vim で端末機能が動くようになった。

    ひさびさ Vim のエントリを書く気がします。 今から4年ほど前、Vim にスレッドセーフなメッセージキューが欲しいというメールが vim-dev 届きます。 [PATCH] Proof of concept: thread-safe message queue https://groups.google.com/forum/#!searchin/vim_dev/tarruda%7Csort:relevance/vim_dev/65jjGqS1_VQ/fFiFrrIBwNAJ その時はまだ、vim-dev の中にも「Vim はエディタだし必要ない」といった空気があったと思います。 [PATCH] Non-blocking job control for vimscript https://groups.google.com/forum/#!searchin/vim_dev/tarruda%

    Big Sky :: Vim で端末機能が動くようになった。
  • Big Sky :: Re: Go言語感想文

    幾らか言いたい事があったので。 Go言語感想文 - なるせにっき 序 最近、敵情視察を兼ねた仕事ととしてGoでアプリケーションを書いていた。このアプリケーションがどんなものかはそのうち id:tagomoris さんがどこかで話すと思うけれど、この コンポーネント ... http://naruse.hateblo.jp/entry/2017/06/02/203441 GoroutineとChannel Goroutineはようするにスレッドなんですが、文法と実装の支援でより気軽に使えるのが他の言語との違いでしょうか。なので、Goroutineをどれだけほいほい使うべきかというコスト感覚を身につけることがとても大事な気がします。Rubyなどとは気持ちを切り替えていく必要があるでしょう。ぼくはまだ切り替えきれていません。 Goroutine はスレッドではありません。Goroutine はコ

    Big Sky :: Re: Go言語感想文
  • Big Sky :: ログイン認証をマイクロサービス化する「loginsrv」

    認証を持たないウェブアプリケーションをいざ認証に対応させようと思うと案外面倒でモチベーションを無くしてしまうなんて事もよく起きうる話です。特に社内向けのアプリケーションを作っていたら番で使う事になってしまって、なんて話は良くある話です。開発でDB を見るのはちょっと...。でも既存のコードをゴリゴリと触りたくない。そんな場合にログイン認証部分だけマイクロサービス化できると気持ちも幾分和らぎます。今日はそんなちょっと便利なサーバ「loginsrv」を紹介したいと思います。 GitHub - tarent/loginsrv: JWT login microservice with plugable backends such as OAuth2, Github, htpasswd, osiam loginsrv is a standalone minimalistic login se

    Big Sky :: ログイン認証をマイクロサービス化する「loginsrv」
  • Big Sky :: golang と Generics と私

    以下の記事は Java について触れていますが、Java を dis っている訳でもありませんし、冗長に見える例を意図的に使っています。 最近 Twittergolang に Generics が無い事についてずいぶんと盛り上がったのですが、僕の意見をこのブログにも書いておこうと思います。 golang に多相が無いのはアレだとか開発者の怠慢だみたいな話はだいたい他の言語を覚えた人から出る感想で、静的型付言語である golang を見ると確かにそう見えるかもしれない。ただ golangJava や他の言語と違って Duck Type を採用している。 — Vim芸人 (@mattn_jp) March 7, 2017 スクリプト言語の多くに多相が求められないのと同じ様に golang を深く触る人達から多相が欲しいという意見がそれほど出ないのは golang の型が Duck

    Big Sky :: golang と Generics と私
  • Big Sky :: レーベンシュタイン距離を使ったあいまい grep コマンド「lsdgrep」作ってみた

    元ネタはずいぶんと昔の記事なのだけど。 編集距離 (Levenshtein Distance) - naoyaのはてなダイアリー ■ 編集距離 (Levenshtein Distance) 昨日 最長共通部分列問題 (LCS) について触れました。ついでなので編集距離のアルゴリズムについても整理してみます。 編集距離 (レーベン... http://d.hatena.ne.jp/naoya/20090329/1238307757 思い付きはまったく関係ない所から。 mp3 が数千ファイル入ってるフォルダで何かの手違いで同じ曲が入ってしまう事が結構あって重複取り去る作業してた。ID3が違ってるとMD5も違うのでレーベンシュタインの文字列距離を使ってファイル名が似てるの調べたら422ファイル消せる事が分かった。 — Vim芸人 (@mattn_jp) February 25, 2017 これを

    Big Sky :: レーベンシュタイン距離を使ったあいまい grep コマンド「lsdgrep」作ってみた
  • Big Sky :: golang でメモ専用コマンド「memo」作った。

    « Ruby の a = a + 1 はなぜ undefined method '+' for nil:NilClass なのか | Main | Ruby の Array#<< は Array#push よりも速いか » 僕は日々 memolist.vim という Vim plugin を使い、仕事で思いついた疑問点や会話の一部をメモ取りする様にしています。相手と会話している最中に「あ、ここ大事だ」と思ったら vim を起動して :MemoNew してメモを編集していました。もちろん Vim ですから起動は抜群に速くてとてもご機嫌良く動くのですが、どうしてもこれをシェルから扱いたいという要求に負けてささっと作ってみました。 GitHub - mattn/memo: Memo Life For You README.md memo Memo Life For You Usage NAME:

    Big Sky :: golang でメモ専用コマンド「memo」作った。
  • Big Sky :: シェルで作る Twitter Bot 作成講座

    数年前 TwitterAPI はベーシック認証、かつ Public な API だったので Twitter Bot なんて楽ちんで作れたのですが、最近は認証は OAuth、Public な API も無くなってしまい Bot を作るのはとても難しくなりました。 やりたい事はそんなに大した事ではないのに、認証のおかげでコードも大きくなりがちで、気付けば体コードよりも認証用のコードの方が多くなってしまう事もあります。Bot を作りたいのに敷居が高くて手を出せない、なんて思っている方も多いかもしれません。 でももし Twitter Bot がシェルで書けたら、簡単だと思いませんか?実は twty というツールを使うと簡単に Twitter 連携アプリケーションが作れてしまうのです。 GitHub - mattn/twty: command-line twitter client writ

    Big Sky :: シェルで作る Twitter Bot 作成講座
  • Big Sky :: UNIX コマンドを SQL で抽出できるツール qq を作った。

    昨日僕の Twitter タイムラインで q というツールが話題に上がっていました。 GitHub - harelba/q: q - Run SQL directly on CSV or TSV files Text as Data q is a command line tool that allows direct execution of SQL-like q... https://github.com/harelba/q 標準入力を SQL で抽出できるという物です。ただ個人的には「こういうの python じゃなくて Go でビルドされてると助かるよなー」と思ったので q と同じ様な動作になるツールを作ってみました。 GitHub - mattn/qq Select stdin with query https://github.com/mattn/qq 例えば msys2 のシ

    Big Sky :: UNIX コマンドを SQL で抽出できるツール qq を作った。
  • Big Sky :: golang のサーバで帯域制限したい。

    次回予告「並列ダウンロードするHTTPクライアントをバンド幅制限するサーバをGoで実装した」 / “高速でダウンロードできるツールを Go で実装した。 - Qiita” https://t.co/6NfEyJCwbu — Kazuho Oku (@kazuho) July 13, 2016 並列ダウンローダを使うと幾らかサーバに負荷が掛かってしまいます。golang のサーバ側で帯域制限を行う場合には2つ方法があります。 転送量制限する 接続数制限する まずは転送量制限。転送量の制限には throttled が便利です。 GitHub - throttled/throttled: Package throttled implements rate limiting access to resources such as HTTP endpoints. README.md Throttle

    Big Sky :: golang のサーバで帯域制限したい。
  • Big Sky :: golang の channel を使ったテクニックあれこれ

    golang の channel は他の言語に見ない独特のパラダイムを開発者に提供します。 単純にスレッド間でメッセージングをするだけでもC言語で書けばそこそこの量になったり、慣れていない人であればどう実装すればいいか分からないなんて事もあったと思います。しかし golanggoroutine/channel は、やっている内容の割にとても容易にスレッド間通信やキューイング、処理の受け待ち等を実装できる様になっています。尚、channel をどの様に適用したら良いかについては以下を参照下さい。 Big Sky :: Golang の channel の使い所 golang の特徴と言えば goroutine と channel ですが、その使いどころに悩む人もおられる様です。 goroutine は非同期に実行される処理、channel はその grout... http://mat

    Big Sky :: golang の channel を使ったテクニックあれこれ
  • Big Sky :: Windows ユーザは cmd.exe で生きるべき。

    [D] Windowsはターミナルがダメだから使えないってのは過去の話? 基的にはいい感じに見えますが、いくつか問題は発覚してます。 http://blog.drikin.com/2015/01/windows-2.html 僕は Cygwin よりも msys2 が好きです 理由は最後の方に書きます。 cygwin は windows 上に完全な POSIX を提供するのが目的であって、msys2 は native な windows アプリケーションをビルドするのが目的なのでゴールが違うのよね。そして僕は全て cygwin で染められるのが好きじゃ無い。それだけの話です。 — mattn (@mattn_jp) April 10, 2016 もちろん msys2 を POSIX 環境としても使いますが、一番の目的は cmd.exe から Windows ネイティブなアプリケーションを

    Big Sky :: Windows ユーザは cmd.exe で生きるべき。
  • Big Sky :: コマンドラインから JSON が簡単に作れるツール jo

    « golang で画像アップロードが簡単に出来る go-imageupload を使ってみた。 | Main | SQLite3でカジュアルにズンドコキヨシ » コマンドラインから JSON を扱うツールとしては jq が一般的ですが、例えば ls を実行した結果を JSON の Array にしたいであったり、コマンドライン引数から簡単に Object を作りたいといった場合には一旦考え込まないといけないくらい使い方が難しかったりします。そんな中でひょいと現れたのが jo です。 GitHub - jpmens/jo: JSON output from a shell JSON output from a shell https://github.com/jpmens/jo 作者である jpmens さんがなぜ jo を作るに至ったかをブログに書いています。 Jan-Piet Mens

    Big Sky :: コマンドラインから JSON が簡単に作れるツール jo
  • Big Sky :: Vim にchannel(ソケット通信機能)が付いた。

    13年前、僕は vim-dev (Vim の開発グループ)に Vim からソケット通信が出来る関数群のパッチを書いて送りました。 Socket functions for vim. - Yahoo! Groups https://groups.yahoo.com/neo/groups/vimdev/conversations/topics/32576 その時は Bram (vimboss) に「PythonPerl インタフェースを使えるやないか、もしくは外部コマンドとか」と返されてしまいました。確かに言語拡張を使えば出来ますし、それに処理がブロッキングだったので実はそれほど有益では無かったかも知れません。 その後、このソケット通信のパッチは vimproc の一部に取り込まれ、シーケンシャルなソケット通信は出来る様になりました。しかし Vim には非同期インタフェースがありません。

    Big Sky :: Vim にchannel(ソケット通信機能)が付いた。
  • Big Sky :: API が小さい埋め込み向け JavaScript エンジン v7

    埋め込み向けで、C言語から呼べて API が小さい JavaScript エンジン v7 を見つけました。 cesanta/v7 · GitHub https://github.com/cesanta/v7/ 特徴としては クロスプラットフォーム: Arduino から MS Windows まで、どこでも動く。 小さい: コンパイルされたコアはわずか 40KB から 200KB。 シンプルで直観的な C/C++ API: 簡単に C/C++ の関数を JavaScript 環境へエクスポート出来る。 標準: V7 は JavaScript 5.1 を実装し、Standard ECMA tests をパスする事を目指している。 パフォーマンス: V7 は非 JIT エンジンの中で最速を目指している。 創造的に利用可能: V7 は、ハードウェア(SPI、UARTなど)、ファイル、暗号化、ネッ

    Big Sky :: API が小さい埋め込み向け JavaScript エンジン v7
  • Big Sky :: Protocol Buffers を利用した RPC、gRPC を golang から試してみた。

    grpc/grpc · GitHub gRPC - An RPC library and framework https://github.com/grpc/grpc gRPCGoogle が開発しているRPC(リモートプロシージャコール)のライブラリとフレームワークで、通信層は HTTP/2 を介して行われます。 データ層については、固定されている訳ではなくあくまでデフォルトで Protocol Buffers が使われる様になっています。使用出来るプログラミング言語は現在、C++, Node.js, Python, Ruby, Objective-C, PHP, C# となっています。 実はこれら以外にも grpc-go という、なぜかこのリストに加えられていないオフィシャルリポジトリがあります。 grpc/grpc-go - GitHub gRPC-Go The Go impl

    Big Sky :: Protocol Buffers を利用した RPC、gRPC を golang から試してみた。
  • Big Sky :: ruby と C++ と golang で gRPC のベンチマークを取ってみた。

    « Protocol Buffers を利用した RPCgRPCgolang から試してみた。 | Main | Vim 上のファイラを NERDTree から dirvish に乗り換えた。 » 先日、Google が開発しているリモートプロシージャコール、gRPCgolang から使うチュートリアルを書きましたが Big Sky :: Protocol Buffers を利用した RPCgRPCgolang から試してみた。 http://mattn.kaoriya.net/software/lang/go/20150227144125.htm 今日は rubyC++ から触ってみたいと思います。はじめに ruby の方ですが、Ruby 2.2.0 でビルドする事が出来ません。どうしても Ruby 2.2.0 から試したい人は、以下の PR にあるパッチを適

    Big Sky :: ruby と C++ と golang で gRPC のベンチマークを取ってみた。
  • Big Sky :: Vim の CtrlP matcher、cpsm がヤバイくらいに速すぎる

    Vim で CtrlP を使っている人もそこそこいるかと思いますが、ファイル検索が終わり文字をタイプした時に行を絞り込む部分(マッチャーと言います)がデフォルトの状態だと Vim script を使って処理される為、ファイル数が多くなるとモッサリして来ます。これを解消する為に幾らかの人が頑張っています。 FelikZ/ctrlp-py-matcher - GitHub Fast vim CtrlP matcher based on python https://github.com/FelikZ/ctrlp-py-matcher JazzCore/ctrlp-cmatcher - GitHub CtrlP C matching extension https://github.com/JazzCore/ctrlp-cmatcher junegunn/fzf - GitHub A comma

    Big Sky :: Vim の CtrlP matcher、cpsm がヤバイくらいに速すぎる
  • Big Sky :: 江添さんに簡単に質問出来るコマンドを golang で書いた。

    C++er ならみんな見てるいう噂の江添さんの ask.fm。見ているだけも面白いですが、質問もしたくなりますよね。 Ryou Ezoe | ask.fm/EzoeRyou http://ask.fm/EzoeRyou 質問したいだけなのにいちいちブラウザ起動するのもダルいので、コマンドラインから質問を投げられるコマンド「ezoe」を作りました。 mattn/ezoe · GitHub https://github.com/mattn/ezoe インストールは簡単で golang が入ってる状態なら $ go get github.com/mattn/ezoe これだけで ok。使い方も簡単で $ ezoe とすると質問の一覧が色付きで表示される。 しかも「質問ではない」と「自由」がハイライトされるので江添フリークも安心。そして引数を付けて起動すると ask.fm に質問を投げられます。

    Big Sky :: 江添さんに簡単に質問出来るコマンドを golang で書いた。