<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  
  <title><![CDATA[老伯筆記]]></title>
  <link href="http://www.renn999.cc/atom.xml" rel="self"/>
  
  <link href="http://www.renn999.cc/"/>
  <updated>2016-05-14T23:37:21+0800</updated>
  <id>http://www.renn999.cc/</id>
  <author>
    <name><![CDATA[renn999]]></name>
    <email><![CDATA[renn999@gmail.com]]></email>
  </author>
  <generator uri="http://bbk.renn999.twbbs.org/pyblogtle">pyBlogtle</generator>

  
  <entry>
    <title type="html"><![CDATA[Ubuntu 16.04 tty FBTerm 取代]]></title>
    <link href="http://www.renn999.cc/archives/926/"/>
    <updated>2016-05-14T22:53:00+0800</updated>
    <id>http://www.renn999.cc/archives/926/</id>
    <content type="html"><![CDATA[<h2>我是廢話</h2>
<p>真是抱歉真的很久沒有更新 blog 了，看樣子真的長了一層厚厚的黴菌，人生 online 這東西真的太可怕了，除了整天的工作外還是工作，沒時間搞自己想搞的東西結果一大堆東西就開始放置 play 了。</p>
<h2>正題開始</h2>
<p>會開始想要寫一些東西是因爲參加了 Ubuntu release party ，剛好聽到了一些關鍵字，就剛好解決了我之前多個問題就是在 tty 底下的中文都會不見所以說這一次的聚會就剛好聽到原來是要利用 Fbterm 來解決問題。剛好就研究了一下要怎麼處理。</p>
<!--more-->

<p>首先先安裝 Fbterm</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span></pre></td><td class='code'><pre><code><span class='line'>sudo apt-get install fbterm</span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>接着就是要把 tty 取代掉但是我試了很多的方法到最後還是改成修改<code>.profile</code> 的做法會比較好點，這樣不用動到很多系統檔案，在 tty 底下登入後就會執行 Fbterm 了，安裝完要先處理一些權限的問題，就是讓非 root 的使用者可以調用 video 及系統快捷鍵資源：</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span></pre></td><td class='code'><pre><code><span class='line'>sudo gpasswd -a YOUR_USERNAME video</span>
<span class='line'>sudo setcap <span class="s1">&#39;cap_sys_tty_config+ep&#39;</span> /usr/bin/fbterm</span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>接着修改<code>.profile</code>檔</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span></pre></td><td class='code'><pre><code><span class='line'><span class="c"># 確認如果在tty底下就執行 fbtrem</span></span>
<span class='line'><span class="k">if</span> <span class="o">[</span> <span class="s2">&quot;$TERM&quot;</span> <span class="o">=</span> <span class="s2">&quot;linux&quot;</span> <span class="o">]</span>; <span class="k">then</span></span>
<span class='line'>  <span class="c"># exec fbterm</span></span>
<span class='line'>  <span class="nv">LC_CTYPE</span><span class="o">=</span>zh_TW.UTF-8 <span class="nb">exec </span>fbterm</span>
<span class='line'><span class="k">fi</span></span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>這樣後就是可以試試看在 tty 底下登入後是否會執行 Fbterm 了，當然Fbterm 的配置在 <code>.fbtermrc</code> 底下當然可以依照自己的喜好配置字體或字體、大小等。</p>
<p>接着就是配置中文輸入，到目前爲止唯一正常的就是 fcitx 了，當然先安裝吧</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span></pre></td><td class='code'><pre><code><span class='line'>sudo apt-get install fcitx fcitx-chewing fcitx-frontend-all fcitx-libpinyin im-config</span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>我是覺得 libpinyin 的注音輸入方式比較像 HIME 的詞音，看看喜歡哪種輸入法就找找看吧</p>
<p>安裝完後如果用其他輸入法的，很抱歉如果要在 fbterm 底下輸入中文就只能選一種使用開啓 <code>im-config</code>，把預設輸入法改成 <code>fcitx</code> 重新開機，並修改<code>.fbtermrc</code>找到<code>input-method=</code>改成</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span></pre></td><td class='code'><pre><code><span class='line'><span class="n">input</span><span class="o">-</span><span class="n">method</span><span class="o">=</span><span class="n">fcitx</span><span class="o">-</span><span class="n">fbterm</span></span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>就可以試試看有沒有問題了，但是用了幾次 fcitx 都會當掉的情況要殺掉 dbus 重開才可以解決問題</p>
<p>至於其他fbterm的配置改天在來寫吧</p>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[在 Ubuntu 下修復 Windows7 Boot Loader]]></title>
    <link href="http://www.renn999.cc/archives/925/"/>
    <updated>2014-09-27T17:25:00+0800</updated>
    <id>http://www.renn999.cc/archives/925/</id>
    <content type="html"><![CDATA[<h1>我是廢話</h1>
<hr />
<p>這次還是沒有廢話...</p>
<h1>正題開始</h1>
<hr />
<p>之前為了玩一個遊戲把 Windows7 召喚回來，但是還原後還是開不了機，原來 ASUS 筆電內件還原根本不會修復 Boot Loader ，臉上頓時三條線，手邊又沒有 Windows7 安裝光碟，剛好又 google 到在 Ubuntu 下可以直接修復 Boot Loader 的方法，發現到超簡單的...</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span></pre></td><td class='code'><pre><code><span class='line'><span class="nv">$ </span>sudo apt-get update</span>
<span class='line'><span class="nv">$ </span>sudo apt-get install syslinux</span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>然後利用 <code>fdisk</code> 或 <code>gpatred</code> 確認安裝的硬碟代號，這裡假設<code>/dev/sda</code></p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span></pre></td><td class='code'><pre><code><span class='line'><span class="nv">$ </span>sudo dd <span class="k">if</span><span class="o">=</span>/usr/lib/syslinux/mbr.bin <span class="nv">of</span><span class="o">=</span>/dev/sda</span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>這樣就可以了...</p>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[OpenShift Daily Backup and Push to Github or Bitbucket]]></title>
    <link href="http://www.renn999.cc/archives/924/"/>
    <updated>2014-07-13T15:41:00+0800</updated>
    <id>http://www.renn999.cc/archives/924/</id>
    <content type="html"><![CDATA[<h1>我是廢話</h1>
<hr />
<p>嘛~！(滾來滾去~！</p>
<h1>正題開始</h1>
<hr />
<p>在 <a href="https://www.openshift.com" title="OpenShift">OpenShift</a> 上雖然有提供備份功能，但是僅只要備份 SQL 資料還是牛刀一把，當然 <a href="https://www.openshift.com" title="OpenShift">OpenShift</a> 尚有提供 Cron 等工具，反而直接 dump sql 資料出來反而是一個比較直覺的方法。我也看過不少的做法，例如<a href="http://www.skyebook.net/blog/2012/08/openshift-postgresql-backups/">這篇</a>利用 rsync ，但是固定一段時間就要去下一次指令。所以我就想說有沒有直接可以 psuh 上 git private repo 的方法，這樣就不用固定都還要從 app 上拉下來。</p>
<!--more-->

<p>但是因為 <a href="https://www.openshift.com" title="OpenShift">OpenShift</a> 上權限的關系，要 ssh 真是一件大工程，裡面唯一個可以寫入又不會被清掉的資料夾大概就只有一個 <code>$OPENSHIFT_DATA_DIR</code> ，可以用的指令也算不錯多 <code>ssh-keygen</code>、<code>ssh-agent</code>...等，繞個路應該還是可以達到想要的效果。</p>
<p>當然 ssh-keygen 等相關技術文件請參閱 <a href="https://github.com">github</a> <a href="https://help.github.com/articles/generating-ssh-keys">Generating SSH Keys</a> 文章，但是其中在 ssh-keygen 要產生 key 時會問 key 要存放在哪裡，請將其指定到 <code>$OPENSHIFT_DATA_DIR</code> 中，接著就可以把 pubkey 加入到 github 或其他類似網站的信任清單中後，就可以測試了。</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span></pre></td><td class='code'><pre><code><span class='line'><span class="nb">eval</span> <span class="s2">&quot;$(ssh-agent -s)&quot;</span></span>
<span class='line'>ssh-add <span class="nv">$OPENSHIFT_DATA_DIR</span><span class="s1">&#39;your/id_rsa/key/path&#39;</span></span>
<span class='line'>ssh -o <span class="nv">UserKnownHostsFile</span><span class="o">=</span>/dev/null -o <span class="nv">StrictHostKeyChecking</span><span class="o">=</span>no -T git@github.com</span>
<span class='line'>killall ssh-agent</span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>如果看到</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span></pre></td><td class='code'><pre><code><span class='line'>Hi username! You&#39;ve successfully authenticated, but GitHub does not provide shell access.</span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>表示成功了，但在這裡算是完成步驟的三分之二而已，當然要讓 git 的 ssh 作用還要建立一個假的 ssh 在 <code>$OPENSHIFT_DATA_DIR</code> 中</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span></pre></td><td class='code'><pre><code><span class='line'><span class="nb">cd</span> <span class="nv">$OPENSHIFT_DATA_DIR</span></span>
<span class='line'><span class="nb">echo</span> <span class="s1">&#39;ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $*&#39;</span> &gt; ssh</span>
<span class='line'>chmod +x ssh</span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>當然就可以將相關的 git 資料夾建立 init add remote 相關資訊建立好後就可以寫入到 cron 中</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'> 1</span>
<span class='line-number'> 2</span>
<span class='line-number'> 3</span>
<span class='line-number'> 4</span>
<span class='line-number'> 5</span>
<span class='line-number'> 6</span>
<span class='line-number'> 7</span>
<span class='line-number'> 8</span>
<span class='line-number'> 9</span>
<span class='line-number'>10</span></pre></td><td class='code'><pre><code><span class='line'><span class="c">##copy or generate backup file into the folder. and cd into it.</span></span>
<span class='line'>...</span>
<span class='line'><span class="c">##start git commend</span></span>
<span class='line'>git add .</span>
<span class='line'>git commit -a -m <span class="s2">&quot;git commit message&quot;</span></span>
<span class='line'></span>
<span class='line'><span class="nb">eval</span> <span class="s2">&quot;$(ssh-agent -s)&quot;</span></span>
<span class='line'>ssh-add <span class="nv">$OPENSHIFT_DATA_DIR</span><span class="s1">&#39;your/id_rsa/key/path&#39;</span></span>
<span class='line'><span class="nv">GIT_TRACE</span><span class="o">=</span>1 <span class="nv">GIT_SSH</span><span class="o">=</span><span class="nv">$OPENSHIFT_DATA_DIR</span><span class="s2">&quot;ssh&quot;</span> git push</span>
<span class='line'>killall ssh-agent</span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>這樣時間一到就如果有任何變動的話就會 commit 並且 push 到相關的 git repo 中了。</p>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[OpenShift MySQL User Name Setup in php config file]]></title>
    <link href="http://www.renn999.cc/archives/923/"/>
    <updated>2014-07-12T12:59:00+0800</updated>
    <id>http://www.renn999.cc/archives/923/</id>
    <content type="html"><![CDATA[<h1>我是廢話</h1>
<hr />
<p>離上次的 blog 更新都快要一年了，雖然說人家說公務員怎樣好又怎樣好，總歸一句話只有「穩定」而已，反倒是說進了公司後總是被告戒言行要注意，這真的是這樣，不能像以前年輕那樣一天到晚都在「中二」的言論等云云，更不能寫些「官場現形記」被肉搜到也不好玩。看到不爽的事情總是都要自己吞掉，公務機關就是沒有一定的淘汰機制，即使做得在爛都不會有事，要淘汰更是難上加難。</p>
<p>反正現在時間多了，就可以玩玩以前玩的東西了，反倒是說以前玩的東西反而讓我在工作上真的是如虎添翼。</p>
<h1>正題開始</h1>
<hr />
<p>前幾天在 <a href="http://www.godaddy.com/" title="godaddy">godaddy</a> 上刷了一個 renn999.cc 的網域後總算完成了年輕的時候一個心願，順便就把 blog 等網站的網址更新了，現在連到舊的 renn999.twbbs.org 應該都會自動導到 renn999.cc 了。</p>
<p>有了就新的 domain name 後，當然就是把以前玩過的東西架構又拿出來玩了，雖然說沒有自己的 Server 但是有 <a href="https://www.openshift.com" title="OpenShift">OpenShift</a> 老實說就差不多了</p>
<!--more-->

<p>當然就想說把 <a href="http://yourls.org/" title="YOURLS">YOURLS</a> 實裝在 <a href="https://www.openshift.com" title="OpenShift">OpenShift</a> 上，但有一個非常大的問題就是在 DB 上，剛好在 OpenShift <a href="https://github.com/openshift/wordpress-example/blob/master/.openshift/config/wp-config.php" title="Wordpress-example">wordpress-example</a> 上看到要怎麼處理就想說紀錄一下。</p>
<p>其實只要在 config php 中加入</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span></pre></td><td class='code'><pre><code><span class='line'><span class="cp">&lt;?php</span></span>
<span class='line'><span class="nb">define</span><span class="p">(</span><span class="s1">&#39;DB_HOST&#39;</span><span class="p">,</span> <span class="nb">getenv</span><span class="p">(</span><span class="s1">&#39;OPENSHIFT_MYSQL_DB_HOST&#39;</span><span class="p">));</span></span>
<span class='line'><span class="nb">define</span><span class="p">(</span><span class="s1">&#39;DB_PORT&#39;</span><span class="p">,</span> <span class="nb">getenv</span><span class="p">(</span><span class="s1">&#39;OPENSHIFT_MYSQL_DB_PORT&#39;</span><span class="p">));</span></span>
<span class='line'><span class="nb">define</span><span class="p">(</span><span class="s1">&#39;DB_USER&#39;</span><span class="p">,</span> <span class="nb">getenv</span><span class="p">(</span><span class="s1">&#39;OPENSHIFT_MYSQL_DB_USERNAME&#39;</span><span class="p">));</span></span>
<span class='line'><span class="nb">define</span><span class="p">(</span><span class="s1">&#39;DB_PASS&#39;</span><span class="p">,</span> <span class="nb">getenv</span><span class="p">(</span><span class="s1">&#39;OPENSHIFT_MYSQL_DB_PASSWORD&#39;</span><span class="p">));</span></span>
<span class='line'><span class="nb">define</span><span class="p">(</span><span class="s1">&#39;DB_NAME&#39;</span><span class="p">,</span> <span class="nb">getenv</span><span class="p">(</span><span class="s1">&#39;OPENSHIFT_GEAR_NAME&#39;</span><span class="p">));</span></span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>沒想到這麼簡單，這樣就不用在另外去記 <a href="https://www.openshift.com" title="OpenShift">OpenShift</a> 建立好的 MySQL 帳號密碼等， <a href="https://www.openshift.com" title="OpenShift">OpenShift</a> 真是好物啊。</p>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[FLAC MetaData 操作]]></title>
    <link href="http://www.renn999.cc/archives/922/"/>
    <updated>2013-07-28T16:07:00+0800</updated>
    <id>http://www.renn999.cc/archives/922/</id>
    <content type="html"><![CDATA[<p><a target="_blank" href="http://minus.com/lbpAqTbTpgmuus"><img src="http://i.minus.com/jbpAqTbTpgmuus.jpg" border="0"/></a></p>
<h1>我是廢話</h1>
<hr />
<p>前幾天真的屎到爆炸，撿鑰匙還會撿到跌倒，但是不幸中的大幸就是沒事，更何況最近都在想說，看到學生們最近都在快樂的暑假生活，心中頓時想說「年輕<s>的肉體</s>真好」，喂！我沒有惡意，不要叫警察啦！！！！！！</p>
<h1>正題開始</h1>
<hr />
<p>之前在我的手機上裝上 <code>DeadBEEF</code> 之後，在聽音樂時才發現到自己從 CD 轉的 FLAC 都沒有辦法顯示出正確的 CD 曲名，我還以為是 <code>abcde</code> 在做成 CUE 檔時因為格式不對而無法讀出，自己重新寫了一堆有的沒有的工具，折騰了好一陣子...Q_Q</p>
<!--more-->

<p>到最後才發現到原來是 FLAC 其中的 <code>MetaData</code> 的問題，在 <code>abcde</code> 抓完音軌後會自動的把 CUE 檔的分軌資訊以 <code>VORBIS_COMMENT</code> 的方式寫進 FLAC 的 <code>MetaData</code> 中，而 <code>DeadBEEF</code> 會先去讀 <code>VORBIS_COMMENT</code> 其中的分軌資訊後，就不會在另外去讀 CUE 檔，就會造成歌曲的曲目及專輯名稱硬是不給你出來。</p>
<p>當然要解決這種方式，不要急著重壓啦，其實有可以編輯 FLAC <code>MetaData</code> 的工具，就是 <code>metaflac</code> ，這在安裝完 FLAC 就有的，相關更多的指令用法可以參閱 <a href="http://xiph.org/flac/documentation_tools_metaflac.html" title="FLAC 官方文件">FLAC 官方文件</a>， 或是再去找男人 (man)。</p>
<p>其實看了一下之後， FLAC 可以以塞進去的相關東西可多了，而且不只是可以塞進去還可以<s>拔</s>取出來。</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span></pre></td><td class='code'><pre><code><span class='line'><span class="gp">$</span> metaflac --remove-all your_flac_file.flac</span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>先把所有的資訊全部清掉，這會包括所有建立的 <code>seek point</code> ， <code>seek point</code> 的功用可以加速 Player 對於音樂捲動的速度，但是這也是後來可以加進去的，我的感覺是全部清掉，還是沒有清掉的覺沒差。</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span></pre></td><td class='code'><pre><code><span class='line'><span class="gp">$</span> metaflac --set-tag-from-file<span class="o">=</span><span class="s2">&quot;CUESHEET=your_flac_file.cue&quot;</span> your_flac_file.flac</span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>這樣就可以把 Cue 檔塞進去了，而且 android 上的 <code>DeadBEEF</code> 正確讀出曲目無誤！！！</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span></pre></td><td class='code'><pre><code><span class='line'><span class="gp">$</span> metaflac --import-cuesheet-from<span class="o">=</span>your_flac_file.cue your_flac_file.flac</span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>這個和上面的差別就是，這個指令就是把分軌資訊以 <code>VORBIS_COMMENT</code> 的方法寫進去，並不會紀錄曲目名稱。</p>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[ubuntu bzip 多核心壓縮]]></title>
    <link href="http://www.renn999.cc/archives/920/"/>
    <updated>2013-06-29T12:15:00+0800</updated>
    <id>http://www.renn999.cc/archives/920/</id>
    <content type="html"><![CDATA[<p><a target="_blank" href="http://minus.com/lF1skVGXcqp2"><img src="http://i.minus.com/jF1skVGXcqp2.png" border="0"/></a></p>
<h1>我是廢話</h1>
<hr />
<p>（抱歉！我不想貼萌圖）炸飛...</p>
<h1>正題開始</h1>
<hr />
<p>雖然說現在的壓縮檔常用的就那幾個，反正看到就是 rar 要不就是 zip ， 7z 偶爾看到，但是在 linux 上打滾多年後，常看到的反而不是 gz 就是 bz2 ，今天好看到前幾天重灌電腦忘記處理的映像檔，打算壓縮來減少一下空間，於是就順手的去 google 了一下有關於 bzip2 有沒有相關的多線程處理，看來還有不錯的結果。剛好也就順便寫了測試報告。</p>
<!--more-->

<h1>安裝程式</h1>
<hr />
<p>目前有的就有兩個程式，分別為 <code>pbzip2</code> 和 <code>lbzip2</code> 兩套，在 Ubuntu 12.04 下直接用 <code>apt-get</code> 安裝就可以了：</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span></pre></td><td class='code'><pre><code><span class='line'><span class="gp">$</span> sudo apt-get install lbzip2</span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>或者是</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span></pre></td><td class='code'><pre><code><span class='line'><span class="gp">$</span> sudo apt-get install pbzip2</span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<h1>如何使用</h1>
<hr />
<p>基本上用法大同小異，只是分別多了要用多少的 <code>core</code> 來處理壓縮， <code>lbzip2</code> 利用 <code>-n 數字</code> ， <code>pbizp</code> 是利用 <code>-p數字</code> ，要更詳細可以參考 <code>--help</code> 或找男人， yoooooooooooooooo~!</p>
<h1>測試報告</h1>
<hr />
<p>就以之前做的映像檔為測試：
<code><pre>-rw-r--r--  1 renn999 renn999 4294967296 Jun  2 16:19 ubuntu12.04.img</pre></code></p>
<p>bzip 時間測試：</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span></pre></td><td class='code'><pre><code><span class='line'><span class="go">renn999 @ /media/Disk_2 :</span></span>
<span class='line'><span class="gp">&gt;</span> <span class="nb">time </span>bzip2 -k -z -v -9 ubuntu12.04.img </span>
<span class='line'><span class="go">  ubuntu12.04.img:  2.965:1,  2.698 bits/byte, 66.27% saved, 4294967296 in, 1448661455 out.</span></span>
<span class='line'></span>
<span class='line'><span class="go">real  13m37.562s</span></span>
<span class='line'><span class="go">user  12m55.144s</span></span>
<span class='line'><span class="go">sys 0m9.897s</span></span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>lbzip2 時間測試：</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span>
<span class='line-number'>5</span>
<span class='line-number'>6</span>
<span class='line-number'>7</span>
<span class='line-number'>8</span></pre></td><td class='code'><pre><code><span class='line'><span class="go">renn999 @ /media/Disk_2 :</span></span>
<span class='line'><span class="gp">&gt;</span> <span class="nb">time </span>lbzip2 -k -z -v -9 -n 4 ubuntu12.04.img </span>
<span class='line'><span class="go">lbzip2: compressing &quot;ubuntu12.04.img&quot; to &quot;ubuntu12.04.img.bz2&quot;</span></span>
<span class='line'><span class="go">lbzip2: &quot;ubuntu12.04.img&quot;: compression ratio is 1:2.960, space savings is 66.21%</span></span>
<span class='line'></span>
<span class='line'><span class="go">real  4m19.824s</span></span>
<span class='line'><span class="go">user  16m9.725s</span></span>
<span class='line'><span class="go">sys 0m26.790s</span></span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>pbzip2 時間測試：</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'> 1</span>
<span class='line-number'> 2</span>
<span class='line-number'> 3</span>
<span class='line-number'> 4</span>
<span class='line-number'> 5</span>
<span class='line-number'> 6</span>
<span class='line-number'> 7</span>
<span class='line-number'> 8</span>
<span class='line-number'> 9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span></pre></td><td class='code'><pre><code><span class='line'><span class="go">renn999 @ /media/Disk_2 :</span></span>
<span class='line'><span class="gp">&gt;</span> <span class="nb">time </span>pbzip2 -k -z -9 -v -p4 ubuntu12.04.img</span>
<span class='line'><span class="go">Parallel BZIP2 v1.1.6 - by: Jeff Gilchrist [http://compression.ca]</span></span>
<span class='line'><span class="go">[Oct. 30, 2011]               (uses libbzip2 by Julian Seward)</span></span>
<span class='line'><span class="go">Major contributions: Yavor Nikolov &lt;nikolov.javor+pbzip2@gmail.com&gt;</span></span>
<span class='line'></span>
<span class='line'><span class="go">         # CPUs: 4</span></span>
<span class='line'><span class="go"> BWT Block Size: 900 KB</span></span>
<span class='line'><span class="go">File Block Size: 900 KB</span></span>
<span class='line'><span class="go"> Maximum Memory: 100 MB</span></span>
<span class='line'><span class="go">-------------------------------------------</span></span>
<span class='line'><span class="go">         File #: 1 of 1</span></span>
<span class='line'><span class="go">     Input Name: ubuntu12.04.img</span></span>
<span class='line'><span class="go">    Output Name: ubuntu12.04.img.bz2</span></span>
<span class='line'></span>
<span class='line'><span class="go">     Input Size: 4294967296 bytes</span></span>
<span class='line'><span class="go">Compressing data...</span></span>
<span class='line'><span class="go">    Output Size: 1452096308 bytes</span></span>
<span class='line'><span class="go">-------------------------------------------</span></span>
<span class='line'></span>
<span class='line'><span class="go">     Wall Clock: 358.346280 seconds</span></span>
<span class='line'></span>
<span class='line'><span class="go">real  5m58.351s</span></span>
<span class='line'><span class="go">user  22m28.108s</span></span>
<span class='line'><span class="go">sys 0m33.190s</span></span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>由上可知，時間節省了快要 66%</p>
<p>大小測試：</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span></pre></td><td class='code'><pre><code><span class='line'><span class="go">-rw-r--r--  1 renn999 renn999 1452096308 Jun  2 16:19 ubuntu12.04.img.bz2.pbzip2</span></span>
<span class='line'><span class="go">-rw-r--r--  1 renn999 renn999 1451089807 Jun  2 16:19 ubuntu12.04.img.bz2.lbzip2</span></span>
<span class='line'><span class="go">-rw-r--r--  1 renn999 renn999 1448661455 Jun  2 16:19 ubuntu12.04.img.bz2.bzip2</span></span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>還是傳統的 bzip 壓縮率還是高了一點，但是老實說時間省的還是划得來。</p>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[手機利用Ubuntu 12.04藍芽播放音樂]]></title>
    <link href="http://www.renn999.cc/archives/919/"/>
    <updated>2013-06-27T19:34:00+0800</updated>
    <id>http://www.renn999.cc/archives/919/</id>
    <content type="html"><![CDATA[<p><a target="_blank" href="http://minus.com/lbb6crUa4PpdPT"><img src="http://i.minus.com/jbb6crUa4PpdPT.jpg" border="0"/></a></p>
<h1>這是廢話</h1>
<hr />
<p>今年開始有了工作後，順手就將手邊的智障型手機，換成了智慧型手機看看能不能增加一點智慧，但是應該是不夠出水(潮)，沒錢換成水果牌的，但是還算不錯是換成以卵擊石可以接平板的二號機，還算用得滿意。</p>
<h1>正題開始</h1>
<hr />
<p>當我要用藍芽與我的筆電連接時，除了可以可以傳檔外，我還發現到可以把電腦變成音訊裝置，手機也可以變成麥克風，但是只有麥克風是成功的，而且 12.04 的藍芽都怪怪的，順手一次把兩個問題都解決掉，傳檔還是用 wifi 開 Sftp 會比較快，藍芽的傳輸速率超少，而 Mtp 問題還是一堆(無奈)。</p>
<!--more-->

<h1>先解決藍芽問題</h1>
<hr />
<p>其實這很簡單裝一個 blueman 就好了</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span></pre></td><td class='code'><pre><code><span class='line'><span class="n">apt</span><span class="o">-</span><span class="n">get</span> <span class="n">install</span> <span class="n">blueman</span></span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>這是一個還不錯用的藍芽管理，至少比內建的好多了。反正就是好用多了。</p>
<h1>開啟藍芽音訊</h1>
<hr />
<p>之後修改 <code>/etc/bluetooth/audio.conf</code></p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span></pre></td><td class='code'><pre><code><span class='line'><span class="n">sudo</span> <span class="n">vim</span> <span class="o">/</span><span class="n">etc</span><span class="o">/</span><span class="n">bluetooth</span><span class="o">/</span><span class="n">audio</span><span class="p">.</span><span class="n">conf</span></span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>在設定檔找到</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span></pre></td><td class='code'><pre><code><span class='line'><span class="k">[General]</span></span>
<span class='line'><span class="c1">## 把底下的東東加入</span></span>
<span class='line'><span class="na">Enable</span><span class="o">=</span><span class="s">Source</span></span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>這樣應該可以了，最好Reboot一下電腦應該就可以了，這樣就可以用手機播音樂，用耳機在電腦上聽音樂了。</p>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[THBGM python play music]]></title>
    <link href="http://www.renn999.cc/archives/918/"/>
    <updated>2013-06-09T22:54:00+0800</updated>
    <id>http://www.renn999.cc/archives/918/</id>
    <content type="html"><![CDATA[<p>其實這應該說是接續上一篇，因為我注意到弄出來的直接是 PCM WAVE，可以直接存成 wav，所以說我在想說是不是直接餵給 Sound driver就有音樂跑出來了，但是好像不是這樣，
本在<s>股溝</s>上找到的都是餵給 OSS，要不然就是要利用 <code>pygame</code>，真的很不想殺雞用牛刀，好不容易找到原來關在在於新的 Linux 都放棄 OSS 改用 ALSA，像是 <a href="http://pyalsaaudio.sourceforge.net/">pyALSAAudio</a> 還好官方有寫些範例參考，最重要的就是真的非常簡單 read frame 後在塞給 driver 就好了，當我的喇叭放出熟悉的音樂真的感動快炸掉了。（謎之音：你真的是自虐到炸掉了！！！！）</p>
<p>但是老實說，沒時間去研究 GUI 要怎麼寫</p>
<!--more-->

<h2>安裝<a href="http://pyalsaaudio.sourceforge.net/">pyALSAAudio</a></h2>
<p>ubuntu 下可以
<pre><code>sudo apt-get install python-alsaaudio</code></pre>
要不然去官方自己下載，並 setup</p>
<h2>Source Code</h2>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'> 1</span>
<span class='line-number'> 2</span>
<span class='line-number'> 3</span>
<span class='line-number'> 4</span>
<span class='line-number'> 5</span>
<span class='line-number'> 6</span>
<span class='line-number'> 7</span>
<span class='line-number'> 8</span>
<span class='line-number'> 9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span>
<span class='line-number'>18</span>
<span class='line-number'>19</span>
<span class='line-number'>20</span>
<span class='line-number'>21</span>
<span class='line-number'>22</span>
<span class='line-number'>23</span>
<span class='line-number'>24</span>
<span class='line-number'>25</span>
<span class='line-number'>26</span>
<span class='line-number'>27</span>
<span class='line-number'>28</span>
<span class='line-number'>29</span>
<span class='line-number'>30</span>
<span class='line-number'>31</span>
<span class='line-number'>32</span>
<span class='line-number'>33</span>
<span class='line-number'>34</span>
<span class='line-number'>35</span>
<span class='line-number'>36</span>
<span class='line-number'>37</span>
<span class='line-number'>38</span>
<span class='line-number'>39</span>
<span class='line-number'>40</span>
<span class='line-number'>41</span>
<span class='line-number'>42</span>
<span class='line-number'>43</span></pre></td><td class='code'><pre><code><span class='line'><span class="kn">import</span> <span class="nn">alsaaudio</span></span>
<span class='line'><span class="n">card</span> <span class="o">=</span> <span class="s">&#39;default&#39;</span></span>
<span class='line'><span class="n">dat_path</span> <span class="o">=</span> <span class="s">ur&#39;thbgm_tr.dat&#39;</span></span>
<span class='line'><span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">dat_path</span><span class="p">,</span> <span class="s">&#39;rb&#39;</span><span class="p">)</span></span>
<span class='line'><span class="sd">&#39;&#39;&#39;</span></span>
<span class='line'><span class="sd">這是第7首 &quot;孤独なウェアウルフ&quot; 唯一會讓我一聽在聽的 資訊可以參考</span></span>
<span class='line'><span class="sd">http://www.renn999.twbbs.org/archives/917/</span></span>
<span class='line'><span class="sd">另外 更多的ALSAAudio範例可以參考</span></span>
<span class='line'><span class="sd">http://sourceforge.net/projects/pyalsaaudio/</span></span>
<span class='line'><span class="sd">&#39;&#39;&#39;</span></span>
<span class='line'><span class="n">seek_info</span><span class="o">=</span><span class="mh">0x06e2ea50</span></span>
<span class='line'><span class="n">intro</span> <span class="o">=</span> <span class="mh">0x23cf40</span></span>
<span class='line'><span class="n">loop</span> <span class="o">=</span> <span class="mh">0xF95340</span></span>
<span class='line'></span>
<span class='line'><span class="n">device</span> <span class="o">=</span> <span class="n">alsaaudio</span><span class="o">.</span><span class="n">PCM</span><span class="p">(</span><span class="n">card</span><span class="o">=</span><span class="n">card</span><span class="p">)</span></span>
<span class='line'><span class="n">device</span><span class="o">.</span><span class="n">setchannels</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span></span>
<span class='line'><span class="n">device</span><span class="o">.</span><span class="n">setrate</span><span class="p">(</span><span class="mi">44100</span><span class="p">)</span></span>
<span class='line'><span class="n">device</span><span class="o">.</span><span class="n">setformat</span><span class="p">(</span><span class="n">alsaaudio</span><span class="o">.</span><span class="n">PCM_FORMAT_S16_LE</span><span class="p">)</span></span>
<span class='line'><span class="n">device</span><span class="o">.</span><span class="n">setperiodsize</span><span class="p">(</span><span class="mi">1024</span><span class="p">)</span></span>
<span class='line'></span>
<span class='line'><span class="n">i_fn</span> <span class="o">=</span> <span class="p">(</span><span class="n">intro</span><span class="o">/</span><span class="mi">1024</span><span class="p">)</span></span>
<span class='line'><span class="k">if</span> <span class="p">(</span><span class="n">intro</span><span class="o">%</span><span class="mi">1024</span><span class="p">):</span></span>
<span class='line'>  <span class="n">i_fn</span><span class="o">=</span><span class="n">i_fn</span><span class="o">+</span><span class="mi">1</span></span>
<span class='line'></span>
<span class='line'><span class="n">f</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="n">seek_info</span><span class="p">)</span></span>
<span class='line'><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">i_fn</span><span class="p">):</span></span>
<span class='line'>  <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="n">i_fn</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span></span>
<span class='line'>    <span class="nb">buffer</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">intro</span><span class="o">%</span><span class="mi">1024</span><span class="p">)</span></span>
<span class='line'>  <span class="k">else</span><span class="p">:</span></span>
<span class='line'>    <span class="nb">buffer</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">1024</span><span class="p">)</span></span>
<span class='line'>  <span class="n">b</span> <span class="o">=</span> <span class="n">device</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="nb">buffer</span><span class="p">)</span></span>
<span class='line'></span>
<span class='line'><span class="k">while</span> <span class="bp">True</span><span class="p">:</span> <span class="c">#loop到天荒地老</span></span>
<span class='line'>  <span class="n">f</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="n">seek_info</span> <span class="o">+</span> <span class="n">intro</span><span class="p">)</span></span>
<span class='line'>  <span class="n">l_fn</span> <span class="o">=</span> <span class="p">(</span><span class="n">loop</span><span class="o">/</span><span class="mi">1024</span><span class="p">)</span></span>
<span class='line'>  <span class="k">if</span> <span class="p">(</span><span class="n">loop</span><span class="o">%</span><span class="mi">1024</span><span class="p">):</span></span>
<span class='line'>    <span class="n">l_fn</span><span class="o">=</span><span class="n">l_fn</span><span class="o">+</span><span class="mi">1</span></span>
<span class='line'>  <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">l_fn</span><span class="p">):</span></span>
<span class='line'>    <span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="n">i_fn</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span></span>
<span class='line'>      <span class="nb">buffer</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">loop</span><span class="o">%</span><span class="mi">1024</span><span class="p">)</span></span>
<span class='line'>    <span class="k">else</span><span class="p">:</span></span>
<span class='line'>      <span class="nb">buffer</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">1024</span><span class="p">)</span></span>
<span class='line'>    <span class="n">b</span> <span class="o">=</span> <span class="n">device</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="nb">buffer</span><span class="p">)</span></span>
<span class='line'></span></code></pre></td></tr></table></div></figure>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[東方輝針城BGM解出]]></title>
    <link href="http://www.renn999.cc/archives/917/"/>
    <updated>2013-06-08T22:54:00+0800</updated>
    <id>http://www.renn999.cc/archives/917/</id>
    <content type="html"><![CDATA[<h1>我是廢話</h1>
<p>大家好，老實說我已經一段時間沒有更新我的 Blog 了，感覺上除了霉味外，我還看見了一大堆菇菇長出來了，當然自從有了工作以後真的時間並沒有比較多，應該說在工作性質的關係整天盯著螢幕真的回家後，看到有鍵盤的東西就一整個賭爛（嘆~！）。</p>
<h1>正題開始</h1>
<p>前幾天，東方例大祭 10 剛結束，當然神主 <a href="http://kourindou.exblog.jp/">ZUN</a> 也放出了新的試玩版，剛好手很癢的也去試玩了一下，但是我真的是彈幕苦手啊 QAQ... 老實說這不是重點...</p>
<p><a target="_blank" href="http://minus.com/lMCLB0nlb5L6U"><img src="http://i.minus.com/jMCLB0nlb5L6U.png" border="0"/></a></p>
<!--more-->

<h1>這才是重點</h1>
<p>老實說，沒次一看到一個有幸去的東西都會想要把他解剖出來看，就跟之前幫迷ゲーム解圖的感覺一樣，但是這只是讓我純粹筆記用，是不是有參考價值，老實說，網路上已經有一堆可以解 BGM 的程式了，我還在造輪子 ... OTZ，就只是好玩。而且這些資訊都是 google 來的，反正需要就參考吧，我只是把整個流程整理出來而已。</p>
<h2>行前動作</h2>
<p>這次的重點主要放在兩個檔案上 <code>th14tr.dat</code> 及 <code>thbgm_tr.dat</code>，但是重點還是 <code>th14tr.dat</code> 上，這是整個遊戲的腳本檔及特殊音效等都放在這裡，但是要解出來還是要靠特殊的程式 <a href="https://mega.co.nz/#!oIIX1ZRS!F9FBNygp27iGZo08BX4Hs1s50nlZIQCohbEZe0DCmls">BrightMoon</a> 這是一隻專門解出東方系列作品素材的程式，還好可以在 <code>wine</code> 底下運作無誤，因為這次的重點是 BGM 解出，其他的音效應該很容易吧。打開後會需要兩個檔案 <code>thbgm_tr.fmt</code> 及 <code>musiccmt_tr.txt</code>，先說 <code>musiccmt_tr.txt</code> 其實這只是音樂的標題及簡短介紹，我只是懶得打所以才解出來而已。</p>
<p>因為在 <code>thbgm_tr.dat</code> 這個檔案的開頭 4 bytes 就只有 <code>ZWAV</code> 而整串都是 PCM ，靠得就是 <code>th14tr.dat/thbgm_tr.fmt</code> 這個檔案 info 說何時要 loop ，如果用 <code>Hexedit</code> 等工具看到的話就會是這種狀況：</p>
<pre><code>00000000   74 68 31 34  5F 30 31 2E  77 61 76 00  00 00 00 00  th14_01.wav.....
00000010   10 00 00 00  60 2F 3D 01  D0 AD 2B 00  60 2F 3D 01  ....`/=...+.`/=.
00000020   01 00 02 00  44 AC 00 00  10 B1 02 00  04 00 10 00  ....D...........
00000030   00 00 00 00  74 68 31 34  5F 30 32 2E  77 61 76 00  ....th14_02.wav.
00000040   00 00 00 00  70 2F 3D 01  00 29 F9 00  C0 D8 15 00  ....p/=..)......
00000050   00 29 F9 00  01 00 02 00  44 AC 00 00  10 B1 02 00  .)......D.......
00000060   04 00 10 00  00 00 00 00  74 68 31 34  5F 30 33 2E  ........th14_03.
00000070   77 61 76 00  00 00 00 00  70 58 36 02  00 30 F1 00  wav.....pX6..0..
00000080   80 51 06 00  00 30 F1 00  01 00 02 00  44 AC 00 00  .Q...0......D...
00000090   10 B1 02 00  04 00 10 00  00 00 00 00  74 68 31 34  ............th14
000000A0   5F 30 34 2E  77 61 76 00  00 00 00 00  70 88 27 03  _04.wav.....p.'.
000000B0   70 8A 12 01  80 24 29 00  70 8A 12 01  01 00 02 00  p....$).p.......
000000C0   44 AC 00 00  10 B1 02 00  04 00 10 00  00 00 00 00  D...............
000000D0   74 68 31 34  5F 30 35 2E  77 61 76 00  00 00 00 00  th14_05.wav.....
000000E0   E0 12 3A 04  E0 11 23 01  30 A1 05 00  E0 11 23 01  ..:...#.0.....#.
000000F0   01 00 02 00  44 AC 00 00  10 B1 02 00  04 00 10 00  ....D...........
00000100   00 00 00 00  74 68 31 34  5F 30 36 2E  77 61 76 00  ....th14_06.wav.
00000110   00 00 00 00  C0 24 5D 05  90 C5 85 01  F0 02 0F 00  .....$].........
00000120   90 C5 85 01  01 00 02 00  44 AC 00 00  10 B1 02 00  ........D.......
00000130   04 00 10 00  00 00 00 00  74 68 31 34  5F 30 37 2E  ........th14_07.
00000140   77 61 76 00  00 00 00 00  50 EA E2 06  80 22 1D 01  wav.....P...."..
00000150   40 CF 23 00  80 22 1D 01  01 00 02 00  44 AC 00 00  @.#.."......D...
00000160   10 B1 02 00  04 00 10 00  00 00 00 00  74 68 31 32  ............th12
---  thbgm_tr.fmt       --0x0/0x1B1--------------------------------------------
generate by Hexedit</code></pre>

<p>可以很清楚的看出規律，其實就是 52bytes 一個 block ，另外寫一隻 python 讓整個看起來更有規律：</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'> 1</span>
<span class='line-number'> 2</span>
<span class='line-number'> 3</span>
<span class='line-number'> 4</span>
<span class='line-number'> 5</span>
<span class='line-number'> 6</span>
<span class='line-number'> 7</span>
<span class='line-number'> 8</span>
<span class='line-number'> 9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span></pre></td><td class='code'><pre><code><span class='line'><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">8</span><span class="p">):</span></span>
<span class='line'>    <span class="n">f</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="n">i</span><span class="o">*</span><span class="mi">52</span><span class="p">)</span></span>
<span class='line'>    <span class="n">j</span><span class="o">=</span><span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mi">52</span><span class="p">)</span></span>
<span class='line'>    <span class="n">k</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">struct</span><span class="o">.</span><span class="n">unpack</span><span class="p">(</span><span class="s">&#39;16s4s4s4s4s4s4s4s4s4s&#39;</span><span class="p">,</span> <span class="n">j</span><span class="p">))</span></span>
<span class='line'>    <span class="n">t</span> <span class="o">=</span> <span class="n">k</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span></span>
<span class='line'>    <span class="n">lsta</span><span class="o">=</span><span class="p">[]</span></span>
<span class='line'>    <span class="k">for</span> <span class="n">l</span> <span class="ow">in</span> <span class="n">k</span><span class="p">:</span></span>
<span class='line'>        <span class="n">lst</span><span class="o">=</span><span class="p">[]</span></span>
<span class='line'>        <span class="k">for</span> <span class="n">ch</span> <span class="ow">in</span> <span class="n">l</span><span class="p">:</span></span>
<span class='line'>            <span class="n">hv</span> <span class="o">=</span> <span class="nb">hex</span><span class="p">(</span><span class="nb">ord</span><span class="p">(</span><span class="n">ch</span><span class="p">))</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s">&#39;0x&#39;</span><span class="p">,</span> <span class="s">&#39;&#39;</span><span class="p">)</span></span>
<span class='line'>            <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">hv</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span></span>
<span class='line'>                <span class="n">hv</span> <span class="o">=</span> <span class="s">&#39;0&#39;</span><span class="o">+</span><span class="n">hv</span></span>
<span class='line'>            <span class="n">lst</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="n">hv</span><span class="p">)</span></span>
<span class='line'>        <span class="n">lsta</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s">&#39; &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lst</span><span class="p">))</span></span>
<span class='line'>    <span class="k">print</span> <span class="n">t</span><span class="p">,</span> <span class="s">&#39;  &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">lsta</span><span class="p">)</span></span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>解出後就是這樣子：
<pre><code>
   name        seek         full         intro        full      以下unknow
                            (len)        (len)        (len)
th14_01.wav 00 00 00 10  01 3d 2f 60  00 2b ad d0  01 3d 2f 60  00 02 00 01  00 00 ac 44  00 02 b1 10  00 10 00 04  00 00 00 00
th14_02.wav 01 3d 2f 70  00 f9 29 00  00 15 d8 c0  00 f9 29 00  00 02 00 01  00 00 ac 44  00 02 b1 10  00 10 00 04  00 00 00 00
th14_03.wav 02 36 58 70  00 f1 30 00  00 06 51 80  00 f1 30 00  00 02 00 01  00 00 ac 44  00 02 b1 10  00 10 00 04  00 00 00 00
th14_04.wav 03 27 88 70  01 12 8a 70  00 29 24 80  01 12 8a 70  00 02 00 01  00 00 ac 44  00 02 b1 10  00 10 00 04  00 00 00 00
th14_05.wav 04 3a 12 e0  01 23 11 e0  00 05 a1 30  01 23 11 e0  00 02 00 01  00 00 ac 44  00 02 b1 10  00 10 00 04  00 00 00 00
th14_06.wav 05 5d 24 c0  01 85 c5 90  00 0f 02 f0  01 85 c5 90  00 02 00 01  00 00 ac 44  00 02 b1 10  00 10 00 04  00 00 00 00
th14_07.wav 06 e2 ea 50  01 1d 22 80  00 23 cf 40  01 1d 22 80  00 02 00 01  00 00 ac 44  00 02 b1 10  00 10 00 04  00 00 00 00
</code></pre></p>
<p>知道這些東西後就很方便了，接著就可以手動解出這些音樂，以下過程參考了這些資料 <a href="http://d.hatena.ne.jp/fgshun/20091025/1256447658">http://goo.gl/Z23iZ</a> ，者裡以解出第一首為例</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'> 1</span>
<span class='line-number'> 2</span>
<span class='line-number'> 3</span>
<span class='line-number'> 4</span>
<span class='line-number'> 5</span>
<span class='line-number'> 6</span>
<span class='line-number'> 7</span>
<span class='line-number'> 8</span>
<span class='line-number'> 9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span></pre></td><td class='code'><pre><code><span class='line'><span class="n">dat_path</span> <span class="o">=</span> <span class="s">ur&#39;thbgm.dat&#39;</span></span>
<span class='line'><span class="n">f</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">dat_path</span><span class="p">,</span> <span class="s">&#39;rb&#39;</span><span class="p">)</span></span>
<span class='line'><span class="n">f</span><span class="o">.</span><span class="n">seek</span><span class="p">(</span><span class="mh">0x10</span><span class="p">)</span>              <span class="c">#第二首就插入其 seek HEX</span></span>
<span class='line'><span class="n">intro</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mh">0x2badd0</span><span class="p">)</span>  <span class="c">#插入intro len HEX</span></span>
<span class='line'><span class="n">loop</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="mh">0x1118190</span><span class="p">)</span>  <span class="c">#插入(full len)-(intro len) HEX</span></span>
<span class='line'><span class="n">f</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></span>
<span class='line'><span class="kn">import</span> <span class="nn">wave</span></span>
<span class='line'><span class="n">w</span> <span class="o">=</span> <span class="n">wave</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="s">u&#39;th14tr_01.wav&#39;</span><span class="p">,</span> <span class="s">&#39;wb&#39;</span><span class="p">)</span></span>
<span class='line'><span class="n">w</span><span class="o">.</span><span class="n">setnchannels</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span></span>
<span class='line'><span class="n">w</span><span class="o">.</span><span class="n">setsampwidth</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span></span>
<span class='line'><span class="n">w</span><span class="o">.</span><span class="n">setframerate</span><span class="p">(</span><span class="mi">44100</span><span class="p">)</span></span>
<span class='line'><span class="n">w</span><span class="o">.</span><span class="n">writeframes</span><span class="p">(</span><span class="n">intro</span><span class="p">)</span></span>
<span class='line'><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span></span>
<span class='line'>    <span class="n">w</span><span class="o">.</span><span class="n">writeframes</span><span class="p">(</span><span class="n">loop</span><span class="p">)</span></span>
<span class='line'><span class="n">w</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>此時 wave 應該就可以聽了，先暫時筆記到此晚點看看能不能把整個 script 寫出來...</p>]]></content>
  </entry>
  
  <entry>
    <title type="html"><![CDATA[apache2 wsgi 設定メモ]]></title>
    <link href="http://www.renn999.cc/archives/916/"/>
    <updated>2012-11-30T10:11:00+0800</updated>
    <id>http://www.renn999.cc/archives/916/</id>
    <content type="html"><![CDATA[<p>最近都在玩 Python 反而 php 少碰非常多，這是一個在 Ubuntu 下架設 apache2 及 wsgi 的紀錄。因為在本機上測試東西，架個在 localhost 上這樣就不用一直下 reload 指令...(:-p)</p>
<h2>* 安裝相關套件</h2>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
<span class='line-number'>2</span>
<span class='line-number'>3</span>
<span class='line-number'>4</span></pre></td><td class='code'><pre><code><span class='line'><span class="gp">$</span> sudo apt-get install apache2 libapache2-mod-wsgi</span>
<span class='line'><span class="gp">#</span>安裝套件</span>
<span class='line'><span class="gp">$</span> sudo a2enmod wsgi</span>
<span class='line'><span class="gp">#</span>載入wsgi</span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<!--more-->

<h2>* 設定相關檔案</h2>
<p>這個部份可以在<code>/etc/apache2/sites-available/</code>中新增一個 virtualhost 設定，  因為我需要開在別的 port 上所以以下是我的設定檔，僅供參考：</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'> 1</span>
<span class='line-number'> 2</span>
<span class='line-number'> 3</span>
<span class='line-number'> 4</span>
<span class='line-number'> 5</span>
<span class='line-number'> 6</span>
<span class='line-number'> 7</span>
<span class='line-number'> 8</span>
<span class='line-number'> 9</span>
<span class='line-number'>10</span>
<span class='line-number'>11</span>
<span class='line-number'>12</span>
<span class='line-number'>13</span>
<span class='line-number'>14</span>
<span class='line-number'>15</span>
<span class='line-number'>16</span>
<span class='line-number'>17</span></pre></td><td class='code'><pre><code><span class='line'><span class="nb">Listen</span> <span class="m">8888</span></span>
<span class='line'><span class="nb">NameVirtualHost</span> *:8888</span>
<span class='line'><span class="nt">&lt;VirtualHost</span> <span class="s">*:8888</span><span class="nt">&gt;</span></span>
<span class='line'>  <span class="nb">ServerAdmin</span> webmaster@localhost</span>
<span class='line'>  <span class="nb">DocumentRoot</span> <span class="sx">/home/renn999/Program/illust</span></span>
<span class='line'>  <span class="nb">WSGIScriptAlias</span> / <span class="sx">/home/renn999/Program/illust/test.wsgi</span></span>
<span class='line'>  <span class="nb">WSGIDaemonProcess</span> illust <span class="k">user</span>=renn999 <span class="k">group</span>=renn999 threads=5 </span>
<span class='line'>  <span class="nt">&lt;Directory</span> <span class="s">/home/renn999/Program/illust</span><span class="nt">&gt;</span></span>
<span class='line'>    <span class="nb">WSGIProcessGroup</span> illust</span>
<span class='line'>    <span class="nb">WSGIApplicationGroup</span> %{GLOBAL}</span>
<span class='line'>    <span class="nb">WSGIScriptReloading</span> <span class="k">On</span></span>
<span class='line'>    <span class="nb">Options</span> Indexes FollowSymLinks MultiViews</span>
<span class='line'>    <span class="nb">AllowOverride</span> <span class="k">None</span></span>
<span class='line'>    <span class="nb">Order</span> deny,allow</span>
<span class='line'>    <span class="nb">Allow</span> from <span class="k">all</span></span>
<span class='line'>  <span class="nt">&lt;/Directory&gt;</span></span>
<span class='line'><span class="nt">&lt;/VirtualHost&gt;</span></span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>相關設定檔可見[http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives]，最後連結virtual-hostfile</p>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span></pre></td><td class='code'><pre><code><span class='line'><span class="gp">$</span> sudo a2ensite &lt;virtualhost-file&gt;</span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<h2>* 啟動</h2>

<figure class="code"><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span></pre></td><td class='code'><pre><code><span class='line'><span class="gp">$</span> sudo apache2 restart</span>
<span class='line'></span></code></pre></td></tr></table></div></figure>


<p>如果是出現 500 error 請參照 error.log 修正</p>]]></content>
  </entry>
  
</feed>