2013年3月18日星期一

最接近Google Reader代替品 - Feedly & Netvibes

感覺上,這次Google Reader關閉,引起的反應比上次關閉iGoogle來得更大。
這幾天,搜尋"google reader alternative",無時無刻都有文章發表介紹代替品。

綜合各家意見,暫時有兩個方案是比較推薦的。
Netvibes
我早約半年前,找iGoogle代替品時已經開始使用,其實個人化部份還是一般,Widgets不夠多,不夠本地化。
不過好像我單純用做預覽Gmail/Hotmail/Facebook Feed還是不錯的。



不過RSS Reader部份就有點弱,雖然一般功能如"Mark all as read",不同檢視模式都有,但重要的分類資料夾就沒有。
但還是很順手,很簡潔的介面,對於訂閱數量不多的人是適合使用的。
Netvibes亦有很好的自訂功能,數量上千的佈景主題給你選擇。


Feedly
備受台灣和國外的Blogger推薦的代替品,亦是我最終的選擇。
幾日前Google宣佈消息後,Feedly應該是第一間出來抽水的公司了,發佈了搬家的方法。
Transitioning from Google Reader to feedly
幾日後,已經有500000人由Google搬至Feedly。
More than 500,000 Google Reader users have joined feedly over the last 48 hours.

Feedly的使用方法有點特別,任你如何反轉官網都找不到Register頁面,原來Feedly需要使用Firefox或Chrome配合Extension使用。安裝後,需要用你的Google Account登入,如果你本身是Google Reader使用,就會自動就轉移。
至於IE用家....請看Can I install Feedly on Internet Explorer?

登入後,就會在主畫面見到熟識的訂閱了。
若大家跟我一樣認為預設顏色(淺灰配白....)很難看清楚,可以去左下角"THEMES"調較一下。
若想好像Google Reader般以一行一行方式檢視,亦可以在"PREFERENCES" - Default View轉至Condensed。


不過我依然比較喜歡GReader的密雜式顯示,Feedly的日期,標題字體太過霸位置了。
暫時先用著,因為Feedly跟GReader是互Sync的,可以先嘗試習慣一下。
另外Digg亦開始開發RSS Reader了,期待。

其實Google說RSS已式微,但用家都以行動表示他們還需要,反彈力亦很大,不知道Google有沒有後悔呢?

參考運結:
Easily migrate from Google Reader to Netvibes
Digg - We're Building A Reader
Feedly adds 500K new users on Google's move to kill Reader
8 Google Reader alternatives
Google Reader Is Shutting Down; Here Are the Best Alternatives

2013年3月14日星期四

EntityFramework的DbUpdateConcurrencyException與OptimisticConcurrencyException的解析和解決辦法

這幾天,工作上需要製作一個Data Grid型式的Edit Form做CRUD
技術上使用ASP.NET MVC4 / EntityFramework 5.0 / Scaffolding,因為一個小小低級錯誤,導致出現DbUpdateConcurrencyException,了解這個錯誤後,在此講解一下,順道亦介紹一下相關的OptimisticConcurrencyException

DbUpdateConcurrencyException
這是EF 5.0新增的Exception,如圖所示,這通常會出現在SaveChanges()的時候。

Exception Message :
中文 :
存放區更新、插入或刪除陳述式影響到非預期數目的資料列 (0)。這些實體載入之後可能被修改或刪除了。請重新整理 ObjectStateManager 實體。
英文 :
Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.

原因 :
就如Exception Message所說,這個錯誤會出現在INSERT / UPDATE / DELETE,原因是出現非預期的Affected Row數目。
那我們就要想一想什麼原因會導致Affected Row是 "0"。

1. 遺失Primary Key
以我工作上的例子,MVC4 Scaffolding建立的View都是含@model keyword的strongly-typed view
理論上你按Submit ,Post form後,ActionResult應該都會做Model-Binding

但有時候,因為一些人為錯誤,就會導致接收的Model數值不完整。
例如我這個情況,把DropDownList設定disabled,Post form後,那就沒有CompanyID了。出現"0"是因為CompanyID是int Type預設值而已。
那EF 跟本找不到符合的紀錄,固然亦UPDATE不能,所以就回報"0"Rows了。



這情況亦會出現在UPDATE和INSERT的場景上,所以要多加注意。
但有時我們真的需要把DropDownList / TextBox等等設定為Disabled,那怎麼辦?
那跟ASP.NET Webforms時一樣,加上一個HiddenField吧。
Razor 方法:
@Html.HiddenFor(model => model.CompanyID)

2. 同時Parallel作業
這就是所謂的並行處理(Concurrency)。
舉一個簡單的例子,Ken開啟了某客戶的Edit Form,想把電話修改一下,開啟後,Ken離開了崗位,但Edit Form依然開著。
幾分鐘後,Cammy把這位客戶的資料刪除。
當Ken 回到崗位後,修改了客戶的電話,按儲存。
就會出現DbUpdateConcurrencyException了。
原因很明顯就是找不到紀錄。

OptimisticConcurrencyException
跟上面的同時Parallel作業很相似,但OptimisticConcurrencyException只會發生在UPDATE的時候。
兩位使用者同時修改同一項目,Ken更新電話,Cammy更新地址,只要數值正確,雙方都可以進行儲存。
只是如果Ken和Cammy都是更新電話的話,就要Handle OptimisticConcurrencyException這個Exception進行Resolve Conflicts。
可以看看下列兩條連結的做法,是不簡單的。

不過由此可以見到EF發展到5.0版本已經是一個功能強大,安全的Framework。

Handling Concurrency with the Entity Framework in an ASP.NET MVC Application
Handling Concurrency with the Entity Framework 4.0 in an ASP.NET Web Application

Google將於7月1日 關閉Google Reader服務

就像去年關掉 iGoogle 的大掃除一樣,Google 今年也開出了一系列因為乏人問津,而將關閉的服務。除了 Google Reader 之外,還有另外七個服務將被關閉,讓自 2011 年以來被關閉的服務總數來到 70 個。Google 表示關閉 Google Reader 的原因是因為該 RSS 閱讀器的「式微(declined)」,而關閉後可以將更多的資源投入新產品的研發。和之前一樣,在 7 月 1 日關閉前,使用者可以用 Takeout 工具將個人資料下載下來。

其他狀況不佳,即將被關閉的服務,包括 Building Maker、Cloud Connect、Apps Script 的 GUI Builder、購物用的 Search API、CalDAV API、和 Blackberry 的 Google Voice App -- 後者 Google 建議可以用 HTML 5 版取代。最後一個,是 Google 最近收購的 Snapseed,將不再提供,或更新 PC/Mac 的桌上程式。

Google Reader 是 Google 在 2005 年啟用的服務,在那個部落格滿天飛的年代,基本上是整合 RSS 必備的工具。或這在一般使用者中或許只是個遙遠的回憶,但想必我們的讀者中還是有不少人在依靠著 Google Reader 在做資訊整合的工作。這麼一消失,要去哪裡找替代品可是一件很糟糕的問題啊...

Google 這個號稱春季大清洗對我來說是惡夢,上次已經殺掉iGoogle,今次再殺Google Reader,兩個都是我等同Gmail的用量。
這消息一出,Google搜尋在消息發佈後,一天內就有大量人找尋代替品,其實Google Reader和iGoogle一樣,不是沒有人用,還是有很多,只是對Google來說未夠多。
其實以Google的設備和財力,養多一兩個這樣的實用工具,有何困難?
賺不到錢就關閉服務,要是其他商業機構都無可厚非,但你是Google呀~~電腦業龍頭之一都這樣。

這令我擔心,既然Google認為Blog/RSS時代已過,那Blogger服務還可以捱多久?
Google下次又會殺掉什麼?

2013年3月12日星期二

五年前的E8400,風采依然!!!

現在我的電腦已經是4,5年前的,除了半年前換了張Radeon 6670顯示卡,其他都沒有升級過。
現在的配備是 :
依然是行得跑得,在Windows 7做Host的情況下,還可以跑多一個VirtualBox的Windows XP或uBuntu做VM。
遊戲方面,近期的Far Cry 3, Dead Space 3, DMC: Devil May Cry, Tomb Raider都是High Detail直到爆機。

網上都看到很多E8400 Fans跟我一樣,依然不捨得升級。
Mobile01 - E8400真的可以再戰好幾年

創業,寫手機遊戲程式,停一停,諗一諗...

手機Apps市場都是報喜不報憂,聽到的都是XYZ遊戲令A君一夜間成百萬富豪,一年內成矽谷新秀,三年後比某某NASDAQ主板公司收購等等消息。

但...寫Apps是否真的必勝?
我不認同亦不否定,但剛看到網絡上有過來人寫的文章,他們都是Solo的獨立開發者,工作就是寫(賣)Apps。
Apps的銷量就等同他們的收入。

激情過,努力過,當預見到事與願違時,應該及時斬纜,還是堅持獨守孤城呢?

想藉寫Apps創業的朋友,特別值得一看,從中可以啟發一下。
一個人獨立開發iPhone App的甘苦談…
一個人獨立開發iPhone App一年(半?)回顧
iPhone独立开发者没有神话,只有故事
一个80后独立开发者的话,依然没有奇迹,只有故事

Candy Crush Saga - King.com CEO - Riccardo Zacconi