467 行
58 KiB
XML
467 行
58 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
||
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:thr="http://purl.org/syndication/thread/1.0">
|
||
<id>gemini://technicalsuwako.moe</id>
|
||
<title>テクニカル諏訪子</title>
|
||
|
||
<updated>2024-03-30T00:00:00Z</updated>
|
||
|
||
<author><name>テクニカル諏訪子</name></author>
|
||
<link href="gemini://technicalsuwako.moe" rel="alternate"></link>
|
||
|
||
|
||
|
||
<entry>
|
||
<id>blog/crypto-1-monero-dero-wallet.gmi</id>
|
||
<author><name>凜</name></author>
|
||
<title type="html">【仮想通貨】第1部~MoneroとDeroウォレットを設置する方法</title>
|
||
<published>2024-03-30T00:00:00Z</published>
|
||
|
||
<category term="jp"></category>
|
||
|
||
<category term="blog"></category>
|
||
|
||
<category term="仮想通貨"></category>
|
||
|
||
<category term="linux"></category>
|
||
|
||
<category term="freebsd"></category>
|
||
|
||
<category term="monero"></category>
|
||
|
||
<category term="モネロ"></category>
|
||
|
||
<category term="dero"></category>
|
||
|
||
<link href="gemini://technicalsuwako.moe/blog/crypto-1-monero-dero-wallet.gmi" rel="alternate"></link>
|
||
<content type="html">
|
||
|
||
|
||
|
||
<h2 id="heading">仮想通貨とは?</h2>
|
||
<p>仮想通貨は、日本円や米ドル、ユーロなどの政府管理通貨に対する代替通貨です。<br />
|
||
注意すべきは、仮想通貨のうち99%が詐欺であるため、信頼してはなりません。<br />
|
||
あたしは特にMonero(XMR)、Dero(DERO)、Bitcoin(BTC)、Litecoin(LTC)をお勧めしますが、その中でもMoneroが最もお勧めです。<br />
|
||
なぜなら、既に確立されており、最高のプライバシー、最低の手数料、最高の分散型であり、多くのオンラインショップで既に受け入れられているからです。<br />
|
||
<a href="/monero.xhtml">また、あたしは貴方らの寄付もMoneroで受け付けています!</a></p>
|
||
<p>特にエロゲーおよびエロ漫画クリエイターが支払いプロセッサー、更には銀行から資金の流れを抑制される様になっている今、並行経済でのMoneroとDeroの使用が益々重要になっていると考えられます。<br />
|
||
そして、今からそれらについて学ぶ方が遅過ぎるよりも良いと考えられます。</p>
|
||
<h2 id="monerodero">MoneroとDeroとは?</h2>
|
||
<p>MoneroとDeroはプライバシー通貨であり、BitcoinやEtheriumとは異なり、誰もが貴方の完全な取引履歴を見る事が出来る、つまりクレジットカードよりも悪い、状況ではなく、MoneroとDeroは共に追跡不可能であり、従ってキーを持っている人だけが特定の取引を見る事が出来、ウォレットの所有者だけが全体の履歴を見る事が出来ます。<br />
|
||
基本的に、MoneroはBitcoinのプライバシーバージョンであり、DeroはEtheriumのプライバシーバージョンです。<br />
|
||
特に興味深いのは、DeroがEtheriumと同様にスマートコントラクトを持っているが、Etheriumとは異なり、実際にはセキュアである事です。<br />
|
||
但し、Deroを入手するのはかなり難しいですが、後でその方法を説明します。</p>
|
||
<h2 id="bitcoinetherium">BitcoinとEtheriumを使わない理由</h2>
|
||
<p>先述の通り、BitcoinとEtheriumは完全に透明です。<br />
|
||
Bitcoinを貯金や増やす方法として持っているのは問題ありませんが、商品を購入する為には全く適していません。<br />
|
||
殆どのダークネットマーケットでもBitcoinを受け入れていないのはその為です。</p>
|
||
<p>あたしは現在、Bitcoinを保持しているのは、間もなく行われる半減期の為ですが、Bitcoinがピークに達したらMoneroに換金するつもりです。<br />
|
||
MoneroとDeroの他の利点は、日本円でのMoneroとDeroの価格が遥に安定している事です。<br />
|
||
つまり、Amazon等の法定通貨のみを受け入れる場所に支払う必要がある場合、価値が大きく変動するリスクが遥に低くなります。<br />
|
||
<a href="https://www.coinsbee.com/jp/Amazon-bitcoin">例えば、Coinsbeeでギフトカードを購入する事で、AmazonでMoneroで支払う事が出来ます。</a><br />
|
||
あたしは彼らにスポンサーされていませんが、以前に彼らのサービスを何度も使用した事があるので、信頼する事を出来ます。</p>
|
||
<h2 id="heading-1">ウォレットの選択</h2>
|
||
<p>あたし達はここではUNIX系OSの大ファンですので、最も多くのプラットフォームをサポートする物を使用するのが最善です。<br />
|
||
これ自体が既に大きな問題です!<br />
|
||
macOSやLinux、Windows(UNIX系ではないけど)のユーザーは、選択肢が豊富ですが、FreeBSDの場合、僅かしか選択肢がなく、OpenBSDの場合は全くありません。<br />
|
||
現在、あたしはFreeBSDを使用しているので、両通貨のCLIウォレット及び特にFreeBSD向けのFeather Walletの手順を示します。</p>
|
||
<h3 id="monero-cli">Monero CLI</h3>
|
||
<p>これは最も簡単な方法で、FreeBSDではリポジトリからインストールできます。</p>
|
||
<pre><code lang="">doas pkg install monero-cli
|
||
</code></pre><p>CRUXでは、最初に<code lang="">suwaports</code>コレクションを追加し、次の何れかのコマンドを使用します:</p>
|
||
<pre><code lang="">doas prt-get depinst monero
|
||
</code></pre><p>又は:</p>
|
||
<pre><code lang=""><span style="color:#a2f">cd</span> /usr/ports/suwaports/monero
|
||
doas pkgmk -d
|
||
doas pkgadd monero#0.18.3.2-1.pkg.tar.gz
|
||
</code></pre><p>より一貫性のある手順として、Monero Projectから直接事前にコンパイルされたバイナリパッケージをダウンロードするだけです。<br />
|
||
Linuxの場合:</p>
|
||
<pre><code lang="">mkdir -p ~/.local/bin <span style="color:#666">&amp;&amp;</span> <span style="color:#a2f">cd</span> ~/.local/bin
|
||
wget https://downloads.getmonero.org/cli/monero-linux-x64-v0.18.3.2.tar.bz2
|
||
bsdtar -xfv monero-linux-x64-v0.18.3.2.tar.bz2
|
||
mv monero-x86_64-linux-gnu-v0.18.3.2/monero* .
|
||
rm -rf monero-x86_64-linux-gnu-v0.18.3.2/
|
||
</code></pre><p>FreeBSDの場合:</p>
|
||
<pre><code lang="">mkdir -p ~/.local/bin <span style="color:#666">&amp;&amp;</span> <span style="color:#a2f">cd</span> ~/.local/bin
|
||
wget https://downloads.getmonero.org/cli/monero-freebsd-x64-v0.18.3.2.tar.bz2
|
||
tar xfv monero-freebsd-x64-v0.18.3.2.tar.bz2
|
||
mv monero-x86_64-unknown-freebsd-v0.18.3.2/monero* .
|
||
rm -rf monero-x86_64-unknown-freebsd-v0.18.3.2/
|
||
</code></pre><h3 id="featherwallet">FeatherWallet</h3>
|
||
<p>Linuxでは、FeatherWalletの公式ウェブサイトからダウンロードしてそのまま使用出来ます。<br />
|
||
<a href="https://featherwallet.org/download/">一般ネット</a><br />
|
||
<a href="http://featherdvtpi7ckdbkb2yxjfwx3oyvr3xjz3oo4rszylfzjdg6pbm3id.onion/download/">Tor</a><br />
|
||
<a href="http://rwzulgcql2y3n6os2jhmhg6un2m33rylazfnzhf56likav47aylq.b32.i2p/download/">I2P</a></p>
|
||
<p>FreeBSDの場合、ソースからダウンロードする必要があります。</p>
|
||
<pre><code lang="">doas pkg install qt5 qt6-base libsodium libzip libqrencode unbound cmake boost-libs hidapi openssl lua54-luaexpat libunwind protobuf pkgconf vulkan-headers doxygen
|
||
|
||
mkdir -p ~/.local/src <span style="color:#666">&amp;&amp;</span> <span style="color:#a2f">cd</span> ~/.local/src
|
||
git clone https://github.com/feather-wallet/feather.git
|
||
<span style="color:#a2f">cd</span> feather
|
||
git submodule update --init --recursive --progress
|
||
mkdir build <span style="color:#666">&amp;&amp;</span> <span style="color:#a2f">cd</span> build
|
||
cmake -DSTACK_TRACE:BOOL<span style="color:#666">=</span>OFF -DDCHECK_UPDATES<span style="color:#666">=</span>OFF -DDONATE_BEG<span style="color:#666">=</span>OFF -DUSE_DEVICE_TREZOR<span style="color:#666">=</span>OFF -DWITH_SCANNER<span style="color:#666">=</span>OFF -DWITH_PLUGIN_REDDIT<span style="color:#666">=</span>OFF -DWITH_PLUGIN_LOCALMONERO<span style="color:#666">=</span>OFF -DWITH_PLUGIN_REVUO<span style="color:#666">=</span>OFF -DWITH_PLUGIN_BOUNTIES<span style="color:#666">=</span>OFF -DWITH_PLUGIN_CROWDFUNDING<span style="color:#666">=</span>OFF -DWITH_PLUGIN_TICKERS<span style="color:#666">=</span>OFF -DWITH_PLUGIN_XMRIG<span style="color:#666">=</span>OFF -DWITH_PLUGIN_EXCHANGE<span style="color:#666">=</span>OFF -DWITH_PLUGIN_LOCALMONERO<span style="color:#666">=</span>OFF -DPLATFORM_INSTALLER<span style="color:#666">=</span>OFF ..
|
||
cmake --build . -j <span style="color:#a2f;font-weight:bold">$(</span>nproc
|
||
|
||
doas mv bin/feather /usr/local/bin
|
||
</code></pre><h3 id="dero-cli">Dero CLI</h3>
|
||
<p>Deroウォレットの場合、LinuxではEngram GUIウォレットを使用出来ますが、FreeBSDでは使用出来ません。<br />
|
||
従って、あたし達は両方で動作する物のみを望んでいるので、代わりにCLIウォレットを使用します。</p>
|
||
<p>Linuxの場合:</p>
|
||
<pre><code lang="">mkdir -p ~/.local/bin <span style="color:#666">&amp;&amp;</span> <span style="color:#a2f">cd</span> ~/.local/bin
|
||
wget https://github.com/deroproject/derohe/releases/latest/download/dero_linux_amd64.tar.gz
|
||
tar zxfv dero_linux_amd64.tar.gz
|
||
rm -rf dero_linux_amd64/Start.md
|
||
mv dero_linux_amd64/* .
|
||
rm -rf dero_linux_amd64.tar.gz
|
||
</code></pre><p>FreeBSDの場合:</p>
|
||
<pre><code lang="">mkdir -p ~/.local/bin <span style="color:#666">&amp;&amp;</span> <span style="color:#a2f">cd</span> ~/.local/bin
|
||
wget https://github.com/deroproject/derohe/releases/latest/download/dero_freebsd_amd64.tar.gz
|
||
tar zxfv dero_freebsd_amd64.tar.gz
|
||
rm -rf dero_freebsd_amd64/Start.md
|
||
mv dero_freebsd_amd64/* .
|
||
rm -rf dero_freebsd_amd64.tar.gz
|
||
</code></pre><h2 id="heading-2">ディーモンの起動</h2>
|
||
<p>フルブロックチェーンをダウンロードするので、1 TiB以上の別のSSD又はNVMeを使用する事を強くお勧めします。<br />
|
||
あたしは独自のNASを使用していますので、ZSHを使用していると仮定して、エイリアスを追加します:</p>
|
||
<pre><code lang="">export XDG_CONFIG_HOME=&#34;$HOME/.config&#34;
|
||
export XDG_CACHE_HOME=&#34;$HOME/.cache&#34;
|
||
export XDG_BIN_HOME=&#34;$HOME/.local/bin&#34;
|
||
export XDG_DATA_HOME=&#34;$HOME/.local/share&#34;
|
||
export XDG_SRC_HOME=&#34;$HOME/.local/src&#34;
|
||
export WALLETB_HOME=&#34;/mnt/nfs/wallets&#34;
|
||
export PATH=~/.local/bin:$PATH
|
||
...
|
||
alias monerod=&#34;monerod --data-dir $WALLETB_HOME/bitmonero&#34;
|
||
alias derod=&#34;derod --data-dir=$WALLETB_HOME/dero&#34;
|
||
</code></pre><p>また、ディレクトリを作成します:</p>
|
||
<pre><code lang="">mkdir -p <span style="color:#b8860b">$WALLETB_HOME</span>/<span style="color:#666">{</span>bitmonero,dero/mainnet<span style="color:#666">}</span>
|
||
</code></pre><h2 id="monero">Moneroを購入する方法</h2>
|
||
<p>日本からMoneroを購入する事は不可能の様ですが、可能です。<br />
|
||
最も簡単な方法は、取引所からLitecoinを購入し、一時的なLitecoinウォレットを作成し、そこに送金し、ChangeNOWを使用してLTCからXMRにスワップする事です。<br />
|
||
<a href="https://changenow.io/ja">ChangeNOW</a><br />
|
||
再度、あたしはChangeNOWに因って スポンサーされている訳ではなく、関連していませんが、このサービスを沢山使用した事があり、それが信頼出来ます。\</p>
|
||
<p>他の方法はBisqやLocalMoneroを使用する事ですが、あたしは以前使用した事がないので、その動作方法はわかりません。<br />
|
||
<a href="https://peertube.anon-kenkai.com/w/oQCQ91fznejiMq2nEKdmup">但し、チャノさんにはBisqに関する動画があります。</a></p>
|
||
<p>勿論、Moneroをマイニングする事も出来ますが、それについては第2部で説明します。</p>
|
||
<h2 id="dero">Deroを購入する方法</h2>
|
||
<p>Deroを購入するのはかなり難しいです。<br />
|
||
それを取得する唯一の方法は、Moneroを取得する方法と同様にLitecoinを購入し、その後TradeOgreを使用してDeroを購入する事です。<br />
|
||
<a href="https://tradeogre.com/exchange/DERO-LTC">TradeOgre(警告:ClownFlareを使用)</a></p>
|
||
<p>Moneroと同様に、勿論Deroもマイニングする事が出来ます。</p>
|
||
<h2 id="heading-3">実行する方法</h2>
|
||
<p>Monero又はDeroウォレットを使用するには、別途デーモンを実行する必要があります。<br />
|
||
新しいターミナルウィンドウを開き、「monerod」をMoneroの場合、「derod」をDeroの場合に実行します。<br />
|
||
これにより、全体のブロックチェーンがローカルPCに同期されますので、完了までに最大1週間かかる場合があります。</p>
|
||
<p>完了したら、デーモンがまだ実行されている状態で、別のターミナルウィンドウを開き、「monero-wallet-cli」をMoneroの場合、「dero-wallet-cli」をDeroの場合に入力します。</p>
|
||
<p><img src="https://ass.technicalsuwako.moe/monero-cli-wallet.png" alt="" /></p>
|
||
<p><img src="https://ass.technicalsuwako.moe/dero-cli-wallet.png" alt="" /></p>
|
||
<p>第2部ではマイニングについて説明し、第3部ではトランザクションの作成方法について説明します。</p>
|
||
<p>以上</p>
|
||
|
||
|
||
</content>
|
||
</entry>
|
||
|
||
<entry>
|
||
<id>blog/byobu-53.gmi</id>
|
||
<author><name>凛</name></author>
|
||
<title type="html">【076】byobu 5.3登場</title>
|
||
<published>2024-02-27T00:00:00Z</published>
|
||
|
||
<category term="jp"></category>
|
||
|
||
<category term="blog"></category>
|
||
|
||
<category term="ウエブ開発"></category>
|
||
|
||
<category term="076"></category>
|
||
|
||
<category term="byobu"></category>
|
||
|
||
<link href="gemini://technicalsuwako.moe/blog/byobu-53.gmi" rel="alternate"></link>
|
||
<content type="html">
|
||
|
||
|
||
|
||
<h2 id="heading">変更</h2>
|
||
<ul>
|
||
<li>Makefileの修正</li>
|
||
<li>macOS対応</li>
|
||
</ul>
|
||
<h2 id="heading-1">ソースコード</h2>
|
||
<p><a href="https://gitler.moe/suwako/byobu">Gitler</a></p>
|
||
<p>以上</p>
|
||
|
||
|
||
</content>
|
||
</entry>
|
||
|
||
<entry>
|
||
<id>blog/sdl2-easy-collision.gmi</id>
|
||
<author><name>凛</name></author>
|
||
<title type="html">【SDL2】簡単な3D衝突検出の解説</title>
|
||
<published>2024-02-17T00:00:00Z</published>
|
||
|
||
<category term="blog"></category>
|
||
|
||
<category term="jp"></category>
|
||
|
||
<category term="プログラミング"></category>
|
||
|
||
<category term="zig"></category>
|
||
|
||
<category term="sdl"></category>
|
||
|
||
<category term="opengl"></category>
|
||
|
||
<category term="ゲーム開発"></category>
|
||
|
||
<link href="gemini://technicalsuwako.moe/blog/sdl2-easy-collision.gmi" rel="alternate"></link>
|
||
<content type="html">
|
||
|
||
|
||
|
||
<p>最近、自作のゲームを作成していますが、衝突検出を実装する事に懸念を抱きました。<br />
|
||
しかし、作った後はそんなに難しくないと気づきました。<br />
|
||
その為、今回はこれについて説明します。<br />
|
||
記事での利用している言語はZig言語ですが、C言語やC++でも使えます。</p>
|
||
<h2 id="heading">プログラミングタイム!!</h2>
|
||
<p>3つのオブジェクトを設置します。</p>
|
||
<pre><code lang=""><span style="color:#080;font-style:italic">// オブジェクト
|
||
</span><span style="color:#080;font-style:italic"></span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>Wall<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">struct</span><span style="color:#bbb"> </span>{<span style="color:#bbb"> </span>x<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb"> </span>y<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb"> </span>z<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb"> </span>size<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span><span style="color:#bbb"> </span>};<span style="color:#bbb">
|
||
</span><span style="color:#bbb"></span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>Floor<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">struct</span><span style="color:#bbb"> </span>{<span style="color:#bbb"> </span>x<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb"> </span>y<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb"> </span>z<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb"> </span>size<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span><span style="color:#bbb"> </span>};<span style="color:#bbb">
|
||
</span><span style="color:#bbb"></span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>Player<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">struct</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>xpos<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>ypos<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>zpos<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>xsize<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>ysize<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>zsize<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>velocity<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>gravity<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb">
|
||
</span><span style="color:#bbb"></span>};<span style="color:#bbb">
|
||
</span><span style="color:#bbb">
|
||
</span><span style="color:#bbb"></span><span style="color:#a2f;font-weight:bold">var</span><span style="color:#bbb"> </span>wall<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>Wall<span style="color:#bbb"> </span>{<span style="color:#bbb"> </span>.x<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">-</span><span style="color:#666">6.0</span>,<span style="color:#bbb"> </span>.y<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">0.0</span>,<span style="color:#bbb"> </span>.z<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">-</span><span style="color:#666">26.0</span>,<span style="color:#bbb"> </span>.size<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">6.0</span><span style="color:#bbb"> </span>};<span style="color:#bbb">
|
||
</span><span style="color:#bbb"></span><span style="color:#a2f;font-weight:bold">var</span><span style="color:#bbb"> </span>floor<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>Floor<span style="color:#bbb"> </span>{<span style="color:#bbb"> </span>.x<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">-</span><span style="color:#666">6.0</span>,<span style="color:#bbb"> </span>.y<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">-</span><span style="color:#666">7.0</span>,<span style="color:#bbb"> </span>.z<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">-</span><span style="color:#666">26.0</span>,<span style="color:#bbb"> </span>.size<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">50.0</span><span style="color:#bbb"> </span>};<span style="color:#bbb">
|
||
</span><span style="color:#bbb"></span><span style="color:#a2f;font-weight:bold">var</span><span style="color:#bbb"> </span>player<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>Player<span style="color:#bbb"> </span>{<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>.xpos<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">0.0</span>,<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>.ypos<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">50.0</span>,<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>.zpos<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">0.0</span>,<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>.xsize<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">0.2</span>,<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>.ysize<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">0.8</span>,<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>.zsize<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">0.2</span>,<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>.velocity<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">0.1</span>,<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>.gravity<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#666">0.2</span>,<span style="color:#bbb">
|
||
</span><span style="color:#bbb"></span>};<span style="color:#bbb">
|
||
</span><span style="color:#bbb">
|
||
</span><span style="color:#bbb"></span><span style="color:#a2f;font-weight:bold">fn</span><span style="color:#bbb"> </span>draw()<span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">void</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span><span style="color:#080;font-style:italic">// ここは`glBegin`、`glVertex3f`等を設置しますが、長すぎる為、これはスキップします。
|
||
</span><span style="color:#080;font-style:italic"></span>}<span style="color:#bbb">
|
||
</span></code></pre><p>上記のコードで、主に「gravity」や「velocity」が大切です。<br />
|
||
次は衝突検出の関数を作ります。</p>
|
||
<pre><code lang=""><span style="color:#a2f;font-weight:bold">fn</span><span style="color:#bbb"> </span>checkPosToObj(xpos<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb"> </span>ypos<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb"> </span>zpos<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb"> </span>size<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span>,<span style="color:#bbb"> </span>obj<span style="color:#666">:</span><span style="color:#bbb"> </span>anytype)<span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">bool</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>thresholdX<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span><span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>size;<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>thresholdY<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span><span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>size;<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>thresholdZ<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span><span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>size;<span style="color:#bbb">
|
||
</span><span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>deltaX<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span><span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f">@abs</span>(xpos<span style="color:#bbb"> </span><span style="color:#666">-</span><span style="color:#bbb"> </span>obj.xpos);<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>deltaY<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span><span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f">@abs</span>(ypos<span style="color:#bbb"> </span><span style="color:#666">-</span><span style="color:#bbb"> </span>obj.ypos);<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>deltaZ<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span><span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f">@abs</span>(zpos<span style="color:#bbb"> </span><span style="color:#666">-</span><span style="color:#bbb"> </span>obj.zpos);<span style="color:#bbb">
|
||
</span><span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">return</span><span style="color:#bbb"> </span>deltaX<span style="color:#bbb"> </span><span style="color:#666">&lt;</span><span style="color:#bbb"> </span>thresholdX<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">and</span><span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>deltaY<span style="color:#bbb"> </span><span style="color:#666">&lt;</span><span style="color:#bbb"> </span>thresholdY<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">and</span><span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>deltaZ<span style="color:#bbb"> </span><span style="color:#666">&lt;</span><span style="color:#bbb"> </span>thresholdZ;<span style="color:#bbb">
|
||
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
|
||
</span></code></pre><p>床と壁のサイズ値は1つだけで、プレイヤは3つ(X, Y, Z)がある為、上記を使った方が良いですね。<br />
|
||
両方のオブジェクトが3つのサイズ値があれば、下記の関数を使っては良いと思います。</p>
|
||
<pre><code lang=""><span style="color:#a2f;font-weight:bold">fn</span><span style="color:#bbb"> </span>checkObjToObj(a<span style="color:#666">:</span><span style="color:#bbb"> </span>anytype,<span style="color:#bbb"> </span>b<span style="color:#666">:</span><span style="color:#bbb"> </span>anytype)<span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">bool</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>thresholdX<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span><span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>a.xsize;<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>thresholdY<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span><span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>a.ysize;<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>thresholdZ<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span><span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>a.zsize;<span style="color:#bbb">
|
||
</span><span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>deltaX<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span><span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f">@abs</span>(a.xpos<span style="color:#bbb"> </span><span style="color:#666">-</span><span style="color:#bbb"> </span>b.xpos);<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>deltaY<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span><span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f">@abs</span>(a.ypos<span style="color:#bbb"> </span><span style="color:#666">-</span><span style="color:#bbb"> </span>b.ypos);<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>deltaZ<span style="color:#666">:</span><span style="color:#bbb"> </span><span style="color:#0b0;font-weight:bold">f32</span><span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f">@abs</span>(a.zpos<span style="color:#bbb"> </span><span style="color:#666">-</span><span style="color:#bbb"> </span>b.zpos);<span style="color:#bbb">
|
||
</span><span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">return</span><span style="color:#bbb"> </span>deltaX<span style="color:#bbb"> </span><span style="color:#666">&lt;</span><span style="color:#bbb"> </span>thresholdX<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">and</span><span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>deltaY<span style="color:#bbb"> </span><span style="color:#666">&lt;</span><span style="color:#bbb"> </span>thresholdY<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">and</span><span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>deltaZ<span style="color:#bbb"> </span><span style="color:#666">&lt;</span><span style="color:#bbb"> </span>thresholdZ;<span style="color:#bbb">
|
||
</span><span style="color:#bbb"></span>}<span style="color:#bbb">
|
||
</span></code></pre><p>thresholdはいつでもプレイヤ以外のオブジェクトのサイズとなります。</p>
|
||
<pre><code lang=""><span style="color:#a2f;font-weight:bold">pub</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">fn</span><span style="color:#bbb"> </span>main()<span style="color:#bbb"> </span><span style="color:#666">!</span><span style="color:#0b0;font-weight:bold">void</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span><span style="color:#080;font-style:italic">// ...
|
||
</span><span style="color:#080;font-style:italic"></span><span style="color:#bbb"> </span><span style="color:#080;font-style:italic">// 衝突検出
|
||
</span><span style="color:#080;font-style:italic"></span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">if</span><span style="color:#bbb"> </span>(checkPosToObj(floor.x,<span style="color:#bbb"> </span>floor.y,<span style="color:#bbb"> </span>floor.z,<span style="color:#bbb"> </span>floor.size,<span style="color:#bbb"> </span>player))<span style="color:#bbb"> </span>{<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>std.debug.print(<span style="color:#b44">&#34;床を触って良かった! ypos = {d}</span><span style="color:#b62;font-weight:bold">\n</span><span style="color:#b44">&#34;</span>,<span style="color:#bbb"> </span>.{player.ypos});<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>player.ypos<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>floor.y<span style="color:#666">+</span>(player.ysize);<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>}<span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">else</span><span style="color:#bbb"> </span>{<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>std.debug.print(<span style="color:#b44">&#34;ああああああ!! ypos = {d}</span><span style="color:#b62;font-weight:bold">\n</span><span style="color:#b44">&#34;</span>,<span style="color:#bbb"> </span>.{player.ypos});<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>player.ypos<span style="color:#bbb"> </span><span style="color:#666">-=</span><span style="color:#bbb"> </span>player.gravity;<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>}<span style="color:#bbb">
|
||
</span><span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span><span style="color:#a2f;font-weight:bold">if</span><span style="color:#bbb"> </span>(checkPosToObj(plane.x,<span style="color:#bbb"> </span>plane.y,<span style="color:#bbb"> </span>plane.z,<span style="color:#bbb"> </span>plane.size,<span style="color:#bbb"> </span>player))<span style="color:#bbb"> </span>{<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>std.debug.print(<span style="color:#b44">&#34;壁だわ...</span><span style="color:#b62;font-weight:bold">\n</span><span style="color:#b44">&#34;</span>,<span style="color:#bbb"> </span>.{});<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>player.zpos<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span>plane.z<span style="color:#666">+</span>(player.zsize);<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span>}<span style="color:#bbb">
|
||
</span><span style="color:#bbb"> </span><span style="color:#080;font-style:italic">// ...
|
||
</span><span style="color:#080;font-style:italic"></span>}<span style="color:#bbb">
|
||
</span></code></pre><h2 id="heading-1">結果</h2>
|
||
<p><video src="https://ass.technicalsuwako.moe/zig-cd.ogv" controls="controls" style="max-height: 400px;"></video></p>
|
||
<p>ねぇ!簡単でしょ〜!</p>
|
||
<p>以上</p>
|
||
|
||
|
||
</content>
|
||
</entry>
|
||
|
||
<entry>
|
||
<id>blog/sp-120.gmi</id>
|
||
<author><name>凛</name></author>
|
||
<title type="html">【076】sp 1.2.0登場</title>
|
||
<published>2024-02-01T00:00:00Z</published>
|
||
|
||
<category term="jp"></category>
|
||
|
||
<category term="blog"></category>
|
||
|
||
<category term="ウエブ開発"></category>
|
||
|
||
<category term="076"></category>
|
||
|
||
<category term="sp"></category>
|
||
|
||
<link href="gemini://technicalsuwako.moe/blog/sp-120.gmi" rel="alternate"></link>
|
||
<content type="html">
|
||
|
||
|
||
|
||
<h2 id="sp">spって何?</h2>
|
||
<p>spはシンプルなパスワードマネージャです。</p>
|
||
<h2 id="heading">変更</h2>
|
||
<ul>
|
||
<li>やっとTOTP機能性を修正した</li>
|
||
<li>makeを実行したら、バイナリがもっと小さくなる</li>
|
||
<li>パスワードの長さの延長</li>
|
||
<li>パスワード追加機能性で、パスワードが既に存在するかどうか確認</li>
|
||
<li>パスワード削除機能性で、パスワードが存在ないかどうか確認</li>
|
||
<li>パスワード変更機能性の追加</li>
|
||
<li>zsh対応の修正</li>
|
||
</ul>
|
||
<h2 id="heading-1">ソースコード</h2>
|
||
<p><a href="https://gitler.moe/suwako/sp">Gitler</a></p>
|
||
<p>以上</p>
|
||
|
||
|
||
</content>
|
||
</entry>
|
||
|
||
<entry>
|
||
<id>blog/neovim-code-template.gmi</id>
|
||
<author><name>凜</name></author>
|
||
<title type="html">【Neovim】テンプレートと作り方</title>
|
||
<published>2024-01-31T00:00:00Z</published>
|
||
|
||
<category term="jp"></category>
|
||
|
||
<category term="blog"></category>
|
||
|
||
<category term="neovim"></category>
|
||
|
||
<category term="開発"></category>
|
||
|
||
<category term="プログラミング"></category>
|
||
|
||
<category term="linux"></category>
|
||
|
||
<category term="bsd"></category>
|
||
|
||
<category term="freebsd"></category>
|
||
|
||
<category term="openbsd"></category>
|
||
|
||
<category term="zig"></category>
|
||
|
||
<category term="c言語"></category>
|
||
|
||
<category term="php"></category>
|
||
|
||
<category term="go言語"></category>
|
||
|
||
<link href="gemini://technicalsuwako.moe/blog/neovim-code-template.gmi" rel="alternate"></link>
|
||
<content type="html">
|
||
|
||
|
||
|
||
<p><a href="/blog/zig-gengo-1.xhtml">Zigの使い方第1部を投稿した後、この言語を辞めました。</a><br />
|
||
理由は自由にフォーマット出来なかった事です。<br />
|
||
しかし、解決方法を見つけましたが、それが結構面倒くさいと思います:</p>
|
||
<pre><code lang=""><span style="color:#080;font-style:italic">// zig fmt: off
|
||
</span><span style="color:#080;font-style:italic">// vim: set ts=2 sts=2 sw=2 et:
|
||
</span></code></pre><p>各「.zig」ファイルで上記のコメントを自分で貼る事が必要為、「neovimは自動で追加されたら良いなぁ」と思ったら、やっぱりそれが可能です!</p>
|
||
<h2 id="confignviminitlua">~/.config/nvim/init.lua</h2>
|
||
<pre><code lang="">vim.api.nvim_exec(<span style="color:#b44">[[
|
||
</span><span style="color:#b44"> autocmd BufNewFile *.zig 0r ~/.config/nvim/template.zig
|
||
</span><span style="color:#b44">]]</span>, <span style="color:#a2f;font-weight:bold">false</span>)
|
||
</code></pre><h2 id="confignvimtemplatezig">~/.config/nvim/template.zig</h2>
|
||
<pre><code lang=""><span style="color:#080;font-style:italic">// zig fmt: off
|
||
</span><span style="color:#080;font-style:italic">// vim: set ts=2 sts=2 sw=2 et:
|
||
</span><span style="color:#080;font-style:italic"></span><span style="color:#a2f;font-weight:bold">const</span><span style="color:#bbb"> </span>std<span style="color:#bbb"> </span><span style="color:#666">=</span><span style="color:#bbb"> </span><span style="color:#a2f">@import</span>(<span style="color:#b44">&#34;std&#34;</span>);<span style="color:#bbb">
|
||
</span><span style="color:#bbb">
|
||
</span></code></pre><p>それで、毎回「<code lang="">nvim ほげほげ.zig</code>」で使って新しい「.zig」ファイルを作ったら、自動で上記の行列を追加されます。<br />
|
||
これを好みでしたので、他の言語のテンプレートを作りました。</p>
|
||
<h2 id="confignviminitlua-1">~/.config/nvim/init.lua</h2>
|
||
<pre><code lang=""><span style="color:#080;font-style:italic">-- テンプレート</span>
|
||
vim.api.nvim_exec(<span style="color:#b44">[[
|
||
</span><span style="color:#b44"> autocmd BufNewFile *.c 0r ~/.config/nvim/template.c
|
||
</span><span style="color:#b44"> autocmd BufNewFile *.cc 0r ~/.config/nvim/template.cc
|
||
</span><span style="color:#b44"> autocmd BufNewFile *.h 0r ~/.config/nvim/template.h
|
||
</span><span style="color:#b44"> autocmd BufNewFile *.hh 0r ~/.config/nvim/template.hh
|
||
</span><span style="color:#b44"> autocmd BufNewFile *.go 0r ~/.config/nvim/template.go
|
||
</span><span style="color:#b44"> autocmd BufNewFile *.md 0r ~/.config/nvim/template.md
|
||
</span><span style="color:#b44"> autocmd BufNewFile *.zig 0r ~/.config/nvim/template.zig
|
||
</span><span style="color:#b44"> autocmd BufNewFile *.php 0r ~/.config/nvim/template.php
|
||
</span><span style="color:#b44">]]</span>, <span style="color:#a2f;font-weight:bold">false</span>)
|
||
</code></pre><h3 id="templatec">template.c</h3>
|
||
<pre><code lang=""><span style="color:#080">#include</span> <span style="color:#080">&lt;stdio.h&gt;</span><span style="color:#080">
|
||
</span><span style="color:#080"></span>
|
||
</code></pre><h3 id="templatecc">template.cc</h3>
|
||
<pre><code lang=""><span style="color:#080">#include</span> <span style="color:#080">&lt;iostream&gt;</span><span style="color:#080">
|
||
</span><span style="color:#080"></span>
|
||
</code></pre><h3 id="templateh">template.h</h3>
|
||
<pre><code lang=""><span style="color:#080">#ifndef _H
|
||
</span><span style="color:#080">#define _H
|
||
</span><span style="color:#080"></span>
|
||
|
||
|
||
<span style="color:#080">#endif
|
||
</span></code></pre><h3 id="templatehh">template.hh</h3>
|
||
<pre><code lang=""><span style="color:#080">#ifndef _HH
|
||
</span><span style="color:#080">#define _HH
|
||
</span><span style="color:#080"></span>
|
||
<span style="color:#a2f;font-weight:bold">class</span> <span style="color:#00f">i</span> {
|
||
<span style="color:#a2f;font-weight:bold">public</span><span style="color:#666">:</span>
|
||
|
||
<span style="color:#a2f;font-weight:bold">private</span><span style="color:#666">:</span>
|
||
|
||
};
|
||
|
||
<span style="color:#080">#endif
|
||
</span></code></pre><h3 id="templatego">template.go</h3>
|
||
<pre><code lang=""><span style="color:#a2f;font-weight:bold">package</span> main
|
||
|
||
<span style="color:#a2f;font-weight:bold">import</span> (
|
||
)
|
||
|
||
</code></pre><h3 id="templatephp">template.php</h3>
|
||
<pre><code lang=""><span style="color:#666">&lt;?</span>php
|
||
|
||
<span style="color:#080">?&gt;</span><span style="">
|
||
</span></code></pre><p>以上</p>
|
||
|
||
|
||
</content>
|
||
</entry>
|
||
|
||
|
||
</feed>
|