タグ

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

  • 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 言語プログラミングエッセンスという本を書きました。
  • 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年度版
  • Big Sky :: Go言語でWebAppの運用に必要なN個のこと

    « Software Design 2013年10月号「生産性を向上させるVimのTips」を書かせて頂きました。 | Main | Go言語でインタフェースの変更がそれ程問題にならない理由 » golang - Go言語でWebAppの開発に必要なN個のこと - Qiita [キータ] http://golang.org/cmd/go/#hdr-Download_and_install_packages_and_dependencies アプリケーションサーバ 標準パッケージの ne... http://qiita.com/tenntenn/items/b8b27e32c28f7569f41a tenntenn さんに開発版を書いて貰ったので運用編を書こうかと思った。 なお、以下のプロダクトは全て golang で書かれているが、rubyperl のアプリケーションを運用する際にも

    Big Sky :: Go言語でWebAppの運用に必要なN個のこと
  • 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 の設定
  • Big Sky :: ぼくがかんがえたさいきょうの Vim のこうせい 2019年 年末版

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

    Big Sky :: ぼくがかんがえたさいきょうの Vim のこうせい 2019年 年末版
  • Big Sky :: Go 言語の Language Server「gopls」が completeUnimported に対応した。

    先日、Gopls の v0.2.0 がリリースされました。 v0.2.0 https://github.com/golang/go/issues/33030#issuecomment-549629508 リリースノートに書かれていますが、このバージョンから completeUnimported に対応しています。fmt が import されていなくても fmt.Println が補完できる様になります。ただしデフォルトでは無効になっています。Visual Studio Code であれば以下を settings.json に含める事で使える様になります。 "gopls": { "completeUnimported": true }, また vim-lsp をお使いであれば以下の様に設定する事で使える様になります。 if executable('gopls') augroup LspGo

    Big Sky :: Go 言語の Language Server「gopls」が completeUnimported に対応した。
  • 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」を作った。
  • 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 へ)
  • Big Sky :: Go 言語の非同期パターン

    Gogoroutine という非同期の仕組みを提供していますが、使い方次第では色々なパターンが実装できる為、初めて goroutine を見た人はどの様な物が正解なのか分からない事があります。以前、このブログでも紹介した事がありますが Go の非同期の仕組みは一見単純な様に見えて実はとても奥深いのです。 Big Sky :: golang の channel を使ったテクニックあれこれ golang の channel は他の言語に見ない独特のパラダイムを開発者に提供します。 単純にスレッド間でメッセージングをするだけでもC言語で書けばそこそこの量になったり、慣れていない人であればど... https://mattn.kaoriya.net/software/lang/go/20160706165757.htm 2012 年に Rob Pike 氏が Google I/O で「Go

    Big Sky :: Go 言語の非同期パターン
  • Big Sky :: gRPC のサービスが簡単に作れるライブラリ「lile」

    gRPC は型の強い RPC を色々な言語を使って実装できる仕組みとライブラリです。 Big Sky :: Protocol Buffers を利用した RPCgRPCgolang から試してみた。 grpc/grpc · GitHub gRPC - An RPC library and framework https://github.com/grpc/grpc gRPCGoogle が開... https://mattn.kaoriya.net/software/lang/go/20150227144125.htm とても便利なのですが幾分手数が多いのが難点で、ちょっとしたサービスを gRPC で実装したいと思っていてもそう簡単に作る事が出来ませんでした。 ところが今回ご紹介する lile を使うと、とても簡単に gRPC を使った golang の実装を作れてしまいます

    Big Sky :: gRPC のサービスが簡単に作れるライブラリ「lile」
  • Big Sky :: net/http でレスポンスの内容を確認したいなら io.TeeReader を使おう

    « Golang で物理ファイルの操作に path/filepath でなく path を使うと爆発します。 | Main | VimConf2017 に参加してきた。 » printf デバッグは便利だ。技術の後退と言われようと printf でないと解決できない事はまだまだたくさんあります。 今日は net/http でクライアントが得たレスポンスの JSON を確認したいといった場合に、どうデバッグしたらいいかを書いてみたいと思う。 Go のインタフェースは大よそ io.Reader もしくは io.Writer を使う様に設計されている。こうする事でプログラムがメモリを一度に沢山確保してしまわない様にしています。 package main import ( "encoding/json" "fmt" "log" "net/http" ) type Foo struct { ID  

    Big Sky :: net/http でレスポンスの内容を確認したいなら io.TeeReader を使おう
  • 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 :: sudo コマンド書いた。

    Windows で hosts ファイル(C:\Windows\System32\drivers\etc\hosts) を編集するには管理者権限が必要です。またコマンドラインから IP アドレスを変更するのにも管理者権限が必要です。管理者権限で hosts ファイルを編集するにはメモ帳を管理者権限で起動する必要があります。管理者権限でメモ帳を起動する為にはメニューから「メモ帳」を出し、右クリックして「管理者として実行」を選ぶ必要があります。そして実行したメモ帳のメニューから「開く」でファイルを選択します。管理者として開かないのであれば hosts ファイルを右クリックして「送る」等に登録したエディタを単に選べば済む話なのに、随分と手間ですね。 UNIX だと $ sudo vi /etc/hosts とだけタイプすれば良いのにこの手数の多さはちょっとゲンナリします。特にマウスに手を伸ばした

    Big Sky :: sudo コマンド書いた。
  • Big Sky :: ログイン認証をマイクロサービス化する「loginsrv」

    認証を持たないウェブアプリケーションをいざ認証に対応させようと思うと案外面倒でモチベーションを無くしてしまうなんて事もよく起きうる話です。特に社内向けのアプリケーションを作っていたら番で使う事になってしまって、なんて話は良くある話です。開発でDB を見るのはちょっと...。でも既存のコードをゴリゴリと触りたくない。そんな場合にログイン認証部分だけマイクロサービス化できると気持ちも幾分和らぎます。今日はそんなちょっと便利なサーバ「loginsrv」を紹介したいと思います。 GitHub - tarent/loginsrv: JWT login microservice with plugable backends such as OAuth2, Github, htpasswd, osiam loginsrv is a standalone minimalistic login se

    Big Sky :: ログイン認証をマイクロサービス化する「loginsrv」
  • Big Sky :: golang でメモ専用コマンド「memo」作った。

    « Ruby の a = a + 1 はなぜ undefined method '+' for nil:NilClass なのか | Main | Ruby の Array#<< は Array#push よりも速いか » 僕は日々 memolist.vim という Vim plugin を使い、仕事で思いついた疑問点や会話の一部をメモ取りする様にしています。相手と会話している最中に「あ、ここ大事だ」と思ったら vim を起動して :MemoNew してメモを編集していました。もちろん Vim ですから起動は抜群に速くてとてもご機嫌良く動くのですが、どうしてもこれをシェルから扱いたいという要求に負けてささっと作ってみました。 GitHub - mattn/memo: Memo Life For You README.md memo Memo Life For You Usage NAME:

    Big Sky :: golang でメモ専用コマンド「memo」作った。
  • 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言語にも書いた気がするのでそういうの興味ある人は買って下さい。 みんなのGo言語【現場で使える実践テクニック】 松木雅幸, mattn, 藤原俊一郎, 中島大一, 牧 大輔, 鈴木健太, 稲葉貴洋 技術評論社 大型 / ¥80 (2016年09月09日) 発送可能時間: バイナリに assets を埋め込む際には

    Big Sky :: Re: Go でシングルバイナリな Web アプリを開発しているときに webpack --watch をうまいところやる
  • Big Sky :: Matz の「言語のしくみ」を読んだ。

    Twitter で「言語のしくみ」読みたいなって呟いたら Matz 人から「献しましょうか」とメンション頂いて即答でお願いしました。ありがとうございます。 ひさびさ紙のを通勤電車の中で立ちながら読んだので手がだるくなりました。なんだか懐かしい感じがしました。 さてこのですが、一言で言うとこんなです。 Ruby のパパこと Matz が雑誌の連載に追われながら試行錯誤して作ったプログラミング言語「Streem」を解説する 聞こえが悪かったらすみません。言いたいのはこの「試行錯誤」がとても良いエッセンスになっている点なのです。実際にはその連載記事をまとめた物に対して、この当時はこの様に考えていたが後になってみると実は良く無かったといった振り返り「タイムマシンコラム」で構成されています。 この連載が1つのに纏められた事でプログラミング言語設計者の葛藤が非常に良く表されているな、そう

    Big Sky :: Matz の「言語のしくみ」を読んだ。
    supermomonga
    supermomonga 2017/01/07
    よさそう
  • Big Sky :: コマンドラインアプリで OAuth2 認証を使う際に使えるテクニック

    OAuth2 でレスポンスタイプがコードもしくはトークンの場合、ブラウザで認証を行ってコードやトークンを自前サーバで受け取る事になる。モバイルアプリだと組み込みブラウザが前提になっておりリダイレクトの最終 URL からアクセスコードやトークンを得る。ただコマンドラインアプリの場合、認証の為に起動したブラウザの最終 URL を得る方法はない。また1コマンドラインアプリケーションの為にドメイン付きのコールバックサーバを用意するのも面倒だし、作ったサーバをユーザに信用して貰う必要がある。あとそもそも外部のサーバで受け取ったトークンをどうやってコマンドラインアプリに渡すかという問題がある。 そこで使うのがローカルサーバを立てる方法。認証後のコールバック先をコマンドラインアプリから起動したローカルサーバにし、そこにリダイレクトさせてアクセストークンを貰い保存する。 今日はこれが伝わり易い用に Mic

    Big Sky :: コマンドラインアプリで OAuth2 認証を使う際に使えるテクニック
  • Big Sky :: golang で型付きで DLL を呼び出す方法

    golang dll で int の参照、どうやってコールするんか悩んだ var usb_no int = 0 ret, _, _ := find_usb.Call(uintptr(unsafe.Pointer(&usb_no))) — mik o (@oki_mik) September 26, 2016 golang で簡単に DLL を呼び出す方法は syscall.NewLazyDLL を使う事です。 package main var ( times = 0 dll   = syscall.NewLazyDLL("mydll.dll") proc  = dll.NewProc("MyFunc") ) func main() { i := int32(123) proc.Call(uintptr(unsafe.Pointer(&i))) } ですが Call の引数は全て uintp

    Big Sky :: golang で型付きで DLL を呼び出す方法
  • 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 の最高の端末環境を教えてやるからちょっと来い。