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

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

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

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

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

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

          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)編輯 收藏

          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)編輯 收藏

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

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

          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)編輯 收藏

          僅列出標題
          共3頁: 1 2 3 下一頁 

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

          Copyright © BlueO2

          主站蜘蛛池模板: 郁南县| 城固县| 西乌| 赫章县| 永济市| 平和县| 庄河市| 临沧市| 大新县| 杭锦旗| 大石桥市| 巢湖市| 常熟市| 柘荣县| 庆安县| 扎鲁特旗| 曲沃县| 科尔| 津市市| 巴彦淖尔市| 清徐县| 资阳市| 东辽县| 灌阳县| 阳原县| 白朗县| 彰武县| 五莲县| 宁强县| 台东市| 满洲里市| 文水县| 汾西县| 宁安市| 含山县| 乌兰浩特市| 鄂伦春自治旗| 文水县| 正宁县| 巫山县| 孟津县|