2011年12月29日星期四

Programming / Unit Test 的Google Trends & Insights

一直考慮是否轉用xUnit做日後新Project的UnitTest,上Google Trends搜尋一下,結果很驚人。
再搜尋多幾個關鍵字,結果實在令人很難相信。
雖然到最後都只可以說是參考數值,但出自Google的,又有一定的參考性。

首先就是.NET的Unit Test,可見是每年下跌,是什麼原因呢?
http://www.google.com/trends?q=nunit%2C+mbunit%2C+mstest%2C+xunit


之後再用較新品的Google Insights再比較一下,結果差不多。
NUnit vs MBUnit vs MSTest vs xUnit
http://www.google.com/insights/search/?hl=zh-HK#q=nunit%2Cmbunit%2Cmstest%2Cxunit&date=1%2F2007%2060m&cmpt=q



再看多一點,ASP.NET vs PHP vs JSP
PHP竟然有下跌跡象...
http://www.google.com/insights/search/#q=asp.net%2Cphp%2Cjsp&date=1%2F2007%2060m&cmpt=q



難道Google Insights是大淡友,只吹淡風?
看看近幾年應該不會下跌的技術 - jQuery
結果就正常得多。
看過,想一想可能性的原因,思考一下罷了。
http://www.google.com/insights/search/?hl=zh-HK#q=jquery&date=1%2F2007%2060m&cmpt=q

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年12月9日星期五

ASP.NET 新網站上線了~

到目前為止,其實我一直不太常去ASP.NET官方網站,因為要看參考文件,我會直接去MSDN;而那裡的Tutorial,大多數都是Video型式,教程是針對新手為目的較重,我又不太喜歡反覆按Stop/Play;而那裡的ASP.NET Forum又實在太慢。
久而久之,另一大站StackOverFlow已經成為我主要找資源或QA平台。
其實作為ASP.NET MVP,是有義務上ASP.NET Forum支持一下的,幫助一下新手或與高手交流一下....

不過自上個月收到Beta Site可以試用之後,試玩一下,感覺都幾好,前幾天已經正式上線。
有些地方做得不錯的:

1. 頁面資料更集中,選單都整理過了,不似之前的連結錯綜複雜,好像只在某幾版兜圈一樣。
2. 速度很快,在YSlow中達A級評價,我實際測試,都已經很不錯,不到幾秒已經換頁完成,亦不會有很吃力的感覺。
3. 討論區現在很清爽,不是之前那種藍色但暗沉的配色。

不過缺點還是有的,而且一直都存在...就是廣告...
老實說,在這個技術型官方網站上,到處都是圖片廣告,感覺有點不好...

ASP.NET新網站更詳細介紹
http://www.hanselman.com/blog/NewASPNETWebsiteLaunched.aspx

aspnet_new_site_Image-001-t.jpgImage-8-t.jpg

2011年12月7日星期三

免費圖像編輯軟件 - PixBuilder Studio

之前都介紹過很多同類軟件了,說真的,免費軟件當中,最後都沒有心水,或者Ulead的PhotoImpact我用了太多年(由5代到給Corel收購後的XL版),亦因為Corel放棄了PhotoImpact原故,所以一直物色其他的替代品。

找到一個叫PixBuilder Studio,介面還算不錯。

一般基本的功能都有了,但我推薦的原因還是有幾個:

1. Portable
2. 開啟速度快,比Paint.NET快,接近之前介紹的ArtWeaver FreePhotoFiltre
3. 支援Layer。
4. 支援Magnetic Lasso Tool,跟Layer一樣,免費軟件中並不常有,即使如上述其他的軟件,都現在都沒有Magnetic Lasso Tool。

大家試試看。
Free Photo Editing Software - PixBuilder Studio
http://www.wnsoft.com/pixbuilder/
PixBuilder-Studio-Image-5-t.jpginterface-t.png

2011年11月11日星期五

UserScript – Google Reader Filter

兩年前介紹過的"UserScript – Google Reader Filter Duplicates",隨著Google更新Reader介面而失效,對於每星期都要面對Google Reader 1000+地獄,要處理海量RSS Feed的我來說,Filter重覆的Feed是必須的。

好彩後繼有人,有英雄寫了一個新的UserScript – Google Reader Filter
我試了一下,是有效的,推薦一下!

Google Reader - Google+ UI真的很醜...

我一直覺得Google+ UI是十分醜的,某程度上我自己不願意使用都是因為接受不了介面設計。
原本以為Google只是因為Google+去設計一套UI,但慢慢地這個"病毒"開始在Google Doc蔓延,再到Gmail,到今天Google Reader都強迫人使用。
幾乎我愛用的Google服務都套用這個Google+ UI。

Google+ UI的純色元素,並以Icon代替文字的設計,好聽一點叫"簡約",難聽一點就"不倫不類"。
本身有些地方就不應該"簡約",例如Gmail為例 :

雖然用慣了都知道各按鈕代表什麼,但圖示太相似的情況下,按錯的機會都增加。
現在我刪除郵件都或許要花1-2秒確定自己沒按錯。

而且在中文界面上,字型的大小又有點奇怪,如下圖,文字本身的Margin-Top和Margin-Bottom都不對稱,其實文字可以再大一點吧?


其實外國已經有十分多人連署要求Google轉回舊介面。
Google Reader Backlash: 10,000 Users Sign Petition to Save Old Version


希望Google真的考慮一下。
其實Google+這個交友社群已經玩完,應該不久之後都會消失,Google+ UI? 算吧!!!

不過這又令我想起Microsoft的Metro UI...又是另一個我覺得十分醜和古怪的設計,原本我對WP7都有一點興趣,但玩過SDK後,看過一下令我嘔心的Metro UI,再沒打算買一部WP電話了。

是我的品味跟不上潮流還是真的新不如舊?

2011年11月9日星期三

PHPExcel 效能提升%300方法

公司有一個schedule task是用PHPExcel去export一個Excel 檔案再發送給其他部門,一直困擾很久的問題是效能問題和失效問題。
雖然我已經優化PHP程式本身和在php.ini把最大執行時間和Memory Limit設定成一定數值:
max_execution_time =3600;
memory_limit = 1024M;

但這只是解決PHP程式有機會死於memory用量過多或execution time過久而已。

最後在宏宏網海中,找到答案。
原來PHPExcel有一項設定"setPreCalculateFormulas()",沽名思義,可以略省計算Cell中的Formula。
以我的情況,我最後會輸出約500 rows x 30 columns的Excel,沒有任何formula的話,把它設定成False,真實測試後,效能的確可以大大提升超過%300。
方法:
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->setPreCalculateFormulas(false);

2011年11月5日星期六

8 Websites You Need to Stop Building

今日睇到的 - 8 Websites You Need to Stop Building
感覺很有共嗚。
列出8種現在或未來都不應該再做的網站/元素。
其實有時無論在香港,或國外網站,都會見到有人問:
(如果整一個類似Facebook的網站要點入手?)

通常問這條問題的人肯定是門外漢。
因為略為熟悉開發的人,根本不會,或者說不敢用Facebook作參考對象。

另一個種是刻意地掛上Web 2.0,但盡是熟口熟面的設計或毫無用途的功能。
其實現在還說Web 2.0已經十分Outdate,但總會還有一些Web產物依然以Web 2.0作掛帥....

另外老生常談就是Flash Intro吧...

國家地理頻道 透視內幕 Google 2011

原來Youtube上有一段由國家地理頻道制作的Google專題。
可惜只是短短30分鐘節目,但很值的睇的是片中講出Cloud Computing的隱藏危機,以及Google被Facebook侵占社交網絡市場的因由。


Part 2 : http://www.youtube.com/watch?v=c92rfavH7v8
Part 3 : http://www.youtube.com/watch?v=LzNe8sSvsuM

2011年10月19日星期三

修改電腦名稱後SQL Server Replication失效解決方法

在公司中,我自己的電腦都會跟Production Server做Replication,當然Server會是Publication,而我是Subscriber。
上星期,我把自己的本機電腦名稱修改,到今天看看Replication Monitor,發現這段時間一直都是"Uninitialized subscription"狀態。
過了一段時間才驚醒自己修改了電腦名稱,故兩者的Connection當然是不同了。
我試過重建,但奈何多次都不成功。上網找答案,原來是SQL Server並沒有記著新的電腦名稱。
下圖中,可見其實SQL Server中,Name與Data Source可以是兩個不同的值。


因為我是選擇"Snapshot replication pull model",故以下一切Command都應該在本機Subscriber電腦做,請注意。
上網爬文,有人說去System Databases中的Master DB,再到System Views中的sys.servers修改記錄。但世事又怎會那麼簡單....
Edit後出現"Ad hoc updates to system catalogs are not allowed."


其實可以執行兩個System SP去做一下檢查:
sp_helpserver - 顯示SQL Server內,已知或已註冊做replication Server的資料。
select @@SERVERNAME - 執行該Query Command的Server名稱。

就以下圖為例,顯然兩者並不一致,所以就要作出修正。


在本地執行以下SQL,目的是把沒有用的Server記錄刪除,再新增正確的Server資料。
sp_dropserver @server='MING-WINDOWS-7'
GO
sp_addserver @server='MingCheung-PC', @local='LOCAL'
GO
執行後,應該就可以重建Replication了。

2011年10月10日星期一

Ruby on Rails取代PHP?

每種Dev Language都會有一批死忠者,有部份人總不想與競爭者並存。
在遠古時代,已經有:
"C# Kill VB" ,
"PHP Kill Perl",
"PHP Kill ASP.NET",
"Python kill Java" 等等...多得可以做一串Array...

每次一有這類話題,雙方都會爭議得面紅耳熱,但當中不乏一些論點具參考性,所以我一般看完主文後,文章的Comments才是主菜。

這段時間又有一篇"Ruby on Rails kill PHP" - PHP needs to die. What will replace it?
Java vs Ruby on Rails vs PHP

PHPer當然大反撃喇。

其實我個人認為PHP先不要急推PHP6,最需要變一下的是PHP Logo和官網。
我一直都認為PHP的Logo很80年代感覺的,官網亦欠缺時代感。

2011年10月7日星期五

del.icio.us RSS Feed失效原因

早前講過話"del.icio.us bookmark停在14 Sep 2011?",之後有幾日又回復正常,但到了26號之後,部份RSS Feed又突然停止。

到前日我終於知道是什麼問題。

如下圖中,ASP.NET是沒有問題,但C#和CSS等等卻停在9月27日,但當天已經是10月5日了。



之後我去Google Reader最右上角的閱讀器設定一看就知道是什麼原因了。
原來舊有的Feed連結 : http://del.icio.us/rss/tag/csharp 已經不能使用。
必須使用這個格式的連結 : http://feeds.delicious.com/v2/rss/tag/asp.net?count=15



其實del.icio.usavos收購後,感覺上真的變得更差。

到目前為止,我發現有幾個不方便的地方:

1. 不顯示bookmark的日期
2. Tag沒有auto-complete
3. Tag空格不再視為分隔字元,落Tag時個人覺得不方便

2011年10月6日星期四

WordPress PHP Script - 重新分類圖片至YYYY/MM

之前寫了一篇WordPress - 把圖片加入/重新連結Media Library

大致上是用WP-Plugin Add From Server把Server上的圖片匯入至WP的Media Library中,再利用小弟我的PHP Script 把沒關聯的圖片與Post/Page重新連結。

但今天再整理一下WordPress時,發現自己的WordPress已經長大了,有1178個Post,接近二千張圖片。
一直都想把圖片再整理,詳細因由可以看看之前的WordPress - 把圖片加入/重新連結Media Library

今天再次寫一個PHP Script,主要目的有兩個:

1. 把圖片重新加入至 "YYYY/MM/" 結構的資料夾
2. 找出沒有用過的孤兒圖片

完成後,自己測試過很多次,效果不錯。
現在本Blog 2005年-2009的圖片都齊齊整整有自己的家(資料夾)了。



大家有需要可以把Code Save至一個PHP檔案,上傳到Server執行。

另外每個Server設定不同,請更改$image_dir和$images_to_process變數,說明一下:
$image_dir = 你WP的上傳資料夾,必須"/"結尾,但絕對不要"/"開頭。
$images_to_process = 每個Server的PHP Config(php.ini)都不同,以我為例,max_execution_time = 30的話,一次最多300張就好了。
如果你好似我一樣,有兩千張圖片,可以人手分多次執行。執行直到你看到圖片已經搬遷完成就可以。
完成後,最好重新把Server的Images資料夾下載一次,對比一下圖片數量和File Size,讓自己安心一點。 :hoho:

但緊記緊記!!! Backup你的Database和Images資料夾才動手,因為我會寫入你DB中的wp_posts Table和移動檔案!!!
廢話少說,送上PHP Code。

<?php
require_once ('wp-config.php');
require_once ('wp-admin/includes/admin.php');
require_once ('wp-includes/functions.php');

$server = DB_HOST;
$username = DB_USER;
$password = DB_PASSWORD;
$dbname = DB_NAME;

//Change this line to your WordPress Images folder if need, End with '/', but DO NOT start with '/'.
$image_dir = "wp-content/uploads/images/";
$images_to_process = 500;
//

$process_cnt = 0;
$abs_dir = get_home_path() . '/' . $image_dir;

function dirImages($dir, $i) {
 $d = dir($dir);
 //Open Directory
 while (false !== ($file = $d -> read()))//Reads Directory
 {
  $extension = strtolower(substr($file, strrpos($file, '.')));
  // Gets the File Extension
  if ($extension == ".jpg" || $extension == ".jpeg" || $extension == ".gif" || $extension == ".png")// Extensions Allowed
   $images[$file] = $file;
  // Store in Array
 }
 $d -> close();
 // Close Directory
 echo 'Total ' . count($images) . ' files found.';

 asort($images);
 // Sorts the Array
 $part_images = array_slice($images, 0, $i);
 return $part_images;
}

$array = dirImages($abs_dir, $images_to_process);

mysql_connect($server, $username, $password) or die(mysql_error());
mysql_select_db($dbname) or die(mysql_error());

foreach ($array as $key => $image)// Display Images
{
 //find out all attachment records which is no parent post.
 $sql = "SELECT ID , post_date FROM `wp_posts` WHERE post_type IN ('nav_menu_item','page','post','revision','template') AND `post_content` LIKE '%/" . $image . "%' LIMIT 1";
 //echo $sql;
 $attachment_post = mysql_fetch_assoc(mysql_query($sql));

 if (!$attachment_post) {
  echo 'No post is found by filename : ' . $image . 'SQL : ' . $sql;
  continue;
 }

 $process_cnt++;
 $id = $attachment_post['ID'];
 $post_date = date_parse($attachment_post['post_date']);
 $post_year = $post_date['year'];
 $post_month = substr('0' . $post_date['month'], strlen('0' . $post_date['month']) - 2, 2);

 //echo $image.' : '.$post_year.'-'.$post_month;
 //echo $abs_dir.$post_year;

 //check [year]/[month] folder is exist or not.
 $yearfolder = $abs_dir . $post_year . '/';
 $monthfolder = $yearfolder . $post_month . '/';

 if (!is_dir($yearfolder)) {
  mkdir($yearfolder, 0777);
  chmod($yearfolder, 0777);
  echo 'Create folder : ' . $yearfolder;
 }
 if (!is_dir($monthfolder)) {
  mkdir($monthfolder, 0777);
  chmod($monthfolder, 0777);
  echo 'Create folder : ' . $monthfolder;
 }

 //Move the images to new folder.
 if (file_exists($monthfolder . $image)) {
  echo 'The file : ' . $monthfolder . $image . 'exists, skip.';
  continue;
 }
 if (!rename($abs_dir . $image, $monthfolder . $image)) {
  echo 'Move ' . $image . ' Fail.';
  continue;
 }

 //Update wp_post's [post_content] to rewrite the existing url.
 $sql = "UPDATE wp_posts SET post_content = replace(post_content, '" . $image_dir . $image . "' , '" . $image_dir . $post_year . '/' . $post_month . '/' . $image . "') WHERE post_type IN ('nav_menu_item','page','post','revision','template');";
 mysql_query($sql) or die(mysql_error());
}

echo $process_cnt . ' files is done!';
mysql_close();
?>

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年9月19日星期一

del.icio.us bookmark停在14 Sep 2011?

有冇網友跟我一樣,所有tag的del.icio.us bookmark都停在14 Sep 2011?
無論是RSS或者是網頁上的,Login再Logout都是一樣.

聽聞del.icio.us被Yahoo轉售後,會於9月23號進行資料轉移,應該沒有關係吧...
還是早早Backup回自己的bookmark先...

2011年9月3日星期六

GIMP 2.7.3 single-window mode & change theme

GIMP 2.7.x終於都有Portable版了。
2.7版本一改以前那種多視窗顯示模式(亦是本人最痛恨的地方),可以轉成單一視窗,即是好像Photoshop般。
個人來說,還是較習慣Photoshop這種Layout。

其實我在公司用GIMP比較多,因為GIMP支援Layer,而且經常被要求做多次修改的話,是很有用的。
在家裡我就用PicPick內建的Editor就算了,始終都是一般Crop圖或加幾隻字而已。



而我選擇GIMP原因除了Layer支援外,還有就是Cross Platform,變得值得學習,那怕有一天轉用uBuntu都不怕。
而GIMP有著一般Freeware都沒有的Magnetic Lasso (真的~~如Paint.NET, PhotoFiltre 等等都沒有。)
只不過在GIMP中Magnetic Lasso 會被叫為Scissors Select Tool。



或者有人會想把沉悶的Windows Theme轉換到好像我上圖的黑色主題或其他,其實方法很簡單。
因為GIMP是用GTK+做介面,所以就可以更換Theme了。

Theme檔案可以在下列兩個網址找到,我自己不是GTK+方面的高手,所以或者會有咁多好地方找Skin。
官方GTK+ themes and theme engines
GNOME-Look

替換Theme方法:
1. 把下載回來的Theme檔案unzip後,應該會找到一個叫"gtk-2.0"的資料夾,把當中的gtkrc檔案 overwrite
至GIMP下的"\App\gimp\etc\gtk-2.0"資料夾即可。
2. 有部份的Theme需要用上專屬的engines dll檔,如果有的話,把它放去GIMP下的"\App\gimp\lib\gtk-2.0\2.10.0\engines"就可以。
其實這個替換方法,我不知道是否正確,但至少做到想要的效果就算了。


GIMP 2.7.3 Portable
http://portableapps.com/apps/graphics_pictures/gimp_portable#test
GIMP – Scissors Select Tool (Magnetic lasso Photoshop) – How to make a cut out/render

2011年8月26日星期五

HP TouchPad 網上賣出事端,全城插爆!

哈,我自己都係其中一個,$780一部16GB,當係上網又好,玩下都好,真係幾吸引,但係我自己一樣由9:00am 用Firefox reload,load到9:30am都未有一次成功load到一隻字出o黎。
就連高登仔都未有任何一個人話買到,至少如果真係Checkout成功,貼個ScreenShot既都冇。
睇完下文,我更相信內裡係黑箱作業,不過其實一部未代Netbook都係$2000樓下,又未至於真係咁走寶。

詳細請見文 : http://www.eprice.com.hk/mobile/talk/4325/43094/

2011年8月23日星期二

Firefox / IE / Chrome再加速 - Ram Disk & Cache

其實現在的Browser配合當今處理器的情況下,在呈現網頁或處理Javascript都已經綽綽有餘。
但總有一些周邊可以再調整一下,讓瀏覽速度再加速。

本身Cache是一個很好的機制,直接引用已下載的物件,不用再另外花時間下載,但就Firefox 6的環境下,需要載入的Cache越多,對硬碟的讀取就越多;同樣情況不存在的項目又要轉存成Cache,在這個對硬碟拉扯動作,同時開多個Tab的話,情況可想而知。

把Browser的Cache放在RamDisk,就可以減低以上的情況。
RamDisk其實都是很舊的技術,網上教學亦很多,但似乎又未見大部份人都有活用,所以我再寫多一篇希望更多人受惠。

現在介紹一款免費軟件是可以在32Bit或64Bit Windows下建立RamDisk的,名字叫Dataram RAMDisk
這款軟件雖然免費,但最大可以建立4GB的RamDisk,一般都很夠用。

RamDisk顧名思義就是把Ram分割出成一個Drive,關機後,所有資料消失,所以並不適合放任何需要留存的資料。
某程度上這是違背Cache的功用,但實際使用上,的確是比放在硬碟好很多,至少只是第一次需要下載,但之後直到關機前,你都可以感受飛快速度。

下載Dataram RAMDisk後,使用上十分簡單。
在程式集打開RAMDisk Configuration Utility,Disk Size較做512MB已經十分足夠。足夠讓我一整天不關機,同時使用IE9/Firefox6。
所以先設定512MB吧,真的不夠,之後再修改。格式設定為FAT32就可以。
緊記要File -> Save Settings,否則下次開機不會自動建立一樣的RamDisk,按下[Start RamDisk],大功告成,就是這麼簡單。
與此同時,去[我的電腦],應該會多少一個Drive。



另外軟件有一個很貼心的功能,在[Load and Save]部份,大家可以設定為
每次關機前,把RamDisk的檔案儲存在一個地方,而同樣地,每次開機時,把檔案回復至RamDisk。
但由於我們是用於Cache方面,所以暫時實在沒必要做這個動作。



之後就把各Browser的Cache轉移到RamDisk了!

FireFox :
1. 在網址列輸入 about:config , 按Enter.
2. 「右鍵」-->「新增」-->「字串」,名稱輸入browser.cache.disk.parent_directory
3. 數值輸入你的RamDisk,例如 "E:\"
4. 確定後,重新開啟Firefox。
5. 進你原先的Firefox安裝目錄,去profile/cache資料夾,把所有舊有Cache刪除即可。
IE9:
1. 工具->網際網絡選項->一般->瀏覽歷程記錄
2. 按[設定]
3. 按[移動資料夾]
4. 選擇你的RamDisk,再按確定。
5. Windows會要求你先登出,再登入即可。
Google Chrome:
1. 在Chrome的ShortCut(如程式集上的,或桌面上的)按Right Click->內容
2. 在目標一欄最後加上" --disk-cache-dir="E:\"
3. 按確定,重新開啟就完成。
4. 跟Firefox一樣可以前往自己的profile資料夾,把Cache刪除掉節省空間。

2011年8月12日星期五

著名組織Anonymous宣佈將於2011年11月5日攻擊facebook

等左Facebook收檔既日子好耐



Operation Facebook

DATE: November 5, 2011.
TARGET: https://facebook.com

Press:
Twitter : https://twitter.com/OP_Facebook
http://piratepad.net/YCPcpwrl09
Irc.Anonops.Li #OpFaceBook
Message:

Attention citizens of the world,

We wish to get your attention, hoping you heed the warnings as follows:
Your medium of communication you all so dearly adore will be destroyed. If you are a willing hacktivist or a guy who just wants to protect the freedom of information then join the cause and kill facebook for the sake of your own privacy.

Facebook has been selling information to government agencies and giving clandestine access to information security firms so that they can spy on people from all around the world. Some of these so-called whitehat infosec firms are working for authoritarian governments, such as those of Egypt and Syria.

Everything you do on Facebook stays on Facebook regardless of your “privacy” settings, and deleting your account is impossible, even if you “delete” your account, all your personal info stays on Facebook and can be recovered at any time. Changing the privacy settings to make your Facebook account more “private” is also a delusion. Facebook knows more about you than your family.

You cannot hide from the reality in which you, the people of the internet, live in. Facebook is the opposite of the Antisec cause. You are not safe from them nor from any government. One day you will look back on this and realise what we have done here is right, you will thank the rulers of the internet, we are not harming you but saving you.

The riots are underway. It is not a battle over the future of privacy and publicity. It is a battle for choice and informed consent. It’s unfolding because people are being raped, tickled, molested, and confused into doing things where they don’t understand the consequences. Facebook keeps saying that it gives users choices, but that is completely false. It gives users the illusion of and hides the details away from them “for their own good” while they then make millions off of you. When a service is “free,” it really means they’re making money off of you and your information.

Think for a while and prepare for a day that will go down in history. November 5 2011, #opfacebook . Engaged.

This is our world now. We exist without nationality, without religious bias. We have the right to not be surveilled, not be stalked, and not be used for profit. We have the right to not live as slaves.

We are anonymous
We are legion
We do not forgive
We do not forget
Expect us

[轉]IT業人才青黃不接 七成公司加薪逾4%

節錄於AM730 (2011年08月11日)
http://www.am730.com.hk/article.php?article=68670&d=1547

人類生活與互聯網愈來愈密不可分,如何令有關服務精益求精,有賴資訊科技人員辛勤工作,一項調查發現,近八成受訪機構的僱員於本年度獲加薪,

而九成獲聘的應屆大學畢業生入職薪酬逾1萬元。學會稱反映香港IT業前景理想,但行內卻出現青黃不接。

香港電腦學會於7月訪問了43間公營和私營機構,調查結果顯示,近八成受訪機構的IT部門員工於本年度獲加薪,其中七成僱員加薪高於4%,近一成更高於10%。
至於應屆畢業生入職薪酬亦有增加,43%加1至3%,另有35%增4%或以上。逾半公司表示今年會再增聘應屆畢業生,九成入職薪酬高於一萬元,其中的25%入職薪酬為1.6萬元。

香港電腦學會副會長(人才培育)梁建文(圖)指出,資訊科技日受重視,各行業對IT人才需求不斷增加,但選修IT的大學生人數卻減少,行內出現青黃不接,特別近兩、三年公司招聘人手困難,業界唯有加薪留人。

他解釋,自科網股熱潮爆破後,家長和學生都對IT業的前景不感樂觀,令選修IT的學生顯著減少,質素亦大不如前。他希望藉著今次調查,讓家長和學生了解行業的發展潛力和就業前景。
另外,香港電腦學會有意於明年2月舉辦IT業招聘會,鼓勵更多年輕人考慮投身該行業。

2011年8月1日星期一

失敗的網絡營商手法

今天封鎖了一個IP訪問權和把一個Domain放進電郵的黑名單內。

第一個是wikiblog.hk
不過知道各Blogger近期是否有留意到自己的Blog經常都有被這個wikiblog的網站Pingback?
一開始我都沒有太介懷,有人引用自己的文章是正面的事。
可惜這個wikiblog是用一隻機械人程式進行pingback,我單近這個月已經收到不下一百次pingback,煩得很。

WHOIS後,原來又是大陸人的屎橋,左抄抄右抄抄就想賺錢。
http://nameboy.com/whois.php?domaintld=wikiblog.hk

大家請封鎖它的IP : 184.82.250.202 或者 hostname : 184-82-250-202.static.hostnoc.net

第二個是sunesystem.com這間公司,以密集式發電郵根本不是有效而且令人討厭的手法。
我是客的話都絕對不會找這間用三下流推廣手法的公司幫我做事。
一個月少則兩三封,多則五六封。所謂eMarking就是不停的Spam,劣!
近期這間公司又以e-Marketing-Services.Net的Domain狂發Spam,它們以為轉Domain就不會被Gmail/Hotmail等等視為垃圾郵件? 未免太天真了吧? 雖然現在它們已經自動轉去Gmail的垃圾郵件,但不得不公開譴責。

2011年7月27日星期三

Free Web OCR & PDF Split/Merge Online

剛剛清理Bookmark時,發現一個實用工具網。
這個是Web版本的OCR,而且免費免註冊免Email。

http://www.sciweavers.org/free-online-ocr

第一眼見到說支援繁體中文,其實我沒有太大信心,我隨意在Google上找一張通告

出來的結果又幾令我滿意。



其實這個網站還有很多好用的工具,例如
PDF Split/Merge
http://www.sciweavers.org/free-online-pdf-split
http://www.sciweavers.org/free-online-pdf-merge
Web ScreenShot
http://www.sciweavers.org/free-online-web-to-image
還有香港人最鐘意的表情符號製作機
http://www.sciweavers.org/i2symbol

2011年7月21日星期四

齊來把IDE換黑底!

作為職業的電腦人員,一天到黑對住個Mon,大家的眼睛都會很累的,但Programmer就更甚,對住密密麻麻的Code,可為很不好受。
近年我自己都開始意識到把IDE的顏色轉為暗淡,放工時,眼睛的確沒有那麼累。

所以大家都跟我一樣把Eclipse和Visual Studio的Color Theme換去吧。

Visual Studio : Schemes | Studio Styles
Eclipse: Eclipse Color Themes


我的PHP IDE選擇 - PDT 3.0 & Aptana Studio 3

早前寫了一篇文說我對Aptana Studio 3.0.2很失望,是的,直到昨天都是一樣。
但今天Aptana出了新版本3.0.3,就版本號,理應是小更新,但Aptana一個小版號,所Fix的Bug是十分多,看看Release Notes就知道了。

修正了幾個很重要的Bug :
  1. PHP content assist for build-in constants and static
  2. No autocomplete proposals in incomplete HTML tags
  3. Add support for -webkit- properties in css content assist
  4. -moz- properties are not inserted correctly in CSS content assist
  5. PHP content assist for build-in constants and static
  6. No autocomplete proposals in incomplete HTML tags
  7. PHP Function Parameter/Argument Hinting

再次抱有希望測試一下,又真的改良很多。
之前軟件內很多奇怪的事都沒有再出現,HTML/CSS/JS/PHP的Code-Assist亦正常很多了。

而Eclipse又在上個月出了3.7版本(Indigo),但PDT的工作進度緩慢下,被Eclipse官方下架了。
但基於好奇心,我依照這裡的方法安裝了Eclipse 3.7 + PDT 3.0 milestones,實行互相比較一下。

HTML方面,Aptana始終都做得比較好,有Browser的兼容性指示。


Javascript & CSS方面
Aptana支援-moz和-webkit的,但PDT的就沒有了。而Javascript方面,兩者其實差不多,但Aptana在解釋部份比較詳細,Aptana又再加分。



PHP方面
PDT 3.0就做得好過Aptana,最主要是Aptana 3.0.3版都是依賴按"ALT+/"去叫出Code-Assist,但官方已預計3.0.4版會改成與PDT一樣

我沒有做很詳細的比較,只是針對我以前對Aptana的不滿去試用一下。
始終兩者的含Bug量都是能夠嚇死人,可見:
PDT Bug List
Aptana Bug List

所以暫時不用太計較,反正今次沒有的,下一版就可能會有,但我認為除PDT之外,Aptana終於令我有返信心,期待下一版本。

Aptana Studio 3
http://aptana.com/
另有官方Portable版本,在官網上沒有顯示出來的,把以下連結的X轉成版號就可以了。
例如
http://download.aptana.com/studio3/standalone/3.X.X/win/Aptana_Studio_3_Setup_Win_3.X.X.zip
轉成
http://download.aptana.com/studio3/standalone/3.0.3/win/Aptana_Studio_3_Setup_Win_3.0.3.zip

其實我試過很多不同的PHP IDE,商業的也有,如果是好的IDE,我都不介意花錢去買,但很可惜,收費的並不是好過Free的很多。
例如
PHP Designer,軟件本身有很多不必要的文字功能,3rd-party的軟件呼叫項目,Syntax highlight著色又不好。
PHPEdit,只是PHP Code-Assist做得好,但連HTML/JS/CSS的Code-Assist都沒有,雖然介面是最漂亮(用Office 2010 UI),但最慢的又是它。
Kodomo IDE - 是不錯的,但價錢是最貴,免費版本的又不可Debug。
而出名的NetBeans,我覺得是最差的一個,無論介面,功能上都是差。

反而最近一年才冒起的PHP Storm,我就認為是最完美的一個,應有的,都有了。

不是吹牛,這個PHP IDE測試平台,我玩了幾天。

2011年7月18日星期一

ASP.NET MVC 3 簡體中文/繁體中文 參考文件

本來MSDN Document有多國語系一向都不足為奇,但這次ASP.NET MVC3的是人工翻譯,並不是機器翻譯,所以值得提示一下。

Chinese (Simplified): http://msdn.microsoft.com/zh-cn/library/gg416514(VS.98).aspx
Chinese (Traditional) http://msdn.microsoft.com/zh-tw/library/gg416514(VS.98).aspx

網頁設計之殤

正所謂 - 有人辭官歸故里,有人漏夜趕科場。
自我開Blog來,都記得潑過幾次Web Designer冷水。有人很多人中途轉行,但亦有很多新畢業生滿懷大志投入工作。

事實上在我心目中Web Design屬IT行業多過設計行業,IT業的步伐是很快,每幾年又一新境象,但在香港的環境下,論職位,人工升幅,晉升機會,Web Designer實在是比其他職位的來得較慢。如果是單一技能的話,例如以為能夠一個Photoshop + 一個Dreamweaver打天下,就更值得擔心。
不是要抹殺Web Designer的功夫,但很可惜我們都知道事實如此。

其實外國都是如此,剛剛就睇到一篇國外Blog文,文中所說的行業生態,都幾似香港。

Why we gave up web design after 10 successful years

http://blog.silktide.com/2011/07/why-we-gave-up-web-design-after-10-successful-years/

2011年7月14日星期四

Tenda W150M 不錯!

這是我一直都在想買的東西,就是把酒店/公司的Lan線以Switch方式分享出來,但又是Wifi。

就我自己經常出入深圳的酒店,都是開通電腦要錢,但本身房間的Lan線是可以免費使用的。
有時房間亦未必有電腦,所以如果有一個東西可以把房間的LAN線轉為Wifi給手機上網就太好了。

原來早在一年多前已經有相關產品。

看過幾款這類Portable Wifi AP,平價的有Tenda W150MTP-Link TL-WR700N,市價都是HKD$200左右,在淘寶買的話,HKD$130就有了。



最後都是選擇了Tenda W150M,因為那個電源插坐是外接USB線,跟我的SE Xperia X8一樣,換句話說,我可以省回帶手機的充電器。
上網上到沒電時,可以用Tenda的那個接駁X8的USB線充電。其實Tenda的可以用USB做電源,但這個設計實際上有點無聊,假如我外出的地方有電腦的話,又何必要再接上AP或Router?

Tenda W150M有5種模式 (AP, Client+AP, WDS+AP, WISP, wireless router),基本上都是用AP功能喇。
網上很多人都說這個東西很難Config,其實我覺得是一點難度都沒有,以下是我小小心得。

1. W150M的Admin Panel IP是192.168.2.1,ID/Password : admin/admin。(機背有寫)
2. 接實Reset制7秒等閃燈全滅才算是Reset。
3. 進入Admin Panel有兩種方法:
  • 直接把Lan線連電腦和W150M,因為W150M那個Lan口本身是WAN亦是LAN,所以不用奇怪為什麼這樣都可以進入192.168.2.1。
  • 有時第一種方法會失效,可以把W150M連接到你的Router,再由W150M拉一條Lan線插進你的電腦,這個時候W150M會變成一個Switch角式,你的Windows應該都可以上網,但你會發現進不到192.168.2.1。所以在Windows中的Network Setting把DHCP關閉,再自訂IP做192.168.2.2,Subnet Mask 255.255.255.0,Default Gateway 192.168.2.1,然後應該就可以進入了。

4. 千萬不要好像我一樣,手多把Lan IP轉做Dynamic IP,因為你Apply後會進不到Admin Panel,要Reset後才回復正常。
20110707_202906_000-t.jpg

5. W150M預設Wifi是Open的,沒有任何密碼,緊記要設定。模式選Mixed WPA/WPA2就可以給Android手機用了。
(iPhone我不知道...)
20110707_202846_000-t.jpg

6. 我試過TP-Link Router->Level-One Switch->Tenda W150M,這種架構都可以用到Wifi AP功能的。

大概就是這樣,真怪自己太遲才知道原來有這樣的好物!