タグ

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

  • Big Sky :: C++ で flask ライクなウェブサーバ「clask」書いた。

    今まで C++ でちょっとしたウェブアプリを作る際は crow という micro-framework を使ってきました。 GitHub - ipkn/crow: Crow is very fast and easy to use C++ micro web framework (inspired by Python Flask) How to Build If you just want to use crow, copy amalgamate/crow_all.h and include it. Requirements C... https://github.com/ipkn/crow ヘッダオンリーで使えてとても便利だったのですが、boost に依存している点があまり好きじゃなかったのと、最近 crow の開発が止まり最新の boost でビルド出来なくなってしまったので、自分で作

    Big Sky :: C++ で flask ライクなウェブサーバ「clask」書いた。
    progrhyme
    progrhyme 2020/06/17
  • 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 の実体を引数で(なるべく)渡せない様にするテクニック
    progrhyme
    progrhyme 2020/03/03
  • Big Sky :: Go 言語で変数のシャドウイングを避けたいなら shadow を使おう。

    var hoge *Hoge if condition != nil { hoge, err := https://t.co/3dOQ15DCmc(ctx, hoge_key) if err != nil { return nil, err } fmt.Printf("%v", *hoge) } else { hoge = nil } こんな感じのコードで死んでたんですが、うっかりhogeがnil担っちゃうの防ぐにはどうしたら・・・(文字数 — chidakiyo (@chidakiyo) February 26, 2020 こういった場合に便利なのがオフィシャルが提供している解析コマンド shadow です。(相変わらずググらび...) インストールは以下を実行します。 $ go get golang.org/x/tools/go/analysis/passes/shadow/cmd/s

    Big Sky :: Go 言語で変数のシャドウイングを避けたいなら shadow を使おう。
    progrhyme
    progrhyme 2020/03/03
  • Big Sky :: zsh で PATH に相対パスを含んだ場合にコマンドが補完できないのは意図的かどうか。

    vim-jp の Slack で「zsh の PATH 環境変数に相対パスを含んでいる場合、補完ができないけど意図的か」という話題が出たので調べてみた。 補完できない様にしているのはこの変更 39104: do not hash relative paths in findcmd() · zsh-users/zsh@b312abc https://github.com/zsh-users/zsh/commit/b312abc93b3b8eae8feb4a9884b22f519a137c7f 結構古い変更。この変更が行われた理由を追ってみた所、メーリングリストでこの会話が見つかった。 Running 'type' causes false positive hashed command completion Zsh Mailing List Archive Messages sorted b

    Big Sky :: zsh で PATH に相対パスを含んだ場合にコマンドが補完できないのは意図的かどうか。
    progrhyme
    progrhyme 2020/02/12
  • Big Sky :: Vim で Go 言語を書くために行った引越し作業 2020年度版

    はじめに この文章は、普段から Vim を使い、仕事でも趣味でも Go 言語を書いている僕が、最近どの様な環境で書いているかを説明した文章です。ベストプラクティスではありません。 vim-go と僕 元々、Go 言語はリポジトリの misc/vimVimGo 言語を書くための syntax やコマンドを持っていました。今でもそれらは Google のリポジトリに置かれています。ミュージアム的な物なので、実用的ではないと思います。 GitHub - google/vim-ft-go A rudimentary Go filetype plugin. Provides syntax files and basic settings for go files. This is a f... https://github.com/google/vim-ft-go これを Fatih A

    Big Sky :: Vim で Go 言語を書くために行った引越し作業 2020年度版
    progrhyme
    progrhyme 2020/01/06
  • Big Sky :: ぼくがかんがえたさいきょうの Vim のこうせい 2019年 年末版

    はじめに 以下の記事では、僕の Vim の構成について記述しています。来はこの記事で vim-lsp の導入方法と私的 Go 編集環境について書こうと思っていましたが、あまりにも長くなってしまったので別途書く事にしました。僕は WindowsLinux しか使わないので、皆さんの環境で使うとうまく動かない可能性があります。また僕は最新の Vim 8 しか使いません。古めの Vim を使いません。neovim も使いません。それらをお使いの方はうまく動かない可能性があります。ご了承下さい。なお設定ファイルの配置スタイルは完全に僕個人の趣味ですので必ずしも僕の構成が正しい訳ではありません。 ぼくのかんがえたさいきょうの Vim こうせい Vim の設定は vimrc に記述するのですが、その設定方法には「汚くさせない」ための工夫が必要だと思っています。以下は僕が行っている「vimrc

    Big Sky :: ぼくがかんがえたさいきょうの Vim のこうせい 2019年 年末版
    progrhyme
    progrhyme 2019/12/31
  • Big Sky :: Microsoft Word を Markdown に変換するコマンド「docx2md」を作った。

    8月に Google Developers Expert となり、新米の様にオロオロとしています。過去の GDE ミーティングの議事録を見せて頂いているのですが Google Document に保存されており、Go だけでなく他のカテゴリの GDE に関する物も含めると全てに目を通すのはなかなか骨が折れます。技術者なので問題は技術で解決すべく、これらの資料を grep 検索できる様にしました。 Google Document はエクスポートすると Microsoft Word の形式となるので、Microsoft Word から Markdown に変換するプログラムを書けばテキスト検索もできるし、なんならそのまま GitHub に貼り付けてしまう事もできます。 GitHub - mattn/docx2md docx2md Convert Microsoft Word Document

    Big Sky :: Microsoft Word を Markdown に変換するコマンド「docx2md」を作った。
    progrhyme
    progrhyme 2019/10/10
  • Big Sky :: C++ な WebServer 実装 crow と TensorFlow Lite を使って Object Detection の API サーバを書いた。

    自宅で動かしている物体認識サーバは TensorFlow を使って Go で書かれていたのだけど、CPU 負荷が高いので以前 go-tflite で書き換えた。その後 Raspberry Pi Zero W でそのまま使えるだろうと思っていたら結構リソースが厳しかったので C++ なウェブサーバの実装である crow と TensorFlow Lite を使って書き換える事にした。 GitHub - ipkn/crow: Crow is very fast and easy to use C++ micro web framework (inspired by Python Flask) How to Build If you just want to use crow, copy amalgamate/crow_all.h and include it. Requirements C..

    Big Sky :: C++ な WebServer 実装 crow と TensorFlow Lite を使って Object Detection の API サーバを書いた。
    progrhyme
    progrhyme 2019/07/02
  • Big Sky :: Go で型がインタフェースを実装している事を保証するには

    « C++ な WebServer 実装 crow と TensorFlow Lite を使って Object Detection の API サーバを書いた。 | Main | Go で大文字小文字無視の文字列比較ベンチマーク » Go は Ducktype をサポートしたプログラミング言語です。interface で宣言されたメソッドを型に強制したり問い合わせたり出来ます。メソッドの実装を保証する為に以下の様に struct に interface を embedded する事も出来ます。 package main type I interface { doSomething() } type foo struct { I } func (f *foo) doSomething() { } func callSomething(i I) { i.doSomething() } func

    Big Sky :: Go で型がインタフェースを実装している事を保証するには
    progrhyme
    progrhyme 2019/07/02
  • Big Sky :: 改訂2版 みんなのGo言語

    2016年、普段から現場でGoを使っている名立たるGoプログラマの皆さんと一緒に「みんなのGo言語」という書籍を執筆させて頂きました。 「みんなのGo言語」は他のリファレンスとは異なり、Go言語の最新事情をお伝えする事に主眼を置いて書きました。 インストール方法や使い方、モダンなテストの書き方、ツールの使い方等も執筆時点での最新情報を書かせて頂きました。 これはとても意義がある事だった感じています。 しかしこれは逆に、時間が経つにつれ執筆した内容が次第に古くなってしまうというリスクを伴います。幾つかの内容は、3年経った現在に合わなくなっている物も出てきました。紹介したツールの中には開発が止まってしまっている物もあれば、執筆時点で制限事項と記したけれども現在では解消している物も出てきています。そればかりではなく新しく追加されたコマンドや機能、新しい制限事項もあります。特に Go Modul

    Big Sky :: 改訂2版 みんなのGo言語
    progrhyme
    progrhyme 2019/06/18
    素晴らしい
  • Big Sky :: 1つの横着から隠しファイルが生まれた瞬間

    この文章は Rob Pike 氏が Google+ に投稿した内容の意訳です。現在は web archive からしか閲覧できません。面白かったので訳してみました。 ショートカットからのレッスン ずっと昔の話。Unixファイルシステムで移動を簡単にする為に . や .. を追加する設計がほぼ完成していた頃。確かではないけれどバージョン2への書き換え中、つまりファイルシステムが階層的になった頃(初期の段階では構造が全く違っていた)に . と .. は入った。ls をタイプするとドット付きのファイルが現れたので、Ken か Dennis のどちらかが簡単なテストプログラムを追加しました。当時はアセンブラでしたが問題のコードは次のようなものと同等でした。 if (name[0] == '.') continue; この1文は、来あるべき以下の1文よりも多少短かった。 if (strcmp(na

    Big Sky :: 1つの横着から隠しファイルが生まれた瞬間
    progrhyme
    progrhyme 2019/04/20
    なるほどねー
  • Big Sky :: TensorFlow Lite の Go binding を書いた。

    « Lint ツールを Language Server に対応させるコマンド efm-langserver 作った。 | Main | MRuby の TensorFlow Lite バインディングを書いた。 » Google launches TensorFlow Lite 1.0 for mobile and embedded devices | VentureBeat Google today introduced TensorFlow Lite 1.0 , its framework for developers deploying AI models on mo... https://venturebeat.com/2019/03/06/google-launches-tensorflow-lite-1-0-for-mobile-and-embeddable-devices/ T

    Big Sky :: TensorFlow Lite の Go binding を書いた。
    progrhyme
    progrhyme 2019/03/07
  • Big Sky :: Lint ツールを Language Server に対応させるコマンド efm-langserver 作った。

    現在は設定ファイルを読み込む仕様に変更しました。詳細はリポジトリの README.md を参照下さい。 Language Server はとても便利なので最近ではコーディングの時は常に Language Server を有効にしているけど、全く要望が無い訳ではないです。 好みの Lint でコードをチェックしたい 特定言語の Language Server が無い そもそも編集中のファイルがソースコードではない 例えば Vim script には現状、Language Server がありません。これは言語の特性上、パースし辛らかったり、型情報が全くないので補完候補を作り出せない等の理由もあります。でも補完よりもまず Language Server の Diagnostic が欲しいと思う訳です。 そこで、どんな言語であろうとも Lint ツールが grep と同様の形式で結果を出力してく

    Big Sky :: Lint ツールを Language Server に対応させるコマンド efm-langserver 作った。
    progrhyme
    progrhyme 2019/02/06
  • Big Sky :: clangd を使う時に便利なコマンド compiledb

    先日、Go Advent Calendar の記事の中で Language Server について書きました。 Big Sky :: gocode やめます(そして Language Server へ) はじめに まず始めに言っておかなければなりません。 gocode 今まで当にありがとう この記事は、Go 言語歴10年になる僕がこれまで愛用してきた Go 言語のコード補完ソフトウェア gocode... https://mattn.kaoriya.net/software/lang/go/20181217000056.htm 僕は Vim を使っていて、幾らかの言語の開発環境は vim-lsp に移行できたのですが C/C++ を扱うケースだけ vim-lsp に移行できず vim-clang を使ってきました。C/C++ は clangd という Language Server を使

    Big Sky :: clangd を使う時に便利なコマンド compiledb
    progrhyme
    progrhyme 2018/12/26
    C/C++でvim-lspを使うため
  • 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 へ)
    progrhyme
    progrhyme 2018/12/17
    一時はそんなことになってたのか。何かに依存したソフトの儚さよ
  • Big Sky :: VimConf 2018 に行ってきた。

    僕のこれまで人生の中で、2日間まるまる Vim の事を考えるなんて事なんて無かったし、今思い返してもとても刺激的な日でした。 まず始めに、VimConf というイベントを産み出してくれた ujihisa さん、kaoriya さん、運営に関わった皆さん、そしてスポンサー頂いた企業の皆様、個人スポンサーをして頂いた皆さん、当にありがとうございました。 中には参加できないにも関わらず VimConf が上手く行く事を願って個人スポンサーになってくれた方も沢山いました。当にありがとうございます。 今回 Vim の作者 Bram Moolenaar 氏を VimConf 2018 に呼べたのは皆さんのお力あってこそだと思っています。 これまで VimConf はどちらかというと、こじんまりしたイメージのイベントでしたが、「Bram Moolenaar 氏を呼ぶに相応しい国際会議として開催すべき

    Big Sky :: VimConf 2018 に行ってきた。
    progrhyme
    progrhyme 2018/11/28
    いい話。
  • Big Sky :: Let's Encrypt を簡単操作できる CLI、Lego が MyDNS に対応した。

    Let's Encrypt という無料の SSL を提供しているサービスがあり、これを簡単に操作できる CLI として Lego というツールがあります。以前から Lego に MyDNS をサポートして貰おうとプルリクエスト を送っていたのですが、ようやく日マージされました。 環境変数 MYDNSJP_MASTER_ID と MYDNSJP_PASSWORD を設定した上で以下の様に実行すると登録されます。 $ lego -m your@email.com -a -x http-01 -x tls-alpn-01 --dns mydnsjp -s https://acme-staging-v02.api.letsencrypt.org/directory -d xxx.mydns.jp -d *.xxx.mydns.jp run また更新したい場合は以下の様に実行して下さい。 $ le

    Big Sky :: Let's Encrypt を簡単操作できる CLI、Lego が MyDNS に対応した。
    progrhyme
    progrhyme 2018/11/05
    ドメインも証明書も無料で
  • Big Sky :: 書評「Go言語による並行処理」

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

    Big Sky :: 書評「Go言語による並行処理」
    progrhyme
    progrhyme 2018/10/22
    興味深い
  • 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 のススメ
    progrhyme
    progrhyme 2018/08/25
  • Big Sky :: Software Design 2018年7月号「Vim 絶対主義」の執筆に参加しました。

    いつもは Software Design で「Vim の細道」という連載記事を担当していますが、7月号はお休みさせて頂き Vim 特集「Vim 絶対主義」の執筆に参加させて頂きました。 テキストエディタ「Vim」は開発環境の選択肢の1つとして、世界中のエンジニアに選ばれ続けています。 ランキングによってはIDE(統合開発環境)にも引けを取らないほどのユーザ数の多さを示していますが、一体Vimの何が、これほどまで人々を惹きつけているのでしょうか。 特集ではVimを触ったことがないという入門者向けに、vi/Vim歴史の解説から環境ごとのインストール、基操作、設定方法、プラグインの入れ方まで手厚く解説しています。 手元の環境にVimを入れて実際に動かすことで、「なぜVimなのか」の答えがわかるかもしれません。 Vim歴史を紐解き、なぜこんな操作方法になっているのか、なぜそれが良いのかと

    Big Sky :: Software Design 2018年7月号「Vim 絶対主義」の執筆に参加しました。
    progrhyme
    progrhyme 2018/06/08
    力強い