作者归档:Dante

RSS feed of Dante

最后更新于 .

这几个月实在被android的圆角制作折腾坏了,国内的几个站要不就是添加的圆角全是锯齿,要不就是体验烂到极差;国外的 www.roundpic.com 其实不错,只是在制作大图标的时候,圆角的半径会出现问题。

所以干脆今晚花了3个小时自己写了一个工具:http://uapp.me ,以后app开发相关的工具也都会陆续放到这里来,希望能给大家提供点帮助。

附一张截图:

QQ20140112 1

最近实在是被各种事情搞得焦头烂额,看我这篇文章的发表时间就知道了,等稍微闲一点,再多和大家交流心得吧。(汗,刚才发现这文章只显示日期,不显示时间。。)

最后更新于 .

因为需要把pc端的一部分特性迁移到手机上,所以就直接用了air来打包。但是发现ane对air sdk的版本要求很高,所以要手动升级一下。

而之所以把flash builder的4.6和4.7版本都升级,是因为4.6是最后一个支持设计界面的版本。。

好吧,废话不多说,直接开始吧。网上很多教程有点问题,我尽量描述的细一些。

4.6和4.7版本的升级方法是不一样的,所以分开来说。

注:现在的air sdk版本是3.8,对应的数字是21。

一. flash builder 4.6版

1. 到 http://www.adobe.com/devnet/air/air-sdk-download.html 下载air sdk,这里是一个很大的坑,对于flash builder 4.6,我们要下载底下那个链接,如图。下载下来的名字应该是 AdobeAIRSDK.tbz2 

QQ20130730 1

2. 执行:  

cd ...

最后更新于 .

做服务器端开发的同学应该都对进程监控不会陌生,最近恰好要更换 uwsgi 为 gunicorn,而gunicorn又恰好有这么一章讲进程监控,所以多研究了下。

结合之前在腾讯工作的经验,也会讲讲腾讯的服务器监控是怎么做的。同时也会讲下小团队又该怎么敏捷的解决。

下面按照监控的方法依次介绍。

一。按照进程名监控

在腾讯内部所有server都是要打包发布的,而在打包过程中是需要填写要监控的进程名,然后在crontab中定时通过ps查询进程是否存在。

这种方法是比较简单的方法,但是考虑到很多进程会在启动之后改名,以及进程名存在各种特殊字符,多个进程同时存在的问题,实际操作起来并不是很舒服。

举个简单的例子,gunicorn启动之后的进程名类似这样 master: [wsgi:app],其中的方括号在grep时要记得转义,否则就会出问题。

不过不管怎么说,这种方法在很多其他方式用不了的时候反而是最简单的方法。

下面是用python的实现:

def monitor_process(key_word, cmd):
    p1 = subprocess.Popen(['ps', '-ef'], stdout=subprocess.PIPE)
    p2 = subprocess.Popen(['grep', key_word], stdin=p1.stdout, stdout=subprocess.PIPE)
    p3 ...

最后更新于 .

因为各种各样的原因,vimer.cn停止更新了很长一段时间,先对关注本博的朋友说声对不起了。

时隔这么久,连google reader都被关了,话说我博客2/3的订阅可是来自google reader啊,也不知道这些用户现在去哪里了,希望不要把这里忘了才好啊 :)

废话不多说,说说这次对博客做了哪些调整吧。

先给大家上一个完整的插件截图:

QQ20130703 2

主要的变更如下:

1. 把原来的评论插件替换成了《多说》

其实我记得当时最早做社交评论的是《友言》,只是自己常逛的几个站(像《雷锋网》)都在用《多说》,所以就换上了。用了之后总体感觉还是挺好的,而且评论也会同步回本地数据库,哪天不想用也不会有影响。不过可惜这样 wp-syntax 的着色就没法在评论里生效了,等以后看看有什么解决方案吧。

再就是顺便在多说里把匿名评论给关了,太多垃圾评论了。

和依云通了一下邮件,可能社交评论并不适合这种技术博客,等我在另一个站用一段时间再看了,现在还是回滚到老的评论了。

QQ20130704 4

2. 数据备份插件换成了  BackWPup。

原来的插件只能备份数据库,而且只能发到邮箱,导致我很久之前的一次数据迁移丢了很多图片。现在用 BackWPup就不用担心啦,只要你愿意甚至可以把整个目录备份。

BackWPup支持很多种备份方式,不过可惜大部分在中国访问都有问题(囧)。唯一一个勉强可用的是dropbox,据说是跟换机房+https幸免遇难 ...

最后更新于 .

此文之前首发于雷锋网,所以自己的博客上就晚了几天才放上来。跟大家分享一下自己开发手游的过程,希望对大家能有所帮助~


谨以此文献给与我同样有创业梦想的程序员们.

我相信像我一样的程序员一定大有人在,一个人、一身技术、一腔热血,想要涉足手游领域,却不清楚会投入多少。

所以,我把自己的这次游戏开发过程,完整记下来,给与我同样的程序员以参考。

4月1日

《保卫妞妞》正式立项,当然说是立项,其实就是我一个人而已 。

既然决定要做,就要调查一下可能用到的技术点,说下我的背景,有5年左右的c、c++开发经验,3年左右的python开发经验,多年web开发经验,但就是没有游戏开发经验.

之前也只是简单了解过一点objc,根本没有实战过。而更要命的时候我都不知道开发游戏需要什么库和工具. 所以大体搜了一下,貌似cocos2d很多人推荐,那就先看本介绍的书吧

4月1日~4月3日

将《learn cocos2d on iphone》这本书看完,不过这本书用的cocos2d版本是0.99,而我后来游戏中使用的是cocos2d 2.x,所以后来发现很多代码不能用还是很痛苦的.

之前说过objc也没怎么用过,所以看这本书的时候,就基本把主要例子都敲了一遍。因为之前也有c基础,所以倒也不是很困难。

看完这本书 ...

最后更新于 .

写在前面: 博客很久没有更新了,主要是事情实在太多,不过最近也确实做了些比较有价值的事情,后面和大家慢慢分享

笔者在腾讯主要负责开放平台openapi的工作,由于工作关系,这几天遍历了 百度、人人、新浪、淘宝 4个平台,研究了一下他们对于站内应用、网站登录、移动应用的整合方式,并开发了一个百度站内应用的demo。

百度站内应用demo: 体验地址(要体验的话,请先联系我开通白名单): http://app.baidu.com/app/enter?appid=385894&debug=1&is_from_dev=1&canvas_pos=platform

代码已经开源在github上: https://github.com/dantezhu/baidu_app_demo,里面封装了一个baidu的sdk,有需要的朋友可以直接拿去用。

开发语言用的是 python+flask 移动应用 和 网站接入,这两种接入都是走的oauth的方式,这个基本所有平台都是一样的。

而对于站内应用则和腾讯目前不太一样,所以着重说明一下在这里的处理,仅以百度举例:

百度的教程在这里: 百度站内应用开发文档

1. 当用户点击应用列表进入时 ...

最后更新于 .

离上一次写博有点久了,留言也回复的比较慢,主要事情确实有点多,今天想想还是把这篇给写了吧,可能有点乱。

先说说最近折腾了些啥 部分开源项目的代码从googlecode迁移到github,其实还是主要是svn和git的原因,因为公司一直是用svn,所以对svn会熟一些。

不过最近发现越来越多的项目都在使用github,所以免不了好奇起来,本着越是抵触越是要搞的心理,硬着头皮总算懂了些皮毛。

之前还对git的分布式代码管理没什么感觉,这几天恰巧去上海参加chinajoy,网络时好时坏,svn一直不能ci,这才怀念起git的好来。

所以目前的结论就是,两者都用着,新项目就统一往github上迁移了。

研究了一下bootstrap from twitter,这个号称能让开发人员写出漂亮页面的前端库真心不错,把页面用12个栅格来表示,之前从没想过页面可以这样规划(好吧,也可能是我孤陋寡闻。。),而且支持交互式布局,做出来的界面都iphone、ipad等移动设备都会自动适应,的确是后台开发写前端的一大利器,超赞!

OK,碎碎念结束,接下来还是分享一段代码吧。

关注本博的朋友应该会了解之前我在python的微框架使用flask还是bottle之间选择了很久,现在无论如何,事实就是我多的在用flask,原因就不扯了,反正也扯不清楚。

这里主要是分享一点,无论是django,flask,bottle 都有一个通过 endpoint 生成 url的函数,在django中是reverse(模板中是url),flask是url_for,bottle中是url ...

最后更新于 .

这篇文章写的比较晚,主要也是要真正用起来才会发现,django1.4的这次升级在项目目录结构,配置文件上都有比较多的调整,恰好这次也受这样的困扰,所以就拿出来和大家分享一下。 django1.4增加了一个很重要的目录: static,在之前,django的所有静态文件都是放在media目录下的,但是同时用户在后台主动上传的文件也会放到这里,所以会引起一些不必要的混乱. 而且在之前的版本种,django的admin会霸占/media的路径,导致我之前不得不在配置里面强制修改一下:

ADMIN_MEDIA_PREFIX = '/admin_media/'

或者让网站自己的静态文件路径使用的别的前缀:

MEDIA_URL = '/site_media/'

对应的nginx.conf也要做一些相应的配置,对于之前版本相关的内容,这篇文章就不做赘述了,有兴趣的朋友可以去我之前写的博文看一下: linux下nginx+python+fastcgi部署总结(django版),PS:当时还没用uwsgi,大家将就一下。。 回到我们说的django1.4的变更,增加的static目录用来存放网站需要的静态文件,如css,img等,而/media目录用来存放用户上传的文件,admin使用的静态文件是放到/static/admin下。 这样的调整是要比原来合理很多,但同时nginx.conf的配置也需要做响应的变更,如:

server {
    listen ...

最后更新于 .

前段时间有朋友在微博上@我推荐了一款vim的插件,用来显示对齐线,感觉效果不错,就给大家推荐一下.

下载链接: Indent Guides

截图如下:

1

一. 安装

不用多说,直接解压放到vimfiles or .vim下

二. 配置

基本可以不用配置,不过由于默认的对齐线宽度太宽,不太美观,所以我改成1了,如下

let g:indent_guides_guide_size=1

详细的配置,可以参看他的文档,这里不再多说

三. 使用

默认的键盘映射是

<mapleader>ig

OK,插件就介绍到这里,其实如果只是单纯的介绍插件,就不用写这篇文章了。

我在用这个插件的时候,又发现了另一个需求,即标尺的功能。vim7.3里面默认提供了colorcolumn,例如执行:

:set cc=80

就可以高亮第80列,效果如下:

1

但是有时候我们想看一下几行的字符是不是在同一列上时,手工去输入列数实在太麻烦了,所以我就单独写了一个函数,来满足这个需求:

map ,ch :call ...

最后更新于 .

不是第一次写nginx的自定义模块了,之前有写过根据POST数据转发请求的模块(参见nginx自定义模块编写-根据post参数路由到不同服务器),不过上次写的是处理模块,而这次写的是过滤模块,还是有一些区别的。 在正式开始前,先说一下写nginx自定义模块要注意的几个点:

  1. 上次的文章提到,在函数里用r-connection.log打印log会core,今天发现是ngx头文件和lua头文件引用顺序的问题,把ngx的头文件放在最前面即可解决
  2. nginx的一个字符串类型 ngx_str_t 有两个参数, len 和 data,这两个参数一定要一起使用,因为data的\0结尾,不一定是len的长度,这一点千万要注意
  3. 需要和cpp文件联合编译是,在ngx的编译参数里面加上--with-ld-opt="-lstdc++"

OK,废话不多说,开始正式说我这次写的统计模块吧 需求背景呢,就是现在已经在nginx后面挂了很多服务器,需要用nginx来统计成功率,响应时间等等参数,在网上翻了半天,大部分居然是用access_log,然后用程序扫描$request_time来实现的,这对一个每秒几千次访问的服务器是不可忍受的,所以最终没办法,那就自己写一个呗~ 重新看了nginx自定义模块的开发文档,整个调用过程如下:

1

但是实在是没找到请求整个结束时的回调函数,最接近的也就是用filter模块了(即过滤模块),当然这样统计出来的请求时间,可能会比实际时间短一些。 OK,定了要写那种模块后,我们来考虑一下具体的实现

  1. 为了性能最大话 ...