<?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>空中浮遊。</title>
    <link>https://www.0x2o.net/</link>
    <description>Twitter的Ui</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>ja-jp</language>
    <lastBuildDate>Wed, 29 Apr 2026 18:13:03 +0000</lastBuildDate><atom:link href="https://www.0x2o.net/index.xml" rel="self" type="application/rss+xml" />
    <image>
      <url>https://www.0x2o.net/images/image.png</url>
      <title>空中浮遊。</title>
      <link>https://www.0x2o.net/</link>
    </image><item>
      <title>Wifiルーターを改造するとLinuxマシンとして使えるらしい。</title>
      <link>https://www.0x2o.net/nananankona/status/22/</link>
      <pubDate>Wed, 20 Aug 2025 00:00:00 +0900</pubDate>
      <author>こな</author>
      <guid isPermaLink="true">https://www.0x2o.net/nananankona/status/22/</guid>
      <description>中古で格安入手したWi-Fiルーター「WRC-1167GS2」をOpenWrt化し、Linuxマシンとして活用するまでの手順や注意点をまとめました。</description>
      <content:encoded><![CDATA[<hr>
<p>今回は、二年前に中古で550円で手に入れたWRC-1167GS2というWifiルーターに、OpenWrtを導入してSSHで操作できるように改造してみます。
　</p>
<p>この記事では、以下の流れで進めていきます。
　</p>
<ol>
<li><strong>WRC-1167GS2について簡単に紹介</strong></li>
<li><strong>OpenWrtの導入準備</strong></li>
<li><strong>ファームウェアの書き換え手順</strong></li>
<li><strong>SSHでの接続確認</strong></li>
<li><strong>まとめ・感想</strong></li>
</ol>
<p>　</p>
<blockquote>
<p><strong>注意事項</strong></p>
<ul>
<li>本記事の内容は自己責任で行ってください。</li>
<li>当たり前ですが、ファームウェアの書き換えや改造は、失敗すると文鎮化したり、メーカー保証が受けられなくなります。</li>
<li>作業前に十分な情報収集をおすすめします。</li>
<li>記事の内容によって生じた損害等について、筆者は一切の責任を負いません。</li>
</ul></blockquote>
<p>それでは、やっていきましょう。</p>
<hr>
<h2 id="1-wrc-1167gs2について">1. WRC-1167GS2について</h2>
<p>WRC-1167GS2はエレコムが2019年10月上旬に発売した無線LANルーターです。<br>
OpenWrtに対応しているため、遊びや実験用途にもぴったりの機種です。</p>
<h3 id="公式仕様">公式仕様</h3>
<div class="overflow-x-auto my-6">
  <table class="min-w-full bg-white dark:bg-dark-card rounded-lg overflow-hidden shadow-lg">
    <thead class="bg-gray-100 dark:bg-gray-700">
      <tr>
        <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">項目</th>
        <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">仕様</th>
        <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">備考</th>
      </tr>
    </thead>
    <tbody class="divide-y divide-gray-200 dark:divide-gray-600">
      <tr>
        <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 dark:text-gray-100">消費電力</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-green-600 dark:text-green-400">8.4W(最大)</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-yellow-600 dark:text-yellow-400"></td>
      </tr>
      <tr class="bg-gray-50 dark:bg-gray-800">
        <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 dark:text-gray-100">有線規格</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-green-600 dark:text-green-400">IEEE 802.3ab(1000BASE-T)、IEEE 802.3u(100BASE-TX)、IEEE 802.3(10BASE-T)準拠</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-red-600 dark:text-red-400"></td>
      </tr>
      <tr>
        <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 dark:text-gray-100">有線コネクター</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-green-600 dark:text-green-400">WAN：RJ-45型8極×1ポート、LAN：RJ-45型8極×4ポート</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-red-600 dark:text-red-400">全ポートAuto MDI/MDI-X、Auto-Negotiation対応</td>
      </tr>
      <tr class="bg-gray-50 dark:bg-gray-800">
        <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 dark:text-gray-100">有線伝送速度(WAN)</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-green-600 dark:text-green-400">1000Mbps、100Mbps、10Mbps</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-yellow-600 dark:text-yellow-400"></td>
      </tr>
      <tr>
        <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 dark:text-gray-100">有線伝送速度(LAN)</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-green-600 dark:text-green-400">1000Mbps、100Mbps、10Mbps</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-yellow-600 dark:text-yellow-400"></td>
      </tr>
      <tr class="bg-gray-50 dark:bg-gray-800">
        <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 dark:text-gray-100">無線規格</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-green-600 dark:text-green-400">IEEE 802.11ac、IEEE 802.11n、IEEE 802.11a、IEEE 802.11b、IEEE 802.11g準拠</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-red-600 dark:text-red-400"></td>
      </tr>
      <tr>
        <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 dark:text-gray-100">無線伝送方式</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-green-600 dark:text-green-400">IEEE 802.11ac：MIMO-OFDM、IEEE 802.11n：MIMO-OFDM、IEEE 802.11g：OFDM、IEEE 802.11b：DS-SS、IEEE 802.11a：OFDM</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-yellow-600 dark:text-yellow-400"></td>
      </tr>
      <tr class="bg-gray-50 dark:bg-gray-800">
        <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 dark:text-gray-100">無線伝送速度(理論値)</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-green-600 dark:text-green-400">IEEE802.11ac ： 最大867Mbps / IEEE802.11n ： 最大300Mbps / IEEE802.11g ： 最大54Mbps / IEEE802.11b ： 最大11Mbps / IEEE802.11a ： 最大54Mbps</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-red-600 dark:text-red-400"></td>
      </tr>
      <tr>
        <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 dark:text-gray-100">周波数帯域</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-green-600 dark:text-green-400">2.4GHz帯：2,400～2,484MHz、5.2GHz帯(W52)：5,150～5,250MHz、5.3GHz帯(W53)：5,250～5,350MHz、5.6GHz帯(W56)：5,470～5,725MHz</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-yellow-600 dark:text-yellow-400"></td>
      </tr>
      <tr class="bg-gray-50 dark:bg-gray-800">
        <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 dark:text-gray-100">チャンネル</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-green-600 dark:text-green-400">2.4GHz帯：1～13ch、5GHz帯(W52/W53/W56)：36/40/44/48/52/56/60/64/100/104/108/112/116/120/124/128/132/136/140ch</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-red-600 dark:text-red-400"></td>
      </tr>
      <tr>
        <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 dark:text-gray-100">無線セキュリティ</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-green-600 dark:text-green-400">WPA2-PSK(AES)、WPA-PSK(TKIP)、WEP(64bit/128bit)</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-yellow-600 dark:text-yellow-400"></td>
      </tr>
    </tbody>
  </table>
</div>
<p><a href="https://www.elecom.co.jp/products/WRC-1167GS2-B.html">elecom公式サイト</a> から引用
　</p>
<h2 id="2-openwrtの導入準備">2. OpenWrtの導入準備</h2>
<p>まずは、<a href="https://firmware-selector.openwrt.org/">こ↑こ↓</a> にアクセスし、WRC-1167GS2用のファームウェアをダウンロードします。</p>
<p><img src="/upload/22/fw-select-01.png" alt="fw-select-01"></p>
<p>モデル名のところに自分の機種（今回はWRC-1167GS2-B）を入力</p>
<p><img src="/upload/22/fw-select-02.png" alt="fw-select-02"></p>
<p>ダウンロードするファイルは真ん中の<strong>factory</strong>イメージです。<br>
（既にOpenWrtが導入されている場合は「sysupgrade」イメージを使います）</p>
<p>また、ルーターとPCをLANケーブルで接続し、PCのIPアドレスを「192.168.2.10」など、ルーターと同じセグメントに設定しておきます。</p>
<h2 id="3-ファームウェアの書き換え">3. ファームウェアの書き換え</h2>
<p>ルーターの管理画面（今回は http://192.168.25.12）にアクセスし、ログインします。</p>
<p><img src="/upload/22/ofw-01.png" alt="ofw-01">
その他の設定 -&gt;
<img src="/upload/22/ofw-02.png" alt="ofw-02">
ファームウェア更新 -&gt;
<img src="/upload/22/ofw-03.png" alt="ofw-03">
ローカルファイル指定 -&gt;
<img src="/upload/22/ofw-04.png" alt="ofw-04">
先ほどダウンロードしたファームウェアを選択し適用
<img src="/upload/22/ofw-05.png" alt="ofw-05">
この表示出てしばらくすると書き換えが完了し、ルーターが自動的に再起動します。</p>
<p>※ 書き換え中に電源落とすと多分文鎮化します。
　</p>
<h2 id="4webパネル">4.Webパネル</h2>
<p>WebUiにアクセス&hellip;と思ったら、ネットワーク上のデバイスにいらっしゃらない&hellip;
ぶち壊したか?!
と、色々試行錯誤していたら、Wifiルーターに直接LANとPCを接続したら管理画面に接続できました。
　
気を取り直して、<code>http://192.168.1.1</code>でログイン画面が表示されました
<img src="/upload/22/cfw-01.png" alt="cfw-01">
デフォルトユーザ名は<code>root</code>でパスワードはなしです。
<img src="/upload/22/cfw-02.png" alt="cfw-02">
とりあえずメインPCからアクセスしたいので、2.5G帯をとりあえず有効にしました
あとは好きに触るだけです。
　</p>
<h2 id="5-sshでの接続確認">5. SSHでの接続確認</h2>
<p>ssh接続できるらしいので接続してみます。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-cmd" data-lang="cmd"><span style="display:flex;"><span>C:\Windows\System32<span style="color:#75715e">&gt;ssh root@192.168.1.1</span>
</span></span><span style="display:flex;"><span>root@192.168.1.1&#39;s password:
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>BusyBox v1.36.1 (2025-06-23 20:40:36 UTC) built-in shell (ash)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  _______                     ________        __
</span></span><span style="display:flex;"><span> |       |.-----.-----.-----.|  |  |  |.----.|  |_
</span></span><span style="display:flex;"><span> |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
</span></span><span style="display:flex;"><span> |_______||   __|_____|__|__||________||__|  |____|
</span></span><span style="display:flex;"><span>          |__| W I R E L E S S   F R E E D O M
</span></span><span style="display:flex;"><span> -----------------------------------------------------
</span></span><span style="display:flex;"><span> OpenWrt 24.10.2, r28739-d9340319c6
</span></span><span style="display:flex;"><span> -----------------------------------------------------
</span></span><span style="display:flex;"><span>root@OpenWrt:~# pwd
</span></span><span style="display:flex;"><span>/root
</span></span></code></pre></div><p>無事にSSH接続が成功し、OpenWrtのターミナルが表示されました。
これで、だたのWi-Fiルーターから、Linuxをベースの自由度の高い小さなPCと変貌を遂げました。
　
いくつかコマンドを実行してスペックを確認してみます。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>root@OpenWrt:~# uname -a
</span></span><span style="display:flex;"><span>Linux OpenWrt 6.6.93 <span style="color:#75715e">#0 SMP Mon Jun 23 20:40:36 2025 mips GNU/Linux</span>
</span></span><span style="display:flex;"><span>root@OpenWrt:~# free
</span></span><span style="display:flex;"><span>              total        used        free      shared  buff/cache   available
</span></span><span style="display:flex;"><span>Mem:         <span style="color:#ae81ff">119256</span>       <span style="color:#ae81ff">53076</span>       <span style="color:#ae81ff">39480</span>         <span style="color:#ae81ff">428</span>       <span style="color:#ae81ff">26700</span>       <span style="color:#ae81ff">28040</span>
</span></span><span style="display:flex;"><span>Swap:             <span style="color:#ae81ff">0</span>           <span style="color:#ae81ff">0</span>           <span style="color:#ae81ff">0</span>
</span></span><span style="display:flex;"><span>root@OpenWrt:~# df -h
</span></span><span style="display:flex;"><span>Filesystem                Size      Used Available Use% Mounted on
</span></span><span style="display:flex;"><span>/dev/root                 4.3M      4.3M         <span style="color:#ae81ff">0</span> 100% /rom
</span></span><span style="display:flex;"><span>tmpfs                    58.2M    428.0K     57.8M   1% /tmp
</span></span><span style="display:flex;"><span>/dev/mtdblock6            3.7M    344.0K      3.4M   9% /overlay
</span></span><span style="display:flex;"><span>overlayfs:/overlay        3.7M    344.0K      3.4M   9% /
</span></span><span style="display:flex;"><span>tmpfs                   512.0K         <span style="color:#ae81ff">0</span>    512.0K   0% /dev
</span></span></code></pre></div><p>OS、メモリ、ストレージ情報</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>root@OpenWrt:~# opkg update <span style="color:#f92672">&amp;&amp;</span> opkg install bash
</span></span><span style="display:flex;"><span>Downloading https://downloads.openwrt.org/release...
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span>Signature check passed.
</span></span><span style="display:flex;"><span>Package bash <span style="color:#f92672">(</span>5.2.32-r1<span style="color:#f92672">)</span> installed in root is up to date.
</span></span><span style="display:flex;"><span>root@OpenWrt:~# wget --no-check-certificate -O /usr/bin/neofetch <span style="color:#e6db74">&#34;https://raw.githubusercontent.com/dylanaraps/neofetch/
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">master/neofetch&#34;</span>
</span></span><span style="display:flex;"><span>d +x /usr/bin/neofetchDownloading <span style="color:#e6db74">&#39;https://raw.githubusercontent.com/dylanaraps/neofetch/master/neofetch&#39;</span>
</span></span><span style="display:flex;"><span>Connecting to xxx:xxx:xxx:xxx
</span></span><span style="display:flex;"><span>Writing to <span style="color:#e6db74">&#39;/usr/bin/neofetch&#39;</span>
</span></span><span style="display:flex;"><span>/usr/bin/neofetch    100% |*******************************|   368k  0:00:00 ETA
</span></span><span style="display:flex;"><span>Download completed <span style="color:#f92672">(</span><span style="color:#ae81ff">376936</span> bytes<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>root@OpenWrt:~# chmod +x /usr/bin/neofetch
</span></span><span style="display:flex;"><span>root@OpenWrt:~# neofetch
</span></span><span style="display:flex;"><span> _______                       root@OpenWrt
</span></span><span style="display:flex;"><span>|       |.-----.-----.-----.   ------------
</span></span><span style="display:flex;"><span>|   -   <span style="color:#f92672">||</span>  _  |  -__|     |   OS: OpenWrt 24.10.2 mips
</span></span><span style="display:flex;"><span>|_______<span style="color:#f92672">||</span>   __|_____|__|__|   Host: ELECOM WRC-1167GS2-B
</span></span><span style="display:flex;"><span>         |__|                  Kernel: 6.6.93
</span></span><span style="display:flex;"><span> ________        __            Uptime: <span style="color:#ae81ff">1</span> hour, <span style="color:#ae81ff">31</span> mins
</span></span><span style="display:flex;"><span>|  |  |  |.----.|  |_          Packages: <span style="color:#ae81ff">152</span> <span style="color:#f92672">(</span>opkg<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>|  |  |  <span style="color:#f92672">||</span>   _<span style="color:#f92672">||</span>   _|         Shell: ash
</span></span><span style="display:flex;"><span>|________<span style="color:#f92672">||</span>__|  |____|         Terminal: /dev/pts/0
</span></span><span style="display:flex;"><span>                               CPU: MIPS 1004Kc V2.15 <span style="color:#f92672">(</span>4<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>                               Memory: 95MiB / 116MiB
</span></span></code></pre></div><p>neofetch入れてみた (pfetchとかのほうがよさそう)</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>wget --no-check-certificate -O /usr/bin/pfetch <span style="color:#e6db74">&#34;https://raw.githubusercontent.com/dylanaraps/pfetch/master/pfetch&#34;</span>
</span></span><span style="display:flex;"><span>chmod +x /usr/bin/pfetch
</span></span></code></pre></div><p>pfechインストール用
(これnodejsとかも入っちまうのでは&hellip;?!)
　
何に使えるかはわからないですけど面白いですね。
パッケージマネージャはopegが入ってました
sudoなどのコマンドは削られてました。
ストレージが16MBでRAMが128MBしかないですから仕方がないですね。(多い方ですけど)
　</p>
<h2 id="6-まとめ感想">6. まとめ・感想</h2>
<p>純正のFWよりOpenWrtの方が設定めっちゃ細かくできて自由度高い（電波法に注意）
でもストレージが激狭だからソフト入れるときは選びまくらないとダメそう
　
元々ただのWi-Fiルーターだったのが、簡易Linuxマシンとして生まれ変わったことに感動しました！
OSSでWi-Fiルーターを改造するプロジェクトがあるとは思わなかったので、別の機種でも試してみようかなと思っています。次はUSB接続に対応したルーターで遊んでみたいです。</p>
]]></content:encoded>
      <category>改造</category>
      <category>OSS</category>
      <category>OpenWrt</category>
      <category>ネットワーク</category>
    </item><item>
      <title>Nananankonas</title>
      <link>https://www.0x2o.net/nananankona/</link>
      <pubDate>Wed, 20 Aug 2025 00:00:00 +0900</pubDate>
      <author>こな</author>
      <guid isPermaLink="true">https://www.0x2o.net/nananankona/</guid>
      <description></description>
      <content:encoded><![CDATA[]]></content:encoded>
    </item><item>
      <title>2009年のYouTubeを再現したOSSを構築してみた話</title>
      <link>https://www.0x2o.net/nananankona/status/21/</link>
      <pubDate>Mon, 18 Aug 2025 00:00:00 +0900</pubDate>
      <author>こな</author>
      <guid isPermaLink="true">https://www.0x2o.net/nananankona/status/21/</guid>
      <description>2009年当時のYouTubeを再現したOSS「yt2009」を実際に構築してみたので、その手順や感想をまとめました。</description>
      <content:encoded><![CDATA[<h2 id="はじめに">はじめに</h2>
<p>はじめまして、こなです！
今回、初めてブログを書いてみます。
どうぞよろしくお願いします。
　
2009年のYouTubeを再現したOSSプロジェクト「<a href="https://github.com/ftde0/yt2009">yt2009</a>」を見つけたので、
実際にローカル環境で構築してみたので、その手順などをまとめてみます！</p>
<hr>
<h2 id="検証環境">検証環境</h2>
<ul>
<li>OS: Windows 11 25H2 Dev</li>
<li>CPU: 13th Gen Intel(R) Core(TM) i5-13400</li>
<li>RAM: 48GB</li>
<li>Nodejs: v20.18.2</li>
</ul>
<hr>
<h2 id="前提条件">前提条件</h2>
<ul>
<li><a href="https://git-scm.com/">Git</a> がインストールされていること</li>
<li><a href="https://nodejs.org/">Node.js</a>（v18以上推奨）がインストールされていること</li>
<li>ffmpeg にパスが通っていること</li>
<li><a href="https://imagemagick.org/script/download.php#windows">ImageMagick</a> がインストールされていること</li>
</ul>
<hr>
<h2 id="構築手順">構築手順</h2>
<ol>
<li>リポジトリをクローン</li>
<li>依存パッケージをインストール</li>
<li>各種設定</li>
<li>起動</li>
</ol>
<hr>
<p>　
まずは、リポジトリをローカルに落とし、ディレクトリに移動します。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>git clone https://github.com/ftde0/yt2009.git <span style="color:#f92672">&amp;&amp;</span> cd yt2009
</span></span></code></pre></div><p>実行結果</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>D:<span style="color:#ae81ff">\&gt;</span>git clone https://github.com/ftde0/yt2009.git
</span></span><span style="display:flex;"><span>Cloning into <span style="color:#e6db74">&#39;yt2009&#39;</span>...
</span></span><span style="display:flex;"><span>remote: Enumerating objects: 3150, <span style="color:#66d9ef">done</span>.
</span></span><span style="display:flex;"><span>remote: Counting objects: 100% <span style="color:#f92672">(</span>901/901<span style="color:#f92672">)</span>, <span style="color:#66d9ef">done</span>.
</span></span><span style="display:flex;"><span>remote: Compressing objects: 100% <span style="color:#f92672">(</span>219/219<span style="color:#f92672">)</span>, <span style="color:#66d9ef">done</span>.
</span></span><span style="display:flex;"><span>remote: Total <span style="color:#ae81ff">3150</span> <span style="color:#f92672">(</span>delta 781<span style="color:#f92672">)</span>, reused <span style="color:#ae81ff">701</span> <span style="color:#f92672">(</span>delta 678<span style="color:#f92672">)</span>, pack-reused <span style="color:#ae81ff">2249</span> <span style="color:#f92672">(</span>from 2<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>Receiving objects: 100% <span style="color:#f92672">(</span>3150/3150<span style="color:#f92672">)</span>, 84.62 MiB | 19.99 MiB/s, <span style="color:#66d9ef">done</span>.
</span></span><span style="display:flex;"><span>Resolving deltas: 100% <span style="color:#f92672">(</span>2094/2094<span style="color:#f92672">)</span>, <span style="color:#66d9ef">done</span>.
</span></span></code></pre></div><p>　
次に、必要な依存関係を次のようにインストールします。
今回はpnpmを使います。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>pnpm install
</span></span></code></pre></div><p>実行結果</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>D:<span style="color:#ae81ff">\y</span>t2009&gt;pnpm install
</span></span><span style="display:flex;"><span>Downloading maxmind-db-reader@0.2.1: 14.96 MB/14.96 MB, <span style="color:#66d9ef">done</span>
</span></span><span style="display:flex;"><span> WARN  <span style="color:#ae81ff">3</span> deprecated subdependencies found: glob@3.2.11, minimatch@0.3.0, sprintf@0.1.5
</span></span><span style="display:flex;"><span>Packages: +132
</span></span><span style="display:flex;"><span>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
</span></span><span style="display:flex;"><span>Progress: resolved 132, reused 0, downloaded 132, added 132, <span style="color:#66d9ef">done</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>dependencies:
</span></span><span style="display:flex;"><span>+ express 4.21.2 <span style="color:#f92672">(</span>5.1.0 is available<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>+ google-protobuf 3.21.4
</span></span><span style="display:flex;"><span>+ maxmind-db-reader 0.2.1
</span></span><span style="display:flex;"><span>+ node-fetch 2.7.0 <span style="color:#f92672">(</span>3.3.2 is available<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>+ node-html-parser 5.4.2 <span style="color:#f92672">(</span>7.0.1 is available<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>+ readline-sync 1.4.10
</span></span><span style="display:flex;"><span>+ ws 8.18.3
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>Done in 6.9s using pnpm v10.8.0
</span></span></code></pre></div><h3 id="注意">注意</h3>
<p>Windows 7を使用している場合はExpressをダウングレードしないとクラッシュするそうです。
なので、古いexpressのバージョンをインストールする必要があるらしいです。
　
Windows 7のみ実行</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>pnpm uninstall express
</span></span><span style="display:flex;"><span>pnpm i express@4.17.1
</span></span></code></pre></div><p>　
次に、設定ファイルを生成します。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>node yt2009setup.js
</span></span></code></pre></div><p>実行すると、実行するポートを聞かれます。
今回は、<code>8801</code>にします</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>D:<span style="color:#ae81ff">\y</span>t2009&gt;node yt2009setup.js
</span></span><span style="display:flex;"><span><span style="color:#f92672">[</span>yt2009<span style="color:#f92672">]</span> yt2009 setup
</span></span><span style="display:flex;"><span>what port should yt2009 run on? <span style="color:#ae81ff">8801</span>
</span></span></code></pre></div><p>enterを押すと、モード実行する聞かれます
今回はdevにしてみました</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>dev:
</span></span><span style="display:flex;"><span>- logs usage in terminal
</span></span><span style="display:flex;"><span>- doesn<span style="color:#e6db74">&#39;t require access tokens
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">- no possibility of creating an ssl version
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">prod:
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">- doesn&#39;</span>t log normal activity
</span></span><span style="display:flex;"><span>- <span style="color:#66d9ef">if</span> enabled, will create a bunch of random tokens users will have to enter to use
</span></span><span style="display:flex;"><span>- will be possible to create an ssl version on a separate port
</span></span><span style="display:flex;"><span>environment <span style="color:#f92672">(</span>dev/prod<span style="color:#f92672">)</span>:dev
</span></span></code></pre></div><p>次に実行するIPを聞かれます
何も入力せず続行します。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>what IP should be used where it needs to be coded in?
</span></span><span style="display:flex;"><span><span style="color:#f92672">(</span>eg. the flash player related<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>preferably use your IP you will use to connect to yt2009. localhost/127.0.0.1
</span></span><span style="display:flex;"><span>isn<span style="color:#960050;background-color:#1e0010">&#39;</span>t recommended because it may break as soon as you use a different pc.
</span></span><span style="display:flex;"><span>IP address:
</span></span></code></pre></div><p>auto_maintainを有効にするか聞かれるので有効にします</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>enable auto_maintain?
</span></span><span style="display:flex;"><span>auto_maintain will automatically clear your instance
</span></span><span style="display:flex;"><span>to prevent it from becoming unusably slow over time.
</span></span><span style="display:flex;"><span>use auto_maintain? <span style="color:#f92672">(</span>y/n<span style="color:#f92672">)</span>:
</span></span></code></pre></div><p>次にインスタンスが使用するストレージサイズとキャッシュサイズを聞かれるので、指定します。
今回はデフォルト(空欄)で続行します。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>specify the max size the instance should use in GB. leave empty <span style="color:#66d9ef">for</span> default <span style="color:#f92672">(</span>10<span style="color:#f92672">)</span>:
</span></span><span style="display:flex;"><span>specify the max size per cache file in MB. leave empty <span style="color:#66d9ef">for</span> default <span style="color:#f92672">(</span>15<span style="color:#f92672">)</span>:
</span></span></code></pre></div><p>完了すると以下のメッセージが表示されます</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>writing configuration to back/config.json.
</span></span><span style="display:flex;"><span>you can always rerun this setup in the future to make changes.
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> this is your first time setting up yt2009 in this directory,
</span></span><span style="display:flex;"><span>make sure to run
</span></span><span style="display:flex;"><span><span style="color:#f92672">======</span>
</span></span><span style="display:flex;"><span>node post_config_setup.js
</span></span><span style="display:flex;"><span><span style="color:#f92672">=====</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">for</span> the next part.
</span></span></code></pre></div><p>　
環境設定が完了したので、アセットをダウンロードします。</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>node post_config_setup.js
</span></span></code></pre></div><p>実行結果</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>D:<span style="color:#ae81ff">\y</span>t2009&gt;node post_config_setup.js
</span></span><span style="display:flex;"><span><span style="color:#f92672">==</span> checking external tool: ffmpeg
</span></span><span style="display:flex;"><span><span style="color:#f92672">==</span> checking external tool: magick
</span></span><span style="display:flex;"><span>creating cache files
</span></span><span style="display:flex;"><span><span style="color:#f92672">==</span> generating innertube data
</span></span><span style="display:flex;"><span>useragent not found in config, using <span style="color:#e6db74">&#34;Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0&#34;</span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">if</span> you wish to use your own user agent,add a userAgent entry to config.json.
</span></span><span style="display:flex;"><span>writing to constants
</span></span><span style="display:flex;"><span><span style="color:#f92672">===</span> !!! <span style="color:#f92672">===</span>
</span></span><span style="display:flex;"><span>/back/yt2009constants.json was modified to include unique data.
</span></span><span style="display:flex;"><span>this data may include the used useragent, your ip and others.
</span></span><span style="display:flex;"><span><span style="color:#f92672">===</span> downloading assets <span style="color:#f92672">===</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>downloading master-vfl121679.png <span style="color:#f92672">(</span>1/59<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>downloading video_bar_arrows-vfl84478.png <span style="color:#f92672">(</span>2/59<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>downloading favicon.ico <span style="color:#f92672">(</span>3/59<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>...
</span></span><span style="display:flex;"><span>downloading GeoLite2-City.mmdb <span style="color:#f92672">(</span>58/59<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>downloading youtube_logo_small_grey-vfl41206.png <span style="color:#f92672">(</span>59/59<span style="color:#f92672">)</span>
</span></span><span style="display:flex;"><span>file download <span style="color:#66d9ef">done</span>!!
</span></span></code></pre></div><p>コードを見てみると、本物のyoutubeとinternet archiveのwayback machineから持ってきてるっぽいです</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-js" data-lang="js"><span style="display:flex;"><span><span style="color:#75715e">// post_config_setup.js:154
</span></span></span><span style="display:flex;"><span><span style="color:#75715e"></span><span style="color:#66d9ef">let</span> <span style="color:#a6e22e">files</span> <span style="color:#f92672">=</span> [
</span></span><span style="display:flex;"><span>    {
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;url&#34;</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;https://web.archive.org/web/20091007050445if_/http://s.ytimg.com/yt/img/master-vfl121679.png&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;path&#34;</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;./master-vfl121679.png&#34;</span>
</span></span><span style="display:flex;"><span>    },
</span></span><span style="display:flex;"><span>    {
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;url&#34;</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;https://s.ytimg.com/yt/img/video_bar_arrows-vfl84478.png&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;path&#34;</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;./video_bar_arrows-vfl84478.png&#34;</span>
</span></span><span style="display:flex;"><span>    },
</span></span><span style="display:flex;"><span>    {
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;url&#34;</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;http://web.archive.org/web/20091121010820if_/http://www.youtube.com/favicon.ico&#34;</span>,
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;path&#34;</span><span style="color:#f92672">:</span> <span style="color:#e6db74">&#34;./favicon.ico&#34;</span>
</span></span><span style="display:flex;"><span>    ...
</span></span></code></pre></div><p>次にバックエンドディレクトリに移動し、サーバーを起動します</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>cd back
</span></span><span style="display:flex;"><span>node backend.js
</span></span></code></pre></div><p>実行結果</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-sh" data-lang="sh"><span style="display:flex;"><span>D:<span style="color:#ae81ff">\y</span>t2009&gt;cd back
</span></span><span style="display:flex;"><span>D:<span style="color:#ae81ff">\y</span>t2009<span style="color:#ae81ff">\b</span>ack&gt;node backend.js
</span></span><span style="display:flex;"><span>    data api V3 key not set.
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">while</span> playback will work,
</span></span><span style="display:flex;"><span>    not all video data may be accurate.
</span></span><span style="display:flex;"><span>    recommended to set with config.data_api_key.
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">==========</span>
</span></span><span style="display:flex;"><span>    yt2009 - dev
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">==========</span>
</span></span><span style="display:flex;"><span>    1.23, launch time: 22:21
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>received <span style="color:#ae81ff">6</span> videos from master
</span></span><span style="display:flex;"><span>added <span style="color:#ae81ff">21</span> comments from master
</span></span></code></pre></div><p>起動出来たら、<code>http://127.0.0.1:8801</code> (自分で指定したip&amp;port) でアクセスできます。</p>
<p><img src="/upload/21/Hosted.png" alt="ホーム">
動画は実際のYoutubeから持ってきてるらしいです。
<img src="/upload/21/play-type.png" alt="閲覧ページ">
再生タイプが選択できます
classicは一度ローカルに動画を保存する必要があります。
古いPCとかでアクセスしてる場合はそっちが向いているらしいです。
modemは今のyoutubeと同じくストリーミングで提供されます。
<img src="/upload/21/play-e7fLeIek86k.png" alt="play-e7fLeIek86k">
すげぇぇ！
<img src="/upload/21/login.png" alt="login">
ログインできるらしい</p>
<hr>
<h2 id="まとめ">まとめ</h2>
<ul>
<li>当時のYouTubeをかなり忠実に再現している</li>
<li>古いPC環境でも利用できるよう工夫されている点が面白い</li>
</ul>
<p>　
次回は昔のYouTubeアプリで動かしたり、アカウントにログインできるか試してみる予定です！</p>
<h3 id="2025-08-21-追記">2025-08-21 追記</h3>
<p>日本語追加しときました
<a href="https://github.com/ftde0/yt2009/pull/281#event-19244988271">yt2009-pullrequest-Added Japanese localization. #281</a></p>
]]></content:encoded>
      <category>再現</category>
      <category>構築</category>
      <category>OSS</category>
      <category>yt2009</category>
    </item><item>
      <title>test</title>
      <link>https://www.0x2o.net/nananankona/status/20/</link>
      <pubDate>Sun, 17 Aug 2025 00:00:00 +0900</pubDate>
      <author>こな</author>
      <guid isPermaLink="true">https://www.0x2o.net/nananankona/status/20/</guid>
      <description>just setting up my twittr</description>
      <content:encoded><![CDATA[<p>ヒウッヒヒーｗｗｗ</p>
<h1 id="sharp">sharp</h1>
<h2 id="見出し2テスト">見出し2テスト</h2>
<h3 id="見出し3テスト">見出し3テスト</h3>
<p><strong>太字テスト</strong></p>
<p><em>イタリックテスト</em></p>
<ul>
<li>箇条書き1</li>
<li>箇条書き2</li>
</ul>
<ol>
<li>番号付きリスト1</li>
<li>番号付きリスト2</li>
</ol>
<p><a href="https://0x2o.net">リンクテスト</a></p>
<blockquote>
<p>引用テスト</p></blockquote>
<p><code>インラインコードテスト</code></p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-html" data-lang="html"><span style="display:flex;"><span>&lt;<span style="color:#f92672">iframe</span> <span style="color:#a6e22e">width</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;560&#34;</span> <span style="color:#a6e22e">height</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;315&#34;</span> <span style="color:#a6e22e">src</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;https://www.youtube.com/embed/oTvU1tTvPO0&#34;</span> <span style="color:#a6e22e">title</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;YouTube video player&#34;</span> <span style="color:#a6e22e">frameborder</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;0&#34;</span> <span style="color:#a6e22e">allow</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34;</span> <span style="color:#a6e22e">referrerpolicy</span><span style="color:#f92672">=</span><span style="color:#e6db74">&#34;strict-origin-when-cross-origin&#34;</span> <span style="color:#a6e22e">allowfullscreen</span>&gt;&lt;/<span style="color:#f92672">iframe</span>&gt;
</span></span></code></pre></div><p><img src="/upload/20/cf.png" alt="テスト画像"></p>
<!-- ここからHTML埋め込み要素を最後に移動 -->
<div class="video-container my-6">
<iframe width="560" height="315" src="https://www.youtube.com/embed/zPCk29OnVi4?si=tLRnGL4LJ9jfHzHs" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div>
<div class="bg-gradient-to-br from-green-400 to-blue-500 text-white p-8 rounded-xl my-6">
  <h2 class="text-3xl font-bold mb-4 text-center">text</h2>
  <p class="text-center text-lg opacity-90">text</p>
</div>
<div class="grid grid-cols-1 md:grid-cols-3 gap-6 my-8">
  <div class="bg-blue-50 dark:bg-blue-900/20 p-6 rounded-lg border border-blue-200 dark:border-blue-700">
    <div class="text-3xl mb-3">text</div>
    <h3 class="text-xl font-bold mb-2 text-blue-800 dark:text-blue-300">text</h3>
    <ul class="space-y-1 text-sm text-blue-700 dark:text-blue-400">
      <li>text</li>
      <li>text</li>
      <li>text</li>
    </ul>
  </div>
  <div class="bg-green-50 dark:bg-green-900/20 p-6 rounded-lg border border-green-200 dark:border-green-700">
    <div class="text-3xl mb-3">text</div>
    <h3 class="text-xl font-bold mb-2 text-green-800 dark:text-green-300">text</h3>
    <ul class="space-y-1 text-sm text-green-700 dark:text-green-400">
      <li>text</li>
      <li>text</li>
      <li>text</li>
    </ul>
  </div>
  <div class="bg-purple-50 dark:bg-purple-900/20 p-6 rounded-lg border border-purple-200 dark:border-purple-700">
    <div class="text-3xl mb-3">text</div>
    <h3 class="text-xl font-bold mb-2 text-purple-800 dark:text-purple-300">text</h3>
    <ul class="space-y-1 text-sm text-purple-700 dark:text-purple-400">
      <li>text</li>
      <li>text</li>
      <li>text</li>
    </ul>
  </div>
</div>
<div class="overflow-x-auto my-6">
  <table class="min-w-full bg-white dark:bg-dark-card rounded-lg overflow-hidden shadow-lg">
    <thead class="bg-gray-100 dark:bg-gray-700">
      <tr>
        <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">text</th>
        <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">text</th>
        <th class="px-6 py-3 text-left text-xs font-medium text-gray-500 dark:text-gray-300 uppercase tracking-wider">text</th>
      </tr>
    </thead>
    <tbody class="divide-y divide-gray-200 dark:divide-gray-600">
      <tr>
        <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 dark:text-gray-100">text</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-green-600 dark:text-green-400">text</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-yellow-600 dark:text-yellow-400">text</td>
      </tr>
      <tr class="bg-gray-50 dark:bg-gray-800">
        <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 dark:text-gray-100">text</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-green-600 dark:text-green-400">text</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-red-600 dark:text-red-400">text</td>
      </tr>
      <tr>
        <td class="px-6 py-4 whitespace-nowrap text-sm font-medium text-gray-900 dark:text-gray-100">text</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-green-600 dark:text-green-400">text</td>
        <td class="px-6 py-4 whitespace-nowrap text-sm text-red-600 dark:text-red-400">text</td>
      </tr>
    </tbody>
  </table>
</div>
<div class="bg-gray-100 dark:bg-gray-800 p-6 rounded-lg my-6">
  <h3 class="text-lg font-bold mb-4">text</h3>
  <div class="space-y-4">
    <div>
      <label class="block text-sm font-medium mb-2">text</label>
      <div class="w-full bg-gray-200 dark:bg-gray-700 rounded-full h-2">
        <div class="bg-green-500 h-2 rounded-full animate-pulse" style="width: 95%"></div>
      </div>
      <span class="text-sm text-green-600 dark:text-green-400">text</span>
    </div>
    <div>
      <label class="block text-sm font-medium mb-2">text</label>
      <div class="w-full bg-gray-200 dark:bg-gray-700 rounded-full h-2">
        <div class="bg-yellow-500 h-2 rounded-full animate-pulse" style="width: 60%"></div>
      </div>
      <span class="text-sm text-yellow-600 dark:text-yellow-400">text</span>
    </div>
  </div>
</div>
<div class="border border-gray-200 dark:border-gray-700 rounded-lg p-6 my-6">
  <div class="flex items-start">
    <div class="flex-shrink-0">
      <svg class="h-6 w-6 text-blue-500" fill="none" viewBox="0 0 24 24" stroke="currentColor">
        <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
      </svg>
    </div>
    <div class="ml-3">
      <h3 class="text-lg font-medium text-gray-900 dark:text-gray-100">text</h3>
      <div class="mt-2 text-sm text-gray-600 dark:text-gray-400">
        <p>text</p>
        <ul class="mt-2 list-disc list-inside space-y-1">
          <li>text</li>
          <li>text</li>
          <li>text</li>
          <li>text</li>
        </ul>
      </div>
    </div>
  </div>
</div>
]]></content:encoded>
      <category>test</category>
      <category>test</category>
      <category>test</category>
      <category>test</category>
      <category>test</category>
    </item></channel>
</rss>