tag:blogger.com,1999:blog-72352142572004965932024-03-13T23:51:32.816+08:00e 思想欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.comBlogger59125tag:blogger.com,1999:blog-7235214257200496593.post-58551906926944343222016-01-03T10:59:00.000+08:002016-01-03T10:59:15.114+08:00換了一個變壓器筆電就起死回生了,太神啦!
所以我說那個接頭和那個電源孔的密合度是很重要的。欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0tag:blogger.com,1999:blog-7235214257200496593.post-36529016208390903462015-10-11T00:08:00.000+08:002015-10-11T00:08:51.835+08:00[Wakfu] 回溯Remington 伺服器在 10/9 進行了一次回溯,回溯的時間為七天。沒錯,就是七天,這也意味著我新創的兩隻角色消失惹。整個 community 是炎上狀態。<br />
<br />
呃,慢慢重練 trapper。應該不會再回溯一次吧?欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0tag:blogger.com,1999:blog-7235214257200496593.post-40847696265401654592014-05-20T08:10:00.004+08:002014-05-20T08:10:57.814+08:00[JavaScript] Keycode Logger<a class="jsbin-embed" href="http://jsbin.com/gepejejo/1/embed?output">Keycode Logger</a><script src="http://static.jsbin.com/js/embed.js"></script>欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0tag:blogger.com,1999:blog-7235214257200496593.post-27750274584857906452014-05-11T19:28:00.000+08:002014-05-11T19:28:26.198+08:00[UserJS] Disable Link Draging & Select Link Text<fieldset>
<legend>20140511更新</legend>
Userscript陣亡了,以後東西改放這邊︰<a href="https://greasyfork.org/users/813-eight">Greasy Fork</a>
</fieldset>
<p><img src="http://i.imgur.com/c06FKBm.png" /> <img src="http://i.imgur.com/RE2m4TT.png" /></p>
<p>Opera捨棄Presto核心整個砍掉重練實在是太令人震驚了,從官方的角度來看不知道是不是個優良的決策,不過對我來說是失去了個老友的感覺。得到OP將基於Chromium開發的消息後我就漸漸的轉用Firefox,Firefox真是都沒什麼變,和我從FF跳到OP時一樣溫馨,許多的套件為FF增添許多功能。<del>是說OP被Google搞了那麼多次還去用人家的核心不覺得有向仇人認輸的感覺嗎</del>總之希望OP越來越好。</p>
<a name='more'></a>
<p>下面的UserJS簡單的說就是讓Firefox在連結上的選取文字像Opera一樣,可以直接select,不會拖曳連結。目前只在FF 22 測過<del>蛤Chrome是什麼東西</del>,感謝PTT板友的協助Debug。</p>
<p>安裝頁面︰<a href="http://userscripts.org/scripts/show/172765">Userscripts.org</a></p>
<p>Code在網頁裡面都有,這邊就不附了。想法很簡單,當mousedown時將連結的href屬性移除,mouseup或mouseout時再把href屬性恢復。其中用mousemove來判別是點選或者拖曳。</p>
<p>寫習慣OP的UserJS後再回來寫正統的GM Script真有種綁手綁腳的感覺<del>覺得GM Script不過是自動執行的Bookmarklet霸了</del>。如果沒意外<del>很閒又沒發懶</del>的話大概還會寫一個Tab Stacking的套件。</p>
欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com3tag:blogger.com,1999:blog-7235214257200496593.post-1305361770498381852014-05-06T12:53:00.000+08:002014-05-06T13:01:28.222+08:00[AHK] Notepad++自動存檔 AHK Npp Autosave<p>有在用Notepad++的人應該知道Autosave這個Plugin,它可以設定Notepad++定時、或是失去焦點時儲存所有文件。但它在存檔時會切換Tab,平常如果設置失去焦點時儲存就沒什麼問題,但定時存的就很麻煩了。</p>
<p>Notepad++的自動換行一向不是很好,最近開著自動換行在騰稿,每次一切Tab視窗就會自動捲動。後來想到NPP內建有儲存所有檔案的功能,於是就寫了這支Script。讓它常駐在系統列,Notepad++在失去焦點時就會自動存檔。</p>
<p>下面就直接給Source</p>
<a name='more'></a>
<code><pre>
#SingleInstance Force<br>#MaxThreadsPerHotkey 1<br>#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.<br>SendMode Input ; Recommended for new scripts due to its superior speed and reliability.<br>SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.<br> <br>loop <br>{<br> IfWinNotActive, ahk_class Notepad++<br> {<br> WinWaitActive, ahk_class Notepad++<br> }<br> <br> loop<br> {<br> WinWaitNotActive, ahk_class Notepad++<br> IfWinActive, ahk_class #32770<br> {<br> WinWaitNotActive, ahk_class #32770<br> }<br> else<br> {<br> break<br> }<br> }<br> SendMessage, 0x111, 41007, 0,, ahk_class Notepad++<br>; TrayTip,, Saved, 1<br>}<br>
</pre></code>
<p>唯一的缺點,當NPP收到「儲存所有檔案」的命令時,如果有新開的未存檔案,就會跳出詢問檔案儲存位置的視窗。對習慣開新檔案立即存檔的人沒什麼影響,否則建議配合Takenotes Plugin一起使用。</p>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzBpxcY0pnroagz-dopLnuoBrx9sik9vkEIlLJQfEE_nTQkhcik4mwaqMQmwZPgqv7FgcBg067apzDJfezd5gv4hYSD_OIawxmoVL_w-mt24lvjaeQ6htV3FC6Hx2MyXlZ2y6I6_EnhdFW/s1600/2014-05-06_125018.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzBpxcY0pnroagz-dopLnuoBrx9sik9vkEIlLJQfEE_nTQkhcik4mwaqMQmwZPgqv7FgcBg067apzDJfezd5gv4hYSD_OIawxmoVL_w-mt24lvjaeQ6htV3FC6Hx2MyXlZ2y6I6_EnhdFW/s320/2014-05-06_125018.png" /></a>欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0tag:blogger.com,1999:blog-7235214257200496593.post-15325874581078271652014-04-28T16:47:00.000+08:002014-05-06T13:00:40.614+08:00[JavaScript] Get Links!<fieldset>
<legend>2014/4/28 更新</legend>
加入了點擊遮罩,以及按Tab選取的功能
</fieldset>
加上了一些新功能,現在可以直接拖曳選取連結了。<p>
當連結的中心點在框內時就會被選取。下面給source<p>
Bookmark: <a href='javascript:(function()%7B(function%20linky()%7B%22use%20strict%22%3Bif(!window.eight04_linky)%7Bwindow.eight04_linky%3D(function()%7Bvar%20enable%3Dfalse%3Bvar%20style%3Ddocument.createElement(%22style%22)%3Bstyle.innerHTML%3D%22.linky%7B%20outline%3A%202px%20solid%20blue%3B%20%7D%22%2B%22.lsbox%7Bborder%3A%202px%20dashed%20red%3B%20position%3A%20absolute%3B%20display%3A%20none%3B%20z-index%3A%2065534%3B%7D%22%2B%22%23linkingbox%7Bborder%3A%203px%20solid%20black%3B%20padding%3A%206px%3B%20position%3A%20fixed%3B%20top%3A%204px%3B%20left%3A%204px%3B%7D%22%2B%22%23linkingbox%7Bheight%3A%20300px%3B%20width%3A%20180px%3B%20background%3A%20white%3B%20z-index%3A%2065535%3B%20display%3Anone%3B%7D%22%2B%22.deselect%20%7B-moz-user-select%3A%20none%3B%20user-select%3A%20none%7D%22%2B%22%23linkingbox.linkingbox-corner%20%7Btop%3A%20auto%3B%20left%3A%20auto%3B%20right%3A%204px%3B%20bottom%3A%204px%3B%7D%22%2B%22.cover%20%7Bposition%3A%20absolute%3B%20top%3A%200%3B%20left%3A%200%3B%20z-index%3A%2065533%3B%7D%22%3B%22%22%3Bdocument.getElementsByTagName(%22head%22)%5B0%5D.appendChild(style)%3Bvar%20body%3Ddocument.querySelector(%22body%22)%3Bbody.classList.add(%22deselect%22)%3Bvar%20sbox%3Ddocument.createElement(%22div%22)%3Bsbox.className%3D%22lsbox%22%3Bvar%20linkingbox%3Ddocument.createElement(%22textarea%22)%3Blinkingbox.setAttribute(%22id%22%2C%22linkingbox%22)%3Blinkingbox.onmouseover%3Dfunction()%7Bconsole.log(this)%3Bthis.classList.toggle(%22linkingbox-corner%22)%7D%3Bvar%20cover%3Ddocument.createElement(%22div%22)%3Bcover.className%3D%22cover%22%3Bvar%20html%3Ddocument.querySelector(%22html%22)%3Bcover.style%3D%22width%3A%20%22%2Bhtml.scrollWidth%2B%22px%3B%20height%3A%20%22%2Bhtml.scrollHeight%2B%22px%3B%22%3Bbody.appendChild(sbox)%3Bbody.appendChild(linkingbox)%3Bbody.appendChild(cover)%3Bvar%20pos%3D%5B0%2C0%5D%3Bvar%20pos2%3D%5B0%2C0%5D%3Bvar%20linkTracker%3D(function()%7Bvar%20id%3D0%2Ct%2Cselected%3D%5B%5D%3Bfunction%20trackerLoop()%7Bvar%20i%3Bclean()%3Bselected%3Dtakelinks(pos%2Cpos2)%3Bfor(i%3D0%3Bi%3Cselected.length%3Bi%2B%2B)%7Bselected%5Bi%5D.classList.add(%22linky%22)%7D%7Dfunction%20takelinks(p%2Cp2)%7Bp%3Dp.slice()%3Bp2%3Dp2.slice()%3Bvar%20t%3Bif(p%5B0%5D%3Ep2%5B0%5D)%7Bt%3Dp%5B0%5D%3Bp%5B0%5D%3Dp2%5B0%5D%3Bp2%5B0%5D%3Dt%7Dif(p%5B1%5D%3Ep2%5B1%5D)%7Bt%3Dp%5B1%5D%3Bp%5B1%5D%3Dp2%5B1%5D%3Bp2%5B1%5D%3Dt%7Dvar%20a%3Ddocument.getElementsByTagName(%22a%22)%3Bvar%20aQ%3D%5B%5D%3Bfor(var%20i%3D0%3Bi%3Ca.length%3Bi%2B%2B)%7Bvar%20pa%3Doffset(a%5Bi%5D)%3Bpa%3D%5Bpa%5B0%5D%2BMath.floor(a%5Bi%5D.offsetWidth%2F2)%2Cpa%5B1%5D%2BMath.floor(a%5Bi%5D.offsetHeight%2F2)%5D%3Bif(p%5B0%5D%3Cpa%5B0%5D%26%26pa%5B0%5D%3Cp2%5B0%5D%26%26p%5B1%5D%3Cpa%5B1%5D%26%26pa%5B1%5D%3Cp2%5B1%5D)aQ.push(a%5Bi%5D)%7Dreturn%20aQ%7Dfunction%20clean()%7Bvar%20i%3Bfor(i%3D0%3Bi%3Cselected.length%3Bi%2B%2B)%7Bselected%5Bi%5D.classList.remove(%22linky%22)%7Dselected%3D%5B%5D%7Dreturn%7Bon%3Afunction()%7Bid%3Dwindow.setInterval(trackerLoop%2C300)%7D%2Coff%3Afunction()%7Bwindow.clearInterval(id)%7D%2Cget%3Afunction()%7Bvar%20a%3D%5B%5D%2Ci%3Bfor(i%3D0%3Bi%3Cselected.length%3Bi%2B%2B)%7Ba.push(selected%5Bi%5D.href)%7Dclean()%3Breturn%20a%7D%7D%7D)()%3Bvar%20selecting%3Dfalse%3Bfunction%20mshandler(e)%7Bif(e.type%3D%3D%22mousedown%22)%7Bpos%3D%5Be.pageX%2Ce.pageY%5D%3Bsbox.style.left%3De.pageX%2B%22px%22%3Bsbox.style.top%3De.pageY%2B%22px%22%3Bsbox.style.display%3D%22block%22%3BlinkTracker.on()%3Bselecting%3Dtrue%7Delse%20if(e.type%3D%3D%22mousemove%22)%7Bif(!selecting)return%3Bsbox.style.left%3D(e.pageX%3Cpos%5B0%5D%3Fe.pageX%3Apos%5B0%5D)%2B%22px%22%3Bsbox.style.top%3D(e.pageY%3Cpos%5B1%5D%3Fe.pageY%3Apos%5B1%5D)%2B%22px%22%3Bsbox.style.width%3DMath.abs(e.pageX-pos%5B0%5D)-4%2B%22px%22%3Bsbox.style.height%3DMath.abs(e.pageY-pos%5B1%5D)-4%2B%22px%22%3Bpos2%3D%5Be.pageX%2Ce.pageY%5D%7Delse%20if(e.type%3D%3D%22mouseup%22)%7Bselecting%3Dfalse%3BlinkTracker.off()%3Bsbox.style.display%3D%22none%22%3Bsbox.style.width%3D%220%22%3Bsbox.style.height%3D%220%22%3Bvar%20aQ%3DlinkTracker.get()%3Bif(!aQ.length)return%3Blinkingbox.value%3Dlinkingbox.value%2BaQ.join(%22%5Cn%22)%2B%22%5Cn%22%3BactiveLinkingBox()%7D%7Dfunction%20offset(o)%7Bvar%20ol%3D0%2Cot%3D0%3Bwhile(o)%7Bol%2B%3Do.offsetLeft%3Bot%2B%3Do.offsetTop%3Bo%3Do.offsetParent%7Dreturn%5Bol%2Cot%5D%7Dfunction%20activeLinkingBox()%7Blinkingbox.focus()%3Blinkingbox.select()%7Dfunction%20keyhandler(event)%7Bconsole.log(event.keyCode)%3Bif(event.keyCode!%3D9)%7Breturn%7Devent.preventDefault()%3BactiveLinkingBox()%7Dreturn%7Bswitch%3Afunction()%7Bif(!enable)%7Benable%3Dtrue%3Bdocument.addEventListener(%22mousedown%22%2Cmshandler%2Cfalse)%3Bdocument.addEventListener(%22mouseup%22%2Cmshandler%2Cfalse)%3Bdocument.addEventListener(%22mousemove%22%2Cmshandler%2Cfalse)%3Bdocument.addEventListener(%22keypress%22%2Ckeyhandler%2Cfalse)%3Blinkingbox.style.display%3D%22block%22%3Bcover.style.display%3D%22block%22%3Bbody.classList.add(%22deselect%22)%7Delse%7Benable%3Dfalse%3Bdocument.removeEventListener(%22mousedown%22%2Cmshandler%2Cfalse)%3Bdocument.removeEventListener(%22mouseup%22%2Cmshandler%2Cfalse)%3Bdocument.removeEventListener(%22mousemove%22%2Cmshandler%2Cfalse)%3Bdocument.removeEventListener(%22keypress%22%2Ckeyhandler%2Cfalse)%3Blinkingbox.style.display%3D%22none%22%3Blinkingbox.value%3D%22%22%3Bcover.style.display%3D%22none%22%3Bbody.classList.remove(%22deselect%22)%7D%7D%7D%7D)()%7Dwindow.eight04_linky.switch()%7D)()%7D)()'>Get Links!</a><p>
<a name='more'></a>
<code><pre>function linky(){<br> "use strict";<br> if(!window.eight04_linky){<br> window.eight04_linky = (function(){<br> <br> // enable, use by switcher below<br> var enable = false;<br><br> // draw gui<br> var style=document.createElement("style");<br> style.innerHTML=".linky{ outline: 2px solid blue; }"+<br> ".lsbox{border: 2px dashed red; position: absolute; display: none; z-index: 65534;}"+<br> "#linkingbox{border: 3px solid black; padding: 6px; position: fixed; top: 4px; left: 4px;}"+<br> "#linkingbox{height: 300px; width: 180px; background: white; z-index: 65535; display:none;}"+<br> ".deselect {-moz-user-select: none; user-select: none}" +<br> "#linkingbox.linkingbox-corner {top: auto; left: auto; right: 4px; bottom: 4px;}" +<br> ".cover {position: absolute; top: 0; left: 0; z-index: 65533;}"; "";<br> document.getElementsByTagName("head")[0].appendChild(style);<br> <br> var body = document.querySelector("body");<br> body.classList.add("deselect");<br> var sbox=document.createElement("div");<br> sbox.className="lsbox";<br> var linkingbox=document.createElement("textarea"); <br> linkingbox.setAttribute("id","linkingbox"); <br> linkingbox.onmouseover=function(){<br> console.log(this);<br> this.classList.toggle("linkingbox-corner");<br> };<br> var cover = document.createElement("div");<br> cover.className = "cover";<br> var html = document.querySelector("html");<br> cover.style = "width: " + html.scrollWidth + "px; height: " + html.scrollHeight + "px;";<br> <br> body.appendChild(sbox);<br> body.appendChild(linkingbox);<br> body.appendChild(cover);<br><br> // link tracker<br> var pos=[0,0];<br> var pos2=[0,0];<br> var linkTracker = (function(){<br> var id=0,<br> t,<br> selected = [];<br> <br> function trackerLoop(){<br> // make links blue border<br> <br> var i;<br> <br> clean();<br> selected = takelinks(pos, pos2);<br> for(i=0;i<selected.length;i++){<br> selected[i].classList.add("linky");<br> }<br> }<br> <br> function takelinks(p,p2){<br> p = p.slice();<br> p2 = p2.slice();<br> var t;<br> if(p[0]>p2[0]){<br> t=p[0]; p[0]=p2[0]; p2[0]=t;<br> }<br> if(p[1]>p2[1]){<br> t=p[1]; p[1]=p2[1]; p2[1]=t;<br> }<br> <br> var a=document.getElementsByTagName("a");<br> var aQ=[];<br> for(var i=0;i<a.length;i++){<br> var pa=offset(a[i]);<br> pa=[pa[0]+Math.floor(a[i].offsetWidth/2),pa[1]+Math.floor(a[i].offsetHeight/2)];<br> if(p[0]<pa[0] && pa[0]<p2[0] && p[1]<pa[1] && pa[1]<p2[1])<br> aQ.push(a[i]);<br> }<br><br> return aQ;<br> }<br> <br> function clean(){<br> var i;<br> for(i = 0; i < selected.length; i++){<br> selected[i].classList.remove("linky");<br> }<br> selected = [];<br> }<br> <br> return {<br> on: function(){<br> id = window.setInterval(trackerLoop, 300);<br> },<br> off: function(){<br> window.clearInterval(id);<br> },<br> get: function(){<br> var a = [],<br> i;<br> for(i = 0; i < selected.length; i++){<br> a.push(selected[i].href);<br> }<br> clean();<br> return a;<br> }<br> };<br> })();<br><br> var selecting = false;<br> function mshandler(e){<br> if(e.type=="mousedown"){<br> pos=[e.pageX,e.pageY];<br> sbox.style.left=e.pageX + "px";<br> sbox.style.top=e.pageY + "px";<br> sbox.style.display="block";<br> linkTracker.on();<br> selecting = true;<br> // e.preventDefault();<br> }else if(e.type=="mousemove"){<br> if(!selecting) return;<br> sbox.style.left=(e.pageX<pos[0]?e.pageX:pos[0]) + "px";<br> sbox.style.top=(e.pageY<pos[1]?e.pageY:pos[1]) + "px";<br> sbox.style.width=Math.abs(e.pageX-pos[0]) - 4 + "px";<br> sbox.style.height=Math.abs(e.pageY-pos[1]) - 4 + "px";<br> pos2=[e.pageX,e.pageY];<br> }else if(e.type=="mouseup"){<br> selecting = false;<br> linkTracker.off();<br> sbox.style.display="none";<br> sbox.style.width="0";<br> sbox.style.height="0";<br> var aQ=linkTracker.get();<br> if(!aQ.length)return;<br> linkingbox.value=linkingbox.value+aQ.join("\n")+"\n";<br> activeLinkingBox();<br> }<br> <br> }<br> <br> function offset(o){<br> var ol = 0,<br> ot = 0;<br> <br> while(o){<br> ol+=o.offsetLeft;<br> ot+=o.offsetTop;<br> o = o.offsetParent;<br> }<br> <br> return [ol,ot];<br> }<br> <br> function activeLinkingBox(){<br> linkingbox.focus();<br> linkingbox.select();<br> }<br> <br> function keyhandler(event){<br> // make tab key focus on linkingbox<br> <br> console.log(event.keyCode);<br> if(event.keyCode != 9){ <br> return;<br> }<br> event.preventDefault();<br> activeLinkingBox();<br> }<br> <br> return {<br> switch: function(){<br> if(!enable){<br> enable = true;<br> document.addEventListener("mousedown",mshandler,false);<br> document.addEventListener("mouseup",mshandler,false);<br> document.addEventListener("mousemove",mshandler,false);<br> document.addEventListener("keypress",keyhandler,false);<br> linkingbox.style.display="block";<br> cover.style.display = "block";<br> body.classList.add("deselect");<br> }else{<br> enable = false;<br> document.removeEventListener("mousedown",mshandler,false);<br> document.removeEventListener("mouseup",mshandler,false);<br> document.removeEventListener("mousemove",mshandler,false);<br> document.removeEventListener("keypress",keyhandler,false);<br> linkingbox.style.display="none";<br> linkingbox.value="";<br> cover.style.display = "none";<br> body.classList.remove("deselect");<br> }<br> }<br> };<br> })();<br> }<br> <br> window.eight04_linky.switch();<br>}<br></pre></code>欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com1tag:blogger.com,1999:blog-7235214257200496593.post-14419197283167016522014-03-29T19:43:00.000+08:002014-03-29T19:43:02.547+08:00[JavaScript] 迷宮 - 2<p><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGPRg0FeGqvifFzgtukDH5RJNFIT7hlQflmhd5uvzaFjr3lc3USwAi9umwZSJG6WXENx54-fbMMJCv0KgVjNCPjvaiXvgyGNULi9D5MQqpFvbO9b8-0JNhdXR5aYLo2sPih04g8fFOswia/s1600/%E6%97%A0%E5%91%BD%E5%90%8D.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGPRg0FeGqvifFzgtukDH5RJNFIT7hlQflmhd5uvzaFjr3lc3USwAi9umwZSJG6WXENx54-fbMMJCv0KgVjNCPjvaiXvgyGNULi9D5MQqpFvbO9b8-0JNhdXR5aYLo2sPih04g8fFOswia/s1600/%E6%97%A0%E5%91%BD%E5%90%8D.png" /></a></p>
<a name='more'></a>
<p>這次用 canvas 輸出</p>
<a class="jsbin-embed" href="http://jsbin.com/taxosuja/1/embed?output&height=400px">Snake</a><script src="http://static.jsbin.com/js/embed.js"></script>欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0tag:blogger.com,1999:blog-7235214257200496593.post-25606934900078228042014-03-26T08:34:00.003+08:002016-02-27T10:19:48.572+08:00Comic Crawler 漫畫下載<a href="http://i.imgur.com/2W0vswq.png" imageanchor="1"><img border="0" src="http://i.imgur.com/2W0vswq.png" /></a><br />
<br />
<a name='more'></a>
主頁面: <a href="https://github.com/eight04/ComicCrawler">Github</a>下載點、安裝方法都在裡面<br />
<br />
# 2016/2/27<br />
假如你要用 Blogger 的留言回報錯誤,並且要貼上程式碼的話,Blogger 很有可能會把你的留言當成垃圾留言,這就是為何有時留言消失的原因。運氣好的話,我會在 email 收到通知然後再去垃圾筒找回來,但運氣不好我沒收到 mail 的話就 GG。(而且不論是不是匿名、有沒有登入,通通都有在垃圾筒裡看過)<br />
<br />
所以呢,如果要貼程式碼的話,可以先貼到 <a href="http://codepad.org/">codepad</a> 上,再貼連結過來,這樣<b>也許</b>就不會被當作坫圾留言了。<br />
欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com275tag:blogger.com,1999:blog-7235214257200496593.post-2365664168838145682014-03-25T13:21:00.001+08:002014-03-25T13:27:38.705+08:00[JavaScript] 迷宮<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirSVxDj35KNeL3a2ZjKD-s1YIKEG0oKC7elPEigz6zND6M4mCIL2o1bjJNFVe2dJ-9yEy6sX7tRDjo-_bnkp_7WKQe6zCdNXTkgtOKg3Az-YOE-RWO0od6c1JHdefyUf76qTE6BPQf3G-g/s1600/%25E6%2597%25A0%25E5%2591%25BD%25E5%2590%258D.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirSVxDj35KNeL3a2ZjKD-s1YIKEG0oKC7elPEigz6zND6M4mCIL2o1bjJNFVe2dJ-9yEy6sX7tRDjo-_bnkp_7WKQe6zCdNXTkgtOKg3Az-YOE-RWO0od6c1JHdefyUf76qTE6BPQf3G-g/s1600/%25E6%2597%25A0%25E5%2591%25BD%25E5%2590%258D.png" /></a><p>
這是Opera 12渲染出來的結果,看起來很美吧。OPOP!<p>
<a name='more'></a>
Code都在原始碼裡了,來看看Sample︰<p>
<div class="maze"></div><p class="clearfix">
map 的生成邏輯︰
<ol>
<li>隨機從圖上抓一點作起始點。</li>
<li>隨機往四個方向(上下左右)做DFS。</li>
<li>根據map的traceback,把連通方向的邊擦掉。</li>
</ol>
worker 的移動邏輯︰
<ol>
<li>有兩個以上的通路時,隨機選擇非往後走的通路。</li>
<li>只有一個通路時,就往後走吧。</li>
</ol><p>
Firefox 跑這玩意很吃CPU,有時間再試試canvas吧。
<!-- 從下面開始是source -->
<script>
function maze(width, height, workers, mazeid, fillcolor){
"use strict";
/*
maze(width, height, workers, mazeid, fillcolor) -> maze Object
int width, set the maze size.
int height, set the maze size.
int workers, number of workers.
string mazeid, query string, the element where maze to render.
bool fillcolor, fill the maze with workers color.
*/
// dfs make map traceback
var map = [],
i = 0;
for(i=0; i<width; i++){
map[i] = [];
}
dfs(map, width, height);
// draw maze init
var mazediv = document.querySelector(mazeid),
container = document.createDocumentFragment(),
l = 0,
line = null,
c = null;
for(l=0; l<height; l++){
line = document.createElement("div");
line.classList.add("line");
for(i=0; i<width; i++){
c = document.createElement("div");
c.classList.add("cell");
line.appendChild(c);
}
container.appendChild(line);
}
// erase edge
var cells = container.querySelectorAll(".cell"),
j = 0,
cur = 0;
for(i=0; i<width; i++){
for(j=0; j<height; j++){
cur = i + j*width;
cells[cur].classList.add(map[i][j]);
switch(map[i][j]){
case "w":
cells[cur - 1].classList.add("e");
break;
case "n":
cells[cur - width].classList.add("s");
break;
case "e":
cells[cur + 1].classList.add("w");
break;
case "s":
cells[cur + width].classList.add("n");
break;
}
}
}
// worker walking
var workerlist = [];
for(i=0; i<workers; i++){
workerlist.push(worker(cells, width, height));
}
// show maze
mazediv.appendChild(container);
return {
size: {
x: width,
y: height
},
workers: {
get: function(){
return workerlist;
},
stop: function(){
for(var i=0; i<workerlist.length; i++){
workerlist[i].stop();
}
},
start: function(){
for(var i=0; i<workerlist.length; i++){
workerlist[i].start();
}
}
}
};
function shuffle(ar){
// shuffle(array) -> array
var i,
p,
t;
for(i=0; i<ar.length; i++){
p = Math.floor(Math.random()*(ar.length-i) + i);
t = ar[i];
ar[i] = ar[p];
ar[p] = t;
}
return ar;
}
function worker(cells, width, height){
// worker(cells, width, height) -> worker object
var x = Math.floor(Math.random()*width),
y = Math.floor(Math.random()*height),
color = randcolor(),
premove = "",
timerid = setInterval(walk, 200);
return {
color: function(){
return color;
},
stop: function(){
clearInterval(timerid);
},
start: function(){
timerid = setInterval(walk, 200);
}
};
function walk(){
// deside move
var d = shuffle(["n", "e", "s", "w"]),
move = null,
opposite = {
n: "s",
w: "e",
s: "n",
e: "w"
},
cur = x + width*y,
i = 0;
for(i = 0; i < d.length; i++){
if(opposite[premove] != d[i] && cells[cur].classList.contains(d[i])){
move = d[i];
break;
}
if(!move){
move = opposite[premove];
}
}
// walk a cell
switch(move){
case "w":
cells[cur-1].style.backgroundColor = color;
x--;
break;
case "e":
cells[cur+1].style.backgroundColor = color;
x++;
break;
case "n":
cells[cur-width].style.backgroundColor = color;
y--;
break;
case "s":
cells[cur+width].style.backgroundColor = color;
y++;
break;
}
if(!fillcolor)
cells[cur].style.backgroundColor = "";
premove = move;
}
}
function randcolor(){
// randcolor() -> hex color string: #FFFFFF
var z = "000000";
var h = Math.floor(Math.random()*16777215).toString(16);
return "#" + (z+h).slice(-6);
}
function dfs(map, width, height){
// dfs(map, width, height) -> map array
// dfs init
var traceback = [],
x = Math.floor(Math.random()*width),
y = Math.floor(Math.random()*height);
traceback.push([x, y]);
while(1){
// traceback empty
if(!traceback.length){
break;
}
// position, next position
var pos = traceback[traceback.length-1],
posn = getvalidcell(map, pos);
// no valid cell
if(!posn){
traceback.pop();
continue;
}
// push next pos
traceback.push(posn);
if(posn[0]>pos[0])
map[posn[0]][posn[1]] = "w";
if(posn[0]<pos[0])
map[posn[0]][posn[1]] = "e";
if(posn[1]>pos[1])
map[posn[0]][posn[1]] = "n";
if(posn[1]<pos[1])
map[posn[0]][posn[1]] = "s";
}
function getvalidcell(map, pos){
// getvalidcell(map, position) -> [x, y]
var d = shuffle(["n", "e", "s", "w"]),
x = pos[0],
y = pos[1];
// randomly check each edge
for(var i=0; i<d.length; i++){
if(d[i] == "w" && x>0 && !map[x-1][y]){
return [x-1, y];
}else if(d[i] == "n" && y>0 && !map[x][y-1]){
return [x, y-1];
}else if(d[i] == "e" && x+1<width && !map[x+1][y]){
return [x+1, y];
}else if(d[i] == "s" && y+1<height && !map[x][y+1]){
return [x, y+1];
}
}
// no valid edge
return false;
}
}
}
maze(40, 40, 5, ".maze", false);
</script>
<style>
.cell{
border: 1px solid black;
float: left;
width: 10px;
height: 10px;
}
.line{
clear: both;
}
.maze{
border: 1px solid black;
float: left;
margin: 15px;
}
.w{
border-left: 1px solid transparent;
}
.n{
border-top: 1px solid transparent;
}
.e{
border-right: 1px solid transparent;
}
.s{
border-bottom: 1px solid transparent;
}
.clearfix{
clear: both;
}
</style>欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0tag:blogger.com,1999:blog-7235214257200496593.post-24925807405349708792013-12-24T21:03:00.001+08:002013-12-24T21:03:45.107+08:00[Minecraft] NEI Dump Cleaner一不注意又很久沒寫了,天氣冷,考試多,做報告,補進度……時間總是不夠用。
<p>
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik3nXHd458-cqF_MP05xFDFJTZ7MpViJyBLzKK8CEbmTlTnatgTIqKPQgyACTeoy5egIPE3I7E6dUvG1CCvmhcRb-nN05ZM7g_riSy0pSij_uUEzEcPKdeXDecVXsTItBn-JIxPW1dT-C2/s1600/2013-12-24_184421.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEik3nXHd458-cqF_MP05xFDFJTZ7MpViJyBLzKK8CEbmTlTnatgTIqKPQgyACTeoy5egIPE3I7E6dUvG1CCvmhcRb-nN05ZM7g_riSy0pSij_uUEzEcPKdeXDecVXsTItBn-JIxPW1dT-C2/s320/2013-12-24_184421.png" /></a></div>
這是一個把 NEI dump 出來的 csv 檔,整理成比較好看的小工具。
<p>
<a href="http://jsfiddle.net/MD4C7/">點我</a>欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0tag:blogger.com,1999:blog-7235214257200496593.post-8665876676160781462013-11-25T21:51:00.000+08:002013-11-25T21:52:29.514+08:00Second Principle of Mathematical Induction前幾個禮拜我有堂課沒去上,在圖書館念書。那節課老師證了各種Principle的等價,我在放學後也有做一點,不過只有MI的部份。今天有題題目是要用PMI去證SPMI,我看同學是用LNNP來做,下面試著做做看,不確定是否正確。
<a name='more'></a>
<p>
\( \because \) PMI \( \leftrightarrow \) LNNP, we proove by suppose LNNP holds.
<p>
Let $$ S = \{ n \in N : 1 \in S : \{ 1, 2, 3 \dots n\} \subseteq S \implies n+1 \in S \} $$
Suppose
$$ N - S \not = \emptyset $$
By LNNP
$$ \exists m \in N - S , m \not = 1 $$
is the smallest member. Therefore
$$ m - 1 \in S $$
Furthermore
$$ m - 2, m - 3 \dots 1 \in S $$
$$ \because 1, 2, 3 \dots m - 1 \in S \\
\implies m \in S $$
Thus we have a contradiction. Hence
$$ S = N $$欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0tag:blogger.com,1999:blog-7235214257200496593.post-79878300176045710322013-11-20T16:44:00.003+08:002013-11-25T21:52:39.618+08:00段考@計概課這幾天舌頭前端超痛,剛剛去買吃的,發現已經嚐不出甜味了,囧a。希望是睡眠不足的關係,真的痛到爆,接觸到空氣就像灼燒一樣……
<p>
下午是計概期中考。我得承認,我作業沒做,書也只看了一點,然後考試時還走錯教室。題目看得出來都是從課本後面的習題出的,以拿分數而言好像還不錯,不過我認為考些需要用到頭腦的題目會比較好。其中有題是翻譯,竟然是「QoS」,這我還真的不會,不知道是不是要直接寫「服務品質」。後面還有個問答,要你寫出「aBc」的ASCII Code……。還有題是翻譯「byte」,考慮了一下,我寫了「計量單位,等於8個bits」,交卷後才想到好像要寫「位元組」……
<p>
總之就是一翻折騰,早知道是非題就都猜O就好了。
<p>
我都在想,學這些東西的效益到底在哪裡。感覺很少有機會可以跟別人炫耀「欸我知道世界上第一台電腦是XXX」或是「欸你知道1997年Google的創辦人是在念博士嗎?」「不對哦他們那時在休學」之類的東西。平常如果有人問 byte 是啥,也不會回答「位元組」啊。就算把ASCII表背下來,用到的機會也是少到不符合背它的時間成本(雖然常用就記起來了……),更別說大部份人都不會用到它呢。我不太能揣測老師出這張考卷的心態,是想說單純給我們賺分?還是覺得這些知識值得拿來考?還是單純這樣的考試就是種傳統?或是只是要我們多背書?
<p>
感覺再打下去要變成抱怨文了。接下來進入第六章後好像就是有關於程式運作的流程什麼的,希望有趣點啊!欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com1tag:blogger.com,1999:blog-7235214257200496593.post-90512238566300738322013-11-09T20:06:00.000+08:002013-11-25T21:52:49.771+08:00[Firefox] Addon List (Firefox 25)<ul>
<li>Adblock Plus - 擋廣告</li>
<li>Add to Search Bar - 新增搜尋引擎</li>
<li>Charset Switcher - 對特定網站設定編碼</li>
<li>DOM Inspector - 開發工具</li>
<li>Download Dialog Tweak - 下載功能增強,神套件</li>
<li>Downloads in Tab - 將下載管理員移至分頁,像Opera</li>
<li>DownThemAll - 批次下載大量連結</li>
<li>IdentFavIcon - 幫沒有favicon的網站設定icon,神套件</li>
<li>LastPass - 密碼管理工具</li>
<li>Open With - 以其它瀏覽器開啟..</li>
<li>Organize Search Engine - 管理搜尋引擎</li>
<li>Pocket - 稍候閱讀服務</li>
<li>ReDisposition - 修復檔案下載檔名亂碼的問題,神套件。這玩意解決了多年來下載百度網盤一直都有的困擾。</li>
<li>Referrer Control - 修改HTTP來源,神套件</li>
<li>Restart Button - 重新啟動Firefox...</li>
<li>Scriptish - UserJS套件</li>
<li>Snap Link Plus - 一次開啟多個連結</li>
<li>Sort Tabs by URL - 依URL排序分頁,神套件</li>
<li>Stylelish - UserStyle套件</li>
<li>Tab Mix Plus - 分頁管理套件</li>
<li>Image Picker - 集圖工具</li>
</ul>欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0tag:blogger.com,1999:blog-7235214257200496593.post-78692046062025351712013-11-08T00:11:00.000+08:002013-11-08T00:11:54.931+08:00[Elsword] 萬聖節Cos時裝這幾天都在打艾爾活動,一共五支角色。結果算是非常開心,大概花了15E左右湊齊了全套時裝(還包括拉錯的XP)。白手起家到現在一年,也算是個里程碑了。下面放圖︰
<a name='more'></a>
<p>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMkBI1P-y0YRCJ_jLfPUJp3CiVgTgxQ_hJRwt7UPhQb6AsUnJRElev20lRzJiVDRs9CvuPgqbI6emlBKXf2QN9U1HuWzoCAhDON953FfbFXRX6zenW99XNnCvL9jOgqa800PPBfxJv3cMo/s1600/SC_+2013-11-07+23-45-35-544.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMkBI1P-y0YRCJ_jLfPUJp3CiVgTgxQ_hJRwt7UPhQb6AsUnJRElev20lRzJiVDRs9CvuPgqbI6emlBKXf2QN9U1HuWzoCAhDON953FfbFXRX6zenW99XNnCvL9jOgqa800PPBfxJv3cMo/s320/SC_+2013-11-07+23-45-35-544.jpg" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzATVqqqenhv7iTzGJX6aZRZEqkza5xFY2AN31GKKOAEnfAxPHaHeM4KllGSgblDnMxjSRp5iXfJUdCWQEl-A6l_4F8xREODmSWWdYw63aAMxrsfa5Fq9oQIqpkf_v2voauEk9yFdLhZzu/s1600/SC_+2013-11-07+23-47-58-581.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzATVqqqenhv7iTzGJX6aZRZEqkza5xFY2AN31GKKOAEnfAxPHaHeM4KllGSgblDnMxjSRp5iXfJUdCWQEl-A6l_4F8xREODmSWWdYw63aAMxrsfa5Fq9oQIqpkf_v2voauEk9yFdLhZzu/s320/SC_+2013-11-07+23-47-58-581.jpg" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqARZgMHC2IpwKa1_5yIHYnfq7mL2mvZaa_-ESKHATIx6sOUy2rxUX-aotNAZYbJLhOLonZGcU3q2jVvdpDl2sLxmAo8qvKlQNhxm8W3DPCWsylI5LOTIvIGxiJ3D6nTp4F2u6B8ZIpeCz/s1600/SC_+2013-11-07+23-50-17-092.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqARZgMHC2IpwKa1_5yIHYnfq7mL2mvZaa_-ESKHATIx6sOUy2rxUX-aotNAZYbJLhOLonZGcU3q2jVvdpDl2sLxmAo8qvKlQNhxm8W3DPCWsylI5LOTIvIGxiJ3D6nTp4F2u6B8ZIpeCz/s320/SC_+2013-11-07+23-50-17-092.jpg" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjblfqfuB60SKau-xjZbqa9hyA0kj-SEJ1fxbzfUqmPm-naZr-uSLuL_KHpEqZXm0RVm1qyuvrPGX9QyF9azbd-KnLCVUZl_DL4z9dILd2Ebbg3ECCIJl-bp-ou_3uNCL8oHp3drDSyHgHf/s1600/SC_+2013-11-07+23-45-25-858.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjblfqfuB60SKau-xjZbqa9hyA0kj-SEJ1fxbzfUqmPm-naZr-uSLuL_KHpEqZXm0RVm1qyuvrPGX9QyF9azbd-KnLCVUZl_DL4z9dILd2Ebbg3ECCIJl-bp-ou_3uNCL8oHp3drDSyHgHf/s320/SC_+2013-11-07+23-45-25-858.jpg" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUTmTa6rIIDKXsbw66VqmSHy2fIl3vPHraYMcBFFZIidwpyLfFGWqsmjIB2fQoxfqjtD_EMC-qfN4eG-6SCSaVtryHt1jqbI0kWCHVop4Jy2IBhTpVL0l1S7FI2Ka3XchLeXCcTNa9lw4e/s1600/SC_+2013-11-07+23-47-19-565.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUTmTa6rIIDKXsbw66VqmSHy2fIl3vPHraYMcBFFZIidwpyLfFGWqsmjIB2fQoxfqjtD_EMC-qfN4eG-6SCSaVtryHt1jqbI0kWCHVop4Jy2IBhTpVL0l1S7FI2Ka3XchLeXCcTNa9lw4e/s320/SC_+2013-11-07+23-47-19-565.jpg" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXK2al0K11g02gnODIj_vHpVj7gC_-WYMUQcdbsrWqynFUD5tjVoi6O9V1semGPuiesXbk8J-HIUBnZX879JZHTSUnY3TEe-Xdm4qlXwhvaKVhU1l-LQ0kTYEVm0daJ-yFDOkMBN-noP-P/s1600/SC_+2013-11-07+23-50-13-223.jpg" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXK2al0K11g02gnODIj_vHpVj7gC_-WYMUQcdbsrWqynFUD5tjVoi6O9V1semGPuiesXbk8J-HIUBnZX879JZHTSUnY3TEe-Xdm4qlXwhvaKVhU1l-LQ0kTYEVm0daJ-yFDOkMBN-noP-P/s320/SC_+2013-11-07+23-50-13-223.jpg" /></a>
<p>
下禮拜就是期中考週,時間也過的挺快。目前大概有兩個作業,一個是國文的期中作文,一個是數學通識課的期中作品。兩個都有點麻煩,因為快做不出來了。國文我想寫些關於網路上的言論自由和隱私權,數學通識課大概會寫個關於數字的小故事。到時再丟上來……如果交的出來的話啦。欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0tag:blogger.com,1999:blog-7235214257200496593.post-29473588382315226862013-11-01T12:11:00.001+08:002013-11-01T12:11:14.912+08:00數學 in 數學系我念國高中的時候,就覺得學校教育非常的「考試取向」。數學尤其明顯。
<p>
所有的基礎科目當中,只有數學是比較不具有知識意義的。數學課教的東西是一種工具,而不是資訊。然而我們學它的目的只是為了考試,所以會看到各種補習班打著「速算」「解題技巧」「必背十大公式」等等的標語,然後家長就惶恐的向這些在街上發傳單的人求助。最後我們養成了一種習慣,那就是考古題。要怎麼寫數學?不……應該說,要怎麼在數學考卷裡拿高分?很簡單,給你無限的考古題,把它全部做完就行了。這種習慣讓解題目成為一種反射動作,缺少背後的思考。
<p>
當進了數學系,這種做數學的方法幾乎完全崩壞。在過去我們講求答案的正確、快速,但現在我們對於每題的証明講求的都是邏輯推演、詳細的過程,相較起來答案的正確與否就不是那麼重要了。這篇文章主要是記錄我在寫數學証明時遇到,或是猜想別人可能遇到,各種卡住的「點」。
<a name='more'></a>
<p>
<strong>此篇包含非常多的用詞,並未查證是否為正確翻譯</strong>……也歡迎指正。
<p>
<h3>定義、定理</h3>
首先來認識這兩個詞。定義,是所有邏輯推演的起源。定義是數學家「規定」出來的,也就是說定義是「恆久不變」「無法被証明正確」的,即是說無論何種情況下,定義永遠為真。下面是微積分中對函數極限\(\lim_{x \rightarrow c}f(x) = L\)的定義︰$$ \forall \varepsilon \gt 0 \quad \exists \delta \gt 0 : 0 \lt | x - c | \lt \delta \implies | f(x) - L | \lt \varepsilon $$ 這種定義稱為符號式的定義,也就是我們要學的數學寫法;相反的,若用英文敘述,稱為敘述式的定義。
<p>
定理(Theorem, Proposition, Lemma),是由定義推導出來,可以在証明中被「引用」。注意到定理和定義的差別,不像定義是「原本就存在」,定理必需「被引用」。引用定理通常都會有些條件,符合條件時就可以直接寫下定理的結果,節省一些墨水。下面是 Mean Value Theorem,均值定理︰$$ \text{If $f$ is continuous on $[a,b]$ and $f$ is differentiable on $(a,b)$}\\ \text{Then} \quad \exists c \in (a,b) : f'(c) = \frac{f(a) - f(b)}{a - b} $$ 可以和前面的極限定義比較,定理多了 If 條件,指出何時可以引用這個定理。
<p>
<h3>描述因果關係的符號</h3>
$$ \implies \\ \rightarrow \\ \text{s.t.} $$ 這三個符號都帶有因果關係,也是常在證明中不知道應該如何使用的符號。
<p>
如果基礎數學中的邏輯學的不錯,應該知道前兩個符號稱作 Implies,而且是具有 Truth Table 的邏輯意義。然而,不要把邏輯符號與証明推演搞混了!我們用邏輯符號去描述一個式子,用証明推演的符號連接各個式子。這麼說好了,國高中在寫代數運算,其中對等號兩邊同時加減乘除,然後把算好的新式子用\(\implies\)接在舊式子的尾端,此時的 Implies 符號是不具有邏輯運算意義的,我們不會去判斷符號的左、右是 true 或 false,但我們知道這是個連接符號,表示從上個式子推導到下個式子,注意這兩種「因果關係」在實質涵義上的不同。
<p>
\(\text{s.t.}\)是 such that 的縮寫,也可以記成「\(:\)」。以字義來看,我會比較傾向於把它放在變數定義之後,數學敘述之前。以上方的極限定義與均值定理為例,當 such that 之前的變數定好後,such that 之後的整個敘述為真。
<p>
<h3>更進一步探討 Implies</h3>
邏輯學到 Implies 時,對於\(P \implies Q\)我們知道︰只有在\(P\)為 true 而 \(Q\) 為 false 時,整個式子為 false,其它的情況都是 true。
<p>
現在我們讓\(R \iff (P \implies Q)\),然後來討論\(P,Q,R\)的關係。
<p>
1. 如果我們知道\(R\)是錯的。那麼很明顯\(P\)是對的,\(Q\)是錯的。<br>
2. 如果我們知道\(R\)是對的,而且\(P\)是對的。那麼\(Q\)是對的。<br>
3. 如果我們知道\(R\)是對的,而且\(P\)是錯的。那麼我們不知道\(Q\)是對還是錯。
<p>
這個\(P,Q,R\)事實上分別代表邏輯推演中的三件事︰前提、結果、推演過程(也就是證明的整體)。如果過程是錯的,則前提是對的,答案是錯的。如果過程是對的,前提是對的,則答案當然也是對的。如果過程是對的,但是前提是錯的,這時候答案無法判斷是對或錯。
<p>
而我們也有一個很有趣的性質,當前提錯的時候,不論我們的結論寫下什麼,過程永遠是對的。這個特別的「永遠為真」稱為 Vacuous Truth(我找不到它的中文……直翻的話是「空洞的真理」)。如果我說「若\(2=1\),則任意自然數等於任意自然數」乍看之下好像很有道理!但我們來仔細思考這到底是什麼意思。如果這句話已經被證明為真的,而且我們知道前提很明顯是錯的,則無法判斷結論是真或假。等等!那這句話是怎麼被證明是真的?
<p>
對於\(A \implies B\)這種式子證明的手法,其中之一是直接推演證明,從前提推導至結果。若可以推導到結果,則我們就說「這個式子是真的」。回到前面,這種「nonsense」的前提,無論我們如何推導到結果,則我們說「這個式子是 Vacuous Truth」。但這種 Vacuous Truth 有沒有意義就見仁見智了(因為我們不知道答案是對還錯,而通常我們需要一個對的答案)。
<h3>空集合</h3>
我們已經知道集合有可能是空的,此時任何元素都落在集合的外面。若這個集合是\(A\),就可以寫成︰ $$ \forall x : x \not \in A $$ 而包含的定義,\(A \subseteq B\)可以寫成︰$$ \forall x \in A : x \in B $$ 我們發現空集合本身並不存在\(x \in A\)的性質,因為它是空的。當\(A\)為空時,我們發現對於這個式子,它是個 Vacuous Truth,它永遠為真。啊咧?那所謂的「空集合屬於任何集合」這件事到底有沒有意義?有的!因為其它的非空集合都具有包含的性質,所以我們賦與空集合也存在這個性質時,整個系統會更完整(同理「若\(2=1\)則任意自然數互相相等」不具意義,因為沒有系統會使用它。當然,或許未來有人發展了一套任意數互相相等的系統,這時這個式子就有意義了)。
<p>
<ul>
<li>有人對於Theorem, Proposition, Lemma三個詞都翻成「定理」感到困惑,不過比較普遍接受的說法是以定理大小區分。大定理為Theorem,小定理為Proposition,較零碎的引用則是Lemma。不過也有大定理被稱為Lemma的……我是認為不必在這個地方計較。</li>
<li>在中文裡似乎沒有比較好的詞去區別兩種 implies 的涵義,而更深入的討論可能就超出我們的基礎數學了。詳細可以參考<a href="http://en.wikipedia.org/wiki/Category:Conditionals">維基百科</a>。</li>
</ul>欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0tag:blogger.com,1999:blog-7235214257200496593.post-77282457657870207282013-10-30T19:19:00.001+08:002013-11-01T12:12:49.803+08:00我的興趣是騎單車(此篇主要目的是做個測試,順便想知道我寫一篇文章需要多久)
<p>
身為一個用腳踏車作為交通工具的人,真的無法理解「我的興趣是騎腳踏車」到底是什麼意思。
<p>
腳踏車,就和摩托車、公車、轎車、火車一般,是個日常生活用,從一個地點到達另一個地點的交通工具。當每次聽到「我的興趣是騎腳踏車」,真的很想回答他「那我的興趣是坐公車」或是「我的興趣是搭捷運」,然後有相同興趣的人就可以組個社團「今天社課是從基隆坐火車到台北車站」「然後明天的社課是坐相反方向」……等等諸如此類。
<p>
不可否認的,騎單車也被歸類到休閒活動的運動之中,並且所有的休閒活動都能成為一個人的興趣。不論是打電動、逛街、爬山、或是看書,這些都經常的成為人類的興趣之一。我曾經和別人閒聊時,向對方提到我的興趣是寫 code ,結果被對方反嗆「根本不懂寫程式」。後來經過仔細的思考,發現我的興趣不是寫 code ,而是在享受完成一件事情的成就感,並且其中的邏輯思考是令人愉快的。或許以後和別人聊天時應該這麼說「我的興趣是思考,而且我喜歡寫程式」,這樣表達的就比「我的興趣是寫程式」清楚多了。
<a name='more'></a>
<p>
回到騎單車上面,也許人類在把騎單車作為興趣時,是指在騎腳踏車的氛圍下感到快樂,如「我的興趣是邊騎單車邊看風景」「我的興趣是特技單車」「我的興趣是騎單車運動腿部肌肉(是說健身房有許多這類玩意)」……不過這麼一來,騎單車好像就不是興趣的主體了。我也可以這麼說「我的興趣是搭捷運看正妹」,那這樣一來興趣根本就是「看正妹」了吧!
<p>
或許我不該糾結在興趣的定義,只要知道興趣是喜歡做的事就好。這樣一來所有的東西都能變成興趣了……不過這好像也沒那麼重要,畢竟無論興趣是什麼,最重要的是能找到和自己興趣相同的人。不是嗎?欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0tag:blogger.com,1999:blog-7235214257200496593.post-40146591648159438992013-10-30T18:23:00.001+08:002013-10-30T18:23:37.652+08:00也許是個轉折點10/30,差不多是前年開始打算休學的日期。
<p>最近看了許多書,思考了很多問題,我決定要在部落格上寫些東西。什麼是寫些東西?過去我一直把部落格當作 code 的備份工具,所有的文章都是「啪!」地丟在部落格上,但是從今天開始(雖然不知道能維持多久),我會寫些筆記、書記、心得。不過這意味著原本就很少的資訊類文章會變的更少,我也同時意識到,一項語言,如果不去使用它,大概一個月後就完全生疏,而且一個月後,曾經學過、有限的知識就<strong>過時了</strong>。</p>
<p>總而言知,我要做個挑戰,那就是來寫部落格。主要有兩個原因,其一是想訓練自己的文筆,其二是想對自己的思想做一些紀錄。另外我要改個版面,現在的版面要閱讀長段的文章還挺痛苦的……。</p>欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0tag:blogger.com,1999:blog-7235214257200496593.post-48393784626564925882013-10-13T01:41:00.000+08:002013-10-13T01:42:32.272+08:00[AHK] AHK Timer ver.20131013
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsFhP9wMI1K4J2VupL0uYb00lGZsY4b2sbDGPUb8r70ao8OR_WqiP5VfpLDkl_MEMP98eHhgLxu_0v4A1Q0dpRVdMy_X8CoOuGuVln4LFqrgllnyF4yYEqWuCe7N5Q231h-zhKyhPUIzFW/s1600/2013-10-13_012911.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsFhP9wMI1K4J2VupL0uYb00lGZsY4b2sbDGPUb8r70ao8OR_WqiP5VfpLDkl_MEMP98eHhgLxu_0v4A1Q0dpRVdMy_X8CoOuGuVln4LFqrgllnyF4yYEqWuCe7N5Q231h-zhKyhPUIzFW/s400/2013-10-13_012911.png" /></a>
<a name='more'></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmVb90dmj2K6595tX9NWPxX5hdRv_UiFuswZK_1NKRXgf93nkZo60g1_BQOwGBvg7KW872O2Rut0yXDLwNYkdd9uXWpBplUkxqBFdJyRbKFZNG2kyccsVIFDH9ZqFclBonNKPYXDoGs9xI/s1600/2013-10-13_013005.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmVb90dmj2K6595tX9NWPxX5hdRv_UiFuswZK_1NKRXgf93nkZo60g1_BQOwGBvg7KW872O2Rut0yXDLwNYkdd9uXWpBplUkxqBFdJyRbKFZNG2kyccsVIFDH9ZqFclBonNKPYXDoGs9xI/s400/2013-10-13_013005.png" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzpXilwIxiFk3SfzlKzcUsNQ5CD5fsPf9NIAM7O5hYy87Xv8tVKC-lKT9SvImYrvx1t2HGLrzHBvov-TaOzfOGetVyiqZMSn6GoJqLbGY2Ji6P_S-o4jlwhHDqOL9Vo1RQFlN_gm1lGp7s/s1600/2013-10-13_013033.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzpXilwIxiFk3SfzlKzcUsNQ5CD5fsPf9NIAM7O5hYy87Xv8tVKC-lKT9SvImYrvx1t2HGLrzHBvov-TaOzfOGetVyiqZMSn6GoJqLbGY2Ji6P_S-o4jlwhHDqOL9Vo1RQFlN_gm1lGp7s/s400/2013-10-13_013033.png" /></a>
<p>
<a href="https://docs.google.com/file/d/0B2YRRJsAN9ZeaXplaHo1WXlvcTQ/edit?usp=sharing">Download Here</a>
<p>
上個版本是前年10/3寫的,這次做了小更新如修改部份關於物件的代碼、修改了介面、新增選項可以自定是否使用過期的計時器。
<p>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHP0snk2Dfc0HXfYSahg37kd_Y31cCLvEeZrDIPfw1NWVX_UhnCpsiQlCSVo0gTr-1S8nwSEOwfWtA2h6jXiIdvL4s52pFHxlPxHKTGtuhczC1Qc9bdcjGE3hxaPFCi_Mi7lgfWINFo5TU/s1600/2013-10-13_013945.png" imageanchor="1" ><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHP0snk2Dfc0HXfYSahg37kd_Y31cCLvEeZrDIPfw1NWVX_UhnCpsiQlCSVo0gTr-1S8nwSEOwfWtA2h6jXiIdvL4s52pFHxlPxHKTGtuhczC1Qc9bdcjGE3hxaPFCi_Mi7lgfWINFo5TU/s400/2013-10-13_013945.png" /></a>欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com7tag:blogger.com,1999:blog-7235214257200496593.post-9374510606099973842013-09-24T01:26:00.000+08:002013-10-13T01:45:51.192+08:00[Minecraft] 1.5.2 MOD List以下列出無conflict本人在用的MOD。
<p>Forge版本5.2.23.737對應Minecraft 1.5.2</p>
<a name='more'></a>
<h3>mods</h3>
<ul>
<li><h4>BaM's Doubledoor</h4>神MOD,雙開門/多開活板門</li>
<li><h4>BaM's Grave</h4>死亡時會自動建立一個箱子,把物品/經驗(瓶)放進去。類似的MOD: Death Chest MOD, Taigore's Inventory Saver, Gravestone MOD,推荐Gravestone。另如果是被炸死,箱子有機會被creeper炸掉</li>
<li><h4>bspkrsCore</h4>伐木MOD核心</li>
<li><h4>Chococraft</h4>陸行鳥MOD,穩定的羽毛來源,而且叫聲很好聽</li>
<li><h4>Craft Guide</h4>合成表MOD,也是必備MOD之一</li>
<li><h4>Custom Selection Box</h4>神MOD,更好的選擇框</li>
<li><h4>Damage Indicator</h4>顯示怪物血量/狀態,受傷/補血時顯示數字</li>
<li><h4>Dynamic Elevator</h4>電梯MOD,要蓋高樓大廈必裝</li>
<li><h4>Enhance Core</h4>Enhance Portal的核心</li>
<li><h4>Enhance Portals</h4>傳送門MOD,可以讓在主世界的兩個地獄門互相傳送。類似MOD: Dimensional Door</li>
<li><h4>Flat Bedrock (Power Crystals)</h4>平坦基岩</li>
<li><h4>Growthcraft</h4>讓橡樹結蘋果、漁網MOD</li>
<li><h4>Inventory Tweaks</h4>包包R鍵整理MOD</li>
<li><h4>Little Maid Mob</h4>女僕MOD,新增MOB女僕,可以幫打怪/撿物/etc。不會淹死</li>
<li><h4>MMMLib</h4>女僕MOD核心</li>
<li><h4>Nihongo MOD</h4>中文輸入MOD</li>
<li><h4>Optional Wool2String</h4>羊毛變成線MOD</li>
<li><h4>Pet Bat</h4>寵物蝙蝠,可幫打怪。從來沒在生存成功養過,要用南瓜派……</li>
<li><h4>Primitive Mobs</h4>神MOD,新增許多MOBS,走失的礦工/小蜘蛛/各種史萊母/creeper/會跳來跳去打人的工具/micmic chest/在空中飛的附魔書/etc</li>
<li><h4>Rancraft Penguin</h4>企鵝MOD,小企鵝超可愛</li>
<li><h4>Rei's Minimap</h4>小地圖MOD</li>
<li><h4>Scenter</h4>可以指示最近的礦石方塊,OP</li>
<li><h4>SlimevoidLib</h4>電梯MOD核心</li>
<li><h4>Village Info</h4>顯示村莊資訊</li>
</ul>
<h3>coremods</h3>
<ul>
<li><h4>TreeCapitator</h4>伐木MOD,能設定速度/工具耗損/自定木材&樹葉/可選是否自動破壞樹葉/etc</li>
<li><h4>Code Chicken Core</h4>NEI核心</li>
<li><h4>Not Enough Items</h4>NEI作弊工具,包含合成表/F7顯示生怪區</li>
<li><h4>Power Crystals Core</h4>Flat Bedrock核心</li>
</ul>
欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0tag:blogger.com,1999:blog-7235214257200496593.post-1330050427931325342013-01-09T15:06:00.000+08:002013-09-24T01:29:11.651+08:00Tab轉空白<p>這標題不知道要怎麼下。Encode?Escape?</p>
<a name='more'></a>
<style type="text/css">
#escapeSource,#escapeOutput{width: 47%;height: 300px;}
</style>
<div>
<textarea id="escapeSource"></textarea>
<textarea id="escapeOutput"></textarea>
</div>
<input type="text" id="escapeTab" value="4" />
<input type="button" id="escapeStart" value="Start" />
<pre><code id="escapePreview"></code></pre>
<script>
(function(){
function start(){
var source=document.getElementById("escapeSource").value;
var tab=document.getElementById("escapeTab").value*1;
var output=document.getElementById("escapeOutput");
var preview=document.getElementById("escapePreview");
var lines=source.split(/\r?\n/);
preview.innerHTML="";
for(var i=0;i<lines.length;i++){
var l=lines[i];
var p=0;
var o="";
l=l.split("");
console.log(l.join(","));
for(var j=0;j<l.length;j++){
switch(l[j]){
case '\t':
o+=makeSpace(tab-p%tab);
p+=tab-p%tab;
break;
default:
o+=l[j];
p+=getLength(l[j]);
break;
}
}
lines[i]=document.createTextNode(o.replace(/ /g,"\u00a0"));
preview.appendChild(lines[i]);
if(i+1<lines.length)
preview.appendChild(document.createElement("br"));
//這個做法會造成Memory Leak嗎?
}
output.value=preview.innerHTML;
}
function makeSpace(k){
var o="";
for(var i=0;i<k;i++)
o+=" ";
return o;
}
function getLength(c){
switch(encodeURIComponent(c).length){
case 9:
return 2;
default:
return 1;
}
}
var button=document.getElementById("escapeStart");
button.addEventListener("click",start,false);
})();
</script>欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0tag:blogger.com,1999:blog-7235214257200496593.post-19015181865265456542012-12-31T17:39:00.000+08:002014-04-12T15:24:34.622+08:00好讀製作機<p>最近的生活很頽廢。</p>
<p>很久沒更新網站,我到最近要用好讀,才發現我的Byethost帳號被鎖。根據慣例,大概是留言板被機器人洗留言才被鎖的。</p>
<p>因為之前電腦重灌的關係,網站的資料也沒拿出來……索性就重寫了一遍。這次就直接放Blogger上啦!</p>
<a name='more'></a>
<p>
<style type="text/css">
#bbsSource{
display: block;
width: 96%;
height: 300px;
margin: 0.5em auto;
}
#bbsContainer {
background-color: black;
padding: 0.5em;
font-size: 18px;
font-family: "細明體_HKSCS", "細明體";
line-height: 18px;
}
#bbsContainer img{
max-width: 90%;
}
.line {min-height: 1em;}
.c300 {color:#000}
.c310 {color:maroon}
.c320 {color:green}
.c330 {color:olive}
.c340 {color:navy}
.c350 {color:purple}
.c360 {color:teal}
.c370 {color:silver}
.c301 {color:gray}
.c311 {color:red}
.c321 {color:#0f0}
.c331 {color:#ff0}
.c341 {color:#00f}
.c351 {color:#f0f}
.c361 {color:#0ff}
.c371 {color:#fff}
.b40 {background-color:#000}
.b41 {background-color:maroon}
.b42 {background-color:green}
.b43 {background-color:olive}
.b44 {background-color:navy}
.b45 {background-color:purple}
.b46 {background-color:teal}
.b47 {background-color:silver}
</style>
<textarea id="bbsSource"></textarea>
<input type="button" value="Start" id="bbsStart" />
<div id="bbsContainer"></div>
<script>
(function(){
var canvas=document.getElementById("bbsContainer");
var buttonStart=document.getElementById("bbsStart");
var start=function(){
canvas.innerHTML="";
var source=document.getElementById("bbsSource").value;
source=source.replace(/ /g,"\u00A0");
source=source.replace(/\?\[[\d\;]*?m/g,"_"); //掉字
var lines=source.split(/\r?\n/);
for(var i=0;i<lines.length;i++){
var line=document.createElement("div");
line.className="line";
var texts=lines[i].split(/\x1B\[[\d\;]*?m/);
var controls=lines[i].match(/\x1B\[[\d\;]*?m/g);
if(!controls) continue;
var ctClasses=[];
var lightenFlag=0;
var color=37;
var bgColor=40;
for(var j=0;j<controls.length;j++){
var cs=controls[j].substr(2,controls[j].length-3);
cs=cs.split(/\;/);
for(var k=0;k<cs.length;k++){
cs[k]*=1;
if(cs[k]=="")
lightenFlag=0,color=37,bgColor=40;
else if(cs[k]<2)
lightenFlag=cs[k];
else if(cs[k]<40)
color=cs[k];
else if(cs[k]<50)
bgColor=cs[k];
}
ctClasses[j]="c"+color+lightenFlag+" b"+bgColor;
}
for(var j=0;j<texts.length;j++){
var tt=document.createTextNode(texts[j]);
var tp=document.createElement("span");
tp.className=ctClasses[j-1]?ctClasses[j-1]:"";
tp.appendChild(tt);
line.appendChild(tp);
}
canvas.appendChild(line);
}
//下面的linkify修改自Opera的Linkify Plus
if(!window.LINKIFY)
LINKIFY=new function(){
var enable_linkified = /*@Enable actual linkifier.@bool@*/true/*@*/;
var dry_run_linkified = /*@Just pretend to linkify, only simulate.@bool@*/false/*@*/;
var show_numer_of_linkified = /*@Display numer (if more than zero) of linkified URLs after linkifing.@bool@*/false/*@*/;
var prefix_linkified = /*@Prefix linkified URLs by [L+].@bool@*/false/*@*/;
var prefix_space_linkified = /*@Add space beetwen prefix [L+] and URL. (sometimes helps).@bool@*/false/*@*/;
var log_all_linkified = /*@Use console.log() function to show all linkified URLs (will make it slightly slower, use only when debugging in DragonFly).@bool@*/true/*@*/;
var add_title_linkified = /*@Add title attribute to linkified link.@bool@*/true/*@*/;
var notInTags = ['a', 'head', 'noscript', 'option', 'script', 'style', 'title', 'textarea'];
var textNodeXpath = ".//text()[not(ancestor::" + notInTags.join(') and not(ancestor::') + ")]";
var urlRE = /((?:https?|ftp)(?::|:)\/\/[^\s'"'<>()]+|www\.[^\s'"'<>()]+|[-\w.+]+@(?:[-\w]+\.)+[\w]{2,6})/gi;
//var queue = [];
var counter_linkified = 0;
return {
linkifyContainer: function(container) {
var xpathResult = document.evaluate(textNodeXpath, container, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
var i = 0;
var linkified = 0;
function continuation() {
var node;
var limit = 0;
while (node = xpathResult.snapshotItem(i++)) {
linkified += linkifyTextNode(node);
if (++limit>80) {
return setTimeout(continuation, 0);
}
}
if (show_numer_of_linkified && (linkified > 0)) {
alert("Linkified " +(dry_run_linkified ? "(dry run) " : "") + linkified + " URLs");
}
}
setTimeout(continuation, 0);
}
}
function linkifyTextNode(node) {
var i, m;
var txt = node.textContent;
var span = null;
var p = 0;
var k = 0;
var common_title = "Linkified from plain text using Linkify Plus";
var common_class = 'linkifyplus';
if (node.parentNode.nodeName == "A") {
return 0;
}
while (m = urlRE.exec(txt)) {
// check if it is in some <a> tag. This should not be nacassary becuase XPath is constructed so, but there are some problems in Opera 10.50 :(
// continue;
if (log_all_linkified) {
try {
console.log("linkifing ("+k+"): "+ m[0]);
console.log("parentNode ("+k+"): " + node.parentNode.nodeName);
} catch (e) {}
}
//alert(node.parentNode);
if (node.parentNode.nodeName == "BODY") {
continue;
}
//alert(node);
if (span == null) {
//create a span to hold the new text with links in it
if (!dry_run_linkified) {
span = document.createElement('span');
}
}
//get the link without trailing dots, comas and question, exclamation mark
var l_org = m[0].replace(/[.,?!]*$/, '');
var l = l_org;
var lrest = m[0].substring(l.length, m[0].length);
var inner_text = l;
if (prefix_linkified) {
inner_text = (prefix_space_linkified ? "[L+] " : "[L+]") + l;
}
//put in text up to the link
if (!dry_run_linkified) {
span.appendChild(document.createTextNode(txt.substring(p, m.index)));
}
//create a link and put it in the span
var a = document.createElement('a');
a.className = common_class;
if(/\.jpg|\.jpeg|\.gif|\.png/.test(inner_text)){
var img=document.createElement("img");
img.src=inner_text;
img.alt=inner_text;
a.appendChild(img);
}else
a.appendChild(document.createTextNode(inner_text));
if (l.indexOf('www') == 0) {
l ='http://' + l;
} else if (l.indexOf('://') == -1 && l.indexOf("@") > 0) {
l = 'mailto:' + l;
}
a.setAttribute('href', l);
if (add_title_linkified) {
a.setAttribute('title', common_title + " ("+counter_linkified+"): "+ l_org);
}
if (!dry_run_linkified) {
span.appendChild(a);
span.appendChild(document.createTextNode(lrest));
}
//track insertion point
p = m.index + m[0].length;
k++;
counter_linkified++;
}
if (span) {
//take the text after the last link
if (!dry_run_linkified) {
span.appendChild(document.createTextNode(txt.substring(p, txt.length)));
}
//replace the original text with the new span
try {
if (!dry_run_linkified) {
node.parentNode.replaceChild(span, node);
}
} catch (e) {
try {
console.error(e);
console.log(node);
} catch (ee) { }
}
}
return k;
}
}
LINKIFY.linkifyContainer(canvas);
}
buttonStart.addEventListener("click",start,false);
})();
</script>
</p>
<p>嗚喔……突然覺得這個版面有點窄啊</p>欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0tag:blogger.com,1999:blog-7235214257200496593.post-82262578398046315512012-11-14T19:44:00.000+08:002012-11-14T19:45:30.869+08:00[Opera] 跳過adf.ly的廣告<p>大約在九月中時,拿到了一台新筆電,那台老筆電終於可以光榮的退休了。在備份資料時也發現許多檔案壞了……這台新筆電來的真即時。</p>
<p>雖然說是幾乎所有的資料都拿出來了,但許多應用程式還是得重裝,而且還有滿多程式不支援Win7。目前的情況還不錯,需要的東西幾乎都裝上了(我沒裝GCC(炸)</p>
<a name='more'></a>
<p>不過就在我下載FreeRapid時發生了一點小問題,那就是adf.ly轉址。當Opera進到adf.ly後就會卡住,原本應該10秒後會在右上角出現Skip按鈕也沒出現。最後就順手寫了下面的script直接跳過廣告了……</p>
<p>其實一般情況我是不會去跳過廣告的,畢竟這也是對軟體開發者的一點回饋,但adf.ly就有點……各位斟酌用吧。</p>
<p>裝完這個UserJS後,要把adf.ly的cookie清空,並設定「永不接受cookie」。</p>
<pre><code> <br />// ==UserScript== <br />// @include http://adf.ly/* <br />// ==/UserScript== <br /> <br />opera.addEventListener("Beforescript",function(e){ <br /> e.preventDefault(); <br /> var o=e.element; <br /> window.location.href=/var url = '(.+?)'\;/.exec(o.text)[1]; <br />},false); <br /></code></pre>
<p>keyword: to skip adf.ly ad page using opera</p>欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0tag:blogger.com,1999:blog-7235214257200496593.post-77495434640470308862012-08-17T01:27:00.000+08:002012-08-17T01:27:25.456+08:00[Spiral Knights] 畫圖活動<p>很久~沒有畫圖了!最近SK辦了一個「畫圖拿ME罐」的活動﹐就來練習了((誒<br /> 好遼草(艸)雖然原本打算上色,但還是先把這張傳上去了(炸</p><script src="http://source.pixiv.net/source/embed.js" data-id="29435602_c74f8ebc81c542305720202d55a4e0d3" data-size="large" data-border="off" charset="utf-8"></script><noscript><p><a href="http://www.pixiv.net/member_illust.php?mode=medium&illust_id=29435602" target="_blank">Spiral Knights 鉛筆初稿</a> by <a href="http://www.pixiv.net/member.php?id=4057369" target="_blank">eight</a> on <a href="http://www.pixiv.net/" target="_blank">pixiv</a></p></noscript>欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0tag:blogger.com,1999:blog-7235214257200496593.post-81209575945077882332012-07-29T02:27:00.000+08:002012-07-29T02:27:47.543+08:00[Spiral Knights] 台服封測<p>7/26早上10點,封測伺服器開機。拿著序號去登入,基本上只是想看看介面...等等的。全部的圖都放在相薄裡了!</p><a name='more'></a><br />
<p><embed type="application/x-shockwave-flash" src="https://picasaweb.google.com/s/c/bin/slideshow.swf" width="400" height="267" flashvars="host=picasaweb.google.com&captions=1&hl=zh_TW&feat=flashalbum&RGB=0x000000&feed=https%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2F104262687404516185465%2Falbumid%2F5770285342198155761%3Falt%3Drss%26kind%3Dphoto%26hl%3Dzh_TW" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></p><p>話說,我家的鳥一直在籠子裡飛...怎麼辦。</p>欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0tag:blogger.com,1999:blog-7235214257200496593.post-82701242167301342502012-07-03T03:57:00.000+08:002012-07-03T03:57:17.016+08:00[Spiral Knights] Solo火王!嘗嘗太陽碎片的威力吧!<p>標題好中二(?)以下是近況報告</p><p>最近出了一個新的每日任務,裡面還有些新怪,個人覺得頗有難度(sad)。</p><p>再來就是太陽碎片(Radiant Sun Shard)的效果可能要被nerf了,詳見<a href="http://forums.spiralknights.com/en/node/58164">此</a>。</p><p>所以今天不睡覺拿RSS去solo火王,以下勝利照<br /><img src="http://i.imgur.com/owtRA.jpg" alt="火王勝利照" /></p><p>不難,只要小心的走位就可以了。讓碎片從炎漿之間的鏠插進去(?)</p><p>然後最近可能會回鍋跑跑。不知道為什麼,前幾天新創了一個帳號後就抽到永久TaiwanZ7。</p>欸特http://www.blogger.com/profile/18278924499311814863noreply@blogger.com0