タグ

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

  • Big Sky :: Re: Golang で言語処理100本ノックの No.3 の問題を解いてベンチマークとってみた

    Golang で言語処理100ノックの No.3 の問題を解いてベンチマークとってみた - Qiita http://qiita.com/megu_ma/items/01029c3ca24fb9820373 正規表現や strings.Trim 等はとても便利なのですが、いかんせん単一の関数呼び出しに対して真面目にループを回す作りになっており、戻り値がコピーされる前提の作りになっています。例えば func answer1() []int { // 単語に分解 words := strings.Split(sentence, " ") var pi []int for _, word := range words { word = strings.Trim(word, ",") word = strings.Trim(word, ".") // pi = append(pi, utf8.R

    Big Sky :: Re: Golang で言語処理100本ノックの No.3 の問題を解いてベンチマークとってみた
  • Big Sky :: Golang 1.4 で導入される generate を一足早く試してみる

    先日、golang の開発リポジトリに generate が入りました。 Go generate: A Proposal The go build command automates the construction of Go programs but sometimes preliminary processing is required, processing that go build does not support. https://docs.google.com/document/d/1V03LUfjSADDooDMhe-_K59EgpTEm3V8uvQRuNMAEnjg/edit 皆さんが期待している様な物なのかそうでないのか分かりませんが、ひとまずこの提案書を見る限り 使うのはライブラリユーザではなくライブラリ作者 go build で自動で generate してくれる

    Big Sky :: Golang 1.4 で導入される generate を一足早く試してみる
  • Big Sky :: Go言語で日付処理

    元ネタ: 誰もが一度は陥る日付処理。各種プログラミング言語におけるDateTime型/TimeStamp型の変換方法のまとめ Go言語が無かったので書いてみた。 現在時刻の取得 package main import ( "fmt" "time" ) func main() { fmt.Println(time.Now()) } 2013-06-19 21:46:14.186298 +0900 +0900 Time => Unix時刻変換 package main import ( "fmt" "time" ) func main() { fmt.Println(time.Now().Unix()) } 1371646123 Unix時刻 => Time変換 package main import ( "fmt" "time" ) func main() { fmt.Println(tim

    Big Sky :: Go言語で日付処理
  • Big Sky :: Go言語でインタフェースの変更がそれ程問題にならない理由

    golang - Go言語における埋め込みによるインタフェースの部分実装パターン - Qiita [キータ] http://qiita.com/tenntenn/items/e04441a40aeb9c31dbaf golang はインタフェースがマッチしているかどうかにより処理を切り分けられる。 package main import "fmt" type Person struct { FirstName string LastName  string } func (p *Person) Name() string { return p.FirstName + " " + p.LastName } func main() { person := &Person{"Taro", "Yamada"} fmt.Println(person.Name()) } メソッドを保持しているのであれ

    Big Sky :: Go言語でインタフェースの変更がそれ程問題にならない理由
  • Big Sky :: Golang の channel の使い所

    golang の特徴と言えば goroutine と channel ですが、その使いどころに悩む人もおられる様です。 goroutine は非同期に実行される処理、channel はその groutine と通信する為の仕組みと考えると分かりやすいです。 package main import ( "fmt" "time" ) func main() { task := make(chan string) taskquit := make(chan bool) workerquit := make(chan bool) go func() { loop: for { select { case <-taskquit: workerquit <- true break loop case job := <-task: fmt.Println(job) } } }() go func() {

    Big Sky :: Golang の channel の使い所
  • Big Sky :: golang で複数のエラーをハンドリングする方法

    golangいまどき例外ないの頭おかしいって思ってたけどようするにgoroutineと例外がうまくいかないからgoroutineのほう取って例外捨てたってことかねえ。 — Urabe, Shyouhei (@shyouhei) April 15, 2014 FAQ に書いてあります。 Why does Go not have exceptions? - Frequently Asked Questions (FAQ) - The Go Programming Language We believe that coupling exceptions to a control structure, as in the try-catch-finally idiom, results in convoluted code. It also tends to encourage programme

    Big Sky :: golang で複数のエラーをハンドリングする方法
  • 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 :: golang のリファクタリングには gofmt ではなく、gorename を使おう。

    今まで golang で変数名や関数名のリネームには gofmt の -r オプションを使ってきましたが、これからは gorename を使いましょう。 文法を解析して正しくリネームしてくれるので、gofmt で起き得た誤爆も心配ありません。インストールは以下の様に実行します。 $ go get golang.org/x/tools/cmd/gorename 使用方法は以下の通り。 gorename: precise type-safe renaming of identifiers in Go source code. Usage: gorename (-from <spec> | -offset <file>:#<byte-offset>) -to <name> [-force] You must specify the object (named entity) to rename

    Big Sky :: golang のリファクタリングには gofmt ではなく、gorename を使おう。
  • Big Sky :: ファイル名の一括置換なら massren がめちゃめちゃ便利

    大量にあるファイルのファイル名を一括で変更する場合、どうしても GUI での操作であったりマッチパターンを書くのが面倒だったりしましたが、massren を使えば誰でも簡単にファイル名の一括置換が出来る様になります。 laurent22/massren - GitHub massren - Easily rename multiple files using your text editor https://github.com/laurent22/massren お気に入りのテキストエディタを使って、好きな様にファイル名を変更出来ます。サポートしているOSは Windows, Linux, OSX です。中身は golang で書かれています。 それぞれバイナリが用意されているので自分でビルドする必要はありません。LinuxOSX の人はリンク先にある手順を、Windows の人は

    Big Sky :: ファイル名の一括置換なら massren がめちゃめちゃ便利
  • Big Sky :: Vimを使ったGo言語開発手法

    先日、Go言語バージョン1.1がリリースされました。安定しているのは勿論、幾つか新機能が追加されましたが、何よりもパフォーマンスチューニングが施された一番嬉しいですね。 Go 1.1 performance improvements | Dave Cheney This is the first in a series of articles analysing the performance improvements in the Go 1.1 relea... http://dave.cheney.net/2013/05/21/go-11-performance-improvements さて今日はVimを使ってGo言語を開発する方法を紹介したいと思います。 VimGo言語を開発するには、Go言語のリポジトリに含まれる misc/vim にランタイムパスを追加します。以下を vimr

    Big Sky :: Vimを使ったGo言語開発手法
  • Big Sky :: 「実践Vim 〜思考のスピードで編集しよう〜」書評

    アスキー・メディアワークス様より、献して頂きました。 まず先に総評を言ってしまいますが、Vimmer ならば買うべきだと思います。 Big Sky :: Vimテクニックバイブル ~作業効率をカイゼンする150の技 もちろんこれらのも僕を喜ばす事は出来たのですが、なにぶんページの殆どが知っている情報だったので僕にとって「ワクワクする」では無かったんです。 ずっと最新情報取り入れたVim出ないかなと思ってまし... http://mattn.kaoriya.net/software/vim/20110810203558.htm Vim テクニックバイブルを書いた時にも何冊か Vimを紹介しましたが、これまで「Vim を現場で使う事にスコープを当てた」というのは存在しませんでした。 あくまでリファレンスでしかなく、なぜ Vim はこんな動作なのか、編集する方法には複数の方法が

    Big Sky :: 「実践Vim 〜思考のスピードで編集しよう〜」書評
    ruedap
    ruedap 2013/08/25
    「テキストオブジェクトについては、結構ページ数を割いています」で一気に興味津々
  • Big Sky :: 最近の zencoding.vim

    最近 zencoding.vim を大きく修正しました。とは言ってもこれまで単体テストを作ってきた事もあって、過去の動作を(なるべく)壊さずに大規模な修正が行えました。 これまでは一つのファイルに html, css, haml の処理が全て記述されていたのでとてもスパゲッティなコードになっていて、もう少し放っておくとカオスな状態になりかけていたので、ファイルを分割しインタフェースを揃える事にしました。 これにより、今後新しいフォーマットに対応する際にも、zencoding/lang にあるファイルの真似をして記述すれば実装出来る様になります。 haml に対応した 「えっ?前から対応してたんじゃないの?」と言われる方もいるかもしれませんが、これはあくまで expand abbreviation の haml フィルタとしてだけサポートしていました。 何が変わったかというと zen cod

    Big Sky :: 最近の zencoding.vim
  • Big Sky :: zencoding-vim の Emmet サポートを始めます。

    « 僕がboost::asioとboost::property_treeを使いHTTPプロキシ環境下で非同期にGoogle Search APIから検索するまでにやった、たった一つの事。 | Main | python 補完のVimプラグイン「jedi-vim」がスゲー » しばらく zencoding-vimemmet ブランチで開発し、落ち着いたら master にマージします。 親参照 ^ で親へ移動出来る様になってます。 .header>.nav^.logo これが <div class="header"> <div class="nav"></div> </div> <div class="logo"></div> こう展開されます。^^ で複数階層登れます。 高度なCSS補完 おそらくこれが emmet の最大の武器と思う。 まず m0.1 は margin: 0.1em

    Big Sky :: zencoding-vim の Emmet サポートを始めます。
  • Big Sky :: Re: ctrlp でたりないこと

    unite.vim と ctrlp をつかってみた比較 - ”><xmp>TokuLog 改メ tokuhirom’s blog 存在しないファイル名いれたときに作れない 存在しないディレクトリ名いれたときに mkpath モードにはいれない http://d.hatena.ne.jp/tokuhirom/20120502/1335936640 存在しないファイル名いれたときに作れない 作れます! CtrlPを起動するとこんな風になっています。この autoload の下にファイルを作りましょう。 au とだけタイプすれば autoload/zencoding.vim だけに絞りこまれているはずです。絞りこまれてなければ移動させて下さい。 ここで <c-z> をタイプしマークします。以下は分かりやすいように a だけで絞り込んだ場合の模様です。 マークされたら入力した au を <c-w>

    Big Sky :: Re: ctrlp でたりないこと
  • Big Sky :: 2012年のVimメモ取り環境はmemolistとctrlpに決まりだ

    glidenoteさんがmemolistという簡素ながらも良くできたメモ取り用プラグインを作っています。 シンプルなメモ管理用プラグインmemolist.vimを作った - Glide Note - グライドノート Octopress の記事を書くときに カスタムしたjekyll.vim を 利用していて、「新規作成」と「記事の管理」が非常に便利なので、 同じようなことが出来るメモ用プラグインを作ってみました。 ... http://blog.glidenote.com/blog/2012/03/26/memolist.vim/ さらにFuzzyFinderとの連携記事もあがってます。 FuzzyFinderでmemolist.vimが進化した! - Glide Note - グライドノート Recent Posts FuzzyFinderでmemolist.vimが進化した! シンプルな

    Big Sky :: 2012年のVimメモ取り環境はmemolistとctrlpに決まりだ
  • Big Sky :: CtrlP にランチャ拡張書いたら捗りすぎて生きているのが辛い

    UNIX系ツールとこういった操作を覚えれば誰でもコマンドプロンプトで生活出来ます。 今日はそんな話じゃなくて、普段Vimを使っていると色んな事をVimから実行したくなってきます。 エクスプローラ起動 ブラウザ起動 TwitVim起動 FavStarなんて見ようかしら その都度、キーマッピングを書いても良いのですが、その度にキーアサインしてるとキーが幾つあっても足りません。あと忘れる事が多い。 そこでランチャー書いてみました。普段リポジトリ内のファイルにアクセスする際、パスが遠いと面倒なので CtrlP(以前書いた紹介記事はこちら) というプラグインを使っているのですが、このプラグインには unite.vim の様に拡張を書ける仕組みがあるのです。 オフィシャルからもバッファや最近触ったファイル(MRU)を選択出来るエクステンションが提供されているのですが、皆さんに紹介の意味も込めて今日適当

    Big Sky :: CtrlP にランチャ拡張書いたら捗りすぎて生きているのが辛い
  • Big Sky :: 意外と知られていない便利なvimプラグイン「ctrlp.vim」

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

    Big Sky :: 意外と知られていない便利なvimプラグイン「ctrlp.vim」
  • 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のどこが重いのかを調べられるプラグイン書いた。
  • Big Sky :: Vimテクニックバイブル ~作業効率をカイゼンする150の技

    名無しのVim使いでお馴染みの小見さんにお誘いを受け、執筆のお手伝いをさせて頂きました。 これまで僕が持っていたVimは、「Viとは」から始まりページ数の半分くらいで操作方法、最後の方にようやく「GVimとは」が現れる、あまり奥にまで入り込んでいない書籍でした。 もちろんこれらのも僕を喜ばせる事は出来たのですが、なにぶんページの殆どが知っている情報だったので僕にとって「ワクワクする」では無かったんです。 ずっと最新情報取り入れたVim出ないかなと思ってました。 そんな中、小見さんから話を持ちかけて頂き、まさか自分がその著書を作るなんて思っても見なかったけど即答でOKを出させて頂きました。 僕が最初に見たViは大学の某研究室にあったSONYのNEWSというUNIX上で友達が動かしていた物。その時は変な操作方法だなぁとしか思ってませんでした。 それから就職した会社のワークステーションで

    Big Sky :: Vimテクニックバイブル ~作業効率をカイゼンする150の技
    ruedap
    ruedap 2011/08/11
    wktk
  • Big Sky :: Jekyllで始める簡単ブログ

    GithubのユーザページでJekyllが使われる様になりました。 GitHub Pages Upgraded to Jekyll 0.5.0 - GitHub I just released Jekyll 0.5.0 which contains a huge overhaul that allows you to specify options in a _config.yml file. GitHub Pages will honor most of these settings, so if you want to have your Page rendered with RDiscount instead of Maruku, just put this in your config file: ... http://github.com/blog/402-github-page

    Big Sky :: Jekyllで始める簡単ブログ
    ruedap
    ruedap 2011/06/15
    さっきの記事のブコメ欄で知ったけど、GitHubって自分のブログっぽいページ持てるんだ。Jekyllってのも初めて聞いた