邋遢居

          我的Java天堂

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            61 Posts :: 2 Stories :: 90 Comments :: 0 Trackbacks

          2010年5月30日 #

          在過去的一年中。斷斷續續的使用了一些Grails。用他做了點東西。覺得不錯,所以希望更多的人來了解他。使用他。所以錄制了一點視頻,和大家分享。視頻會不定期持續更新!

          第一集 Grails 開發環境準備

          http://v.youku.com/v_show/id_XNjUxNjgxMjA4.html

           

          第二集 配置使用 Grails Spring security

          http://v.youku.com/v_show/id_XNjY2MDc4MDgw.html

           

          第三集  Grails中數據庫連接

          http://v.youku.com/v_show/id_XNjk4NTM2NDgw.html

          posted @ 2014-04-23 22:49 Jet Geng 閱讀(2509) | 評論 (0)編輯 收藏

          原起

          EverNote 的強大已經無需多說。他自己有很好的客戶端,不過那個只是對Windows和OS X。在linux下面就蝦米菜了。就是Windows和OS X下面的客戶端也存在一個致命的弱點:不支持 MarkDown
          不過有好人做了一個工具 Geeknote 讓我們可以在任何裝有python的機器上使用Evernote。 更強大的是他可以使用任何編輯器編輯筆記,支持 MarkDown 。 有如此好處還等什么啊趕緊用起來。
          個人在使用的時候發現原版有點點不舒服的地方,做了點點小改動放在了 GitHub。 具體是什么改動,先買個關子。

          安裝

          直接從源碼安裝

          1. 使用 git clone git@github.com:jetgeng/geeknote.git 命令下載源碼
          2. 進入 geeknote 目錄。
          3. 運行 python geeknote.py login 登錄evernote
          4. 通過 python geeknote.py create , python geeknote.py edit , python geeknote.py find 命令來創建,編輯和查詢你的ervernote 中的筆記。
          5. 通過 python geeknote.py settings --editor vim 命令把編輯Evernote的編輯器設定成我最喜歡的vim。 當然你可以設定成你喜歡的。
          6. 這個時候你已經用上了GeekNote。 但是還會有點不爽。最起碼我這個時候不爽。

          不爽的地方

          1. 當我用python geeknote.py edit 命令使用vim打開我要編輯的筆記時,筆記居然沒有把 MarkDown 語法給我高亮出來! 不爽!!
          2. 輸入命令一定要帶一個什么python 之類的太繁,而且我tab的時候也沒有給我把命令補全!在命令行中沒有自動補全,太不爽了!!

          改之

          讓vim正確設定filetype

          在 vim中一般是根據文件的后綴名來識別該文件是什么類型。然后為他加載相應的語法高亮,代碼補全什么的。在沒有改動前geeknote是為筆記創建的臨時 文件時沒有后綴的。只是隨機的創建一個形如 tmpsNbc8k這樣的文件。所以Vim無法識別他是何種文件,就無法為他加載對于的語法高亮之類的。

          既然找到原因了就先看一下geeknote是否有什么地方可以設定,讓他產生的臨時文件有后綴。最后在editor.py文件中發現了這么一行代碼: (tmpFileHandler, tmpFileName) = tempfile.mkstemp() 。 直接沒有給任何后綴的想法。
          那就加上吧。
          我所做的動作就是這個,給他加上了一個文件后綴的設定。
          通過python geeknote settings --suffix suffix 這樣的命令來設定零時文件的后綴。這樣語法高亮,代碼補全就回來了。小爽一下!

          命令行自動補全

          這個其實geeknote已經想到了,而且已經做了。代碼倉庫中的那個 bash_completion/geeknote 文件就是干這個活的。 所以我只要把這個文件copy到 /etc/bash_completion.d/ 下就可以了。
          但是copy進去后沒有達到我想要的效果。沒有自動補全。最后發現是geeknote配置的補全命令和我們執行的時候不一致。
          下面要做的就是把它們搞一致了。
          我的操作步驟如下:
          1. chmod +x geeknote.py 給geeknote.py加上可執行權限。
          2. 將geeknote.py所在路徑加入到PATH中去。
          3. 修改 /etc/bash_completion.d/geeknote 文件中的 geeknote 為geeknote.py 這個在我上面提到的github中可以找到。

          這個時候在新開一個控制臺,輸入 geeknote.py tab 可以自動補全了。小爽一下!

          posted @ 2013-05-31 22:57 Jet Geng 閱讀(8321) | 評論 (1)編輯 收藏


          Gemini測試小工具

          作 者: Jet Geng
          日 期: 2011-07-22

          概述

          Blueprint 起步中我們已經成功的通過 Blueprint 容器創建了一個POJO。我們只是通過log的方式查看到我們的POJO已經被創建了。無法深入的去了解容器內部Bean的運行狀態和行為。 所以才有必要創建一個Gemini控制臺這樣的程序。這個控制臺最初的需求是:

          • 能夠動態查看特定的Bean是否被創建。
          • 能夠動態的獲取特定的Bean。
          • 能夠檢查特定Bean的行為是否正確。

          解決方案

          為了解決以上的問題。我做了一個小工具。 這個小工具的目的讓客戶的動態腳本能在最終的目標環境中運行。使用方式如下:
          1. 從 git://github.com/jetgeng/OSGi.git 下載 org.gunn.gemini.consoleorg.codehaus.groovy 這兩個項目。
          2. 并把這兩項目加入到你的TargetPlatform中。
          3. 使用 invokegv 來運行groovy腳本。
            1. 直接在命令行輸入腳本。例如: invokegv print act.getBean(''myPOJO'')
            2. 通過輸入Groovy文件。例如: invokegv file:///Users/Puer/.../script.groovy

          注解

          在Groovy腳本中有一個內建的變量 act , 他又一個叫做 getBean 的方法。通過這個方法你可以獲得當前 OSGi 平臺中所有的BlueprintContainer中的組件。他的輸入參數時Bean或Service的id。 如果是使用Groovy文件的形式,注意文件的url格式。他是通過如下的正則表達式 file:\\/{2}(\\/[:\\w\\.]+)+ 進行驗證的。并且路徑中暫時不支持中文。

          這個周末(23或24日)完成一個簡單的錄屏,來演示這個小工具的使用。

          posted @ 2011-07-22 01:01 Jet Geng 閱讀(3143) | 評論 (0)編輯 收藏

          1 概述
          Blueprint 使用手記 Jet Geng
          July 10, 2011
          Blueprint 是 OSGi Service Platform Enterprise Specification 標準的一 部分。很多最佳實踐中也都推薦在應用程序中使用他。最近在項目中用他 來發布和應用服務。感覺效果不錯。所以就有了這篇使用手記!歡迎各位 看官拍磚!
          2 配置環境
          我們在前期找到了兩個 Blueprint 的實現:一個是 Apache 的 aries,另 外一個就是 Eclipse 的 Gemini。最后選擇了 Gemini。做出這樣的決定出于 兩點考慮:
          • Blueprint的標準就是由Spring提出。
          • Gemini的初始代碼由Srping所捐獻。 下面我就簡單介紹一下環境的配置過程:
          • 從http://eclipse.org/gemini/ 下載 Gemini 的合適的版本。我們 采用的是 1.0.0M1。并解壓到路徑 A
          • 從http://static.springsource.org/downloads/nightly/milestone-download. php下載 spring-osgi-2.0.0.M1-with-dependencies。并解壓到路徑 B。 他里面包括了 Gemini 所依賴的 bundle。說白了也就是 SpringFrame- work。
          • Eclipse 中新建一個 Target Platform。把上述的路徑 A和 B 加入到新 建的 Target Platform 中去。
          • 選擇新建的 Target Platform 為當前活動的 Platform。 3 啟航
          個人理解 Gemini 就是 OSGi 世界中的 IOC。既然是一個 IOC 框架,那 我們就從創建一個 Bean 開始吧!

          3.1    創建一個 Bean 首先我們來看一下我們要存入 Container 中的 POJO。
          Listing 1: POJOWillInContainer.java
          package org.gunn.gemini.demo;
          import org.slf4j.Logger; import org.slf4j.LoggerFactory; /**
          * This pojo will create by blueprint container * 
          @author Jet Geng * */
          public class POJOWillInContainer { private Logger logger =
          }
          LoggerFactory.getLogger(POJOWillInContainer.
          class); private String name ;
          private String age;
          public void setName(String name) { logger.info("the new name is:" + name); this.name = name;
          }
          public void setAge(String age) { logger.info("the new age value is:" + age); this.age = age;
          }

          這個超級簡單的一個 POJO,我們如何通過 Gemini 來創建他呢?我們通過 一個簡單的配置文件。具體如下。
          Listing 2: pojoconfig.xml

          <?xml version="1.0" encoding="UTF-8"?>
          <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
              
          <bean id="myPOJO" class="org.gunn.gemini.demo.POJOWillInContainer" >
                  
          <property name="name" value="JetGeng"/>
                  
          <property name="age" value="32"/>
              
          </bean>
          </blueprint>

          用過 spring 的兄弟,第一眼就能看明白這個配置文件說的是什么。其實就 是創建了一個 bean。到這里,我們所需要做的工作其實就已經完成了。下 面就可以通過 Debug 來啟動了。
          3.2    運行 Blueprint 容器 首先把 pojoconfig.xml 文件放到 project path/OSGi INF/blueprint 目錄
          下。或者在 MANiFEST.MF 文件中通過如下語句進行指定。 Blueprint-Bundle: config/account-data-context.xml, config/osgi-*.xml
          更多內容參考http://www.eclipse.org/gemini/blueprint/documentation/ reference/1.0.0.RC1/html/app-deploy.html中的 8.2 Blueprint Manifest Configuration Comparison。好了,我們可以啟動我們的應用程序了。為了 能夠讓 blueprint 順利的跑起來,我們必須要把 blueprint 相關 bundle 以及 他所依賴的 bundle 都加入到運行時中。 按照上圖配置后,點擊運行。我們
          Figure 1: Debug 配置

          將在控制臺得到如下內容。

          控制臺中的黑色行顯示我們的 POJO 已經被 BlueprintContainer 創建

          了,并且設定了相關屬性。
          .
          這個部分的全部代碼已經放到了 git://github.com/jetgeng/OSGi.git 中了。 感興趣的筒子可以 down 下來玩玩。
          posted @ 2011-07-10 11:06 Jet Geng 閱讀(5052) | 評論 (4)編輯 收藏

          用Graphviz顯示樹

          緣起

          前幾天不知道那根筋搭錯,又拿出了大學時候買的一本講算法的書翻了起來。想起當年學習Tree的時候,看著數據結構憑空去想那顆倒著的樹。那個叫做苦啊。所以就像有沒有什么辦法讓Tree自己畫出這樣的結構圖出來。

          動手

          既然想到了,就動手做把。因為以前用Graphviz畫過一點mindmap,類圖之類的小東西。讓我一下子就想到了,我只要能從Tree結構中方便的輸出成一個能繪制出對應樹結構的Graphviz腳本就可以。這應該是代價最小的做法。 呵呵,廢話不多說了。看看的Tree的代碼吧!

           @Override
              
          public String toString() {
                  StringBuffer strValue 
          = new StringBuffer();
                  StringBuffer rout 
          =  new StringBuffer("{rank=same ");
                  
                  
          if(getLeftTree()  != null ) {
                      strValue.append(root).append(ARROW).append( getLeftTree().getTreeNode()).append(
          ";\r").
                                  append( getLeftTree());
                      rout.append(getLeftTree().getTreeNode() ).append(ARROW).append(EXTEND).append(root);
                
                  }
                  
                  strValue.append(EXTEND).append(root).append(
          "[label=\"\",width=.1,style=invis];\r");
                  strValue.append(root).append(ARROW).append(EXTEND).append(root).append(
          "[style=invis];\r");
               
                  
          if(getRightTree() != null) {
                      strValue.append(root).append(ARROW).append( getRightTree().getTreeNode()).append(
          ";\r").
                      append( getRightTree());
                 
                      rout.append(ARROW).append(getRightTree().getTreeNode());
                  }
                  strValue.append(rout).append(
          " [style=invis] } ;\r");
                  
          return strValue.toString();
              }

          產生腳本的動作全部在這里完成了。我通過如下代碼創建了一顆樹

                 ITree<Integer> tree = new TreeImpl<Integer>(6);   
                  tree.addNode(
          3);
                  tree.addNode(
          16);
                  tree.addNode(
          5);
                  tree.addNode(
          4);
                  tree.addNode(
          2);
                  tree.addNode(
          10);
                  tree.addNode(
          30);

          最后得到的一副如下的圖

          呵呵,這樣的話就可以隨時查看樹的結構了,我們所需要做的只是把object toString一下就可以。

          附上一些文件

          演示的錄屏文件

          完整的代碼 

          posted @ 2010-08-11 12:59 Jet Geng 閱讀(3823) | 評論 (1)編輯 收藏

          近來想了解一下關于網站建設方面的內容。自然而然的就找到了Drupal這個東西。剛開始沒有發現他是多么的強大。抱著試試看的態度,

          搭建了一個環境跑跑看。看完之后驚呼強大!他的強大來源于他的高度的可擴展,豐富的模塊,主題。讓你可以不寫一行代碼構建出一個不錯的網站來。 看到這么強大的東西,就禁不住好奇往里看。于是找到了一些資料特與大家共享: 書籍:

          •  Using Drupal
          • Drupal 6 Attachment Views
          • Pro Drupal Development 悄悄的說一聲,這幾本書在itpub上都有下載。

          視頻:

          還有兩個很不錯的網站。

          上面提供了很多高質量的教學視頻。讓我這個初學者很快對drupal有個直觀和深入的了解。

          youtube.com上也有很多視頻,有梯子的童鞋可以過去看看!

          posted @ 2010-05-30 23:44 Jet Geng 閱讀(1666) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 漳州市| 平远县| 师宗县| 绥棱县| 军事| 内江市| 呼玛县| 枣庄市| 永寿县| 长丰县| 安丘市| 邢台县| 孟村| 吉木乃县| 土默特左旗| 綦江县| 仪陇县| 通许县| 宁国市| 西青区| 天峨县| 昌邑市| 滦平县| 福泉市| 南康市| 定西市| 岑溪市| 彩票| 衡山县| 泾源县| 武义县| 岳池县| 武邑县| 渑池县| 什邡市| 景谷| 迁西县| 张家口市| 巴东县| 石渠县| 谢通门县|