<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Home on terassyi blog</title>
    <link>https://blog.terassyi.net/</link>
    <description>Recent content in Home on terassyi blog</description>
    <generator>Hugo</generator>
    <language>ja</language>
    <managingEditor>iscale821@gmail.com (terassyi)</managingEditor>
    <webMaster>iscale821@gmail.com (terassyi)</webMaster>
    <lastBuildDate>Sat, 24 Jan 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://blog.terassyi.net/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>DEAR MYSTERIES</title>
      <link>https://blog.terassyi.net/posts/dear-mysteries/</link>
      <pubDate>Sat, 24 Jan 2026 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/dear-mysteries/</guid>
      <description>&lt;p&gt;このブログは技術的なこと以外は書かないと思って始めましたが、ついにポエムを書く日が来ました。&lt;/p&gt;&#xA;&lt;p&gt;ただの駄文です。&lt;/p&gt;&#xA;&lt;h2 id=&#34;dear-mysteries&#34;&gt;DEAR MYSTERIES&lt;/h2&gt;&#xA;&lt;p&gt;TOMOO さんの DEAR MYSTERIES のライブ福岡会場に行ってきました。&#xA;素晴らしいライブだったし、色々な思考がパフォーマンスを鑑賞する中で浮かんできました。&lt;/p&gt;&#xA;&lt;p&gt;まぁ、素人のライブ鑑賞レポートですね。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.tomoo.jp/news/auyBotiATfTESAqP2QLxxz&#34;&gt;TOMOO HALL TOUR 2025-2026 &amp;ldquo;DEAR MYSTERIES&amp;rdquo;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://tomoo-dearmysteries.com/&#34;&gt;Album - DEAR MYSTERIES&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;昨年の春ごろから TOMOO さんにハマって聴いてます。最初は「Super Ball」という曲から入りました。&lt;/p&gt;&#xA;&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; allowfullscreen=&#34;allowfullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/SzguJI6S9V4?si=rzF7Gha3NkT7Z-Sy?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;&lt;p&gt;僕は音楽的に難しいことはわからないんですが、歌詞が刺さりましたね。&lt;/p&gt;&#xA;&lt;p&gt;それから 2nd アルバム DEAR MYSTERIES のホールツアーのチケットを取れたので行ってきました。&lt;/p&gt;&#xA;&lt;p&gt;今回のライブでは特に「Lip Noise」を楽しみにしていました。&lt;/p&gt;&#xA;&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34; allowfullscreen=&#34;allowfullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/CI_WJ7_kVnA?si=9AhFTpcI2GubbTiQ?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;&lt;p&gt;TOMOO さんの楽曲は根底に「他人とはどうやっても完全には分かり合えない」という意識があるような気がします。&lt;/p&gt;</description>
    </item>
    <item>
      <title>RustのCNI Pluginライブラリを rscni をアップデートした</title>
      <link>https://blog.terassyi.net/posts/rscni-update/</link>
      <pubDate>Sat, 10 Jan 2026 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/rscni-update/</guid>
      <description>&lt;p&gt;こんにちは。&#xA;葬送のフリーレン 3 期がはじまりますね。&lt;/p&gt;&#xA;&lt;p&gt;今回は以前作った Rust の CNI Plugin ライブラリ &lt;a href=&#34;https://github.com/terassyi/rscni&#34;&gt;rscni&lt;/a&gt; を大幅に改修したので再度紹介します。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ブログをリニューアルしました</title>
      <link>https://blog.terassyi.net/posts/renew-blog/</link>
      <pubDate>Sun, 21 Sep 2025 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/renew-blog/</guid>
      <description>&lt;p&gt;こんにちは。&lt;/p&gt;&#xA;&lt;p&gt;&lt;del&gt;万博滑り込み勢として予約合戦の真っ最中です。&lt;/del&gt;&lt;/p&gt;&#xA;&lt;p&gt;予約合戦は敗北しました。&lt;/p&gt;&#xA;&lt;h2 id=&#34;ブログを-hugo-に移行しました&#34;&gt;ブログを Hugo に移行しました&lt;/h2&gt;&#xA;&lt;p&gt;タイトルの通りです。&#xA;ブログを Hugo ベースの静的サイトジェネレータに移行して、公開ドメインを &lt;a href=&#34;https://blog.terassyi.net&#34;&gt;blog.terassyi.net&lt;/a&gt; に変更しました。&lt;/p&gt;</description>
    </item>
    <item>
      <title>今週の積分全部解いた</title>
      <link>https://blog.terassyi.net/posts/weekly-integral/</link>
      <pubDate>Sun, 31 Aug 2025 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/weekly-integral/</guid>
      <description>&lt;p&gt;お久しぶりです。&#xA;最近は特に公開できるような開発もしていないのでブログを更新する頻度も減ってしまいました。&#xA;このブログ自体ももっと管理が楽なものに移行したいんですが、リンク壊れたりの対応がめんどくさくてやっていません。&#xA;まぁのんびりやっていきましょう。&lt;/p&gt;&#xA;&lt;h2 id=&#34;今週の積分とは&#34;&gt;「今週の積分」とは&lt;/h2&gt;&#xA;&lt;p&gt;「今週の積分」は教育系 YouTuber の&lt;a href=&#34;https://www.youtube.com/@yobinori&#34;&gt;予備校のノリで学ぶ「大学の数学・物理」（通称 ヨビノリ）&lt;/a&gt;チャンネル（以下敬称略でヨビノリと表記します。）で 2018 年 11 月から 2020 年 12 月まで毎週 1 問ずつ積分の問題を解説するという動画のシリーズです。&lt;/p&gt;&#xA;&lt;p&gt;想定視聴者は基本的に受験生でしょうが、全ての問題は高校範囲のものから出題されるので、数Ⅲまで履修していれば解けます。&#xA;難易度は大体 5 段階の星で評価されていて、星 4 くらいからはやり方を知ってないと解けなかったり、特殊なテクニックを用いるものが多かったです。&lt;/p&gt;&#xA;&lt;p&gt;僕はこのシリーズが始まった時にはすでに大学受験を終えていたのでお世話になることはありませんでしたが、受験生の時に解いていれば積分の力は間違いなく上がっていただろうなと思いました。&lt;/p&gt;&#xA;&lt;p&gt;便利な世の中になりましたね。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kubernetes CNI plugin and network load balancer in Rust</title>
      <link>https://blog.terassyi.net/posts/intro-sart/</link>
      <pubDate>Fri, 12 Apr 2024 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/intro-sart/</guid>
      <description>&lt;p&gt;こんにちは。&lt;/p&gt;&#xA;&lt;p&gt;葬送のフリーレンのアニメが終了して途方に暮れています。&#xA;いいアニメでした。&#xA;続編に期待しています。&lt;/p&gt;&#xA;&lt;p&gt;今回はしばらく趣味で開発している Kubernetes 用の CNI plugin とネットワークロードバランサ sart を紹介します。&lt;/p&gt;&#xA;&lt;p&gt;リポジトリはこちらになります。&#xA;すべて Rust で実装しています。（e2e テストだけ Go 言語の Ginkgo を使っています。）&lt;/p&gt;&#xA;&lt;p&gt;荒削りなソフトウェアですが、動かしてみたりスターをもらえると喜びます。（バグがたくさんありそう）&lt;/p&gt;&#xA;&lt;p&gt;また、開発中のプロジェクトなので API の仕様が変更になる可能性は大いにあります。&lt;/p&gt;</description>
    </item>
    <item>
      <title>RustのCNI Pluginライブラリを作った</title>
      <link>https://blog.terassyi.net/posts/rscni/</link>
      <pubDate>Sun, 14 Jan 2024 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/rscni/</guid>
      <description>&lt;p&gt;こんにちは。&#xA;葬送のフリーレンが2クール連続で歓喜しています。&lt;/p&gt;&#xA;&lt;p&gt;今回はRust用のCNI Pluginライブラリを作って公開したので紹介します。&lt;/p&gt;&#xA;&lt;h2 id=&#34;リポジトリとcratesio&#34;&gt;リポジトリとCrates.io&lt;/h2&gt;&#xA;&lt;p&gt;&lt;code&gt;rscni&lt;/code&gt;という名前でGithub及びCrates.ioに公開しています。&#xA;ご興味のある方は使ってみてください。&#xA;バグ報告お待ちしています。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Kind と Containerlab で Cilium の BGP Control Plane を試す</title>
      <link>https://blog.terassyi.net/posts/try-cilium-bgp-cp/</link>
      <pubDate>Mon, 04 Sep 2023 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/try-cilium-bgp-cp/</guid>
      <description>&lt;p&gt;お久しぶりです。&#xA;3 月のライオンの 17 巻が発売されたので早速読みました。&#xA;非常に良かったですね。&lt;/p&gt;&#xA;&lt;p&gt;今回は Cilium の新しい機能である BGP Control Plane を動かすついでに Containerlab にも入門しました。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ドメインをCloudflareに移管しました with Cloudflare tunnel</title>
      <link>https://blog.terassyi.net/posts/migrate-to-cloudflare/</link>
      <pubDate>Tue, 02 Aug 2022 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/migrate-to-cloudflare/</guid>
      <description>&lt;p&gt;こんにちは．&#xA;今年度より学生生活を無事修了して社会に放たれました．&#xA;規則正しい生活をがんばっています．&lt;/p&gt;&#xA;&lt;h2 id=&#34;terassyinetをcloudflareに移行した&#34;&gt;terassyi.netをCloudflareに移行した&lt;/h2&gt;&#xA;&lt;p&gt;私が管理するドメイン&lt;code&gt;terassyi.net&lt;/code&gt;をお名前.comからCloudflareに移管しました．&#xA;特にリンク先が変わったり何かが変わったわけではありません．&lt;/p&gt;</description>
    </item>
    <item>
      <title>XDP入門</title>
      <link>https://blog.terassyi.net/posts/intro-xdp/</link>
      <pubDate>Mon, 18 Oct 2021 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/intro-xdp/</guid>
      <description>&lt;p&gt;こんにちは．閃光のハサウェイが配信開始されたので早速視聴しました．メッサーがいいですね．&lt;/p&gt;&#xA;&lt;p&gt;前回もXDP関連の話題でしたが，今回はXDPに入門します．&#xA;XDPを学習する際のロードマップやつまりどころの解消になればと思います．&lt;/p&gt;&#xA;&lt;h3 id=&#34;2023-12-30-加筆&#34;&gt;2023-12-30 加筆&lt;/h3&gt;&#xA;&lt;p&gt;本記事を公開して約 2 年が経過しました.&#xA;この加筆で古くなってしまった情報を修正しています.&#xA;差分は このブログの Github の &lt;a href=&#34;https://github.com/terassyi/blog/pull/57/files&#34;&gt;PR&lt;/a&gt; を見てください.&lt;/p&gt;&#xA;&lt;p&gt;この 2 年間で eBPF 及び XDP への注目はさらに高まったように感じます.&#xA;取得できる情報も充実してきました.&#xA;特に O&amp;rsquo;reilly より発売された &lt;a href=&#34;https://www.oreilly.co.jp/books/9784814400560/&#34;&gt;入門 eBPF&lt;/a&gt;(原書: &lt;a href=&#34;https://www.oreilly.com/library/view/learning-ebpf/9781098135119/&#34;&gt;Learning eBPF&lt;/a&gt;) は非常に充実した内容になっています.&#xA;日本語でこれらの情報に触れられるようになったことは大変ありがたいです.&lt;/p&gt;&#xA;&lt;p&gt;2023 年は個人的にも XDP に関して新たに発展的なコンテンツを作成しました.&lt;/p&gt;&#xA;&lt;p&gt;そちらも触っていただければと思います.&lt;/p&gt;&#xA;&lt;div class=&#34;github-card&#34; data-repo=&#34;terassyi/seccamp-xdp&#34;&gt;&#xA;    &lt;a href=&#34;https://github.com/terassyi/seccamp-xdp&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34; class=&#34;github-link&#34;&gt;&#xA;      &lt;div class=&#34;github-icon&#34;&gt;&#xA;        &lt;svg width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 16 16&#34; fill=&#34;currentColor&#34;&gt;&#xA;          &lt;path fill-rule=&#34;evenodd&#34; d=&#34;M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.03 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z&#34;/&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;div class=&#34;github-info&#34;&gt;&#xA;        &lt;div class=&#34;github-title&#34;&gt;terassyi/seccamp-xdp&lt;/div&gt;&#xA;        &#xA;        &lt;div class=&#34;github-description github-auto-description&#34;&gt;Loading...&lt;/div&gt;&#xA;        &#xA;        &lt;div class=&#34;github-meta&#34;&gt;&#xA;          &lt;span class=&#34;github-language&#34; style=&#34;display: none;&#34;&gt;&#xA;            &lt;span class=&#34;language-dot&#34;&gt;&lt;/span&gt;&#xA;            &lt;span class=&#34;language-name&#34;&gt;&lt;/span&gt;&#xA;          &lt;/span&gt;&#xA;          &lt;span class=&#34;github-stat github-stars&#34; style=&#34;display: none;&#34;&gt;&#xA;            &lt;svg width=&#34;14&#34; height=&#34;14&#34; viewBox=&#34;0 0 16 16&#34; fill=&#34;currentColor&#34;&gt;&#xA;              &lt;path d=&#34;M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25z&#34;/&gt;&#xA;            &lt;/svg&gt;&#xA;            &lt;span class=&#34;stars-count&#34;&gt;&lt;/span&gt;&#xA;          &lt;/span&gt;&#xA;          &lt;span class=&#34;github-stat github-forks&#34; style=&#34;display: none;&#34;&gt;&#xA;            &lt;svg width=&#34;14&#34; height=&#34;14&#34; viewBox=&#34;0 0 16 16&#34; fill=&#34;currentColor&#34;&gt;&#xA;              &lt;path fill-rule=&#34;evenodd&#34; d=&#34;M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.25 2.25 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878z&#34;/&gt;&#xA;            &lt;/svg&gt;&#xA;            &lt;span class=&#34;forks-count&#34;&gt;&lt;/span&gt;&#xA;          &lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;div class=&#34;github-arrow&#34;&gt;&#xA;        &lt;svg width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 16 16&#34; fill=&#34;currentColor&#34;&gt;&#xA;          &lt;path fill-rule=&#34;evenodd&#34; d=&#34;M6.22 3.22a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06L9.94 8 6.22 4.28a.75.75 0 010-1.06z&#34;/&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/a&gt;&#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;style&gt;&#xA;  .github-card {&#xA;    margin: 1.5rem 0;&#xA;    border: 1px solid #e5e7eb;&#xA;    border-radius: 8px;&#xA;    overflow: hidden;&#xA;    background: #fff;&#xA;    transition: all 0.2s ease;&#xA;    font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial;&#xA;  }&#xA;&#xA;  .github-card:hover {&#xA;    border-color: #3b82f6;&#xA;    box-shadow: 0 4px 12px rgba(59, 130, 246, 0.15);&#xA;  }&#xA;&#xA;  .github-link {&#xA;    display: flex;&#xA;    align-items: center;&#xA;    padding: 16px;&#xA;    text-decoration: none;&#xA;    color: inherit;&#xA;    gap: 12px;&#xA;  }&#xA;&#xA;  .github-icon {&#xA;    flex-shrink: 0;&#xA;    color: #6b7280;&#xA;  }&#xA;&#xA;  .github-info {&#xA;    flex: 1;&#xA;    min-width: 0;&#xA;  }&#xA;&#xA;  .github-title {&#xA;    font-weight: 600;&#xA;    font-size: 14px;&#xA;    color: #111827;&#xA;    margin-bottom: 4px;&#xA;    word-break: break-all;&#xA;  }&#xA;&#xA;  .github-description {&#xA;    font-size: 13px;&#xA;    color: #6b7280;&#xA;    line-height: 1.4;&#xA;    margin-bottom: 8px;&#xA;    display: -webkit-box;&#xA;    -webkit-line-clamp: 2;&#xA;    -webkit-box-orient: vertical;&#xA;    overflow: hidden;&#xA;  }&#xA;&#xA;  .github-meta {&#xA;    display: flex;&#xA;    align-items: center;&#xA;    gap: 12px;&#xA;    font-size: 12px;&#xA;    color: #6b7280;&#xA;  }&#xA;&#xA;  .github-language {&#xA;    display: flex;&#xA;    align-items: center;&#xA;    gap: 4px;&#xA;  }&#xA;&#xA;  .language-dot {&#xA;    width: 12px;&#xA;    height: 12px;&#xA;    border-radius: 50%;&#xA;    display: inline-block;&#xA;  }&#xA;&#xA;  .github-stat {&#xA;    display: flex;&#xA;    align-items: center;&#xA;    gap: 3px;&#xA;  }&#xA;&#xA;  .github-stat svg {&#xA;    color: #6b7280;&#xA;  }&#xA;&#xA;  .github-arrow {&#xA;    flex-shrink: 0;&#xA;    color: #9ca3af;&#xA;    transition: transform 0.2s ease;&#xA;  }&#xA;&#xA;  .github-link:hover .github-arrow {&#xA;    transform: translateX(2px);&#xA;  }&#xA;&#xA;  @media (prefers-color-scheme: dark) {&#xA;    .github-card {&#xA;      background: #1f2937;&#xA;      border-color: #374151;&#xA;    }&#xA;&#xA;    .github-title {&#xA;      color: #f9fafb;&#xA;    }&#xA;&#xA;    .github-description,&#xA;    .github-meta {&#xA;      color: #d1d5db;&#xA;    }&#xA;&#xA;    .github-icon {&#xA;      color: #9ca3af;&#xA;    }&#xA;&#xA;    .github-stat svg {&#xA;      color: #9ca3af;&#xA;    }&#xA;  }&#xA;  &lt;/style&gt;&#xA;&#xA;  &lt;script&gt;&#xA;  (function() {&#xA;    const languageColors = {&#xA;      &#39;Go&#39;: &#39;#00ADD8&#39;,&#xA;      &#39;JavaScript&#39;: &#39;#f1e05a&#39;,&#xA;      &#39;TypeScript&#39;: &#39;#2b7489&#39;,&#xA;      &#39;Python&#39;: &#39;#3572a5&#39;,&#xA;      &#39;Java&#39;: &#39;#b07219&#39;,&#xA;      &#39;C&#39;: &#39;#555555&#39;,&#xA;      &#39;C++&#39;: &#39;#f34b7d&#39;,&#xA;      &#39;Rust&#39;: &#39;#dea584&#39;,&#xA;      &#39;Ruby&#39;: &#39;#701516&#39;,&#xA;      &#39;PHP&#39;: &#39;#4f5d95&#39;,&#xA;      &#39;Swift&#39;: &#39;#ffac45&#39;,&#xA;      &#39;Kotlin&#39;: &#39;#F18E33&#39;,&#xA;      &#39;Shell&#39;: &#39;#89e051&#39;,&#xA;      &#39;HTML&#39;: &#39;#e34c26&#39;,&#xA;      &#39;CSS&#39;: &#39;#1572B6&#39;&#xA;    };&#xA;&#xA;    const cards = document.querySelectorAll(&#39;.github-card&#39;);&#xA;&#xA;    cards.forEach(async (card) =&gt; {&#xA;      const repo = card.dataset.repo;&#xA;      if (!repo) return;&#xA;&#xA;      try {&#xA;        const response = await fetch(`https://api.github.com/repos/${repo}`);&#xA;        if (!response.ok) throw new Error(&#39;API request failed&#39;);&#xA;&#xA;        const data = await response.json();&#xA;&#xA;        &#xA;        const autoDescription = card.querySelector(&#39;.github-auto-description&#39;);&#xA;        if (autoDescription) {&#xA;          if (data.description) {&#xA;            autoDescription.textContent = data.description;&#xA;          } else {&#xA;            autoDescription.style.display = &#39;none&#39;;&#xA;          }&#xA;        }&#xA;&#xA;        &#xA;        const languageElement = card.querySelector(&#39;.github-language&#39;);&#xA;        const languageDot = card.querySelector(&#39;.language-dot&#39;);&#xA;        const languageName = card.querySelector(&#39;.language-name&#39;);&#xA;&#xA;        if (data.language) {&#xA;          languageName.textContent = data.language;&#xA;          languageDot.style.backgroundColor = languageColors[data.language] || &#39;#586069&#39;;&#xA;          languageElement.style.display = &#39;flex&#39;;&#xA;        }&#xA;&#xA;        &#xA;        const starsElement = card.querySelector(&#39;.github-stars&#39;);&#xA;        const starsCount = card.querySelector(&#39;.stars-count&#39;);&#xA;        if (data.stargazers_count !== undefined) {&#xA;          starsCount.textContent = data.stargazers_count.toLocaleString();&#xA;          starsElement.style.display = &#39;flex&#39;;&#xA;        }&#xA;&#xA;        &#xA;        const forksElement = card.querySelector(&#39;.github-forks&#39;);&#xA;        const forksCount = card.querySelector(&#39;.forks-count&#39;);&#xA;        if (data.forks_count !== undefined) {&#xA;          forksCount.textContent = data.forks_count.toLocaleString();&#xA;          forksElement.style.display = &#39;flex&#39;;&#xA;        }&#xA;&#xA;      } catch (error) {&#xA;        console.error(&#39;Error fetching GitHub data:&#39;, error);&#xA;        &#xA;        const autoDescription = card.querySelector(&#39;.github-auto-description&#39;);&#xA;        if (autoDescription) {&#xA;          autoDescription.style.display = &#39;none&#39;;&#xA;        }&#xA;      }&#xA;    });&#xA;  })();&#xA;  &lt;/script&gt;</description>
    </item>
    <item>
      <title>Goのcilium/ebpfでXdpcapを使う</title>
      <link>https://blog.terassyi.net/posts/use-xdpcap/</link>
      <pubDate>Thu, 07 Oct 2021 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/use-xdpcap/</guid>
      <description>&lt;p&gt;こんにちは．学生生活も後少しとなってしまいました．悲しいです．&#xA;今回はxdpcapというツールについてです．xdpcapの使用に関する資料が日本語では非常に少なかったので使い方を紹介します．&lt;/p&gt;</description>
    </item>
    <item>
      <title>KLab Expert Camp TCP/IPプロトコルスタック自作開発キャンプに参加してきました．</title>
      <link>https://blog.terassyi.net/posts/klab-expert-camp/</link>
      <pubDate>Sat, 13 Mar 2021 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/klab-expert-camp/</guid>
      <description>&lt;p&gt;こんにちは．趣味の将棋がなかなか強くならなくて困ってます．勉強せずにすぐ対局してしまうのがダメなのはわかってますがつい対局してしまいます．&#xA;今回はKLab Expert Campに参加してTCP/IPプロトコルスタック自作に挑戦しました．&lt;/p&gt;</description>
    </item>
    <item>
      <title>NTTコミュニケーションズの職場体験型インターンシップに参加しました</title>
      <link>https://blog.terassyi.net/posts/ntt-intern2/</link>
      <pubDate>Wed, 10 Mar 2021 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/ntt-intern2/</guid>
      <description>&lt;p&gt;こんにちは．最近は呪術廻戦をアニメで見て漫画を全巻揃えてしまいました．いつになってもバトル漫画は良いものです．今回はNTTコミュニケーションズさんにより開催されたインターンシップに参加して二週間ネットワークをゴニョゴニョしてきました．&lt;/p&gt;</description>
    </item>
    <item>
      <title>SecHack365を修了しました</title>
      <link>https://blog.terassyi.net/posts/sechack365/</link>
      <pubDate>Tue, 09 Mar 2021 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/sechack365/</guid>
      <description>&lt;p&gt;こんにちは．今回はSecHack365のレポートを書きます．&#xA;私は開発駆動コースに参加していました．&lt;/p&gt;&#xA;&lt;h2 id=&#34;sechack365とは&#34;&gt;SecHack365とは？&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://sechack365.nict.go.jp/&#34;&gt;SecHack365&lt;/a&gt;(以下SecHack)はNICTが主催する人材育成プロジェクトです．特徴を公式サイトから引用します．&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;若手セキュリティイノベーター育成プログラム SecHack365は、25歳以下の学生や社会人から公募選抜する40名程度の受講生を対象に、サイバーセキュリティに関するソフトウェア開発や研究、実験、発表を一年間継続してモノづくりをする機会を提供する長期ハッカソンです。全国の一流研究者・技術者や受講生等との交流をするなかで、自ら手を動かし、セキュリティに関わるモノづくりができる人材 (セキュリティイノベーター) を育てます。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;p&gt;公式サイトにあるように産学の各領域の第一線で活躍されている方々とNICTからサポートを受けながら１年間開発を行うことができます．&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linux Network Namespaceを使用したネットワークシミュレータの紹介</title>
      <link>https://blog.terassyi.net/posts/pyns2/</link>
      <pubDate>Mon, 21 Dec 2020 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/pyns2/</guid>
      <description>&lt;p&gt;こんにちは．12月に入り非常に寒い日々が続いています．個人的には10月から続いていたセキュリティキャンプが一段落して少し余裕が出てきました．&#xA;また，この記事は&lt;a href=&#34;https://adventar.org/calendars/5335&#34;&gt;SecHack365 Advent Calendar 2020&lt;/a&gt;の記事として書いています．&#xA;今回は趣味で開発しているツールを紹介します．&lt;/p&gt;</description>
    </item>
    <item>
      <title>XDPが実行できるVagrantfileを探して</title>
      <link>https://blog.terassyi.net/posts/xdp-vagrant/</link>
      <pubDate>Mon, 19 Oct 2020 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/xdp-vagrant/</guid>
      <description>&lt;p&gt;こんにちは．大学院の後期授業も開始され，さらに多数イベントが同時並行で開催されており非常に忙しい日々を過ごしています．最近は将棋の勉強にも精を出しています．弱いですが．&#xA;今回はXDPが実行できるVMをVagrantで作ります．&#xA;先日&lt;a href=&#34;https://terassyi.net/posts/2020/09/12/pepabo-intern.html&#34;&gt;GMOペパボさんのeBPFインターンシップ&lt;/a&gt;に参加させていただいて以降eBPF関連の技術に興味を持っておりXDPに手を出してみます．&lt;/p&gt;</description>
    </item>
    <item>
      <title>GMOペパボの研究開発コースインターンシップに参加しました</title>
      <link>https://blog.terassyi.net/posts/pepabo-intern/</link>
      <pubDate>Sat, 12 Sep 2020 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/pepabo-intern/</guid>
      <description>&lt;h2 id=&#34;参加の経緯&#34;&gt;参加の経緯&lt;/h2&gt;&#xA;&lt;p&gt;確か最初にインターンの開催を知ったのはtwitterだったと記憶しています．エンジニアインターンはWeb系の募集がほとんどで低レイヤを扱うインターンを探していたので即応募しました．&lt;/p&gt;&#xA;&lt;h2 id=&#34;内容&#34;&gt;内容&lt;/h2&gt;&#xA;&lt;p&gt;僕が参加したのは研究開発/SREコースでeBPFを使用したトレーシングツールの作成を行いました．&lt;code&gt;eBPF&lt;/code&gt;とは&lt;code&gt;extended Berkeley Packet Filter&lt;/code&gt;の略でユーザー空間からプログラムを挿入してカーネル空間のデータを取得することができる技術です．&#xA;今回のインターンでは&lt;a href=&#34;https://twitter.com/udzura&#34;&gt;Uchio Kondo&lt;/a&gt;さんと&lt;a href=&#34;https://twitter.com/pyama86&#34;&gt;P山&lt;/a&gt;さんにメンターとしてついていただきeBPFのチュートリアルから初めて最終的に参加者それぞれが一つのツールにまとめて成果として最終日に発表しました．お二方には期間中とても手厚くサポートしていただきました．ありがとうございました．&lt;/p&gt;</description>
    </item>
    <item>
      <title>SoftEther VPN Server APIのGo版を作った</title>
      <link>https://blog.terassyi.net/posts/softether-api/</link>
      <pubDate>Wed, 15 Jul 2020 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/softether-api/</guid>
      <description>&lt;p&gt;こんにちは．最近は学校の課題や事務手続きやらインターンどうしようかやらで非常に忙しいです．それに加えてSecHack365に参加することとなりこれはうれしい悲鳴ですがさらに忙しいです．(嬉しい)&#xA;さて今回はSoftEtherについてです．学生などにはあまり馴染みがなさげなソフトですが，僕は研究でこのソフトに非常にお世話になっております．このソフトウェアはとてもすごいんですが，マネージャーソフトがwindows用しかなくてCUIベースの操作が大変なのでWebベースのマネージャーを作ろうと思い立ちました．そこでまずGo言語でAPIのラッパーを作成しました．&lt;/p&gt;</description>
    </item>
    <item>
      <title>SECCON Beginners CTF 2020 Elementary stackを理解する</title>
      <link>https://blog.terassyi.net/posts/elementary-stack/</link>
      <pubDate>Thu, 04 Jun 2020 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/elementary-stack/</guid>
      <description>&lt;p&gt;こんにちは．リモート授業で一度も授業が一度も授業に現れず資料も与えられずにただただ課題のPDFが配布される授業があるのですが，中間試験はしっかりと行われることが告知されて萎えています．今回はCTF4Bから2週間弱たちましたが，解けなかった問題について考えてみました．&lt;/p&gt;&#xA;&lt;p&gt;僕が本番で解けた問題のWrite upは&lt;a href=&#34;https://terassyi.net/posts/2020/05/24/ctf4b.html&#34;&gt;こちら&lt;/a&gt;．&lt;/p&gt;&#xA;&lt;h2 id=&#34;elementary-stack&#34;&gt;Elementary stack&lt;/h2&gt;&#xA;&lt;p&gt;Pwnの問題です．本番ではチラッと覗いて難しそうだったのであまり時間をかけず他の問題を考えていましたが．楽しそうなのでこの問題について考えてみました．いくつかwrite upを梯子して僕がどのように考えたのかをメモします．実行ファイル&lt;code&gt;chall&lt;/code&gt;と&lt;code&gt;main.c&lt;/code&gt;，&lt;code&gt;libc-2.27.so&lt;/code&gt;が与えられました．&#xA;コードは以下のようになっています．&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-c&#34; data-lang=&#34;c&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;readlong&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;msg, &lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;buf, &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; size) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;%s&amp;#34;&lt;/span&gt;, msg);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#a6e22e&#34;&gt;read&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;, buf, size) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fatal&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;I/O error&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  buf[size &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;atol&lt;/span&gt;(buf);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;(&lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; i;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt; v;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;char&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;buffer;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;unsigned&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;long&lt;/span&gt; x[X_NUMBER];&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; ((buffer &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;malloc&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;0x20&lt;/span&gt;)) &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; NULL)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;fatal&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Memory error&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt;(&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    i &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;)&lt;span style=&#34;color:#a6e22e&#34;&gt;readlong&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;index: &amp;#34;&lt;/span&gt;, buffer, &lt;span style=&#34;color:#ae81ff&#34;&gt;0x20&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    v &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;readlong&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;value: &amp;#34;&lt;/span&gt;, buffer, &lt;span style=&#34;color:#ae81ff&#34;&gt;0x20&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;printf&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;x[%d] = %ld&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;\n&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;, i, v);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    x[i] &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; v;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;無限ループに囲まれているのでmain関数のリターンアドレスを書き換えるようなことはできなさそうです．&lt;code&gt;malloc&lt;/code&gt;で&lt;code&gt;buffer&lt;/code&gt;の領域を保持してそこに&lt;code&gt;read&lt;/code&gt;を使用して値を書き込んで配列xに値を書き込んでいくプログラムのようです．&#xA;mallocした場所に入力値を格納しているのですが，ローカル変数&lt;code&gt;*buffer&lt;/code&gt;として保持した領域のポインタを持っているのでなんとかなりそう．&#xA;&lt;code&gt;/bin/sh&lt;/code&gt;をどうやって実行させるかを考えますが，今回は&lt;code&gt;readlong&lt;/code&gt;関数内の&lt;code&gt;atol&lt;/code&gt;をGOT overwriteして&lt;code&gt;system(&#39;/bin/sh&#39;)&lt;/code&gt;を呼び出すべきだったようです．しかし，libcのアドレスがわからないので&lt;code&gt;system&lt;/code&gt;のアドレスがわからないんですね．ここで僕は全くわからなかったんですが，一度&lt;code&gt;atol@got&lt;/code&gt;を&lt;code&gt;printf&lt;/code&gt;に書き換えることで&lt;code&gt;atol(buf)&lt;/code&gt;を&lt;code&gt;printf(buf)&lt;/code&gt;とすることでformat string bugを発生させることが出来るそうです．なるほどすごい．format string attackでlibcのアドレスをリークすることで&lt;code&gt;system&lt;/code&gt;関数を呼び出すことが出来るようになります．&#xA;手順的には以下のような感じ．&lt;/p&gt;</description>
    </item>
    <item>
      <title>SECCON Beginners CTF 2020解けた問題 writeup</title>
      <link>https://blog.terassyi.net/posts/ctf4b/</link>
      <pubDate>Sun, 24 May 2020 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/ctf4b/</guid>
      <description>&lt;p&gt;こんにちは．福岡では緊急事態宣言は解除されましたが授業もアルバイト，ゼミもリモートのため相変わらず外出しない生活を送っています．&lt;/p&gt;&#xA;&lt;h2 id=&#34;ctf4b&#34;&gt;ctf4b&lt;/h2&gt;&#xA;&lt;p&gt;ctf4bに大学の研究室のメンバーで参加してきました．昨年は全く手が出ませんでしたが今年は結構楽しくCTFができました．(解けたとは言ってない．)&#xA;得意分野と言える分野もないので雑食でいろいろな分野を覗いてました．&#xA;僕は&lt;code&gt;readme&lt;/code&gt;,&lt;code&gt;beginner&#39;s stack&lt;/code&gt;,&lt;code&gt;tweetstore&lt;/code&gt;をときました．また，時間内にフラグは得られませんでしたが終了後に気づいた&lt;code&gt;unzip&lt;/code&gt;も記載します．&#xA;(その他の問題も解けたら追記しようかな)&#xA;では，&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.seccon.jp/2019/seccon_beginners/seccon_beginners_ctf_2020_5_23_1400.html&#34;&gt;https://www.seccon.jp/2019/seccon_beginners/seccon_beginners_ctf_2020_5_23_1400.html&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;追記&#34;&gt;追記&lt;/h3&gt;&#xA;&lt;p&gt;pwnの&lt;a href=&#34;https://terassyi.net/posts/2020/06/04/elementary-stack.html&#34;&gt;elementary stack&lt;/a&gt;についてポストしました．&lt;/p&gt;&#xA;&lt;h3 id=&#34;readme&#34;&gt;readme&lt;/h3&gt;&#xA;&lt;p&gt;Miscの問題です．問題サーバで動いているコードが配布されます．&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#!/usr/bin/env python3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; os&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;assert&lt;/span&gt; os&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;path&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;isfile(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/home/ctf/flag&amp;#39;&lt;/span&gt;) &lt;span style=&#34;color:#75715e&#34;&gt;# readme&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; __name__ &lt;span style=&#34;color:#f92672&#34;&gt;==&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    path &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; input(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;File: &amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; os&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;path&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;exists(path):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        exit(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[-] File not found&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; os&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;path&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;isfile(path):&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        exit(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[-] Not a file&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;/&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; path[&lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;]:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        exit(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[-] Use absolute path&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;ctf&amp;#39;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; path:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        exit(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[-] Path not allowed&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;try&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        print(open(path, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;r&amp;#39;&lt;/span&gt;)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;read())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;except&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        exit(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[-] Permission denied&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ncコマンドでサーバに接続すると&lt;code&gt;File: &lt;/code&gt;と出てきてパスを入力します．&lt;code&gt;/home/ctf/flag&lt;/code&gt;を開くことができればフラグが得られそうです．&#xA;しかし．入力文字列にはいくつかの制限があります．&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;指定したパスが存在する&lt;/li&gt;&#xA;&lt;li&gt;指定したパスがファイルである&lt;/li&gt;&#xA;&lt;li&gt;指定したパスが絶対パスである&lt;/li&gt;&#xA;&lt;li&gt;指定されたパスに&lt;code&gt;ctf&lt;/code&gt;という文字列が存在しない&lt;/li&gt;&#xA;&lt;li&gt;指定したファイルが開ける&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;条件は以上です．&#xA;&lt;code&gt;ctf&lt;/code&gt;が許されないので&lt;code&gt;/home/ctf/flag&lt;/code&gt;は当然の如く失敗します．&#xA;&lt;strong&gt;ctfという文字列を使用せずにどの様にしてパスを取得するか&lt;/strong&gt;がポイントです．&#xA;現在のプロセスが動いているカレントディレクトリを取得することができれば良さげです．&#xA;そこで登場するのが&lt;code&gt;/proc&lt;/code&gt;です．&#xA;&lt;code&gt;/proc&lt;/code&gt;ファイルシステムは特殊なディレクトリでシステムの情報や動作しているプロセスの情報を取得することができます．&#xA;あるプロセスに関する情報が欲しい場合は&lt;code&gt;/proc/[pid]&lt;/code&gt;を参照します．自身のプロセスの情報を得たい場合は&lt;code&gt;/proc/self&lt;/code&gt;です．&#xA;&lt;code&gt;/proc&lt;/code&gt;は面白いのでぜひいろいろ覗いてみてください．&#xA;さて，&lt;code&gt;/proc/self/cwd&lt;/code&gt;がプロセス自身のカレントディレクトリへのシンボリックリンクとなっています．が，ここで&lt;code&gt;/proc/self/cwd&lt;/code&gt;を入れてもファイルじゃないのでダメです．そこで，&lt;code&gt;/proc/self/environ&lt;/code&gt;を入力してみます．すると環境変数がいっぱい出てきます．その中に&lt;code&gt;PWD=/home/ctf/server&lt;/code&gt;が見つかりました．&#xA;このプロセスは&lt;code&gt;/home/ctf/server&lt;/code&gt;で動いてそうですね．&lt;/p&gt;</description>
    </item>
    <item>
      <title>自作コンテナランタイムでつまずいてる話</title>
      <link>https://blog.terassyi.net/posts/container/</link>
      <pubDate>Fri, 08 May 2020 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/container/</guid>
      <description>&lt;p&gt;こんにちは．緊急事態宣言がのびたので相変わらずの外出自粛中です．最近は外出自粛にも少し慣れましたがやはり退屈です．僕は作業中のBGMとして何度か見たことのあるアニメなどを流しているんですがそれらのストックも無くなってきています．ループしようかな．ちなみにおすすめはガンダムUCですね．音楽が素晴らしいですし，SFアニメはモチベが上がっていいです．&#xA;さて，今回は自作コンテナランタイムに挑戦したという話です．&lt;a href=&#34;https://terassyi.net/posts/2020/04/29/runc.html&#34;&gt;前回のポスト&lt;/a&gt;では&lt;code&gt;runc&lt;/code&gt;を使ってみましたが，今回は&lt;code&gt;runc&lt;/code&gt;を参考に挑戦してみました．&lt;/p&gt;&#xA;&lt;p&gt;ちなみにコード書いて試してたときに&lt;code&gt;rm -rf&lt;/code&gt;で書いてたコード全消去して萎えました．&#xA;&lt;blockquote class=&#34;twitter-tweet&#34;&gt;&lt;p lang=&#34;ja&#34; dir=&#34;ltr&#34;&gt;間違えてrm -rf /[project]やって書いてたソース全部消失したくっそ萎えた&lt;/p&gt;&amp;mdash; terassyi (@terassyi_) &lt;a href=&#34;https://twitter.com/terassyi_/status/1256486345381261313?ref_src=twsrc%5Etfw&#34;&gt;May 2, 2020&lt;/a&gt;&lt;/blockquote&gt;&#xA;&lt;script async src=&#34;https://platform.twitter.com/widgets.js&#34; charset=&#34;utf-8&#34;&gt;&lt;/script&gt;&#xA;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;gitで管理するのって大事ですね．&#xA;リポジトリはこちら&lt;/p&gt;&#xA;&lt;div class=&#34;github-card&#34; data-repo=&#34;terassyi/mycon&#34;&gt;&#xA;    &lt;a href=&#34;https://github.com/terassyi/mycon&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34; class=&#34;github-link&#34;&gt;&#xA;      &lt;div class=&#34;github-icon&#34;&gt;&#xA;        &lt;svg width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 16 16&#34; fill=&#34;currentColor&#34;&gt;&#xA;          &lt;path fill-rule=&#34;evenodd&#34; d=&#34;M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.03 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z&#34;/&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;div class=&#34;github-info&#34;&gt;&#xA;        &lt;div class=&#34;github-title&#34;&gt;terassyi/mycon&lt;/div&gt;&#xA;        &#xA;        &lt;div class=&#34;github-description github-auto-description&#34;&gt;Loading...&lt;/div&gt;&#xA;        &#xA;        &lt;div class=&#34;github-meta&#34;&gt;&#xA;          &lt;span class=&#34;github-language&#34; style=&#34;display: none;&#34;&gt;&#xA;            &lt;span class=&#34;language-dot&#34;&gt;&lt;/span&gt;&#xA;            &lt;span class=&#34;language-name&#34;&gt;&lt;/span&gt;&#xA;          &lt;/span&gt;&#xA;          &lt;span class=&#34;github-stat github-stars&#34; style=&#34;display: none;&#34;&gt;&#xA;            &lt;svg width=&#34;14&#34; height=&#34;14&#34; viewBox=&#34;0 0 16 16&#34; fill=&#34;currentColor&#34;&gt;&#xA;              &lt;path d=&#34;M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25z&#34;/&gt;&#xA;            &lt;/svg&gt;&#xA;            &lt;span class=&#34;stars-count&#34;&gt;&lt;/span&gt;&#xA;          &lt;/span&gt;&#xA;          &lt;span class=&#34;github-stat github-forks&#34; style=&#34;display: none;&#34;&gt;&#xA;            &lt;svg width=&#34;14&#34; height=&#34;14&#34; viewBox=&#34;0 0 16 16&#34; fill=&#34;currentColor&#34;&gt;&#xA;              &lt;path fill-rule=&#34;evenodd&#34; d=&#34;M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.25 2.25 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878z&#34;/&gt;&#xA;            &lt;/svg&gt;&#xA;            &lt;span class=&#34;forks-count&#34;&gt;&lt;/span&gt;&#xA;          &lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;div class=&#34;github-arrow&#34;&gt;&#xA;        &lt;svg width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 16 16&#34; fill=&#34;currentColor&#34;&gt;&#xA;          &lt;path fill-rule=&#34;evenodd&#34; d=&#34;M6.22 3.22a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06L9.94 8 6.22 4.28a.75.75 0 010-1.06z&#34;/&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/a&gt;&#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;style&gt;&#xA;  .github-card {&#xA;    margin: 1.5rem 0;&#xA;    border: 1px solid #e5e7eb;&#xA;    border-radius: 8px;&#xA;    overflow: hidden;&#xA;    background: #fff;&#xA;    transition: all 0.2s ease;&#xA;    font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial;&#xA;  }&#xA;&#xA;  .github-card:hover {&#xA;    border-color: #3b82f6;&#xA;    box-shadow: 0 4px 12px rgba(59, 130, 246, 0.15);&#xA;  }&#xA;&#xA;  .github-link {&#xA;    display: flex;&#xA;    align-items: center;&#xA;    padding: 16px;&#xA;    text-decoration: none;&#xA;    color: inherit;&#xA;    gap: 12px;&#xA;  }&#xA;&#xA;  .github-icon {&#xA;    flex-shrink: 0;&#xA;    color: #6b7280;&#xA;  }&#xA;&#xA;  .github-info {&#xA;    flex: 1;&#xA;    min-width: 0;&#xA;  }&#xA;&#xA;  .github-title {&#xA;    font-weight: 600;&#xA;    font-size: 14px;&#xA;    color: #111827;&#xA;    margin-bottom: 4px;&#xA;    word-break: break-all;&#xA;  }&#xA;&#xA;  .github-description {&#xA;    font-size: 13px;&#xA;    color: #6b7280;&#xA;    line-height: 1.4;&#xA;    margin-bottom: 8px;&#xA;    display: -webkit-box;&#xA;    -webkit-line-clamp: 2;&#xA;    -webkit-box-orient: vertical;&#xA;    overflow: hidden;&#xA;  }&#xA;&#xA;  .github-meta {&#xA;    display: flex;&#xA;    align-items: center;&#xA;    gap: 12px;&#xA;    font-size: 12px;&#xA;    color: #6b7280;&#xA;  }&#xA;&#xA;  .github-language {&#xA;    display: flex;&#xA;    align-items: center;&#xA;    gap: 4px;&#xA;  }&#xA;&#xA;  .language-dot {&#xA;    width: 12px;&#xA;    height: 12px;&#xA;    border-radius: 50%;&#xA;    display: inline-block;&#xA;  }&#xA;&#xA;  .github-stat {&#xA;    display: flex;&#xA;    align-items: center;&#xA;    gap: 3px;&#xA;  }&#xA;&#xA;  .github-stat svg {&#xA;    color: #6b7280;&#xA;  }&#xA;&#xA;  .github-arrow {&#xA;    flex-shrink: 0;&#xA;    color: #9ca3af;&#xA;    transition: transform 0.2s ease;&#xA;  }&#xA;&#xA;  .github-link:hover .github-arrow {&#xA;    transform: translateX(2px);&#xA;  }&#xA;&#xA;  @media (prefers-color-scheme: dark) {&#xA;    .github-card {&#xA;      background: #1f2937;&#xA;      border-color: #374151;&#xA;    }&#xA;&#xA;    .github-title {&#xA;      color: #f9fafb;&#xA;    }&#xA;&#xA;    .github-description,&#xA;    .github-meta {&#xA;      color: #d1d5db;&#xA;    }&#xA;&#xA;    .github-icon {&#xA;      color: #9ca3af;&#xA;    }&#xA;&#xA;    .github-stat svg {&#xA;      color: #9ca3af;&#xA;    }&#xA;  }&#xA;  &lt;/style&gt;&#xA;&#xA;  &lt;script&gt;&#xA;  (function() {&#xA;    const languageColors = {&#xA;      &#39;Go&#39;: &#39;#00ADD8&#39;,&#xA;      &#39;JavaScript&#39;: &#39;#f1e05a&#39;,&#xA;      &#39;TypeScript&#39;: &#39;#2b7489&#39;,&#xA;      &#39;Python&#39;: &#39;#3572a5&#39;,&#xA;      &#39;Java&#39;: &#39;#b07219&#39;,&#xA;      &#39;C&#39;: &#39;#555555&#39;,&#xA;      &#39;C++&#39;: &#39;#f34b7d&#39;,&#xA;      &#39;Rust&#39;: &#39;#dea584&#39;,&#xA;      &#39;Ruby&#39;: &#39;#701516&#39;,&#xA;      &#39;PHP&#39;: &#39;#4f5d95&#39;,&#xA;      &#39;Swift&#39;: &#39;#ffac45&#39;,&#xA;      &#39;Kotlin&#39;: &#39;#F18E33&#39;,&#xA;      &#39;Shell&#39;: &#39;#89e051&#39;,&#xA;      &#39;HTML&#39;: &#39;#e34c26&#39;,&#xA;      &#39;CSS&#39;: &#39;#1572B6&#39;&#xA;    };&#xA;&#xA;    const cards = document.querySelectorAll(&#39;.github-card&#39;);&#xA;&#xA;    cards.forEach(async (card) =&gt; {&#xA;      const repo = card.dataset.repo;&#xA;      if (!repo) return;&#xA;&#xA;      try {&#xA;        const response = await fetch(`https://api.github.com/repos/${repo}`);&#xA;        if (!response.ok) throw new Error(&#39;API request failed&#39;);&#xA;&#xA;        const data = await response.json();&#xA;&#xA;        &#xA;        const autoDescription = card.querySelector(&#39;.github-auto-description&#39;);&#xA;        if (autoDescription) {&#xA;          if (data.description) {&#xA;            autoDescription.textContent = data.description;&#xA;          } else {&#xA;            autoDescription.style.display = &#39;none&#39;;&#xA;          }&#xA;        }&#xA;&#xA;        &#xA;        const languageElement = card.querySelector(&#39;.github-language&#39;);&#xA;        const languageDot = card.querySelector(&#39;.language-dot&#39;);&#xA;        const languageName = card.querySelector(&#39;.language-name&#39;);&#xA;&#xA;        if (data.language) {&#xA;          languageName.textContent = data.language;&#xA;          languageDot.style.backgroundColor = languageColors[data.language] || &#39;#586069&#39;;&#xA;          languageElement.style.display = &#39;flex&#39;;&#xA;        }&#xA;&#xA;        &#xA;        const starsElement = card.querySelector(&#39;.github-stars&#39;);&#xA;        const starsCount = card.querySelector(&#39;.stars-count&#39;);&#xA;        if (data.stargazers_count !== undefined) {&#xA;          starsCount.textContent = data.stargazers_count.toLocaleString();&#xA;          starsElement.style.display = &#39;flex&#39;;&#xA;        }&#xA;&#xA;        &#xA;        const forksElement = card.querySelector(&#39;.github-forks&#39;);&#xA;        const forksCount = card.querySelector(&#39;.forks-count&#39;);&#xA;        if (data.forks_count !== undefined) {&#xA;          forksCount.textContent = data.forks_count.toLocaleString();&#xA;          forksElement.style.display = &#39;flex&#39;;&#xA;        }&#xA;&#xA;      } catch (error) {&#xA;        console.error(&#39;Error fetching GitHub data:&#39;, error);&#xA;        &#xA;        const autoDescription = card.querySelector(&#39;.github-auto-description&#39;);&#xA;        if (autoDescription) {&#xA;          autoDescription.style.display = &#39;none&#39;;&#xA;        }&#xA;      }&#xA;    });&#xA;  })();&#xA;  &lt;/script&gt;&#xA;&#xA;&lt;h2 id=&#34;タイトルについて&#34;&gt;タイトルについて&lt;/h2&gt;&#xA;&lt;p&gt;タイトルにつまずいているとつけましたが，つまずいてます．長い間同じ箇所でエラーがでて前に進めていません．&#xA;僕の魂の叫びがこちら．&lt;/p&gt;</description>
    </item>
    <item>
      <title>runcを使ってみる</title>
      <link>https://blog.terassyi.net/posts/runc/</link>
      <pubDate>Wed, 29 Apr 2020 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/runc/</guid>
      <description>&lt;p&gt;こんにちは．前回のポストからだいぶ時間が空きましたが，相変わらず緊急事態宣言中で自宅待機なので時間を持て余しています．&#xA;ONE PIECEを読み返していたんですが，無料で読める分を読み終わってしまったので暇です．&#xA;今回はdockerに使用されているコンテナランタイムである&lt;code&gt;runc&lt;/code&gt;を使ってみました．&#xA;では，いきます．&lt;/p&gt;</description>
    </item>
    <item>
      <title>セキュアなコンテナgVisor</title>
      <link>https://blog.terassyi.net/posts/gvisor/</link>
      <pubDate>Tue, 14 Apr 2020 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/gvisor/</guid>
      <description>&lt;p&gt;こんにちは．緊急事態宣言が出ているため相変わらず外出ができません．早く収束して欲しいものです．&#xA;今回はdocker関連の話題についてです．Googleが開発したgVisorというコンテナランタイムについて調べてみました．&lt;/p&gt;&#xA;&lt;h1 id=&#34;gvisor&#34;&gt;gVisor&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://gvisor.dev/&#34;&gt;gvisor.dev&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;github-card&#34; data-repo=&#34;google/gvisor&#34;&gt;&#xA;    &lt;a href=&#34;https://github.com/google/gvisor&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34; class=&#34;github-link&#34;&gt;&#xA;      &lt;div class=&#34;github-icon&#34;&gt;&#xA;        &lt;svg width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 16 16&#34; fill=&#34;currentColor&#34;&gt;&#xA;          &lt;path fill-rule=&#34;evenodd&#34; d=&#34;M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.03 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z&#34;/&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;div class=&#34;github-info&#34;&gt;&#xA;        &lt;div class=&#34;github-title&#34;&gt;google/gvisor&lt;/div&gt;&#xA;        &#xA;        &lt;div class=&#34;github-description github-auto-description&#34;&gt;Loading...&lt;/div&gt;&#xA;        &#xA;        &lt;div class=&#34;github-meta&#34;&gt;&#xA;          &lt;span class=&#34;github-language&#34; style=&#34;display: none;&#34;&gt;&#xA;            &lt;span class=&#34;language-dot&#34;&gt;&lt;/span&gt;&#xA;            &lt;span class=&#34;language-name&#34;&gt;&lt;/span&gt;&#xA;          &lt;/span&gt;&#xA;          &lt;span class=&#34;github-stat github-stars&#34; style=&#34;display: none;&#34;&gt;&#xA;            &lt;svg width=&#34;14&#34; height=&#34;14&#34; viewBox=&#34;0 0 16 16&#34; fill=&#34;currentColor&#34;&gt;&#xA;              &lt;path d=&#34;M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25z&#34;/&gt;&#xA;            &lt;/svg&gt;&#xA;            &lt;span class=&#34;stars-count&#34;&gt;&lt;/span&gt;&#xA;          &lt;/span&gt;&#xA;          &lt;span class=&#34;github-stat github-forks&#34; style=&#34;display: none;&#34;&gt;&#xA;            &lt;svg width=&#34;14&#34; height=&#34;14&#34; viewBox=&#34;0 0 16 16&#34; fill=&#34;currentColor&#34;&gt;&#xA;              &lt;path fill-rule=&#34;evenodd&#34; d=&#34;M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.25 2.25 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878z&#34;/&gt;&#xA;            &lt;/svg&gt;&#xA;            &lt;span class=&#34;forks-count&#34;&gt;&lt;/span&gt;&#xA;          &lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;div class=&#34;github-arrow&#34;&gt;&#xA;        &lt;svg width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 16 16&#34; fill=&#34;currentColor&#34;&gt;&#xA;          &lt;path fill-rule=&#34;evenodd&#34; d=&#34;M6.22 3.22a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06L9.94 8 6.22 4.28a.75.75 0 010-1.06z&#34;/&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/a&gt;&#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;style&gt;&#xA;  .github-card {&#xA;    margin: 1.5rem 0;&#xA;    border: 1px solid #e5e7eb;&#xA;    border-radius: 8px;&#xA;    overflow: hidden;&#xA;    background: #fff;&#xA;    transition: all 0.2s ease;&#xA;    font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial;&#xA;  }&#xA;&#xA;  .github-card:hover {&#xA;    border-color: #3b82f6;&#xA;    box-shadow: 0 4px 12px rgba(59, 130, 246, 0.15);&#xA;  }&#xA;&#xA;  .github-link {&#xA;    display: flex;&#xA;    align-items: center;&#xA;    padding: 16px;&#xA;    text-decoration: none;&#xA;    color: inherit;&#xA;    gap: 12px;&#xA;  }&#xA;&#xA;  .github-icon {&#xA;    flex-shrink: 0;&#xA;    color: #6b7280;&#xA;  }&#xA;&#xA;  .github-info {&#xA;    flex: 1;&#xA;    min-width: 0;&#xA;  }&#xA;&#xA;  .github-title {&#xA;    font-weight: 600;&#xA;    font-size: 14px;&#xA;    color: #111827;&#xA;    margin-bottom: 4px;&#xA;    word-break: break-all;&#xA;  }&#xA;&#xA;  .github-description {&#xA;    font-size: 13px;&#xA;    color: #6b7280;&#xA;    line-height: 1.4;&#xA;    margin-bottom: 8px;&#xA;    display: -webkit-box;&#xA;    -webkit-line-clamp: 2;&#xA;    -webkit-box-orient: vertical;&#xA;    overflow: hidden;&#xA;  }&#xA;&#xA;  .github-meta {&#xA;    display: flex;&#xA;    align-items: center;&#xA;    gap: 12px;&#xA;    font-size: 12px;&#xA;    color: #6b7280;&#xA;  }&#xA;&#xA;  .github-language {&#xA;    display: flex;&#xA;    align-items: center;&#xA;    gap: 4px;&#xA;  }&#xA;&#xA;  .language-dot {&#xA;    width: 12px;&#xA;    height: 12px;&#xA;    border-radius: 50%;&#xA;    display: inline-block;&#xA;  }&#xA;&#xA;  .github-stat {&#xA;    display: flex;&#xA;    align-items: center;&#xA;    gap: 3px;&#xA;  }&#xA;&#xA;  .github-stat svg {&#xA;    color: #6b7280;&#xA;  }&#xA;&#xA;  .github-arrow {&#xA;    flex-shrink: 0;&#xA;    color: #9ca3af;&#xA;    transition: transform 0.2s ease;&#xA;  }&#xA;&#xA;  .github-link:hover .github-arrow {&#xA;    transform: translateX(2px);&#xA;  }&#xA;&#xA;  @media (prefers-color-scheme: dark) {&#xA;    .github-card {&#xA;      background: #1f2937;&#xA;      border-color: #374151;&#xA;    }&#xA;&#xA;    .github-title {&#xA;      color: #f9fafb;&#xA;    }&#xA;&#xA;    .github-description,&#xA;    .github-meta {&#xA;      color: #d1d5db;&#xA;    }&#xA;&#xA;    .github-icon {&#xA;      color: #9ca3af;&#xA;    }&#xA;&#xA;    .github-stat svg {&#xA;      color: #9ca3af;&#xA;    }&#xA;  }&#xA;  &lt;/style&gt;&#xA;&#xA;  &lt;script&gt;&#xA;  (function() {&#xA;    const languageColors = {&#xA;      &#39;Go&#39;: &#39;#00ADD8&#39;,&#xA;      &#39;JavaScript&#39;: &#39;#f1e05a&#39;,&#xA;      &#39;TypeScript&#39;: &#39;#2b7489&#39;,&#xA;      &#39;Python&#39;: &#39;#3572a5&#39;,&#xA;      &#39;Java&#39;: &#39;#b07219&#39;,&#xA;      &#39;C&#39;: &#39;#555555&#39;,&#xA;      &#39;C++&#39;: &#39;#f34b7d&#39;,&#xA;      &#39;Rust&#39;: &#39;#dea584&#39;,&#xA;      &#39;Ruby&#39;: &#39;#701516&#39;,&#xA;      &#39;PHP&#39;: &#39;#4f5d95&#39;,&#xA;      &#39;Swift&#39;: &#39;#ffac45&#39;,&#xA;      &#39;Kotlin&#39;: &#39;#F18E33&#39;,&#xA;      &#39;Shell&#39;: &#39;#89e051&#39;,&#xA;      &#39;HTML&#39;: &#39;#e34c26&#39;,&#xA;      &#39;CSS&#39;: &#39;#1572B6&#39;&#xA;    };&#xA;&#xA;    const cards = document.querySelectorAll(&#39;.github-card&#39;);&#xA;&#xA;    cards.forEach(async (card) =&gt; {&#xA;      const repo = card.dataset.repo;&#xA;      if (!repo) return;&#xA;&#xA;      try {&#xA;        const response = await fetch(`https://api.github.com/repos/${repo}`);&#xA;        if (!response.ok) throw new Error(&#39;API request failed&#39;);&#xA;&#xA;        const data = await response.json();&#xA;&#xA;        &#xA;        const autoDescription = card.querySelector(&#39;.github-auto-description&#39;);&#xA;        if (autoDescription) {&#xA;          if (data.description) {&#xA;            autoDescription.textContent = data.description;&#xA;          } else {&#xA;            autoDescription.style.display = &#39;none&#39;;&#xA;          }&#xA;        }&#xA;&#xA;        &#xA;        const languageElement = card.querySelector(&#39;.github-language&#39;);&#xA;        const languageDot = card.querySelector(&#39;.language-dot&#39;);&#xA;        const languageName = card.querySelector(&#39;.language-name&#39;);&#xA;&#xA;        if (data.language) {&#xA;          languageName.textContent = data.language;&#xA;          languageDot.style.backgroundColor = languageColors[data.language] || &#39;#586069&#39;;&#xA;          languageElement.style.display = &#39;flex&#39;;&#xA;        }&#xA;&#xA;        &#xA;        const starsElement = card.querySelector(&#39;.github-stars&#39;);&#xA;        const starsCount = card.querySelector(&#39;.stars-count&#39;);&#xA;        if (data.stargazers_count !== undefined) {&#xA;          starsCount.textContent = data.stargazers_count.toLocaleString();&#xA;          starsElement.style.display = &#39;flex&#39;;&#xA;        }&#xA;&#xA;        &#xA;        const forksElement = card.querySelector(&#39;.github-forks&#39;);&#xA;        const forksCount = card.querySelector(&#39;.forks-count&#39;);&#xA;        if (data.forks_count !== undefined) {&#xA;          forksCount.textContent = data.forks_count.toLocaleString();&#xA;          forksElement.style.display = &#39;flex&#39;;&#xA;        }&#xA;&#xA;      } catch (error) {&#xA;        console.error(&#39;Error fetching GitHub data:&#39;, error);&#xA;        &#xA;        const autoDescription = card.querySelector(&#39;.github-auto-description&#39;);&#xA;        if (autoDescription) {&#xA;          autoDescription.style.display = &#39;none&#39;;&#xA;        }&#xA;      }&#xA;    });&#xA;  })();&#xA;  &lt;/script&gt;&#xA;&#xA;&lt;h2 id=&#34;documentを意訳&#34;&gt;Documentを意訳&lt;/h2&gt;&#xA;&lt;p&gt;gVisorとはGo言語で実装されたユーザー空間カーネルです．ほとんどのLinuxシステムコールインターフェースを実装しており，ホストOSと起動しているアプリケーションとの間に隔離層を設けることで安全性を実現しています．&#xA;gVisorには&lt;code&gt;runsc&lt;/code&gt;というOCI仕様に準拠したコンテナランタイムを含んでいます．&lt;code&gt;runsc&lt;/code&gt;はDockerやKubernetesで使用でき，簡単にサンドボックス化されたコンテナを実行できます．&#xA;gVisorは既存のサンドボックス化ツールと異なるアプローチを用いています．&lt;/p&gt;</description>
    </item>
    <item>
      <title>hello-from-terassyi</title>
      <link>https://blog.terassyi.net/posts/hello-world/</link>
      <pubDate>Wed, 01 Apr 2020 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/hello-world/</guid>
      <description>&lt;!-- more --&gt;&#xA;&lt;p&gt;welcome to my home page&lt;/p&gt;&#xA;&lt;h1 id=&#34;welcome&#34;&gt;Welcome!&lt;/h1&gt;&#xA;&lt;p&gt;This is terassyi&amp;rsquo;s home page.&lt;/p&gt;&#xA;&lt;h2 id=&#34;code&#34;&gt;code&lt;/h2&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;func&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#a6e22e&#34;&gt;fmt&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Hello from terassyi&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>ネットワークを作って理解しようとする(ARP編)</title>
      <link>https://blog.terassyi.net/posts/arp/</link>
      <pubDate>Wed, 01 Apr 2020 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/arp/</guid>
      <description>&lt;p&gt;こんにちは．&#xA;新型コロナの影響で外出を控えているのですが，ずっと自宅にいるのも結構しんどいですね．&#xA;この前見始めた鬼滅の刃ももう見終わってしまいました．続きが気になります．&#xA;さて，今回もネットワークシリーズです．&lt;/p&gt;&#xA;&lt;h2 id=&#34;ネットワークを作って理解する&#34;&gt;ネットワークを作って理解する&lt;/h2&gt;&#xA;&lt;p&gt;ネットワークの仕組みを理解するためには作ってみるのが一番ということでプロトコルスタックを自作してみます．&#xA;前回はEthernetを実装してみました．&lt;a href=&#34;https://terassyi.net/posts/2020/03/29/ethernet.html&#34;&gt;前回のポストはこちら&lt;/a&gt;&#xA;今回はデータリンク層のアドレスとネットワーク層のアドレスを解決するARPを実装してみたいと思います．使用言語はgolangです．&lt;/p&gt;</description>
    </item>
    <item>
      <title>ネットワークを作って理解しようとする(Ethernet編)</title>
      <link>https://blog.terassyi.net/posts/ethernet/</link>
      <pubDate>Sun, 29 Mar 2020 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/ethernet/</guid>
      <description>&lt;p&gt;こんにちは．&#xA;今週末は新型コロナの影響で外出自粛なので暇を持て余しております．&#xA;暇なのでNetflixで鬼滅の刃を見始めました．面白いですね〜．&lt;/p&gt;&#xA;&lt;h2 id=&#34;ネットワークを作って理解する&#34;&gt;ネットワークを作って理解する&lt;/h2&gt;&#xA;&lt;p&gt;最近の興味としてネットワークの仕組みを理解したいというのがあり，プロトコルスタック自作なるものを知りました．とはいえ僕はC言語が得意でないのでGo言語で作ってみようと思い作成を始めました．というわけて何回かに分けて紹介したいと思います．&lt;/p&gt;&#xA;&lt;h2 id=&#34;osi参照モデル&#34;&gt;OSI参照モデル&lt;/h2&gt;&#xA;&lt;p&gt;OSI参照モデルとはコンピュータの通信機能を階層構造に分割したモデルです．&#xA;各階層にはそれぞれが担うべき機能が定義されています．&#xA;データリンク層では隣接するノード間のデータの通信をサポートします．&#xA;&lt;img src=&#34;https://blog.terassyi.net/img/osi-model.png&#34; alt=&#34;osi-model&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;開発環境&#34;&gt;開発環境&lt;/h2&gt;&#xA;&lt;p&gt;開発環境は以下の通りです．&lt;code&gt;ioctl&lt;/code&gt;などのシステムコールを扱うためprivilegeオプションを有効にしたLinuxコンテナを作成してプログラムをビルドします．&#xA;また，実行はコンテナの中でネットワーク名前空間を分離して行います．&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Mac OS Catalina&lt;/li&gt;&#xA;&lt;li&gt;VSCode&lt;/li&gt;&#xA;&lt;li&gt;Docker version 19.03.5, build 633a0ea&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;実装&#34;&gt;実装&lt;/h2&gt;&#xA;&lt;p&gt;リポジトリは&lt;a href=&#34;https://github.com/terassyi/proto&#34;&gt;こちら&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;物理層からデータを受け取る&#34;&gt;物理層からデータを受け取る&lt;/h3&gt;&#xA;&lt;p&gt;今回のプログラムでは生のパケットを受け取る必要があります．golangの標準パッケージでは生のパケットを扱うことができないため別の方法で生のパケットを取得しなければいけません．そこで今回のプログラムでは以下の二つの方法で生のパケットを取得します．&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;PF_PACKET&lt;/li&gt;&#xA;&lt;li&gt;Tun/Tapデバイス&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h4 id=&#34;pf_packet&#34;&gt;PF_PACKET&lt;/h4&gt;&#xA;&lt;p&gt;PF_PACKETはLinuxのsocketシステムコールで生のパケットを扱うためのドメインです．syscallパッケージのSocket関数を用いて以下のようにソケットを開きます．&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;protocol&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;hton16&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;syscall&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ETH_P_ALL&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;fd&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;syscall&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;Socket&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;syscall&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;AF_PACKET&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;syscall&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;SOCK_RAW&lt;/span&gt;, int(&lt;span style=&#34;color:#a6e22e&#34;&gt;protocol&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;開いたソケットを用いてPFPacket構造体を定義します．&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;PFPacket&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;fd&lt;/span&gt;                 &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;               &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;address&lt;/span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;ethernet&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;HardwareAddress&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;netInfo&lt;/span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;ip&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;IPSubnetMask&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;registeredProtocol&lt;/span&gt; []&lt;span style=&#34;color:#a6e22e&#34;&gt;LinkNetProtocol&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;MTU&lt;/span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;buffer&lt;/span&gt;             &lt;span style=&#34;color:#66d9ef&#34;&gt;chan&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ethernet&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;EthernetFrame&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;tuntap&#34;&gt;Tun/Tap&lt;/h4&gt;&#xA;&lt;p&gt;Tun/TapはUnixで使用できる仮想ネットワークデバイスです．Tun/Tapデバイスに届いたパケットは直接ユーザープログラムに送られます．&#xA;Tun/Tapデバイスは以下のように開きます．&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;const&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;device&lt;/span&gt; = &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;/dev/net/tun&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;:=&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;OpenFile&lt;/span&gt;(&lt;span style=&#34;color:#a6e22e&#34;&gt;device&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;os&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;O_RDWR&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0600&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#66d9ef&#34;&gt;nil&lt;/span&gt;, &lt;span style=&#34;color:#a6e22e&#34;&gt;err&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;開いたファイルを用いてTun構造体を定義します．&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-go&#34; data-lang=&#34;go&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;type&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Tun&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;struct&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;file&lt;/span&gt;               &lt;span style=&#34;color:#a6e22e&#34;&gt;io&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;ReadWriteCloser&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt;               &lt;span style=&#34;color:#66d9ef&#34;&gt;string&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;address&lt;/span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;ethernet&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;HardwareAddress&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;netInfo&lt;/span&gt;            &lt;span style=&#34;color:#a6e22e&#34;&gt;ip&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;IPSubnetMask&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;registeredProtocol&lt;/span&gt; []&lt;span style=&#34;color:#a6e22e&#34;&gt;LinkNetProtocol&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;MTU&lt;/span&gt;                &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;buffer&lt;/span&gt;             &lt;span style=&#34;color:#66d9ef&#34;&gt;chan&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ethernet&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;EthernetFrame&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id=&#34;deviceインターフェース&#34;&gt;Deviceインターフェース&lt;/h4&gt;&#xA;&lt;p&gt;DeviceインターフェースでPF_PACKETとTunデバイスの差を吸収します．&lt;/p&gt;</description>
    </item>
    <item>
      <title>もろもろを移行する</title>
      <link>https://blog.terassyi.net/posts/blog-migration/</link>
      <pubDate>Sun, 29 Mar 2020 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/blog-migration/</guid>
      <description>&lt;h2 id=&#34;もろもろを移行する&#34;&gt;もろもろを移行する&lt;/h2&gt;&#xA;&lt;p&gt;僕個人が運用しているもろもろを移行します．&lt;/p&gt;&#xA;&lt;h3 id=&#34;移行するもの&#34;&gt;移行するもの&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ホームページ(これはほんとにひどい)&lt;/li&gt;&#xA;&lt;li&gt;ブログ&lt;/li&gt;&#xA;&lt;li&gt;twitterのID(名前変えただけ)&lt;/li&gt;&#xA;&lt;li&gt;GithubのID(名前変えただけ)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;動機&#34;&gt;動機&lt;/h3&gt;&#xA;&lt;p&gt;アウトプットの場としてブログを運用し始めたのですが，いざ記事を書こうとすると億劫になってなかなか手がすすみません．&#xA;原因は何かと考えた時にブログポストのために毎回WordpressのページにログインしたりMarkdownでかけないあたりだと思い立ちました．&#xA;そこでブログをMarkdownで書ける静的サイトジェネレータに移行しようと思いました．&#xA;ついでに最近しっくりきていなかった&lt;em&gt;spectrex02&lt;/em&gt;というハンドルネームも移行しようと考えてもろもろを移行してしまいます．&#xA;(&lt;em&gt;spextrex02&lt;/em&gt;というハンドルネームは元々僕が自費で初めて購入したHPのPCの製品名が由来)&lt;/p&gt;&#xA;&lt;h3 id=&#34;ホームページ&#34;&gt;ホームページ&lt;/h3&gt;&#xA;&lt;p&gt;これはひどいのでなくしちゃいます．&lt;/p&gt;&#xA;&lt;h3 id=&#34;ブログ&#34;&gt;ブログ&lt;/h3&gt;&#xA;&lt;p&gt;これまではWordpressをEC2上で動かしてました．&#xA;カスタムドメインを使用するのでRoute53にドメイン登録してたんですが結構費用がかかるんですよね．&#xA;かつWordpressだと記事書くのが結構めんどくさいのでMarkdownで書けるVuepressに移行します．&#xA;ReactのGatsbyにしようかと考えましたがReact分からなくてしっくりこなかったのでVueを使用したVuepressにしました．&#xA;テーマは&lt;a href=&#34;https://vuepress-theme-meteorlxy.meteorlxy.cn/posts/2019/02/27/theme-guide-en.html&#34;&gt;vuepress-theme-meteorlxy&lt;/a&gt;を使用しています．&#xA;ほとんど変わったことはしていないので導入は公式に従って進めました．&#xA;公開はGithub Pagesで行います．カスタムドメインやHTTPSにも対応してるしリポジトリのsettingページから簡単にできました．すごい．&lt;/p&gt;&#xA;&lt;h3 id=&#34;その他アカウント&#34;&gt;その他アカウント&lt;/h3&gt;&#xA;&lt;p&gt;TwitterやGithubのアカウント名も合わせて&lt;em&gt;spectrex02&lt;/em&gt;から&lt;em&gt;terassyi&lt;/em&gt;に変更しました．&lt;/p&gt;&#xA;&lt;h3 id=&#34;まとめ&#34;&gt;まとめ&lt;/h3&gt;&#xA;&lt;p&gt;ブログをvuepressに移行して爆速でポストできるようになった(はず)なのでこれから頑張りたいです．&#xA;vuepressもGithub Pagesも簡単でめっちゃいいです．&lt;/p&gt;</description>
    </item>
    <item>
      <title>ネットワークを作って理解しようとする(DHCP編)</title>
      <link>https://blog.terassyi.net/posts/rusdhcp/</link>
      <pubDate>Tue, 24 Mar 2020 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/rusdhcp/</guid>
      <description>&lt;p&gt;今回はDHCPプロトコルをサーバーを実装することで理解してみます．使用する言語はRustです．普段はGoを書いていますが，新しい言語としてRustの勉強を始めたため学習のため選択しました．Rustは&lt;a href=&#34;https://doc.rust-jp.rs/book/second-edition/&#34;&gt;プログラミング言語Rust&lt;/a&gt;を一通り読んだだけで実際にプログラムを書いたことはほどんどありません．なので読みにくいです．ちなみにモチベ維持のため作りながら書いてます．&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;リポジトリ &lt;a href=&#34;https://github.com/terassyi/rusdhcp&#34;&gt;rusdhcp&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;github-card&#34; data-repo=&#34;terassyi/rusdhcp&#34;&gt;&#xA;    &lt;a href=&#34;https://github.com/terassyi/rusdhcp&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34; class=&#34;github-link&#34;&gt;&#xA;      &lt;div class=&#34;github-icon&#34;&gt;&#xA;        &lt;svg width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 16 16&#34; fill=&#34;currentColor&#34;&gt;&#xA;          &lt;path fill-rule=&#34;evenodd&#34; d=&#34;M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.03 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z&#34;/&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;div class=&#34;github-info&#34;&gt;&#xA;        &lt;div class=&#34;github-title&#34;&gt;terassyi/rusdhcp&lt;/div&gt;&#xA;        &#xA;        &lt;div class=&#34;github-description github-auto-description&#34;&gt;Loading...&lt;/div&gt;&#xA;        &#xA;        &lt;div class=&#34;github-meta&#34;&gt;&#xA;          &lt;span class=&#34;github-language&#34; style=&#34;display: none;&#34;&gt;&#xA;            &lt;span class=&#34;language-dot&#34;&gt;&lt;/span&gt;&#xA;            &lt;span class=&#34;language-name&#34;&gt;&lt;/span&gt;&#xA;          &lt;/span&gt;&#xA;          &lt;span class=&#34;github-stat github-stars&#34; style=&#34;display: none;&#34;&gt;&#xA;            &lt;svg width=&#34;14&#34; height=&#34;14&#34; viewBox=&#34;0 0 16 16&#34; fill=&#34;currentColor&#34;&gt;&#xA;              &lt;path d=&#34;M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25z&#34;/&gt;&#xA;            &lt;/svg&gt;&#xA;            &lt;span class=&#34;stars-count&#34;&gt;&lt;/span&gt;&#xA;          &lt;/span&gt;&#xA;          &lt;span class=&#34;github-stat github-forks&#34; style=&#34;display: none;&#34;&gt;&#xA;            &lt;svg width=&#34;14&#34; height=&#34;14&#34; viewBox=&#34;0 0 16 16&#34; fill=&#34;currentColor&#34;&gt;&#xA;              &lt;path fill-rule=&#34;evenodd&#34; d=&#34;M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.25 2.25 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878z&#34;/&gt;&#xA;            &lt;/svg&gt;&#xA;            &lt;span class=&#34;forks-count&#34;&gt;&lt;/span&gt;&#xA;          &lt;/span&gt;&#xA;        &lt;/div&gt;&#xA;      &lt;/div&gt;&#xA;      &lt;div class=&#34;github-arrow&#34;&gt;&#xA;        &lt;svg width=&#34;16&#34; height=&#34;16&#34; viewBox=&#34;0 0 16 16&#34; fill=&#34;currentColor&#34;&gt;&#xA;          &lt;path fill-rule=&#34;evenodd&#34; d=&#34;M6.22 3.22a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06L9.94 8 6.22 4.28a.75.75 0 010-1.06z&#34;/&gt;&#xA;        &lt;/svg&gt;&#xA;      &lt;/div&gt;&#xA;    &lt;/a&gt;&#xA;  &lt;/div&gt;&#xA;&#xA;  &lt;style&gt;&#xA;  .github-card {&#xA;    margin: 1.5rem 0;&#xA;    border: 1px solid #e5e7eb;&#xA;    border-radius: 8px;&#xA;    overflow: hidden;&#xA;    background: #fff;&#xA;    transition: all 0.2s ease;&#xA;    font-family: -apple-system, BlinkMacSystemFont, &#34;Segoe UI&#34;, &#34;Noto Sans&#34;, Helvetica, Arial;&#xA;  }&#xA;&#xA;  .github-card:hover {&#xA;    border-color: #3b82f6;&#xA;    box-shadow: 0 4px 12px rgba(59, 130, 246, 0.15);&#xA;  }&#xA;&#xA;  .github-link {&#xA;    display: flex;&#xA;    align-items: center;&#xA;    padding: 16px;&#xA;    text-decoration: none;&#xA;    color: inherit;&#xA;    gap: 12px;&#xA;  }&#xA;&#xA;  .github-icon {&#xA;    flex-shrink: 0;&#xA;    color: #6b7280;&#xA;  }&#xA;&#xA;  .github-info {&#xA;    flex: 1;&#xA;    min-width: 0;&#xA;  }&#xA;&#xA;  .github-title {&#xA;    font-weight: 600;&#xA;    font-size: 14px;&#xA;    color: #111827;&#xA;    margin-bottom: 4px;&#xA;    word-break: break-all;&#xA;  }&#xA;&#xA;  .github-description {&#xA;    font-size: 13px;&#xA;    color: #6b7280;&#xA;    line-height: 1.4;&#xA;    margin-bottom: 8px;&#xA;    display: -webkit-box;&#xA;    -webkit-line-clamp: 2;&#xA;    -webkit-box-orient: vertical;&#xA;    overflow: hidden;&#xA;  }&#xA;&#xA;  .github-meta {&#xA;    display: flex;&#xA;    align-items: center;&#xA;    gap: 12px;&#xA;    font-size: 12px;&#xA;    color: #6b7280;&#xA;  }&#xA;&#xA;  .github-language {&#xA;    display: flex;&#xA;    align-items: center;&#xA;    gap: 4px;&#xA;  }&#xA;&#xA;  .language-dot {&#xA;    width: 12px;&#xA;    height: 12px;&#xA;    border-radius: 50%;&#xA;    display: inline-block;&#xA;  }&#xA;&#xA;  .github-stat {&#xA;    display: flex;&#xA;    align-items: center;&#xA;    gap: 3px;&#xA;  }&#xA;&#xA;  .github-stat svg {&#xA;    color: #6b7280;&#xA;  }&#xA;&#xA;  .github-arrow {&#xA;    flex-shrink: 0;&#xA;    color: #9ca3af;&#xA;    transition: transform 0.2s ease;&#xA;  }&#xA;&#xA;  .github-link:hover .github-arrow {&#xA;    transform: translateX(2px);&#xA;  }&#xA;&#xA;  @media (prefers-color-scheme: dark) {&#xA;    .github-card {&#xA;      background: #1f2937;&#xA;      border-color: #374151;&#xA;    }&#xA;&#xA;    .github-title {&#xA;      color: #f9fafb;&#xA;    }&#xA;&#xA;    .github-description,&#xA;    .github-meta {&#xA;      color: #d1d5db;&#xA;    }&#xA;&#xA;    .github-icon {&#xA;      color: #9ca3af;&#xA;    }&#xA;&#xA;    .github-stat svg {&#xA;      color: #9ca3af;&#xA;    }&#xA;  }&#xA;  &lt;/style&gt;&#xA;&#xA;  &lt;script&gt;&#xA;  (function() {&#xA;    const languageColors = {&#xA;      &#39;Go&#39;: &#39;#00ADD8&#39;,&#xA;      &#39;JavaScript&#39;: &#39;#f1e05a&#39;,&#xA;      &#39;TypeScript&#39;: &#39;#2b7489&#39;,&#xA;      &#39;Python&#39;: &#39;#3572a5&#39;,&#xA;      &#39;Java&#39;: &#39;#b07219&#39;,&#xA;      &#39;C&#39;: &#39;#555555&#39;,&#xA;      &#39;C++&#39;: &#39;#f34b7d&#39;,&#xA;      &#39;Rust&#39;: &#39;#dea584&#39;,&#xA;      &#39;Ruby&#39;: &#39;#701516&#39;,&#xA;      &#39;PHP&#39;: &#39;#4f5d95&#39;,&#xA;      &#39;Swift&#39;: &#39;#ffac45&#39;,&#xA;      &#39;Kotlin&#39;: &#39;#F18E33&#39;,&#xA;      &#39;Shell&#39;: &#39;#89e051&#39;,&#xA;      &#39;HTML&#39;: &#39;#e34c26&#39;,&#xA;      &#39;CSS&#39;: &#39;#1572B6&#39;&#xA;    };&#xA;&#xA;    const cards = document.querySelectorAll(&#39;.github-card&#39;);&#xA;&#xA;    cards.forEach(async (card) =&gt; {&#xA;      const repo = card.dataset.repo;&#xA;      if (!repo) return;&#xA;&#xA;      try {&#xA;        const response = await fetch(`https://api.github.com/repos/${repo}`);&#xA;        if (!response.ok) throw new Error(&#39;API request failed&#39;);&#xA;&#xA;        const data = await response.json();&#xA;&#xA;        &#xA;        const autoDescription = card.querySelector(&#39;.github-auto-description&#39;);&#xA;        if (autoDescription) {&#xA;          if (data.description) {&#xA;            autoDescription.textContent = data.description;&#xA;          } else {&#xA;            autoDescription.style.display = &#39;none&#39;;&#xA;          }&#xA;        }&#xA;&#xA;        &#xA;        const languageElement = card.querySelector(&#39;.github-language&#39;);&#xA;        const languageDot = card.querySelector(&#39;.language-dot&#39;);&#xA;        const languageName = card.querySelector(&#39;.language-name&#39;);&#xA;&#xA;        if (data.language) {&#xA;          languageName.textContent = data.language;&#xA;          languageDot.style.backgroundColor = languageColors[data.language] || &#39;#586069&#39;;&#xA;          languageElement.style.display = &#39;flex&#39;;&#xA;        }&#xA;&#xA;        &#xA;        const starsElement = card.querySelector(&#39;.github-stars&#39;);&#xA;        const starsCount = card.querySelector(&#39;.stars-count&#39;);&#xA;        if (data.stargazers_count !== undefined) {&#xA;          starsCount.textContent = data.stargazers_count.toLocaleString();&#xA;          starsElement.style.display = &#39;flex&#39;;&#xA;        }&#xA;&#xA;        &#xA;        const forksElement = card.querySelector(&#39;.github-forks&#39;);&#xA;        const forksCount = card.querySelector(&#39;.forks-count&#39;);&#xA;        if (data.forks_count !== undefined) {&#xA;          forksCount.textContent = data.forks_count.toLocaleString();&#xA;          forksElement.style.display = &#39;flex&#39;;&#xA;        }&#xA;&#xA;      } catch (error) {&#xA;        console.error(&#39;Error fetching GitHub data:&#39;, error);&#xA;        &#xA;        const autoDescription = card.querySelector(&#39;.github-auto-description&#39;);&#xA;        if (autoDescription) {&#xA;          autoDescription.style.display = &#39;none&#39;;&#xA;        }&#xA;      }&#xA;    });&#xA;  })();&#xA;  &lt;/script&gt;</description>
    </item>
    <item>
      <title>今更2019年まとめ</title>
      <link>https://blog.terassyi.net/posts/sumalize2019/</link>
      <pubDate>Sun, 09 Feb 2020 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/sumalize2019/</guid>
      <description></description>
    </item>
    <item>
      <title>セキュリティ・ミニキャンプ in 福岡 2019 秋 に参加しました</title>
      <link>https://blog.terassyi.net/posts/seccampfuk/</link>
      <pubDate>Fri, 13 Sep 2019 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/seccampfuk/</guid>
      <description></description>
    </item>
    <item>
      <title>セキュリティキャンプ全国大会2019に参加しました</title>
      <link>https://blog.terassyi.net/posts/seccamp/</link>
      <pubDate>Sun, 01 Sep 2019 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/posts/seccamp/</guid>
      <description>&lt;p&gt;終了して3週間ほど経ってしまいましたが、遅ればせながら参加記を書きます。キャンプは8/13~8/17で開催されたのですが、終了後バタバタしていたため参加記を書くに書けず今になってしまいました。ここまで遅れてしまうと他の参加者の皆さんが書き尽くしていると思うので手短に報告したいと思います。&lt;/p&gt;</description>
    </item>
    <item>
      <title>About</title>
      <link>https://blog.terassyi.net/page/about/</link>
      <pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>iscale821@gmail.com (terassyi)</author>
      <guid>https://blog.terassyi.net/page/about/</guid>
      <description>&lt;h2 id=&#34;about-me&#34;&gt;About me&lt;/h2&gt;&#xA;&lt;p&gt;I&amp;rsquo;m terassyi and a software engineer.&#xA;I love eBPF and Kubernetes Networking.&lt;/p&gt;&#xA;&lt;h3 id=&#34;career&#34;&gt;Career&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2022/03: Master degree in Computer Engineering&lt;/li&gt;&#xA;&lt;li&gt;2022/04: Software Engineer specializing in Kubernetes Networking&lt;/li&gt;&#xA;&lt;/ul&gt;</description>
    </item>
  </channel>
</rss>
