暂无个人介绍
linux的作业要自己编译一个mysql,但是我的系统上已经有一个mysql了,再编译一个,最麻烦的地方不在于编译,而是让两个共存。 前面的编译环节和普通安装没有什么区别,还是configure,make,make install。其中configure的时候,选择一下安装的位置,否则可能导致原来
在看linux内核源代码的时候,经常在一些结构里看见struct list_head结构。找了一下源代码,在list.h中,有对这个结构的定义,这个就是linux内核中的链表结构。 仔细看看这个结构,就可以发现它和以前在讲数据结构的时候的链表有很大的差别——没有数据。list_head结构中仅仅包
vmime对邮件格式和邮件协议做了很好的封装,使用起来还是非常方便的。 vmime对于邮件协议都封装在vmime::net名字空间中,主要要用到的对象,有: vmime::net::session,主要用于维护和服务器之间的连接 vmime::net::store,表示一个邮件存储,这是一个基
前文写了使用vmime库通过POP3协议收取邮件,继续写对邮件的解析。 解析邮件相对比较简单,需要将收取的邮件,重新从字符串转换成vmime::message格式,然后就可以获取到自己需要部分的内容了。 首先将vmime::string格式转换为vmime::message: vmime:
以前对xslt的了解,主要是通过docbook,知道在将docbook的xml转换成html之前,可以自定义一份xsl文件,对xslt过程中的参数进行设置。这次,因为要把一个单元测试结果xml转换为html,第一次自己写了xsl文件。 首先纠结的是版本。发现w3cschool上的xslt教程是基于
听说开源驱动现在已经不错了,就试着把系统里面的闭源驱动(fglrx)切换成开源驱动。 首先,先卸载闭源驱动:emerge -C x11-drivers/ati-drivers,因为现在用的xorg.conf是通过ati的命令生成的,先干掉。 然后,在make.conf中的VIDEO_CARDS环
很早之前就听说spice相对vnc来说要强大很多,之前因为安装的是32位的系统,没法进行尝试,安装了64位的系统之后,还没时间去折腾过。 上上周其实已经将以前的windows虚拟机的图形方式从vnc换成了spice,昨天又搞定了agent的启动和远程复制粘贴。 先说下安装,安装的过程相对比较方便
今天终于把端午写的代码在windows上(mingw)编译过了。过程还是比较艰辛的,这里记录下(之前boost库的编译,可以参考前面的博客): 1、cmake查找系统上的boost库,之前直接失败,原因是FindBoost这个文件只支持到最高1.46.0版本,自己编译安装的boost版本是1.46
csv文件的结构很简单,最基本的规则,就是用逗号分隔每一个单元格,用换行( 或者 )分隔每一列。其中需要注意的就是双引号为特殊的转义字符。详细的csv文件格式定义,在rfc4180中,主要的定义为: file = [header CRLF] record *(CRLF record) [CRLF]
杯具的写完代码才发现应用原来依赖的cglib使用了1.x的asm库,从最初使用3.x版本到2.x,然后使用1.x才搞定asm的兼容性。这里记录下不同版本如何读取annotation。 asm3.2: 这个版本非常方便,实现ClassVisitor接口,里面有个visitAnnotation方法,
gentoo安装软件的优势在于overlay具多,本来还不太清楚要怎么安装的,有了overlay一切就方便了。 首先要用overlay要安装layman,这个估计都已经安装了,修改下配置文件,增加自定义overlay地址: 在/etc/layman/layman.cfg文件中的overlays项
条款4:非必要不提供default constructor 这里主要是列举下默认构造函数的优点和缺点。 如果没有默认构造函数,定义对象数组会比较麻烦,因为对象数组初始化的时候没法传递非默认构造函数的值,如果要使用,书中提到的方法是给数组每个变量初始化的时候调用构造函数,另一个就是使用指针数组。
一般游戏涉及到的配置文件信息都以kv的形式存在且数量非常之少,这个时候搞一个sqlite的数据库显然有点奢侈,搞个配置文件合适一点,但是android的dev guide显然提供出来一套更合适的做法,SharedPreferences。 从存储的模式上来说 SharedPreferences实际上
条款8:了解各种不同意义的new和delete 这里讲了3种new,分别是:new operator, operator new, placement new。 new operator最简单,它就是我们平时常用的new关键字,需要注意的是,它是不能被重载的。new operator的语义是先分
原先的设计是通过已有的库,将数据通过rmi写入到远程服务器;现在有需求需要将支持多个,而且是自定义的远程服务器ip。 因为整个接口原先都是通过spring配置文件,包括rmi的地址。同时,为了维护方便,不能直接将打好的jar包拿过来改,于是就采用了复制原有的bean definition,动态注册
条款12:了解“抛出一个exception”与“传递一个参数”或“调用一个虚函数”之间的差异 第一,exception object总是会被复制,如果以by value方式捕捉,它们甚至被复制两次。至于传递给函数参数的对象不一定得复制。第二,“被抛出成为exceptions”的对象,其被允许的
之前使用beamer写slides,都是直接找的图片,所以直接采用贴图的方式。前几天搜索到了tikz这个宏包,发现它可以用来绘制图表,并结合到beamer中形成动画效果,因此找了一些资料,并尝试画简单的流程图。 首先,需要在源文件中指定引用tikz宏包,并且定义一些简单的图形: [cce lan
之前c++代码用过cppunit,然后开始用gtest,对于qt代码,第一次尝试使用QtTest框架。 要使用QtTest,首先需要在.pro文件中增加配置,让qmake知道要添加qt测试框架: [cce] CONFIG += qtestlib [/cce] 然后,就可以新建一个cpp文件
昨天晚上更新developer-mode的时候,更新完成之后n9就再也没有起来过,屏幕上一直显示nokia,然后就没有然后了。 记录下早上刷机的过程。 首先安装flasher,下载地址在,需要下载里面的3.12.1版本。 然后下载固件,找了个国行的pr1.2固件:大概有1.2G,还好公司的网速
最近突然要清理闲置服务器,最简单的指标当然是看下有多少服务器是最近没有人登录过的。当登录服务器的时候,init, tty等会将登录和登出信息记录到/var/log/wtmp文件中,通过last命令可以查询服务器的登录情况。 但是直接到服务器上执行last命令有几个问题,一是希望查询一个时间段内的登
为了将一个不知道什么类型的java对象存到数据库里面,用了个很恶心的方法:将对象序列化之后,保存到数据库的blob对象。这样整个序列化和反序列化过程,都期望在ibatis中完成,上层就能直接获取到需要的对象了。 第一次安装网上的方式,想直接参考spring的BlobByteArrayTypeHan
git svn主要使用流程: 从svn仓库初始化成本地git仓库: [cce lang=”bash”] git svn clone -s SVN_URL [/cce] 注意:SVN_URL是svn仓库的基础目录,不包含trunk,branches这些目录。这里加上一个-s是–stdlayo
java网页写多了,没事用c++写着玩。cgi,应该算是非常老了,它的最大好处,就是弄成可执行程序放进去就OK了。 因为平时只会用apache,这里使用的http服务器都是apache2。 为了使用类似java servlet方式,自己来绑定uri和执行方法,通过写一个dispatcher和re
可能是因为公司里写代码用velocity习惯了,找了google的ctemplate来实现类似的功能。ctemplate相对velocity比较简单,只有变量替换,简单的引用、循环。这里有ctemplate的详细文档,相对来说,就是不能在模板上有太多的逻辑。 首先,前一篇里面贴了dispatche
前面两篇博客讲了从uri到模板输出,还没有提到中间处理参数的部分。 首先,参数绑定简单的放在一个map中,这里用的是boost的unordered_map(也就是hashmap),其实已经可以使用c++11提供的unordered_map了。 [cce lang=”cpp”] boost::u
上文介绍了如何通过ajax异步上传文件,html5对file的新接口,可以使得在页面上,对用户也有更好的体验。 页面上要做的,仅仅是添加一个html标签: [cce lang=”html”] <input id="track" name="track" type="file" multiple
最近写一个前台页面,因为不用考虑太多兼容性问题,尝试了很多css3的东西,记录下。 1、渐变和边框阴影 最初的视觉稿,上面有很多地方颜色使用了渐变,为了不使用图片,用了很挫的方式来实现:从图片渐变开始、中间、结束部分,用gimp的吸管获取颜色,然后转换成css的渐变。不过因为渐变每个浏览器支持方
这篇博客应该是和之前的重拾cgi一起的。当时为了模仿java的web框架,从页面的模板,到数据库的ORM,都找个对应的库来进行尝试。数据库用的就是ODB,官方网站是http://www.codesynthesis.com/products/odb/。 1、安装 odb是直接提供源代码的,主要包含
2、使用 首先,需要定义一个对象,用来和数据库字段对应: [cce lang=”cpp”] #ifndef VOLUME_H #define VOLUME_H #include <string> #include <odb/core.hxx> #pragma db object cl
了解taskstats的最初目的,是为了监控服务器的IO,防止jmeter因为受压机异常,打印大量日志,把磁盘空间用光。后来发现,由于服务器内核版本比较低(2.6.19),所以没法直接通过读取proc里面的IO来获取进程IO。但是也同样是因为内核版本太低,taskstats结构中,也比新内核少了磁.
一、通过mount加上偏移 首先需要确认下镜像分区开始的偏移: [cce lang=”bash”] fdisk -l vm-xp-qa-new.img [/cce] 这个文件的输出为: Disk vm-xp-qa-new.img: 21.5 GB, 21474836480 bytes
文件监控直接通过了linux的inotify接口实现。这里没有考虑移植性,也就没像tailf那样,通过宏来判断是否支持inotify,如果不支持,降级使用循环轮寻的方式读取。 inotify的使用还是比较方便的基本上就是:inotify_init,inotify_add_watch,然后配合rea
之前将盒子作为下载机,为了能够直接播放上面的电影和电视,就通过minidlna,将视频共享出来,这样能够支持通过nexus 10平板播放这些电影。但是,即使升级到了1.1.0版本,minidlna还是不能将设置的视频目录中的rmvb文件共享出来。 参照网上搜索到的让 minidlna 支持 rmv
尝试通过cpp-netlib来做http服务器,但是这个库只能简单的解析http结构,像cookie等结构,都要自己解析,了解到spirit可以通过类似bnf范式格式定义字符串格式并解析。 boost本身有个类似的例子,解析的是通过分号或者&符号分割的键值对字符串,并放到对应的map中去。具体代码
chrome插件将js直接注入页面有两种方式,一种是通过Manifest文件中指定js文件,一种是通过chrome.tab.executeScript方式注入。具体可以参考这个官方文档。 由于各种需求,需要将部分js从后端服务器中进行加载。所以只能通过tab.executeScript的方式。具体
redis主备同步非常方便,通过slaveof命令即可同步。上周应用切换了redis,想让新的redis和旧的redis进行数据同步,结果把新redis中其他应用已经写入的所有数据都删除了。。。这里记录下恢复方法。 首先先恢复redis的dump文件。还好现在阿里云弹性计算集群给每个镜像每天都进行
之前参照yegal的文章在mac上安装了gentoo-prefix。但是在emerge git的时候,会发现如果增加了subversion这个USE,就会编译失败。 从编译失败的错误上,可以看出,编译失败的来源是svn相关的代码,然后错误是链接的时候提示一些符号找不到: [cce] Undef
SDS(Simple Dynamic String):对C字符串的封装,可修改、可自动伸缩的字符串实现。Redis默认的字符串实现。 SDS定义:(sds.h) [cce lang=”c”] struct sdshdr { unsigned int len; unsigned int fr
Redis字典采用哈希表实现。 哈希表: [cce lang=”c”] typedef struct dictht { //哈希表数组 dictEntry **table; //哈希表大小 unsigned long size; //哈希表掩码,用于计算索引值,总是等于size –
snoopy是什么?刚了解这货的时候,是公司服务器上有snoopy的so无法加载的错误,然后是系统日志里面一堆日志,导致机器空间不足。官方说明是: Snoopy is designed to aid a sysadmin by providing a log of commands execute
Redis使用跳跃表和字典共同来实现有序集合键(sorted set)。 定义: 跳跃表节点: [cce lang=”c”] typedef struct zskiplistNode { //成员对象 robj *obj; //分值 double score; //后退指针 st
整数集合(intset)用于集合键。当一个集合只包含整数值元素,并且数量不多的时候,会使用整数集合作为集合键的底层实现。相对于直接保存字符串,整数集合能够很好地节约内存,但是由于是数组保存,需要特别关注数组长度。 定义:(intset.h) [cce lang=”c”] typedef str
Redis对基础数据类型进行了封装,构建出上层的对象系统,这个系统包含:字符串对象、列表对象、哈希对象、集合对象和有序集合对象。 Redis对象结构: [cce lang=”c”] typedef struct redisObject { //类型 unsigned type:4; //
Redis数据库定义: typedef struct redisDb { dict *dict; /* The keyspace for this DB */ dict *expires; /* Timeout of k
复制(Redis2.8) 设置主服务器的地址和端口(SLAVE OF命令) SLAVEOF host port Redis的主从复制设置非常方便,只需要在从服务器上设置主服务器的IP和端口即可。如果需要关闭主从同步,只需要执行SLAVEOF NO ONE即可。 该命令的具体描述见官方文档 v
有的时候会有这样一个需求,页面上有个大表格,我需要复制里面的一列到本地。比如,我要从表格里面,复制列出来的所有机器IP(这样比数据库导出方便点~) 首先,先用chrome的开发者工具,找到要复制的列中的某一个单元格,然后选择复制xpath。这样会复制下来这个元素的xpath路径,比如: //
Sentinel(Redis 3.0.0-rc1) Sentinel是Redis HA方案,一个或多个Sentinel实例组成的Sentinel系统,可以监视任意多个主服务器(master), 以及这些主服务器属下的所有从服务器(slave),并在被监视的主服务器进入下线状态时,自动在将被下线主
通信 初始化完成之后,sentinel会主动和master、slave进行通信,获取他们的信息。 获取主服务器信息 首先,sentinel会和master建立两个连接,分别是命令连接和订阅连接(分别保存在sentinelRedisInstance的cc和pc字段中)。 void sentin
etcd etcd用于服务发现的基础注册和通知,功能类似于zk,通过注册和监听,实现基础的服务发现。 安装 etcd安装非常简单,可以用go自己编译,etcd也提供了可以直接使用的二进制包(64位)。 具体的安装提示页面在github上, 直接按照上面的描述下载即可。为了方便,把里面的et
confd confd通过读取配置(支持etcd,consul,环境变量),通过go的模板,生成最终的配置文件。 安装 安装和etcd一样,非常方便,已经提供了64位的可执行程序,下载下来之后直接放到PATH中(/usr/local/bin)即可(别忘了+x)。 haproxy配置生成 c