Hunter的大杂烩

五月 30, 2007

关于库版本依赖的解决方案思考

类归于: C++, Linux — hunter @ 3:06 下午

 

 

     最近在研究library版本依赖的问题:

     假如 Library A 和B 编译的时候依赖 Library C,而A/B编译的时间各不相同,

所以它们编译时所链接的C的版本不一样,这样,当有一个程序同时链接 library A/B/C

的时候,就会运行异常

 

    我想到一个解决方案,如果有方法在library C的头文件中声明一个特殊的变量或者函数,
这个变量必须被引用者实现或者调用,那么就可以强迫在链接期发现库文件版本不一致的情况了

比如:
     c.h

     #define VER 1    
     void specialFunction_Version_VER();

     c.cpp
     void specialFunction_Version_VER() {}

     nm libraryC.a
     T specialFunction_Version_1
    
     a.cpp
     #include c.h
    
     void auto_call() { specialFunction_Version_VER(); }

     nm libraryA.a
     U specialFunction_Version_1
     如果升级了 c.h 中的 ver,那么会导致老libraryA中的引用失效,使得编译期报错,
     及时发现隐患

     现在主要问题是,auto_call里面的函数列表是人工维护的,如果依赖的库多了,维护不方便,
     有无办法让 auto_call中的调用是自动的?

 

 

五月 25, 2007

html parser使用范例

类归于: Java — hunter @ 4:03 下午

 

package org.htmlparser;

import org.htmlparser.beans.StringBean;
import java.util.regex.*;
import java.util.Formatter;
import java.util.Locale;
import java.lang.String;
import java.util.Calendar;

public class StockMonitor2
{

    public static void main (String[] args)
    {
        if (args.length < 3 )
        {
            System.out.println (“Syntax : java -classpath ../lib/htmlparser.jar id maxprice min”);
        }
        else
        {
            try
            {
                Integer stock_id = new Integer(args[0]);
                Float   stock_price = new Float(args[1]);
                Float   stock_price2 = new Float(args[2]);
               
                StringBean se;
                se = new StringBean();
                se.setLinks(false);
               
                //StringBuilder sb = new StringBuilder();
                //formatter.format(“%4$2s %3$2s %2$2s %1$2s”, “a”, “b”, “c”, “d”)

                Locale l = null;
                String sUrl = String.format(l, “http://www.aastocks.com/eng/StockQuote/default.asp?symbol=%04d”,stock_id.intValue());
                se.setURL(sUrl);
                //System.out.println(se.getStrings());
                Pattern pattern = Pattern.compile(“Bid[\r\n \t]+([0-9.]+)”);
                Matcher matcher = pattern.matcher(se.getStrings());
                //Calendar rightNow = Calendar.getInstance();

                //System.out.println(“monitor time: ” + rightNow.get(Calendar.HOUR_OF_DAY) + “:” +
                //                    rightNow.get(Calendar.MINUTE) + “:” +rightNow.get(Calendar.SECOND));
                if (matcher.find())
                {
                    StringBuffer sBuffer = new StringBuffer(matcher.group());
                    Float now_price = new Float(sBuffer.substring(4));
                    if (now_price.compareTo(stock_price)>0 || now_price.compareTo(stock_price2)<0)
                    {
                        System.out.println(“

“+stock_id+” “+stock_price+” “+stock_price2+” “+now_price+” “+stock_id+” “+stock_price+” “+stock_price2+” “+now_price+”

“);
                    }
                }
                else
                {
                    System.err.println(“can’t match data:\n” + se.getStrings());
                }
            }
            catch (NumberFormatException e)
            {
                e.printStackTrace();
            }
        }
    }
}

五月 24, 2007

.NET Cache

类归于: .NET, 架构 — hunter @ 3:19 下午

一些cache常见资料

 http://kingmax5421.spaces.live.com/blog/cns!993bdd5bccb6cc83!230.entry

摘要: 介绍缓存的基本概念和常用的缓存技术,给出了各种技术的实现机制的简单介绍和适用范围说明,以及设计缓存方案应该考虑的问题(共17页)

1         概念
1.1   缓存能解决的问题
· 性能——将相应数据存储起来以避免数据的重复创建、处理和传输,可有效提高性能。比如将不改变的数据缓存起来,例如国家列表等,这样能明显提高web程序的反应速度;

· 稳定性——同一个应用中,对同一数据、逻辑功能和用户界面的多次请求时经常发生的。当用户基数很大时,如果每次请求都进行处理,消耗的资源是很大的浪费,也同时造成系统的不稳定。例如,web应用中,对一些静态页面的呈现内容进行缓存能有效的节省资源,提高稳定性。而缓存数据也能降低对数据库的访问次数,降低数据库的负担和提高数据库的服务能力;

· 可用性——有时,提供数据信息的服务可能会意外停止,如果使用了缓存技术,可以在一定时间内仍正常提供对最终用户的支持,提高了系统的可用性。

1.2   理解状态
在深入介绍缓存技术之前,需要对状态有一个认识,因为缓存可以说是状态管理的框架。理解状态的含义和它的一些特性——比如生存期和生存范围——对决定是否缓存和选择合适的缓存技术有很大帮助。状态是指一些数据,在应用系统某个时间点上,数据的状态和条件。这些数据可能是永久性的存储在数据库中,可能是只在内存里停留一会,也可能是按照某个逻辑存活(比如多长时间后释放),它的应用范围可能是所有用户可访问,可能是单个用户有权限;

1.2.1  状态的生存期
生存期是指数据保持有效性的时间区间,也就是从创建到移除的时间间隔。通常的生存期有以下几种:

·永久状态Permanent State——应用程序使用的永久数据;

·进程状态Process State——只在进程周期内有效;

·会话状态Session State——和特定的用户会话有关;

·消息状态Message State——处理某个消息的时间内有效;

(全文…)

五月 20, 2007

httpclient & jericho xml范例

类归于: Java — hunter @ 11:50 下午

import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.lang.*;

import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.params.HttpMethodParams;

import au.id.jericho.lib.html.Element;
import au.id.jericho.lib.html.HTMLElementName;
import au.id.jericho.lib.html.Segment;
import au.id.jericho.lib.html.Source;

public class HkStockInfo implements StockInfo
{
 private HttpClient httpClient = null;
 public HkStockInfo()
 {
  //构造HttpClient的实例
  httpClient = new HttpClient();
 }

(全文…)

xml 读写范例

类归于: Java — hunter @ 11:49 下午

import java.io.*;
import java.lang.Integer;
import java.util.*;
import java.lang.Math;

import org.w3c.dom.*;
import org.xml.sax.SAXException;
import javax.xml.parsers.*;

public class htmlparsertest
{
 /**
  *
  * @param doc
  * @param i
  * @param Hcode
  *
  * @return String
  */
 public static String getXmlValue(NodeList nl, int offset, String codename)
 {

(全文…)

早前文章 »

WordPress 所驱动