タグ

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

  • Big Sky :: VimConf 2023 Tiny に参加しました

    はじめに 11/18、東京秋葉原のアキバプラザで、4年ぶりとなる VimConf、「VimConf 2023 Tiny」が開催されました。 今回、Kaoriya さんから「SoftwareDesign で執筆した内容で基調講演をして欲しい」とお願いされた際に、即答で OK をしましたが実は少し不安がありました。SoftwareDesign を事前に購入した人に同じ話を聞かせてしまうのは残念すぎないかという気持ちです。どうしようかとしばらく検討しましたが、SoftwareDesign の内容からスピンオフした内容にする事にしました。 規模が少し小さいとは言え、せっかく楽しみにきて頂いてる皆さんに、残念に思われないようにしたい、少しでも「来て良かった」と思って貰えるイベントにしたと思い、テーマは変えないまま色々な Bram Moolenaar 氏のエピソードを盛り込んだつもりです。 11/18

    Big Sky :: VimConf 2023 Tiny に参加しました
    mattn
    mattn 2023/11/20
    書きました。
  • Big Sky :: Go 言語プログラミングエッセンスという本を書きました。

    2023/3/12 発売です。 Go言語プログラミングエッセンス エンジニア選書 mattn 技術評論社 Kindle版 / ¥3,450 (2023年03月09日) 発送可能時間: Go が発表された当初から Go を見続けて来たので ずいぶん時間が経った気がします。僕なりにいろいろな活動をして来ました。Go 体や周辺ツールへのコントリビュート、イベント登壇、雑誌への記事の投稿や「みんなのGo言語」の共著など。 あらゆる活動が Go づくめで刺激的でした。Go で得たものも沢山あります。そして Go を使う人も想像していた以上に沢山増えました。Go に関して書かれたブログ、Go の求人、今では大学で Go を教えているところもあるくらいです。Go を知った事で僕のプログラミング人生はずいぶん変わりました。それまでは何を作るにしてもC言語をメイン言語として使ってきましたが、今や新しいアプ

    Big Sky :: Go 言語プログラミングエッセンスという本を書きました。
    mattn
    mattn 2023/02/20
    書いた。
  • Big Sky :: errors.Join が入った。

    errors, fmt: add support for wrapping multiple errors · golang/go@4a0a2b3 · GitHub An error which implements an "Unwrap() []error" method wraps all the non-nil errors in the returned ... https://github.com/golang/go/commit/4a0a2b33dfa3c99250efa222439f2c27d6780e4a Go でエラーを扱う際に、複数のエラーを束ねたい事があります。例えば複数のタスクを実行し、1つでもエラーになれば中断するのではなく、一通りタスクを実施し終えた結果を返したい様なニーズです。 package main import ( "errors" "log" "os"

    Big Sky :: errors.Join が入った。
    mattn
    mattn 2022/10/01
    書いた。
  • Big Sky :: unsafe.StringData、unsafe.String、unsafe.SliceData が入った。

    Go ではバイト列と文字列は異なる内部データとして扱っています。[]byte から string へ変換したり、またその逆を行う際にはキャストが必要になります。ですので string はイミュータブルになります。 しかしイミュータブルなのは理解しつつもバイト列を文字列にする為に無駄なアロケートをしたくない場合もあります。これまで Go ではドキュメントに明文化していなかった為に色々な作法が生まれてしまっていました。その代表的な物が以下です。 s := *(*string)(unsafe.Pointer(&b)) 来は、Go のバイト列の内部は SliceHeader という構造体により管理されています。 type SliceHeader struct { Data uintptr Len  int Cap  int } また string は以下の StringHeader で管理されて

    Big Sky :: unsafe.StringData、unsafe.String、unsafe.SliceData が入った。
    mattn
    mattn 2022/09/07
    書いた。
  • Big Sky :: Re: Go言語で画像ファイルか確認してみる

    mattn
    mattn 2022/08/18
  • Big Sky :: net/url に JoinPath が入った。

    Go で URL を扱う時は通常、net/url を使います。その際、例えばベースとなる URL にパスを足そうと思うと意外としんどかったりしました。 package main import ( "fmt" "log" "net/url" "path" ) func main() { endpoint := "https://example.com" u, err := url.Parse(endpoint) if err != nil { log.Fatal(err) } u.Path = path.Join(u.Path, "foo", "bar", "baz") endpoint = u.String() fmt.Println(endpoint) } 一部の方は「ハァッ?文字列で足せばいいじゃん」と思われるかもしれませんが、URL のパスを扱うという行為は実はとても難しい事なのです

    Big Sky :: net/url に JoinPath が入った。
    mattn
    mattn 2022/04/01
    書いた。
  • Big Sky :: 「R が生産性を高める〜データ分析ワークフロー効率化の実践」を読んだ。

    Rが生産性を高める〜データ分析ワークフロー効率化の実践 igjit, atusy, hanaori 技術評論社 Kindle版 / ¥3,126 (2022年01月21日) 発送可能時間: もともとデータ解析というか機械学習に幾らか興味があり、このブログや Zenn 等でも幾らか記事を書いてきたのですが、R 言語に関してはほぼほぼノータッチで、たまに遊んだりはしていましたが使えるというレベルではありませんでした。 以前から vim-lsp-settings という、Vim からあらゆる Language Server をインストールできるプラグインを作っており、そこで R の Language Server を試したところ、Windows で動かないバグを見付けパッチを送った際に少し触ったのが初めて R を触った体験です。このパッチがマージされたのをきっかけに少しだけ R を触る様になりま

    Big Sky :: 「R が生産性を高める〜データ分析ワークフロー効率化の実践」を読んだ。
    mattn
    mattn 2022/03/24
    書いた。
  • Big Sky :: RapidJSON や simdjson よりも速いC言語から使えるJSONライブラリ「yyjson」

    おなじみC/C++から使えるJSONライブラリを紹介するコーナー。まずは過去のまとめ。 ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い! 何も見ずにC++でjsonパーサが書けるか試してみた。 C言語から使えるJSONパーサ、JSMNを試してみた。 僕がboost::asioとboost::property_treeを使いHTTPプロキシ環境下で非同期にGoogle Search APIから検索するまでにやった、たった一つの事。 C言語から使えるJSONパーサ、parson が思った以上に良い仕事をしている。 最速と言われる JSON パーサ「rapidjson」が当に爆速なのか試してみた。 C言語から使えるJSONパーサ、jansson がとても直感的で良い C++ で STL フレンドリに扱えるJSONパーサ「json.hpp」 コメントも扱える高機能な

    Big Sky :: RapidJSON や simdjson よりも速いC言語から使えるJSONライブラリ「yyjson」
    mattn
    mattn 2022/03/20
    書いた。
  • Big Sky :: Go の struct は小さくできる(fieldalignment のススメ)

    動的型付けプログラミング言語や、class を持つようなプログラミング言語を使う場合、そのフィールドメンバの定義順などを意識する事は少ないかもしれません。 Go は struct という、C言語が持っている構造体と同じ様にメモリ配置され、構造体そのものをレシーバとして、メソッドを定義しつつプログラミングを行います。struct はデータ構造そのものを示し、それが大きくなるにつれ、当然ながらメモリ使用量も多くなります。 さて、例えば以下のコードを実行すると、struct 100 個分のサイズは幾らになるでしょうか。 package main import ( "fmt" "unsafe" ) type Account struct { TimeZone struct { Name       string `json:"name"` UtcOffset  int    `json:"utc_

    Big Sky :: Go の struct は小さくできる(fieldalignment のススメ)
    mattn
    mattn 2022/01/27
    書いた。
  • Big Sky :: 「エキスパートたちのGo言語」を読んだ。

    エキスパートたちのGo言語 一流のコードから応用力を学ぶ Software Design plus 上田 拓也, 青木 太郎, 石山 将来, 伊藤 雄貴, 生沼 一公, 鎌田 健史, 上川 慶, 狩野 達也, 五嶋 壮晃, 杉田 寿憲, 田村 弘, 十枝内 直樹, 主森 理, 福岡 秀一郎, 三木 英斗, 森 健太, 森國 泰平, 森 望, 山下 慶将, 渡辺 雄也 技術評論社 Kindle版 / ¥3,212 (2021年12月27日) 発送可能時間: 誌のサブタイトルは 入門書では得られないノウハウはコードにある です。 ちなみに筆者も似た様な書籍「みんなの Go 言語」を共著で執筆しましたが、書はこちらの拡充版とも言えるでしょう。 「エキスパートたちのGo言語」は20名もの共著で色々なノウハウが沢山掲載されています。「みんなの Go 言語」は7名の共著で個々の特色を色濃く出せた

    Big Sky :: 「エキスパートたちのGo言語」を読んだ。
    mattn
    mattn 2022/01/08
    書いた。
  • Big Sky :: Go の http パッケージに MaxBytesHandler が入った。

    « text/template と html/template に continue/break が入った。 | Main | 「エキスパートたちのGo言語」を読んだ。 » Go の http パッケージの Request.Body はこれまで最大バイト数を指定できなかったので、巨大なファイルをアップロードするといった DoS 攻撃を心配するのであれば、各ハンドラの中で独自でサイズ制限しながら読み込む必要がありました。Go 1.18 から http.MaxBytesHandler が入ったので簡単にサイズ制限をする事ができる様になりました。 MaxBytesHandler は http.Handler として提供されるので、例えば labstack/echo であれば以下の様に、各ハンドラを直接修正する事なく、簡単に導入して使う事ができます。 package main import ( "

    Big Sky :: Go の http パッケージに MaxBytesHandler が入った。
    mattn
    mattn 2021/12/24
    書いた。
  • Big Sky :: text/template と html/template に continue/break が入った。

    Go のテンプレートエンジンは、一般的なテンプレートエンジンの記法と気色が異なり、独特の文法で記述するのですが、ループ制御構文に関してはお世辞にも満足できる物ではありませんでした。それは continue や break が無いというのが理由です。continue や break が無かったので、無駄に if をネストして条件にあった値を出力しなければならず、必然的に無駄な if のネストが起きていました。 ■ビーフストロガノフ 2011年 受賞 2019年 受賞 ■カレーライス 2012年 受賞 ■満漢全席 2015年 受賞 2019年 受賞 例えば上記の様な出力をするには、以下の様なテンプレートを書かなければなりませんでした。 package main import ( "os" "text/template" ) var tmpl = ` {{- range .}} {{- if g

    Big Sky :: text/template と html/template に continue/break が入った。
    mattn
    mattn 2021/09/24
    書いた。
  • 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 が入った。
    mattn
    mattn 2021/09/21
    書いた。
  • Big Sky :: コメントも扱える高機能な C++ 向け JSON パーサ「jsoncpp」

    おなじみC/C++から使えるJSONライブラリを紹介するコーナー。まずは過去のまとめ。 ヘッダファイルだけでC++から使えるJSONパーサ「picojson」が凄い! 何も見ずにC++でjsonパーサが書けるか試してみた。 C言語から使えるJSONパーサ、JSMNを試してみた。 僕がboost::asioとboost::property_treeを使いHTTPプロキシ環境下で非同期にGoogle Search APIから検索するまでにやった、たった一つの事。 C言語から使えるJSONパーサ、parson が思った以上に良い仕事をしている。 最速と言われる JSON パーサ「rapidjson」が当に爆速なのか試してみた。 C言語から使えるJSONパーサ、jansson がとても直感的で良い C++ で STL フレンドリに扱えるJSONパーサ「json.hpp」 これまで C++ から扱

    Big Sky :: コメントも扱える高機能な C++ 向け JSON パーサ「jsoncpp」
    mattn
    mattn 2021/03/03
    書いた。
  • Big Sky :: Go に go:embed が入った。

    Go 言語はシングルバイナリをウリにしたプログラミング言語です。バイナリファイルを1つポンと scp で転送すれば動くのでとても便利です。シングルバイナリとなると当然、画像や HTML といったアセットをバイナリに埋め込みたくなります。 Go 言語ではこれまで go-assets や go-bindata、statik というツールを使う事でファイルのコンテンツをバイナリ化し、変数からアクセスする様にしてきました。 しかしそれらには色々な流儀や OS 間でのまばらな動作など、ユーザにとって納得のいかない物がありました。昨日、Go 言語ではオフィシャルとしてこのファイル埋め込みをサポートする様になりました。Go 1.16 から使える様になります。 cmd/go: add //go:embed support · golang/go@25d28ec · GitHub +3 −3 src/cmd

    Big Sky :: Go に go:embed が入った。
    mattn
    mattn 2020/10/30
    書いた。
  • Big Sky :: Zenn で Twitter bot 作成入門を書いた。

    Zenn で「シェルスクリプトで作る Twitter bot 作成入門」というを書きました。 シェルスクリプトで作る Twitter bot 作成入門 | Zenn 筆者が開発している幾らかのコマンドラインプログラムとシェルスクリプトを使って簡単に Twitter bot を作る方法をご紹介します。 ... https://zenn.dev/mattn/books/bb181f3f4731920f29a5 昨今ではプログラマは数多くの技術やデータ、サーバを相手にしなければならない事が増えてきました。その為、少ない人的リソースを有効に活用する為にシステムの自動化を行う事もあります。外部のシステムからデータを取得し、加工、また別のシステムへデータを送信する、こういった処理の流れは実務だけで学ぶのは難しい事もあります。自ら手を動かし、失敗した経験を得て知識を蓄えます。 Twitter bot

    Big Sky :: Zenn で Twitter bot 作成入門を書いた。
    mattn
    mattn 2020/09/30
  • Big Sky :: プログラマーのための新しい情報共有コミュニティ Zenn で本を書いてみた。

    先日、vim-jp の Slackzenn という情報コミュニティを知りました。 Zennプログラマーのための情報共有コミュニティ Publish your book Zennではウェブ上で読めるを投稿することができます。は無料公開も、有料販売もできます。 あなたが得意な技術やアイデアを、ぜひ1冊のにまとめてみましょう。 ... https://zenn.dev Qiita と Note を足して2で割った様なサービスで、Markdown で記事やを執筆する事ができます。有料の記事やを執筆する事もできます。また有料でなくても記事を読んでサポートしたいと思う方がいれば寄付という形で還元頂ける仕組みがあります。 先日、ActixWeb という Rust のウェブフレームワークにパッチを送った話を zenn に投稿した所、1000 円のサポートを受けました。モチベーションもあ

    Big Sky :: プログラマーのための新しい情報共有コミュニティ Zenn で本を書いてみた。
    mattn
    mattn 2020/09/22
  • Big Sky :: os/signal に NotifyContext が入った。

    Go のアプリケーションを作っていると、シグナルの受信に伴い処理を中断したり再起動する処理を実装する事が多い。これまでは signal.Notify でシグナルをキャッチし、別途 context.WithCancel で作成したコンテキストを自ら cancel する処理を書かなければならなかった。Go の tip に入ったコミットにより、これが幾分改善される様になった。 package main import ( "context" "fmt" "os" "os/signal" "time" ) func main() { ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt) defer stop() select { case <-time.After(time.Second): fmt.Println

    Big Sky :: os/signal に NotifyContext が入った。
    mattn
    mattn 2020/09/16
    書いた。
  • Big Sky :: Windows ユーザは cmd.exe で生きるべき 2020年版

    はじめに 2016年にこんな記事を書きました。 Big Sky :: Windows ユーザは cmd.exe で生きるべき。 [D] Windowsはターミナルがダメだから使えないってのは過去の話? 基的にはいい感じに見えますが、いくつか問題は発覚してます。 http://blog.drikin.com/2015/01/w... https://mattn.kaoriya.net/software/why-i-use-cmd-on-windows.htm この記事は日常からコマンドプロンプトを使うユーザに Windows で生き抜く為の僕なりの方法を教授したつもりです。最近は PowerShell を使われる方も多いと思いますが、僕はどうしても PowerShell が好きになれず、未だにコマンドプロンプトで生き続けています。 あれから4年 記事の反響は結構大きく、いろいろなコメントも

    Big Sky :: Windows ユーザは cmd.exe で生きるべき 2020年版
    mattn
    mattn 2020/07/20
    書いた。
  • Big Sky :: 画像に再生マークつけるだけのコマンド作った。

    元ネタ 画像に再生マークつけるだけのツール作った。 https://t.co/13epnr450j pic.twitter.com/NCZujPxEZ7 — ryomatsu (@ryomatsu) June 18, 2020 作ったもの。 mattn/fakemovie · GitHub https://github.com/mattn/fakemovie Go のパッケージにしてあるので、Go の HTTP サーバからサーブする画像全てに再生ボタンを付ける様なミドルウェアを作る事もできてとても便利です。一応、オマケとしてコマンドを用意してあります。 $ fakemovie -r 40 input.png こんな感じに使えるのでご利用下さい。

    Big Sky :: 画像に再生マークつけるだけのコマンド作った。
    mattn
    mattn 2020/06/19
    書いた。