- 博客(59)
- 资源 (15)
- 收藏
- 关注
原创 跨机器登陆mysql-ssh隧道
有时我们需要登陆mysql,但是mysql-server可能对登陆做了ip授权,比如:mysql对A机器做了登陆授权,我们在这上边安装了php/python的对应model,从而可以直接使用php/python脚本来进行sql操作. 但是该台机器却没有安装mysql-client客户端! 此时如果我想在A机器上直接进行sql查询该怎么办呢?最简单的:安装一个sql客户端. 那有
2014-01-21 18:16:22
8118
1
原创 在sogou-upd我们是如何使用python的(1)
搜狗用户平台事业部有大量的资源导航项目具有相似的流程,以kan.sogou.com搜狗影视为例,主要流程如下:1.合作抓取影视第三方(迅雷/腾讯视频/土豆...)的数据2.对抓取到的数据进行清洗/聚合/rank计算3.将经过2之后的数据展示在用户面前其他类似搜狗笑话,搜狗小说,搜狗团购都是类似的逻辑.所以我们在新的技术架构时希望可以做一套通用的流程框架出来。主要的技术方案如
2013-11-09 11:50:54
3668
原创 server多线程并发模型和多进程并发模型的选择
做unix上server程序实现时:到底是该选择多线程并发模型还是多线程并发模型呢?想到这个问题是源于阅读scgi,nginx,memched的源码~如下:scgi的实现是用的多进程,主进程负责监听socket连接请求,然后分发给各个子进程来处理。nginx的实现是用的多进程,创建好子进程之后,各个子进程直接自己来监听socket连接请求并处理。memched的实现则是用的多线
2013-01-10 10:31:35
6377
原创 web网站的自动化部署
以前实现一个web网站时,部署起来特别费劲。因为rd要搭建自己的测试环境,QA还要去在自己机器搭建环境。。那来回搬环境就容易出现各种问题。主要问题有以下几个:①网站配置文件中要指定很多特定的配置,而后在代码中要读取这些配置。 那QA拿到你代码后去部署时还要手动修改你的配置文件,如果配置多的话及其繁琐并且容易出错。举个简单例子:我们要将domian写在配置文件中,而后在代码中可能
2013-01-09 18:32:07
10479
原创 最近学到的技巧(python调试信息的获取等)
①以前写Php程序的时候,要调试程序直接将调试信息给echo输出到页面上.Python也可以,直接print就ok了。但是这样不安全,万一你print了一行信息,结果在上线时忘记注释了,用户访问页面时就会看到这个调试信息。那怎么解决这个问题呢?既想可以看到调试信息,又不想输出到页面上。做法很简单,我们把stdout标准输出重定向到日志文件上,然后tail -f日志就可以在命令行中看到这些信
2012-12-20 16:57:58
3688
原创 scgi和quixote的结合使用
首先:scgi是什么。是app与webserver通信的一种协议.那按照我的理解:比如说webserver是apache,启动后其会监听某个端口的请求,而后处理之。如果是静态的那就自己搞定,如果是动态的呢?我们就将之交给scgi来处理。scgi是一种c/s架构,mod_scgi是client,我们将这个client加载到nginx中,这样nginx就有能力与scgi-server通信了.
2012-12-20 16:18:38
3184
原创 wsgi协议
看wsgi协议的定义,感觉都没整明白是什么意思。后来用了之后大致有了自己的理解,这里写一下自己的理解吧:wsgi有两方,服务器方 和 应用程序 ①服务器方:其调用应用程序,给应用程序提供(环境信息)和(回调函数), 这个回调函数是用来将应用程序设置的http header和status等信息传递给服务器方.②应用程序:用来生成返回的header,body和status
2012-12-19 17:25:49
7822
原创 守护进程
daemon是运行在后台的一种特殊进程。它独立于控制终端并且周期性的执行某种任务或者等待处理某些发生的事件。从上边定义可以看到:守护进程其实已经脱离了之前的所有环境。所以它很游离,很独立。举个不确定的例子:daemon类似FBI或者克格勃,没人能看到它,但是它却一直在后边做一些事情。我们最长用daemon来做什么事情呢?我们可以用其来监控一个进程的运行,如果发现其被kill了:
2012-12-19 16:22:43
6945
原创 gunicorn.werkzeug和quixote的结合使用-框架篇
开发python web站点时,本地用gunicorn,werkzeug和quixote来搭建环境。其实这是两种方式: ①gunicorn+quixote②werkzeug+quixoteGunicorn是一个python wsgi的 web-server服务器werkeug则是一个wsgi的lib工具。quixote:通俗来说,主要功能就是转发请求
2012-12-18 16:56:18
4054
原创 2011年度总结
2011年过去了,最近项目比较忙,一直没有时间写篇总结,马上放假回家了,趁个周末写一篇。2011对我是很重要的一年,发生了很多大事。1:3月毕业,4月入职百度,转身从客户端开发转server后台开发。2:在公司从事了很有挑战性的新项目,而且已经很可能很成功的项目,锻炼超级大。3:加班成为家常便饭,10月后基本一周上线两次,加班到晚上11点以后很正常,加班到下半夜也不时出现~4:
2012-01-15 14:45:54
3653
15
原创 用c/c++写php扩展模块的杂想
我们知道:php支持c/c++写的扩展模块。原因无他,因为php底层本质上就是c实现的,既然人家zend可以用c来实现现在php的这么多功能函数,我们当然也可以了。这一篇博文不会讨论如何去实现这样一个扩展,只是分析一下原理和优缺点以及一些杂想。 1:为什么要写扩展呢?比如我要实现一个功能,我完全可以用php来书写封装一个函数,这样足矣。为什么要这么费劲的去用c去扩展一个
2011-07-01 11:44:00
5698
原创 php脚本的执行过程(编译与执行相分离)
php的编译和执行是分离开的,亦即:先执行完编译,而后再执行。很多人会说:c++也是如此啊,确实。不过php的这种分离可以给我们提供很多便利,当然不可避免也有很有缺点。 先说一下整个过程: ①php会调用编译函数zend_compile_file()来进行编译。 这个函数的具体实现其实是包括两个主要过程的:词法分析(Lex实现),语法分析(Yacc实现)
2011-06-30 11:47:00
11097
原创 一个php请求怎样才算结束?
前边文章说过:web-server会创建一个线程(进程)来处理收到的php请求。(使用线程还是进程的区别见博文:http://blog.youkuaiyun.com/NRC_DouNingBo/archive/2011/06/29/6575807.aspx)。那这个请求怎样才算处理完毕呢?怎样才能让web-server回收这个线程呢?? user进行一次web请求,其是要请求数据的。
2011-06-29 21:05:00
5562
原创 php的线程不安全性
上一篇文章说到一个问题:wev-server处理一个php请求,是给它一个线程呢?还是一个进程呢?这就要牵扯php本身的一些特性了。 早期版本的x系统,包括linux等,其实不支持线程的。故而:那是为每一个php请求都创建分配了一个进程。 网上也很多人说这个问题,因为php手册上说:php是使用线程的。实际上:此时是用多进程来模拟线程而已。所以你查看线程进
2011-06-29 20:38:00
4365
原创 web开发入门
以前无论在nokia还是tencent都是做移动客户端开发,那时候也都是用编译型的c++语言。但是来到baidu后做的却是后台开发,此时所用所要关注的都是以前不曾接触过的,主要是各种服务器脚本和数据库技术。当然:对这些技术的使用本身而言:网上N多文章,也很多相关的书。问题是:没有几本书可以把相互之间的关系解释清楚,比如:webserver和php脚本的关系;php底层实现;mysql底层
2011-06-29 20:05:00
3323
原创 回京
<br /> 去年7月来到腾讯,到现在有半年多了,参与了两个项目,可惜由于一些私人原因需要回京,只好离职。另找下家,签约baidu 。明天---新的开始! 加油!
2011-03-30 13:07:00
3447
3
原创 qt for symbian资源和dll的拷贝
当一个程序需要加载使用很多资源时:我们需要将这些资源都拷贝到真机中。比如:我们要播放几个声音文件,需要将声音文件给拷贝到真机中。类似的:程序可能还需要很多dll。这些dll又分两种:一种是已经做好的,一种是我们项目中生成的(亦即:我们工程分很多模块,最终生成了若干个dll和最终的exe)。对于前者:我们只要做一个拷贝即可,而对于后者:则需要生成后拷贝. 对于纯symbian程序,这些都是写在mmp和pkg文件中的,但是在symbian中:我们需要将其全部书写在pro工程文件中,而后qm
2010-12-13 20:26:00
4127
1
原创 qt for symbian前后台切换事件的截获处理
<br /> 在项目中需要做一个功能:当程序切换到后台时:需将代表程序的托盘显示在手机桌面上。而当程序切换到前台显示出来时则把托盘给隐藏。为了实现这一点,需要先截获程序前后台切换事件。 原本写过一片博文处理这个问题,但是那个并不怎么好用,这里给出最终的解决方案。<br /> 首先:qt本身无法跨平台实现这一点,我们只能针对不同平台来定制不同的方法。在qt for symbian下:有一个symbianEventFilter()事件过滤器,其可以截获所有symbian事件,这其中就包括前后
2010-12-13 20:01:00
3521
原创 symbian c++ 移植为 qt (2)
该篇讲一些移植项目进展中出现的问题: 1:我们移植出最初版本之后,别组同事拿去参考,于是他们也搭建了环境,拉下代码,编译也通过,但是emulator下桌面点击图标都没反应,也不报错,这原因何在?当在emulator中点击运行一个程序结果毫无反应时:主要有以下几个原因 ①缺相应的dll库,也许你的工程要用到很多自己写的dll库,结果缺失或者拷贝不到位,导致exe无法找到,从而启动不了。 ②版本不对,比如原本开发是用的qt-mobility1.0.2, 结果你安装的开发环境是q
2010-12-09 22:38:00
2908
4
原创 symbian c++ 移植为 qt (1)
<br /> 最近一直在做一个项目,主要是将原本symbian c++写的工程移植为qt版本。这其中遇到N多问题,自己也鲜有总结,接下来几篇文章就总结一下这其中的一些方法经验和教训,大家一起交流。<br /> symbian发展到symbian3和symbian4之后:原本的symbian c++生存空间越来越小,而qt将最终成为主要的趋势。所以原本很多用symbian c++写的项目都面临着一个问题:要么最新版本全部推倒用qt重写,要么做移植。 可能很多人会说:symbian c++的框架
2010-12-09 22:09:00
3866
3
原创 事件传递 + 自绘控件
做一个网络程序,一般要分成底层引擎 和 UI这两部分。对于引擎,其需要和网络进行互动,而受到相应消息时需要通知ui进行变化。但是该如何通知呢? 有人说:函数调用。引擎调用UI的更新函数。也有人说:qt中用信号槽。 这个也可以,但是效率太低,不推荐使用。 这个时候最好是使用函数指针, 具体如下做: ①:我们在初始化时在后台开一个定时器一类的东西,让它开始运行。后台这个timer相当于一个后台事件调度器。它一到事件之后就会驱动某个事件的发生。 ②:在先创建UI
2010-10-29 22:18:00
2151
5
原创 PIMPL模式
<br /> 进行跨平台的移植工作,这其中有些地方是无法完全移植过来的,所以:需要我们封装一个接口类,在不同平台下让其有不同的实现。要做到这一点:有很多办法,条件编译啊之类的。但是如果有这种方法,说白了:其还是两份代码,仅仅是放到同一个文件中。参考Qt实现跨平台的办法,正好读了一片这方面的文章,发现PIMPL模式还是很适用的。<br />----------------------------------------------------------//public.hClass Priva
2010-10-12 11:32:00
4638
1
原创 Qt生成灰度图
项目中用到大量基础图像处理知识,其中灰度图的生成是很重要的一环。 先补充一些基础知识:-----------------------------------------------------------------------------------------------------------------------------------一:灰度图 灰度图就是黑白图,整幅图片只有不同程度的黑白两色。灰度也可认为是亮度,简单的说就是色彩的深浅程度 ! 1:如果我们
2010-10-09 11:16:00
14478
9
原创 几种类型的内存模型
<br /> 今天和同学同事讨论了一下static const等等类型在内存中的存储,查了若干资料,总结如下:<br /> <br />1:一个由c/c++编译的程序的内存分为以下几个部分<br /><br /> 1:BBS 存放全局数据和静态数据<br /> 2:DATA 存放常量字符串<br /> 3:CODE 代码<br /> <br /> 4:Heap <br /> 5: Stack<br /> <b
2010-09-16 19:03:00
2071
5
原创 Qt-Mobility的使用
<br /> 项目中一些底层功能调用,想使用QtMobility来做,于是自己开始实际的接触。这其中遇到很多问题,我也参考过网上的一些文档,但也知道为什么,到我这始终是有问题的,这里补充总结下自己遇到的实际问题。<br /> <br /> 1:Qt-Mobility是搭建在symbian环境下,虽然也可以下载源码来自己编译win32 unix mac版本,但是我自己编译win32版本从来就没成功过,无论是g++还是nmake,总是提示源码中一些东西没有定义,我也搞不定这个,问了很多人都没
2010-09-13 12:07:00
7216
17
原创 utf8与unicode转换
<br /> 前端时间要自己实现utf8和unicode格式转换,打算封装一个类。也想过偷懒,直接网上找一个拿来用,但是后来发现问题多多。首先:接口不一样,其次:网上大部分方法还是不靠谱的,或者说:方法现在已经已经不适用了。<br /> 关于二者转换的原理网上很多,这里就不赘述了。主要说一下我遇到的问题:<br /> 我希望写成的接口是这个样子的:<br /> class CStrConvertor{public:
2010-09-13 11:43:00
20724
11
原创 最近生活
<br /> 6月底辞去诺基亚研究院的实习,返回北航的实验室。在诺基亚研究院呆了整整一年半,这其中做了两个大项目,学到了很多很多东西!我很感谢NRC教授给我的学识和经验!<br /> 7月中旬来到腾讯,开始参加入职培训,培训过程中接触到大量企业理念和文化,里边很多似曾相识,很多复杂的项目案例以前自己都有接触,此时感触到在NRC的收获是如此之多!腾讯的自由和行业挑战性让我很是欣喜!希望自己在这能技术更上一层楼!能学到更多!<br /> 培训期间自己无法更新博文,很多朋友发邮件咨询的问题
2010-07-22 22:41:00
1815
5
原创 Qt信号槽机制的实现
<br /> 因为面试时问了我这道题,导致我想去了解信号槽到底是如何实现的,于是贴着顺序看了下源码,大致了解了整个框架。网上关于信号槽的文章也很多,但是大部分都是将如何应用的,这里我就写一下我所理解的如何实现吧, 由于时间仓促,源码阅读的也不甚仔细,难免导致最终理解有偏差或错误,大家看出了请一定指正。<br /> <br /> 首先:信号槽其实就是三部分组成:信号的声明,槽的声明和实现 以及 connect函数。这其中我觉得最重要的就是这个connect函数了。<br /> 1
2010-06-29 15:04:00
3862
5
原创 解决qt mysql出现的:无法加载驱动问题
帮同学做的毕业,这两天一个很大的问题困惑的我不行。毕设我是用qt + mysql来做的。结果在自己电脑上跑起来很正常,但是编译一个release版本,拿到另外一台电脑上就报错说:can't load driver 。 试图去解决这个问题,今天总算搞定,这里总结一下。 首先需要说明的是:我用的是qt for vc2005,qt4.5.0 mysql server5.5 整个流程: 1:首先我编译了一个release版本,而后用dependency walker查看了下库的依
2010-06-29 13:15:00
9812
5
原创 面试题(Qt + 函数指针)
<br /> 面试官问的问题是:Qt信号槽机制,你觉得可以用什么策略来取代? 因为signal-slot本身是一个顺序执行的过程,只有执行完slot之后,才会执行emit的下一条语句。其策略类似于函数调用,只不过由于其在QObject中架设了一个大的结构,这导致其执行效率不是很高,比直接的函数调用要慢10倍(忘记拿看的数据了)。平时在做项目时:如果可以我一般是用写纯虚接口的方式来替代signal-slot。 面试官又问:你有没有想过用函数指针来替代? 汗一个先,以前真没想过,而且函数指针用的也
2010-06-23 16:45:00
17917
15
原创 面试题2(循环链表)
题目为:对于普通的单向链表,如果实现确定其内部有一个环,如何确定何处出现环路的?单向链表每个节点中只有data和next两个字段。 (单向链表含环路,不要总是想到“0”型环路,还要想到“6”字型环路) 原本听到这道题时,我首先想到的笨办法就是:建一个足够大的一维数组,,每个位置放Node*类型指针。而后开始遍历单向链表,遍历过一个节点后就将该节点的指针添加到这个一维数组中,随后与该数组前边的所有元素进行一次遍历比较,如果有重复,则定位到了这个出现环路的节点。 但是后来
2010-06-23 11:46:00
3214
6
原创 寻找未存在的最小数
端午节帮同学做一个关于数据库的毕设,这其中有一个问题值得总结。 问题描述:我们要向数据库中写有几个字段的记录。 其中第一个字段和第二个字段之间的关系是1:n 。 比如:第一个字段值为A,则其对应的第二个字段值为 1,2,3。。。 这就对应着数据库中的3条记录。 所以:我们无法用第一个字段来做主关键字。 而且其各个字段中也没有哪个字段的值是各不相同的,所以无法从这各个字段中寻找一个来作为关键字。(关键字段的值不可相同)。 所以:我们需要给它添加一个关键字段,同时要保证该
2010-06-18 11:25:00
1799
11
原创 Qt中父子widget的消息传递
<br /> 以前我一直以为:在父widget上摆一个子widget后,当click子widget时:只会进入到子widget的相关事件处理函数中,比如进入到mousePressEvent()中, 而不会进入到父widget的对应事件处理函数中。毕竟:click的是子widget,其遮挡住了父widget,从而父widget接收不到这个事件。然而事实真的是这个样子吗?<br /> 我做了一个测试: 在一个QWidget上建了一个QLabel。而后实现父QWidget的mousePressEv
2010-06-14 00:41:00
5777
6
原创 Qt与symbian特定格式类对象的转换
1:FbsBitmap转为QImage 应用场景:当使用摄像头时:拍摄的图像都是FBsBitmap,而如果要想让其显示在QWidget上,则需要首先将其转换成QImage格式。参数说明:aBitmap是传入参数,aImage是传出参数,当动态拍摄(相当于摄像)时:aStep为4; 当capture拍摄静态图片时:aStep为3.void FbsBitmapToQImage(CFbsBitmap* aBitmap,QImage* aImage,TInt aStep){ int aHeight=
2010-06-11 10:58:00
1309
原创 Qt for symbian工程文件的一些特异写法
symbian本身的工程文件不具有cross-platform特性,都是一些自己唯一的定义文件,像:*.mmp,*.pkg文件。而Qt得工程文件为*.pro。如何实现*.pro到*.mmp ,*.pkg文件的映射则值得总结。1:添加库对于添加库,无论是静态还是动态库,都需做两步:先是声名一下,其后是拷贝。二者仅仅是声名的方式不一样。1:声名:(1)动态库symbian:LIBS += MMP_RULES += "LIBRARY fbscli.lib"(这里我加的是名为fbscli的动态库
2010-06-11 10:29:00
1816
原创 笔试题(1)
<br />原题: <br /> 一个数组,里边存放三种球颜色值:红球为 'R',绿球为 'G ',蓝球为 'B ', <br /> 编程对该数组排序,使该数组最后的颜色排列如下:前边元素全部为 'R ',中间元素全部为 'G ',后边为 'B '<br /> <br />-----------------------------------------------------------------------------------------------------------------
2010-06-09 11:56:00
3453
12
原创 创新工厂面试经历
周五接到创新工厂的面试电话,让周一过去。我原先是投的实习岗位,毕竟NOKIA离学校太远了,想找个离学校近点的地方。咨询过原本去面试过的同学,说起来题目都很简单,无非是折半查找什么的,面试个把小时就结束了。结果到我这:我12点50到那,跟一个面试我的工程师一直面对面的聊到2点半,活活面了1个半小时,悲惨~午饭都没吃。(面试完了,我才明白:那工程师以为我是来面正式员工的,所以~~) 我以前也参加过几个公司的面试,但是这次面试的经历是最nice的!以前去朗讯面试,基本上过去做了张试卷然后和t
2010-06-08 11:09:00
81047
311
原创 Qt中如何实现QTextEdit中文字的单个删除 和 连续删除
前两天有人问我关于如题所示的问题,具体就是说:现在他想做一个按钮,当click它时:只删除编辑框中的一个文字,而当常按press时:则连续的删除文字,此后一旦release,则立即停止删除问题。 关于如何删除一个文字,这个很好实现,这里把重点放在:如何区分这两种状态上。 我在实现时:只用了一个定时器。总体为:当第一次press时间达到0.5s时开始连续删除,如果按压的时间不足0.5s即release,则只删除一个文字; 而连续删除文字时:是每隔0.1s删除一个,一旦中途re
2010-06-08 10:18:00
8407
4
原创 Qt中如何保存 自画图片 为 图片文件
<br /> 举两个应用场景:<br /> 1:画图板这种程序,当用户自己画了一幅图片之后,肯定需要保存成文件存放到某个路径下。<br /> 2:登陆一些论坛时:除去要填用户名和密码外,系统还会随机自动生成一张上边写有数字或者字母的验证图片,让你将上边的字符填入编辑框来进行验证。<br /> <br /> 其实上边第二个例子不怎么准确,因为虽然它也要依据系统提供的字符来自动生成一张图片,但是却不需要将其实际保存成图片文件,对于第一个例子则很准确:既需要实际生成一张图片,同时也
2010-06-05 00:29:00
12666
7
原创 Qt中如何禁掉所有UI操作以及注意事项
刚做完的一个项目,在测试时出现了一个问题:由于多线程的存在,当进行语音识别时:如果用户点击程序界面上的button或者其他widget,则会crash ! 后来尝试着从线程上去解决,但是比较困难;后来只能从另外一条路来解决,那就是:当语音识别进行时:禁掉一切用户操作! 所谓的禁掉一切UI操作,在手机等手持设备上,尤其是纯触摸屏的设备上,主要就是指的禁止mouse操作!当然了:也可能是禁止键盘操作等。那如何去做这一点呢? 方法:我们可以截获禁止操作的窗口的所有event事件,
2010-06-04 00:34:00
4688
6
Qt个性化菜单项例子程序
2010-05-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人