Jackey's 感悟

Do Research

Monthly Archives: 九月 2011

Asterisk的CDR记录转换成sqlite的python脚本

Asterisk在服务过程中会成长Call Detailed Record (CDR)日志文件,可用于通话计费。

这在一定程度上保证了数据来源的可靠性,有助于后期实验设计。

但是该CDR文件虽然是以逗号隔开的CSV文件,但是导入sqlite的时候存在问题,用sqlite自带的.import命令在处理特殊数据时候存在bug,例如数据为:

“”,”307″,”001307″,”ipic-out”,”””307″” <307>”,”SIP/307-082593c8″,”Local/307@ipic-out-46c2,1″,”Dial”,”SIP/307@server_ipic4″,”2010-08-25 01:01:05″,”2010-08-25 01:01:05″,”2010-08-25 01:01:10″,5,5,”ANSWERED”,”DOCUMENTATION”,”1282698065.16″,””

上述为一条CDR日志。在将”Local/307@ipic-out-46c2,1″导入时,因为引号内部的逗号,会造成导入失败。一种解决方案是用其他工具来处理,python在自带的csv模块下,可以方便地处理这种csv文件。代码见后文,聊记以供后用。

#! Env Python
# Import the CDR csv data into sqlite3 database

import sqlite3
import csv


class CSV2Sqlite:
	def __init__(self,dbfile,table_name,csvfile):
		self.dbfile = dbfile
		self.table_name= table_name
		self.csvfile= csvfile
		#####################################
		self.table_script='''
		drop table if exists %s;
		
		CREATE TABLE %s (
		cdr_idx INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
		accountcode VARCHAR(20)  NULL,
		src VARCHAR(80)  NOT NULL,
		dst VARCHAR(80)  NOT NULL,
		dcontext VARCHAR(80)  NOT NULL,
		clid VARCHAR(80)  NOT NULL,
		channel VARCHAR(80)  NULL,
		dstchannel VARCHAR(80)  NOT NULL,
		lastapp VARCHAR(80)  NOT NULL,
		lastdata VARCHAR(80)  NOT NULL,
		start DATETIME   NULL,
		answer DATETIME  NULL,
		end DATETIME  NULL,
		duration INTEGER  NULL,
		billsec INTEGER  NULL,
		disposition VARCHAR(12)  NULL,
		amaflags VARCHAR(12)  NULL,
		uniqueid VARCHAR(32)  NULL,
		unknown VARCHAR(80)  NULL);
		''' % (self.table_name, self.table_name)
		
		schema_cols='''accountcode,src,dst,dcontext,
		clid,channel,dstchannel,lastapp,lastdata,start,
		answer,end,duration,billsec,disposition,amaflags,
		uniqueid,unknown'''

		self.sql = "insert into "+table_name \
			+" ("+schema_cols+") values ("+"?,"*17+"?"+") ;"
	
	def trans(self):
		con = sqlite3.connect(self.dbfile)
		cur = con.cursor()
		# create the table
		print self.table_script
		cur.executescript(self.table_script)

		# Read the csv file
		spamreader = csv.reader(open(self.csvfile), delimiter=',');
		for row in spamreader:
			# insert data
			cur.execute(self.sql,tuple(row))
		
		# the commit must call directly, 
		# or the transaction will be failed
		con.commit()
		cur.close()
		con.close()

		print "Importing Done!"

def help(excutefile):
	print '''Import the Asterisk CDR file (the csv separated with ',') to a sqlite file.

%s <sqlite db file> <table name> <csv file name>

	''' % (excutefile)

if __name__ == "__main__":
	import sys
	if len(sys.argv)>=4:
		# do it
		tran = CSV2Sqlite(sys.argv[1],sys.argv[2],sys.argv[3])
		tran.trans()
	else:
		help(sys.argv[0])
Advertisements

Add a word count script for TeXWorks

We can add a new script to count the words of one tex file like this

Here is the script “wordcouter.js”

// TeXworksScript
// Title: Count the words in tex file
// Description: counter 
// Author: Jackey Lu
// Version: 0.1
// Date: 2011-09-21
// Script-Type: standalone
// Context: TeXDocument


var cmd = "e:\\local\\texlive\\2010\\bin\\win32\\texcount.exe " + TW.target.fileName;
var result = TW.system(cmd);
result.output;

Put the script in the TeXworks profile directory “scripts”, in windows 7, it is like this, C:\Users\[your username]\TeXworks\scripts.

PS: you must change the path of  texcount.exe with your real path.

To enable it, You should change the preference.

image

then you can count the words of your tex file now, use the menu Script –> Count the words in tex file.

image

Test Syntax Highlight plug-in for Windows live writer

// =======================================================
// 
// Filename: double.c
// 
// Description: 
// 
// Version: 1.0
// Created: 9/16/2011 10:35:47 PM
// Revision: none
// Compiler: g++
// 
// Author: Jackey Lv (), lvlin.china@gmail.com
// Company: 
// 
// =======================================================

#include <stdio.h>
#include <stdlib.h>

    int
main ( int argc, char *argv[] )
{

    printf ( "!!(1) = %d\n", !!(1) );
    printf ( "!!(3) = %d\n", !!(3) );
    printf ( "!!(0) = %d\n", !!(0) );
    printf ( "!!!(-1) = %d\n", !!!(-1) );

    return EXIT_SUCCESS;
}        // ---------- end of function main ----------

这个插件测试结果最佳。

武汉大学校长李晓红在2011级新生开学典礼上的讲话

求真 求知 求新
——在武汉大学2011级新生开学典礼上的讲话
李晓红

亲爱的同学们、尊敬的老师们、各位嘉宾:
今天我们在这里集会,隆重举行武汉大学2011级新生开学典礼!在此,我代表全校师生员工,对来自祖国各地和世界各地的新同学表示最热烈的欢迎!
33年前,我也梦想过报考武汉大学,梦想成为武大人。但是这一梦想直到去年底才得以实现。所以我也是一名新武大人。当大家背着行囊第一次迈进“国立武汉大学”校门,当大家手持校园卡第一次到食堂就餐,当大家搬着小板凳第一次汇集于梅园小操场,我相信,同学们已经真切地感受到了成为武大人的喜悦与骄傲!
那么,武汉大学是一所什么样的大学呢?武汉大学是中国近现代高等教育的发祥地之一,她发韧于1893年湖广总督张之洞创办的自强学堂,已走过了118年的风雨历程。在这个学术殿堂里,一代代仁人志士、大师鸿儒、莘莘学子,他们筚路蓝缕,捧土培根,众心向善,蔚为国用,不仅造就了秀美迷人的武大、人才辈出的武大,而且孕育和积淀了武汉大学的精神,成为武大得以永葆青春活力的源泉和让武大人永远骄傲的宝贵财富!来到这样一所优秀的大学,同学们最应该做的,就是触摸武大的灵魂,熔铸武大的精神,培育武大的气质,刻上武大的烙印,努力使自己成为一名合格的、杰出的武大人!
同学们,你们是我来武大后迎接的第一届新生。两个多月前,也是在这里,我送走了来武大后的第一届毕业生,当时我给毕业生讲了六个字:关爱、关注、期盼。今天,我也送给各位新同学六个字:求真、求知、求新。
首先是求真。1932年,国立武汉大学珞珈山新校舍落成,时任校长王世杰先生豪迈地宣称:“请大家看我们所走的路是不是中华民族的出路!是不是人类向上的路!”武汉大学的先辈们素来有着高远的理想,始终将自身的追求与科学真理、与国家民族的命运紧密地结合在一起。这是一所大学最可贵的品格。
李达先生是中国共产党的创始人之一、著名的马克思主义哲学家、理论家、教育家,他担任武汉大学校长长达14年。在“左倾”风、浮夸风盛行之时,他坚持用马克思主义的基本原则和思想方法看待并处理问题,以科学的态度和大无畏的精神捍卫真理。他坚决反对“人有多大胆,地有多高产”的谬论和“顶峰论”,为此,他付出了生命的代价。老校长陶德麟教授秉承李达先生的学术精神,在上世纪“真理标准大讨论”中透彻地批驳了“两个凡是”,强有力地捍卫了“实践是检验真理的唯一标准”这一马克思主义哲学的基本原则。崇尚学术、献身真理,这就是武汉大学的精神!
中南医院的桂希恩教授以医生的良知和责任,拉响了艾滋病在中国大地上蔓延的警报。他曾经数十次下到农村调查艾滋病疫情,并多方奔走、争取国内外对艾滋病患者、孤儿的资助;为证明日常生活中的接触不会传染艾滋病,他将艾滋病人接到自己家中,与他们同吃同住,用博大的爱心医治患者、抚慰饱受病痛折磨的灵魂。他的事迹不仅感动了中国,也感动了世界。人们说:桂教授五年做的事,可以影响中国五百年。追求真知、造福社会,这就是武汉大学的精神!
其次是求知。大学是知识的殿堂。“求知在武大,成才在珞珈”,武汉大学以优良的学风享誉天下。板凳坐得十年冷,文章不著一字空。无数学术大师呕心沥血、孜孜不倦地追求新知,使得珞珈山不仅富有诗情画意,更蕴藏着深厚的学问。
黄侃先生是20世纪前期与章太炎、刘师培齐名的国学大师、“章黄学派”的创始人之一。黄侃曾任教于武汉大学的前身——武昌高等师范,他治学一丝不苟,每日不管白天如何劳累,晚上照常坚持鸡叫才就寝,从不因人、事、贫困或疾病而改变,临终前他一面吐血、一面坚持圈点批校自己的书稿《唐文粹补遗》,在汉语音韵史上立下了一座划时代的里程碑。宗福邦教授带领的研究团队从1985年开始潜心研究,历经18个寒暑,编撰出版了大型汉语工具书《故训汇纂》。这部书与《辞海》、《辞源》、《汉语大字典》、《汉语大词典》并列为汉语辞书五部代表作,被誉为“训诂学界一大盛事”。潜心为学、宁静致远,这就是武汉大学的精神!
最后是求新。创新是推动民族进步和社会发展的不竭动力,而大学则是创新的沃土,是求新者的乐园。武大人一直敢为天下先,坚持走在创新发展的前列。
“珞珈有凤常先鸣”。著名数学家华蘅芳、华世芳教授早在自强学堂时期就编撰出了将中西算学结合起来的第一部数学教材;李国平院士不仅是我国函数论研究的主要奠基人之一,也是我国数学物理研究的开拓者,还倡导并推进了我国系统科学与计算机科学的发展;新中国成立后,高尚荫院士创立了中国病毒学学科;吴于廑教授创新了世界史研究方法,倡导并创立了“整体世界史观”;张瑞瑾教授、谢鉴衡院士多年坚持河流泥沙的前沿探索,为我国水电工程建设提出了影响深远的思想方法和工程模型;王之卓院士早在20世纪70年代就在国际上率先提出发展“数字摄影测量”,并提出了空中三角测量理论,对中国航测事业起到了奠基作用。敢为人先,勇于创新,这就是武汉大学的精神!
求真、求知、求新,这是武大精神的内在要求,但还不是武大精神内涵的全部。在未来的日子里,同学们将会细细地体味武汉大学的山与水、楼与阁、花与树、人与事。我们会发现一个美丽浪漫的武大,一个学术自由的武大,一个开放包容的武大,一个勇于担当的武大……大学精神虽然无形,但却是永恒的,这也正是一所大学经久不衰的独特魅力和生命所在。正是一代代武大学人的耕耘、涵育,正是一代代武大学子的承继、弘扬,珞珈之山东湖之水的“精、气、神”才得以生生不息、滋兰养蕙。
同学们,你们作为新的武大人,有责任、有义务传承并发扬武大精神。我衷心希望你们:
不仅要有丰富的知识和高超的专业技能,还要有健全的人格和健康的体魄;
         不仅要积淀深厚的人文底蕴和科学素养,还要发展对于未知事物的好奇心与探索欲,培养质疑、批判与独立思考的能力;
         不仅要具有创造、创新、创业的精神和能力,还要树立全球视野与全球思维,培养参与国际竞争的意识和能力;
         不仅要树立“顶天”的壮志与豪情,还要具有“立地”的踏实与坚韧。
总之,我希望同学们在校期间立大志、得大观,期盼同学们毕业之后创大业、成大事,成为能够担纲未来社会责任的领军人物。
早在1929年,老校长王世杰先生就曾经提出:“武汉大学要能履行新的使命,担起文化中枢的责任”。武大118年的发展历程,正是不断追逐这一梦想、逐步实现这一梦想的历程。我也有一个梦想:通过我们今天、明天的不懈努力,到2043年建校150周年之时,将武汉大学建设成为一所大师云集、精英荟萃、人文思想与科技成果交相辉映的大学,成为一所不仅能推动中华民族伟大复兴、而且为人类社会进步做出巨大贡献的世界一流大学,使“武汉大学”的名字闪耀在世界著名大学排行榜上!
同学们,你们在学校宋卿体育馆旁的鲲鹏雕塑上,会看到镌刻着的武大人的梦想与追求,那就是:“北冥深广,鲲翼垂天。云搏九万,水击三千!”让我们携起手来,一起为梦想而努力奋斗!
谢谢大家!