2020/09/30


Zenn で「シェルスクリプトで作る Twitter bot 作成入門」という本を書きました。

シェルスクリプトで作る Twitter bot 作成入門 | Zenn

筆者が開発している幾らかのコマンドラインプログラムとシェルスクリプトを使って簡単に Twitter bot を作る方法をご紹介します。 ...

https://zenn.dev/mattn/books/bb181f3f4731920f29a5

昨今ではプログラマは数多くの技術やデータ、サーバを相手にしなければならない事が増えてきました。その為、少ない人的リソースを有効に活用する為にシステムの自動化を行う事もあります。外部のシステムからデータを取得し、加工、また別のシステムへデータを送信する、こういった処理の流れは実務だけで学ぶのは難しい事もあります。自ら手を動かし、失敗した経験を得て知識を蓄えます。

Twitter bot は一見、単なるお遊びに見えてしまいますが、こういった処理を楽しく学べる良い題材だと思っています。本書ではシェルスクリプトと幾らかのコマンドを組み合わせて、Twitter bot を作成します。sed や grep といった UNIX では当たり前の様に使うコマンドを、どう組み合わせれば良いかも学んで頂けると思います。

Posted at by



2020/09/22


先日、vim-jp の Slack で zenn という情報コミュニティを知りました。

Zenn|プログラマーのための情報共有コミュニティ

Publish your book Zennではウェブ上で読める本を投稿することができます。本は無料公開も、有料販売もできます。 あなたが得意な技術やアイデアを、ぜひ1冊の本にまとめてみましょう。 本...

https://zenn.dev

Qiita と Note を足して2で割った様なサービスで、Markdown で記事や本を執筆する事ができます。有料の記事や本を執筆する事もできます。また有料でなくても記事を読んでサポートしたいと思う方がいれば寄付という形で還元頂ける仕組みがあります。

先日、ActixWeb という Rust のウェブフレームワークにパッチを送った話を zenn に投稿した所、1000 円のサポートを受けました。モチベーションもあがって良いですね。

ActixWeb にパッチを送った話 | Zenn

はじめに 先日、ActixWeb にパッチを送りました。とは言っても本体ではなく examples の中に格納されている todo アプリの話。 https://github.com/actix/ex...

https://zenn.dev/mattn/articles/d1662e41311cba9f10cf

Note はアカウントは持ってはもっていつつも一度も書いた事がなかったのですが、zenn は CLI も用意されていてプログラマが技術情報を公開してサポートを受けるには良いプラットフォームだと感じました。試しに zenn で有料の本を書いてみました。少し実験してみたいという気持ちもありました。

Go 言語にやってくる Generics は我々に何をもたらすのか | Zenn

2021 年リリース予定の Go 1.17 に、多くの皆さんが待ち望んでいた Generics が導入される予定です。Go が Generics を採用したプロセス、C++ や Java の Gene...

https://zenn.dev/mattn/books/4c7de85ec42cb44cf285

価格設定は超適当に 1000 字 50 円と考えました。(13000~14000字くらいなので600円)

2020年9月22日の午前3時に公開したので、およそ9時間くらいですが 22000 円程度の売り上げがあります。何か本を書いてみたいけど技術書展に出す勇気は無い、または時間がない、でも皆に読んで欲しい、そういった方々でも簡単に出版できる zenn はとても良いサービスだと思いました。ウェブ上のエディタに少し難がありますが、それはいずれ修正されると思います。またローカルでテキストエディタを使って編集する方法も提供されています。本を出版する際のセクションの分け方ははじめ少し戸惑いますが、しばらく触っていれば慣れると思います。またどこを無料にしてどこを有料にするかの設定も可能なので、チラ見せも出来る様になっています。皆さんもフォルダの奥に眠っている素晴らしい駄文を本にしてみては如何でしょうか。

Posted at by



2020/09/16


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("done")
    case <-ctx.Done():
        stop()
        fmt.Println("canceled")
    }
}

このコードを実行すると、1秒経過すると done が、途中で CTRL-C をタイプすると canceled が表示される。一見、利用用途が少ない様に見えるが以下の様に goroutine を複数起動し、signal で一括終了する時には便利。

package main

import (
    "context"
    "fmt"
    "os"
    "os/signal"
    "sync"
)

func blocking(ctx context.Context, wg *sync.WaitGroup) {
    defer wg.Done()
    fmt.Println("worker started")
    <-ctx.Done()
    fmt.Println("worker canceled")
}

func main() {
    ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
    defer stop()

    var wg sync.WaitGroup
    wg.Add(3)
    go blocking(ctx, &wg)
    go blocking(ctx, &wg)
    go blocking(ctx, &wg)

    wg.Wait()
}
改訂2版 みんなのGo言語 改訂2版 みんなのGo言語
松木 雅幸, mattn, 藤原 俊一郎, 中島 大一, 上田 拓也, 牧 大輔, 鈴木 健太
技術評論社 Kindle版 / ¥2,278 (2019年08月01日)
 
発送可能時間:

Posted at by