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

  • Big Sky :: Go に Fuzz testing が入った。

    みなさん Fuzz testing ってご存じでしょうか。 人間が作る物は必ずといっていいほどバグが存在します。そしてそのコードをテストする人間も必ずバグを見逃します。 想定していなかった境界値テスト等、人間には先入観という物があり、それが邪魔をして簡単にバグを見逃します。昨今、この様な誰も気付かなかったバグの隙間を突く様な脆弱性が沢山見つかっています。 物によっては重大インシデントに発展する物まであります。 こういった人間では想定できない様なバグを見付けてくれるのが Fuzz testing です。Fuzz testing を実施する事で、ソフトウェアは頑丈になり安全にもなりえます。 日、Go の master ブランチに Fuzz testing の機能が入りました。 [dev.fuzz] Merge remote-tracking branch 'origin/dev.fuzz'

    Big Sky :: Go に Fuzz testing が入った。
    s1061123
    s1061123 2021/09/21
  • Big Sky :: Go 言語の struct の実体を引数で(なるべく)渡せない様にするテクニック

    Go 言語は struct のレシーバがポインタの場合は実体であってもポインタの場合であっても呼び出せるので、もし struct が参照カウントに従い動作する様な場合は実体でコピーされてしまっては困る場合があります。例えば以下の様なインタフェースを考えます。 package main import ( "fmt" "sync/atomic" "time" ) type foo struct { n int64 q chan struct{} } func (f *foo) Add() { if atomic.AddInt64(&f.n, 1) == 1 { f.q = make(chan struct{}) } } func (f *foo) Done() { if atomic.AddInt64(&f.n, -1) == 0 { f.q <- struct{}{} } } func (f

    Big Sky :: Go 言語の struct の実体を引数で(なるべく)渡せない様にするテクニック
    s1061123
    s1061123 2020/02/21
  • Big Sky :: Vim をモダンな IDE に変える LSP の設定

    Go 言語の IDE 機能を得る為に何か知る必要はありません。Java の IDE 機能を得る為に何か知る必要はありません。HTML の IDE 機能をインストールする為に npm コマンドの使い方を覚えたり、LaTeX の IDE 機能をインストールする為に、配置場所を考える必要もありません。もしインストールを実行しても動かなかったら、それは vim-lsp-settings のバグです。 以前まででれば vim-lsp を導入すると Language Server の登録が必要でした。 if executable('gopls') au User lsp_setup call lsp#register_server({ \ 'name': 'gopls', \ 'cmd': {server_info->['gopls']}, \ 'whitelist': ['go'], \ }) au

    Big Sky :: Vim をモダンな IDE に変える LSP の設定
    s1061123
    s1061123 2020/01/01
  • 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 へ)
    s1061123
    s1061123 2018/12/17
  • Big Sky :: golang の sort インタフェース難しい問題が解決した

    golang では配列をソートしたい場合に癖があり、Int や Float64、String といった固定の型であれば sort パッケージが提供する関数でソートが可能でしたが、独自の型や Int64 等といった sort パッケージが用意していない型の配列をソートするには Sorter というインタフェースを備えた型で扱うしかありませんでした。 package main import ( "fmt" "sort" ) type Food struct { Name  string Price int } type Foods []Food func (f Foods) Len() int { return len(f) } func (f Foods) Less(i, j int) bool { return f[i].Price < f[j].Price } func (f Foods

    Big Sky :: golang の sort インタフェース難しい問題が解決した
    s1061123
    s1061123 2016/10/04
  • 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 を使おう。
    s1061123
    s1061123 2015/01/13
  • Big Sky :: Vim scriptはウェブアプリケーション記述言語やったんやー

    こんにちわ。昨今、ウェブ開発の進化はすざましいですね。PythonPerlJava、色んな言語で書かれていると思います。 もちろん編集にはVimを使っているかと思います。 でも編集だけ? 違うよね! Vim scriptはウェブアプリケーション記述言語なんだよ! Plack::App::Vim package Plack::App::Vim; use strict; use warnings; use parent qw/Plack::Component/; use Plack::Request; use Encode; use JSON::PP; sub prepare_app { my $self = shift; $self->{vim} ||= 'vim'; if (!$self->{server}) { open(my $f, "vim --serverlist|"); my

    Big Sky :: Vim scriptはウェブアプリケーション記述言語やったんやー
    s1061123
    s1061123 2012/01/28
  • Big Sky :: VimscriptだけでOAuthライブラリ書いた。

    先日emacsからtwitter出来る、twittering-modeというのを試してみたんですが、ちゃんとOAuth出来てて便利でした。lispでも色々出来るなーと感心しました。 EmacsWiki: Twittering Mode twittering-mode.el is a Twitter client http://www.emacswiki.org/emacs/TwitteringMode それと同時に、いつもの妖精が耳元でささやいた。 「vimスクリプトでもきっと書けるさ」 で、書きました。 mattn's vim-oauth at master - GitHub oauth access library for vim http://github.com/mattn/vim-oauth sha1, hmac, base64 の処理には、Nakadairaさんの物を使わせて頂

    Big Sky :: VimscriptだけでOAuthライブラリ書いた。
    s1061123
    s1061123 2010/09/13
  • Big Sky :: C++で軽量Webサーバ書いた。

    書いたといっても結構前からあったのですが、いらん所を削ぎ落として軽量Webサーバとして仕立て上げました。 軽量とは言えど、CGIを使って結構色々動きます。 例えば、ソースアーカイブを解凍したらCGIがあって、apacheから見える場所にコピーして...とか面倒くさかったりしますよね。 おれは今すぐWebサーバを起動したいんだ!そして今いるディレクトリのファイルをWebサーバからサーブしたいんだー! って事ないですか?blogソフトウェアをダウンロードして今すぐ試したいけど、apacheインストールされてなかった...とか悲しすぎます。 今回紹介する"tinytinyhttpd"(tthttpd)はそんな、小さい様で大きな問題を解決出来るかもしれないソフトウェアです。 mattn's tinytinyhttpd at master - GitHub tiny tiny httpd http:

    Big Sky :: C++で軽量Webサーバ書いた。
    s1061123
    s1061123 2009/07/31
  • Big Sky :: ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い!

    kazuhoさんがやってくれました。 ずいぶん前からjsonをC++でパース(SAXじゃなくてDOM)するのに小さいライブラリないかなーと思ってました。個人的にはjson-cというのを使ってたのですが、幾らか気に入らない所があったりビルドが少し手間だったりしていました。STLしか使わなくてvectorとかmapで表現されるツリー構造な物が欲しいなぁって思ってたんです。 とあるIRCで昨日、kazuhoさんと「ほしいですよねー」という話から始まって、githubにあるjsonxxとかも物色しながら「いいのないねー」とか言ってたらkazuhoさんが「もすこし綺麗に書けそう」って言い出して朝から格的に書き始めてついさっき出来上がりました。速いw 名前はpicojson とても小さく、実装コードだと300数十ステップ程です。しかもヘッダファイルだけなので管理が楽です。 試しにwassrのpubl

    Big Sky :: ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い!
    s1061123
    s1061123 2009/07/02
  • Big Sky :: 意外と知られていないvimのtips(ファイルがあるディレクトリをコマンドモードで補完する)

    色んな人のvimrcを見ていて意外とmapされていないのがこの技。 元はと言うとKoRoNさんから教えて貰った技で、先日公開した私のvimrcにも入っています。 " expand path cmap <c-x> <c-r>=expand('%:p:h')<cr>/ " expand file (not ext) cmap <c-z> <c-r>=expand('%:p:r')<cr> これを使って例えば # vi /path/to/file/file.txt type some text... :pwd /path/to/file な状態で、ファイルのある場所にカレントディレクトリを移したいならば :cd <C-X>  <= Ctrl押しながらX とコマンドモードで<C-X>をタイプすれば :cd /path/to/file/ と補完されます。あとはENTERで移動。 結構便利だったりしま

    Big Sky :: 意外と知られていないvimのtips(ファイルがあるディレクトリをコマンドモードで補完する)
    s1061123
    s1061123 2009/06/01
  • Big Sky :: 意外と知られていないvimのtips(CTRL-AやCTRL-Xで日付をインクリメント/デクリメント)

    これはすごい speeddating.vim - Use CTRL-A/X to increment dates, times, and more : vim online なんと 2008-01-31 11:51:31 I,II,III,IV,V 3rd,4th 等いった日付、時刻、数字表記に対して<C-A>や<C-X>で値をインクリメント/デクリメント出来る様にするという凄いスクリプト。 試しに 2008-01-31 11:51:31 の51の所で30分繰り上げる為に「30<C-A>」とした所、 2008-01-31 12:21:31 と時間まで動くじゃないですか!!! スバラシス... そのままでも素晴らしいのですが、このスクリプトの素晴らしいのは、拡張出来る所。例えば ~/.vim/after/plugin/speeddating_japanese.vim scriptencodi

    Big Sky :: 意外と知られていないvimのtips(CTRL-AやCTRL-Xで日付をインクリメント/デクリメント)
    s1061123
    s1061123 2008/07/03
  • 1