Jump to Navigation

Welcome!

  NullGet是使用Qt编写的,运行于多种平台的GUI界面的多线程多协议断点续传下载软件。  使用NullGet可以轻松下载网络的多种协议的数据流,加快下载速度,支持断点续传,目前支持的协议有:HTTP,HTTPS,FTP,MMS,RTSP。而且它能运行于当前大多数流行的操作系统,包括Windows,Linux,FreeBSD等。     下载NullGet

  NullFXP 是一个基于Qt 4 开发的SFTP/FTP 客户端软件。目前已经实现基本的多文件上下传功能。详细信息查看本站项目说明页面。     下载nullfxp

  我们的目标是打造一个开源的,跨平台的,多线程的,运行稳定的下载软件,另一个就是整理Qt库开发跨平台GUI应用程序的相关资料。欢迎各位朋友对本站开源项目提供意见及建议,欢迎有兴趣的朋友参与本站开源项目,请联系 drswinghead at gmail dot com

gmagick图片处理优化打包

在做网站的图片处理项目时,碰到系统自带的graphicmagick库与效率比较低,
导致服务器负载偶尔达到 300-500的值,这种状态服务基本不用了。
而这个图片处理系统设计的是实时图片处理,前端加varnish缓存的模式。

一旦达到这个范围的负载Load,整个服务基本处于不可用状态,
大概有70-80%的图片处理请求得不到处理,在页面上显示白页了。

这是由于在默认情况下,全部使用CPU的x86指令处理图片,不但耗CPU,而且处理速度还慢。

经过一些理论研究与摸索测试,找到了一个能够大幅优化图片处理效率的方式。

这个优化方式,着重在三点,
1)使用新版本的包,
2)使用CPU的针对图片处理的高级汇编指令
3) 使用openmp并行处理

这里主要使用了libjpeg-turbo这个处理库,这个库尽可能使用了硬件支持的专门处理图片视频的CPU扩展指令,所以效率非常高。

据其官方测试这个库处理图片的效率是系统默认libjpeg的3-5倍。

根据自己的实现项目测试,这个优化效果也非常明显。

关于这个库的详细说明详见其官方网站。

工作重点与IBM发展规化之间的关系

在工作过程,如果没有一个重点,则工作上会被当前环境左右,
虽然靠工作推动的学习发展过程能够比较好的适应当前的职业需要,
但是长此以往,自己的职业发展可能遇到问题。

从蓝色巨人IBM的发展规化,看本人的职业发展,觉得有些可以类比的。
IBM在最近10年内,从原先的包罗万象的全能型公司,逐渐向两个方向发展。

第一个是服务型/解决方案型软实力方向,依靠这种宏大的理念与思想主导行业的发展。
像IBM的解决方案,大家应该比较了解,给出一个需求,IBM从全局来掌握设计,
体现出强大的先进的软实力。
曾经IBM为美国某个城市设计了“智慧城市”的城市规化,当听到像这种概念时,
不得不佩服IBM超载当前现状的长远眼光和智慧。

第二个是高精尖的科技研发,依靠先进的科技引领科技潮流,占领科技市场。
像目前科技市场已经成熟但缺陷比较大的存储技术,让存储效率更高,存储密度更大的需求。
在这一上一下,也就是全局与一点之间,还有一类不上不下的市场,
像普通的开发与生产,已经被IBM抛出去了。
如PC的设计与制造,已经卖给了中国的联想公司。
部分中端软件的开发,已经外包到中国的软件公司和印度的软件公司了。

Category:

simhash(局部敏感哈希)示例演示

simhash(局部敏感哈希)示例演示
海明哈希算法

新窗口演示:http://qtcnet.duapp.com/demos/simhash.php

代码服务器与测试机自动部署

  在前一节中,讨论了代码的自动同步几种方式的原理与实现。
  本节中,对开发机环境整体的代码存储与自动部署作个介绍。

Category:

PHP的PDO遇到MySql has gone away的解决方法

在MySQL特定的数据库参数配置的情况下,在一个超时的连接上调用任意的mysql函数,

会导致PHP的PDO扩展报"MySQL has gone away"警告,导致程序无法继续执行。

在使用多种PHP层的解决方案后,依旧无法避免这一问题的出现。

原因在于PDO架构采用了连接对象缓存机制,在使用相同的dsn串连接数据库时,

PDO会从连接池对象中取出有相同dsn串的连接,问题就出在这个地方。

当该连接出现了"MySQL has gone away"之后,PDO并不知道这一情况,

PDO连接对象仍旧在PDO的连接池中。

下次即使在PHP层检测到这一问题,并重试连接,PDO却返回之前报了错的连接。

问题的原因查找到了,接下来就是寻找解决方法。

由于PDO没有提供关闭连接的方法,而是依靠PHP本身的引用计数与垃圾回收机制关闭连接,

在大多数情况下这都没有问题,但这时候这种机制就略显无力了。

经过多次实践修改测试,总结出来以下两种方式,

简单动态web js/css压缩与cdn系统

1、目标,
优化处理过程,不再需要每次有svn提交重复处理所有文件。

自动化程度更高,添加自动处理多文件控件的动态按需合并功能。

采用实时动态js/css压缩,只在有请求时才有压缩,而不是之前的预先把所有文件压缩好。

相对可靠的自动varnish缓存清理,降低从更新代码到生效的时间延迟。

减少svn钩子端代码量和处理时间,SVN服务器减负。

添加处理日志,帮助处理异常查询。

调整svn目录结构,更合理规范。

2、使用技术组件,
nodejs做js/css压缩。

nginx/varnish做服务与缓存。

graphicsmagick做图片压缩优化。

3、服务组件图,

4、压缩处理程序流程图,

Category:

php扩展编写中的整数参数接收

在php中没有C/C++语言中的unsigned long long,unsigned int这些无符号整数类型,

在C/C++程序中一般表示为uint64_t,uint32_t等。

如果在php扩展中需要接收这些无符号数据类型,则需要特殊的处理方式。

对于在PHP支持的范围内的整数,可以直接使用"l"参数获取,

但对于赶出php支持范围的整数,一般需要使用"s"参数获取,

之后在C/C++语言中转换成无符号整数。

也就是,通用的情况下,参数定义为mixed(integer/string)类型的。

在扩展中使用"z"接收参数,接收到之后,使用宏Z_TYPE_P判断参数的实际类型,

对于Z_TYPE_P == IS_LONG的时候,直接转换成无符号类型,

因为这情况情况说明PHP正确传递了整数类型的参数。

如果超出了PHP处理的范围,参数会被转换为浮点数,宏Z_TYPE_P应该为IS_DOUBLE类型。

这样就可以根据扩展中判断出来的类型做不同的接收处理。

当使用字符串类型传递这种参数时,Z_TYPE_P == IS_STRING,转换一次就可以。

Category:

做了个php-hyperdex扩展

前几天使用 hyperdex的golang客户端api编写导数据程序,

发现golang API还有一个内存泄漏的BUG,导致长时间导入数据时内存占用非常大。

一般导入100w条后,4G内存的机器已经受不了,但准备导入的数据大概2000w或者更多。

这几天花了点时间,找了个hyperdex把 php 语言API扩展,

发现其已经是很早之前的,已经与现在的hyperdex版本不兼容了。

在此基础出,迁移到了与最新版本的hyperdex兼容,并且添加了HyperdexAdmin相关的功能。

有兴趣的可以看看, 代码在github上, https://github.com/kitech/php-hyperdex

现的状态是基本功能完成可用。

后续的改进包括,

1、支持超时参数。。

2、支持hyperdex官方的C API中的异步执行功能。

3、把代码改到使用hyperdex的C++ API,转为C API是hyperdex在C++ API基础上封装的。

4、admin管理API异常/错误处理完善。

Category:

我阅读过的IT专业书籍、文章

Joel 说软件 2016

golang 编程语言 2016

python cookbook 2015

浪潮之巅 , 吴军, 2012

淘宝技术这10年,子柳,2013

Hadoop指南II

Category:

hyperdex导入数据测试

hyperdex发布了1.0正式版本。
抽了点时间预先测试了一次。

本次测试使用的go绑定api编写的导入数据工具。
对go语言还不太熟悉,写的测试程序可能没有达到最优化状态。
另外hyperdex的go语言api还不完善,跑一段时间后内存被吃光。
使用的是普通的台式机,没有在服务器上测试。
hyperdex 导入数据测试结论,
比较费资源,优化的不够。分区随意,很容易造成数据在多个节点分布不均匀。
导入测试100w记录后,在没有请求的情况依旧占用大量CPU。
导入速度不是太快,在普通台式机上,可写入每秒300-400条记录。
磁盘文件不会清理,目前还不知道怎么清理。
还没有测试区间搜索功能,第二索引搜索功能。

这次测试结果并没有到达预期的效果,但在hyperdex有一个基本的认识。
后面再通过测试程序做更全面的测试。

Category:

页面

订阅 www.qtchina.tk RSS


Main menu 2

by Dr. Radut