2007年1月12日

          論劍歸來(一)

          應(yīng)朋友邀請,周六早從上海出發(fā)往杭州參加阿里巴巴網(wǎng)俠大會。同行四人,有銳道的macro chen、楊光(還是我?guī)煹埽⒁苿拥耐鮽バ瘢ㄌ亻L是linux和網(wǎng)絡(luò)安全,也是中國linux推廣的先驅(qū))。一路上,言談甚歡。老莊給我們訂的票,他一早腸胃有恙,仍然堅持把票送到火車站,之后去吊鹽水,下午又出現(xiàn)在會場。確實精神可嘉,建議阿里巴巴頒發(fā)“最佳精神獎”。

          到杭州已是中午,錯過了上午大會。下午Robbin進行Java技術(shù)展望和RoR實現(xiàn)REST的演講,既然是朋友,肯定是要捧場的。Robbin旁征博引,以其深厚的技術(shù)功底和對新技術(shù)的敏銳洞察贏得了聽眾。

          晚上一堆人去聚會,各路豪杰紛至:有阿里巴巴的,有自己創(chuàng)業(yè)的,有技術(shù)大牛,還有媒體(Infoq),出版社(博文的周總領(lǐng)3員大將赴會)。大家互換名片,認(rèn)識的不免寒暄幾句,不認(rèn)識的也很快就熟捻了,還不時有“原來你就是×××”的驚呼,原來網(wǎng)上就“互通心曲”,只是一直沒機會認(rèn)識罷了。

          席間觥籌交錯,具體內(nèi)容暫且不表,只說一件令我感受頗深之事。一個阿里巴巴的員工表現(xiàn)出對公司的無比忠誠,講起公司的獎懲制度,說是一個員工的績效不僅跟所在項目相關(guān),還與部門、其它部門甚至整個公司的業(yè)績相關(guān)。所以只要是對公司有利的事情,即使與自己現(xiàn)在的工作無關(guān),他們也會去做。按常理來說,這有點不公平,我只能努力做好自己的事情,而如果別人不努力,我就是白做。但如果大家都努力,又變成了共贏。

          這里讓我講一個簡單的博弈問題,就是“囚徒困境”。AB兩個同犯被抓,因為沒有其它任何證據(jù)和證人,只能讓2人分別交供。如果AB都矢口否認(rèn),那么兩人無罪釋放。如果A承認(rèn),B不承認(rèn);A是坦白從寬,判1年;B抗拒從嚴(yán),判5年,反之亦然。如果2人都承認(rèn),ok證據(jù)確鑿,各判2年。如果2人都是理性人,且沒有互通消息,按照博弈,每個人的最優(yōu)解就是承認(rèn),也就是各判2年。其實對2人真正有利的就是打死不承認(rèn)然后都無罪釋放,而這種狀態(tài)在理性人的假設(shè)下是很難實現(xiàn)的--除非有一個教父,一直灌輸他們不要出賣同伙。

          馬云就是這個“教父”!

          卡內(nèi)基有篇文章,我總結(jié)成一句話就是:用崇高的理想打動別人。據(jù)說馬云一直是以個人魅力及“創(chuàng)造中國電子商務(wù)的明天”類似的理想,激勵員工的。有了統(tǒng)一的企業(yè)文化,員工都不計較個人得失,努力奮進,最終企業(yè)和所有員工取得共贏,這絕對是擺脫“囚徒困境”的典型案例。

          話說回來,阿里巴巴能讓你感受到團隊的力量,一群精英在一塊做很有價值的事情,對每個人也是很好的鍛煉。個人認(rèn)為,如果有吃苦耐勞的打算,眼光放長遠(yuǎn)點,又沒有其它方面的束縛,阿里巴巴的確是不錯的選擇。(得向阿里巴巴收代言費,呵呵!)

          第二天聽了多場論道,主要是SAAS,搜索,分詞方面。結(jié)合阿里巴巴的戰(zhàn)略,我把幾點融合起來講一下。這個下篇再細(xì)細(xì)道來。

           

           

          posted @ 2007-05-21 20:35 pesome 閱讀(1138) | 評論 (1)編輯 收藏

          sitemesh的問題及解決

          再說 sitemesh 的問題,同樣是做 openfans 網(wǎng)摘功能出現(xiàn)的。做好了 IE 插件,有 fans 反饋說彈出頁面太大,這也難怪,用了 sitemesh head footer 都在頁面上,想縮小頁面,肯定得把 head footer 都去掉,做個干凈點的。既然用了 sitemesh 肯定是希望最方便的搞定這個,而不用動任何邏輯(包括頁面邏輯)。這個好辦,文檔里有說,通過在 sitemesh.xml 中增加

          < mapper

          ???????????
          class = " com.opensymphony.module.sitemesh.mapper.ParameterDecoratorMapper " >

          ???????????
          < param?name = " decorator.parameter " ?value = " decorator " ? />

          ???????????
          < param?name = " parameter.name " ?value = " confirm " ? />

          ???????????
          < param?name = " parameter.value " ?value = " true " ? />

          ???????
          </ mapper >

          就能搞定,這樣只需要使用參數(shù)如 saveSnippet.html?decorator=simple&confirm=true ,就能讓它使用指定的 decorator 。然后做一個去掉 head footer 只保留必要的 js css 引用的 simple.jsp 頁面,同時在 decorator.xml 中配

          < decorator?name = " simple " ?page = " simple.jsp " ></ decorator >

          就應(yīng)該可以搞定。

          但怎么測,就是不使用這個 simple decorator 。沒辦法,只好跟進 sitemesh 源碼中去調(diào)試,進入 ParameterDecoratorMapper 類,它繼承了 AbstractDecoratorMapper 類,然后有一個 init 方法一個 getDecorator 方法。各打一個斷點, init 方法在 tomcat 啟動就會執(zhí)行,也正常初始化了, getDecorator 方法卻始終不調(diào)用,一時想不出辦法。看到篇文章說不自己寫 sitemesh.xml 而使用自帶的 com/opensymphony/module/sitemesh/factory/sitemesh-default.xml 也可以,于是備份并刪除我寫的 sitemesh.xml ,居然成功了。為什么我寫的就不行呢?差別一是我的簡化了很多,只有

          < mapper

          ????
          class ="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper" >

          ???????????
          < param? name ="config" ?value ="${decorators-file}" ? />

          ???????
          </ mapper >

          和剛加的

          ParameterDecoratorMapper ,二就是順序,我的 ParameterDecoratorMapper 放在了 ConfigDecoratorMapper 后面,會不會是順序原因呢,調(diào)換一下,果然成功了。問題是解決了,原理呢?再花點時間跟一下代碼了解下原理,原來使用了 Factory ,它會調(diào)用各個配置的 Mapper init 方法,并放入 map 中,然后到時選擇一個 Mapper ,如果符合條件就使用,否則繼續(xù)往下找。這里就有了順序的問題,因為我在 decorator.xml 中使用了
          <decorator?name="default"?page="default.jsp">

          ????????
          <pattern>/*.html</pattern>

          ????
          </decorator>

          ,這樣如果 ConfigDecoratorMapper 放在前面,他就先找這個 Mapper ,一看 saveSnippet.html?decorator=simple&confirm=true ,符合 pattern 啊,就使用它了,另一個 ParameterDecoratorMapper 根本得不到機會,所以也進不了它的 getDecorator 方法。換了順序就是它先進去,所以執(zhí)行,其它的 url 也是先找它,但不匹配,就又交給 ConfigDecoratorMapper 了。呵呵,問題也解決了,對 sitemesh 的認(rèn)識又進了一步。

          posted @ 2007-03-11 22:54 pesome 閱讀(2999) | 評論 (0)編輯 收藏

          中文問題的解決

          這次給 openfans 做網(wǎng)摘功能,主體程序倒是很快就寫完了,另外要做個 IE 插件,卻碰到了不少問題。 IE 插件其實很簡單,就是用 js 獲得頁面的標(biāo)題、 url 和選擇的內(nèi)容,然后通過彈出窗口,將其送到服務(wù)器。這里就有中文的問題了,開始使用 escape ,如 escape(title) 形式, request.getParameter 碰到中文就為 null ,網(wǎng)上搜了一通,說是可以通過 java 編碼搞定,但拿到就為 null 了,還怎么換編碼?忙活了好幾個小時,又是 alert ,又是 document.write ,看上去也沒什么問題。不 escape ,直接在瀏覽器中輸入帶中文的 url ,拿到的不為 null 了,拿到后,通過 new String(str.getBytes("ISO-8859-1"), "UTF-8"); 還真顯示正常了。但用 window.open 又出亂碼了。看到文章說還有 encodeURIComponent 方法可用,就試了下,把 escape 換成 encodeURIComponent 居然搞定了,服務(wù)端還是得用 new String(str.getBytes("ISO-8859-1"), "UTF-8") 進行處理。注意這里用的 tomcat ,它的默認(rèn)編碼就是 "ISO-8859-1" ,如果改了編碼程序也得做相應(yīng)的改動了。

          posted @ 2007-03-11 22:51 pesome 閱讀(1047) | 評論 (0)編輯 收藏

          hibernate native sql的小技巧

          為了性能考慮,使用了 native sql 。因為需要分頁,需要 2 sql ,一個獲取 list 一個取得總數(shù)。獲取 list 很好寫:

          ?

          ?1 private ?List?getListByNativeSQL( final ?Class?cls,? final ?String?sql)? {
          ?2
          ?3 ??????? return ?(List)?getHibernateTemplate().execute( new ?HibernateCallback()? {
          ?4
          ?5 ??????????? public ?Object?doInHibernate(Session?session)
          ?6
          ?7 ?????????????????? throws ?HibernateException? {
          ?8
          ?9 ?????????????? return ?session.createSQLQuery(sql).addEntity(cls).list();
          10
          11 ???????????}

          12
          13 ???????}
          );
          14
          15 ????}

          16

          ?

          獲取總數(shù)查了下 hibernate reference, 試了幾次才明白用法 :

          ?1 private ?BigInteger?getCountByNativeSQL( final ?String?sql)? {
          ?2
          ?3 ??????? return ?(BigInteger)?getHibernateTemplate().execute(
          ?4
          ?5 ?????????????? new ?HibernateCallback()? {
          ?6
          ?7 ?????????????????? public ?Object?doInHibernate(Session?session)
          ?8
          ?9 ????????????????????????? throws ?HibernateException? {
          10
          11 ????????????????????? return ?(BigInteger)?(session.createSQLQuery(sql).uniqueResult());
          12
          13 ??????????????????}

          14
          15 ??????????????}
          );
          16
          17 ????}

          18

          這里的

          sql 是“ select count(*) 開頭的”。這里大家可能要問,為什么要使用 BigInteger ,因為如果用 uniqueResult() 默認(rèn)就返回 BigInteger ,而 BigInteger cast Integer 會出錯。那么如果我就是要返回 Integer 呢,可以通過下面的辦法實現(xiàn):

          ?1 private ?Integer?getCountByNativeSQL( final ?String?sql)? {
          ?2
          ?3 ??????? return ?(Integer)?getHibernateTemplate().execute(
          ?4
          ?5 ?????????????? new ?HibernateCallback()? {
          ?6
          ?7 ?????????????????? public ?Object?doInHibernate(Session?session)
          ?8
          ?9 ????????????????????????? throws ?HibernateException? {
          10
          11 ????????????????????? return ?(Integer)?(session.createSQLQuery(sql).addScalar( " count " ,?Hibernate.INTEGER).uniqueResult());
          12
          13 ??????????????????}

          14
          15 ??????????????}
          );
          16
          17 ????}

          18

          大家注意粗體的部分,這里是給一個

          alias 賦予類型,那么 sql 就需要變成以 ”select count(*) as count ” 開頭了。

          posted @ 2007-03-02 10:52 pesome 閱讀(5261) | 評論 (2)編輯 收藏

          php5+mysql5+apache2需要注意的幾點

          今天為了在本機裝個wordpress玩玩,搞了搞php5+mysql5+apache2。網(wǎng)上搜了一篇文檔,很快就讓php與apache跑起來了,但連mysql始終不行。報錯:Call to undefined function mysql_connect()。查了一下半天,就是php關(guān)于mysql的ext沒配好,但我改了php.ini啊,也把"extension=php_mysql.dll"放出來了。查了好久,看到一篇說php5需要加上"extension=php_mysqli.dll",試了下果然好了。
          ???? 然后需要以index.php作為默認(rèn)的welcomefile(不知道怎么叫,web.xml里是這個),需要在"DirectoryIndex index.html index.html.var"后加上 index.php就行。
          然后飛快的裝了phpmyadmin、dvbbs的php版。發(fā)現(xiàn)php應(yīng)用的安裝的確很是方便,解壓,拷貝到htdocs下,馬上就能運行了,比java應(yīng)用簡單的多,更別提復(fù)雜的要死的企業(yè)應(yīng)用了。這點上java要好好向php學(xué)習(xí)啊。

          posted @ 2007-01-14 17:34 pesome 閱讀(1300) | 評論 (0)編輯 收藏

          開始研究電子支付

          項目需要,開始研究電子支付。國外的電子支付提供商,得好好研究它的文檔和api。全是e文,只能慢慢看了。

          posted @ 2007-01-12 15:41 pesome 閱讀(1299) | 評論 (1)編輯 收藏

          <2007年1月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          導(dǎo)航

          統(tǒng)計

          公告

          主要記錄作者在學(xué)習(xí)java中的每一步足跡。除非特別說明,所有文章均為本blog作者原創(chuàng),如需轉(zhuǎn)載請注明出處和原作者,如用于商業(yè)目的,需跟作者本人聯(lián)系。
          歡迎大家訪問:

          常用鏈接

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          java技術(shù)

          人間百態(tài)

          朋友們的blog

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宜昌市| 东乡| 桦甸市| 双城市| 上栗县| 金堂县| 信丰县| 穆棱市| 藁城市| 蒲江县| 静海县| 石城县| 红原县| 中西区| 东乡县| 嵊州市| 宜城市| 溆浦县| 确山县| 枝江市| 扬州市| 汤原县| 吴桥县| 肃宁县| 哈巴河县| 石林| 海晏县| 榆中县| 莱阳市| 赤城县| 惠州市| 辉南县| 金昌市| 潢川县| 和硕县| 全椒县| 阳东县| 色达县| 吉木乃县| 紫云| 长丰县|