tag:blogger.com,1999:blog-82089480415412159252024-03-13T22:20:09.653+08:00Float's Blogfloathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.comBlogger36125tag:blogger.com,1999:blog-8208948041541215925.post-29462488751018763742016-11-05T17:00:00.001+08:002016-11-05T17:03:09.063+08:00無用系列 (1): fortune and cowsay<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.10: http://docutils.sourceforge.net/" />
<title>無用系列 (1): fortune and cowsay</title>
<style type="text/css">
.code .hll { background-color: #ffffcc }
.code { background: #f8f8f8; }
.code .c { color: #408080; font-style: italic } /* Comment */
.code .err { border: 1px solid #FF0000 } /* Error */
.code .k { color: #008000; font-weight: bold } /* Keyword */
.code .o { color: #666666 } /* Operator */
.code .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.code .cp { color: #BC7A00 } /* Comment.Preproc */
.code .c1 { color: #408080; font-style: italic } /* Comment.Single */
.code .cs { color: #408080; font-style: italic } /* Comment.Special */
.code .gd { color: #A00000 } /* Generic.Deleted */
.code .ge { font-style: italic } /* Generic.Emph */
.code .gr { color: #FF0000 } /* Generic.Error */
.code .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.code .gi { color: #00A000 } /* Generic.Inserted */
.code .go { color: #808080 } /* Generic.Output */
.code .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.code .gs { font-weight: bold } /* Generic.Strong */
.code .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.code .gt { color: #0040D0 } /* Generic.Traceback */
.code .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.code .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.code .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.code .kp { color: #008000 } /* Keyword.Pseudo */
.code .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.code .kt { color: #B00040 } /* Keyword.Type */
.code .m { color: #666666 } /* Literal.Number */
.code .s { color: #BA2121 } /* Literal.String */
.code .na { color: #7D9029 } /* Name.Attribute */
.code .nb { color: #008000 } /* Name.Builtin */
.code .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.code .no { color: #880000 } /* Name.Constant */
.code .nd { color: #AA22FF } /* Name.Decorator */
.code .ni { color: #999999; font-weight: bold } /* Name.Entity */
.code .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.code .nf { color: #0000FF } /* Name.Function */
.code .nl { color: #A0A000 } /* Name.Label */
.code .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.code .nt { color: #008000; font-weight: bold } /* Name.Tag */
.code .nv { color: #19177C } /* Name.Variable */
.code .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.code .w { color: #bbbbbb } /* Text.Whitespace */
.code .mf { color: #666666 } /* Literal.Number.Float */
.code .mh { color: #666666 } /* Literal.Number.Hex */
.code .mi { color: #666666 } /* Literal.Number.Integer */
.code .mo { color: #666666 } /* Literal.Number.Oct */
.code .sb { color: #BA2121 } /* Literal.String.Backtick */
.code .sc { color: #BA2121 } /* Literal.String.Char */
.code .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.code .s2 { color: #BA2121 } /* Literal.String.Double */
.code .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.code .sh { color: #BA2121 } /* Literal.String.Heredoc */
.code .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.code .sx { color: #008000 } /* Literal.String.Other */
.code .sr { color: #BB6688 } /* Literal.String.Regex */
.code .s1 { color: #BA2121 } /* Literal.String.Single */
.code .ss { color: #19177C } /* Literal.String.Symbol */
.code .bp { color: #008000 } /* Name.Builtin.Pseudo */
.code .vc { color: #19177C } /* Name.Variable.Class */
.code .vg { color: #19177C } /* Name.Variable.Global */
.code .vi { color: #19177C } /* Name.Variable.Instance */
.code .il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
</head>
<body>
<div class="document" id="fortune-and-cowsay">
<img alt="https://github.com/float-tw/float-blog/raw/master/img/fortune-cowsay/cowsay.png" src="https://github.com/float-tw/float-blog/raw/master/img/fortune-cowsay/cowsay.png" />
<div class="section" id="cowsay">
<h1>cowsay</h1>
<p>如文章一開頭的牛所示, cowsay 就是一頭牛在講話,</p>
<p>你可以這樣來個 cowsay 版的 hello world:</p>
<pre class="literal-block">
$ cowsay "hello world"
#or
$ echo "hello world" | cowsay
</pre>
<p>當然如果你不喜歡牛牛,也可以來隻企鵝:</p>
<pre class="literal-block">
$ echo "hi" | cowsay -f tux
</pre>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/fortune-cowsay/cowsay-tux.png" src="https://github.com/float-tw/float-blog/raw/master/img/fortune-cowsay/cowsay-tux.png" />
</div>
<div class="section" id="fortune">
<h1>fortune</h1>
<p>fortune 可以印出一段諺語,像這樣:</p>
<pre class="literal-block">
$ fortune
Be careful of reading health books, you might die of a misprint.
-- Mark Twain
</pre>
<p>也有中文版的,像是唐詩一類的,不過是簡體,搜尋 fortune 相關的套件就可以看到</p>
</div>
<div class="section" id="id1">
<h1>應用</h1>
<p>cowsay 的 wiki 頁面 <a class="footnote-reference" href="#id4" id="id2">[1]</a> 就剛好拿了 fortune 和 cowsay 來做範例</p>
<p>把 fortune 的輸出送給 cowsay 就可以讓牛幫你講諺語了!:</p>
<pre class="literal-block">
$ fortune | cowsay
</pre>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/fortune-cowsay/fortune-cowsay.png" src="https://github.com/float-tw/float-blog/raw/master/img/fortune-cowsay/fortune-cowsay.png" />
<p>我自己則是在 bashrc 裡面加了一段,讓 bash 開起來時請小企鵝說段話:</p>
<pre class="literal-block">
echo -e "\e[s\e[3B"
fortune | cowsay -f tux | awk 'BEGIN {FS="\n"} {printf "%30s%s\n", "", $0}'
echo -e "\e[u"
</pre>
<p>效果大概像這樣</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/fortune-cowsay/bash-tux.png" src="https://github.com/float-tw/float-blog/raw/master/img/fortune-cowsay/bash-tux.png" style="width: 600px;" />
</div>
<div class="section" id="id3">
<h1>參考資料</h1>
<table class="docutils footnote" frame="void" id="id4" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id2">[1]</a></td><td><a class="reference external" href="https://zh.wikipedia.org/wiki/Cowsay">https://zh.wikipedia.org/wiki/Cowsay</a></td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id5" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label">[2]</td><td><a class="reference external" href="http://ithelp.ithome.com.tw/articles/10128193">http://ithelp.ithome.com.tw/articles/10128193</a></td></tr>
</tbody>
</table>
</div>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-90251239327546924792016-03-20T20:42:00.000+08:002016-03-20T20:43:35.188+08:00[DIY] 更換羅技 Performance MX 微動開關<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.11: http://docutils.sourceforge.net/" />
<style type="text/css">
.code .hll { background-color: #ffffcc }
.code { background: #f8f8f8; }
.code .c { color: #408080; font-style: italic } /* Comment */
.code .err { border: 1px solid #FF0000 } /* Error */
.code .k { color: #008000; font-weight: bold } /* Keyword */
.code .o { color: #666666 } /* Operator */
.code .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.code .cp { color: #BC7A00 } /* Comment.Preproc */
.code .c1 { color: #408080; font-style: italic } /* Comment.Single */
.code .cs { color: #408080; font-style: italic } /* Comment.Special */
.code .gd { color: #A00000 } /* Generic.Deleted */
.code .ge { font-style: italic } /* Generic.Emph */
.code .gr { color: #FF0000 } /* Generic.Error */
.code .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.code .gi { color: #00A000 } /* Generic.Inserted */
.code .go { color: #808080 } /* Generic.Output */
.code .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.code .gs { font-weight: bold } /* Generic.Strong */
.code .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.code .gt { color: #0040D0 } /* Generic.Traceback */
.code .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.code .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.code .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.code .kp { color: #008000 } /* Keyword.Pseudo */
.code .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.code .kt { color: #B00040 } /* Keyword.Type */
.code .m { color: #666666 } /* Literal.Number */
.code .s { color: #BA2121 } /* Literal.String */
.code .na { color: #7D9029 } /* Name.Attribute */
.code .nb { color: #008000 } /* Name.Builtin */
.code .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.code .no { color: #880000 } /* Name.Constant */
.code .nd { color: #AA22FF } /* Name.Decorator */
.code .ni { color: #999999; font-weight: bold } /* Name.Entity */
.code .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.code .nf { color: #0000FF } /* Name.Function */
.code .nl { color: #A0A000 } /* Name.Label */
.code .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.code .nt { color: #008000; font-weight: bold } /* Name.Tag */
.code .nv { color: #19177C } /* Name.Variable */
.code .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.code .w { color: #bbbbbb } /* Text.Whitespace */
.code .mf { color: #666666 } /* Literal.Number.Float */
.code .mh { color: #666666 } /* Literal.Number.Hex */
.code .mi { color: #666666 } /* Literal.Number.Integer */
.code .mo { color: #666666 } /* Literal.Number.Oct */
.code .sb { color: #BA2121 } /* Literal.String.Backtick */
.code .sc { color: #BA2121 } /* Literal.String.Char */
.code .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.code .s2 { color: #BA2121 } /* Literal.String.Double */
.code .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.code .sh { color: #BA2121 } /* Literal.String.Heredoc */
.code .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.code .sx { color: #008000 } /* Literal.String.Other */
.code .sr { color: #BB6688 } /* Literal.String.Regex */
.code .s1 { color: #BA2121 } /* Literal.String.Single */
.code .ss { color: #19177C } /* Literal.String.Symbol */
.code .bp { color: #008000 } /* Name.Builtin.Pseudo */
.code .vc { color: #19177C } /* Name.Variable.Class */
.code .vg { color: #19177C } /* Name.Variable.Global */
.code .vi { color: #19177C } /* Name.Variable.Instance */
.code .il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
</head>
<body>
<div class="document" id="diy-performance-mx">
<p>聽到好同學+好同事的滑鼠開始連點了,手癢就幫忙換一下囉</p>
<p>主角 Logitech Performance MX</p>
<p>正面</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/MX/P_20160319_154755_1_p.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/MX/P_20160319_154755_1_p.jpg" style="width: 600px;" />
<p>背面</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/MX/P_20160319_154808_1_p.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/MX/P_20160319_154808_1_p.jpg" style="width: 600px;" />
<p>腳拆掉</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/MX/P_20160319_155330.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/MX/P_20160319_155330.jpg" style="width: 600px;" />
<p>把上殼拆了,拇指的位置比較難拆,有個卡榫,之後將上殼跟主版之間的接頭拆開</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/MX/P_20160319_155942_1_p.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/MX/P_20160319_155942_1_p.jpg" style="width: 600px;" />
<p>把螺絲都拆掉(電池處有三個),接著要拿掉滾輪,滾輪後側有個插銷,插銷的座也有兩個螺絲</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/MX/P_20160319_160540.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/MX/P_20160319_160540.jpg" style="width: 600px;" />
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/MX/P_20160319_160610_1_p.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/MX/P_20160319_160610_1_p.jpg" style="width: 600px;" />
<p>主版拆下來後下方還有一個透明的塑膠板,用來放支撐滾輪的彈簧*2,還有充電 usb 的小板子</p>
<p>這塊小板子還有電池殼都有線焊在主版上,之後的操作要小心</p>
<p>接下來拿出新玩具 multi-angle vise 幫忙拆微動</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/MX/P_20160319_162343.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/MX/P_20160319_162343.jpg" style="width: 600px;" />
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/MX/P_20160319_162356_1_p.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/MX/P_20160319_162356_1_p.jpg" style="width: 600px;" />
<p>這次拆的方式不像之前用破壞掉微動一根一根拆的,改用下面影片的方式,同時加熱三根抽出來</p>
<p>不過沒有像影片那種大夾子,第一顆弄太久,好像太熱,中間那隻腳旁邊塑膠有點融化 Orz</p>
<p><a class="reference external" href="https://www.youtube.com/embed/VSfa-VK28dY">https://www.youtube.com/embed/VSfa-VK28dY</a></p>
<p>第二顆用鑷子像這樣夾住微動的兩個小洞,比較好施力,滿快就拿下來了</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/MX/P_20160319_200835_p.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/MX/P_20160319_200835_p.jpg" style="width: 600px;" />
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-55543185716534437532015-05-17T22:39:00.000+08:002016-03-20T20:43:43.938+08:00[DIY] PBT 鍵帽染色<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.10: http://docutils.sourceforge.net/" />
<title>PBT 鍵帽染色</title>
<style type="text/css">
.code .hll { background-color: #ffffcc }
.code { background: #f8f8f8; }
.code .c { color: #408080; font-style: italic } /* Comment */
.code .err { border: 1px solid #FF0000 } /* Error */
.code .k { color: #008000; font-weight: bold } /* Keyword */
.code .o { color: #666666 } /* Operator */
.code .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.code .cp { color: #BC7A00 } /* Comment.Preproc */
.code .c1 { color: #408080; font-style: italic } /* Comment.Single */
.code .cs { color: #408080; font-style: italic } /* Comment.Special */
.code .gd { color: #A00000 } /* Generic.Deleted */
.code .ge { font-style: italic } /* Generic.Emph */
.code .gr { color: #FF0000 } /* Generic.Error */
.code .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.code .gi { color: #00A000 } /* Generic.Inserted */
.code .go { color: #808080 } /* Generic.Output */
.code .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.code .gs { font-weight: bold } /* Generic.Strong */
.code .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.code .gt { color: #0040D0 } /* Generic.Traceback */
.code .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.code .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.code .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.code .kp { color: #008000 } /* Keyword.Pseudo */
.code .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.code .kt { color: #B00040 } /* Keyword.Type */
.code .m { color: #666666 } /* Literal.Number */
.code .s { color: #BA2121 } /* Literal.String */
.code .na { color: #7D9029 } /* Name.Attribute */
.code .nb { color: #008000 } /* Name.Builtin */
.code .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.code .no { color: #880000 } /* Name.Constant */
.code .nd { color: #AA22FF } /* Name.Decorator */
.code .ni { color: #999999; font-weight: bold } /* Name.Entity */
.code .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.code .nf { color: #0000FF } /* Name.Function */
.code .nl { color: #A0A000 } /* Name.Label */
.code .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.code .nt { color: #008000; font-weight: bold } /* Name.Tag */
.code .nv { color: #19177C } /* Name.Variable */
.code .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.code .w { color: #bbbbbb } /* Text.Whitespace */
.code .mf { color: #666666 } /* Literal.Number.Float */
.code .mh { color: #666666 } /* Literal.Number.Hex */
.code .mi { color: #666666 } /* Literal.Number.Integer */
.code .mo { color: #666666 } /* Literal.Number.Oct */
.code .sb { color: #BA2121 } /* Literal.String.Backtick */
.code .sc { color: #BA2121 } /* Literal.String.Char */
.code .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.code .s2 { color: #BA2121 } /* Literal.String.Double */
.code .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.code .sh { color: #BA2121 } /* Literal.String.Heredoc */
.code .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.code .sx { color: #008000 } /* Literal.String.Other */
.code .sr { color: #BB6688 } /* Literal.String.Regex */
.code .s1 { color: #BA2121 } /* Literal.String.Single */
.code .ss { color: #19177C } /* Literal.String.Symbol */
.code .bp { color: #008000 } /* Name.Builtin.Pseudo */
.code .vc { color: #19177C } /* Name.Variable.Class */
.code .vg { color: #19177C } /* Name.Variable.Global */
.code .vi { color: #19177C } /* Name.Variable.Instance */
.code .il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
</head>
<body>
<div class="document" id="pbt">
<p>因為找不太到便宜的黑色或灰色 PBT 無刻鍵帽,</p>
<p>又剛好在改裝軍團看到有賣純白無刻鍵帽和水染液,就買來自己染了。</p>
<p>開箱前忘了拍,只拍了還沒染色的鍵帽</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150501_114034.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150501_114034.jpg" style="width: 600px;" />
<img alt="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150501_114112.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150501_114112.jpg" style="width: 600px;" />
<img alt="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150501_114119.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150501_114119.jpg" style="width: 600px;" />
<img alt="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150501_114555.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150501_114555.jpg" style="width: 600px;" />
<p>然後因為不想染成純黑的所以只買了一罐黑色的水染液(店長說要染成純黑的話要 2-3 罐)</p>
<p>說明上正常水和水染液的比例是 4:1 怕染的太黑還有怕時間控制不好所以大概用了 5:1</p>
<p>請老爸幫忙找了個不會拿來煮吃的的鐵罐,配好之後放下去煮滾,水染液看起來是紫色的</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150501_211836.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150501_211836.jpg" style="width: 600px;" />
<p>滾了之後把鍵帽放下去,然後拿了隻螺絲起子一直攪拌,</p>
<p>取貨的時候有看了一下時間和顏色的對照,原本想說煮個 5-6 分鐘就好</p>
<p>結果煮一煮發現顏色還是很淡(如下圖),店長是有說在煮的時候看起來會淡一點,但是這跟我想像中的灰色也差太多 Orz</p>
<p>所以要又多煮了一陣子,然後不甘願的拿去沖水撈出來,想說大概要染第二次了</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150501_212058.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150501_212058.jpg" style="width: 600px;" />
<p>沒想到其實顏色不錯,先放著晾乾</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150501_214222.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150501_214222.jpg" style="width: 600px;" />
<p>乾了之後的顏色</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150503_222457.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150503_222457.jpg" style="width: 600px;" />
<p>組裝,先裝好了長鍵</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150503_225509.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150503_225509.jpg" style="width: 600px;" />
<p>全部裝好來一張</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150503_231325.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150503_231325.jpg" style="width: 600px;" />
<p>近拍一張</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150503_231629.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/pbt-keycap-staining/P_20150503_231629.jpg" style="width: 600px;" />
<p>來評價一下</p>
<p>優點:</p>
<ol class="arabic simple">
<li>顏色蠻漂亮的</li>
<li>便宜</li>
<li>DIY 無價</li>
</ol>
<p>缺點:</p>
<ol class="arabic simple">
<li>有些鍵帽有刮痕,店長一開始就有說可以換,不過沒有很在意,而且還要重染就算了</li>
<li>菊花孔很緊,但是衛星軸的都很鬆,長鍵不正中央按下去很卡,最後塞衛生紙解決</li>
<li>沒有定位鍵和透光鍵帽,透光鍵帽拿的時候有問,定位鍵要染的時候才想到</li>
</ol>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-23472263131398978862014-05-23T14:34:00.001+08:002016-03-20T20:43:35.185+08:00[DIY] 更換羅技 M505 微動開關<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.10: http://docutils.sourceforge.net/" />
<title>[DIY] 更換羅技 M505 微動開關</title>
<style type="text/css">
.code .hll { background-color: #ffffcc }
.code { background: #f8f8f8; }
.code .c { color: #408080; font-style: italic } /* Comment */
.code .err { border: 1px solid #FF0000 } /* Error */
.code .k { color: #008000; font-weight: bold } /* Keyword */
.code .o { color: #666666 } /* Operator */
.code .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.code .cp { color: #BC7A00 } /* Comment.Preproc */
.code .c1 { color: #408080; font-style: italic } /* Comment.Single */
.code .cs { color: #408080; font-style: italic } /* Comment.Special */
.code .gd { color: #A00000 } /* Generic.Deleted */
.code .ge { font-style: italic } /* Generic.Emph */
.code .gr { color: #FF0000 } /* Generic.Error */
.code .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.code .gi { color: #00A000 } /* Generic.Inserted */
.code .go { color: #808080 } /* Generic.Output */
.code .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.code .gs { font-weight: bold } /* Generic.Strong */
.code .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.code .gt { color: #0040D0 } /* Generic.Traceback */
.code .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.code .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.code .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.code .kp { color: #008000 } /* Keyword.Pseudo */
.code .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.code .kt { color: #B00040 } /* Keyword.Type */
.code .m { color: #666666 } /* Literal.Number */
.code .s { color: #BA2121 } /* Literal.String */
.code .na { color: #7D9029 } /* Name.Attribute */
.code .nb { color: #008000 } /* Name.Builtin */
.code .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.code .no { color: #880000 } /* Name.Constant */
.code .nd { color: #AA22FF } /* Name.Decorator */
.code .ni { color: #999999; font-weight: bold } /* Name.Entity */
.code .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.code .nf { color: #0000FF } /* Name.Function */
.code .nl { color: #A0A000 } /* Name.Label */
.code .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.code .nt { color: #008000; font-weight: bold } /* Name.Tag */
.code .nv { color: #19177C } /* Name.Variable */
.code .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.code .w { color: #bbbbbb } /* Text.Whitespace */
.code .mf { color: #666666 } /* Literal.Number.Float */
.code .mh { color: #666666 } /* Literal.Number.Hex */
.code .mi { color: #666666 } /* Literal.Number.Integer */
.code .mo { color: #666666 } /* Literal.Number.Oct */
.code .sb { color: #BA2121 } /* Literal.String.Backtick */
.code .sc { color: #BA2121 } /* Literal.String.Char */
.code .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.code .s2 { color: #BA2121 } /* Literal.String.Double */
.code .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.code .sh { color: #BA2121 } /* Literal.String.Heredoc */
.code .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.code .sx { color: #008000 } /* Literal.String.Other */
.code .sr { color: #BB6688 } /* Literal.String.Regex */
.code .s1 { color: #BA2121 } /* Literal.String.Single */
.code .ss { color: #19177C } /* Literal.String.Symbol */
.code .bp { color: #008000 } /* Name.Builtin.Pseudo */
.code .vc { color: #19177C } /* Name.Variable.Class */
.code .vg { color: #19177C } /* Name.Variable.Global */
.code .vi { color: #19177C } /* Name.Variable.Instance */
.code .il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
</head>
<body>
<div class="document" id="diy-m505">
<p>因為滑鼠的右鍵一直接觸不良,選單都叫不出來,寄信詢問羅技發現已經過保(太好了?!)</p>
<p>只好自行更換</p>
<div class="section" id="id1">
<h1>建議工具</h1>
<p>電烙鐵(頭不要太粗)和烙鐵架、吸錫器或吸錫線、螺絲起子、斜口鉗、新的微動開關,小刀、鑷子。</p>
</div>
<div class="section" id="id2">
<h1>更換流程</h1>
<p>主要寫一下我的更換過程,順便補上後來覺得應該怎樣做會比較快一些 Orz</p>
<p>首先今天的主角 logitech M505</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_175024.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_175024.jpg" style="width: 600px;" />
<p>幫他翻個身</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_175040.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_175040.jpg" style="width: 600px;" />
<p>把腳都拆掉!四個鼠腳底下都有螺絲,都拆掉。</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_175529.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_175529.jpg" style="width: 600px;" />
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_175754.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_175754.jpg" style="width: 600px;" />
<p>正面這顆不用拆</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_175736.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_175736.jpg" style="width: 600px;" />
<p>從這個接縫把上下分開,因為上下兩部份在一起有點久了,所以拆的時候有點不好拆,</p>
<p>需要稍微出一點力,上下是沒有卡榫接合的。</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_181125.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_181125.jpg" style="width: 600px;" />
<p>拆的時候要注意上下是有電源線連接的,不要扯的太用力。</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_181149.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_181149.jpg" style="width: 600px;" />
<p>把電源下拔離,可能需要小刀或鑷子的協助。</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_181159.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_181159.jpg" style="width: 600px;" />
<p>分離後</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_181354.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_181354.jpg" style="width: 600px;" />
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_181406.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_181406.jpg" style="width: 600px;" />
<p>需要先把電路板拿下來,電路板跟下半部有三顆螺絲連接,還有一條和雷射頭連接的排線。</p>
<p>後面兩顆還有排線</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_181525.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_181525.jpg" style="width: 600px;" />
<p>前面的是順便固定滾輪的,要換的微動也一起入鏡。</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_181511.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_181511.jpg" style="width: 600px;" />
<p>排線的接點,黑色那塊是拿不下來的(當初一直試著拔),只需要把排線抽出來就好。</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_181634.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_181634.jpg" style="width: 600px;" />
<p>新舊微動合照一下,我買的是日製歐姆龍(OMRON) D2F-01F</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_182450.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_182450.jpg" style="width: 600px;" />
<p>接下來就是把舊的微動解焊拿下來,解焊前的焊點忘了拍,一開始試著用吸錫器,</p>
<p>不過都沒辦法吸到可以拿下來的程度,可能因為用的是單手的吸錫器,</p>
<p>所以就把舊的微動給破壞掉在一隻一隻腳拿下來,是可以順利拿下舊的微動,不過不是好方法。</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_183952.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_183952.jpg" style="width: 600px;" />
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_184541.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_184541.jpg" style="width: 600px;" />
<p>換完之後才看到直接使用吸錫線吸應該也可以吸的乾淨,下面附上兩個用吸錫線的影片</p>
<p><a class="reference external" href="https://www.youtube.com/watch?v=dFw_K0-TUBA">https://www.youtube.com/watch?v=dFw_K0-TUBA</a></p>
<p><a class="reference external" href="https://www.youtube.com/watch?v=IAFICiOrIR0">https://www.youtube.com/watch?v=IAFICiOrIR0</a></p>
<p>吸錫線吸完錫以後可以先不要移開烙鐵跟線一同移到沒有銅箔的地方,才不會黏在一起,可以參考下面影片。</p>
<p>吸錫線是銅製的導熱快用手拿的時候要注意。</p>
<p><a class="reference external" href="http://youtu.be/8yyUlABj29o?t=2m25s">http://youtu.be/8yyUlABj29o?t=2m25s</a></p>
<p>在我用不好的方法拿下微動後,孔中卡著錫...</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_191029.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_191029.jpg" style="width: 600px;" />
<p>後來動用牙籤才把錫清掉,先用烙鐵熔掉錫以後把牙籤插進去,把錫推出來以後在用吸錫線清掉,</p>
<p>總算清乾淨 Orz</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_205634.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_205634.jpg" style="width: 600px;" />
<p>接下來就很快了,插上新的微動焊回去,稍有焊接經驗應該不難。</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_210905.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/microswitch/IMG_20140517_210905.jpg" style="width: 600px;" />
<p>最後依照拆的方式裝回去就可以了</p>
</div>
<div class="section" id="id3">
<h1>參考資料</h1>
<p><a class="reference external" href="http://yanblog.pixnet.net/blog/post/35381896">http://yanblog.pixnet.net/blog/post/35381896</a></p>
<p><a class="reference external" href="http://www.ptt.cc/bbs/Key_Mou_Pad/M.1377870542.A.8A9.html">http://www.ptt.cc/bbs/Key_Mou_Pad/M.1377870542.A.8A9.html</a></p>
</div>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com1tag:blogger.com,1999:blog-8208948041541215925.post-77813857631524534682014-01-29T00:50:00.001+08:002014-04-17T17:50:31.950+08:00[開箱] Tex Beetle 60%<body>
<div class="document" id="tex-beetle-60">
<p>拿到鍵盤的過程真是一波三折,因為校內有 6 個跟我同名的,</p>
<p>然後又沒有註明系級所以就沒被通知到 Orz</p>
<p>以下開箱圖</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_144931.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_144931.jpg" style="width: 600px;" />
<p>盒子</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_233040.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_233040.jpg" style="width: 600px;" />
<p>型號茶軸、英刻、銀色</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_233244.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_233244.jpg" style="width: 600px;" />
<p>背面說明</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_233148.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_233148.jpg" style="width: 600px;" />
<p>側面有類似透視圖的東西</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_233218.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_233218.jpg" style="width: 600px;" />
<p>側面的 logo (盒子真的很有質感)</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_145006.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_145006.jpg" style="width: 600px;" />
<p>開箱拉~</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_153110.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_153110.jpg" style="width: 600px;" />
<p>拿出來拍來一張</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131107_001134.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131107_001134.jpg" style="width: 600px;" />
<p>背面的銘版,包含組合鍵的說明和指示燈</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_153917.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_153917.jpg" style="width: 600px;" />
<p>背面支架</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_154054.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_154054.jpg" style="width: 600px;" />
<p>鍍金接頭,轉 90 度</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_154117.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_154117.jpg" style="width: 600px;" />
<p>接上去~</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_233724.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_233724.jpg" style="width: 600px;" />
<p>驗明正身</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_153014.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_153014.jpg" style="width: 600px;" />
<p>logo 照一下</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_233800.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_233800.jpg" style="width: 600px;" />
<p>鋁上蓋正面是髮絲紋,我買的是銀色(還有紅藍兩色的樣子)</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_233918.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_233918.jpg" style="width: 600px;" />
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_234007.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_234007.jpg" style="width: 600px;" />
<p>側面是磨沙消光</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_153158.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_153158.jpg" style="width: 600px;" />
<p>用 vim 一定會常用到的 Esc 不過我是設定成 ~</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_153215.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_153215.jpg" style="width: 600px;" />
<p>六塊肌部份</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_154537.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_154537.jpg" style="width: 600px;" />
<p>綠光 CapsLock</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_153617.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_153617.jpg" style="width: 600px;" />
<p>跟 oni 合照一下</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_153740.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_153740.jpg" style="width: 600px;" />
<p>跟 oni 疊疊樂比身長</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_153823.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_153823.jpg" style="width: 600px;" />
<p>oni 疊疊樂側照</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_234226.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/beetle/IMG_20131106_234226.jpg" style="width: 600px;" />
<p>跟 Ducky-9000 疊疊樂</p>
<p>打感的部份跟 oni 比起來比較輕柔,聲響也較小,</p>
<p>鋁上蓋讓鍵盤重量稍重不過有助於穩定鍵盤,重點是很漂亮XD</p>
<p>以上簡單的開箱文</p>
</div>
</body>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-30070395693970231132013-10-20T15:10:00.000+08:002013-10-20T15:11:56.897+08:00[Pyhotn] 使用 PyInstaller 打包 python 程式<div class="document" id="pyhotn-pyinstaller-python">
<p>PyInstaller 可以用來把 Python 程式打包起來,方便在其他機器上執行,</p>
<p>省去安裝 Python 以及所使用套件的時間(尤其在 windows 上)</p>
<div class="section" id="pyinstaller">
<h1>安裝 PyInstaller</h1>
<p>先到 <a class="reference external" href="http://www.pyinstaller.org/">官網</a> 下載 PyInstaller 的壓縮檔,並且解壓縮,放置到適合的路徑即可。</p>
</div>
<div class="section" id="id2">
<h1>使用方式</h1>
<p>使用方式的部份大致分為兩部份介紹。</p>
<p>第一個比較簡單的使用方式是直接使用 PyInstaller 內的 <tt class="docutils literal">pyinstaller.py</tt></p>
<p>例如現在寫好了一個 hello.py 接著使用 pyinstaller.py</p>
<pre class="code literal-block">
$ python path_to_PyInstaller/pyinstaller.py [OPTION] xxx.py
ex.
$ python path_to_PyInstaller/pyinstaller.py --onefile hello.py
</pre>
<p>執行後 pyinstaller 會為你的程式產生一個 .spec 檔(類似 makefile 的東西)</p>
<p>並且依據內容產生執行檔(pyinstaller 會提示你執行檔的位置)。</p>
<p>OPTION 的部份可以 <tt class="docutils literal">$ python pyinstaller.py <span class="pre">--help</span></tt> 查看,底下也列出一些供參考</p>
<pre class="literal-block">
--onefile 製作出獨立的執行檔
--onedir 製作出的檔案街放在同一個目錄下(預設值)
--tk 製作包含TCL/TK的檔案。
--windowed 製作視窗程式。(程式執行時不會有文字視窗出現)
--console 製作一般的console程式。
--upx 製作透過UPX壓縮過的執行檔。
--icon=<FILE.ICO> 指定程式的圖示。
--version=<FILE> 指定程式的版本資訊(需要準備一個檔案放這些資訊)。
--name=<NAME> 指定程式的名稱。若無此選項,則主script檔案的名稱將被使用。
</pre>
<p>另外有時可能 pyinstaller 沒有辦法正確分析程式相依性,或者有特別需求時可能需要</p>
<p>先修改 .spec 檔在打包,又或者要使用現有的 .spec 檔打包時可以參考下列作法。</p>
<p>首先先使用 <tt class="docutils literal">utils/Makespec.py</tt> 產生 .spec 檔</p>
<pre class="code literal-block">
$ python path_to_PyInstaller/utils/Makespec.py [OPTION] xxx.py
ex.
$ python path_to_PyInstaller/utils/Makespec.py [OPTION] hello.py
</pre>
<p>接著便會產生與主程式同名的 hello.spec 便可以對他先做需要的修改, .spec 的內容大致如下</p>
<pre class="code literal-block">
# -*- mode: python -*-
a = Analysis(['hello.py'],
pathex=['/tmp'],
hiddenimports=[],
hookspath=None)
pyz = PYZ(a.pure)
exe = EXE(pyz,
a.scripts,
a.binaries,
a.zipfiles,
a.datas,
name=os.path.join('dist', 'hello'),
debug=False,
strip=None,
upx=True,
console=True )
</pre>
<p>以筆者為例曾經在打包一個以 WxPython 撰寫的程式,打包完後執行會有以下的錯誤</p>
<pre class="code literal-block">
ImportError: No module named scipy.sparse.csgraph._validation
</pre>
<p>那網路上查到比較多的作法都是在主程式裡加上一些 import 好讓</p>
<p>pyinstaller 可以正確的分析出這個相依性這個相依性,不過這個作法讓我不太舒服,</p>
<p>因為一些檢查語法的 plugin 一樣找不到這個相依性,就會提醒我 import 了一個沒用到的東西,</p>
<p>所以我決定把他寫進 .spec 中,在 .spec 裡有個 Analysis 的項目其中有個 hiddenimports,</p>
<p>以筆者的例子就需要把 scipy.sparse.csgraph._validation 這個 module 加進去,像是這樣</p>
<pre class="code literal-block">
# -*- mode: python -*-
a = Analysis(['hello.py'],
pathex=['/tmp'],
hiddenimports=['scipy.sparse.csgraph._validation'],
hookspath=None)
..... 後略
</pre>
<p>這樣 pyinstaller 就會把這個 module 一同打包起來,就可以解決這個問題了。</p>
<p>編寫好 .spec 後就可以使用 <tt class="docutils literal">utils/Build.py</tt> 來打包</p>
<pre class="code literal-block">
$ python path_to_PyInstaller/utils/Build.py xxx.spec
ex.
$ python path_to_PyInstaller/utils/Build.py hello.spec
</pre>
<p>執行結果基本上和第一部份的相同。</p>
</div>
<div class="section" id="id3">
<h1>參考資料</h1>
<p><a class="reference external" href="http://www.dev.idv.tw/mediawiki/index.php/PyInstaller%E4%BD%BF%E7%94%A8%E7%B0%A1%E4%BB%8B">http://www.dev.idv.tw/mediawiki/index.php/PyInstaller%E4%BD%BF%E7%94%A8%E7%B0%A1%E4%BB%8B</a></p>
</div>
</div>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-39905044003630028002013-09-21T21:16:00.002+08:002013-10-20T15:16:05.157+08:00製作 gif 動畫<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.10: http://docutils.sourceforge.net/" />
<title>製作 gif 動畫</title>
<style type="text/css">
.code .hll { background-color: #ffffcc }
.code { background: #f8f8f8; }
.code .c { color: #408080; font-style: italic } /* Comment */
.code .err { border: 1px solid #FF0000 } /* Error */
.code .k { color: #008000; font-weight: bold } /* Keyword */
.code .o { color: #666666 } /* Operator */
.code .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.code .cp { color: #BC7A00 } /* Comment.Preproc */
.code .c1 { color: #408080; font-style: italic } /* Comment.Single */
.code .cs { color: #408080; font-style: italic } /* Comment.Special */
.code .gd { color: #A00000 } /* Generic.Deleted */
.code .ge { font-style: italic } /* Generic.Emph */
.code .gr { color: #FF0000 } /* Generic.Error */
.code .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.code .gi { color: #00A000 } /* Generic.Inserted */
.code .go { color: #808080 } /* Generic.Output */
.code .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.code .gs { font-weight: bold } /* Generic.Strong */
.code .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.code .gt { color: #0040D0 } /* Generic.Traceback */
.code .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.code .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.code .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.code .kp { color: #008000 } /* Keyword.Pseudo */
.code .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.code .kt { color: #B00040 } /* Keyword.Type */
.code .m { color: #666666 } /* Literal.Number */
.code .s { color: #BA2121 } /* Literal.String */
.code .na { color: #7D9029 } /* Name.Attribute */
.code .nb { color: #008000 } /* Name.Builtin */
.code .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.code .no { color: #880000 } /* Name.Constant */
.code .nd { color: #AA22FF } /* Name.Decorator */
.code .ni { color: #999999; font-weight: bold } /* Name.Entity */
.code .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.code .nf { color: #0000FF } /* Name.Function */
.code .nl { color: #A0A000 } /* Name.Label */
.code .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.code .nt { color: #008000; font-weight: bold } /* Name.Tag */
.code .nv { color: #19177C } /* Name.Variable */
.code .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.code .w { color: #bbbbbb } /* Text.Whitespace */
.code .mf { color: #666666 } /* Literal.Number.Float */
.code .mh { color: #666666 } /* Literal.Number.Hex */
.code .mi { color: #666666 } /* Literal.Number.Integer */
.code .mo { color: #666666 } /* Literal.Number.Oct */
.code .sb { color: #BA2121 } /* Literal.String.Backtick */
.code .sc { color: #BA2121 } /* Literal.String.Char */
.code .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.code .s2 { color: #BA2121 } /* Literal.String.Double */
.code .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.code .sh { color: #BA2121 } /* Literal.String.Heredoc */
.code .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.code .sx { color: #008000 } /* Literal.String.Other */
.code .sr { color: #BB6688 } /* Literal.String.Regex */
.code .s1 { color: #BA2121 } /* Literal.String.Single */
.code .ss { color: #19177C } /* Literal.String.Symbol */
.code .bp { color: #008000 } /* Name.Builtin.Pseudo */
.code .vc { color: #19177C } /* Name.Variable.Class */
.code .vg { color: #19177C } /* Name.Variable.Global */
.code .vi { color: #19177C } /* Name.Variable.Instance */
.code .il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
</head>
<body>
<div class="document" id="gif">
<p>因為看到了一些 vim plugin 利用 gif 動畫來 Demo plugin 的效果,</p>
<p>最近也自己在寫 vim plugin 所以也想來做看看,</p>
<p>製作過程分成三個步驟</p>
<div class="section" id="id1">
<h1>錄製影片</h1>
<p>首先我利用 kazam 來錄製影片,選用 kazam 的原因是因為他可以利用拖拉的方式來選取</p>
<p>錄製範圍,雖然在一些小地方的中文顯示有點問題,不過不影響使用。</p>
</div>
<div class="section" id="id2">
<h1>將影片轉成 gif 檔</h1>
<p>接下來使用 mplayer 把影片轉換成 gif 檔。</p>
<pre class="code literal-block">
mplayer input.mp4 -ao null -vo gif89a:fps=13 output=output.gif
</pre>
<p>另外可以加上 <tt class="docutils literal"><span class="pre">-ss</span></tt> 和 <tt class="docutils literal"><span class="pre">-endpos</span></tt> 來設定轉換的時間起點和長度,</p>
<p>這部份可以參考後面附的參考資料。</p>
</div>
<div class="section" id="id3">
<h1>壓縮 gif 檔</h1>
<p>由於轉換出來的 gif 檔案會很大,以我自己錄製的檔案為例,</p>
<p>原本解析度 818x502 時間長度 37 秒總共大小才 662 KB 的 mp4 影片,</p>
<p>轉換成 gif 檔後竟然有 8.2 MB,這樣放在網頁上的載入時間怕會有點久,</p>
<p>所以利用 convert 幫他瘦身一下</p>
<pre class="code literal-block">
convert output.gif -fuzz 10% -layers Optimize optimised.gif
</pre>
<p>剛剛提到的檔案瘦身之後剩下 666 KB。</p>
<p>我錄起來的結果是有些小地方不太清楚,不知道像 <a class="reference external" href="https://github.com/Valloric/YouCompleteMe">YouCompleteMe</a> 的是怎麼錄的,</p>
<p>感覺就蠻清晰的 Orz,我自己錄的在這 <a class="reference external" href="https://github.com/float-tw/easyreST/">easyreST</a></p>
</div>
<div class="section" id="id4">
<h1>參考資料</h1>
<p><a class="reference external" href="http://www.tux-crazy.com/2012/04/how-to-create-animated-gif-from-video.html">http://www.tux-crazy.com/2012/04/how-to-create-animated-gif-from-video.html</a></p>
<p><a class="reference external" href="http://unix.stackexchange.com/questions/35282/convert-ogv-video-to-gif-animation">http://unix.stackexchange.com/questions/35282/convert-ogv-video-to-gif-animation</a></p>
</div>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-77010760587611764192013-07-02T17:25:00.000+08:002013-07-02T17:26:00.333+08:00[rsST] 修改 rst2html highlight style<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.10: http://docutils.sourceforge.net/" />
<title>[reST] 修改 rst2html code highlight sytle</title>
<style type="text/css">
.code .hll { background-color: #ffffcc }
.code { background: #f8f8f8; }
.code .c { color: #408080; font-style: italic } /* Comment */
.code .err { border: 1px solid #FF0000 } /* Error */
.code .k { color: #008000; font-weight: bold } /* Keyword */
.code .o { color: #666666 } /* Operator */
.code .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.code .cp { color: #BC7A00 } /* Comment.Preproc */
.code .c1 { color: #408080; font-style: italic } /* Comment.Single */
.code .cs { color: #408080; font-style: italic } /* Comment.Special */
.code .gd { color: #A00000 } /* Generic.Deleted */
.code .ge { font-style: italic } /* Generic.Emph */
.code .gr { color: #FF0000 } /* Generic.Error */
.code .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.code .gi { color: #00A000 } /* Generic.Inserted */
.code .go { color: #808080 } /* Generic.Output */
.code .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.code .gs { font-weight: bold } /* Generic.Strong */
.code .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.code .gt { color: #0040D0 } /* Generic.Traceback */
.code .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.code .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.code .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.code .kp { color: #008000 } /* Keyword.Pseudo */
.code .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.code .kt { color: #B00040 } /* Keyword.Type */
.code .m { color: #666666 } /* Literal.Number */
.code .s { color: #BA2121 } /* Literal.String */
.code .na { color: #7D9029 } /* Name.Attribute */
.code .nb { color: #008000 } /* Name.Builtin */
.code .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.code .no { color: #880000 } /* Name.Constant */
.code .nd { color: #AA22FF } /* Name.Decorator */
.code .ni { color: #999999; font-weight: bold } /* Name.Entity */
.code .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.code .nf { color: #0000FF } /* Name.Function */
.code .nl { color: #A0A000 } /* Name.Label */
.code .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.code .nt { color: #008000; font-weight: bold } /* Name.Tag */
.code .nv { color: #19177C } /* Name.Variable */
.code .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.code .w { color: #bbbbbb } /* Text.Whitespace */
.code .mf { color: #666666 } /* Literal.Number.Float */
.code .mh { color: #666666 } /* Literal.Number.Hex */
.code .mi { color: #666666 } /* Literal.Number.Integer */
.code .mo { color: #666666 } /* Literal.Number.Oct */
.code .sb { color: #BA2121 } /* Literal.String.Backtick */
.code .sc { color: #BA2121 } /* Literal.String.Char */
.code .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.code .s2 { color: #BA2121 } /* Literal.String.Double */
.code .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.code .sh { color: #BA2121 } /* Literal.String.Heredoc */
.code .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.code .sx { color: #008000 } /* Literal.String.Other */
.code .sr { color: #BB6688 } /* Literal.String.Regex */
.code .s1 { color: #BA2121 } /* Literal.String.Single */
.code .ss { color: #19177C } /* Literal.String.Symbol */
.code .bp { color: #008000 } /* Name.Builtin.Pseudo */
.code .vc { color: #19177C } /* Name.Variable.Class */
.code .vg { color: #19177C } /* Name.Variable.Global */
.code .vi { color: #19177C } /* Name.Variable.Instance */
.code .il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
</head>
<body>
<div class="document" id="rest-rst2html-code-highlight-sytle">
<p>不知道為什麼上一篇裝完新的 rst2html 轉出來的 syntax highlight 超醜,明明 restview 弄出來得很漂亮阿....</p>
<p>rst2html 不加參數</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/rst2html.jpeg" src="https://github.com/float-tw/float-blog/raw/master/img/rst2html.jpeg" />
<p>restview</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/restview.jpeg" src="https://github.com/float-tw/float-blog/raw/master/img/restview.jpeg" />
<p>查了一下可以從 pygmentize 匯出 syntax highlight 的 css (<a class="reference external" href="http://stackoverflow.com/questions/9807604/how-can-i-get-rst2html-py-to-include-the-css-for-syntax-highlighting">來源</a>):</p>
<pre class="literal-block">
$ pygmentize -S default -f html -a .highlight > style.css
</pre>
<p>匯出以後會得到一個像這樣的檔案:</p>
<pre class="literal-block">
.highlight .hll { background-color: #ffffcc }
.highlight { background: #f8f8f8; }
.highlight .c { color: #408080; font-style: italic } /* Comment */
.highlight .err { border: 1px solid #FF0000 } /* Error */
.highlight .k { color: #008000; font-weight: bold } /* Keyword */
.highlight .o { color: #666666 } /* Operator */
.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.highlight .cp { color: #BC7A00 } /* Comment.Preproc */
</pre>
<p>接下來看一下把這段 code 原本用 rst2html 轉換後的結果</p>
<pre class="code c literal-block" id="id2">
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
<span class="kt">int</span> <span class="n">x</span><span class="p">;</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"hello</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</pre>
<pre class="literal-block">
$ rst2html test.rst > test.html
</pre>
<pre class="code html literal-block">
<span class="nt"><pre</span> <span class="na">class=</span><span class="s">"code c literal-block"</span><span class="nt">></span>
<span class="nt"><span</span> <span class="na">class=</span><span class="s">"keyword type"</span><span class="nt">></span>int<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"name function"</span><span class="nt">></span>main<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"punctuation"</span><span class="nt">></span>()<span class="nt"></span></span>
<span class="nt"><span</span> <span class="na">class=</span><span class="s">"punctuation"</span><span class="nt">></span>{<span class="nt"></span></span>
<span class="nt"><span</span> <span class="na">class=</span><span class="s">"keyword type"</span><span class="nt">></span>int<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"name"</span><span class="nt">></span>x<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"punctuation"</span><span class="nt">></span>;<span class="nt"></span></span>
<span class="nt"><span</span> <span class="na">class=</span><span class="s">"name"</span><span class="nt">></span>printf<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"punctuation"</span><span class="nt">></span>(<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"literal string"</span><span class="nt">></span><span class="ni">&quot;</span>hello<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"literal string escape"</span><span class="nt">></span>\n<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"literal string"</span><span class="nt">></span><span class="ni">&quot;</span><span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"punctuation"</span><span class="nt">></span>);<span class="nt"></span></span>
<span class="nt"><span</span> <span class="na">class=</span><span class="s">"keyword"</span><span class="nt">></span>return<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"literal number integer"</span><span class="nt">></span>0<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"punctuation"</span><span class="nt">></span>;<span class="nt"></span></span>
<span class="nt"><span</span> <span class="na">class=</span><span class="s">"punctuation"</span><span class="nt">></span>}<span class="nt"></span></span>
<span class="nt"></pre></span>
</pre>
<p>接下來需要修改一下 rst2html 的參數和剛剛的 sytle.css 讓 css 可以正確生效</p>
<p>首先是 <pre> 的 class 部份 code-block 轉換出來的是 code 而 sytle.css 裡面用的是 highlight 所以要先把 highlight 都改成 code:</p>
<pre class="literal-block">
.code .hll { background-color: #ffffcc }
.code { background: #f8f8f8; }
.code .c { color: #408080; font-style: italic } /* Comment */
.code .err { border: 1px solid #FF0000 } /* Error */
.code .k { color: #008000; font-weight: bold } /* Keyword */
.code .o { color: #666666 } /* Operator */
.code .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.code .cp { color: #BC7A00 } /* Comment.Preproc */
</pre>
<p>接著是不同部份所使用 highlight 的 class 原本轉出來的結果是使用較長的敘述,</p>
<p>這部份需要在 rst2html 加上 <tt class="docutils literal"><span class="pre">--syntax-highlight=short</span></tt></p>
<p>使他使用簡短敘述,完成後同時指定 <tt class="docutils literal"><span class="pre">--stylesheet=style.css</span></tt> 使用剛剛的 css:</p>
<pre class="literal-block">
$ rst2html.py --stylesheet=style.css --syntax-highlight=short test.rst > test.html
</pre>
<p>轉換完的 html</p>
<pre class="code html literal-block">
<span class="nt"><pre</span> <span class="na">class=</span><span class="s">"code c literal-block"</span><span class="nt">></span>
<span class="nt"><span</span> <span class="na">class=</span><span class="s">"kt"</span><span class="nt">></span>int<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nf"</span><span class="nt">></span>main<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>()<span class="nt"></span></span>
<span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>{<span class="nt"></span></span>
<span class="nt"><span</span> <span class="na">class=</span><span class="s">"kt"</span><span class="nt">></span>int<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>x<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></span></span>
<span class="nt"><span</span> <span class="na">class=</span><span class="s">"n"</span><span class="nt">></span>printf<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>(<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"s"</span><span class="nt">></span><span class="ni">&quot;</span>hello<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"se"</span><span class="nt">></span>\n<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"s"</span><span class="nt">></span><span class="ni">&quot;</span><span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>);<span class="nt"></span></span>
<span class="nt"><span</span> <span class="na">class=</span><span class="s">"k"</span><span class="nt">></span>return<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"mi"</span><span class="nt">></span>0<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></span></span>
<span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>}<span class="nt"></span></span>
</pre>
<p>使用後的結果就如<a class="reference internal" href="#id2">這裡</a>所示</p>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-30499542016962162142013-06-29T23:09:00.000+08:002013-09-22T23:24:54.158+08:00[reST] Code Syntax Highlight<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.10: http://docutils.sourceforge.net/" />
<title>[reST] Code Syntax Highlight</title>
<style type="text/css">
.code .hll { background-color: #ffffcc }
.code { background: #f8f8f8; }
.code .c { color: #408080; font-style: italic } /* Comment */
.code .err { border: 1px solid #FF0000 } /* Error */
.code .k { color: #008000; font-weight: bold } /* Keyword */
.code .o { color: #666666 } /* Operator */
.code .cm { color: #408080; font-style: italic } /* Comment.Multiline */
.code .cp { color: #BC7A00 } /* Comment.Preproc */
.code .c1 { color: #408080; font-style: italic } /* Comment.Single */
.code .cs { color: #408080; font-style: italic } /* Comment.Special */
.code .gd { color: #A00000 } /* Generic.Deleted */
.code .ge { font-style: italic } /* Generic.Emph */
.code .gr { color: #FF0000 } /* Generic.Error */
.code .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.code .gi { color: #00A000 } /* Generic.Inserted */
.code .go { color: #808080 } /* Generic.Output */
.code .gp { color: #000080; font-weight: bold } /* Generic.Prompt */
.code .gs { font-weight: bold } /* Generic.Strong */
.code .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.code .gt { color: #0040D0 } /* Generic.Traceback */
.code .kc { color: #008000; font-weight: bold } /* Keyword.Constant */
.code .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
.code .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
.code .kp { color: #008000 } /* Keyword.Pseudo */
.code .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
.code .kt { color: #B00040 } /* Keyword.Type */
.code .m { color: #666666 } /* Literal.Number */
.code .s { color: #BA2121 } /* Literal.String */
.code .na { color: #7D9029 } /* Name.Attribute */
.code .nb { color: #008000 } /* Name.Builtin */
.code .nc { color: #0000FF; font-weight: bold } /* Name.Class */
.code .no { color: #880000 } /* Name.Constant */
.code .nd { color: #AA22FF } /* Name.Decorator */
.code .ni { color: #999999; font-weight: bold } /* Name.Entity */
.code .ne { color: #D2413A; font-weight: bold } /* Name.Exception */
.code .nf { color: #0000FF } /* Name.Function */
.code .nl { color: #A0A000 } /* Name.Label */
.code .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
.code .nt { color: #008000; font-weight: bold } /* Name.Tag */
.code .nv { color: #19177C } /* Name.Variable */
.code .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
.code .w { color: #bbbbbb } /* Text.Whitespace */
.code .mf { color: #666666 } /* Literal.Number.Float */
.code .mh { color: #666666 } /* Literal.Number.Hex */
.code .mi { color: #666666 } /* Literal.Number.Integer */
.code .mo { color: #666666 } /* Literal.Number.Oct */
.code .sb { color: #BA2121 } /* Literal.String.Backtick */
.code .sc { color: #BA2121 } /* Literal.String.Char */
.code .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
.code .s2 { color: #BA2121 } /* Literal.String.Double */
.code .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
.code .sh { color: #BA2121 } /* Literal.String.Heredoc */
.code .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
.code .sx { color: #008000 } /* Literal.String.Other */
.code .sr { color: #BB6688 } /* Literal.String.Regex */
.code .s1 { color: #BA2121 } /* Literal.String.Single */
.code .ss { color: #19177C } /* Literal.String.Symbol */
.code .bp { color: #008000 } /* Name.Builtin.Pseudo */
.code .vc { color: #19177C } /* Name.Variable.Class */
.code .vg { color: #19177C } /* Name.Variable.Global */
.code .vi { color: #19177C } /* Name.Variable.Instance */
.code .il { color: #666666 } /* Literal.Number.Integer.Long */
</style>
</head>
<body>
<div class="document" id="rest-code-syntax-highlight">
<p>今天參加了 Tainan.py X MOSUT 的聚會,其中一個主題是 sphinx 的文件教學,</p>
<p>sphinx 的文件是用 reStructuredText 撰寫的,講者 demo 的時候剛好 demo 到了在 reST 裡面使用 code syntax highlight</p>
<p>當初要開始用 reST 寫部落格的時候也稍微作過一些功課,只是 syntax highlight 的部份沒有試出來,</p>
<p>今天聽完分享後在繼續查了些資料,我原本用來轉換的 rst2html 是 Docutils 所帶的,當使用 code-block 區塊的時候,像是:</p>
<pre class="literal-block">
.. code-block:: c
int main()
{
printf("hello\n");
return 0;
}
</pre>
<p>是會發生錯誤的:</p>
<pre class="literal-block">
$ rst2html test.rst > test.html
test.rst:1: (ERROR/3) Unknown directive type "code-block".
.. code-block:: c
int main()
{
printf("hello\n");
return 0;
}
</pre>
<p>接著找到<a class="reference external" href="http://stackoverflow.com/questions/9807604/how-can-i-get-rst2html-py-to-include-the-css-for-syntax-highlighting">這篇</a>發現 Docutils 0.9 的版本後就支援了 code-block 而 Ubuntu 12.04.2 所套件庫裡的 Docutils 卻是 0.8.1:</p>
<pre class="literal-block">
$ rst2html --version
rst2html (Docutils 0.8.1 [release], Python 2.7.3, on linux2)
</pre>
<p>所以我就把他移除了(怒),接著從 pip 安裝 Docutils:</p>
<pre class="literal-block">
$ sudo apt-get remove docutils
$ sudo pip install docutils
</pre>
<p>目前 pip 上的 Docutils 是 0.10 版,趕快來試用一下</p>
<pre class="code c literal-block">
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
<span class="p">{</span>
<span class="n">printf</span><span class="p">(</span><span class="s">"hello</span><span class="se">\n</span><span class="s">"</span><span class="p">);</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">}</span>
</pre>
<p>哈,太好了可以用了 :)</p>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-71078587168026750302013-06-12T12:10:00.000+08:002013-06-12T12:11:13.650+08:00[Convert] 將文字轉成圖片<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
<title>[Convert] 將文字轉成圖片</title>
<link rel="stylesheet" href="/usr/share/docutils/writers/html4css1/html4css1.css" type="text/css" />
</head>
<body>
<div class="document" id="convert">
<p>有時候在簡報或者寫 blog 時會有需要將一些輸出結果呈現出來的時候,</p>
<p>螢幕截圖是一個不錯的方式,不過截圖可能會比較模糊而且麻煩,</p>
<p>最近發現 convert 就有附帶一個功能是將文字直接轉換成圖片,用在這個地方剛剛好。</p>
<p>首先先舉個用 convert 將文字轉成圖片的例子:</p>
<pre class="literal-block">
$ convert -size 64x32 label:float convert_label.jpeg
</pre>
<p>指定大小 64x32 文字內容為 float 就可以得到以下圖片</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/convert_label.jpeg" src="https://github.com/float-tw/float-blog/raw/master/img/convert_label.jpeg" />
<p>接下來要把 <tt class="docutils literal">ifconfig lo</tt> 的結果轉換成圖片,首先先看一下原本的執行結果:</p>
<pre class="literal-block">
$ ifconfig lo
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:38990 errors:0 dropped:0 overruns:0 frame:0
TX packets:38990 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:4280371 (4.2 MB) TX bytes:4280371 (4.2 MB)
</pre>
<p>那我們可以用 pipe 導給 convert 將結果轉成圖片:</p>
<pre class="literal-block">
$ ifconfig lo | convert label:@- convert_label_ifconfig.jpeg
</pre>
<p><tt class="docutils literal"><span class="pre">label:@-</span></tt> 的部份是表示 label 的內容由標準輸入取得,就可以得到</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/convert_label_ifconfig.jpeg" src="https://github.com/float-tw/float-blog/raw/master/img/convert_label_ifconfig.jpeg" />
<p>當然我們也可以指定圖片為黑底白字:</p>
<pre class="literal-block">
$ ifconfig lo | convert -background black -fill white label:@- convert_label_ifconfig_black.jpeg
</pre>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/convert_label_ifconfig_black.jpeg" src="https://github.com/float-tw/float-blog/raw/master/img/convert_label_ifconfig_black.jpeg" />
<p>當然 label 在使用上還有很多參數可以使用,這部份可以參考這片 <a class="footnote-reference" href="#id4" id="id1">[1]</a> 以及官方的範例 <a class="footnote-reference" href="#id5" id="id2">[2]</a></p>
<div class="section" id="id3">
<h1>參考資料</h1>
<table class="docutils footnote" frame="void" id="id4" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td><a class="reference external" href="http://www.cnx-software.com/2011/09/22/how-to-convert-a-command-line-result-into-an-image-in-linux/">http://www.cnx-software.com/2011/09/22/how-to-convert-a-command-line-result-into-an-image-in-linux/</a></td></tr>
</tbody>
</table>
<table class="docutils footnote" frame="void" id="id5" rules="none">
<colgroup><col class="label" /><col /></colgroup>
<tbody valign="top">
<tr><td class="label"><a class="fn-backref" href="#id2">[2]</a></td><td><a class="reference external" href="http://www.imagemagick.org/Usage/text/">http://www.imagemagick.org/Usage/text/</a></td></tr>
</tbody>
</table>
</div>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-77252046129613629422013-06-08T22:43:00.001+08:002013-06-08T22:44:03.475+08:00[Linux] 使用 convert 做圖片轉檔<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
<title>[Linux] 使用 convert 做圖片轉檔</title>
<link rel="stylesheet" href="/usr/share/docutils/writers/html4css1/html4css1.css" type="text/css" />
</head>
<body>
<div class="document" id="linux-convert">
<p>convert 是 ImageMagick 的一個 CLI tool</p>
<p>所以安裝 ImageMagick 就可以得到他了!</p>
<p>可以用來做圖片轉檔,調整大小,也還有其他很強大的功能</p>
<p>這邊簡單介紹一下圖片轉檔和調整大小的方法</p>
<p>首先,圖片轉檔的部份非常簡單舉個例子,如果要把 png 檔轉成 jpeg 檔:</p>
<pre class="literal-block">
convert input.png outpu.jpeg
</pre>
<p>好了,就這樣,要轉的檔名放前面,輸出檔名放後面,convert 會自己根據副檔名做轉換</p>
<p>簡單吧。</p>
<p>調整大小的話:</p>
<pre class="literal-block">
convert input.png -resize 64x64 output.png
</pre>
<p>這樣就可以把圖片縮放到可以放入 64x64 的方形內,</p>
<p>那如果要把他轉成真的是 64x64 呢?加上驚嘆號強制調整,像這樣:</p>
<pre class="literal-block">
convert input.png -resize 64x64\! output.png
</pre>
<p>倒斜線是有時候因為 shell 的關係可能驚嘆號是脫逸字元,有時不加也是可以的。</p>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-11442739831713614652013-06-02T14:16:00.000+08:002013-06-02T14:16:10.810+08:00[Linux] 文字檔編碼工具<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
<title>[Linux] 文字檔編碼工具</title>
<link rel="stylesheet" href="/usr/share/docutils/writers/html4css1/html4css1.css" type="text/css" />
</head>
<body>
<div class="document" id="linux">
<p>一開使用這些工具是因為在 linux 下的 smplayer 在載入影片字幕的時候,</p>
<p>雖然設定成解 big5 編碼,可是還是會有部份的字變成亂碼,</p>
<p>把字幕檔轉成 UTF-8 就沒有這個問題了,另外偶爾也會遇到 code 裡面有中文註解,</p>
<p>用 gedit 開會有解碼錯誤的問題,或是一些原本 windows 底下的檔案。</p>
<div class="section" id="iconv">
<h1>iconv</h1>
<p>沒記錯的話 ubuntu 12.04 預設是有安裝,</p>
<p>最早用的工具,因為參數蠻好記的範例如下:</p>
<pre class="literal-block">
iconv -f big5 -t utf8 -o output.txt input.txt
</pre>
<p>-f form-code</p>
<p>-t to-code</p>
<p>-o 輸出檔名</p>
</div>
<div class="section" id="enca">
<h1>enca</h1>
<p>用了一段時間後突然想到,是不是應該在轉換前先檢查一下檔案原本的編碼是什麼,</p>
<p>因為偶爾也會遇到簡體的編碼,</p>
<p>一開始想到的是用 <tt class="docutils literal">file</tt> ,的確 <tt class="docutils literal">file</tt> 可以用來檢查編碼,</p>
<p>不過後來發現了一個缺點,big5 編碼的檔案會被誤認成 ISO-8859,</p>
<p>所以就查到了這個,Ubuntu 12.04 預設沒有安裝 <tt class="docutils literal"><span class="pre">apt-get</span> install enca</tt> 一下就可以了。:</p>
<pre class="literal-block">
enca input.txt
</pre>
<p>就可以檢查檔案編碼了,在 manpage 裡面可以查到他支援的編碼,測了幾個檔案 big5 可以正常偵測</p>
<p>另外更強大的是這個 <tt class="docutils literal">enconv</tt> 他可以用來直接把檔案轉成系統的編碼:</p>
<pre class="literal-block">
enconv input.txt
</pre>
<p>假設系統編碼是 utf-8 而 input.txt 是 big5 編碼,那 input.txt 就會被轉成 utf-8,</p>
<p>非常的方便,完全不需要什麼參數 :)</p>
<p>當然,這兩個工具都有其他更多的參數可以使用,有興趣的可以問一下男人,</p>
<p>另外還有看到其他的工具像是 <tt class="docutils literal">convmv</tt> 參數跟 <tt class="docutils literal">iconv</tt> 類似,不過就沒有裝來玩了。</p>
</div>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-43114871449492213972013-05-17T02:35:00.003+08:002013-05-17T02:36:25.323+08:00[Linux] 檔名相關指令<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
<title>[Linux] 檔名相關指令</title>
<link rel="stylesheet" href="/usr/share/docutils/writers/html4css1/html4css1.css" type="text/css" />
</head>
<body>
<div class="document" id="linux">
<p>取得檔案(相對路徑)的絕對路徑:</p>
<pre class="literal-block">
readlink -f dir/to/file
ex
float@dorm:~/float-blog$ readlink -f ~/float-blog/linux_file_name_command.rst
/home/float/float-blog/linux_file_name_command.rst
</pre>
<p>取得檔案所在目錄:</p>
<pre class="literal-block">
dirnam dir/to/file
ex
float@dorm:~/float-blog$ dirname ~/float-blog/linux_file_name_command.rst
/home/float/float-blog
</pre>
<p>取得檔案名稱:</p>
<pre class="literal-block">
basename dir/to/file
ex
float@dorm:~/float-blog$ basename ~/float-blog/linux_file_name_command.rst
linux_file_name_command.rst
</pre>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com1tag:blogger.com,1999:blog-8208948041541215925.post-29507246212205904452013-04-26T03:26:00.000+08:002013-04-28T04:03:24.901+08:00[Python] 使用 sympy 解聯立方程組<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
<title>使用 sympy 解聯立方程組</title>
<link rel="stylesheet" href="/usr/share/docutils/writers/html4css1/html4css1.css" type="text/css" />
</head>
<body>
<div class="document" id="sympy">
<p>4x + 3y + 3z = 350</p>
<p>4x + 2y + 5z = 360</p>
<p>8x + 8y + 10z = 840</p>
<pre class="literal-block">
from sympy import *
x = Symbol('x')
y = Symbol('y')
z = Symbol('z')
f1 = 4*x + 3*y + 3*z - 350
f2 = 4*x + 2*y + 5*z - 360
f3 = 8*x + 8*y + 10*z - 840
sol = solve((f1, f2, f3), x, y, z)
pprint(sol)
# OUT: {x: 50, y: 30, z: 20}
</pre>
<p>使用 evalf 將分數轉為小數輸出</p>
<p>ex.</p>
<p>4x<sup>2</sup> + 5x - 6 = 0</p>
<pre class="literal-block">
from sympy import *
x = Symbol('x')
f = 4*x**2 + 5*x -6
sol = solve(f, x)
pprint(sol)
# OUT: [-2, 3/4]
print sol[1].evalf()
# OUT: 0.750000000000000
</pre>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-90901310723420349102013-03-13T01:52:00.000+08:002013-03-13T01:52:59.581+08:00[shell] 大量取代檔案中關鍵字<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
<title>大量取代檔案中關鍵字</title>
<link rel="stylesheet" href="/usr/share/docutils/writers/html4css1/html4css1.css" type="text/css" />
</head>
<body>
<div class="document" id="id1">
<p>逛 <a class="reference external" href="http://github.com">github</a> 的時候突然發現可以改 username,</p>
<p>之前被 jserv 嫌帳號太難記就索性換掉,</p>
<p>換完才想到 blog 的圖都放在上面阿 Orz,</p>
<p>部落格上面的就複製下來取代掉,原始檔的部份當然就交給指令來取代:</p>
<pre class="literal-block">
grep a13524000 * | cut -d ':' -f 1 | uniq | xargs sed -i 's/a13524000/float-tw/g'
</pre>
<p>先用 <cite>grep</cite> 找到有關鍵字的檔案,再用 <cite>cut</cite> 切出檔名,用 <cite>uniq</cite> 去除重複的,</p>
<p>最後用 <cite>xargs</cite> 餵給 <cite>sed</cite> 做取代</p>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-33969809207666815772013-02-03T03:57:00.003+08:002013-03-13T01:22:04.725+08:00[PC^2] special judge<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
<title>[PC2] special judge</title>
<link rel="stylesheet" href="/usr/share/docutils/writers/html4css1/html4css1.css" type="text/css" />
</head>
<body>
<div class="document" id="pc2-special-judge">
<p>剛辦完 ACmarathon 剛好研究了 pc<sup>2</sup> 的 special judge 怎麼設定</p>
<p>所使用的 pc<sup>2</sup> 版本是 9.2.3 系統是 Ubuntu 12.04 LTS</p>
<p>首先需要設定的是題目所使用的 Validator 也就是 judge 的程式</p>
<p>通常如果不用 special judge 的話可以使用 pc: sup:<cite>2</cite> 的 Validator</p>
<p>那 special judge 的話就選用 External Validator</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/pc2_validator_setting.jpeg" src="https://github.com/float-tw/float-blog/raw/master/img/pc2_validator_setting.jpeg" />
<p>然後按 Validator Prog... 後面選擇 judge 的程式,可以是現成的某個程式 (diff...)</p>
<p>也可以自己寫,第二個部份就是 Validator Command Line</p>
<p>這邊是設定如何去執行這個 Validator 這邊有提供五個變數可以使用</p>
<p>{:validator} judge 程式的名稱,也就是前面選擇的程式(不包含路徑)</p>
<p>{:infile} input file,input 測資的檔名</p>
<p>{:outfile} outpu file,參賽者程式接受 input 後的 output</p>
<p>{:ansfile} 從 pc<sup>2</sup> 設定的答案檔名</p>
<p>{:resfile} 必須輸出的 judge 結果(是個 xml file)</p>
<p>先舉個例子,如果你所選擇的 judge 程式叫做 sp 然後你的 Validator Command Line 這樣寫:</p>
<pre class="literal-block">
./{:validator} {:infile} {:outfile} {:ansfile} {:resfile}
</pre>
<p>那執行 judge 的時候就會這樣執行:</p>
<pre class="literal-block">
./sp input outpu ans result
</pre>
<p>當然如果你的 judge 程式是用 java, python 寫的也可以這樣寫:</p>
<pre class="literal-block">
java {:validator} {:infile} {:outfile} {:ansfile} {:resfile}
python {:validator} {:infile} {:outfile} {:ansfile} {:resfile}
</pre>
<p>當然這些參數的順序是可以任意變動的,如果不需要某些檔案也可以不寫</p>
<p>執行時檔案都會被放在同一個目錄下,像是 <tt class="docutils literal"><span class="pre">pc2-9.2.3/bin/executesite1judge1</span></tt></p>
<p>當你的 judge 程式執行完後必須依照所給定的 resfile 檔名產生一個檔案</p>
<p>這個檔案的內容大概是這樣:</p>
<pre class="literal-block">
<?xml version="1.0"?>
<result outcome = "No - Wrong Answer" security = "132XRSAM.txt">Answer and output file different at line 1</result>
</pre>
<p>這是一個 WA 的範例,首先第一行就是 xml 的 tag</p>
<p>接著第二行是一個 result tag 裡面包含 outcome 和 security</p>
<p>outcome 就是 judge 的結果,pc<sup>2</sup> 會去比對在 Judgements 裡面所設定的結果來回應給 client</p>
<p>預設包含這幾種結果:</p>
<pre class="literal-block">
Yes
No - Compilation Error
No - Run-time Error
No - Time-limit Exceeded
No - Wrong Answer
No - Excessive Output
No - Output Format Error
No - Other - Contact Staff
</pre>
<p>如果 result file 沒有被正確產生,或是比對不到一樣的結果則會回應 "Undetermined"</p>
<p>security 則是 resfile 的檔案名稱(猜測應該是為了防止上傳可以產生 result file 的程式用的)</p>
<p>tag 裡面的字串並不會被 pc<sup>2</sup> 拿來使用,可以是一些錯誤的原因之類的</p>
<p>而如果 AC 的話 outcome 的文字可以使用 "Yes" 或 "accepted" 下面是一個 AC 的範例:</p>
<pre class="literal-block">
<?xml version="1.0"?>
<result outcome = "accepted" security = "561XRSAM.txt"></result>
</pre>
<p>另外如果檔案有被產生,而 xml 格式有錯誤(像是少了 security)則狀態會留在 NEW 而 client 也不會收到結果</p>
<p>如果有這樣的問題可以檢查一下(這個問題弄了超久 Orz)</p>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-67731156983161360312013-01-12T03:22:00.001+08:002013-01-12T03:24:42.017+08:00[Linux] 與藍牙裝置建立 spp 連線<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
<title></title>
<link rel="stylesheet" href="/usr/share/docutils/writers/html4css1/html4css1.css" type="text/css" />
</head>
<body>
<div class="document">
<div class="section" id="linux-spp">
<p>首先將電腦與藍牙裝置進行配對</p>
<p>接著使用以下指令之一取得電腦之 BD Address:</p>
<pre class="literal-block">
$ hciconfig -a
or
$ hciconfig dev
or
$ hcitool dev
例:
┌[float@float-X220]:~
└─$ hcitool dev
Devices:
hci0 40:2C:F4:E3:14:31
</pre>
<p>以我自己為例就是 40:2C:F4:E3:14:31</p>
<p>然後取得藍牙裝置的 BD Address:</p>
<pre class="literal-block">
$ hcitool scan
例:
┌[float@float-X220]:~
└─$ hcitool scan
Scanning ...
98:E7:9A:08:52:96 float-XT535
</pre>
<p>這邊是 98:E7:9A:08:52:96</p>
<p>再來建立虛擬序列埠裝置:</p>
<pre class="literal-block">
$ sudo mknod /dev/rfcomm0 c 216 1
$ sudo chmod 666 /dev/rfcomm0
</pre>
<p>修改 <tt class="docutils literal">/etc/bluetooth/rfcomm.conf</tt> 為其建立設定:</p>
<pre class="literal-block">
$ sudo vim /etc/bluetooth/rfcomm.conf
rfcomm0{
bind no; //設置是否自動綁定設備
device 40:2C:F4:E3:14:31; //設定綁定設備的BD Address(電腦)
channel 1; //設定設備通道
comment "BTM"; //對設備的描述
}
</pre>
<p>添加 SPP(Serial Port Profile) 的SDP協議通道:</p>
<pre class="literal-block">
$ sudo sdptool add --channel=1 SP
</pre>
<p>將虛擬序列埠與藍牙裝置綁定:</p>
<pre class="literal-block">
$ sudo rfcomm bind /dev/rfcomm0 98:E7:9A:08:52:96 1
</pre>
<p>連接:</p>
<pre class="literal-block">
$ sudo hcitool cc 98:E7:9A:08:52:96
</pre>
<p>接著就可以使用可以連接序列埠的程式進行連線,像是 picocom 或 minicom</p>
<p>這邊推薦 picocom 因為我覺得比起 minicom 他的操作簡單許多:</p>
<pre class="literal-block">
$ picocom /dev/rfcomm0
</pre>
<p>離開方式為 <tt class="docutils literal">^a ^x (ctrl+a ctrl+x)</tt></p>
</div>
<div class="section" id="id1">
<h1>參考資料</h1>
<p><a class="reference external" href="http://stll516.blogspot.tw/2010/01/linuxbluetoothsppserial-port-profile.html">http://stll516.blogspot.tw/2010/01/linuxbluetoothsppserial-port-profile.html</a></p>
</div>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-72085792209214123772012-12-06T11:30:00.000+08:002012-12-06T11:31:47.501+08:00find 和 xargs 包含空白<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
<title></title>
<link rel="stylesheet" href="/usr/share/docutils/writers/html4css1/html4css1.css" type="text/css" />
</head>
<body>
<div class="document">
<div class="section" id="find-xargs">
<p>某次剛好遇到想要計算 code 的總行數,</p>
<p>就下了這樣的指令,:</p>
<pre class="literal-block">
find . -name "*.cpp" | xargs wc -l
</pre>
<p>在我的電腦上可以正常運作,只是在 <a class="reference external" href="http://kuoe0.ch/">e0</a> 的電腦上不行,</p>
<p>研究了一下發現是因為檔名中有空白的問題,</p>
<p>找到了這個解法,:</p>
<pre class="literal-block">
find . -name "*.cpp" -print0 | xargs -0 wc -l
</pre>
<p><tt class="docutils literal">find</tt> 的 <tt class="docutils literal"><span class="pre">-print0</span></tt> 是將每個輸出的結尾加上 null,</p>
<p><tt class="docutils literal">xargs</tt> 的 <tt class="docutils literal"><span class="pre">-0</span></tt> 則是將分隔的符號由空白改成 null</p>
<p>所以就可以解決 find 後檔名有空白的問題了。</p>
</div>
<div class="section" id="id1">
<h1>參考資料</h1>
<p><a class="reference external" href="http://superuser.com/questions/275057/escape-files-output-for-compatibilty-with-xargs">http://superuser.com/questions/275057/escape-files-output-for-compatibilty-with-xargs</a></p>
</div>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-849893839331498072012-11-16T15:52:00.000+08:002013-03-13T01:23:04.008+08:00LibreOffice 打字時崩潰<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
<title>LibreOffice 打字時崩潰</title>
<link rel="stylesheet" href="/usr/share/docutils/writers/html4css1/html4css1.css" type="text/css" />
</head>
<body>
<div class="document" id="libreoffice">
<p>用 ibus 在 LibreOffice 打字時有時候 LibreOffice 就會崩潰了,</p>
<p>後來發現崩潰總是發生在,ibus 的輸出緩衝區滿了的時候,</p>
<p>第一個想到的作法就是去改 ibus 的緩衝區設定,</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/ibus_setting.jpeg" src="https://github.com/float-tw/float-blog/raw/master/img/ibus_setting.jpeg" />
<p>不過從這邊修改不知道什麼原因常常會自己又變回 4 或 8 之類得很小的數值,</p>
<p>另外找到了從 gconf-editor 設定的方式(不過限定於新酷音)</p>
<p>在這個項目下 desktop -> ibus -> engine -> Chewing -> maxChiSymbolLen</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/gconf_chewing_setting.jpeg" src="https://github.com/float-tw/float-blog/raw/master/img/gconf_chewing_setting.jpeg" />
<p>只是這種設定只是治標不治本,當打超出設定的緩衝區時還是會崩潰 Orz</p>
<div class="section" id="id1">
<h1>參考資料</h1>
<p><a class="reference external" href="http://dodgelin.blogspot.tw/2012/04/ibus-chewing.html">http://dodgelin.blogspot.tw/2012/04/ibus-chewing.html</a></p>
<p><a class="reference external" href="http://goo.gl/yvtvn">http://goo.gl/yvtvn</a></p>
</div>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-13957689830030213332012-11-15T14:06:00.001+08:002012-11-15T14:08:17.905+08:00停用 F10 選單鍵 (ubuntu 12.04)<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
<title></title>
<link rel="stylesheet" href="/usr/share/docutils/writers/html4css1/html4css1.css" type="text/css" />
</head>
<body>
<div class="document">
<div class="section" id="f10-ubuntu-12-04">
<p>之前在 <a class="reference external" href="http://mosut.org">mosut</a> 聚會聽到了 mc 這個 cli 的檔案管理程式</p>
<p>今天想說來是用看看好了, mc 裡面的離開是 F10,</p>
<p>由於 F10 在 gonme-terminal 預設是開啟選單,所以就依照之前 <a class="reference external" href="http://blog.float.tw/2012/10/disablef1ingnometerminal.html">這篇</a> 把 F10 disable 了,</p>
<p>在 mc 裡面就可以正常離開了,不過發生了一件事,竟然跳出了右鍵選單,</p>
<p>結果到處試了一下,F10 好像被設定成選單鍵了,原本在 stackoverflow 找到用 compizconfig-settings-manager</p>
<p>可以設定,不過似乎找不到對應的設定,後來有找到了下面的方式:</p>
<pre class="literal-block">
mkdir -p ~/.config/gtk-3.0
cat <<EOF > ~/.config/gtk-3.0/gtk.css
@binding-set NoKeyboardNavigation {
unbind "<shift>F10"
}
* {
gtk-key-bindings: NoKeyboardNavigation
}
EOF
</pre>
<p>也就是先建立 <tt class="docutils literal"><span class="pre">~/.config/gtk-3.0/gtk.css</span></tt> 這個檔案,並且加入 unbind 的設定,</p>
<p>這樣就 OK 了,在 12.04 unity 下測試是正常的。</p>
</div>
<div class="section" id="id2">
<h1>參考資料</h1>
<p><a class="reference external" href="http://fcns.eu/2012/07/09/ubuntu-disabling-f10-key-functionality-for-mc/">http://fcns.eu/2012/07/09/ubuntu-disabling-f10-key-functionality-for-mc/</a></p>
</div>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-43385975567322981092012-11-10T11:44:00.000+08:002012-11-10T11:44:35.854+08:00使用 ffmpeg, avconv 做螢幕錄影<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
<title></title>
<link rel="stylesheet" href="/usr/share/docutils/writers/html4css1/html4css1.css" type="text/css" />
</head>
<body>
<div class="document">
<div class="section" id="ffmpeg-avconv">
</div>
<div class="section" id="ffmpeg">
<h1>ffmpeg</h1>
<pre class="literal-block">
ffmpeg -f x11grab -r 25 -s 1366x768 -i :0.0 -sameq /tmp/out.mp4
</pre>
</div>
<div class="section" id="avconv">
<h1>avconv</h1>
<pre class="literal-block">
avconv -f x11grab -r 25 -s 1366x768 -i :0.0 -same_quant /tmp/test.mp4
</pre>
</div>
<div class="section" id="id1">
<h1>說明</h1>
<p><tt class="docutils literal">f x11grab</tt> 從螢幕</p>
<p><tt class="docutils literal"><span class="pre">-r</span> 25</tt> fps</p>
<p><tt class="docutils literal"><span class="pre">-s</span> 1366x768</tt> 解析度</p>
<p><tt class="docutils literal"><span class="pre">-i</span> :0.0</tt> 錄影的位置,可以用+改變位置 ex. <tt class="docutils literal"><span class="pre">-i</span> :0.0+10,20</tt></p>
<p><tt class="docutils literal"><span class="pre">-sameq</span></tt> & <tt class="docutils literal"><span class="pre">-same_quant</span></tt> 與來源使用相同的 quantizer,avconv 的 man page 說不等同於畫質</p>
<p>,只是不知道還有什麼方式來讓畫質變好 Orz</p>
<p>最後檔名為輸出的檔案,ctrl-c 停止錄影</p>
</div>
<div class="section" id="id2">
<h1>參考資料</h1>
<p><a class="reference external" href="http://turanct.wordpress.com/2010/04/22/use-ffmpeg-to-capture-your-screen-on-ubuntu/">http://turanct.wordpress.com/2010/04/22/use-ffmpeg-to-capture-your-screen-on-ubuntu/</a></p>
</div>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com1tag:blogger.com,1999:blog-8208948041541215925.post-3356627812759796762012-11-08T14:56:00.001+08:002012-11-12T19:42:10.605+08:00open in terminal<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
<title>開啟 terminal(cmd) 於特定目錄</title>
<link rel="stylesheet" href="/usr/share/docutils/writers/html4css1/html4css1.css" type="text/css" />
</head>
<body>
<div class="document" id="terminal-cmd">
<p>有時候在寫程式的時候會需要在特定目錄執行程式,</p>
<p>不管在 linux, windows 底下如果直接開啟 terminal 以後,</p>
<p>還要在 cd, cd, cd 半天才能到那個目錄下(如果那個目錄很深)</p>
<p>介紹兩個方法來解決這個問題</p>
<div class="section" id="id1">
<h1>第一種</h1>
<p>Linux 下安裝 nautilus-open-terminal</p>
<p>安裝後在瀏覽資料夾的時候按右鍵就會有 Open in terminal 的選項的</p>
<p>Windows (7/vista) 按住 shift 按右鍵會有 <strong>在此處開啟命令視窗</strong></p>
</div>
<div class="section" id="id2">
<h1>第二種</h1>
<p>不管 linux, windows 開啟一個 terminal 以後,</p>
<p>把資料夾直接拉進 terminal 後,該路徑就會在 terminal 上了,</p>
<p>所以可以先打好 cd 再把資料夾拉進去。</p>
</div>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com2tag:blogger.com,1999:blog-8208948041541215925.post-46454541193571064002012-10-18T02:42:00.000+08:002013-03-13T01:20:50.712+08:00[開箱] KBtalKing Oni<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
<title>[開箱] KBtalKing oni</title>
<link rel="stylesheet" href="/usr/share/docutils/writers/html4css1/html4css1.css" type="text/css" />
</head>
<body>
<div class="document" id="kbtalking-oni">
<p>雖然是開箱文,可是不知道要寫什麼....</p>
<p>就..貼個圖,然後寫一些心得吧Orz</p>
<hr class="docutils" />
<p>盒子正面來一張,簡單的 oni 字樣</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_172322.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_172322.jpg" style="width: 600px;" />
<p>背面 KBtalKing</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_172351.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_172351.jpg" style="width: 600px;" />
<p>再多來幾張</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_225102.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_225102.jpg" style="width: 600px;" />
<img alt="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_225135.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_225135.jpg" style="width: 600px;" />
<img alt="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_225141.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_225141.jpg" style="width: 600px;" />
<p>打開盒子,裡面還有個小盒子,鍵盤外面在包一層塑膠套保護</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_172506.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_172506.jpg" style="width: 600px;" />
<p>先來一張全身照</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_225244.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_225244.jpg" style="width: 600px;" />
<p>側面</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_190659.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_190659.jpg" style="width: 600px;" />
<p>enter 特寫</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_190741.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_190741.jpg" style="width: 600px;" />
<img alt="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_225446.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_225446.jpg" style="width: 600px;" />
<img alt="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_225456.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_225456.jpg" style="width: 600px;" />
<p>稍微遠一點</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_190543.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_190543.jpg" style="width: 600px;" />
<p>左邊</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_225316.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_225316.jpg" style="width: 600px;" />
<p>Caps Lock 燈號,白燈,不過鍵帽沒有開孔,所以燈是從旁邊透出來的</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_225426.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_225426.jpg" style="width: 600px;" />
<img alt="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_225432.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_225432.jpg" style="width: 600px;" />
<p>背面銘版,是 one 字樣</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_231014.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_231014.jpg" style="width: 600px;" />
<p>和 Ducky 9000 合照</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_230236.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_230236.jpg" style="width: 600px;" />
<img alt="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_230241.jpg" src="https://github.com/float-tw/float-blog/raw/master/img/oni/IMG_20121016_230241.jpg" style="width: 600px;" />
<p>這隻是茶軸,跟合照的 Ducky 9000 一樣,不過打起來的感覺比較紮實一點,</p>
<p>不知道是 PBT 鍵帽、是新的還是什麼其他原因,現在覺得 Ducky 比較輕快一點,</p>
<p>灰色的鍵帽看起來蠻漂亮的,不過技術不好拍不太出來Orz。</p>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-54959881441895724152012-10-11T15:09:00.001+08:002012-10-11T15:11:00.033+08:00取消 gnome terminal F1 幫助頁面<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
<title>取消 gnome terminal F1 幫助頁面</title>
<link rel="stylesheet" href="/usr/share/docutils/writers/html4css1/html4css1.css" type="text/css" />
</head>
<body>
<div class="document" id="gnome-terminal-f1">
<p>每次在 gnome terminal 按到 F1 都會跳出該死的幫助頁面,</p>
<p>或是當需送出 F1 的時候,還是套出該死的幫助頁面。</p>
<p>編輯(E) -> 鍵盤捷徑鍵(K)... 找到求助.內容,點下去,</p>
<p>按下 Backspace 停用他吧....</p>
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0tag:blogger.com,1999:blog-8208948041541215925.post-66611387212734566832012-10-07T02:43:00.000+08:002013-03-13T01:18:05.931+08:00tig<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils 0.8.1: http://docutils.sourceforge.net/" />
<title>tig</title>
<link rel="stylesheet" href="/usr/share/docutils/writers/html4css1/html4css1.css" type="text/css" />
</head>
<body>
<div class="document" id="tig">
<p>tig 是把 git 倒過來寫,</p>
<p>是一個可以用來取代 git log 的好東西,沒什麼好介紹的,用下去就知道了,</p>
<p>簡單明瞭, h 可以顯示一些說明</p>
<img alt="https://github.com/float-tw/float-blog/raw/master/img/tig_1.jpeg" src="https://github.com/float-tw/float-blog/raw/master/img/tig_1.jpeg" style="width: 600px;" />
<img alt="https://github.com/float-tw/float-blog/raw/master/img/tig_2.jpeg" src="https://github.com/float-tw/float-blog/raw/master/img/tig_2.jpeg" style="width: 600px;" />
</div>
</body>
</html>floathttp://www.blogger.com/profile/10819865277196205167noreply@blogger.com0