顯示包含「自家作品」標籤的文章。顯示所有文章
顯示包含「自家作品」標籤的文章。顯示所有文章

2014年9月11日星期四

免安裝Javascript版Apple Store iPhone 6 開賣Bot

唔洗講大家都知聽日係iPhone 6開賣日,高登討論區已經淪陷為Bot散貨場,當中是真是假我都唔知。
因為直至寫文呢個時間,Apple Store只更新iPhone 6訂購頁,但之後要填寫什麼都未知是否跟iPhone 5是一樣。
所以自動落單,自動填表的等媽媽餵奶流程是不是真的有用,我個人就很保留態度。



其實兩年前,我寫的Windows版 炒iPhone必備 Apple Store Checker - 開賣喇免費版,當時已經講過十個所謂監察App,相信九個都沒有太高深技術,純粹偵測一下Apple Store回應的Json就知道是否開賣。當時已經有一些無良開發者,竟然以如此低技術的程式,去收取$39.99的價錢,甚至比一些Office Apps或遊戲還要貴。

近日有人留言問我是否會更新那時的程式,其實程式的Source Code,我都好像刪除了。
不過今天看見網站流量突然爆升,全部都是衝著這個程式而來。
反正重寫都不會花太多時間,一個Lunch時間已經搞定,所以我就再重新寫一個。


不過這一次我為了快快搞掂,我以Javascript去實現,工作原理都是一樣,以GET方式檢查Json,有就出Alert,沒有就繼續StandBy,就是這麼簡單。
最簡單使用方法可以使用Browser上的Javascript Console如
除了Firefox之外,Chrome都已經內建。搞不懂就問問朋友或留言問我。

使用方法:
  1. 打開Browser先去 http://store.apple.com/hk-zh/buy-iphone/iphone6
  2. 按鍵盤F12,前往Console,把整段程式碼貼上執行就OK,之後程式每20秒就會對18個iPhone 6組合進行一次查詢。
  3. 想停止的話,可以輸入 stop()再按Enter就會停止(或者最直接就是重開瀏覽器),再開始就輸入run()按Enter。



當然我不能保証什麼,但在技術上或理論上,都是可靠的。
可惜近期我在工作上都很忙,恕我未能做到更好或解釋更多。m(~_~)m

下載Javascript檔
[開啟連結後,你會見到很長很嚇人的火星文,總之就直接按下Ctrl+A (全選), Ctrl+C (複製) , 再去Console Ctrl+V (貼上) , Enter, 右下角有提示出現就証明運作緊.]
https://dl.dropboxusercontent.com/u/19160547/Files/ip6.txt

Update#1 - 2014-09-12 00:16

呢段Script放左上網一發不可收拾,主要都是我Facebook的朋友用Chrome出現問題,
我自己都被訊息轟炸。而且他們執行上都覺得很困難,現在修正了一點地方,請重新再試。

Update#2 - 2014-09-12 01:40

程式原本設計是,任何一個組合開賣,就會出alert()提示,程式亦會停止(因為我怕同時彈出18個alert()視窗... ),但不能告之是什麼組合開賣(因程式已停止,餘下的組合不會再檢查),而且一不留神就會Miss左。
所以我再下苦功加入兩樣功能 -
1. 調用HTML5的Audio API做通知,開賣時,會有20秒的長Beep。
但不支援IE,即使是IE12,已查Mozilla文件証實。
2. 於Console Window顯示什麼組合開賣。

Update#3 - 2014-09-12 12:18

第三次更新,因為有人話自己在Office返工,唔可以打開Speaker,有聲都聽唔到。
所以我最後用了Chrome/Firefox的Notification功能去做提示,同時亦放棄支援IE。
記得第一次使用時,批准Browser的Permission,如下圖。

Chrome:

Firefox:

Update#4 - 2014-09-12 17:00

岩岩開賣時,好多人都不停Click個綠色選取制。
但我想講下,我都俾果個綠色制Fake左。
其實今次Apple果版做得好差,第一次按,有反應,但買唔到彈返轉頭果時,果個綠色制係會變到冇用的,
你再click佢,佢唔會send任何資料俾Apple,亦唔會做任何野動作。
一定要全版reload至得。
但今次我試左,自己呢段Script係Work的,再做左優化,大家一定要更新最新版本。

有很多人都說運行本Script後出現錯誤,最大原因是你的Firefox或Chrome沒有先前往http://store.apple.com/hk-zh/buy-iphone/iphone6就運行本Script。
若不懂用Chrome Developer Tool,有一段Youtube 上的Tutorial很簡單地教你怎用,由4:00開始睇就可以。

2014年1月31日星期五

GapView - Google+ & Picasa Viewer

今天是農曆大年初一,先說一聲新年快樂。
順道放上一個近期的作品,名稱叫做GapView,是一個Google+ Album和Picasa Album的Viewer軟件。
其實大半年前已經著手開始,不過未真正去完成。
現在完成度較高的版本已經完成,所以放出來給大家使用。

我自己對Picasa相簿使用度是很重的,有幾十本相簿,大概已經有5本相簿含超過800張相片。
若使用網頁介面,操作很慢,複製連結亦要一張一張去做,很花時間。
很可惜官方的Picasa軟件介面我實在覺得不好用,而且亦沒有複製連結這個功能。

所以這個軟件的目的就是可以讓你快速選擇相片,並複雜連結做Html或BBCode。
對好像我經常貼圖上討論區或者寫Blog的人都會很方便。

技術上,這次使用WPF的MVVM Pattern去設計軟件,是一個新嘗試。

使用方法很簡單,把Google ID加進我的最愛列表,程式就會自動列出相簿。
而Google ID取得方法就是網址後的數字。
https://plus.google.com/photos/113129480538907711691
https://picasaweb.google.com/113129480538907711691

Google Login方面,軟件使用Google OAUTH2登入,用途是看自己的Private權限相簿。
如果你的相簿沒有設權限或者觀看其他人的相簿,便不需要登入。
軟件以唯讀形式經Http連結讀取,我不會對你的圖片做任何操作。

有疑問可以留言問我。

GapView 1.0下載
http://goo.gl/0tm3ph
需要.NET Framework 4.5

程式截圖:

2014年1月13日星期一

Feedly Duplicate Filter 2014

轉至Feedly後,依然還要經常應付Google Reader時的1000+問題,即時超過1000條Feed未看,這還是最常出現在Delicious當中。

之前介紹過Feedly Duplicate Remover以及後來的Chrome Extension - Reader Filter

前者已經失效而且沒有更新,後者有效但只限Chrome,而且hidden後的feeds,會保留空白,很愚蠢的設計。

持續多個月,實在忍無可忍,還是又要自己出手寫個小品程式去一己私慾。

這個Userscript很簡單,以標題對比方法找出重複的,你可以選擇以Hide方式還是Highlight方式去標示。
打開Config方法是在Greasemonkey的圖示下會找到按鈕。
我測試過Chrome+Tampermonkey都可以完美運作的。

大家可以由此下載Feedly Duplicate Filter 2014
https://dl.dropboxusercontent.com/u/19160547/Files/Feedly_Duplicate_Filter.user.js



Source Code:

2013年6月14日星期五

令我廢寢忘餐的Unity3D

記得很久很久之前,曾經玩過Adobe的Adobe Atmosphere。用來建立3D世界,當時都有迷戀一段時間,但可惜Adobe最終放棄了這個產品。
自此之後,跟任何3D類軟件都沒有什麼緣份。

沒工作的這段時間,在學習Unity3D,其實寫程式都有近十年的日子,但自己對寫Game沒有太大意向,只是有用過jQuery和Blend+Silverlight做過一些公司春茗環節的小遊戲。
即使自己鐘意打機,但寫2D Game,又想不到有什麼Idea,即使做到出來,又好像沒太大成功感。

而寫3D Game則大不同,自己是FPS類遊戲,如Call Of Duty系列,BF系列,Gears of Wars的高手Fans,所以當然希望有一天自己可以涉獵3D遊戲的開發領域。
但在Unity3D出現之前,這是遙不可及的事。
因為我不懂DirectX,OpenGL,3ds Max等等,統統都是無從入手。
Physics部份如Collision或HitTest的程式碼,大概可能要花半年時間去完成。
甚至是親切的Microsoft曾經推出XNA Studio都學不來。

Unity3D完全改變整個開發門檻,Unity3D就等於當時的Visual Basic 6一樣。
把很多複雜的東西都打包好,即使是3D Model,地形,甚至燈光等等物件,你都可以透過Drag & Drop去完成一個場景。
一些物理上的如重力,撞擊力,Hit Box等等都可以在Properties填上數值就可以。
所以我用VB6去做比喻是很貼切,就如當年VB6的Form Control一樣。你不用懂複雜的C或C++都可以做到至少可以令人自High的程式。

Unity3D同樣不用你寫C++的程式碼,背後的程式如電腦的AI,你大可以寫Javascript或C#程式。
Unity3D安裝過後,本身已經有MonoDeveloper給你做Debug。
如果你像我一樣都是Microsoft派系的人,MonoDeveloper一點也不難上手。

這兩個星期,都在學習Unity3D,目標就是想寫一個簡單的第一身射擊遊戲。
學習了用Unity Package,寫電腦的AI,Physics物件的應用,設計地型等等。

暫時做出來的樣子就是這樣,可以在自己建立的3D世界行走有裊強烈的滿足感。


Capture了影片,因Cam Studio所限,Frame Rate比較低。

2013年6月13日星期四

Pikaview - Bulk copy Picasa web album image url

Picasa Web Album 跟很多Image host比較,有一個極大優點,就是所上載的圖片都是Hotlink,亦沒有限制Bandwidth,你不用擔心連結失效的問題。
但一直以來Picasa Web都有一個缺點,就是不能批次模式去Copy Direct Links。即使官方的Picasa看圖軟件都沒有這個功能。

好像我寫Blog Post時,若果文中圖片多的話,一張一張去開新頁,再Copy & Paste,多沒趣味的動作。
一次都算,但次次都是這樣,真是很浪費時間。
近期Google終於都把Gmail / Drive空間跟Picasa結合成15GB,我可以預期自己會更依賴Picasa。

一直以來都沒有人去做一些軟件去方便取得連結,苦候多時,所以我趁現在空閒,很草草了事地寫了一個小軟件,用途就是要彌補上述的問題。
這個程式很簡單:
1. Login 至 Google Account,取得權限。
2. 列出相簿中的圖片。
3. 按住Ctrl或Shift進行多選圖片,Right Click,Copy。
就是這樣。
介面很醜,反正用到就可以了。
我Google Login部份是使用Google OAUTH 2.0,所以可以放心,我不會取得你任何密碼。
程式不會對你相簿或圖片做任何修改,是Read Only。

軟件是用WPF加.NET Framework 4.0寫的,有需要可以下載。
Pikaview v0.1.0
https://dl.dropboxusercontent.com/u/19160547/Files/Pikaview_v0.1.0.zip
.NET Framework 4 Client Profile
http://www.microsoft.com/zh-tw/download/details.aspx?id=24872

2013年1月24日星期四

為你的Blogger加入新式上一篇/下一篇文章連結

其實很多Blog Engine的previous/next->post/page都很不顯眼,即使如WordPress,很多Themes的設計都同樣冷落這兩個連結按鈕。

至於Blogger也不例外,樣式不吸引,而且所在位置是頁面的最下方,就是那麼不起眼。


當然透過CSS,你可以把它改變成大圖案大文字去吸引目光,但其實透過小小的jQuery Plugin就可以做到現在本Blog的效果。


所使用的plugin叫jcLeftRightKeyNav
可以試試官方的Demo,其中一個特色是支援Keyboard的左右鍵。

官方Demo無論連結和文字都是靜態的,
所以我還作出了少少修改 -
1. 把Blogger的Post Title,Prev/Next連結,Dynamic地連結至該Plugin。
2. 把Post的Thumbnails加上伸展標籤位置。

若覺得有點抽象,或者可以試試本站的實際使用情況,你應該會見到頁面兩旁有Previous/Next的浮動按鈕。

使用方法:
1. 下載jcLeftRightKeyNav,上傳至網絡空間或DropBox

2.在Blogger的HTML/JavaScript小工具貼上以下Code :
<!-- CDN Hosted jQuery -->
<script src='//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js'/></script>
<script type="text/javascript" src="[PathTo]/jcSimpleLeftRightKeyNav.js"></script>
<link href="[PathTo]/jcLeftRightKeyNav.css" rel="stylesheet" type="text/css" />

3. 現在就到Hack的部份。跟上面同一位置,再貼上後儲存,便完成。
<script type="text/javascript">
$(document).ready(function(){
  //If the current page is posts list, exit. The script should run when viewing post.
  if ($('div.date-outer').length > 1)
   return;
  
  //variables
  var prevtitle = '', prevmeta = '', previmg = '',nexttitle = '', nextmeta = '', nextimg = '';
  //Use your favor image when the post is no thumbnail.
  var noimage = 'http://ultraimg.com/images/t36d6d.png';
  //Get the prev/next href src.
  var prevsrc = $('#Blog1_blog-pager-newer-link').attr('href');
  var nextsrc = $('#Blog1_blog-pager-older-link').attr('href');
  
  //Perform jQuery ajax to blogger mobile version and get the title and thumbnail.
  $.ajaxSetup({ cache: false, global: false,async: false });
  if (prevsrc != null)
  {
   //Append "?m=1" to blogger url to visit mobile version.
   $.get(prevsrc + '?m=1' ,{ "_": $.now() },  function(data) {
     prevtitle = $('h3.post-title.entry-title' , data).text();
     prevmeta = $("meta[itemprop='image_url']" , data);
     if ($(prevmeta).html() == undefined)
     previmg = noimage;
     else if ($(prevmeta).attr('content').indexOf('-Ic42/') > -1)
     previmg = $(prevmeta).attr('content').replace(/\/s[^\?\/]*\//,"/s200-Ic42/");
     else if ($(prevmeta).attr('content').indexOf('-c-Ic42/') > -1)
     previmg = $(prevmeta).attr('content').replace(/\/s[^\?\/]*\//,"/s200-c-Ic42/");
     else 
     previmg = $(prevmeta).attr('content').replace(/\/s[^\?\/]*\//,"/s200/");
     
   });
  }
  if (nextsrc != null)
  {
   $.get(nextsrc + '?m=1' ,{ "_": $.now() },  function(data) {
     nexttitle = $('h3.post-title.entry-title' , data).text();
     nextmeta = $("meta[itemprop='image_url']" , data);
     if ($(nextmeta).html() == undefined)
     nextimg = noimage;
     else if ($(nextmeta).attr('content').indexOf('-Ic42/') > -1)
     nextimg = $(nextmeta).attr('content').replace(/\/s[^\?\/]*\//,"/s200-Ic42/");
     else if ($(nextmeta).attr('content').indexOf('-c-Ic42/') > -1)
     nextimg = $(nextmeta).attr('content').replace(/\/s[^\?\/]*\//,"/s200-c-Ic42/");
     else 
     nextimg = $(nextmeta).attr('content').replace(/\/s[^\?\/]*\//,"/s200/");
   });
  }
  
  //Finally, run jcLeftRightKeyNav.
  jQuery().jcNextPrev({
       prevLink: prevsrc,
       prevLinkText: "<img src='" + previmg + "' />" + "<br />" + prevtitle,
       nextLink: nextsrc,
       nextLinkText: "<img src='" + nextimg + "' />" + "<br />" + nexttitle
  });

});
</script>

其實沒有太複雜的地方,應該看comment都已經足夠說明。
唯Thumbnail(預覽圖)可以解說一下。

若你跟我都是用Picasa Web或Blogger內建的上傳做圖片連結,
Blogger的預覽圖是會自動產生,Blogger會自動抓取你Post文中第一張圖片做預覽圖Url。
故為什麼要設置NoImage,因為有機會Post中沒有圖片可抓。

若果圖片都是其他網域的話,很遺憾就沒有預覽圖了。
例如這個Post是用Facebook的,當你View Source時,你會找不到任何有關預覽圖的資料。

2012年1月19日星期四

炒iPhone必備 Apple Store Checker - 開賣喇免費版

#18/JAN/2012 Update!!! - 支援Smartone iPhone 4S - 儲值咭組合。
有很多人要求我做埋Smartone,其實唔難....可能本身不是眼紅者,所以再改版既意慾不大。但現實中又有同事要求,咁即管支援埋Smartone喇。
新版本0.03使用方法都是一樣,但Smartone部份要等到真正開賣才知道Work唔Work,不過我估問題不大的。
另外Fix埋如果冇Network Connection時,會誤報iphone開賣的問題。

上星期首次投入炒賣iPhone行列,第一次感覺到炒iPhone那種不勞而獲的快感。
之後上網試試找有沒有程式可以長時間監察Apple Store,一有iPhone開賣就通知自己。

點知原來好多程式都係手機版,仲要收錢,都有唔少人買,有幾千個水魚,我即時心諗:(嘩~早知我早o的寫喇~)
Android Market : https://market.android.com/search?q=%E9%96%8B%E8%B3%A3&c=apps
App Store : http://itunes.apple.com/hk/app/id468658936?mt=8

呢句說話並不是馬後炮,我即使不是長時間在Apple Store打躉,但略有Web開發水平,而又懂得用Firebug之類的Debugger,花一點時間去分析一下Apple Store網頁就可以。

其實我有幾個想法係可以檢查Apple Store開賣情況,(以下內容含一點技術成份)

1. 用WebClient把Apple Store的頁面整個下載,如果字串長度有所變更,就進行通知。但這個方法有一定的誤中率。
2. 跟(1)一樣,下載網頁,不同的是偵測一下開賣時的綠色Checkout按鈕是否存在。但我沒有實行過,因為我寫這個Apple Store Checker時,沒有開賣,根本不知道那個按鈕的HTML含有什麼,是圖還是CSS3都不知道,但理論上是可行而且準確的。
3. 這個方法就是我程式使用的,直接模擬按下購買iPhone時的按鈕。當按下iPhone按鈕後,如果你用Firebug或類似IE Developer Tool監察Network活動時,你會發現Browser會Request一條URL,這條URL回應的內容已經十分明顯,如下圖。

20111221_171602_2-t.jpg

所以我要做的事十分簡單,只需要下載這個JSON字串做檢查已經可以,連deserialize那Json都不用。因為字串含有"暫無供應",那已不需要再問吧。

這個聖誕就送給各炒家一個程式,不用眼紅人了。
這個程式原理就如上述所說,不過我加入Timer每60秒做自動檢測,如果開賣的時候,那就大件事了。
右下角會有Notify彈出,程式本身都有Alert Window彈出,你不用怕會走漏眼。

程式本身開啟後會有一個藍色蘋果圖示在Windows右下方,點擊就可以開啟主畫面。而裡頭的Debug Mode其實是給我使用,Debug Mode是可以修改Json網址的,但不建議修改,除非有一天Apple Store把網址改了。
20111221_173517_4-t.jpg20111221_173431_3-t.jpg

原理,程式,用法就是這麼簡單,不要再花錢買那些App了。
Apple Store Checker下載網址 : http://dl.dropbox.com/u/19160547/Files/AppleStoreChecker.zip

#24/12/2011 Update
今天的流量嚇了一嚇,多了千多人到來,原來是高登眾巴打的捧場
而今天我自己終於都實際試驗到這程式,因為寫的時候到今天為止都沒有開賣,但今天早上10:10分左右,程式彈Pop-up,立即叫全公司所有人狗沖上Apple Store,証明程式是Work的。
但發現原來Apple Store是有配額制度。因為我的電腦和另外兩個同事的電腦,無論程式本身或實際上Apple Store都有不同的情況。

我自己在10:10am (左圖) 收到程式通知,上Apple Store,整個Checkout過程很快。同事A和同事B,遲過我上Apple Store幾分鐘,但奇怪的是程式沒通知,上Apple Store都是顯示未有得賣。
他們Clear Browser的Cache/Cookie,轉IE/FireFox/Chrome都是一樣。直到10:30am (右圖),他們才出現購買綠色按鈕。
所以我懷疑不只電話本身數量有限,而Apple Store是分批給人購買,並不是一開賣就全香港人都可以買到。
最後我仲發現自己打錯字,打左34GB...
20111224_ips4_sell_2-t.jpg20111224_ips4_sell_1-t.jpg

同埋我岩岩睇Post,話大陸人寫Bot Check埋係咪開賣,開賣仲自己買埋機,係就係有,
但係話"搵好多錢請左幾個精英編寫員黎寫",未免太誇張喇。
20111224_010424_7-t.jpg

其實呢o的Bot你地都可以寫到。
一般做Web Development或SQA既人,除左UnitTest呢類較Formal既測試,仲會有一樣o野,
你可以叫做WebTestAutomated Test。(較正確解說,自己上Google睇下係乜)
呢類Test正正就係可以做到自動檢查開賣,在某條件下,自己Click條Link,填埋Credit Card info等等。但當然寫呢類Test唔係o野少。
但Firefox就有一個叫iMacro既Extension俾你簡化做類似既事。其實Chrome都有,不過Chrome果個好Kai。
iMacro可以Load External Javascript去做Checking,網頁上既控制,當然有條件式Retry/Loop。

雖然我唔知大陸果款係點,但呢類都係Bot既一種。亦可以幫你地慳水慳力,我都想有條大水喉搵我寫個咁既o野。

2012年1月18日星期三

香港高登改版面,Userscript出動了

香港高登Admin又食飽飯冇事做更新版面,令到我一向用開的Firefox Extension - Helianthus.annuus部份功能失效。
諗都唔洗諗,立即左Keyboard右滑鼠花半粒鐘時間Fix返佢,順便造福人群。

呢個Userscript Fix返幾樣o野:
  1. 快速回覆會好似以前咁浮動形式+摺合。
  2. Helianthus.annuus果個Message Template,如果太多自訂訊息會按唔到OK制,亦新增唔到。
  3. 刪除阻住晒既討論區守則。
  4. 刪除阻住晒既咖啡色Menu bar。
  5. 刪除阻住晒既高登 Logo。
  6. 修正頁面闊度
  7. 放大Menu bar左手邊o的字
  8. 加返[返回吹水台]

暫時Fix返以上係我覺得對我好唔方便既野。

如果真係後繼無人,或者之後有時間再更新這個Post,增加一下功能。

使用方法一如以往新增一個Userscript,Copy And Paste,Save,搞掂。
18/Jan/2012 20:56 Update :
似乎好多巴打都有用,我岩岩再Update左一次,現在Resize browser後,條快速回覆Bar都會起度。
起高登不便出Post,有什麼想加或Bug可留言,因為林祖舜之前都因為我寫高登Post Parser而Bam過我一次。 :fuck:

// ==UserScript==
// ==UserScript==
// @name   HKGolden.js
// @namespace HKGolden.js
// @description 修正/增強HKGolden
// @include  http://forum*.hkgolden.com/topics.aspx?type=*
// @include  http://forum*.hkgolden.com/view.aspx?type=*&message=*
// @include  http://forum*.hkgolden.com/view.aspx?message=*
// @require  http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js
// @require  http://cachedcommons.org/cache/jquery-bbq/1.2.1/javascripts/jquery-bbq.js
// ==/UserScript==
var QrOpenTop = 27;
var QrCloseTop = 322;

function toggleNMTop() {
    var status = jQuery('#QrStatus').text();
    if (status == 'show') {
        jQuery('#newmessage').animate({
            top: window.innerHeight - QrOpenTop
        }, 400);
        jQuery('#QrStatus').text('hide');
    } else {
        jQuery('#newmessage').animate({
            top: QrCloseTop
        }, 400);
        jQuery('#QrStatus').text('show');
    }
    return false;
}

function PosQrDiv() {
    jQuery('#newmessage').css('top', window.innerHeight - QrOpenTop);
}
document.body.onresize = PosQrDiv;

jQuery(document).ready(function ($) {

    //Delete條咖啡色Menu bar
    jQuery('table table > tbody > tr:eq(1)').remove();

    //Delete 高登 Logo
    jQuery('table > tbody > tr:eq(1) table > tbody > tr:eq(0)').remove();

    //Remove 討論區守則
    jQuery('div.DivBoxContainer').remove();

    //Fix Helianthus.annuus Message template dialog size.
    jQuery('#ctl00_ContentPlaceHolder1_QuickReplyTable select:eq(2)').live("click", function () {
        if (jQuery('.an-forum').css('display') != 'none') {
            jQuery('div.an-forum').css('margin-top', -400);
            jQuery('#an-snippets').css('height', window.innerHeight - 100).css('overflow', 'scroll');
            jQuery('#an-snippets > div:eq(0)').css('float', 'left');
            jQuery('#an-snippets > div:eq(0) > input:eq(0)').css('width', '400px').css('float', 'left');
            jQuery('#an-snippets > div:eq(0) > textarea:eq(0)').css('width', '600px');
        }
    });

    //Fix 快速回覆
    jQuery('#newmessage').append("");
    jQuery('#QrStatus').text('hide');

    jQuery('#newmessage').css('position', 'fixed');

    jQuery('#ctl00_ContentPlaceHolder1_QuickReplyTable > tbody > tr > td > table > tbody > tr:eq(0)').css('cursor', 'pointer');
    jQuery('#ctl00_ContentPlaceHolder1_QuickReplyTable > tbody > tr > td > table > tbody > tr:eq(0)').click(function () {
        toggleNMTop();
    });

    jQuery('#ctl00_ContentPlaceHolder1_btn_Submit').live("click", function () {
        jQuery('#newmessage').animate({
            top: window.innerHeight - QrOpenTop
        }, 400);
    });
    PosQrDiv();

    //Fix Helianthus.annuus 頁面闊度
    var width = '80%'; //可設定為auto, 80%, 1000px等
    var maintable = jQuery('table > tbody > tr:eq(3) > td > table:eq(0)');
    jQuery(maintable).attr('width', width);
    jQuery('div.PageMiddleBox', 'table.repliers').css('width', width);
    jQuery('tbody > tr >td', maintable).attr('width', width);

    //放大Menu bar左手邊o的字
    var menubar_left = jQuery('table:eq(4)');
    jQuery('span,a', menubar_left).css('font-size', '16px');
    //加返[返回吹水台]
    jQuery('#ctl00_ContentPlaceHolder1_view_form > div:eq(4)').append("  返回吹水台");
});

2011年12月13日星期二

[WordPress-Hack] List Category Posts

近來想重整一下自己的Blog,其中一樣就是整理一下文章,刪除一些我認為不應該在這裡出現的Blog Post(或許只是當時一時衝動地Publish..),以及增加以下要說的文章目錄。

其實一開始用WordPress到現在都察覺有一個問題,就是用Categories進入或由Tag進入文章分類,佈局會很難看,或者是我選的Theme問題,又或者是我沒有做調整美化工作。

但無論如何,我都想做一個只有Title的目錄。

上網找相關參考,第一個就找到WP的Plugin - List category posts,老實說,安裝過後,這個Plugin是不錯的,基本上已經滿足我要求。

但再多看以下兩個網,又打消我依賴Plugin的念頭,原因離不開自己DIY的滿足感較高。
wp Codex - Class Reference/WP Query
4 Ways to Loop with WordPress

先看看Demo : http://webapp.heliohost.org/cms/wordpress/ListCategoryPosts_v1.php
這裡列出未分類的所有Blog Posts。

而PHP Code如下 :

<?php
require_once ('wp-load.php');
require_once ('wp-blog-header.php');
?>
<h3>Recent Articles</h3>
<ul>
<?php
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$wp_query = new WP_Query('post_type=post&post_status=publish&posts_per_page=20&paged=' . $paged . '&orderby=date&order=DESC');
?>
<?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
  <li><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
<div>
  <div><?php previous_posts_link('&laquo; Previous') ?></div>
  <div><?php next_posts_link('Next &raquo;') ?></div>
</div>
<?php
 wp_reset_postdata();
 wp_reset_query();
?>

就是這麼簡單,何必要使用Plugin? 使用WP_Query已經綽綽有餘,只是CSS,Style欠奉。
如果想分類,做更多Filtering的話,可以參考wp Codex - Class Reference/WP Query
若然WP_Query提供的Filter還未夠,你大可以直接用SQL,但當然這已經完全偏離WordPress的話題。

2011年9月20日星期二

Userscript - 自家製Google Image Search Preview

這類Google Image的Userscript有很多,但在userscripts.org上,做同樣功能的script,很多都沒有更新。



Google卻有時會更新頁面HTML碼導致Userscript失效,當然Firefox都有活躍的Extension如Thumbnail Zoom做到。

但既然如此,不如我自己寫一個出來,反正不是什麼深奧技術。
想使用的人,可以Select All然後Copy&Paste另傳一個txt文件,rename做js檔,拉去Firefox就可以安裝。

// ==UserScript==
// @name           Google Image Search Preview
// @version      18/09/2011
// @namespace      達MiNG
// @description    Mouse over and preview the image on Google images search result. This userscript will redirect Google Images to basic version. Find me at http://www.netatlantis.com/?p=3115
// @icon       https://lh5.googleusercontent.com/-Sookp-flc2I/TnXlDfP-0OI/AAAAAAAABTU/1vNWqGX4kYI/google-icon.png
// @require        http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
// @include        http://www.google.com/search?q=*&tbm=isch*
// ==/UserScript==

function addGlobalStyle(css) {
 var head, style;
 head = document.getElementsByTagName('head')[0];
 if(!head) {
  return;
 }
 style = document.createElement('style');
 style.type = 'text/css';
 style.innerHTML = css;
 head.appendChild(style);
}

// a function that loads jQuery and calls a callback function when jQuery has finished loading
function addJQuery(callback) {
 var script = document.createElement("script");
 script.setAttribute("src", "http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js");
 script.addEventListener('load', function() {
  var script = document.createElement("script");
  script.textContent = "(" + callback.toString() + ")();";
  document.body.appendChild(script);
 }, false);
 document.body.appendChild(script);
}

this.imagePreview = function() {
 /* CONFIG */
 xOffset = 10;
 yOffset = 30;

 // these 2 variable determine popup's distance from the cursor
 // you might want to adjust to get the right result

 /* END CONFIG */
 $("a.preview").hover(function(e) {
  this.t = this.title;
  this.title = "";
  var c = (this.t != "") ? "" + this.t : "";

  var src = this.href;
  if(src.indexOf('imgurl=') != -1) {
   var vars = [], hash;
   var hashes = src.slice(window.location.href.indexOf('?') + 1).split('&');
   for(var i = 0; i < hashes.length; i++) {
    hash = hashes[i].split('=');
    vars.push(hash[0]);
    vars[hash[0]] = hash[1];
   }
   src = vars["imgurl"];
  }

  $("body").append("

" + c + "

"); $("#preview").css("top", (e.pageY - xOffset) + "px").css("left", (e.pageX + yOffset) + "px").fadeIn("fast"); }, function() { this.title = this.t; $("#preview").remove(); }); $("a.preview").mousemove(function(e) { $("#preview").css("top", (e.pageY - xOffset) + "px").css("left", (e.pageX + yOffset) + "px"); }); }; // starting the script on page load $(document).ready(function() { var standardUrl = window.location.href; if(standardUrl.indexOf('sout=1') == -1) { var addToUrl = '&sout=1'; var basicUrl = standardUrl + addToUrl; window.location.replace(basicUrl); } else { addGlobalStyle('#preview{ position:absolute; border:1px solid #ccc; padding:0px; display:none;width:37px;height:37px;background-image:url(https://lh4.googleusercontent.com/-Nv-RqxGFQUg/TnXlCyUr_uI/AAAAAAAABTQ/hSiOpUTdufA/20088258937578778044.gif) }'); $('#imgtb a').addClass('preview'); // load jQuery and execute the main function addJQuery(imagePreview); } });

2011年3月1日星期二

WP-Plugin SlideZoom v1.4.0 Release!

超過半年沒有更新,因為自己實在沒有太多時間,但其實這個PlugIn自己都很重視,因為我自己都是經常使用的。
但對於這個Plugin的使用人數就不太滿意了,在Google Search的話 :
http://www.google.com.hk/search?q=SlideZoom會得出共約 2,830 項結果,
但這個PlugIn其實已經差不多兩歲了.....

不過怎樣都好,盡可能都會繼續更新下去,
新版本下載 / Changelog / Demo去專頁吧。
http://tatmingstudio.blogspot.com/2009/03/slidezoom.html

2010年7月22日星期四

Facebook Album Upload Tool

再來一個小弟自家製作軟件,這個軟件就如名稱所說,是一個Batch Images Upload軟件。
我使用了

去製作,因為我不想用舊有的Old REST API,取而代之用新的Graph API方便日後更新,所以沒有使用其他3rd Party的Facebook API Library,而且我覺得CodePlex上的Facebook Developer ToolkitDocumentation做得不夠好。(雖然Facebook官方的都不見好...)


其實這個軟件原本我只是打算自己用,所以需要重申一點,無論軟件界面,UI上的英文文法,Code本身的質素,Exception等等全部都是很隨意,但求運作成功就算,我亦不排除有任何Bug,但我自己用了一段時間是沒有大問題的,希望大家明白。

為什麼做這個,因為現在網絡上的Facebook大量上傳軟件似乎部份因為Facebook的API更新而失效,所以才想公諸同好。


使用方法:
開啟軟件後,按[Authorization],會出現一個Window進行認證手續,完成後Window會自動關閉,這時候會自動增加帳戶至[Account]Menu的ComboBox裡,選擇Facebook Album,再選擇你電腦的相片,Right Click & Upload。


其他細微使用說明:
  • 由於我沒有使用Multi-Threading,所以上傳的時候,軟件狀態呆滯,但其實是工作中,請耐心等待
  • 軟件是Portable,不會寫資料去其他地方
  • 軟件不會儲存你的登入資料,整個Authorization過程是在Facebook上進行
  • Double Click Facebook的圖片可以放大
  • 按著Ctrl可以多選圖片上傳
  • 一次最多上傳200張圖片 (Facebook限制)
  • 上傳的圖片會自動resize至最大720px x 720px (Facebook限制)

電腦必須已安裝.NET Framework 4.0,如沒有按此往Microsoft網站下載
Download Facebook Album Tool v0.001 : http://www.badongo.com/file/23705599

fat20100721_235831-t.pngfat20100721_235906-t.pngfat20100721_235940-t.png

2010年5月11日星期二

WordPress 檢查無效圖片連結Plugins - WP-LinkCheck

昨天寫好了新的WordPress Plugin , 就隨意地給個名字叫WP-LinkCheck
顧名思義就是檢查你WordPress中的連結,不過是圖片連結,暫時還在等WP官方approve到WordPress Plugin Directory,
我先上傳到自己的空間,有興趣的話,大家可以試試,等WP approve後,我再更新資料。

Latest release:1.0.2 (Update on 03-JUL-2010)
Description:
WP-LinkCheck is a lightweight plugin ability to check all image sources are broken inside your WordPress blog, it check the http header by server response ,it don't have to download the images to boost the performace and bandwidth.

Repersent the result to SlickGrid utilizes virtual rendering to enable you to easily work with 50000+ of items without any drop in performance.
WP-LinkCheck will NOT make any database change (create table, modify table etc...), and NOT to create any cache files to keep your WordPress directory clean.

If the broken links are found, WP-LinkCheck will NOT do any modication / deletion to the content, everythings is under your control, you can simply click the post title and correct the url by yourself.
Ability to handle several HTTP Error in broken image includes:
  • 403 Access Denied/Forbidden
  • 404 File Not Found
  • 410 Gone
  • 500 Internal server error

Download:
http://wordpress.org/extend/plugins/wp-linkcheck/


Screenshots :


Changelogs :
*v1.0.2
Changed : Compatibility with WordPress 3.0.0
Changed : Update SlickGrid to 1.3.2
Fixed : Fixed unexpected output to affect the RSS output.

*v1.0.1
Fixed: jQuery Conflict with WP visual editor.
Changed: The http request timeout has changed from 5 seconds to 3 seconds.

*v1.0.0
Initial Release

2009年4月18日星期六

SlideZoom v1.1.1 Release



Changed : This version is maintenance release. I suggest everyone should update to this version.
Fixed "Stack overflow in IE6 / IE7 / IE8" Javascript error alert.
ie_stack_overflow_at_line_0.gif
Changed : Update HighSlide JS to 4.1.4, and reduce the size of highslide.js from 50KB to 25KB.
Changed : Remove the "Powered by..." label. It is legal action.
See: http://highslide.com/forum/viewtopic.php?f=4&t=608

Download SlideZoom v1.1.1 at WordPress Plugin Directory
http://wordpress.org/extend/plugins/slidezoom/

2009年4月1日星期三

WordPress PlugIn - SlideZoom 1.1 Release!

用左幾天時間,剛剛完成更新SlideZoom至version 1.1。
主要是新增真正Resize圖片功能,不是單單把原圖片set Width同Height~
刪除HighSlide中沒有用的File,減低HighSlide JS的Size。
另外再加進Output BBCode功能。
Update HighSlide JS 至 v4.1.2

寫SlideZoom途中,真的覺得PHP很多Function都很好用,有很多都是.NET沒有的。
已經很久沒有在寫程式過程當中找到樂趣了。

ScreenShot和ChangeLog可以去SlideZoom專頁
或者可以直接去WordPress Plug-in官網下載。
http://wordpress.org/extend/plugins/slidezoom/

2009年3月23日星期一

完成第一個WordPress Plugin : SlideZoom

用了差不多有一星期時間,研究一下寫WordPress的Plugin,畢竟PHP是我Secondary Language,要我在非工作情況下寫PHP,一開始我是拒絕的。
但是呢,由於有太多參考,而且WordPress的Document做得不錯,加上Aptana是個出色的PHP IDE,所以很快便完成了。
這個Plugin隨意起了個名字叫SlideZoom。先說說為什麼會出現寫這個Plugin的念頭。
我用了WP差不多兩年,都試用過很多Gallery,例如WP-Gallery , NextGen etc,但他們都有幾個我不太喜歡的地方。
  1. 如果只想把十多張圖片放上Posts,要新建相簿->Import圖片->加一個Pages->插入相簿....不方便而且久而久之會有大量零零碎碎的相簿出現。
  2. 它們部份都有自己的Trigger,或者有自己的File Location,如果你有一天不用那個Plugin,所有之前的圖片便不再顯示或者因Image Path關係被Isolate。
  3. 不夠輕量,如果就純粹想快速插入大量圖片而言,很多Plugin都要Create自己的Table儲存Meta data,又要設置很多東西等等。
其實即使WordPress本身的Add Media功能都不太好,Media功能只是"Upload一張,加一張",不是針對大量圖片的功能。但無奈地,一直都找不到有人寫我想要的Plugin,唯有自己DIY。

SlideZoom其實流程很簡單,就是: 上傳圖片=>建立HighSlide JS兼容的HTML Code
所以,我編寫SlideZoom時考慮到上述問題,而有以下特色:

1. 共用WordPress本身的上傳資料夾。
2. 圖片HTML格式採用 <a href="圖片" target="_blank"><img src="圖片" height="預設細圖高度" width="預設細圖寬度" /></a>,換句話說,即使有一天不用SlideZoom,圖片依然會正常地顯示出來。
3. 設定方面只是在WP自身的Options table插入一行紀錄。
4. Resize方面用回PHP自帶的GD Extension

暫時還有很多文字上的版權宣言(對HighSlide JS和WP的GPL) 還未搞好,不能上傳至WP的Extent頁。
所以暫時只好在這裡建立一個新頁供下載和ScreenShot,大家可以看看:
SlideZoom's Download / Demo / ScreenShot :
http://tatmingstudio.blogspot.com/2009/03/slidezoom.html
(為什麼WordPress 2.71沒有了Slug功能?我本想建立一頁叫http://blog.miawork.com/SlideZoom/)

Demonstration :