「Rustで始めるネットワークプログラミング」を出版しました。teru_0x01.logスマートフォン用の表示で見るteru_0x01.log技術メモと雑記2019-06-12「Rustで始めるネットワークプログラミング」を出版しました。おくれ書籍をkindleとBOOTHで販売開始したので、内容の紹介と出版について書き連ねていきます。出版したもの「Rustで始めるネットワークプログラミング」をkindle(https://t.co/Mf98l0YgKS)とBOOTH(https://t.co/ilHIt1UEbi)で販売開始しました。全101ページ/5章構成で、価格は¥500です。無料サンプル(https://t.co/NilMo1QAhL)もあります。Kindle版この商品を含むブログを見る技術書典6にサークル参加した際、私が担当した部分を大幅に加筆修正したものを独立した書籍として発行しました。差分としては5章を追加+1~4章を魔改造(ソースコードの改善、説明文及び図の追加)と行った具合です。何かを理解する際は実装するのが1番だと考えているので、各章ごとに動くものを作成し、それについて解説しています。サンプル1、2章を収録したサンプルを無料で配布しているので購入前に確認するのが良いと思います。ネットワークプログラミングに利用できるライブラリ等を知りたい人セキュリティに興味のある人となっています。入門編」に書いてある内容が大体わかるくらいで十分だと思います。手元に置いておくと安心です。タイトル的に入門書っぽいのですがTCP/IPやRust、Linuxに関する基本的な知識は前提になっています。書籍中ではRustの文法について解説しているところはほとんどありません(あっても脚注で触れる程度)。Rustの文法に関する本は自転車本などの良書がたくさんあるのでそちらをご覧ください。単行本(ソフトカバー)この商品を含むブログを見る各章について5章構成です。各章のプログラムは独立なのでどこから読んでもOKですが、多少前の章の知識を使って解説する箇所があります。その場合は脚注でポインタを示しています。内容は徐々に難しくなるので、筆者的には1章から読み進めるのがいいかと思います。1章「ようこそソケット通信の世界へ」とりあえずTCP/UDPでソケット通信してEchoサーバを作る章です。簡単に思えて結構大事な章で、TCPを使う場合なぜスレッドを生成するのか、UDPだとなぜ必要ないのかという部分は後の4章にも繋がっていきます。章の終わりにやたらと長いコラムがあります。「UDPでサイズの大きなデータを送信しようとするとどうなるのか」を実験する事でTCPとUDPの特徴の違いについて言及します。2章「通信を監視する」パケットキャプチャを作る章です。生ソケットを使う事でデータリンク層までいじくりまわし、パケットをレイヤごとに分解して中身を覗きます。IPv6に対応しているので世界のホスト台数が340澗(3.4×1038)くらいになっても安心して利用できます。3章「手づくりパケットでポートスキャン」ポートスキャンを作る章です。connect()型のポートスキャンだと面白くないのでTCPのヘッダをいじる事で高度なスキャン手法を実装します。2章ではパケットを分解しましたがこの章ではパケットの構築、送信を行います。ポートスキャンは他人のホストに行ってはいけません。本書の読者から神奈川県警シリーズの新作が出ないことを願っています。4章「ノンブロッキングなWEBサーバ」シングルスレッド、イベントループ、ノンブロッキングI/Oなどの特性をもつwebサーバを作成します。これらの単語はNginxやNode.jsでよく耳にしますが、それらを実際に作成する事で理解します。サーバが返すHTMLをブラウザで確認できた時の感動というのは言葉にできないものがあります。web版執筆中に技術書典頒布版のコードだとバグる事が判明し、部屋の中で1人「うぎゃあああ」のような奇声を上げるなど私も苦戦を強いられた章です。(技術書典版でのバグ箇所については書籍中の最後に記述があります。)5章「RFCから作るDHCPサーバ」web版で追加された章です。章題からして不穏ですがDHCPサーバをRFCから実装に起こします。この章を読むと必要以上にDHCPについて詳しくなれますが、真の目的は「RFCに対する心の壁を取っ払う事」です。RFCって英語だし専門用語ばっかりだしなんか怖いじゃないですか。適度にボリュームのあるRFCから実際に動くものを作ってやれば、「なんだ、案外読めるじゃないか」という気持ちになると思ったのです。最終的には自宅LANのPCやスマホなどにIPアドレスを割り当てる様子が確認できると思います。執筆あれこれここからは本の内容とは関係ないどうでもいい話です。執筆期間についてweb版のベースとなる技術書典版を脱稿したのが4月の頭なので、そこからweb版を執筆し始めました。Twitterでは技術書典版に対する反応がそこそこあったので、熱が冷めないうちにweb版を出してやると意気込んでいたのですが、案の定研究室で色々あったり大学院の出願周りで色々あったり*2して随分ずれ込んでしまいました。少なくとも連休中には脱稿しようと、10連休中10日を全て実装と執筆に全振りするという事をやりのけたにも関わらず終わりませんでした。忙しさのあまり平成から令和になったのにも気が付かないほどでした。*3連休後もちまちまとやり続け、5月の半ばくらいにようやく脱稿できたのでした。そこからレビューをしていただける方に声をかけ、ありがたいことに良いアドバイスをたくさん頂戴したので訂正し、出版に至ります。執筆はブログへのアウトプットとは異なりとても時間がかかります。「よしできた」と思ってからが長いですね。執筆ツールについて技術書典版の資産があったので再びRe:Viewを使わせて頂きました。最初は難しいツールですが使えるようになるととても便利です。kindle販売する際にepubへと変換すると色々とずれたり見た目が今ひとつだったりします。これは自分で修正する必要があるのですが、初心者にはなかなか難しく辛い作業でした。Re:VIEW解説」が非常に役に立ちました。この本無しにkindle出版はできなかったと思います。著者の方には感謝です。Kindle版この商品を含むブログを見る表紙についていらすとやでネタに走るという案もあったのですが、よく考えると自分ならいらすとやが表紙の本は絶対に買わないなと思ったので普通に作成しました。この表紙、フリー素材を引き伸ばしただけなのですが結構それっぽくて気に入っています。価格について¥500で販売しています。¥1000くらいにして一儲けしてやるぜうへへなどと思っていたのですが、拙書よりもはるかにボリュームがあってクオリティも高そうな本が¥500~¥1000くらいだったので完全にチキりました。実際あの質と量なら¥500くらいが相場だと思います。プラットフォームについてkindleとBOOTHという2つのプラットフォームに出しています。検索エンジンからの流入とユーザー数の多さに利点があるのはkindle、収益率および配布フォーマット(pdf)に利点があるのがBOOTHだと思ったので両方で販売しました。因みにkindleは独占販売をした場合(KDPセレクト)の収益率は70%、しない場合は35%です。これに対してBOOTHの場合なんと約96%です。終わりに技術書執筆は辛いけど楽しいぞ*1:因みにこのサンプル、全く購入されていません。大丈夫なのか・・・*2:言い訳である。こいつはGitHubじゃんけんなどを作る暇があった。23:15「Rustで始めるネットワークプログラミング」を出版しました。UPインターンに参加してきましたKLabに続いて2社目のインターン参加レポートです。pagesとかに書くけど、時間がないのでこちらにま...2019-04-26技術書典6にサークル参加したので、ノウハウや備忘録的なものやったことやノウハウや備忘録を書いて行きます。2019-03-03Rustにっき/9日目・TCPクライアント9日目です。modulesを使う整数ナップサック問題と0-1ナップサック問題を解いて比較するWiresharkでQUICパケットを復号化して眺める月別アーカイブ参加グループプログラミングはてなブログをはじめよう!cha-shu00さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。