タグ

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

  • Big Sky :: golang の遅いコードをたった1行で高速化するテクニック

    記事中に間違いがありました。数倍も速くはなりませんでした。確か 1.0X ~ 1.1 倍程度の高速化は得られましたがびっくりするほどの物ではありませんでした。すみません。 そろそろ Go1.7 がリリースされるそうですが、皆さん如何お過ごしですか。Go 界隈の波平こと mattn ですこんにちわ。バカモー(略 Go1.7 ではコンパイラの最適化が行われ、ビルド速度がかなり短縮される様になりました。毎日ビルドしてる僕としては非常に嬉しい機能改善ですね。 さてとてもキャッチ―なタイトルで釣ってしまった訳ですが、気にしたら負けなのでどんどん話を進めます。 var t [256]byte func f(b *[16]byte) { for i, v := range b { b[i] = t[v] } } 例えばこのコードを見て下さい。このコードはココから拝借しました。issue の内容はスコー

    Big Sky :: golang の遅いコードをたった1行で高速化するテクニック
    y-kawaz
    y-kawaz 2016/08/04
    使って良いケースかどうかの判断を自分できる人向け。
  • Big Sky :: Software Design 2016年5月号 Vim 「実戦」投入

    Software Design 2016年5月号|技術評論社 第1特集 コード編集の高速化からGitHub連携まで Vim[実戦]投入 Part1 :Vimとの長い付き合いのはじめかた …… 氏久 達博 Part2 :Vimだからでき... http://gihyo.jp/magazine/SD/archive/2016/201605 技術評論社様から「新人に響く Vim 特集が欲しい」とのご依頼頂き、色んな方にお声かけさせて頂きましたが結果として Vim 界隈でも超ドビムな人達が選べた事に安堵の思いです。 ujihisa さん clojure の補完プラグイン neoclojure の作者。vim-users.jp でも多くの記事を執筆したコアな Vimmer です。 thinca さん ご存じマンボウ Vim script マスターです。thinca さんの作る物は質が高く、リポジトリ

    Big Sky :: Software Design 2016年5月号 Vim 「実戦」投入
    y-kawaz
    y-kawaz 2016/04/12
    mattnでわりかしvimerかー。僕は下手の横好きvimmerくらい。
  • 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(ソケット通信機能)が付いた。
    y-kawaz
    y-kawaz 2016/01/29
    どんどん出てくるプラグイン、待ってますw
  • Big Sky :: Vim プラグインの機能として golang を使う。

    golang 1.5 から、x86_64 のみですが -buildmode=c-shared というビルドオプションが足される事になりました。 これは、golang で共有ライブラリを生成する為のオプションで、例えば package main import ( "C" "fmt" ) var ( c chan string ) func init() { c = make(chan string) go func() { n := 1 for { switch { case n%15 == 0: c <- "FizzBuzz" case n%3 == 0: c <- "Fizz" case n%5 == 0: c <- "Buzz" default: c <- fmt.Sprint(n) } n++ } }() } //export fizzbuzz func fizzbuzz(n int

    Big Sky :: Vim プラグインの機能として golang を使う。
    y-kawaz
    y-kawaz 2015/08/20
    アツい
  • Big Sky :: golang で最近お気に入りの WAF「Goji」

    Web アプリケーションを書くときは今までずっと 小さい物は web.go 大きい物は net/http というスタンスを何故か貫いて来たんだけど、最近ようやく web.go をやめて goji を使う様になった。 Goji A web microframework for Golang https://goji.io/ 理由としては Sinatra ライクでありながら高度な正規表現マッチも使えるルータ それでいて net/http コンパチ 簡単に実装出来るミドルウェアスタック グレースフルシャットダウン そして何と言っても速い ミドルウェアも一般的な Web アプリケーションを作るには十分な物が既に揃ってます。 それでもやっぱり大きめな物は net/http で書くんだけど、小規模から中規模な物を一気にゴリゴリっと書く場合には goji は便利です。もちろん Windows でも動きま

    Big Sky :: golang で最近お気に入りの WAF「Goji」
  • Big Sky :: Vim で peco する「veco」書いた。

    vimでpecoりたい — Yoichi Fujimoto ? (@wozozo) July 8, 2014 って事で書いた。 mattn/ctrlp-veco ・ GitHub https://github.com/mattn/ctrlp-veco 実行には CtrlP が必要。 peco の代わりに vim を使う。ただそれだけ。 vimでpecoっても全然うれしくないことがわかった — Yoichi Fujimoto ◉ (@wozozo) July 8, 2014

    Big Sky :: Vim で peco する「veco」書いた。
    y-kawaz
    y-kawaz 2014/07/08
    ctrlpでいいじゃんって思ったらctrlpだった
  • Big Sky :: Golang のオフィシャルが提供するインタフェースまとめ

    golang が提供するインタフェースの中で代表的な物の使い方をまとめてみる。 io.Reader type Reader interface { Read(p []byte) (n int, err error) } ご存じ io.Reader。このシグネチャの Read を実装しておけば golang のありとあらゆる入力機能に対して自分のコードを提供する事が出来る。 例えば永遠に「おっぱい」と言い続ける Reader だと以下の様な実装になる。 package main import ( "io" "os" ) var text = []rune("おっぱい") type OppaiReader struct { n int } func (r *OppaiReader) Read(p []byte) (int, error) { in := len(p) nw := 0 for i

    Big Sky :: Golang のオフィシャルが提供するインタフェースまとめ
  • Big Sky :: bundle exec がウザい

    ruby のアプリを動かす時にいちいち bundle exec って書くのがダルい。書きたくない。でもシステムに入ってたり違うバージョンの物が動いて変な動作をされても困る。 どうにかしてこのダルさを解消できないかと考えてみた。 まず rbenv を使ってるなら gem でインストールされるコマンドは必ずシェルのラッパとして生成され、そこから物が起動する様になっている。例えば rails であれば以下の様なシェルになっている。 #!/usr/bin/env bash set -e [ -n "$RBENV_DEBUG" ] && set -x program="${0##*/}" if [ "$program" = "ruby" ]; then for arg; do case "$arg" in -e* | -- ) break ;; */* ) if [ -f "$arg" ]; th

    Big Sky :: bundle exec がウザい
    y-kawaz
    y-kawaz 2014/03/14
    相対パスをPATHに追加するのはキモいです…。rvenv使ってるならこっちの方が筋が良さそう>http://qiita.com/naoty_k/items/a1fbac19686a8fcd2e34 /あと最後のbundle exec $*をbundle exec "$@"に直したい。
  • Big Sky :: Goプログラマであるかを見分ける10の質問

    下記質問にそれぞれ50文字以内を目安に簡単に説明すること。 パッケージ内に定義した関数を外部に公開するにはどうすれば良いか? 非同期に処理を行う為の命令は? 関数を抜けた際に処理を実行するにはどうするか? goroutineの同時実行数を変更するにはどうするか? コンパイラやリンカが8g/6g/5g、8l/6l/5lという名前になっている理由は? Goのガベージコレクションの実装は一般的に何と呼ばれている類か? レシーバがnilの場合にメソッドを呼び出すと何が起きるか? 可変個引数はどの様に定義するか? 関数内で定義されるローカル変数のアドレスを戻り値として外部から参照するとどうなるか? interfaceとstructの違いは何か? panicを補足して強制終了させない為にはどうするか? 答え パッケージ内に定義した関数を外部に公開するにはどうすれば良いか? 関数名の先頭を大文字にします

    Big Sky :: Goプログラマであるかを見分ける10の質問
    y-kawaz
    y-kawaz 2013/10/15
    おっぱいおっぱい
  • Big Sky :: バッチ ジョブを終了しますか (Y/N)?

    Windows を UNIX っぽく使おうとすると、必ずお目にかかるであろうこのメッセージ。 UNIX に慣れている人は、コマンドプロンプトを使いたがる。しかし全ての場合においてコンソールアプリケーションは有能では無いし、異常に長い引数は省略したい。Java VM で動く言語のクラスパス等はスクリプトに書きたいし、オフィシャルから Windows ユーザ向けに用意される物はだいたいバッチファイルだ。しかしながら Cygwin は標準提供物ではないし、嫌いだ。いや、大嫌いだ。 そこで私達は一般的に、バッチファイルという一見便利そげで実は非情なまでに我々に独特の仕様を強要するDSLを頻繁に使う事になる。 例えば Java VM 上で動く clojure を Windows 上で repl として使う場合、僕は以下の様なバッチファイルを「clj.bat」というファイル名にして使っている。 @ec

    Big Sky :: バッチ ジョブを終了しますか (Y/N)?
    y-kawaz
    y-kawaz 2013/08/20
    このbatter.exeのバイナリは配布してないの??
  • Big Sky :: Vim で幅跳び

    先日、某所で何人かに遊んで貰ったので、ここにも書いて皆に遊んでもらおうと思います。 mattn/habatobi-vim - GitHub https://github.com/mattn/habatobi-vim :Habatobi を実行すると起動します。j と k を交互にタイプすると走り出すので jkjkjkjkjkjkjkjk... とタイプして下さい。 赤い線の前でスペースキーをタイプするとジャンプします。 記録が出て、どうこうなる訳ではないですが息抜きのつもりでどうぞ。

    Big Sky :: Vim で幅跳び
    y-kawaz
    y-kawaz 2013/06/11
    何これw
  • Big Sky :: 意外と知られていない github 技

    github で git diff from..to を表示する - #生存戦略 、それは - subtechtext/plain な diff が表示される。.. じゃなくて ... 。 http://subtech.g.hatena.ne.jp/secondlife/20121225/1356421602 github のコミットページ URL は、実は凄く良く出来ている。 例えば pull request のページ Add each Gem bundled data pointer in mrb_state by masuidrive - Pull Request #605 - mruby/mruby - GitHub Showing 17 changed files with 183 additions and 36 deletions . Show Diff Stats H

    Big Sky :: 意外と知られていない github 技
  • Big Sky :: Sublime Text2 の複数カーソル?それVimでも出来るよ

    Sublime Text2 の複数カーソル、なんかキャッチーだけど、それ Sakura でずいぶん前から出来てたし...。 Vim 使いは正規表現で一括置換するのでそもそも必要ない。 とかいうと「それ実装できない言い訳じゃん」とか言われそうなのでかるーく作ってみた。(実装中途半端) mattn/multi-vim - GitHub https://github.com/mattn/multi-vim なんですか!そのやる気のないプロジェクト名は!!! どんな風に動くかはこちらのページをご覧下さい。(デカいアニメーションgif注意) http://mattn.github.com/multi-vim/ http://mattn.github.com/multi-vim/ 作り続けられる自信があまりありません。

    Big Sky :: Sublime Text2 の複数カーソル?それVimでも出来るよ
    y-kawaz
    y-kawaz 2012/11/05
    おもろい、けどやっぱ一括置換でいいんじゃと思い直すので見て終わりだった(^^;
  • Big Sky :: python 補完のVimプラグイン「jedi-vim」がスゲー

    pythonの補完は、vimが標準で配布している物で事足りるかなーとか思ってたけど浅墓すぎた。 今日見つけた jedi-vim は良い。 davidhalter/jedi-vim - GitHub Using the jedi autocompletion library for VIM. https://github.com/davidhalter/jedi-vim 何が良いって精度が良い。そして標準配布の pythoncomplete がモジュールとそのモジュール内関数しか補完出来ないのに比べ、jedi は評価値を補完出来る。 そしてスゴイのが構文を仮実行しているのではなく、パースしている点。jedi というモジュールを使って、構文解析している。 davidhalter/jedi - GitHub Awesome autocompletion library for python. I

    Big Sky :: python 補完のVimプラグイン「jedi-vim」がスゲー
  • Big Sky :: 意外と知られていない便利なvimプラグイン「ctrlp.vim」

    この記事は、Vim Advent Calendar 2011の記事です。欠番が出そうだったので、勝手ながら割り込ませて頂きます。 Vimを使って開発をする際、リポジトリ内のファイルにどうやってアクセスしていますか?NERDTree?vimshell?unite.vim?FuzzyFinder? 色んな方法があるかと思います。ただこれらは若干古かったりニュアンスが異なっていたり、物によっては開発に向かない物もあります。単純にファイルを選択するのであれば、それで事足りるでしょう。しかしながら当に開きたいファイルを最短の方法で選ぶには、これまでの方法では時に無駄であったり、余計なお世話だったりもしました。 僕はバッファセレクタやファイルセレクタというのは使わない方なのですが、ちょっと前にこれを見つけて「おっ...よさげなインタフェース」と思った物があったので紹介しようと思います。 ctrlp.

    Big Sky :: 意外と知られていない便利なvimプラグイン「ctrlp.vim」
    y-kawaz
    y-kawaz 2012/08/14
    超便利!
  • Big Sky :: プログラミング言語は「e」をタイプする量が多くなる?

    今日こんな記事を見た。 Mahdi Yusuf: Most Pressed Keys and Programming Syntaxes I switch between programming languages quite a bit; I often wondered what happens when having to dea... http://www.mahdiyusuf.com/post/9947002105/most-pressed-keys-and-programming-syntaxes-2 各プログラミング言語でどのキーを多くタイプするかという物。 Lispや関数言語で () が多いのはいいとして、どの言語もやたら e が多い。気になってつぶやいたら 英語ベースだからじゃ 英単語を書いていると、どうしてもeを打つ機会が多くなるというだけではないでしょうか。 という意見

    Big Sky :: プログラミング言語は「e」をタイプする量が多くなる?
    y-kawaz
    y-kawaz 2012/07/12
    日本人はIMEが必須だから確定で「スペース」のタイプが多くなる(キリッ と言おうかと思ったが単語をスペース区切りしないからむしろ相殺されて少ないかもと思い、言いとどまった(とどまってない
  • Big Sky :: pathogen や vundle、neobundle を使う際に必ず読んで欲しい簡単おいしい、たった1つの速報まとめ

    タイトルは気にしないで下さい。 call vundle#rc() や call neobundle#rc() や call pathogen#runtime_append_all_bundles() は filetype plugin indent on よりも後でやってはいけない。上記の様な関数は何をしているかというと、来読み込まないパスにある vim plugin ディレクトリをランタイムパスに追加します。これらプラグイン管理系の仕事は主にランタイムパスへの追加です。vimvimrc を読み込んだ後に(GUIであればこのあとgvimrc)、runtimepath (省略名 rtp) に列挙されるディレクトリをランタイムパスとして認識していきます。この一括読み込みはこのタイミングしかありません。つまり上記の命令よりも前に filetype plugin indent on を実行

    Big Sky :: pathogen や vundle、neobundle を使う際に必ず読んで欲しい簡単おいしい、たった1つの速報まとめ
    y-kawaz
    y-kawaz 2012/06/18
    どのプラグインでも先頭に書けって書いてあるしね。
  • Big Sky :: vimrcのどこが重いのかを調べられるプラグイン書いた。

    Vimには --startuptime というコマンドラインオプションがあり $ vim --startuptime foo の様に指定するとスクリプトファイル単位で掛かった時間を知る事が出来ます。 times in msec clock   self+sourced   self:  sourced script clock   elapsed:              other lines 000.000  000.000: --- VIM STARTING --- 000.000  000.000: Allocated generic buffers 000.000  000.000: locale set 000.000  000.000: clipboard setup 000.000  000.000: window checked 000.000  000.000: in

    Big Sky :: vimrcのどこが重いのかを調べられるプラグイン書いた。
    y-kawaz
    y-kawaz 2012/03/15
    最近vimの起動が遅いと思ったことはないが試してみたが、殆どのプラグインは全然重くないんだなってことが分かった。/でもこうやって計測できるのはすごく気持ち良いね。
  • Big Sky :: VimでDBが操作できる vdbi-vim 作った。

    DB操作ツール Emacs DBI を作ってみた - 技術日記@kiwanami このツールの目的は、クロスプラットフォームで便利なDB操作環境を実現することです。 pgAdmin や MySQL Query Browser のようなGUIの良さをCUIで実現してみようとしてみました。すなわち、ぼくのかんがえたさいきょうのDBツールです。ちなみに、このツールにとってEmacsはただの実行環境です。Emacs使わない人でも使うと便利だと思います。 http://d.hatena.ne.jp/kiwanami/20120305/1330939440 VimもーVimもー! って事で作りました。 mattn/vdbi-vim - GitHub Database client for Vim https://github.com/mattn/vdbi-vim Emacs版はepcというRPCプロト

    Big Sky :: VimでDBが操作できる vdbi-vim 作った。
    y-kawaz
    y-kawaz 2012/03/07
    すげーww
  • Big Sky :: VimmerなPerl開発環境

    えーっと、IDE使ってません。ごめんなさい。 PerlをIDEで書いてる人、どれくらいいるんだろう。何使ってるんだろ。 私はLinuxでもWindowsでもVimを使ってます。Perlってサーバで使われる事が多いし、サーバだとsshで入る事が多いだろうし、まぁXの転送やVNCやそれっぽいのでグラフィカルに操作しても良いけど、正直PerlのドキュメントもテキストベースだしPerlで入力補完出来るグラフィカルエディタもまず無いと思ってる。 で、私がVim上で使ってるPerlの開発を「200倍便利にするスクリプト」を紹介。 perldoc.vim perldocはPerlのオンラインマニュアルなんだけど、これを一々ターミナルに戻ったりして引いてると時間のロス。screenで分割して開いてもいいんだけどscreenの画面間移動よりもVim内でのウィンドウ間移動の方が操作感が統一出来てて良い。 そこ

    Big Sky :: VimmerなPerl開発環境