タグ

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

  • 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」が凄い!
    zetamatta
    zetamatta 2021/03/03
  • Big Sky :: 書評「Go言語による並行処理」

    O'Reilly Japan, Inc. 様に献頂きました。ありがとうございます。 そして献頂く際にお声を掛けて頂いた、書の翻訳を担当された ymotongpoo さんにもお礼を申し上げます。ありがとうございます。 書の訳は非常に素晴らしく、とても原文が英文であったとは思えないほど綺麗で、読んでいく中で「原文でどの様に表現されているんだろう」といった引っかかりも無く、とてもスムーズに読み進められました。 Go 言語に関わって随分と長くなってきました。初めて Go を知ってからユーザがどんどん増える様を見る事が出来るのは正直に言って非常に嬉しいです。 ふと Go の魅力は何かと聞かれたら幾つか挙げる事が出来ますが、間違いなく選ぶのが「非同期処理の簡単さ」です。これまで多くの開発者が OS スレッドで実現してきた非同期処理を、Go 言語は少ないイディオムとインテリジェントなランタイムを

    Big Sky :: 書評「Go言語による並行処理」
    zetamatta
    zetamatta 2018/10/22
    曰く「なぜこの context が goroutine/channel の問題を解決できるのかといった根底の話も書かれています」まじか!?
  • Big Sky :: golang で tensorflow のススメ

    « Software Design 2018年7月号「Vim 絶対主義」の執筆に参加しました。 | Main | ボタンを押したら golang の if err... を自動入力 » tensorflow といえば Python と思っておられる方も多いのではないでしょうか。間違いではないのですが、これは初期に作られた Python 向けのバインディングに研究者達が多くいついた結果に過ぎないと思っています。実際 tensorflow は現在 C言語、C++PythonJavaGo から利用する事ができ、最近では JavaScript にも移植されています。筆者自身も Go で tensorflow を使ったシステムを構築し、運用保守しています。問題も発生せず機嫌良く動いています。学習の利用部分は GPU のパフォーマンスに依存しますが、それ以外の部分については各言語の実装に依存し

    Big Sky :: golang で tensorflow のススメ
    zetamatta
    zetamatta 2018/08/26
    曰く『筆者自身も Go で tensorflow を使ったシステムを構築し、運用保守しています』うわ、うらやまくやしい
  • Big Sky :: gRPC を使ったファイル転送ツール作った。

    WindowsLinux 間でちょっとしたファイル転送をしたいと思った時に msys2 の ssh コマンドや WinSCP が入ってなくて、さらにレジストリなどを汚したくない環境で手軽に使える使えるファイル転送ソフトが欲しかった。Linux 側から Samba で繋いでも良いんだけど、その用途の為だけに Samba いれたくないなと思ったのでバイナリを1個ポンとコピーすれば使える物を作った。 GitHub - mattn/ft ft is CLI tool that transfer files. https://github.com/mattn/ft 使うには両方の端末に ft というコマンドがインストールされている必要がある。「Go が入れられるなら msys2 も(ry」とか言われてしまいそうだけど、実際にそういう環境や要件ってあるのですよ。はい。 Go で書いたので go

    Big Sky :: gRPC を使ったファイル転送ツール作った。
    zetamatta
    zetamatta 2018/01/09
  • Big Sky :: .NET Core でブログエンジン書いた

    結構前から、そろそろ .NET Core を使ったお仕事とかやっていきたいなと思っていて、その際に Linux でちゃんと動くのかを確認しておきたかった。ただインターネットを見てもそれほど良い情報が見当たらず、これは誰も試してないのかもなと思い仕方がないので自分で作って体験してみる事にした。 GitHub - mattn/dotnet-blog README.md dotnet-blog Markdown friendly blog engine inspired with Jekyll written in Microsoft .NET C... https://github.com/mattn/dotnet-blog Markdown で記事が書けて、Jekyll と同様に Liquid でテンプレート制御が行えて、さらに Git と連携するブログエンジンです。 ディレクトリ構成は J

    Big Sky :: .NET Core でブログエンジン書いた
  • 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言語感想文
    zetamatta
    zetamatta 2017/06/03
    わしもかなり Go 言語好きだけど、先生にはかなわんな HAHAHA
  • Big Sky :: golang で型付きで DLL を呼び出す方法

    zetamatta
    zetamatta 2017/05/17
    「go generate」で「mksyscall_windows.go」を使う方法の解説
  • 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 と私
    zetamatta
    zetamatta 2017/03/10
  • Big Sky :: Ruby の a = a + 1 はなぜ undefined method '+' for nil:NilClass なのか

    以前からずっと疑問に思っていた事があった。 ruby の後置 if/unless で条件が偽になった場合でも代入構文が実行されるのはどうしてだろう 例えば以下のコードを irb や pry で実行してみて欲しい。 a = 1 if false 続けて a をタイプする。すると nil が表示される。 僕のこれまでの理解だと後置if/unlessは、ステートメントに作用するのでそのステートメント自体が無効になる、つまり代入自体されなかった事になるという理解だった。ruby のパーサのソースコードを見ても後置ifはステートメントに作用している様だった。 | stmt modifier_if expr_value { /*%%%*/ $$ = new_if($3, remove_begin($1), 0); fixpos($$, $3); /*% $$ = dispatch2(if_mod, $

    Big Sky :: Ruby の a = a + 1 はなぜ undefined method '+' for nil:NilClass なのか
  • Big Sky :: Re: Go でシングルバイナリな Web アプリを開発しているときに webpack --watch をうまいところやる

    go-bindata もいいけど、go-assets もいいよ。 Go でシングルバイナリな Web アプリを開発しているときに webpack --watch をうまいところやる - Diary Go でシングルバイナリな Web アプリを開発しているときに webpack --watch をうまいところやる 個人的なアプリをつくるとき、だいたい以下のような環境で作業しています WAF は E... http://diary.app.ssig33.com/166 みんなのGo言語にも書いた気がするのでそういうの興味ある人は買って下さい。 バイナリに assets を埋め込む際には go-bindata が有名ですが、実は go-assets も便利です。 GitHub - jessevdk/go-assets: Simple embedding of assets in go READM

    Big Sky :: Re: Go でシングルバイナリな Web アプリを開発しているときに webpack --watch をうまいところやる
    zetamatta
    zetamatta 2017/01/19
  • Big Sky :: Windows からも ssh でリモートコマンド実行したい、それ golang で出来るよ

    おそらく golang を暫く使っておられる方であればご存じだと思いますが今日は crypto/ssh を紹介します。 Windows で ssh と聞くとどうしても msys やら cygwin やら入れないといけなくて ランタイムを入れるのが嫌だ 特殊なパス形式とか嫌だ そもそも業務で使いづらい といった個人的もしくは政治的な事柄が起きてなかなか実現しづらかったりします。でも golang なら msys や cygwin に頼らず ssh コマンドを、しかもライブラリとして扱う事が出来るので golang で作ったウェブサーバやバッチから UNIX ホストに対して ssh コマンドを送る事が出来るのです。 ssh - GoDoc package ssh import "golang.org/x/crypto/ssh" Package ssh implements an SSH cli

    Big Sky :: Windows からも ssh でリモートコマンド実行したい、それ golang で出来るよ
  • Big Sky :: バイナリ一つで zip, tar.gz, tar.bz2, tar.xz が開けるコマンド「archiver」(と go1.8 への対応方法)

    追記: 修正が中途半端だったのでいったんリバートされ go1.9 で修正される事になりました。 UNIX に慣れている人であれば問題ないのですが、Windowszip や tar.gz, tar.bz2, tar.xz を開くのは意外と不便で専用アーカイバをダウンロードしてきてインストールする必要があり、割かし不便なのですが archiver というツールを使うと以下のフォーマットを簡単に作成、展開できるようになります。 .zip .tar .tar.gz .tgz .tar.bz2 .tbz2 .tar.xz .txz .rar (開くのみ) インストールは golang が入っていれば簡単です。 $ go get github.com/mholt/archiver/cmd/archiver 使い方も簡単で、圧縮は以下の手順。 $ archiver make [archive na

    Big Sky :: バイナリ一つで zip, tar.gz, tar.bz2, tar.xz が開けるコマンド「archiver」(と go1.8 への対応方法)
    zetamatta
    zetamatta 2016/12/02
  • Big Sky :: GolangでAPI Clientを実装する、の続き

    いい記事に感化されて僕も何か書きたくなった。 GolangAPI Clientを実装する | SOTA GolangAPI Clientを実装する 特定のAPIを利用するコマンドラインツールやサービスを書く場合はClientパッケージ(SDKと呼ばれることも多いが記事ではClientと呼ぶ)を使うこ... http://deeeet.com/writing/2016/11/01/go-api-client/ この先、JSON REST API のエンドポイントに対して Golang の struct を用意していく訳だけど、ここが一番かったるい作業で一番手を抜きたい所だと思います。そこで便利なのが JSON-to-Go です。 JSON-to-Go: Convert JSON to Go instantly JSON-to-Go Convert JSON to Go struct T

    Big Sky :: GolangでAPI Clientを実装する、の続き
    zetamatta
    zetamatta 2016/11/01
    マジカ!>「このサイトの左側ペインに JSON を与えると、Golang の struct が一気に生成できます」
  • Big Sky :: Bash on Ubuntu on Windows の最高の端末環境を教えてやるからちょっと来い。

    Bash on Ubuntu on Windows (以下 BoW) は Windows コマンドプロンプトを使って実行される。今までであれば Windows のコマンドプロンプトはエスケープシーケンスを認識しなかったので cmd.exe そのものでは vt100 等の端末環境を用意できませんでした。しかし Windows10 の cmd.exe では新しいコンソールモードが用意されています。 Console Virtual Terminal Sequences (Windows) Virtual terminal sequences are control character sequences that can control cursor movement, color/font mode, and other operations. https://msdn.microsoft.c

    Big Sky :: Bash on Ubuntu on Windows の最高の端末環境を教えてやるからちょっと来い。
    zetamatta
    zetamatta 2016/08/27
    CygTerm に似てる…
  • Big Sky :: ODBC 接続なアプリケーションの開発が楽になる C++ ライブラリ nanodbc

    WindowsC++ を使い、データベースの接続先を選ばないアプリケーションを書くのであれば ODBC 接続が一つの選択肢になります。しかし ODBC 接続のアプリケーションを書くのは非常に骨の折れる仕事です。 データの取得 - eternalwindows.jp http://eternalwindows.jp/windevelop/odbc/odbc05.html SQLAllocHandle によるハンドルの作成を事ある毎に行わなければなりません。そんな ODBC を使ったアプリケーションの開発を楽にしてくれそうなのが nanodbc です。 nanodbc A small C++ wrapper for the native C ODBC API. https://lexicalunit.github.io/nanodbc/ Windows で ODBC のシステムDSNに「

    Big Sky :: ODBC 接続なアプリケーションの開発が楽になる C++ ライブラリ nanodbc
  • 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行で高速化するテクニック
    zetamatta
    zetamatta 2016/08/06
    ループの中ではグローバルではなくローカル変数扱いでアクセスした方が速いか、nrhd
  • 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 を作った。
    zetamatta
    zetamatta 2016/08/06
    ほんまそれ>「こういうの python じゃなくて Go でビルドされてると助かるよなー」と思った
  • Big Sky :: peco みたいだけど peco と違うコマンドラインセレクタ cho を作った。

    僕はもっぱらコマンドラインで作業するので peco を使う事が多いです。 Big Sky :: Windows のコマンドプロンプトを10倍便利にするコマンド「peco」 Windows ユーザのごく一部には、コマンドプロンプトが無いと生きられない民族がいます。そしてその民族の一部には cygwin や msys bash 等といった、サードパーティなシェル(power... http://mattn.kaoriya.net/software/peco.htm GitHub - mattn/pcd: peco + cd = awesome! README.md pcd peco + cd = awesome! Requirements peco Windows Installation Copy pcd.bat into your fav... https://github.com/mat

    Big Sky :: peco みたいだけど peco と違うコマンドラインセレクタ cho を作った。
    zetamatta
    zetamatta 2016/07/18
    peco みたいに全画面を占有しないタイプのセレクタ
  • 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 を使ったテクニックあれこれ
    zetamatta
    zetamatta 2016/07/18
    おー、len(チャネル) みたいなことができるのか。ちぃ覚えた
  • 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 のサーバで帯域制限したい。
    zetamatta
    zetamatta 2016/07/18