针对Java JIT的优化(转表工具:xresloader)
之前做了一个转Excel表到lua/二进制/json/xml的工具-xresloader。目的一方面是方便策划。另一方面是统一客户端和服务器的转表模式,并且要灵活适应环境变化。
最初做的时候考虑到既要方便Windows下策划和前端使用,又要方便后台部署在服务器上使用,甚至要集成在一些自动化的系统里。所以必须要跨平台。
之前做了一个转Excel表到lua/二进制/json/xml的工具-xresloader。目的一方面是方便策划。另一方面是统一客户端和服务器的转表模式,并且要灵活适应环境变化。
最初做的时候考虑到既要方便Windows下策划和前端使用,又要方便后台部署在服务器上使用,甚至要集成在一些自动化的系统里。所以必须要跨平台。
之前由于兴趣写了一个协程框架,目前这个框架已经投入项目中使用。
这个框架的上下文部分是使用了boost.context,但是从开始写libcopp到现在,boost.context也更新了几个版本。而之前几次merge基本都是简单地跟进了make_fcontext和jump_fcontext两个函数,这次就再稍微翻了一遍其他部分的代码。
首先是它在非windows栈分配的时候,增加了valgrind的适配。不过boost.context里的不同平台的栈缓冲区其实结构差不多,但是boost的实现里给复制粘贴了很多遍,所以我就干脆把这些地方合并啦。减少了一些重复代码。
记一下最近踩得两个C++独有的暗坑,其中一个和ABI相关。第二个坑其实之前研究过,但是没有实例,这次算是碰到了个典型的实例。
在项目中碰到的实例的大致流程是:
现在Redis的集群功能已经Release。但是并没有一个官方直接提供的高可用性的API可以使用。有的只有解决方案,Sentinel和Cluster。所以有必要自己设计一套高可用的Driver层以供业务使用。
CentOS 7 已经用firewalld替换掉了iptables并用systemd来管理启动服务(之前是chkconfig)。而且下一个Ubuntu的长期支持版也要这么干了。
搭建自动化构建(jenkins)的过程中碰到了挺多问题,需要装各种插件解决。为了方便下次部署,这里先记录一下用到的插件及用途
Written with StackEdit.
最近一个人搞后台,框架底层+逻辑功能茫茫多,扛得比较辛苦,一直没抽出空来写点东西。
空闲的时间,完善了LLVM+Clang+libc++和libc++abi的编译脚本。不得不说clang的编译脚本质量比gcc差不是一点点。为了在centos下尽可能编译出更多的功能和llvm的子项目,要各种改各种试才终于自举通过,并且这种情况编出来的二进制大得夸张。不过总算是告一段落。
因为项目需要,买了本《Redis的设计与实现》的电子版,顺便给这本书的作者贡献了一丢丢的Redis文档的翻译。这本书通篇贴代码,有点看blog的感觉,写得还是很简单易懂的。(不过谁告诉我为毛我花了30大洋买完不到半个月就变成10块了,坑爹么不是。T_T)
另外还零零散散地看了些《程序员的自我修养-链接、装载与库》 这本书云风之前推荐过。并且在我看得这些里国人写得书里,这确实是一本值得推荐,并且不可多得的佳作。
LLVM和Clang工具链的生成配置文件写得比较搓,所以略微麻烦,另外这个脚本没有经过多环境测试,不保证在其他Linux发行版里正常使用。
由于生成动态库会出现一些问题,所以目前都是采用llvm默认的静态链接的方式。但是静态链接生成的文件比较大,并且链接的东西很多,有可能会出现链接超时的错误。 这时候可以通过手动cd到编译目录,执行 make && make install 即可
本来看到Android的ndk都开始用gcc4.8和gcc4.9了,而且gcc4.8.1开始支持全部的c++11的特性,我就很happy地用上了。结果出现这么个错误。
本来想参考下tolua++的对象生命周期维护方式。一不小心发现了一个坑。
我这里用得是tolua++ 1.0.93版本。
tolua++在new一个类的时候,会把类指针作为userdata传入lua,建立metatable并通过tolua_classevents函数给metatable注册魔术方法。
近期倒腾下客户端,想搞个cocos2d的工具。 之前的那个集成到Win32工具下的调试辅助工具是直接用的windows api。拓展起来巨麻烦。而且Windows默认的字符集是宽字符集,和cocos2d与lua交互起来得到utf-8之间转来转去,十分麻烦。所以干脆花点时间一口气搞完这货。
最近给公司搭建Gitlab作源代码管理工具 满满都是坑呐。
Gitlab 开源仓库软件包官方地址: https://about.gitlab.com/
https://about.gitlab.com/downloads/ 这里有各个Linux分支的安装包,下面的说明笔记齐全,直接使用比较简单。
LLVM和Clang工具链的生成配置文件写得比较搓,所以略微麻烦,另外这个脚本没有经过多环境测试,不保证在其他Linux发行版里正常使用。
如果第一次执行出现安装失败,可以再执行一次。llvm的安装脚本问题多多
Github地址: https://github.com/owent/libiniloader
OSChina镜像: http://git.oschina.net/owent/libiniloader
项目中经常会碰到需要读取配置的情况,而用ini配置最大的优势就是简单易懂。 但是现在很多的配置读取库都过于庞大了,比如Boost.PropertyTree,功能很强大,但是基本不会用到里面所有的东西。 另外微软的INI读取,功能不是很强不说,还限制在Windows上,更重要的是API设计得实在不优雅。 于是libiniloader就诞生啦。
WP Code Highlight.js1
https://github.com/owent/WP-Code-Highlight.js
http://wordpress.org/plugins/wp-code-highlightjs/
This is a plugin of Wordpress using Highlight.js2 to make codes on posts, articles or any web pages more beautiful and easier to read.
This plugin allow you to load Highlight.js from local web server or some of public CDN we collected.
To make you easier to migrate from SyntaxHilighter and Google Prettify to Highlight.js, this plugin will provide some compatible mode so that you need not to change any code on your old web pages. They will be converted automaticly.
在项目开发过程中,时不时会碰上需要使用一些工具来做一些自动操作或者附加功能。特别是有一些外部组件只会提供Web工具,或者如果产品会发布在Web上的时候,在线上的产品中加调试指令显然是不安全的(前段时间刚好有携程线上服务器暴露的调试接口,导致用户信息泄露的事故)。这时候我们就可以借助Chrome来制作一些特别的小工具。 使用Chrome来自作工具有几个好处:其一是对熟悉Web开发的人而言,它用得全是Javascript(当然你也可以用Go语言)和HTML,没有太多额外的学习成本,而且现在的Chrome对HTML5标准支持得也比较好,基本的功能都可以实现;其二是不需要花多少时间在UI方面(作为一个后台开发表示The easier the better);其三是在需要的时候,还能开发为App,直接运行(另外还有一个项目叫Nodejs-webkit,提供了打包成不依赖Chrome本地应用的功能,而且底层用了nodejs,提供了更加强大的系统资源访问的功能)。总而言之,作为开发工具而言已经绰绰有余了。
详情及变更请参照: Linux 编译安装 GCC 4.9
GCC4.9发布啦,本脚本在之前4.8的基础上做了稍许改进,更新 PS:4.9.0 开始支持C++1y特性 GCC 4.9 的大致变更如下,因为我只用C/C++所以更关注**通用性高的C和C++**的部分啦: