2006年7月31日

          整理P大點兒的硬盤空間居然整理出來俺曾經(jīng)做過的幾個東東,哎呀,想當年啊……成長歷程啊。
          第一個正把經(jīng)的個人網(wǎng)站的首頁
          ?進步了一些的第二版?zhèn)€人主頁

          又做了一些小東東而且跟著DFLYING大蝦學會PHP以后,開始接校內(nèi)的小活做……一個團委旗下網(wǎng)站
          加入Enwell.net開始欄目制作。其中一個,Enwell商城。

          成立Enwell Studio
          做的第一個商業(yè)網(wǎng)站,反而不知道咋做了
          又陸續(xù)寫了一些PHP以后,進入Hywave多媒體開始寫Delphi和ASP.NET,為hywave改版提出兩套方案
          ASP.NET寫了一些,包括一個巨惡心的OA以后開始和差沙,范例華寫J2ME,要不是因為期末沒時間了,俺們相信瘋狂坦克對打網(wǎng)絡版肯定能產(chǎn)出,差沙小伙兒一個星期就把是男人就下一百層從無到有寫出來了(以前從來不做JAVA何況J2ME)
          開始寫DELPHI以后俺就成了一個職業(yè)的程序員了,和頁面沒關(guān)系了……就走進了JAVA的世界。也不知道現(xiàn)在開始寫SAP ABAP是不是對得起自己。sigh,好多東西翻不到了,都是大學逃課的心血啊……

          posted @ 2006-07-31 22:47 BlueO2 閱讀(464) | 評論 (0)編輯 收藏


          2006年7月27日

          我很早以前便開始使用bloglines的訂閱服務。在那里我訂閱了很多常去的技術(shù)站點和一些朋友們的blog,使用總發(fā)現(xiàn)了一些不便之處也產(chǎn)生了自己的一些想法,今天偶然看keso的一篇blog發(fā)現(xiàn)了抓蝦網(wǎng)以及rojo,眼前為之一亮,很多想法,這兩個網(wǎng)站已經(jīng)替我實現(xiàn)了。
          rss訂閱服務衍生的門戶
          在bloglines這樣的純粹訂閱服務來說,用戶群的大小,用戶群訂閱的內(nèi)容的相似度,用戶的閱讀頻率對網(wǎng)站產(chǎn)生不了任何貢獻。這實在是大大的浪費。我當時就想,如果在每個種子旁邊有個方便的"頂"也就是digg it功能,那么,將用戶頂?shù)淖疃嗟膕tory聚合起來,分門別類,這就是一個dzone.com這樣的網(wǎng)站啊。現(xiàn)在類似dzone以及更加出名的digg我都認為是rss訂閱服務網(wǎng)站的失敗之處,他們完全有優(yōu)勢快速聚合出來一個這樣的小型門戶。現(xiàn)在抓蝦網(wǎng)以及rojo都有這樣的服務了,也都由此衍生出了一個熱文排行樣式的東西,但是我感覺做得還不夠,這樣太雜。泛泛的講內(nèi)容一列。應該根絕用戶訂閱時此feed的tag做分析,整理出來分類,做類似daqi.com或者qihoo.com一樣的布局。
          rss訂閱衍生出來的朋友圈
          web20有一點很重要,就是社會網(wǎng)絡。就拿豆瓣網(wǎng)來說,我通過豆瓣提供的以書會友的功能認識了幾個志趣相投的朋友。豆瓣會根據(jù)你喜歡讀的書,看的電影,聽得音樂,推薦給你和你興趣相投的人,rss訂閱也應該這樣。比如Bloglines可以查看都有誰訂閱了這個feed,可是為什么不更近一步,將兩個人的訂閱內(nèi)容作比較,做匹配呢?通過在你的網(wǎng)站提供的 rss訂閱服務我可以認識朋友,這也是網(wǎng)站粘性之一。否則像我現(xiàn)在可以毫無顧忌的從bloglines搬家到rojo和抓蝦網(wǎng)。而更多自取相同的人可以組成圈子。甚至衍生更廣一點,大家通過查看你的profile,瀏覽你的Blog,決定跟你做朋友的時候,你會得到一個vote的分數(shù),在朋友圈的聚合門戶上排名考前,這個不就是聯(lián)絡家么?
          推薦給我其他讀物
          當我用豆瓣的時候,還有一個功能特別貼心,就是它會推薦給我相類似的圖書。比如我讀兄弟,它會在旁邊給我推薦活著,許三關(guān)賣血等等……rss的小門戶,可以根據(jù)每個人的興趣不同,推薦在此類別中背digg次數(shù)最多的blog給我,省得我總是感慨:哎呀,怎么沒早點看到這個網(wǎng)站呢?
          信息篩選
          訂閱了好多rss feed的人都有此種經(jīng)歷,那就是有的時候忙,你好久沒看了,突然以上來,成百上千的新條目,當即暈倒。貼心的篩選是很必要的,rss訂閱服務網(wǎng)站完全可以根據(jù)其他用戶的digg rank來按照重要程度給我排序,大家認為重要的先看,大家認為不重要的后看……我想,群眾的眼睛還是雪亮的。
          冗余的剔除
          訂閱了大量rss的人來說,有一些種子可能已經(jīng)壞掉了,或者作者更新頻率很低,或者過了一段時間以后,你已經(jīng)不太認為那個對你有價值了(這個可以從你digg it和收藏的頻率來判斷),但是因為我們進行了大量的訂閱,要把它剔除需要花費時間的。RSS訂閱服務只需要替訂閱者看著點壞掉的種子,統(tǒng)計下訂閱者對其的關(guān)注度,然后建議剔除哪些沒有價值的feed,這將給我?guī)砭薮蟮姆奖恪?br />抓蝦與rojo相比bloglines的改進
          rojo有一點很好,當你大開一個feed的時候,他們顯示的是title,只有當點擊小十字查看具體內(nèi)容,它才認為你讀過了,下次你再打開這個種子,這個條目便不會顯示出來。之前用bloglines有的條目很多,一天可能看不完,下一次再打開就看不到了,因為你之前的打開被bloglines認為是閱讀過的表現(xiàn)。而有些條目我們認為是很有價值的,rojo和抓蝦都提供了收藏的功能。此外rojo對bloglines對feed死板的分類功能進行了改善,替代的是tag,就是說一個feed可以屬于多個tag,你甚至可以對條目進行tag,這樣更加有利于小門戶分門別類的聚合。
          更進一步
          我一直感覺blog的互動性還不夠,這個不動不是指comment。而是無法像BBS一樣,對一個討論形成一個有主線的跟進。大家對一些東西都有自己的看法,可是都是零敲碎打,自己說自己的,對別人的想法可能不了解。僅僅靠track back是無法串聯(lián)起來的。如果你的rss訂閱服務能夠有足夠的粘性,那么用戶基本都從你這里獲得信息,當他要發(fā)表對某個條目的看法,讓用戶登陸他自己的 Blog,快捷的引用到自己的blog里面,而訂閱服務網(wǎng)站將通過某種方式將用戶的評論內(nèi)容得到。這樣,將眾多的用戶的內(nèi)容整理出來,類似BBS討論的形式,聚合在門戶里。這樣,Blog之間才形成了有效的互動。可惜,這個想法,似乎還不知道怎么實現(xiàn)。
          我的頁面&&個人門戶
          幾乎這種rss訂閱服務網(wǎng)站都提供我收藏的feed的展示,我感覺這個是不夠的。而還應該展示的則是跟我上面所說的有聯(lián)系的,最近digg的條目,最近收藏的條目,以及我最近評論的條目,以及我的朋友圈等等。這才形成了真正的“我的頁面”。
          用keso的話說,rss閱讀器的技術(shù)門檻很高啊。

          posted @ 2006-07-27 10:26 BlueO2 閱讀(478) | 評論 (0)編輯 收藏


          2006年6月26日

          public ? class ?Artist? {
          ????
          ????String[]?others;
          ????
          /** ?Creates?a?new?instance?of?Artist? */
          ????
          public ?Artist()? {
          ????}

          ????
          public ?Artist(String?name,String??others) {
          ????????
          for (String?other?:?others) {
          ????????????System.out.println(other);
          ????????}

          ????????
          this .others? = ?others;
          ????}

          ????
          public ? void ?wildestMethod(Object??objs) {
          ????
          // this?method?will?accept?any?arguments
          ????}

          ????
          public ? static ? void ?main(String[]?args) {
          ????????Artist?artist?
          = ? new ?Artist( " You " ,? " 1 " ,? " 2 " );
          ????????artist.wildestMethod(
          1 ,? 3.5 ,? " AA " ,? new ?Artist());
          ????}

          ????
          }

          posted @ 2006-06-26 20:25 BlueO2 閱讀(387) | 評論 (0)編輯 收藏


          2006年6月22日

          public ? class ?AutoBoxing? {
          ????
          ????
          /** ?Creates?a?new?instance?of?AutoBoxing? */
          ????
          public ?AutoBoxing()? {
          ????}

          ????
          public ? void ?boxingDemo() {
          ????????
          // auto?boxing
          ????????Integer?i? = ? 0 ;
          ????????
          float ?f? = ? 1.66f ;
          ????????Float?F?
          = ?f;
          ????????
          // auto?unboxing
          ????????Integer?I? = ? new ?Integer( 1 );
          ????????
          int ?i2? = ?I;
          ????????
          // null?value?test,?it?will?case?NullPointerException
          ????????Integer?I2? = ? null ;
          ????????
          int ?i3? = ?I2;
          ????}

          ????
          public ? void ?testOperator() {
          ????????Integer?i?
          = ? 1 ;
          ????????
          while ( true ) {
          ????????????i
          ++ ;
          ????????????System.out.println(
          " Counter: " + i);
          ????????????
          if (i > 5 )? break ;
          ????????}

          ????}

          ????
          public ? void ?testCompare() {
          ????????
          // it's?equal?because?-127~127?are?immutable?objects
          ????????Integer?i? = ? 1 ;
          ????????Integer?i2?
          = ? 1 ;
          ????????
          if (i? == ?i2)?System.out.println( " 1:Equal " );
          ????????
          else ?System.out.println( " 1:Not?Equal " );
          ????????
          // it's?not?equal?because?j?and?j2?are?different?objects
          ????????Integer?j? = ? 200 ;
          ????????Integer?j2?
          = 200 ;
          ????????
          if (j? == ?j2)?System.out.println( " 200:Equal " );
          ????????
          else ?System.out.println( " 200:Not?Equal " );
          ????}

          ????
          public ? void ?testControl() {
          ????????Boolean?flag?
          = ? true ;
          ????????Integer?i?
          = ? 20 ;
          ????????Integer?j?
          = ? 30 ;
          ????????
          if (flag) {
          ????????????System.out.println(
          " Boolean?affects " );
          ????????}

          ????????
          if (i < j)
          ????????????System.out.println(
          " Integer?affects " );
          ????}

          ????
          public ? void ?testMethod( double ?arg) {
          ????????System.out.println(
          " public?void?testMethod(double?arg)?is?invoked " );
          ????}

          ????
          public ? void ?testMethod(Integer?arg) {
          ????????System.out.println(
          " public?void?testMethod2(Integer?arg)?is?invoked " );
          ????}

          ????
          public ? static ? void ?main(String?args[]) {
          ????????AutoBoxing?auto?
          = ? new ?AutoBoxing();
          ????????auto.testCompare();
          ????????auto.testOperator();
          ????????auto.testControl();
          ????????
          int ?i? = ? 1 ;
          ????????
          // ?public?void?testMethod(Integer?arg)?wouldn't?be?invoked
          ????????
          // because??public?void?testMethod(double?arg)?will?be?invoked?in?JDK1.4
          ????????
          // Java?tiger?consider?the?backward?capability
          ????????auto.testMethod(i);
          ????????auto.boxingDemo();
          ????}

          ????
          }

          posted @ 2006-06-22 18:34 BlueO2 閱讀(402) | 評論 (0)編輯 收藏

          public ? enum ?User? {
          ????Admin,User,Guest,Unknown???
          }

          public ? class ?Login? {
          ????
          ????
          private ?User?user;
          ????EnumMap
          < User,String > ?userName? = ? new ?EnumMap < User,?String > (User. class );
          ????
          /** ?Creates?a?new?instance?of?Login? */
          ????
          public ?Login()? {
          ????????userName.put(User.Admin,?
          " Administrator " );
          ????????userName.put(User.User,?
          " David " );
          ????????userName.put(User.Guest,?
          " Steve " );
          ????}

          ????
          public ? boolean ?isAdmin(User?user) {
          ????????
          if (user.equals(User.Admin)) {
          ????????????
          return ? true ;
          ????????}

          ????????
          return ? false ;
          ????}

          ????
          public ? void ?printUserRole() {
          ????????User[]?users?
          = ?user.values();
          ????????
          for (User?u?:?user.values()) {
          ????????????System.out.println(u.toString());
          ????????}

          ????}

          ????
          public ? void ?isRole(User?user) {
          ????????
          switch (user) {
          ????????????
          case ?Admin:
          ????????????????System.out.println(
          " admin " );
          ????????????????
          break ;
          ????????????
          case ?User:
          ????????????????System.out.println(
          " User " );
          ????????????????
          break ;
          ????????????
          case ?Guest:
          ????????????????System.out.println(
          " Guest " );
          ????????????????
          break ;
          ????????????
          default :
          ????????????????System.out.println(
          " unknow " );
          ????????}

          ????}

          ????
          public ? static ? void ?main(String[]?args) {
          ????????Login?login?
          = ? new ?Login();
          ????????System.out.println(login.isAdmin(User.Admin));
          ????????login.printUserRole();
          ????????login.isRole(User.User);
          ????}

          ????
          }

          posted @ 2006-06-22 18:22 BlueO2 閱讀(343) | 評論 (0)編輯 收藏


          2006年6月20日

               摘要: public ? class ?Generic? {???????? /**?*/ /** ?Creates?a?new?instance?of?Generic? */ ...  閱讀全文

          posted @ 2006-06-20 18:18 BlueO2 閱讀(392) | 評論 (0)編輯 收藏


          2006年3月16日

          Rasmus Lerdorf, creator of the PHP langauge, has a new tutorial on his site today that looks at the creation of a "no-framework PHP MVC framework" using PHP5, the Yahoo! User Interface Library, and JSON.

          He steps through the entire process of working up the "non-framework" - the goals of the project, why to go with the MVC approach for the structure, and, of course, the code.

          That arose the PHP's own MVC Pattern discussion in PHP Community.But i have my own view.Here is my response in one of most famous PHP community:


          其实我认为由于lerdorf演示的是一个PHP AJAX应用,所以其实很难跟cid的方案有什么对比。由于AJAX应用的特殊性,lerdorf这个所谓的controller根本不需要考虑进行完了相关的操作以后View到底应该去哪里,应该转向哪里?因为直接push给客户端JSON对象就好了,完全不用操心到a.php还是b.php
          另外,虽然lerdorf说以后可能可以多个请求Include一个xxx.inc就是他的controller,但是目前的状况,即使成为MVC也是page controller,而cid想要做的是一个Front controller做请求委派,Front Controller的复杂的明显要比PC要高,考虑的问题也多。但是并不是说FC就好,asp.net不就是典型的page controller模式么?
          但是说句我的真实感受:读完之后我把它看作PHP AJAX应用示例教程更合适,lerdorf的标题起的有点大了,而且读完以后没有给我任何架构上启示性的东西??
          而且那个if(isset($_POST[''])){}在里面做相关操作,我还是认为挺简陋甚至丑陋的。如果一个挺复杂的view采用此种方式,还是不优雅。
          所以AJAX应用的controller有一部分应该放在View里面,一个页面a.html不一定非要请求到a.php,叶面里面的操作也是要有不同逻辑划分的,但是目前没有成熟的应用示例和解决方案。大家有没有自己的尝试?

          文章來源:http://blueoxygen.dflying.net/3/archive/42_lerdorfs_no-framework_php_mvc_framework.html

          posted @ 2006-03-16 11:19 BlueO2 閱讀(474) | 評論 (0)編輯 收藏

          一场精彩的CMMI论战 Here
          quoted from o6z's post:
          文档最忌讳繁琐无比,事无巨细的都要说明,如果是这样我直接去看代码好了。实际上多数人都默认文档的抽象程度比代码级别高,看文档比看代码省事。但是如果你的文档过于细节化,那么你的代码很难做到同步于文档。这将是一个巨大的威胁。很多人抱怨要看一堆没文档的代码,但是他们很少真的看到过合适的文档。实际上文档的作用应该是让阅读者快速找的代码的位置,而不是用文字说明代码的作用,那些应该是单元测试的事情。
          人员的流动带来的最大问题,实际是知识的流失。文档可以固定下一部分的知识,但是如果文档的抽象层次不够,这些知识并不能很容易的被掌握,那么这些就是无用功。



          文章來源:http://blueoxygen.dflying.net/3/archive/45_working_software_over_comprehensive_documentation.html

          posted @ 2006-03-16 11:19 BlueO2 閱讀(354) | 評論 (0)編輯 收藏

          本来还要自己写一个auto-complete,但是大多数此类功能并没有提供类似google suggest提供的键盘选择功能,auto-complete便失去了一大半的交互改善。于是前两天还特意扒了google suggest来看ac.js 发现google定是用了混淆器。虽然代码没有压缩,但是代码的回车空行和函数名字全部混乱。正在要自己写的时候发现了此中国自产的AutoAssist。Very Cool!


          AutoAssist is an auto completion web widget that written in pure JavaScript. It can help enhance the accessibility of existing website, let the users to work effective and feel comfortable. AutoAssist Javascript only and is built upon prototype and rico. Its main features are :

          * improve the User Experience
          * Don't require an Ajax experience
          * pretty managed JavaScript, easy to understand and customize
          * works well on Mozilla/FireFox, IE and Opera
          * have a nice solution for fast user typing, reduce a lot of corresponding server loading (20% - 80% *)

          autoassist.png

          The code for the screenshot is very simple :

          var foo = function() {
          var tt = new AutoAssist("t", {setRequestOptions: function() {
          var pars = "name=" + this.txtBox.value;
          return { url: "/country.php", parameters: pars };
          }});
          }
          Event.observe(window, "load", foo);

          You can find a ten minutes tutorial for AutoAssist explaining in details how to use this script to create an auto-complete list based on country data.

          By the way,script.aculo.us also has it's impelmention:http://demo.script.aculo.us/ajax/autocompleter


          文章來源:http://blueoxygen.dflying.net/3/archive/53_ajax_auto-complete_component.html

          posted @ 2006-03-16 11:19 BlueO2 閱讀(902) | 評論 (0)編輯 收藏

          See DFlying's finding:
          Yep,No Block Scope concept in JavaScript.Only the global and function Scope.You can use "var" to declare a global variable and use "var" agian to declare a homonymous variable in a function.In the function ,the second one works.But there is no Block scope.
          Check the codes below,it's a demo for "NO BLOCK SCOPE"
          function test(o) {var i = 0; // i is defined throughout functionif (typeof o == "object") {var j = 0; // j is defined everywhere, not just blockfor(var k = 0; k < 10; k++) { // k is defined everywhere, not just loopdocument.write(k);

          }document.write(k); // k is still defined: prints 10}document.write(j); // j is defined, but may not be initialized}

          But,You still need to care javascript's FUNCTION SCOPE.Also see code snippet:
          var scope = "global";

          function f( ) {alert(scope); // Displays "undefined", not "global"var scope = "local"; // Variable initialized here, but defined everywherealert(scope); // Displays "local"}f( );
          Right,thought you alert(scope) first and then define a new functin scope variable scope.However,once you define a function scope vriable,it will hide the global variable in the function body,whatever the definition order.



          文章來源:http://blueoxygen.dflying.net/3/archive/68_variables_scope_in_javascript.html

          posted @ 2006-03-16 11:19 BlueO2 閱讀(491) | 評論 (0)編輯 收藏


          僅列出標題  下一頁

          posts - 29, comments - 3, trackbacks - 0, articles - 0

          Copyright © BlueO2

          主站蜘蛛池模板: 寻甸| 沂水县| 西丰县| 藁城市| 綦江县| 上思县| 井陉县| 庄浪县| 三原县| 凤冈县| 山东省| 北京市| 仁怀市| 望奎县| 若羌县| 祁东县| 图们市| 托克逊县| 赤水市| 土默特右旗| 手机| 绍兴县| 贵阳市| 兴和县| 呼玛县| 丹棱县| 师宗县| 江城| 南涧| 柞水县| 格尔木市| 林口县| 阜新市| 原平市| 合肥市| 锦州市| 贡山| 秭归县| 泰安市| 兰西县| 文山县|