20
Jul

矢量图表SVG学习



最近在自己做的一个系统中需要图标显示一些信息,在查看学习了前面一些同事的程序后发现了svg这种图像格式比较适合,所以深入学习了一下,现在这里发一个demo程序。
Svg介绍
SVG可缩放矢量图形(Scalable Vector Graphics)是基于可扩展标记语言(XML),用于描述二维矢量图形的一种图形格式。SVG由W3C制定,是一个开放标准。 SVG严格遵从XML语法,并用文本格式的描述性语言来描述图像内容,因此是一种和图像分辨率无关的矢量图形格式。
Svg的图片可以很好的嵌入到html的文件中,并且可以结合js脚本,创建动态的图形,在数据图表显示上非常有优势。

测试程序:

#include <stdio.h>

#include <vector>

#include <string>

#include <sstream>

using namespace std;

int main()

{

    stringstream svgdata;

    string svgpic=”";

    char *svgname = ”svgpic.svg”;

    svgdata << ”<svg xmlns=\”http://www.w3.org/2000/svg\” xmlns:xlink=\”http://www.w3.org/1999/xlink\” version=\”1.1\”>\n”;

    svgdata << ”<a>\n“;

    svgdata << ”<rect x=\”20\” y=\”2\” width=\”500\” height=\”100\” rx=\”2\” ry=\”2\” style=\”fill:lightgrey\” id=\”helightxu\”/>\n”;

    svgdata << ”<text x=\”20\” y=\”80\” style=\”font-size:64pt;font-weight:bold;font-family:Verdana;fill:black;\”>Helight.Xu</text>\n”;

    svgdata << ”</a>\n”;

    svgdata << ”</svg>\n”;

    svgpic = svgdata.str();

    FILE * fp=fopen(svgname,”wb”);

    if (NULL == fp) {

        return false;

    }

    fwrite(svgpic.c_str(), svgpic.length(), 1, fp);

fclose(fp);

 return 0;

}

生成svg图像代码:

<svg xmlns=”http://www.w3.org/2000/svg” xmlns:xlink=”http://www.w3.org/1999/xlink” version=”1.1″>

<a>

<rect x=”20″ y=”2″ width=”500″ height=”100″ rx=”2″ ry=”2″ style=”fill:lightgrey” id=”helightxu”/>

<text x=”20″ y=”80″ style=”font-size:64pt;font-weight:bold;font-family:Verdana;fill:black;”>Helight.Xu</text>

</a>

</svg>

图像结果显示:可使用adobe svg viewer来查看svg图片。

晕乎,图片无法上传。。。



22
Jun

软件的灰度发布



      最近一段时间都是在搞我负责的部门数据接口的转换,所以最近一段时间连续升级了自己管理的几个小系统的数据接口。部门服务器的端口是要严格控制的,所以首先也要在我们自己的服务器上去做监控,一旦发现立杀无赦。在端口监控这个项目上是一个C/S的结构,服务器保存规则,客户断请求,但是这些都是线上服务一旦切换错了,那问题可就。。。。
       在和同事交流了之后,他建议我使用灰度发布,并行两套服务器程序,两套客户端程序,让新的客户端程序逐渐取代原有的客户端程序,最终停止原有的服务器,从而完成服务的无缝切换。这样可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。
      其实公司现在的厂品发布基本上都是灰度发布模式。所以也是学习了一下,这次的发布还算是比较成功,在经过自己线下测试之后,就上线了,至少现在还是稳定运行的。。。

    嗯!公司的业务算是在接手中了,开发,测试,发布,都在稳定的进行中,虽然由于一些个人的事情这个进度有点慢,但是还是可以比较轻松的接下来处理完。还在学习中。。。虚怀以待!

      等公司的事务顺手了还是要看看内核了,再做一做内核学习。



22
May

入职的日子里



如公司以来,先是培训了!培训完了就正式到部门入职了,由于学校的某些问题,真正的入职一直到了5.12才办理,那天带着些许的敬畏之心,毕竟今天是5.12不应该是一个值得开心的日子,但是没有办法,还得去办理入职手续,办理完也就算是一名正式的公司员工了。

在到部门之后,接手了一个om系统的维护和开发,是我那个被我鼓吹的很好前景的xhttpd绝对超前版,我那个只能说是现有系统万一了。而且最近公司服务器信息接口要变动,而我管理的这个om系统是受影响比较大的,所以这周都是在做这个数据接口了,接口数据是json格式的,以前都没有怎么接触过,现在只能现学现卖了。还好,经过一番小小的努力还是解决了!本来可以提前解决的!但是。。。呵呵,有丁丁么!工作就按进度完成就可以了,还是多抽点时间陪陪她吧。

本来打算是用c++来做json的解析,但是做了很久发现要依赖的库太多了!后来周日早上上网看信息的时候发现pyton有很好的解决方法。回来试了一下,发现还真的很轻松,在公司某些高手的帮助之下显示完成了数据的获取和解析,后来再做了数据的入库,自己设计数据库。。。。。

在深圳的这段时间,过的是很有点紧张,并不是说经济上紧张,而是时间上,总感觉是时间在赶着你走,也许这就是上班族的生活吧!



4
May

vbox下文件夹共享问题总结



一直以来就没有把这个问题正真当作一个问题来对待,每次配置的时候百度一下也就ok了!可是安装次数剁了,总是这样查来查去就不是很方便了,所以今天就总结一下。

1》Vbox中安装了Linux系统

在Vbox中安装了Linux系统后,就需要使的Linux虚拟机系统和真实的主机系统共享文件了,这里这个真是的主机系统可以是windows也可以是Linux,这个对后期设置没有什么太大的影响。

a。首先在开启的虚拟机停止的情况下操作(在虚拟机开启的情况下也是可以操作的,只不过那样添加的是零时的,这里介绍永久有效的),在配置管理中选择数据空间管理,添加新的文件夹并且给此次添加命名,比如添加了E:\,并且命名为epan。

b。在虚拟机中使用命令“mount -t vboxsf epan /mnt” 这样就可以了,如果要使其开机自动挂载,则需要在/etc/fstab中添加一项,如下:

epan   /mnt  vboxsf   rw,auto    0    0

2》Vbox中安装了windows系统

在Vbox中安装了windows系统后,就需要使的windows虚拟机系统和真实的主机系统共享文件了,这里这个真是的主机系统可以是windows也可以是Linux,这个对后期设置没有什么太大的影响。

a。首先在开启的虚拟机停止的情况下操作(在虚拟机开启的情况下也是可以操作的,只不过那样添加的是零时的,这里介绍永久有效的),在配置管理中选择数据空间管理,添加新的文件夹并且给此次添加命名,比如添加了/home/helight,并且命名为helight。

b。在windos虚拟机中的cms命令框中输入下面的命令:

net use G: \\vboxsvr\helight

这个命令在执行之后将会在“我的电脑“中产生以G盘符,通过这个盘符就可以访问Linux主机下的/home/helight目录了!

后记:这里只是为我自己做了一个备忘,怕自己以后再要搜索,太麻烦了!



7
Apr

在内核模块中直接发送数据到网卡



      前几天去了一个公司再做什么音频会议系统,他们买了一个音频处理芯片,但是这个芯片和cpu的接口比较奇怪!atm的接口,但是却没有遵循atm的协议,atm的协议一包是53个字节,但它确实56个字节,而且不是简单的在53之上再加3个字节,是打乱的字节序列!这下没办法了,本来先使用atm的驱动模型来做就可以了!但是最终发现以我现有的技术行不通!而且他们需要在接收处理之后直接通过网络接口再发送出去。
       没办法,那就另辟蹊径吧!!!所以做了这样一个测试:在内核中直接接收处理硬件发送来的数据!自己做协议处理!然后在发送到网络接口,这我也先到两种方法:
      1。在接收到数据后直接用netlink传输到用户空间,让后处理处理完了使用socket接口再发送出去。
       2.在内核接收到数据后直接通过内核的网络socket发送出去!
第一种方法是我以前经常做的方法,已经没有什么新鲜了,第二种方法我以前倒没有做过,感觉比较新鲜,但是以我对内核的了解,这种方法肯定是可以的!所以昨天做了一个小测试。晚上终于调试通过。

程序的执行步骤如下:

1.调用内核的sock接口创建sock

2.然后链接远程主机(这里是链接了一个web服务器主机,这个web服务器是我写的,我可很方便的查看是否有这个内核模块发送的请求)。

3.链接成功后我做了一个http的请求报文,

4.将这个报文发送到要请求的服务器!

5.我在服务器端看到报文完整接收了! (成功!)

一下是使用的关键内核函数:

  1. err = sock_create(AF_INET, SOCK_STREAM, 0, &amp;knsock);
  2.  
  3. err = kernel_connect(knsock, (struct sockaddr *)&amp;knsadd, sizeof(struct sockaddr), 0);
  4.  
  5. err = kernel_sendmsg(knsock, &amp;msg, &amp;iov, 1, iov.iov_len);
  6.  
  7. sock_release(knsock);


23
Mar

OOM-killer



Out-of-Memory (OOM) Killer是一种保护机制,用于当内存严重不足时,为了系统的继续运转,内核迫不得已挑选一个进程,将其杀死,以释放内存,缓解内存不足的问题。可以看出这种方式对进程的保护是有限的,不能完全的保护进程的运行。
OOM Killer的关闭与激活方式:
# echo “0″ > /proc/sys/vm/oom-kill
# echo “1″ > /proc/sys/vm/oom-kill
要对某个进程进行OOM保护的话就直接向“/proc/pid/oom_adj”中写入“-17”即可。



2
Mar

乡情依旧。。。



从鼠年过完年到牛年就一直没有回过家,总是种种的借口,种种的理由,在这个即将要离开的城市里晃来晃去。但也总想着回去,想着也就现在自由时间比较多一点,可以回去看看。但是去年的暑假还是没有回去,年跟年了,算这算着就想回去,赶紧的写完了论文就想回家,但是却由于一些原因又多留了一周。最后终于回家了。
家始终都是一个牵挂的地方。中国人比较讲求根。以前听童安格的《根》就感动的不行,这也确实反应了国人的“根”的情结,就是在这样的文化之下,到现在大部分的中国人还是还是有这样的情结的,我当然也是其中一个。
回到家已经是腊月二十六了,说也是岁根年末了,到家就很自然的说起了家乡话,家乡的风土依然,人情依然。背着沉重的背包,走过熟悉的小路,寞寞的走到了家门,还是那样子,巷子也还是那样子,一年又一年,还是那么熟悉。呵呵!回家了。。。
年前就基本上在家里待着,没什么特别的事,就和老爹老妈妹妹聊聊,想着做什么好吃的,呵呵!再就是干点家务活,扫扫地,喂喂牛,喂喂狗什么的。冬天的农村么,基本上也就没什么事!到三十下午贴对联,然后整个家族去上坟,回来后就开始一家人在一起吃饭,让后看电视。确实也简单,但是也正是因为这种熟悉的简单才感觉到幸福。
初一,按照村里的传统,每年的正月初一早上,全村的大人小孩都要到一块空地里,互相到祝福。然后有一个简单的仪式才回家,但是到现在也就基本上是家里男的带这小孩们去了,记得小时候还要拉着自家的牛或是驴子,也要给它们弄个小仪式的。现在人懒了也就淡了,估计以后小孩们都不会记起曾经要这么回事了。家乡那些简单而又欢快农村习俗,还真想保留下来。
过年回家拜年是我最喜欢的了,不仅是小时候很喜欢,现在也是,小时候是能收到压岁钱,现在却真想见见亲人们。一年没有见,总是感觉很想他们,所以总想去走亲戚去拜年。给老爹老妈拜年,然后去爷爷奶奶家拜年。总是感觉农村这样事情简单而又有人情味。
拜年从初一到初五,每天都去亲戚家,我们家亲戚不是很多,所以去了之后聊聊玩玩,还是很开心的!
从初七开始开始干农活了,今年立春立的比较早,所以年后就开始地上走动了,还记得爷爷每年都念叨的那句话“九九加一九,耕牛遍地走”。还好现在我们那里使用牛的相对比较少了,呵呵,不过这几天我和老妈还是开着牛车去了地里,年后的天气都很好,尤其到了初留以后,站在地头上暖暖的春分吹着,很舒服。这也有好几年没在家老老实实的干农活了,这几天也买了把命,是有点辛苦,但是机会不是很多了,多干点吧!!!
每每走在村子里那熟悉的路上,就感觉很舒服!!!乡情依旧。。。



21
Jan

白色陶瓷娃娃



  小董婷买草娃娃的时候我也要了一个白色的陶瓷娃娃!虽然有点贵,但是玩么!还是挺不错的!
回来在水里泡了泡,每天给浇点水,居然这几天开始疯狂的长了!!!呵呵!不错吧!
   早上豆瓣电台给我放了一首Eric Clapron的音乐,有点激动了,好长时间都没有听他的音乐了,暑假去宝鸡市里面逛的时候发现他的CD买到50块一张!有点忒贵了!没有买!!!

呵呵,看我的陶瓷娃娃吧!!



29
Dec

我学生时代之源代码



自己的学生时代就要结束了,不管有多么的不舍,终究是要结束的,但还是想做点什么吧!至少是对自己这个浑浑噩噩的前20多年有一个交代,也不用去管到底是好还是不好了。总结历史只是让我们能更清楚的认识自己,认识自己应该走的路。。。



想把自己学生时代的东西总结一下,总结一本册子,从小学到目前应该也写了不少东西了,应该也是一本非常有意思的个人传记吧,哈哈,现在就开始给自己写传记了,老是把自己看的太牛了。。。应该要低调阿。。。

书名就叫《我学生时代之源代码》吧,名字感觉有点不顺呢!!!斟酌。。。 


25
Dec

冬至记事



冬至吃饺子,说是中国的传统习俗了。百度了一下关于冬至的相关知识,冬至还是有着深厚的内涵的。无论从天体行星运行到民族习俗,无一不是表明冬至这个一天的重要。现在,一些地方还把冬至作为一个节日来过。北方地区有冬至宰羊、吃饺子、吃馄饨的习俗,南方地区在这一天则有吃冬至米团、冬至长线面的习惯。各个地区在冬至这一天还有祭天祭祖的习俗。毕竟是一次民俗的节日。我还是一个比较传统的年青人么。对于这些节日我还是感觉文化气息和底蕴要比更为深厚一些。

而最近我也是一直在组织各样的活动,而这次我想组织一次冬至这一天的聚会,因为我不准备去过所谓的平安夜或是圣诞节,这个好像和中国没有什么关系。而现在人们却把这样的节日商业化的到了让人恶心的地步。

所以想在这样一个传统节日的时候来点特别的,让其他人也能感觉到传统节日在我们的生活中还是很有意义的。这样一个想法也是琢磨了一周了,之前很早就记住了这个日子,再计算了时间和其他人的近期计划,感觉还是有意义去搞的,也是会有很多人来参与的。呵呵!计划的还是比较好的。。。

果不其然,那天白天我出去陪朋友转了转,然后在下午3点多的时候回来了,和师弟师妹们出去张罗着买了点水果,当然还有饺子。还和董婷师妹出去买了一点菜蔬–她说要给我们大家煲个汤,呵呵,这个小师妹老是给我们说她做什么什么好吃的,老馋我们,今天就看她的手艺了。老苏和老谢还去把电磁炉拿了过来,万事具备,只欠宾客了,都准备好了,开始给她们打电话通知了,其实在之前也都给他们打过招呼了,现在也就是告诉他们开饭了。武婷自告奋勇的要给大家煮饺子,呵呵!最后我也记不清出来了多少人,但是粗粗的估计一下也有20左右人吧!呵呵还是比较大的饺子大聚餐阿!

把大家都叫齐了,也开吃了,看着大家调汁的调汁,弄水果的弄水果,煮饺子的煮饺子,呵呵,其实吃饭在这种时候也就成了一种简单的形式,重要的是大家在一去弄吃的,大家有说有笑的那种感觉。把大伙聚到了一起,一起开始真正的生活,这个时候感觉大家都是真实的,生活也才是真实的。虽然后来由于饺子比较香甜大家吃的不够了,看着大家意犹未尽的样子,我想–也许下一年我可以不用去提醒大家了,他们会自己聚到一起。