Ideamarket

[Web2.0] aNobii 線上書架介紹

Posted by: cigdemchen on: 2009/03/10

前兩天突然有朋友 msn 問我:anobii怎麼用?有什麼好玩的? 那麼就來分享一下anobii 網路書架的樂趣…

Anobii是什麼? www.anobii.com 是一個線上書架,對書痴書迷來說,是一個非常好用的線上工具,而且可以真的達到以書會友的功能。

1. 支援最多語系:目前共有11個語系,是我用過可以找到最多華文書的線上書架。國外知名的 GoodReadsShelfariLibraryThing 大都只提供英文,德文等,就算是把中文書的ISBN打進去,也不見得找的到書,只有aNobii 找的中文書,到所以aNobii真的是中文書迷的一大福音。

2. 整理書架:購買日期/地點/價格,閱讀進度,Tag標籤,作者,語言分類… 可以一清二楚的把在書架上、躺在地上、堆在床上,疊在客廳茶几,圖書館借來的書,都詳細的記錄下來,了解自己到底有收藏了多少的書,大大的滿足了書痴坐擁書城的成就感。

3. 讀書心得交流:讀書心得,喜愛度星等,閱讀日期,再讀一次的時間 (re-read):

  • 看完書之後,可以打個喜愛程度的星等,真的不喜歡也可以就給”一顆星”(OS:我就真的有給過幾本書一顆星,而且覺得書商把該書捧得太過over 的好,而引起友鄰的不滿;但看書嘛,喜好本來就是主觀的事,互相交流很好,又何必太在乎別人喜不喜歡呢?),如果有空還可以蹋馬上撰寫讀後心得。
  • 還沒有買的書,或是有興趣要買的書,我也都會先看看其他書友的讀後心得及評價,來評估要不要購買。就是因為這樣,所以wishlist的數量不斷增長,只能感慨”好書太多時間太少”。

4. 以書會友:Friend, Neighbor,Group,ShoutOut(留言板),RSS,Message(訊息) :

  • 從想看的書或是已經有的書,或看到其他品味的書架,可以把該書友加入鄰居/好友中,也可以直接訂閱RSS,定期看看好友書架的藏書;
  • 如果想直接交流,可以留言或發訊息。
  • Group:書友自己組成的群組,有各式各樣的題目,有興趣的話都可以自由加入。

5. 延伸閱讀:wishlist(欲購書單),explore :

  • 加入aNobii後,最大的麻煩就是成為書痴的程度愈來愈嚴重,不僅看到跟自己閱讀種類相似的書友,更可以針對不同種類的書,再找到更多可以讀的書目;我自從”蘋果橘子經濟學”還有”致命的均衡”之後,就毛起來對經濟類的書特別有興趣,也從其他有這些書的書架上,再找到了更多相似的書種,所以找到更多可以讀的書。
  • 在看書的同時,很多書的作者也會提到其他的書名,這時候再來找找這些書在anobii上相關資料,馬上又可以在wishlist上增加好多想買想看的書目(OS:真的很沒藥救…) 。
  • explore:anobii由每個人的書架資料,列出推薦的書目/標籤,並推薦一些鄰近的書店及人氣最高的書目。但我個人覺得直接查書名後,再從其他書架中去找,更能扒出更多自已感興趣的書…

6. 不同語系的書目:如果不止對中文書有興趣,打入英文,土耳其文,日文,德文…等,可以找到該語系的書架及書目,尤其對喜歡讀英文書的台灣書友,一般的書店很少提供英文的書單,而且原文書的上架速度也不及Amazon或 Barns and Nobles 快,所以我的英文書很多也是這樣找來的,找到後,再去各處尋二手書,或是網路交換(OS:我下次會再介紹好玩的”網路換書”網站),或是在網上購買。

Web2.0 書友社群擴大的力量:我記得大約是在08年2月時開了anobii書架,那時資料庫裡大概只有200多萬本書吧,現在已經高達1000多萬了,如果找工讀生來key這些資料,會花掉多少錢呢?大家計算一下就會知道;但這些全都是書友自動自發的貢獻的,這就是web2.0的實証之一。

介紹幾個我個人很喜歡的aNobii書架推薦給大家:

我的書架:Watermelon!

原文書架:selinechenIcedreamTracy W(書評寫的很棒)

中文閱讀:旺財小美女syndromebook686(淡水的有河書店),香璞bookseekerWhoseBooks(胡思二手書店),Sisyphe戀戀風塵發哥哥Jackson Chang藍色的希臘(商管類的書評很多),ferry(日本文學)

Internet 技術:TimbuktuCrabihower

在Part1文章已成功的在DNN4.x使用jQuery,已可以使用jQuery的語法,再來我們要用WebServices的方式實踐ClientAPI。

首先我們得先確認web.config內是否設定下列項目(DNN4.x因為有使用MS的ClientAPI,皆已設定下列數值)

<httpHandlers>
   <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=********************" />
   <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=********************"  />
   <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=********************"  validate="false" />
</httpHandlers>

以上確認完畢後,撰寫WebServices部分,需使用 System.Web.Script.Services,並宣告class為ScriptService(可讓javascript呼叫此函式),webservice程式碼如下:

// WebServices/CrabWS.asmx
...
using System.Web.Script.Services;
...
namespace Crab.WS
{
   [WebService(Namespace = "Crab.WS")]
   [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
   [ScriptService]
   public class UserService
   {
      [WebMethod]
      public string getName()
      {
         return "Crab Lin";
      }
      [WebMethod]
      public bool NameEquals(string nameA, string nameB)
      {
          return nameA.Equals(nameB);
      }
   }
}

在PageLoad的部分透過DotNetNuke.Framework.AJAX的函式,新增Webservices ClientAPI(也可在Part1時已建立的 SiteModuleBase.cs裡新增AjaxRegisterServices的函式,方便其他模組使用時重覆宣告)

//OnPageLoad
protected void Page_Load(System.Object sender, System.EventArgs e)
{
   ...
   if (DotNetNuke.Framework.AJAX.IsInstalled())
   {
      DotNetNuke.Framework.AJAX.RegisterScriptManager();
   }
   // Create a reference to the Script Manager
   ScriptManager objScriptManager = ScriptManager.GetCurrent(this.Page);
   objScriptManager.EnablePageMethods = true;
   ServiceReference objServiceReference = new ServiceReference();
   objServiceReference.Path = @"WebService/CrabWS.asmx";
   objServiceReference.InlineScript = true;
   objScriptManager.Services.Add(objServiceReference);
}

在模組載入時,會同時register webservices funcation,即可在javascript用namespace的方式取用webservices function,如下列方式使用:

<script language="javascript">
   jQuery(document).ready(function(){
      //無參數
      Crab.WS.UserService.getName(function(userName){
         alert(userName);
      });
      //兩個參數
      Crab.WS.UserService.NameEquals("Crab", "Max", funcation(IsEqual){
         alert(IsEqual);
      });
   });
});
</script>

重點: 呼叫WS function最後一個參數值為AjaxSuccessFunction,將回傳結果交給一個javascript function接值處理。

同系列文章:
Part.1 成功使用jQuery
Part.3 完成AJAX功能

DotNetNuke 5.x 版本已可以在Host Setting使用jQuery,但是4.x的website還是無法使用jQuery。

因為習慣使用jQuery方便的javascript取用元件方式,及強大的opensource 社群的支援,並且website某些模組尚未測試5.x的版本,無法使用5.x的版本,暫時須用4.x的版本重新設計新的模組使用jQuery時,就必須改寫部分程式碼實踐。

基於並非整個website使用jQuery,但又需在DNN模組啟用時選擇性載入jQuery.js,所以必須新建一個class(筆者此處新建class名稱為SiteModuleBase)參照PortalModuleBase,新建立的模組原本參照PortalModuleBase改為參照SiteModuleBase,則如以下程式:

using DotNetNuke.Entities.Modules;
// use jQuery ModuleBase
public class SiteModuleBase : PortalModuleBase
{
   public SiteModuleBase()
   {}
   override void OnLoad(EventArgs e)
   {
      this.registerjQuery();
   }
   private void registerjQuery(){...}
}

首先須了解 DNN 有自己核心的ClientAPI(如 dnn.js, dnncore.js…之類),所以要用jquery.js又不想要更改DNN核心javascript,須使用jQuery內建的function「noConflict()」啟用jQuery,registerjQuery Function 如下:

public registerjQuery()
{
   string jQueryPath = "js/jQuery.js";
   if (!Page.ClientScript.IsClientScriptIncludeRegistered("jQuery"))
   {
      Page.ClientScript.RegisterClientScriptInclude(
         "jQuery",
         jQueryPath);
      Page.ClientScript.RegisterClientScriptBlock(
         this.GetType(),
         "jQuerynoConflict",
         "<script type=\"text/javascript\" language=\"javascript\">jQuery.noConflict();</script>");
   }
}

建立class後,將新建的DNN模組參照此class(如下列程式),在啟動時即可使用jQuery的函式及jQuery Plugins。

//原先Module參照設定
partial class ViewDNNModule : PortalModuleBase, IActionable
{...}
//修改為以下參照設定
partial class ViewDNNModule : SiteModuleBase, IActionable
{...}


ps.1:因為DNN底層也有使用微軟的ClientAPI,須避免使用「$(…)」取用參數,需使用「jQuery(…)」。
ps.2:若要加入其他的jQuery Plugins建置至模組內,為了避免重覆加入*.js,建議在SiteModuleBase裡撰寫register Javascript(如下列)。

public class SiteModuleBase : PortalModuleBase
{
   …
   registerjQuery(){…}
   registerjQueryUI(){…}
   registerjQueryGrid(){…}
   registerjQueryTextArea(){…}
}

同系列文章:
Part.2 使用WebServices實踐ClientAPI
Part.3 完成AJAX功能

利用SchemaSpy產生圖像化Database Schema圖表

Posted by: maxchiu on: 2009/02/01

最近因為工作上的需要,需提供資料庫相關的設計資料及圖表。過去,大多使用Microsoft Office Visio來製作,但在查閱便利與友善性的考量尚,產生類似MSDN風格的HTML格式圖表,會是較佳的選擇。是故,便著手在網路上搜尋相關的工具,經一番研究後,SchemaSpy正能符合我當下的需求,且基於是開源專案,軟體授權這筆費用也省了下來。以下,大致説明一下安裝的四個步驟。

步驟一:

首先,因為SchemaSpy是個使用Java開發的工具,所以需要先下載安裝Java 5或是更新的版本

步驟二:

接下來下載SchemaSpy至您指定的目錄,下載的檔案格式為一個jar檔,無須安裝,官網網址為http://schemaspy.sourceforge.net/

步驟三:

由於產生的資料庫圖表,是透過Graphviz產生圖檔以及由DOT Language描述其路徑的*.dot檔,所以請下載安裝,安裝完成後請將方才安裝路徑加入系統路徑,方式如下述:

  • 進入控制台
  • 點選【進階】(Advanced) > 在該選項中點選【環境變數】(Environment Variables) ,如【圖一】所示。
  • 在彈出的環境變數視窗中,位於下方的【系統變數】裡,找到名稱為”PATH”的系統變數,並點擊下方的【編輯】鍵,如【圖二】所示。
  • Graphviz執行檔的路徑,即把路徑指到剛才安裝路徑下一個名為bin的檔案夾,格式如(此處以安裝Graphviz 2.21版於C磁碟下的 Program Files目錄情況為例說明):”C:\Program Files\Graphviz 2.21\bin”,可參考【圖三】所示。

步驟四:

最後由於SchemaSpy是透過JDBC與資料庫連結。是故,必須針對您目前開發環境所使用的資料庫,來決定下載的driver。以下則針對Microsoft SQL Server 2005為例說明。

  • 首先至微軟網站下載Microsoft SQL Server 2005 JDBC Driver。在此建議下載SQL Server 2005 JDBC Driver 1.0版 或是 1.1版,因為在筆者安裝測試過程中,SQL Server 2005 JDBC 1.2版及 2.0版都發生過異常,以致無法產生圖表。是故,接下來的安裝將以1.1版進行說明。
  • 下載的執行檔會有中文或英文之分,下載時請注意,如以1.1英文版說明:sqljdbc_1.1.1501.101_enu.exe。接下來解壓縮至C磁碟的Program Files目錄下,原因是此為SchemaSpy的初始路徑設定,此處需要注意的是,路徑中包含JDBC Driver所屬語系,以1.1英文版為例說明如:C:/Program Files/Microsoft SQL Server 2005 JDBC Driver/sqljdbc_1.1/enu/sqljdbc.jar。另外,如果下載的是中文版,將發生找不到driver的錯誤訊息,原因出在中文版的路徑是C:/Program Files/Microsoft SQL Server 2005 JDBC Driver/sqljdbc_1.1/cht/sqljdbc.jar 所致,如【圖四】所示。

    此時,有兩種方式可以解決,第一、將SchemaSpy.jar檔中SQL Server 2005的屬性檔(.properties)裡的driverPath做修正即可。 第二、在執行SchemaSpy時使用 -dp參數覆蓋屬性檔設定,我先就第一種方式說明,第二種解決方法留待完成設定後,進行測試時說明。

  • 以下使用SQL Server 2005 JDBC Driver 1.1說明:schemaSpy_4.1.1.jar\net\sourceforge\schemaspy\dbTypes\mssql05.properties,用一般的文書編輯軟體如小作家開啓,找到名為driverPath的屬性修改即可,如【圖五】所示。
  • 最後,同步驟三,需將SQL Server 2005 JDBC Driver安裝路徑新增到【環境變數】中,唯一不同的是,此路徑需新增在”CLASSPATH”,如【圖六】所示。

上述所有的安裝步驟完成後,再來就是進行實際的測試,以下附上語法格式說明,如欲了解更為詳盡的參數說明,可逕至SchemaSpy官網:

java -jar schemaSpy.jar -t mssql05 -db <資料庫名稱> -host <Ip 位址/主機名稱> -s dbo -port 1433 -u <資料庫使用者名稱> -p <資料庫使用者密碼> -o <輸出目錄名稱>

如果需要覆寫SQL Server 2005 JDBC Driver路徑,也就是步驟四中提到的第二種解解方法,則需在加入-dp參數,語法格式如下:

java -jar schemaSpy.jar -t mssql05 -db <資料庫名稱> -host <Ip 位址/主機名稱> -s dbo -port 1433 -u <資料庫使用者名稱> -p <資料庫使用者密碼> -o <輸出目錄名稱> -dp  <JDBC Driver完整路徑,包含driver檔名,可參照【圖五】中有關driverPath的格式>

範例語法:

java -jar schemaSpy_4.1.1.jar -t mssql05 -db Northwind -host 127.0.0.1 -s dbo -port 1433 -u tester -p test543 -o library

P.S. 以上語法有點繁複,每次輸入似乎沒有效率,筆者建議可產生一個批次檔,使用上將方便許多。另外,可參考SchemaSpy官網所提供的結果範例,以上。

About Idea Market

Posted by: cigdemchen on: 2009/01/22

Idea Market 裡是一群對網路充滿想像力,並且又有能力實現的工程師跟PM所組成的。取名為idea Market,是想像到傳統市集裡人聲鼎沸的叫賣聲,大家為了想要售出及買入的物品大聲的對話喊價,你一言我一語的好不熱鬧。

我們也要讓這裡成為各式各樣想法發表跟發酵的地方,自由自在的盡情發揮,熱絡交換意見的想法市集。把對程式及網路的熱情,逐一化成有形的資產,跟這個共筆部落格裡和大家分享!! :)

cigdemchen@youthcafe