星期四, 12月 30, 2010

[Alfresco] Alfresco Store

version://versionStore  contains the archived versions of all documents with cm:versionabel aspect
 (previously version://lightWeightVersionStore) 

archive://SpacesStore is the trash can of workspace://SpacesStore

system://system is very small and contains software information version

Reference:
Alfresco store
Node References and Store Protocols

[Mac] 安裝無蝦米輸入法

Reference:
[教學] Intel Mac上嘸蝦米輸入法解決方案
Mac OSX 嘸蝦米輸入法
超快速,超簡單安裝無蝦米輸入法

星期三, 12月 29, 2010

[Alfresco] TrashcanDialog.java

印出lucene query string的結果,方便追踨。


Print Var.
Repository.getStoreRef():

workspace://SpacesStore

property.getArchiveRootRef():
archive://SpacesStore/20f1f650-07d2-4a93-b464-ac8e9f5ecf59

getArchiveRootRef().getStoreRef()
archive://SpacesStore

private final static String NAME_ATTR = Repository.escapeQName(ContentModel.PROP_NAME);
\{http\://www.alfresco.org/model/content/1.0\}name


private final static String USER_ATTR = Repository.escapeQName(ContentModel.PROP_ARCHIVED_BY);
\{http\://www.alfresco.org/model/system/1.0\}archivedBy


private final static String DATE_ATTR = Repository.escapeQName(ContentModel.PROP_ARCHIVED_DATE);
\{http\://www.alfresco.org/model/system/1.0\}archivedDate


System.out.println(ContentModel.PROP_NAME);
{http://www.alfresco.org/model/content/1.0}name

System.out.println(ContentModel.PROP_ARCHIVED_BY);
{http://www.alfresco.org/model/system/1.0}archivedBy

System.out.println(ContentModel.PROP_ARCHIVED_DATE); 
{http://www.alfresco.org/model/system/1.0}archivedDate

property.getArchiveRootRef():
      archive://SpacesStore/20f1f650-07d2-4a93-b464-ac8e9f5ecf59

Search Filter Rule:

search for ALL items in the archive store:
       PARENT:"archive://SpacesStore/20f1f650-07d2-4a93-b464-ac8e9f5ecf59" AND ASPECT:"{http://www.alfresco.org/model/system/1.0}archived"

search for user 
@\{http\://www.alfresco.org/model/system/1.0\}archivedBy:test1 AND PARENT:"archive://SpacesStore/20f1f650-07d2-4a93-b464-ac8e9f5ecf59" AND ASPECT:"{http://www.alfresco.org/model/system/1.0}archived"

search for user & today
@\{http\://www.alfresco.org/model/system/1.0\}archivedDate:[2010\-12\-30T00\:00\:00 TO 2010\-12\-30T14\:10\:41] AND @\{http\://www.alfresco.org/model/system/1.0\}archivedBy:test1 AND PARENT:"archive://SpacesStore/20f1f650-07d2-4a93-b464-ac8e9f5ecf59" AND ASPECT:"{http://www.alfresco.org/model/system/1.0}archived"

search for user & last 7 today
@\{http\://www.alfresco.org/model/system/1.0\}archivedDate:[2010\-12\-23T14\:12\:13 TO 2010\-12\-30T14\:12\:13] AND @\{http\://www.alfresco.org/model/system/1.0\}archivedBy:test1 AND PARENT:"archive://SpacesStore/20f1f650-07d2-4a93-b464-ac8e9f5ecf59" AND ASPECT:"{http://www.alfresco.org/model/system/1.0}archived"

Reference:
NodeArchiveService
Archive Store Lucene query
Calling Alfresco Web Services from C# 
TrashcanDialog.java  (source code)

[Alfresco] Lucene Language Note

Lucene Language

This is the recommended language as it is supported by the recommended indexer.
The query language is described on the Lucene site http://lucene.apache.org/java/2_4_0/queryparsersyntax.html. The QueryParser has been modified to allow wild cards at the start of wild card query elements otherwise the syntax is the same.
Note that certain characters need to be escaped in the query string. There is support to do this on a static method on the LuceneQueryParser.
The following fields are available

[Windows] Route

路由設定Command
ROUTE [-f] [-p] [-4|-6] command [destination]
                  [MASK netmask]  [gateway] [METRIC metric]  [IF inter

  -f           清除所有閘道項目的路由表。如果這與其中
               一個命令一起使用,將會在執行命令之前
               清除表格。

  -p           與 ADD 命令一起使用時,路由在系統開機期間
               可持續。依預設,系統重新啟動時並不會
               保留路由。對於會影響適當的持續路由的
               所有其他命令則會略過。Windows 95
               中不支援此選項。

  -4           強制使用 IPv4。

  -6           強制使用 IPv6。

  command      下列其中一個:
                 PRINT     列印路由
                 ADD       新增路由
                 DELETE    刪除路由
                 CHANGE    修改現有的路由
  destination  指定主機。
  MASK         指定下一個參數是 'netmask' 值。
  netmask      指定此路由項目的子網路遮罩值。
               如果沒有指定,將預設為 255.255.255.255。
  gateway      指定閘道。
  interface    指定之路由的介面號碼。
  METRIC       指定計量,例如目的地的成本。

目的地使用的所有符號名稱將會在網路資料庫檔案 NETWORKS
中查詢。閘道的符號名稱是在主機名稱資料庫檔案 HOSTS 中查詢。

如果是 PRINT 或 DELETE 命令,目的地或閘道可以是萬用字元
(指定星號 '*' 為萬用字元),或可以省略閘道引數。

如果目的地包含 * 或 ?,便會視為殼層模式,且只會列出相符的
目的地路由。'*' 表示與任何字串相符,
而 '?' 表示與任何一個字元相符。範例: 157.*.1, 157.*, 127.*, *224*。

只有 PRINT 命令才允許模式對應。
診斷注意事項:
    不正確的 MASK 會產生錯誤,例如當 (DEST & MASK) != DEST 時。
    範例> route ADD 157.0.0.0 MASK 155.0.0.0 157.55.80.1 IF 1
          路由新增失敗: 指定的遮罩參數不正確。
(Destination & Mask) != Destination。

範例:

    > route PRINT
    > route PRINT -4
    > route PRINT -6
    > route PRINT 157*          ....只列印符合 157* 的項目

    > route ADD 157.0.0.0 MASK 255.0.0.0  157.55.80.1 METRIC 3 IF 2
                   目的地^      ^遮罩      ^閘道            計量^    ^
                                                               介面^
      如果沒有指定 IF,將會嘗試為指定的閘道尋找最佳的介面。
    > route ADD 3ffe::/32 3ffe::1

    > route CHANGE 157.0.0.0 MASK 255.0.0.0 157.55.80.5 METRIC 2 IF 2

      CHANGE 只用來修改閘道及 (或) 計量。

    > route DELETE 157.0.0.0
    > route DELETE 3ffe::/32


Testing:
route add 10.15.3.97 mask 255.255.255.255 192.168.123.1 (gateway:vpn route ip)

星期五, 12月 24, 2010

[Alfresco] 目錄


Alfresco的檔案放置目錄結構,此版本為3.4.5

../alf_data
        /audit.contentstore
        /backup-lucene-indexes
        /contentstore
        /contentstore.deleted (deleted objects)
        /lucene-indexes

星期四, 12月 16, 2010

[Alfresco WebService]Ticket could not be found when calling callback handler

三種解法Aflreso Webserver login後Ticket有時候會無法正常取得的方法:

1 - start new session for for every separate thread.
2 - store authenticationDetails in the user's session, and use it to call the webservice

登入後使用session keep AuthenticationDetails 物件
AuthenticationUtils.startSession("user", "password");
    request.getSession().setAttribute("authenticationDetails", AuthenticationUtils.getAuthenticationDetails());
每次呼叫WebService時,把session中的AuthenticationDetails在設定回去
AuthenticationUtils.setAuthenticationDetails((AuthenticationDetails) req.getSession().getAttribute("authenticationDetails"));
Node[] nodes = repositoryService.get(new Predicate(null,spacesStore, qt));

3 - Modify AuthenticationUtils to store authenticationDetails in session instead of ThreadLocal, rebuild the SDK.

Reference:
Ticket could not be found when calling callback handler

星期二, 12月 14, 2010

[Wordpress] posts 相關


wp_posts table
--post_status:inherit,draft,publish,trash,auto-draft,pending
--post_type:attachment,nav_menu_item,page,post,revision


























星期二, 12月 07, 2010

[ZK] borderlayout Executions.createComponents

目前jsp頁面使用borderlayout zk tag遇到的問題
直接call jsp file 會出現"org.xml.sax.SAXParseException: The markup in the document preceding the root element must be well-formed."

有人提到的解法



你不能用Executions.createComponents來做,必須用一個include Component 或 iframe component 以setSrc的方式來操作。

星期一, 12月 06, 2010

[Java] Java如何讀取與寫入properties file Reading and Writing a Properties File

Properties properties = new Properties();
try {
properties.load(new FileInputStream("filename.properties"));
} catch (IOException e) {
}

// Write properties file.
try {
properties.store(new FileOutputStream("filename.properties"), null);
} catch (IOException e) {


上面寫法路徑一直讓我讀不到,採用package path是正確可以讀到的

資源的package path:local.my.properties
String repositoryLocation = null;
// create an instance of properties class
Properties props = new Properties();
URL url = Thread.currentThread().getContextClassLoader().getResource("local/my.properties");
try {
props.load(url.openStream());
// props.load(in);
repositoryLocation = props.getProperty(propertyName);
System.out.println("property:" + repositoryLocation);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return repositoryLocation;

後記:2012/03/22
使用以上作法會造成to many file open的議題產生(開檔後未關檔),不應該每要一個屬性就開properties檔案一次。可參考以下解法:
loading properties file from java package
When loading the Properties from a Class in the package com.al.common.email.templates you can use
Properties prop = new Properties();
InputStream in = getClass().getResourceAsStream("foo.properties");
prop.load(in);
in.close()
(Add all the necessary exception handling).
If your class is not in that package, you need to aquire the InputStream slightly differently:
InputStream in = getClass().getResourceAsStream("/com/al/common/email/templates/foo.properties");
Relative paths (those without a leading '/') in getResource()/getResourceAsStream() mean that the resource will be searched relative to the directory which represents the package the class is in.
Using java.lang.String.class.getResource("foo.txt") would search for the (inexistent) file/java/lang/String/foo.txt on the classpath.
Using an absolute path (one that starts with '/') means that the current package is ignored.

Reference:
Java Properties file examples

[Asp.Net] 将截断字符串或二进制数据。 语句已终止。

将截断字符串或二进制数据。语句已终止。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.Data.SqlClient.SqlException: 将截断字符串或二进制数据。
语句已终止。


今天page執行sp產生的以上的錯誤訊息(架在簡體的機器上Orz),原來是sp裡面插入暫存table所宣告的欄位長度過小而引起的錯誤。

星期日, 12月 05, 2010

[Asp.Net] URL Rewrite 懶人包心得

記錄使用rewrite相關問題解法。
最後使用免費的套件來ISAPIRewrite處理
(如有其他需求可參考這篇Tip/Trick: Url Rewriting with ASP.NET )
不過順利解決完rewrite的問題後。
又遇到二個問題需要處理lol~不過解法都在找到的資料裡面,
以下只是記錄一下流程跟心得:)

星期五, 12月 03, 2010

[CSS] 解決div無法滿版的問題

修正DOCTYPE xhtml DIV無法滿版的問題,請加入以下語法。
html, body { margin: 0; padding: 0; height: 100%; border:none; }
之後的div內的heigth:100%就可以正常

Reference:
TIPS-Get 100% Height in XHTML

星期三, 12月 01, 2010

A Coder’s Guide to Writing API Documentation

A Coder’s Guide to Writing API Documentation

Peter Gruenbaum

Ever been in a situation where your manager asks you to write documentation for the APIs that you developed? Let’s face it, if you’re like most developers, you love to code and hate to write. Furthermore, writing takes time away from critical tasks you need to do, such as feature development and bug fixing.
It’s no surprise that API documentation often ends up being frustrating and confusing for the reader—it rarely gets the attention it deserves.
This article is a guide on how to write API documentation. I’ll describe the most important components of API documentation and provide some suggestions about how to make it effective. I’ll also give you some hints for creating good overviews, sample code and reference material, including where you should focus your time and attention to get the best effect.

星期二, 11月 30, 2010

[ZK] ZK Ajax Framework

最近專案需求使用JAVA EE來開發,評估之後決定選用ZK Framework來作為前端UI設計,感覺很類似.net的元件,有很多現成的componets可以使用。重點是台灣軟體公司所開發的,一定要支持一下國貨。

星期一, 11月 29, 2010

[JSP] include(import) file with parameter

2. Include Directive 載入指令
include 指令
在編譯時期包括(include)另一個網頁,或是在執行時期包括另一個網頁,是一種靜態的指定方式,而不能傳送參數,使用指令元素include的對象通常是一個靜態網頁。

<%@page contentType="text/html; charset=big5"%>
<%@include file="header.inc"%>
<H1><B>include示範</B><H1>
<%@include file="foot.inc"%>

<%@ include %> v.s. <jsp:include>

<%@ include %> 主要是include靜態網頁
包含的文件視為同一份文件,被include的頁面裡面所宣告的變數,可以被主頁面直接拿來引用。
例如說在a.jsp 定義String a="aaa";
在b.jsp用<%@ include %> 把a.jsp 包含進來後,可視a.jsp跟b.jsp為同一份,所以不用再宣告String a(再宣告會有錯誤),可直接用a = "abcc";

<jsp:include> 可以include 動、靜態網頁
使用<jsp:include> 則不行,需透過<jsp:param......的方式傳參數才可被引用,承上例,如果用<jsp:include> 包含a.jsp,若直接打a = "abcc";,肯定出錯,因為他不把a.jsp跟b.jsp視為同一分文件

JSP 學習_3_語法 Directive Elements 指令元素

星期日, 11月 28, 2010

[JSP] JSP Tag Library in Eclipse

今天在要自訂 JSP Tag Library無法正確的import javax.servlet.jsp.tagext.*;
記得把安裝tomcat裡面的lib目錄,將 jsp-api.jarservlet-api.jar加到你專案的
WEB-INF/lib目錄下。
 ps:請不要將lib內在自訂子目錄來分類你的jar,會讀不到jar

星期四, 11月 25, 2010

[JSP] JSTL (JavaServer Pages Standard Tag Library 1.1) JSP標準標籤函式庫

JSTL提供的標籤庫分作五個大類:

[JSP] EL(Expression Language)

EL:變數
屬性範圍 在EL中的名稱
Page        pageScope
Request   requestScope
Session   sessionScope
Application applicationScope

PS:
1自動搜尋範圍 page->request->session->application
2 ${}在jsp 2.0中是特殊字元,JSP容器會自動將它當成EL來執行,因此假若要列印${}時,需在$前加上\,如:\${XXXXXX}

[Eclipse] Import & Export *.jar library

最近在新建的 eclipse專案匯入其他專案的jar檔時,常常會發生path錯誤無法編譯的問題。
找了一下其他人的解決方案,不過目前採用UserLibraries跟 Web-INF/lib裡面都有引入需要的jar,好像才不會有問題。

星期三, 11月 24, 2010

[Eclipse] 快速鍵

 Eclipse 快速鍵 佛心大整理:

The server does not support version 3.0 of the J2EE Web module specification

今天遇到在windows剛裝好eclipse執行測試的專案時,
在設定Servers遇到以下錯誤:

The server does not support version 3.0 of the J2EE Web module specification

原來新增的專案用的是Tomcat 6.0,jdk都是用的1.6
而Tomcat 6.0最多支持Servlet 2.5

解决如下:

在專案根目錄下有一個.settings的目錄下,找到以下文件
org.eclipse.wst.common.project.facet.core.xml文件
内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<fixed facet="jst.web"/>
<fixed facet="wst.jsdt.web"/>
<fixed facet="java"/>
<installed facet="java" version="1.5"/>
<installed facet="jst.web" version="3.0"/>
<installed facet="wst.jsdt.web" version="1.0"/>
</faceted-project>

把<installed facet="jst.web" version="3.0"/>改為 <installed facet="jst.web" version="2.5"/> 

星期二, 11月 23, 2010

[Eclipse] WINDOWS 設定 JAVA 環境變數

環境變數若有需要設定,建議是設定在 "系統變數":
PATH=C:\Program Files (x86)\Java\jdk1.6.0_XX\bin;
CLASSPATH=.;C:\Program Files (x86)\Java\jdk1.6.0_XX\lib;C:\Program Files (x86)\Java\jdk1.6.0_XX\lib\tools.jar;


Tip1:win7 啟動 tomcat 請將系統的JRE或JDK下的\bin\把msvcr71.dll手動copy到tomcat下的\bin\


Tip2:目前整合的IDE介面大多不需要額外設定環境變數 

星期一, 11月 22, 2010

WebDAV (Web Distributed Authoring and Versioning) using .Net C#

WebDAV(Web Distributed Authoring and Versioning)為一個HTTP/1.1通訊協定的延伸建議RFC-2518,讓用戶端使用者可以透過網路來進行網頁內容的編輯工作。
WebDAV透過HTTP/1.1通訊協定標準,提供簡單的檔案輸入/輸出(simple File I/O)的功能,包含:
  • 建立、修改、刪除檔案及瀏覽目錄和檔案。
  • 讀取檔案與目錄的屬性(properties)。
  • 簡單的檔案鎖定。
WebDAV提供幾個新的HTTP指令,包含:
  • GET:讀取WebDAV目錄下的檔案內容。
  •  PUTPOST:傳送檔案內容到伺服器WebDAV目錄下。
  •  PROPFINDPROPPATCH:讀取、設定檔案屬性。
  • COPYMOVECOPY複製目錄、或檔案,MOVE移動檔案。限於同一個WebDAV目錄操作。COPY時若無此路逕時會自動產生,COPY複製範圍也包括其子目錄。
  • MKCOL:建立一個目錄。
  • DELETE:刪除一個檔案或目錄。
  • LOCKUNLOCK:鎖定檔案、解除檔案鎖定。
  • SEARCH:使用SQL語法搜查檔案內容,可使用全文檢索,僅適用於Exchange 2000 Server共用資料匣。 
安裝Windows 2000IE 5、或Office 2000的用戶端電腦,具有權限的使用者,就可以針對IIS的虛擬目錄來發行、鎖定、管理Web的資源,將文件發行至Web伺服器,及在Web目錄中處理檔案,包含:
  • 移動、複製檔案:擁具權限的使用者可以在WebDAV目錄中移動、複製檔案。
  • 修改檔案:擁具權限的使用者可以讀取、修改寫入檔案的內容。
  •  鎖定檔案:多位使用者可以同時讀取同一個檔案,讀取時會將檔案鎖定,因此同時只有一人可以修改同一個檔案。
  • 搜尋檔案:連線到WebDAV目錄後,就可以搜尋WebDAV目錄中的檔案與內容,譬如搜尋到所有由Jack所建立的檔案,或者搜尋所有含有IIS關鍵字的檔案。



Reference:
WebDAV .NET
WebDav and Outlook Appointments in .NET
網際網路新通訊協定---WebDAV

星期一, 11月 15, 2010

[WordPress] 蒐集

研究wordpress找的相關文章記錄。

Reference:
用query_posts列出特定範圍文章 (2)語法 | WordPress不用插件直接實現五種文章代碼
wordpress code – wp_list_pages() 網誌分頁
[WordPress] 自己做友情隨機連結頁面
WordPress外掛【WP Page Numbers】分頁導航、內建5種樣式任君選擇
Codex:Creating a New Page
Codex:Creating a User Page

 

[WordPress] 基本語法擷錄 (轉)

(一)WordPress基本模板文件
一套完整的WordPress模板應至少具有如下文件:
style.css : CSS(樣式表)文件
index.php : 主頁模板
archive.php : Archive/Category模板
404.php : Not Found 錯誤頁模板
comments.php : 留言/回覆模板
footer.php : Footer模板
header.php : Header模板
sidebar.php : 側欄模板
page.php : 內容頁(Page)模板
single.php : 內容頁(Post)模板
searchform.php : 搜索表單模板
search.php : 搜索結果模板
當然,具體到特定的某款模板,可能不止這些文件,但一般而言,這些文件是每套模板所必備的。

星期日, 11月 14, 2010

[C# WinForm]Notifyicon with contextmenu and no form

實作沒有表單的contextMenu
using System;using System.Windows.Forms;
using System.Threading;using System.Drawing;
namespace WindowsApplication9
{   static class Program   {
      [STAThread]      static void Main()
      {        
         Application.EnableVisualStyles();         
         Application.SetCompatibleTextRenderingDefault(false);         
         NotifyIcon notifyIcon1 = new NotifyIcon();                
         ContextMenu contextMenu1 = new ContextMenu();        
         MenuItem menuItem1 = new MenuItem();
         contextMenu1.MenuItems.AddRange(new MenuItem[] { menuItem1 });
         menuItem1.Index = 0;
         menuItem1.Text = "E&xit";
         menuItem1.Click += new EventHandler(menuItem1_Click);
         notifyIcon1.Icon = new Icon("app.ico");
         notifyIcon1.Text = "Form1 (NotifyIcon example)";
         notifyIcon1.ContextMenu = contextMenu1;
         notifyIcon1.Visible = true;         Application.Run();
         notifyIcon1.Visible = false;
      }
      private static void menuItem1_Click(object Sender, EventArgs e)
      {         Application.Exit();
      }
   }
}
Reference: Notifyicon with contextmenu and no form

[VS Studio] vshost.exe 是做什麼用啊

接下來的問題是,如果程式要出貨想關閉這個功能要怎麼做呢?
只要選取 Project | Properties | Debug,將 Enable the Visual Studio hosting process 選項前的鉤鉤取消即可。

Reference:
[C#]一堆 ***.vshost.exe 是做什麼用啊
裝載處理序 (vshost.exe)

星期日, 11月 07, 2010

[Java] Hello World with Ant

本篇是一個Ant的基本教學,試用於初學者。
只是把Apache Ant User Manual-HelloWorld with Ant裡的範例重新記錄下來而已。
有樣版以後寫起ant會比較方便:)

[C# WinForm]在程式中開啟 檔案總管

    EXPLORER.EXE [/n][/e][,/root,][[,/select],

    /n:會針對每一個選取的項目,以單窗格 (我的電腦) 檢視方式開啟一個新視窗,
    即使新視窗與已開啟的視窗重複
    也一樣。
    
    /e:會使用 Windows 檔案總管檢視。Windows 檔案總管檢視十分類似
    Windows 3.x 版中的檔案管理員。請注意,預設檢視為
    開啟檢視。
    
    /root,:會指定所指定之檢視的根層級。預設 是使用標準命名空間根目錄 ( 桌面)。所指定的就是顯示器的根目錄 。  /select,:會指定成為初始焦點的資料夾 。如果使用 "/select",則會開啟
    上層資料夾,並選取所指定的物件。
    • "My Computer" highlighted in left side with all drives visible but not expanded and C: highlighted in right side: %SystemRoot%explorer.exe /e,/select,c:
    • Desktop highlighted and nothing expanded: %SystemRoot%explorer.exe /e,/n,/select,/root,c:
    • All drives visible and the system drive highlighted and expanded in full screen: %SystemRoot%explorer.exe /e,/select
    • All drives visible and the system drive expanded in small screen: %SystemRoot%explorer.exe /e,/select,%systemroot%
    • Only Windows Directory visible highlighted and expanded: %SystemRoot%explorer.exe /e,/root,%systemroot%
    • All drives visible but only C: highlighted and expanded: %SystemRoot%explorer.exe /e,c:
    • Nothing expanded and My Computer highlighted in right side: %SystemRoot%explorer.exe /n,/e,/select,
    • Opens the Windows folder as a folder: %SystemRoot%explorer.exe %systemroot%
    • Opens as "My Computer": %SystemRoot%explorer.exe %systemroot%,
    • This opens the Desktop folder with "My Computer" highlighted: %SystemRoot%explorer.exe %systemroot%,/select,
    • "Desktop" highlighted in the left side and no drives visible:
      %systemroot%explorer.exe /e,/root,::{20D04FE0-3AEA-1069-A2D8-08002B30309D},/select
    • "My Computer" highlighted in left side and all drives visible but none expanded:
      %systemroot%explorer.exe /e,/root,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
    • "Desktop" in left side highlighted and "My Computer" highlighted in right side and no drives visible:
      %systemroot%explorer.exe /e,/select,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}

    Reference:
    在程式中開啟 檔案總管 (Using C#)
    如何開啟檔案總管在想要的目錄.

    星期五, 10月 29, 2010

    [Asp.Net] MasterPage ContentPage UserContrl 操作

    MasterPage 取得 ContentPage 內的 Control
    MasterPage 取得 ContentPage 內的 UserControl

    反之

    ContentPage 取得 MasterPage 內的 Control
    ContentPage 取得 MasterPage 內的 UserControl

    [Java] Create a coutom tag

    Reference:
    [JAVA] Tag 自訂標籤簡介

    [SVN] 轉貼: SVN in ubuntu

    SVN 功能介紹

    SVN安裝: $ sudo apt-get install subversion

    [Ant]Ubuntu using Ant Note

    1.Installation
    $apt-get install ant

    2.checked ant version
    $ant -version

    you should see
    Apache Ant version 1.7.1 compiled on July 2 2010


    3.ant build
    $ant

    if you didnt create build .xml , you should see
    Buildfile: build.xml does not exist!
    Build failed

    星期日, 10月 24, 2010

    [WebService C#]Call a Java WebService using WCE 3.0 and C#

    今天使用.net呼叫java WebService,學習到了動態叫用WebService的需求(待改良XD),不過又遇到另一個ws-seculity的error,原來還需要裝Web Service Enhancement 3.0來達到更安全的叫用WebService。

    Rewrite Module

    首先先在ISAPI 引入IIRF.dll

    在當前目錄創見檔案iirf.ini

    範例
    RewriteEngine ON
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^/([A-Z0-9]+).html$ /ShowExam.php?xid=$1

    星期三, 10月 20, 2010

    Toshiba M11 Drivers for Windows 7

    拿到公司新配的Toshiba筆電,本來以為是Thinkpad的,小失望了一下。
    用了二天之後真是大失望,很多小細節都考慮不周到呀。
    只設計二個usb孔是啥小?

    有在找驅動的朋友就到以下這二個網址下載吧XD。官方提供的驅動真不完全。
    Reference:
    Toshiba Tecra M11 Drivers For Windows 7
    Toshiba Tecra M11 Drivers For Windows 7 (64 Bit)

    星期六, 10月 16, 2010

    FaceBook Api 筆記

    最近有專案需使用FACEBOOK API,把學習的資料記錄在這篇文章中。
    透過Google大神也找到人家整理不錯的筆記 :)Facebook API宅學習。
    這次專案是使用php script,需要的人可以參考 PHP-SDK Sample

    星期四, 10月 14, 2010

    [PHP] 初探 php

    如題,剛開始測php,從簡單的mysql測試開始Orz

    檢查頁面是否有Session
    //放在頁面的最上端
    <?session_start();>
    
    清除頁面Session
    <?
    //將session清空
    unset($_SESSION['username']);
    echo '登出中......';
    >
    


    [PHP] IDE 工具

    開始寫php的專案,查詢一下有啥好用的IDE開發環境,最好還是選用Eclipse for PHP
    朝Free下手。

    星期六, 10月 02, 2010

    [Asp.Net] Pinging using asp.net

    要使用ping類別之前,需引入using System.Net.NetworkInformation;

    public class SitePinged : System.Web.Services.WebService {
    
        public SitePinged () {
    
            //如果使用設計的元件,請取消註解下行程式碼 
            //InitializeComponent(); 
        }
    
        [WebMethod]
        public string Ping(string site)
        {
            Ping wsPing = new Ping();
            PingReply wsPingReply = wsPing.Send(site);
            return wsPingReply.Status.ToString();
        }
        
    }
    

    星期日, 9月 26, 2010

    星期六, 9月 25, 2010

    資訊職稱 Orz

    SA : System Analysis 系統分析
    SE : System Evaluation 系統評估
    SD : System Design 系統設計
    ps:通常需經過SA/SE後才會到SD階段。 

    星期四, 9月 23, 2010

    [MS-SQL] Join

    面試常會問到的SQL Join 觀念,覆習一下唄。

    [C# Winform] Socket Survey


    根據MSDN所寫:
    執行緒不是背景執行緒就是前景執行緒。
    背景執行緒和前景執行緒相同,唯一差別在於背景執行緒不會防止處理序終止。
    一旦終止屬於處理序的所有前景執行緒之 後,
    Common Language Runtime 就會結束處理序。
    剩下的所有背景執行緒則會在尚未完成之前全部停止

    C# Multi threaded socket programming 
    The C# Multi Threaded Socket Program has two sections.
    Reference:
    C# WinForm Socket

    Windows 管理規範 (WMI ,Windows Management Instrumentation)

    Reference: 
    C# WMI 取得硬碟名稱、類型

    A Simple Guide to WMI Provider

    星期四, 8月 19, 2010

    [Asp.Net] 清除跨網域的cookie

    實作SSO機制遇到登出時需清除跨網域的cookie的解決方法,
    請參閱will寶哥文章 鬼打牆事件之『ASP.NET 無法刪除 Cookie 的問題』 

    摘錄重點如下:
    • 若要清除跨 Domain 的 Cookie 必須清除兩次,例如說使用者在 www1.domain.com 要執行登出動作,必須要先將 Domain 為 www1.domain.com 的 Cookie 給清除掉,在接著將 Domain 為 .domain.com 的這個 Cookie 清除掉。
    • 因為這兩個 Cookie 為「同名」(主網域與子網域),全部都叫做 Token(will哥範例的cookie名稱),所以無法在一個 HTTP Request 中清除掉兩個同名的 Cookie,所以必須要在不同的兩個 HTTP Request 中個別刪除不同 Domain 的 Cookie。 

    星期二, 8月 17, 2010

    [Blogger HACK] 使用 SyntaxHighlighter 排版程式碼

    由於常常會使用copy & paste大法來使用之前在blog貼的程式碼範例,
    不過先前都沒排版,
    看起來非常不順眼,
    今天特地透過Google大神找到這個 SyntaxHighlighter 程式碼排版工具,
    如果想知道怎麼使用的話,可以參考這位佛心人士CraftyFella's Blog
    Syntax Highlighting with Blogger Engine教學文。

    如果你看不習慣英文的話,就照下面做就好。

    [Asp.Net] Dictionary Serializable and DeSerializable

    解決 Dictionary 無法序列化的物件

    [MS SQL] 跨資料庫查詢

    主機同一台,但資料庫名稱不同時的查詢方式。

    SELECT * FROM 資料庫名稱.dbo.TableA ta  

    INNER JOIN 資料庫名稱.dbo.TableB tb ON ta.xx=tb.xx

    星期一, 8月 09, 2010

    [Asp.Net] 序列化與反序列化

    蒐集一下序列化相關的知識:
    ISerializable 介面

    [Asp.Net] Export Excel

    透過元件匯出csv檔
    TIPS-Export GridView To Excel

    一些參考的連結
    如何用 C# 將資料匯出到 Excel 

    使用Excel XML 的解決方法
    Export a DataSet to Microsoft Excel without the use of COM objects
    Introduction to Excel XML Part 1: creating a simple table

    [Finance] 正逆價差

    期貨價格減去現貨價格
    如果得出為正值,便是「正價差」
    所得出的為負值,則為「逆價差」

    關於創業,你必須知道的13件事

    1. 找到好的共同創辦人(Pick good cofounders)
    共同創辦人對於創業團隊來說,就跟你在找房地產時考慮地段、地點一樣重要。你可以改變房屋的裝潢、擺設,但你卻改變不了房子的所在地點。在創業團隊中也是,你的想法、創意是可以很輕易改變的,但把你的共同創辦人換掉卻非常困難。 事實上,每一個創業團隊的成功,幾乎都是團隊創辦人在團隊中發揮了作用。

    筆者兩次參與創業團隊的經驗,我們都堅信一個信念:「只要這群兄弟還在,我們一定能做出什麼(do something big)」,創業沒有成功不等於失敗,創業沒有成功而直接放棄了才真的是失敗;只要團隊還在,或許只是想法錯了、方法錯了、對象錯了,但如果人是不對的,本質上就已經難以改變。

    從37 Signals可學到的37個創業心法

    1) 成就大事業不是有個產品或服務就成,而是有自己看事物的角度。

    2) 做計畫是讓你對你無法掌控的感覺可掌控的活動。(讓你自我感覺良好)

    星期六, 8月 07, 2010

    [Asp.Net] JSON 序列化類別列出

    很實用的文章,可以幫你自動產生Json字串在.Net的物件程式碼要怎麼寫。
    以下為原文連結
    CODE-自動產生對應Javascript物件的.NET類別

    [jQuery API] Jquery select 操作

    without using any extra plugins, 
    var myOptions = {
        val1 : 'text1',
        val2 : 'text2'
    };
     
    $.each(myOptions, function(val, text) {
        $('#mySelect').append(
            $('<option></option>').val(val).html(text)
        );
    }); 
     
    Reference:
    jQuery對select的操作(魚乾筆記本)
     

    星期四, 7月 29, 2010

    [Asp.Net] 跨網站登入 Single Sign On (SSO)

    目前的case暫以player大大提供的做法。

    1.跨網站單一登入(Single Sign On)的作法概念 by topcat

    小喵的方式是透過SQL來當作媒介,假設小喵要從WebA跳到WebB。
    首先要準備一個兩個應用程式都能夠存取的資料庫。然後設計一個資料表來處理。這個資料表有以下幾個欄位
    1. GUID:由NewId()產生出來類似【504B1790-E93A-4445-B262-E73A113BF336】這樣格式的資料
    2. UserId:WebB的帳號,當然WebA與WebB可以用相通的帳號,或者是透過員工代號取得WebB的帳號
    3. TimeOut:過期時間,產生該筆資料的時間+2分種。也就是從WebA到WebB的過程,小喵估計不會超過2分鐘,時間過期後該筆資料就沒用了。
    接著就是運作的方式
    步驟如下
    1. WebA點選轉入WebB
    2. 寫入1筆過程資料,例如:5ED095B8-350D-42C3-953B-9C53DED54AFD,topcat,20080402165823
    3. WebA Submit GUID給 WebB
    4. WebB承接到GUID取回資料,並判斷現在時間沒有大於20080402165823
    5. 如果4.找不到,顯示錯誤並拒絕登入
    6. 如果4找到,進行登入程序
    7. 刪除該GUID資料
    2.跨網站登入機制 - by player
    1.把你的登入用的相關欄位, 先用1個class先定義好
    2.在Global.asax 中, 定義一個 static public 的變數, 當作是放資料的容器
    請自行參照 System.Collections.Generic.Dictionary<> 與你在1所自訂的class
    3.WebService 大概做5個公開的函式
    a.登入
    b.驗証是否已登入
    c.登出
    d.Set共用變數
    e.Get共用變數

    a.是傳入帳密, 登入成功時, 傳回GUID, 失敗時返回相關的提示訊息
    b.是傳入GUID, 判斷是否已登入
    d與e是給跨網站時, 變數互通使用

    3.ASP.NET Single Sign-On
    採用 .Net的表單驗證票證(Forms Authentication Tickets)的加密、解密以及驗證

    一些背景知識參考:
    鬼打牆事件之『ASP.NET 無法刪除 Cookie 的問題』 
    解釋 Cookie 的特性 
    深入瞭解 GUID 與為什麼要用 GUID(Globally unique identifier)
    web service 介紹 
    Dictionary in .NET C#
    C#,利用Mutex實現應用程式的單實例運行

    [Asp.Net] 如何使用javascript 控制 .net 驗證控制項

    今天遇到了一個需求,起因是因為使用textbox搭配jquery datepicker元件驗證控制項時,
    使用IE8瀏覽時,會產生javascript錯誤訊息(使用1.3.2,改用1.4.2不會有這個問題)
    於是換了一個方法來直接避掉這個錯誤,於是又新增了第二個textbox,並利用css設定成style="visibility:hidden"。

    星期三, 7月 21, 2010

    [Asp.Net] 使用DataView RowFilter 過濾 Datatable

    最近在巢狀式繫結時,常常會重覆過濾每次要繫結的資料列數,簡單使用DataView RowFilter
    就可以達到SQL Where效果,找時間再補上linq的方法。

    [SQLite]Firefox SQLite Manager

    利用Sqlite Manager來測試iphone裡面一些apps使用的資料表並將它匯出成csv文字檔(另外匯出*.sql的執行會是亂碼XD),
    由於excel直接開啟這個csv匯出的這個檔案,會因為excel不支援utf8而亂碼,
    所需先需要先啟動excel後,利用外部匯入這個資料來指定utf8編碼格式開啟,就可以順利打開:
    點選資料->開啟文字檔->設定檔案原始格式

    星期二, 7月 13, 2010

    [Asp.Net] Json 序列化及反序列化

    今天幫學弟測試了一下 Json 序列化及反序列化的簡單範例,也用了平常很少使用的泛型。
    記錄一下以供日後參考。 畢竟AJAX常會用到json來傳輸資料。

    使用以下範例需注意事項:
    1.加入參考組件:組件 System.Runtime.Serialization (在 System.Runtime.Serialization.dll 中)
    2.序列化的物件格式可自行修改自已自訂的格式
    3.物件變數的命名需跟json的宣告名稱一致

    星期日, 7月 11, 2010

    [Asp.Net] ListView DataPager SetPageProperties換頁

    在listview要指定跳頁時,並不是直接將指定的頁數丟進去,
    因為頁碼並不是listview參數所要的row起始索引的話,
    因此才會跳錯頁的!!

        /// 指定跳頁
        public void JumpPage(int jumpPage)
        {
            //算出指定頁的起始索引值
            int lowerBand = (jumpPage - 1) * this.dataPager.PageSize;
            this.dataPager.SetPageProperties(lowerBand, this.dataPager.PageSize, true);
        } 
    

    星期五, 7月 09, 2010

    星期一, 7月 05, 2010

    [Jqeury Plugin] 影像框選 Jcrop


    Jcrop » Examples and Demos

    [ASP.Net] 使用參數和 ObjectDataSource 控制項

    使用參數和 ObjectDataSource 控制項
    ListView + DataPager 在不使用 LinqDataSource 時會有問題

    Git 學習資源

    好用的Git分散式版本控制工具。團隊開發畢備的好幫手。


    Ubuntu Enviornment:
    $apt-get install git-core gitk # in ubuntu

    step1:create repository in server
    /var/git/repos                                #server repos path
    $mkdir serverproject #建立你的目錄
    $cd serverproject
    $git --bare init --shared                #建立GitProjectName的repository

    step2:create repository in client
    $vi .gitconfig #your profile
    [user]
            name = kenwctsai
            email = bigdstut@gmail.com


    $cd clientproject#到你的專案目錄下
    $git init #git metadata

    step3:commit to server (之後更新code只要用這就好)
    $git add . #git新增檔案
    $git commit -m 'your commit msg' #commit to repos server

    其他輔助的功能:


    檢查檔案狀態
    $git status

    檢查log
    $git log

    Reference:
    1. Pro Git
    2. A tour of git: the basics
    3. http://git-scm.com/
    4. Git-shape(Git for .NET)
    5. Git 初學筆記 - 指令操作教學
    6. 我愛GIT(.pdf) jserv
    7. Git Study
    8. Git 版本控制系統(2) 開 branch 分支和操作遠端 repo.




    安裝工具
    1. msysgit-git for windows
    2. TortoiseGit The coolest Interface to (Git) Version Control

    星期日, 7月 04, 2010

    [Asp.net] ListView ItemDataBound下抓取樣版的欄位值

    剛好需要在ItemTemplate 按下編輯按鈕時,設定下拉式選單的值為ItemTemplate Lable繫結的值。
    只要在ItemDataBound判斷是否為edit mode.做以下記錄

    [Asp.Net] 資料繫結控制項的相關事件關係與抓取

    使用資料擊結控制項時常在驅動更新、刪除事件時常常需要擷取元件的值來做相關的處理(常常很用到的問題!!),以前都習慣在print出元件的位置(註解部份),再找出相對的值,不過其實用FindControl這個方法就可以簡單達到我們的需求了

    星期五, 6月 18, 2010

    [Asp.Net] Posting form data from ASP.NET page to another URL

    Posting form data from ASP.NET page to another URL
    舊的處理方法,目前執行測試有錯

    [ASP.NET] 關於IsCrossPagePostBack,PostBackUrl(如何以post方式轉到另一個aspx) 

    .net 2.0提供的新處理方法。

    [JQuery UI] Tab

    $("#tab").tabs({ ajaxOptions: {  async: true},
            select:function(event,ui){
                 alert(ui.index);//tab索引,從0開始
                 alert(ui.options);//啟動options內容
                 alert(ui.tab);//被選取的tab連結
                 alert(ui.panel);//被選取的tab的顯示內容
            },
            spinner: ""
        });
     

    [Javascript] Image onerror event

    使用onerror處理圖片不存在的小方法
    <img src="bigdstut.gif" onerror="javascript:this.src='temp.gif'" />

    使用Jquery來綁定onerror事件
    $(document).ready(function(){
        $("img").bind("error",function(){
            $(this).attr("src","images/icon/noImg.jpg");
        });
    });

    [MSSQL] CASE 判斷欄位null值

    今天需要將計算時間欄位並判斷欄位是否為null,最後回傳bool值,,來給頁面元件繫結bool值,但發生一些錯誤,不過查一下資料還是順利解決,記錄一下,以便日後參考。

    星期六, 6月 12, 2010

    [Asp.Net ] Javascript 觸發 .NET驗證控制項 的方法



    剛好需要用到.Net驗證控制項來處理欄位驗證的問題,
    但是又動態的再按鈕上加上一些js效果(如遮罩),
    卻讓按鈕先postback到後端,才顯示.Net驗證控制項的效果,
    所以需要使用js先來觸發.Net驗證控制項,
    找到這位仁兄提供的解答
     Reference:[ASP.NET] Javascript偵測.NET驗證控制項的方法


    在Script中加入funcrion Page_ClientValidate_AllPass(名稱可換)
    參數validationGroup.NET驗證控制項對應的群組名稱 (string型態)
    function Page_ClientValidate_AllPass(validationGroup) {
       if (typeof(Page_Validators) == "undefined") { return true; }
       var i;
       for (i = 0; i < Page_Validators.length; i++)
       {
          var val = Page_Validators[i];
          val.isvalid = true;
          if ((typeof(val.enabled) == "undefined" || val.enabled != false) && IsValidationGroupMatch(val, validationGroup))
       {
             if (typeof(val.evaluationfunction) == "function")
       {
                val.isvalid = val.evaluationfunction(val);
             }
          }
       }
       ValidatorUpdateIsValid();
       return Page_IsValid;  
    }
    後台按鈕事件範例如下,表示通過「Save」的驗證控制項時,會觸發if的{...}事件
    this.saveButton.Attributes["onclick"] += "if(Page_ClientValidate_AllPass('Save')) { ... }";

    星期五, 5月 14, 2010

    Jquery annotation plug in

    http://code.google.com/p/jquery-image-annotate/
    A jQuery Image Annotation plugin that can create Flickr-like comments on images embedded in web pages.
    This plugin works with jQuery 1.2.6 and 1.3.2.
    Full details on this plugin's usage can be seen in this blog post. Your can also see a live demonstration of the plugin.

    星期一, 5月 10, 2010

    星期五, 5月 07, 2010

    [Tool] JSON Viewer

    現在ajax常會用到json作為資料格式,有個工具來檢查json格式是否有錯誤是非常方便的。 
    JSON Viewer
    Project Description
    The JSON Viewer package is a set of 3 viewers available in the following flavors:
    1. A standalone viewer - JsonView.exe
    2. A plugin for Fiddler 2 (http://www.fiddler2.com/) - FiddlerJsonViewer.dll
    3. A visualizer for Visual Studio 2005 - JsonVisualizer.dll

    The viewer supports plugins to allow you to customize the way JSON objects are displayed. Sample plugins
    are provided within the source.

    [Javascript] Date Function

    剛好專案需要一些javascrip時間格式的判斷,上了Google大神找到這個資源。

    Date Function Description:
    These functions are very useful when dealing with any type of date fields.
    They use the same format strings as the java.text.SimpleDateFormat class, with a few minor exceptions.
    Functions include:
    • isDate() - Check if a date is valid
    • compareDates() - See if one date is greater than another
    • formatDate() - Output a Date() object in any format
    • getDateFromFormat() - Parse a date string and return time in ms representing date object

    Reference : Date Functions

    星期一, 5月 03, 2010

    轉Draren總結的ollydbg v1.09d 中文版使用說明

    一點一滴的積累,也就會了.

    之所以選項ollydbg

    1.我的os是winXP,無法使用trw2000,而softice裝了多次均未成功,還顯示藍色當機多次.鬱悶.

    2.友好的gui界面,不像softice.可以邊幹活邊聽歌,不像softice,把整個os都掛起了.多用兩次,連時間都不知道了.

    3.強大的記憶體檢視功能,再不用什麼-d了,而且跳轉方便,爽!一目瞭然.

    4.強大的右鍵功能表功能

    ollydbg的界面:

    功能表:

    文件:
    1.其中包括該功能表的下部有上次開啟的紀錄,該紀錄儲存有上次未清除的斷點.
    2.附加.對付那些Anti-Debug程序.先執行程序,再執行od,文件-->附加.
    檢視:
    1.執行模組(Alt+E),檢視程序使用的動態連接庫
    2.檢視斷點.Alt+B
    偵錯:
    1.執行(F9)載入程序後,執行!
    2.暫停(F12)
    3.單步進入(F7)遇見CALL進入!進入該子程序.
    4.單步跳過(F8)遇見CALL不進去!
    5.執行到返回(ALT+F9)就是執行到該子程的返回語句

    ollydbg的16進制編輯功能.類似與hiew,hex workshop

    檢視-->文件

    二進制文件編輯功能.檢視-->文件,開啟的文件是二進制顯示.選要改變的機器指令,空格,修改,右擊-->儲存.

    ollydbg的四個區域

    左上角是cpu視窗,分別是位址,機器碼,彙編程式碼,註釋;註釋增加方便,而且還能即時顯示函數的使用結果,返回值.
    右上角是暫存器視窗,但不僅僅反映暫存器的狀況,還有好多東東;雙按即可改變Eflag的值,對於暫存器,指令執行後發生改變的暫存器會用紅色顯示.
    cpu視窗下面還有一個小視窗,顯示當前操作改變的暫存器狀態. 不錯;
    左下角是記憶體視窗.可以ascii或者unicode兩種方式顯示記憶體訊息;
    右下角的是當前堆疊情況,還有註釋啊.

    F3選項開啟程序.

    使用

    F9執行程序.

    下斷點:

    1.對函數下下斷點

    在程式碼區右擊-->搜尋-->當前模組中的名稱(ctrl+N),在跳出來的對話視窗中選項需要下的斷點函數.->右擊->搜尋匯入參考(enter),按F2下斷點.如果有多個地方使用了該函數就這樣操作。

    2.在需要的地方下斷點 F2

    增加註釋:

    在程式碼區第四列,右擊-->註釋

    檢視記憶體位址

    右擊記憶體位址列-->前往-->輸入要檢視的記憶體位址

    在函數lstrlen的註釋的上方,有一個變數string,當執行到該函數的時候,string後面會出現lstrlen函數的參數位符串.在實際使用中一般是輸入的字元串.(很好用哦)

    類似的還有lstrcmp,上面有string1,string2能夠顯示將要比較的兩個字元串.

    另外,一般在執行getwindowtext等函數後,右邊暫存器列,eax會顯示函數的返回值,即取到的內容.同時記憶體中也會有顯示.

    在反彙編中選一條指令,如果其中有用到記憶體中的位址,右擊-->在轉存中跟隨-->直接常數
    此時記憶體位址會顯示指令中引用到的記憶體字元

    拷貝功能十分強大.直接選項要拷貝的內容.右擊-->複製-->文件or記事本

    ollydbg的條件斷點可以按暫存器,儲存於器,消息(必須是消息的數位,如wm_command就是111)等等設斷,非常強大,一旦設了之後記錄到文件中,下次restart程序還能用,不用拿筆記,很方便。

    顯示跳轉路進:
    選項-->偵錯設定-->cpu頁-->顯示跳轉的方向,顯示跳轉的路徑,如果跳轉沒有實現則顯示灰色路徑。在cpu視窗中,機器碼的前面顯示">"符號.同時,在cpu視窗下的小縫中會顯示跳轉路徑,從何跳轉而來.右擊-->前往...一般都是條件跳轉,上面的內容就是比較的地方啦。:)

    跟蹤功能:
    選項-->偵錯跟蹤-->跟蹤:設定執行跟蹤的快取大小.越大越好.
    偵錯-->開啟或清除執行跟蹤
    然後我們就可以用CTRL+F11或CTRL+F12開啟「跟蹤進入」和「 跟蹤跳過」了。當我們暫停程序的時候,可以用小鍵碟上的「+」,「-」,「*」來控制跟蹤功能了。
    其中,「跟蹤進入」和執行類似,但是記錄所有指令以及暫存器變化。並且會自動進入所有的CALL中。
    「 跟蹤跳過」和「跟蹤進入」類似,但是不進入CALL
    「+」用來顯示跟蹤緩衝區中的下一條指令
    「-」用來顯示跟蹤緩衝區中的上一條指令
    「*」用來發返回當前指令

    讓OD顯示MFC42.DLL中的函數
    開啟偵錯-->選項匯入庫-->增加-->選項MFC43.LIB加入.重新載入MFC程序,就可以看到call後面的api函數了.

    動態暫停以messagebox為例)
    先執行目標程序,再執行od,選項文件-->附加.在目標程序執行出現對話視窗時,切換至od,F12暫停.

    字元串參考:
    在彙編程式碼區,右擊-->搜尋-->字元參考

    更改二進制文件:

    方法1.檢視-->文件,開啟文件,找到欲修改的偏移,使用機器碼修改,然後右擊儲存文件.缺點是需要使用其他軟體來獲取偏移位址.

    方法2.直接在反彙編程式碼區更改,這時可以使用彙編程式碼更改,不用記機器碼.完了.右擊-->複製到可執行文件-->儲存文件.很是方便哪!

    關於虛擬位址和偏移位址:
    ollydbg果然強大,太強大了,在欲修改的指令處右擊-->複製到可執行文件,彈出視窗中游標所在行即是欲修改的指令所在的偏移位址,右擊-->彙編,直接修改彙編指令,不用記機器碼,又不用虛擬位址到偏移位址的轉換.改完後儲存文件.爽丫!
    olldbg 下怎麼下消息斷點?

    如在softice 中下 BMSG 0084 WM_DESTROY,在olldbg下該怎麼做?

    不如下斷 SendMessage,PostMessage,程序中的消息不一定都經過消息循環。

    Ollydbg下消息斷點的一個方法

    原文:
    SoftIce can trace application messages. And Olly?
    by FuZzYBiT

    SoftIce can trace application messages. And Olly?
    And so does OllyDbg. That』s a very 「hidden feature」. I guess it is sooo useful.
    1. Open program
    2. Names window [CTRL+N in CPU Window]
    3. Find User32.TranslateMessage API
    4. right click/FindReferences
    5. conditional breakpoint [SHIFT+F4]
    6. expression: MSG
    7. Log function arguments: Always
    If you cannot find it, try right click SEARCH FOR-> ALL INTERMODULAR CALLS.
    But if I want to trap a specific message like WM_COMMAND?
    To Log Only WM_COMMAND
    Do it in this fashion:
    1. Open program
    2. Names window [CTRL+N in CPU Window]
    3. Find User32.TranslateMessage API
    4. right click/FindReferences
    5. conditional breakpoint [SHIFT+F4]
    6. Condtion box: MSG==WM_COMMAND
    7. Log function arguments: On Condition
    If you can』t find User32.TranslateMessage API, do the same as above.

    翻譯:

    SoftIce 能夠跟蹤應用程式的消息,那麼OllyDbg呢?
    by FuZzYBiT

    OllyDbg也是可以的,那是一個非常"隱蔽的功能"。它是如此的有用。
    1. 開啟程序
    2. 名字視窗[ 在CPU視窗中按CTRL+N ]
    3. 搜尋 User32.TranslateMessage API
    4. 右擊/FindReferences(搜尋參考)
    5. 下條件斷點 [SHIFT+F4]
    6. 陳述式: MSG
    7. 記錄函數參數:永遠

    如果你不能找到它,試試右擊滑鼠,然後搜尋全部模組中的名稱。
    但是如果我想要捕捉一個特定的消息如WM_COMMAND呢?
    只對WM_COMMAND記錄
    用這個方法做:
    1. 開啟一個程序
    2. 名字視窗[ 在CPU視窗中按CTRL+N ]
    3. 搜尋 User32.TranslateMessage API
    4. 右擊/FindReferences(搜尋參考)
    5. 下條件斷點 [SHIFT+F4]
    6. 條件框:MSG==WM_COMMAND
    7. 記錄函數參數: 條件滿足時
    如果你不能找到User32.TranslateMessage API,像上面那樣做。
    以下指令適用於 OllyDbg 的指令行插件 Cmdline.dll(顯示於程序的插件功能表中)
    聆風聽雨整理
    ===============================================================
    指令行插件支持的指令

    CALC
    判斷陳述式

    WATCH
    增加監視陳述式

    AT
    在指定位址進行反彙編

    FOLLOW
    跟隨指令

    ORIG
    反彙編於 EIP

    DUMP
    在指定位址進行轉存

    DA
    轉存為反彙編程式碼

    DB
    使用十六進制字元格式轉存

    DC
    使用 ASCII 格式轉存

    DD
    轉存在堆疊格式

    DU
    轉存在 UNICODE 格式

    DW
    使用十六進制字詞格式轉存

    STK
    前往堆疊中的位址

    AS
    (AS + 位址 + 字元串)
    在指定位址進行彙編

    BP
    進行條件中斷(有條件的斷點)

    BPX
    中斷在全部使用 (Call)

    BPD
    清除全部使用中的斷點

    BC
    清除斷點

    MR
    記憶體斷點於訪問時

    MW
    記憶體斷點於寫入時

    MD
    清除記憶體斷點

    HR
    訪問時進行硬體中斷

    HW
    寫入時進行硬體中斷

    HE
    執行時進行硬體中斷

    HD
    清除硬體斷點

    STOP
    停止執行程序偵錯

    PAUSE
    暫停執行程序偵錯

    RUN
    執行程序進行偵錯

    GE
    執行和通過例外

    SI
    單步進入 Call 中

    SO
    步過 Call

    TI
    跟蹤進入直到位址

    TO
    跟蹤步過直到位址

    TC
    跟蹤進入直到滿足條件

    TOC
    跟蹤步過直到滿足條件

    TR
    執行直到返回

    TU
    執行直到用戶程式碼

    LOG
    檢視記錄視窗

    MOD
    檢視模組視窗

    MEM
    檢視記憶體視窗

    CPU
    檢視 CPU 視窗

    CS
    檢視 Call 堆疊

    BRK
    檢視斷點視窗

    OPT
    開啟選項設定視窗

    EXIT
    結束 OllyDbg

    QUIT
    結束 OllyDbg

    OPEN
    開啟一個可執行文件

    CLOSE
    關閉可執行文件

    RST
    重新執行當前程序

    HELP
    檢視 API 函數的說明

    OllyDbg套用方法大全--請補充!

    所有文章均為散落在DFCG論壇各處或其他網路文集的傳統。
    雪很冷搜集整理於學習筆記或與朋友討論之中


    Ollydbg 中斷方法


    Quote:
    Originally posted by dong at 2004-6-1 10:29 PM:
    我問個問題
    在od中怎麼下斷點呢??
    現在有的程序一點註冊就沒反映了
    這樣的怎麼下斷點呢??
    能介紹下什麼情況下什麼斷點嗎?
    在轉存中下硬體訪問->Word"斷點,下斷之後,怎麼取消!
    9398944(老菜鳥) 11:09:59
    alt+D 按H 然後移除


    這個沒有萬能的方法,只能視具體情況而定,就我的經驗而言:
    第一步,反彙編找有用訊息,有時候雖然點擊註冊按鈕後,沒有任何反映,但軟體也許包含了可用的訊息,比如「未註冊」,「已註冊」等等之類的,都可用做斷點的。
    第二步,如果反彙編也找不到有用訊息,如果用OD可以下HMEMECPY斷點,在每個使用的函數上下斷,雖然這個法子太笨,但我試過,幾乎有70%以上的機會可找到斷點,找到斷點後再慢慢跟吧!這只是個人的看法,關鍵只要找到斷點,有什麼辦法都無所謂。
    在指令行下bpx hmemcpy斷點,然後Enter鍵,在每個使用的函數上下斷。
    有的程序甚至無法用API中斷,可以在OD載入程序後上下翻動反彙編視窗檢視字元串參考下斷,在反彙編視窗裡直接找到的,右鍵搜尋那裡找不到


    轉發Ollydbg 中斷方法淺探-各種斷點常識知識

    Ollydbg 中斷方法淺探
    --國慶節小禮

    Ollydbg是一個新的32位的彙編層偵錯軟體。適應於windows98、me、2000、xp和2003操作系統。由於他具有圖形視窗界面,所以操作方便、直觀,是cracker的好工具。
    由於Ollydbg沒有了TRW2000的萬能斷點,所以許多的新手感覺到用Ollydbg斷點不好找。現在我來的說說Ollydbg下中斷的幾種方法。本人是個菜鳥,水準有限,可能不能完整的寫出來,也可能存在錯誤。請大家指正。
    我所表述的是Ollydbg v1.09d中文版,其他版本和英文版下自己參考。

    第一 尋常斷點
    Ollydbg中一般下中斷的方法,就是在程序的位址處用滑鼠選項這一行。然後按F2鍵,這時被選項的那一行的位址會變成別的顏色,就表示這個位址處下了中斷。然後執行程序時只有到這個位址處就會被Ollydbg中斷。
    這個方法用的比較多,所以把他稱作尋常斷點。
    如果有指令行插件,就可以在指令視窗中輸入BPX xxxxxxxx 下斷點。
    優點:只要自己懷疑是重要的程式碼處都可以下這種下斷點,不受條件的限制,所以方便實用。
    缺點:如果不知道程式碼功能下斷點具有盲目性。

    第二 API斷點
    Ollydbg中一般下API中斷的方法,有二種。
    1. 在程式碼視窗中點滑鼠右鍵,出現功能功能表。在[搜尋]選項項下有〔當前模組的名稱〕和〔全部模組的名稱〕倆項,選項其中的一項就開啟了程序使用API的視窗,在這個視窗中選項你要跟蹤的API函數名。雙按這個函數就能到程序的使用位址處。然後用F2下中斷。也可以在API視窗中選項需要跟蹤的函數點滑鼠右鍵出現功能功能表,選項〔在每個參考設定斷點〕。同樣下了斷點。
    建立捷逕:Ctrl+N
    2. 在指令行視窗中輸入BPX API函數名或者BP API函數名 後Enter鍵。這時出現了所有使用這個函數的位址的視窗,在這個視窗中可以看到使用這個API函數的位址已改變了顏色。說明下好了斷點。
    說明一下:BPX一般中斷在程序使用API的位址處。BP會中斷在API的寫入位址處。二這有所不同,根據需要選項。
    優點:這種方法下的斷點是針對每一個API函數的,所以具有明確的目的。
    缺點:關鍵的API函數不容易找到。所以有時下的斷點沒有作用。

    第三 記憶體斷點(跟蹤關鍵資料的斷點)
    Ollydbg中的記憶體斷點相當於TRW中的bpm 斷點。
    下斷點的方法是:在程序執行中斷時選項界面中的轉存視窗,用游標選項記憶體中的一段關鍵資料(顏色會改變),然後右擊滑鼠出現功能功能表。選項〔斷點〕項,其中有二個選項〔記憶體訪問〕和〔記憶體寫入〕。
    〔記憶體訪問〕斷點是程序執行時要使用被選項的記憶體資料時就會被Ollydbg中斷,根據這個特點在破解跟蹤時只要在關鍵資料記憶體中下中斷就可以知道程序在什麼地方和什麼時候用到了跟蹤的資料。對於一些複雜算法和流程變態的算法跟蹤有很大的說明 。從破解上講,一個註冊碼的產生一定是由一些關鍵資料或者原始資料計算來的。所以在記憶體中一定要用到這些關鍵資料。那麼〔記憶體訪問〕斷點就是最好的中斷方法。
    〔記憶體寫入〕斷點是程序執行時向被選項的記憶體位址寫入資料時就會被Ollydbg中斷。根據這個特點在破解時可以跟蹤一個關鍵資料是什麼時候產生的,產生的程式碼段在那個地方。所以一個關鍵的資料如果不知道他的由來就可以用〔記憶體訪問〕斷點搜尋計算的核心。
    記憶體中斷的下斷點還有另外的一種方法:程序執行時如果知道關鍵的資料,比如我們輸入的試驗碼、程序產生的序列號等。這時在記憶體中一定存在這些資料。用Alt+M開啟記憶體視窗,在這個視窗中搜尋知道的關鍵資料。用游標選項這些資料同樣下記憶體中斷,這種方法更容易找的關鍵的資料。
    優點:斷點是直接面向關鍵資料的,所以比較容易到核心部分。
    缺點:記憶體斷點重新執行後會消失,干擾比較多。

    第四 硬體斷點(跟蹤關鍵標誌的斷點)
    硬體斷點是Olldbg所特有的斷點,他不會因為重新執行就銷毀,只要不移除。跟蹤這個程序時就有效。但他在98系統下會不起作用。
    硬體斷點是根據關鍵標誌回逆到關鍵程式碼的好方法。下中斷的方法和記憶體斷點的方法相同,有三個方式〔硬體訪問〕、〔硬體寫入〕、〔硬體執行〕。一般用前2個。他也同樣有記憶體斷點的特性,所以可以用記憶體斷點的地方也可以用硬體斷點。這裡介紹利用他來跟蹤註冊標誌的使用方法,一般軟體的註冊都用到了標誌比較。即在記憶體位址中有一個標誌,在判斷是不是註冊時比較標誌的值。不同的值表示不同的註冊狀態。這個標誌的位址一般比較固定。根據這個特點可以下硬體斷點來跟蹤標誌位是什麼地方被標誌的。
    方法:在轉存視窗中選項到標誌存放的記憶體位址處,然後選項標誌值。下〔硬體寫入〕中斷(根據標誌的字元下不同的長度)。重新執行程序你會發現Ollydbg會不斷的中斷在這個標誌的記憶體位址處。在功能功能表的〔偵錯〕選項下選項〔硬體斷點〕就開啟了硬體斷點的視窗,在這個視窗中選項〔跟蹤〕,這時轉存視窗就會來到被下中斷的記憶體位址處。執行程序跟蹤記憶體位址中的值就會知道被賦標誌的程式碼,跟蹤到計算的核心。〔硬體訪問〕的使用可以知道程序在執行時多少地方用到了這個註冊標誌。對於破解複雜效驗的程序十分的有效。
    直接在指令欄裡下bh ****硬體斷點

    其他你感興趣的文章

    Related Posts with Thumbnails