摘要: 调试UDP包交互时,在网上没有找到一个好的端口转发工具。便自己实现了一个UDP端口转发器。 .net 4.0阅读全文
posted @ 2011-12-26 09:32 阿牛 阅读(9) 评论(0) 编辑
摘要: 360浏览器本身就是流氓广告软件阅读全文
posted @ 2011-10-12 22:50 阿牛 阅读(38) 评论(0) 编辑
摘要: 这两天访问网页,总是时不时有广告,排除计算机中毒可能性后,怀疑是DNS被劫持了。。于是打开Fiddler。然后继续上网, 在一次打开http://www.baidu.com时,网页右下角弹出广告,于是马上打开Fiddler,查看HTTP通讯阅读全文
posted @ 2011-10-10 22:42 阿牛 阅读(69) 评论(1) 编辑
// Test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <memory>
#include <iostream>
#include <stack>
#include <queue>
using namespace std;

#pragma once
#include <memory>
#include <iostream>
#include <stack>
using namespace std;

template <class T> class PoolItemProxy;
template <class T> class PoolItem ;
template <class T> class ObjectPool;
template <class T> class ObjectPoolTS ;
//typedef PoolItem<T> PoolItem<T>;
template <class T> class PoolItemProxy
{
private:
	ObjectPool<T>* PoolPtr;
	T* ItemPtr;

	PoolItemProxy(ObjectPool<T>* poolPtr, T* itemPtr)
	{
		this->PoolPtr = poolPtr;
		this->ItemPtr = itemPtr;
		cout << "object from pool" << endl;

	}

public:
	//PoolItemProxy(PoolItemProxy<T>& item)
	//{
	//	this->PoolPtr = item.m_pFromPool;
	//	this->ItemPtr = item.release();
	//}

	PoolItemProxy(PoolItemProxy<T>& item)
	{
		this->PoolPtr = item.PoolPtr;
		this->ItemPtr = item.ItemPtr;
	}

	virtual ~PoolItemProxy()
	{
		if(PoolPtr && ItemPtr)
		{
			PoolPtr->Release(*this);
			ItemPtr = NULL;
			PoolPtr = NULL;
			cout << "release to pool!" << endl;
		}
	}

	T* get()
	{
		return ItemPtr;
	}



	T* operator->()
	{
		return ItemPtr;
	}


	friend class PoolItemProxy<T>;
	friend class PoolItem<T>;
	friend class ObjectPool<T>;
};


template <class T> class ObjectPool
{

private: 
	int m_nCountLower;
	std::stack<T*> m_pool;
public:
	ObjectPool(int  nCountLower)
	{
		m_nCountLower  = nCountLower;
		for(int i = 0; i < nCountLower; ++i)
		{
			m_pool.push(new T());
		}
	}

	virtual ~ObjectPool()
	{
		while(!m_pool.empty())
		{
			delete m_pool.top();
			m_pool.pop();
		}
	}


	virtual PoolItem<T> Get()
	{
		if(m_pool.size() > 0)
		{
			PoolItem<T> item(new PoolItemProxy<T>((ObjectPool<T>*)this, m_pool.top()));
			m_pool.pop();
			return item;
		}
		else
		{
			PoolItem<T> item(new PoolItemProxy<T>((ObjectPool<T>*)this, new T()));
			return item;
		}
	}

	virtual void Release(PoolItemProxy<T>& item)
	{
		if(m_pool.size() >= m_nCountLower)
		{
			//直接Delete掉
			delete item.ItemPtr;
		}
		else
		{
			m_pool.push(item.ItemPtr);
			
		}
	}




};

template <class T> class PoolItem : public std::auto_ptr<PoolItemProxy<T>>
{
public:
	PoolItem(PoolItemProxy<T>* pitem)
		:auto_ptr<PoolItemProxy<T>>(pitem)
	{

	}

	T* operator->()
	{
		return (auto_ptr<PoolItemProxy<T>>::operator ->())->ItemPtr;
	}

	T* get()
	{
		return (auto_ptr<PoolItemProxy<T>>::operator ->())->ItemPtr;
	}

};




template <class T> class  ObjectPoolTS : public ObjectPool<T>
{
private:
	CCriticalSection m_lock;
public:
	ObjectPoolTS(int nCountLower)
		:ObjectPool<T>(nCountLower),m_lock()
	{

	}

	virtual ~ObjectPoolTS()
	{

	}


	virtual PoolItem<T> Get()
	{

		m_lock.Lock();
		PoolItem<T>& ret = ObjectPool<T>::Get();
		m_lock.Unlock();
		return ret;

	}

	virtual void Release(PoolItemProxy<T>& item)
	{
		m_lock.Lock();
		ObjectPool<T>::Release(item);
		m_lock.Unlock();
	}
};

class Data
{
	static int i;
public:
	Data()
	{
		m_i = ++i;
		cout << "data created" << m_i << endl;
	}

	virtual ~Data()
	{
		cout << "date deleted"  << m_i << endl;
	}

	int m_i;
};

int Data::i = 0;

void TestArgs1(PoolItem<Data>& item)
{
	cout << item->m_i << endl;

}
void TestArgs2(PoolItem<Data> item)
{
	cout << item->m_i << endl;

}
void TestArgs3(Data* item)
{
	cout << item->m_i << endl;
}

int _tmain(int argc, _TCHAR* argv[])
{
	

	char c;
	{
		ObjectPoolTS<Data> pool(5);
		{
			PoolItem<Data> item = pool.Get();
			PoolItem<Data> item1 = pool.Get();
			PoolItem<Data> item2 = pool.Get();
			PoolItem<Data> item3 = pool.Get();
			PoolItem<Data> item4 = pool.Get();
			PoolItem<Data> item5 = pool.Get();
			cin.get(c);


			PoolItem<Data> item6(item);
			

		}

		{
			PoolItem<Data> item = pool.Get();
			PoolItem<Data> item1 = pool.Get();
			PoolItem<Data> item2 = pool.Get();
			cin.get(c);

		}

		{
			PoolItem<Data> item = pool.Get();
			TestArgs1(item);

			TestArgs3(item.get());  //OK 

			TestArgs2(item);

			__assume(item.get() == NULL);
		}

		{
			//OK
			std::vector<PoolItem<Data>> arrNode;
			arrNode.push_back(pool.Get());
			arrNode.push_back(pool.Get());
			cin.get(c);

		}

		cin.get(c);
	}
	

	cin.get(c);
}

//程序输出

data created1
data created2
data created3
data created4
data created5
object from pool
object from pool
object from pool
object from pool
object from pool
data created6
object from pool

release to pool!
release to pool!
release to pool!
release to pool!
release to pool!
date deleted4
release to pool!
object from pool
object from pool
object from pool

release to pool!
release to pool!
release to pool!
object from pool
3
3
3
release to pool!
object from pool
object from pool

release to pool!
release to pool!


date deleted2
date deleted3
date deleted1
date deleted6
date deleted5

posted @ 2011-05-28 15:45 阿牛 阅读(28) 评论(0) 编辑

转自:http://hi.baidu.com/trstones/blog/item/7fca145426436c57d0090663.html

java环境下将word转换为html目前没有很简单的方法。使用openOffice实现应该算是“矬子里面拔大个”。

1,首先下载openOffice。这是个第三方开源的项目,专门用于在java环境中进行类似word文档编写(要是连个word编辑都做不出来,那java在外行心目中地位就蹭蹭地下去了)。我下载的是OpenOffice.org 3.2版本。

2,下载后安装。通过cmd进入“安装目录\OpenOffice.org 3\program”文件夹下。运行一下命令

soffice -headless -accept="socket,host=127.0.0.1,port=8100;urp;" -nofirststartwizard

意思是启动openoffice的一个服务,以备为其他程序使用(看看咱们的开源领袖多大方,不像微软那么小气,生怕自己的用)。

3,测试一下8100端口是否能使用。cmd命令“telnet localhost 8100”,如果开启了,就会有黑的不能再黑的屏幕显现,如果没开启,就会出现连接不上的消息。

4,下载jodconverter项目,我下的是2.2.2版本。(咱就不重复制造轮子了,直接就上车吧!)

5,自己创建项目,把jodconverter文件夹lib中的所有jar包都引用一下。然后写下以下代码

public static void main(String args[]) {
   File inputFile = new File("D:\\test\\广告测试.doc");
   File outputFile = new File("D:\\test\\广告测试.html");
   OpenOfficeConnection connection = new SocketOpenOfficeConnection(8100);
   try{
   connection.connect();
   }catch(Exception e){
    e.printStackTrace();
   }
   DocumentConverter converter = new OpenOfficeDocumentConverter(connection);
   converter.convert(inputFile, outputFile);
   connection.disconnect();
}

然后就运行一下,应该没什么问题。当然“D:\\test\\广告测试.doc”得事先存在(程序再厉害也不能自产自销吧)。

6,其他。上面的代码 doc->html;
     如果是xls->html,那就直接把“D:\\test\\广告测试.doc”改成“D:\\test\\****.xls”;
     如果是doc->pdf,那就把“广告测试.html”改成“广告测试.pdf”。
    就测了这两个,其他的大家自己摸索吧。可以打开openoffice客户端程序,看看支持那些文件,保存时可以以那些格式保存。乖乖好傻瓜啊!

 

posted @ 2011-01-18 20:06 阿牛 阅读(395) 评论(0) 编辑
摘要: 真是太郁闷了, 郁闷了我多半天。事情从以前写的自定义函数讲起:今天我要在OleDbCommand 中,执行SQL语句:(其实实际比这个复杂,还有参数一类的)结果报错:System.ArgumentException: 十进制字节数组构造函数需要一个包含有效的十进制字节且长度为 4 的数组。因为原来有参数,还曾报过: System.Data.OleDb.OleDbException: 存取器不是参...阅读全文
posted @ 2010-10-20 11:51 阿牛 阅读(108) 评论(0) 编辑
摘要: http://files.cnblogs.com/evlon/webbrowser.7z阅读全文
posted @ 2010-07-13 16:21 阿牛 阅读(168) 评论(0) 编辑
摘要: 公文需要进行超时统计,去除节假日精确到小时的用时。网上没有找到合适的,就自写了一个。 用法:把特殊的节日和特殊的工作日放在表 t_work_holiday 中。 反正也上不了首页, 自己直接贴代码吧。Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->create table T_WORK_HOLIDAY( DAY DATE not null, ISHOLIDAY VARCHAR2(1) default 'H' not null)阅读全文
posted @ 2010-06-30 17:34 阿牛 阅读(282) 评论(0) 编辑
摘要: 目前已归档公文查询现状a) 数据库结构不合适。由于需求要求每个用户只能查询自己能查的公文,但标识一个公文可以被哪个公司、部门或个人可查的字段,却不存在,必须使用Like语句来匹配,极大的增大了表的扫描范围,增大了数据库IO、内存开销,降低了查询速度。b) 查询结果集取出全部数据,直接导致数据库IO、内存、网络资源增加。同时由于在WebService层创建完所有对象后,再进行分页,然后取出指定一个页面的结果集返回,使数据流的使用效率几乎为0。分布式缓存MemCached介绍memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据阅读全文
posted @ 2010-06-22 14:54 阿牛 阅读(143) 评论(0) 编辑
摘要: 首先在所选的数据库上右键,任务,生成脚本。生成过程中,注意选择目标数据库为SQL Server2000. 第二,这个脚本是不能在SQL2000的查询分析器中使用的,通过如下的Emeditor宏来转换吧:function TSql2005_2000(sql){ return sql.replace(/WITH\s*\(.*?\)/g,'') .replace(/(sys\.objects)|(sy...阅读全文
posted @ 2010-01-10 13:48 阿牛 阅读(324) 评论(0) 编辑