Jul
08

Asterisk Config – Outbound call
2008-07-08 10:11 pm 作者:firepig

Special Variables:
${CONTEXT}- The current context
${EXTEN} - The current extension
${EXTEN:x}- The current extension with x leading digits dropped
${PRIORITY} - The current priority
${CALLERID} - The current Caller ID (name and number)
${CALLERIDNUM} - The current Caller ID number
${CALLERIDNAME} - The current Caller ID name
${RDNIS} - The current redirecting DNIS

[directdial]
  ignorepat => 9 ; keep dialtone after 9
  exten => 9,1,Dial(Zap/g2/)
  exten => 9,2,Congestion
[international]
  ignorepat => 9
  exten => _9011.,1,Dial(Zap/g2/${EXTEN:1})
  exten => _9011.,2,Congestion
  include => longdistance
[longdistance]
  ignorepat => 9
  exten => _91NXXNXXXXXX,1,Dial(Zap/g2/${EXTEN:1})
  exten => _91NXXNXXXXXX,2,Congestion
  include => local
[local]
  ignorepat => 9
  exten => _9NXXXXXX,1,Dial(Zap/g2/${EXTEN:1})
  exten => _9NXXXXXX,2,Congestion
  include => default

推荐(0)
收藏
分享至: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 添加到饭否 QQ书签 POCO网摘 Digbuzz我挖网 
Jul
07

机会,选择
2008-07-07 12:09 am 作者:firepig

很多的时候在机会面前徘徊。。。

昨天,接到一个在北京奇虎工作的朋友的电话,推荐我去奇虎工作。对奇虎最深的印象是,这次支援灾区的捐款,他们是IT公司最积极和最尽力的。然后就是大家都喜欢用的那个软件-奇虎360安全卫士。

说到北京,第一个事情想到在北京的张兄。挂了那个朋友的电话后立马打电话给在张鸟人,这小子活的自在啊又是酒后归来。聊了会,因为还有别的事情,就挂了。今天这小子电话过来的时候,聊了很久,在他N次想挂的时候,我毫不犹豫的假装还有很多话要说。。。哈哈,谁叫他搞通信的,谁叫他电话费有的报销。今天突然想到高中的时候我们几个一起去鹅岭那次,这家伙带我们走了很多的弯路,结果4个小时可以搞定的路程,我们爬了一个下午还在半山腰。还有一次记得是天黑了,山上的黑特别的恐怖,什么鸟叫都在叫,张鸟人叫的最响。哈哈,年少无知,现在给我100个胆,我也不敢半夜去爬那山了。

回到正题:

对于我来说,目前还不想急着离开厦门,而且我很喜欢现在的工作,虽然累了一点,可是可以做自己喜欢的事情,而且我很喜欢这个团队,也很想在这个团队里面做出一些成果来。所以放弃了这个机会~~~

留在厦门。。。坚持自己的选择。

推荐(0)
收藏
分享至: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 添加到饭否 QQ书签 POCO网摘 Digbuzz我挖网 
Jul
02

Mozart
2008-07-02 3:11 am 作者:firepig

又是一个凌晨3点。。。 

夜深,感谢莫扎特的音乐陪着我。

听到最后一首的时候,是一段独白<小天使,莫扎特>,本想一句句的记下来,无奈有几个字拼了半天拼不出来。在网上搜索了一下,居然有。

-------------------------------------- 

黑暗時代,人類未曾真正擁有音樂,
上帝憐憫人類生活無趣,
決定派他最喜愛的小天使,去為人類帶來音樂的喜悅。小天使不願離開天堂,就問上帝:「我什麼時候可以回來?」
上帝回答他:「只要你把該寫的曲子完成,自然就會回來了。」

選了一個時機,他降臨到了薩爾茲堡,
開始了他這一生的任務。

為了能夠早一點回到天堂,
這位在凡間名為莫札特的天使,
生下來,就開始馬不停蹄地創作音樂。
到了三十五歲的那一年,
上帝派了一位使者告訴他:孩子,回來吧!任務已經結束了。

在他的音樂裡,從來沒有人類強烈的喜怒哀樂,
他只是為了他的使命,
將上天的音樂傳達到人間來。
就像天使的性別,
他的音樂,似乎也是中性的,

推荐(0)
收藏
分享至: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 添加到饭否 QQ书签 POCO网摘 Digbuzz我挖网 
Jul
02

SQL Server 2000 Stored Procedures Handbook
2008-07-02 12:43 am 作者:firepig

推荐一本介绍存储过程的书。。。

e文的但是很易懂,今天晚上看了会,感觉很好。

SQL Server 2000 Stored Procedures Handbook
by Tony Bain, Louis Davidson, Robin Dewson and Chuck Hawkins

Table of Contents 
 SQL Server 2000 Stored Procedures Handbook 
 Introduction 
 Chapter 1 - Stored Procedures Overview
 Chapter 2 - Optimizing and Debugging
 Chapter 3 - Concurrency, Cursors, and Transactions
 Chapter 4 - Common Practices with Stored Procedures
 Chapter 5 - System Stored Procedures
 Chapter 6 - User Defined Functions
 Chapter 7 - Triggers
 Chapter 8 - Security
 Appendix A - Support, Errata, and http://forums.apress.com
 Index 
 List of Figures 
 List of Examples 

下载地址:http://dl2.csdn.net/down1/20070831/31140133799.chm

想看的,不能下的话,留个email我发到你邮箱。不过百度一下,网上很多。

推荐(0)
收藏
分享至: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 添加到饭否 QQ书签 POCO网摘 Digbuzz我挖网 
Jul
01

SQL语句的优化
2008-07-01 5:30 pm 作者:firepig

这些天因为要准备下个项目,老大叫我好好看一下Hibernate3.2,所以想先复习一些sql的东西,总结一些经验。其实在SSH这样架构的项目中,我觉得最重要的就是Hibernate了,因为它是负责持久化的。那么就牵扯到很多东西了。计算机世界万物都有一个本,而对数据库的操作,最基本就是sql,然后jdbc,然后。。。

所有从本开始,下面是一些优化的方案,有的会配合一些小例子。(强烈建议小苏小郑他们赶快把代码插件搞起啊,这样在网页附代码的时候就方便和美观了)

1.避免扫描整个表。

扫描整个表就好像在一本厚厚的书里去一页页的寻找关键字,会把你晕死的。通常的解决办法,我们会根据SQL的WHERE子句建立索引。在数据库中建立的是一个B树索引,关于B树索引就不介绍了,离散数学和数据结构中都有详细的说明。 有时候,扫描全表是不可避免的,比如说,要选择所有的行,update所有的行,这个时候索引是没有效率的。怎么样合理的建立索引,就需要丰富的业务背景知识,和一定的项目经验了。但有些东西是有规律寻的,当以下条件时候,你就毫不犹豫的建立索引吧。一,返回的数据行数少于总行数的10%的时候。二,限定条件经常使用的时候。三,列经常被order by和group by的时候。

2.查询中where子句的安排。

使返回最少记录的索引可以限制SQL语句返回的结果,称为最严格限制条件。通常把最严格的条件放在where的最后。查询优化器会从最严格的条件开始检索。

比如(已建索引)说 一, select * from mytable where name = wenjg' and age > 24;

              二, select * from mytable where age > 24 and name = ''wenjg";

简单的从语法上看上去这两条简单的sql语句没有什么差异。可是从性能上,一个是要先全表检索‘wenjg’然后再找age大于24。还一个是利用B树索引的快速锁定age>24的那些叫的人,在从这个小范围找‘wenjg’这个人。如果这是张大表的话,速度可能会差上个几十秒,甚至几分钟(可怕)。

3.使用存储过程,触发器和嵌入式SQL语言

记得上一个项目,老大说做统计报表的时候不要用Hibernate处理数据,直接用存储过程,这样性能会好很多因为这些过程是数据库引擎编译的,然后执行,所以相对单个查询而已,过程的优势太明显了。而Hibrnate对于统计性能不行。。。

4.避免使用OR。

有一个很经典的例子:

select * from  fact_table

where prod_cd like 'AB%'

 OR prod_cd like 'AC%'

 OR prod_cd like 'BB%'

 OR prod_cd like 'BC%'

 OR prod_cd like 'CC%'

ORDER BY prod_cd;

这个语句,执行的效率是很低的,可是大家在写sql的时候也是最常用的。

改写后的sql,效率大增(substr用的太经典了):

select * from fact_table

 where substr(proc_cd,1,2) IN ('AB','AC','BB','BC','CC')

ORDER BY prode_cd;

5.在事务处理和成批装入时要注意的

我们经常会编写一些批处理的文件,如备份数据库等。这个时候要选择好时间,在用户访问最少的时候去处理。在处理过程竞争资源的时候,系统资源不是在用户之间分配的,而是被批量数据操作独占。用户的处理进程是争不过批量处理的。而且在处理的时候,锁住某个表后,用户进程就不能访问了。

而在事物的控制中,要记得COMMIT。数据库中有一个叫做ROLLBACK SEGMENT的保留区,那是个事务进行的时候临时存储事务操作结果的一个地方,当我们rollback的时候,清空这里的内容,目标表不改变。当commit的时候,结果写入目标表,清空ROLLBACK SEGMENT的内容。

但是在SSH,有了SPRING的面向切面的事务管理,哈哈哈哈。。。就不要我们去管这些东西了。这也是AOP伟大之处吧,要不然每个DAO的操作都要来上那么一段,靠,一定会晕的。

6.减少对数据库函数的依赖

像AVG COUNT MAX MIN SUM这样的函数用起来总是很爽,但是这样无疑是给了数据库负担,想这样的事情不要让数据库去做,直接交给应用程序去处理。 

7.最后删除索引

一看这个你可能会好奇,我辛苦建立的索引干什么要删除呢。这个删除不是要你彻底的删除,而是加速批量更新的一个方法,等操作完成最后在重建表的索引。

对于sql的优化,还有很多的内容,剩下的还需要更多的学习~~~特别是数据库的优化,汗,那好像是DBA做的事。

推荐(0)
收藏
分享至: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 添加到饭否 QQ书签 POCO网摘 Digbuzz我挖网 
Jun
29

Look Forward To
2008-06-29 1:47 am 作者:firepig

ssm10354.jpg 打开桌面的一个文件夹,无意间发现这张摄于大学时代的照片。那蔚蓝的天空下飞过的白鹭,鉴证了我最幸福的一段生活。我也期望着可以和它们一起自由的飞翔。。。毅然决定,明天回学校看看!!! 回图书馆,回龙舟池,回那个陪伴了我4年的地方。 在厦门不知不觉5年了,晚上和小粟一起感慨了一下,他说他以后走了也会经常来看看的。我想我也会。

生命中总是有很多东西值得去期待。就好像那时候期待着可以邂逅很多的白鹭,等它们飞过我的孤独。每一段生活都是一首插曲,而我们却总是忘记了主旋律。

离开35那天,走出软件园的时候比以往多了很多心情。那天在公车上,也是下雨天,想了很多事情。晚上去会展静静的走了很长的一段路,这也是来软件园二期这边一年来,第一次一个人去海边散步。等回来的时候天又下起来小雨,那一刻总感觉老天还是理解我的。

结束了第一份工作。在这一年多的时间里,想感谢很多人,都记在心中吧。 相信自己,相信未来!

推荐(0)
收藏
分享至: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 添加到饭否 QQ书签 POCO网摘 Digbuzz我挖网 
Jun
25

话说OGNL
2008-06-25 8:45 pm 作者:firepig

 都说OGNL很强大,强大的无缝不入,无所不能。

早就发现确实很强大,但今天才发现没有传说中的强大。

就说说这个标签吧:  ,今天我想做一个动态的selected,很简单就根据action里取来的一个Integer型的数据生成options。 可是value中只认实现了Iterable 接口的那些集合类。 如果是固定的循环得到是好办,比如说我想循环4次那可以这样。问题是我现在不能确定多少次,我只想要一个for循环的功能,可惜强大的OGNL居然不能办到。

老大叫我用js处理,可是想想很多地方要用这个东西,于是写了一个Integer转换成LIST的公用方法,这个方法很简单先for在add,放在action的基类里面。

现在可以在iterator就有了foreach的感觉了~~~

推荐(0)
收藏
分享至: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 添加到饭否 QQ书签 POCO网摘 Digbuzz我挖网 
Jun
25

Hibernate 缓存问题
2008-06-25 8:22 pm 作者:firepig

   今天做项目的时候,碰到了一个Hibernate二级缓存的问题。 在进行一个更新操作后,再想从数据库里取东西就会出现NullPointerException。相当郁闷,明明那个对象有封装了那个id。可是就是取不出来,开始以为是mapping的问题,结果查映射文件,没有问题。而如果不进行那个更新操作,就可以取到id,然后正常的使用那个po。苦苦调试,后来居然还以为是spring事务控制上的问题,苦查无果。

十分钟过后:

原来在UPDATE的时候,因为更新的只是部分数据所有没有把他上级的id保存下来,当然也没有设置hidden。然后我刚好要做的另外一个操作,也是用同一个POJO。这个时候问题就来了,因为update的时候,Hibernian缓存了那个对象。而我在此去取得时候,取得就是缓存的的东西,当然找不到id。

 解决的办法有两种,一种是在update表单的时候加上一个隐藏的字段。

另外一种是在update这个动作最后显示的clear缓存。各有优缺点,从安全性上我选择了第二种。

完了总结一下Hibrnate的缓存机制:

hibernate的session提供了一级缓存,每个session,对同一个id进行两次load,不会发送两条sql给数据库,但是session关闭的时候,一级缓存就失效了。

二级缓存是SessionFactory级别的全局缓存,我们项目用的是ehcache,所有设置如下:hibernate.cache.provider_class=net.sf.hibernate.cache.EhCacheProvider如果使用查询缓存,加上hibernate.cache.use_query_cache=true 。

 。。。。另外还有Class的缓存,查询缓存,Collection缓存 ,缓存策略太多了。要下班回家了。值得一提的是N+1的问题,有时间再具体写~~~

推荐(0)
收藏
分享至: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 添加到饭否 QQ书签 POCO网摘 Digbuzz我挖网 
Jun
13

struts2 Servlet API 解耦
2008-06-13 8:00 pm 作者:firepig

struts2提供了三种和servlet解耦的方式:

1: ActionContext  这个接口对应的ServletAPI是HttpServletRequest。其中有两个方法,get(),set()对于于HttpServletRequest的getAttribute(),setAttribute().使用方法为:

ActionContext.getContext().put(key,value);

ActionContext.getContext().get(key);

相当于:

HttpServletRequest.setAttribute(key,value);

HttpServletRequest.getAttribute(key);

另外还直接获得session.   ActionContext.getContext().getSession();

2:是基于IOC的方法实现的,在Action中必须实现ServletRequestAware,ServletResponseAware,ServletSessionAware. 不推荐使用。

3:ServletActionContext继承了ActionContext。

HttpServletRequest request = ServletActionContext.getRequest();

HttpServletResponse response = ServletActionContext.getPesponse();

HttpSession session = request.getSession();

总结:第二种方法因为要实现接口不推荐使用,一般如果要获得session,用第一种方法。但是ActionContext不能获得request和response所有要用第三种。。。

推荐(0)
收藏
分享至: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 添加到饭否 QQ书签 POCO网摘 Digbuzz我挖网 
Jun
09

Exadel Flamingo - Flex with Seam and Spring
2008-06-09 11:46 am 作者:firepig

The current state and direction of the software development seems to be going towards agile approaches.  This is mostly a resulted mostly from resurgence of the Internet itself with novel applications supporting Web 2.0 principles. In order to provide a quick response to market demands, the agile development approach seems to be displacing others as being the most efficient and effective. While agile development is not technology specific, there are technologies which are more conducive to agile development than others. Quite a few technologies exist for rapid development of traditional applications, but nothing to aid creation of rich internet application.

官方网站:http://www.exadel.com/web/portal/flamingo

开始关注这个框架!

推荐(0)
收藏
分享至: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 添加到饭否 QQ书签 POCO网摘 Digbuzz我挖网 

得到OpenID
使用OpenID提供商
35OpenID 35OpenID MyOpenID MyOpenID Flickr Flickr
Google Google Yahoo Yahoo! AOL AOL
Blogger Blogger LiveJournal LiveJournal Verisign Verisign
ClaimID ClaimID Technorati Technorati Vidoop Vidoop
OpenID OpenID 帮助