Python Markdown 做语法限制

这几天埋头写NSLoger,需要给Markdown禁用一些语法,比如禁止评论内容中出现H1~H6标签之类的,这个问题困扰了我几天,今天终于找到了解决方案。Python-Markdown的文档看起来真伤神… 之前我用的Markdown2,不为什么,随便挑的,前两天我在SegmentFault上提了一个问题:Python中的Markdown和Markdown2有何区别?,据说Misaka很快,因为是CPython,试了下,没太大感觉,我要的是简单,性能暂时还没考虑在之中。 通过markdown的Extension来del掉指定的语法就行了,如下: import markdown class MyMarkdownExtension(markdown.Extension): def extendMarkdown(self, md, md_globals): del md.parser.blockprocessors['hashheader'] my_markdown_extension = MyMarkdownExtension() raw_text = '#this H1 ~~~' print markdown.

Nginx + Gunicorn + Django 部署小记

这段时间在用Django开发一个论坛,打算做一个Cocoa开发者社区。这几天在学习如何部署,正好前段时间UCloud送了三个月主机,可以拿来练练手。VPS用的64位的Ubuntu 12.04,折腾两天总算走通了,赶忙记录下来… apt-get 服务器拿到手后第一件事就是更新apt-get,要换源什么的自己搜一大堆。之前因为系统不小心选成了Ubuntu 10.04了,遇到一大堆问题,后来换到12.04一切顺利。 apt-get update pip pip还是建议更换源,速度是飞一般的感觉。具体方法可以看看我之前介绍的那篇文章《Pythoner的福利,豆瓣的PyPI源》 sudo apt-get install python-pip Django Django不用说肯定是用pip装,我一般是用的最新版,这样就可以了。

用Shell脚本批量裁剪App Icon各个尺寸

再一次忍不住了,一次一次自己剪裁上架需要的各个尺寸的Icon,虽然有些软件也可以自动帮你裁剪你的应用图标,但今天查了一下Mac中自带了sips工具 关于sips,在终端中直接执行可以出现以下信息: > sips 10.4.4 - scriptable image processing system. This tool is used to query or modify raster image files and ColorSync ICC profiles.

LaunchRocket使用小记

今天在微博上看到 @拓词Joey 推荐了一个OSX的PrefPane小工具,LaunchRocket,可以在你的系统设置里管理Homebrew安装的服务的小工具,不用再打开Terminal输入一系列Start命令启动什么的了。 捣鼓捣鼓,不知怎么滴打不开了,重新添加.PrefPane文件也不行,提示什么工具加载失败。然后用CleanMyMac看到LaunchRocket在 /Library/Preferencesa 目录下建立了一个文件 “com.joshbutts.launchrocket.plist”,里面存放着你的所有已添加服务的配置文件,如: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.

用宏提速NSCoding

还记得你要为每个类实现dealloc方法的日子吗?从头文件复制每一个实例变量到dealloc方法不只是很烦,简直是一场灾难。忘了一个实例变量?内存泄漏,有个含有30个实例变量的类,并且意外地释放了两次相同的实例变量?崩溃。 幸运的是,那种内存管理的日子已经过去了,但归档和解档(序列化和反序列化)对象仍然存在,那是有多惨地写下面的代码: - (id)initWithCoder:(NSCoder *)aDecoder { self = [super init]; if(self) { _val = [aDecoder decodeIntForKey:@"_val"]; _obj = [aDecoder decodeObjectForKey:@"_obj"]; } return self; } - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:_obj forKey:@"_obj"]; [aCoder encodeInt:_val forKey:@"_val"]; } 这不仅是代码惨,它容易出错,如果在方法中拼错了key会发现什么?要么你不保存这些数据要么不重新加载它,这两种都是错误的,是不明显的。然而你的应用程序其他地方会出错,而且你会花时间来追踪问题最后发现则是你的NSCoding方法中一个简单的拼写错误。

2014新年伊始:近期读过的好文推荐

年过的也差不多了,有一段时间没写字了。今天写写最近看的一些文章,附带一点自己的看法和理解。 二进制的世界:原文 一篇编程基础知识的文章,讲解了C、OC中的各种位运算,引申到OC中的例子如十六进制颜色值通过位移转换到UIColor,还有动画中的UIViewAnimationOptions属性,另外这篇文章(Cocoa中的位与位运算)也可以看看。 Block 还是代理 (Blocks or Delegation) :原文 翻译 今天刚读到这篇文章,Block还是代理,也是我一直想问的一个问题。这篇文章适合多读几遍,会有不同层次深度的理解,文中从各方面比较 Block 和 Delegation ,通过窥探苹果的做法试图找到正确的道路,下面简单提炼一下要点:

[Objective-C] NSArray的二分查找

二分查找(也叫折半查找),是至今应用比较多的一种搜索算法。速度快,比较次数少,在Objective-C中的NSArray至少有三种方法可以进行二分查找: indexOfObject:inSortedRange:options:usingComparator: CFArrayBSearchValues 自己编写二分查找算法 NSArray的二分查找方法 NSArray *sortedArray = ... // must be sorted id searchObject = .

[iOS] stringWithFormat 和 initWithFormat 有何不同?

都说Objective-C是一门入门简单,深入难的语言,一直觉得基础不是很牢固,所以这几天也反复在看Objective-C内存管理、ARC相关的东西,下一步准备看看OC的Runtime相关。 NSString NSString作为Objective-C的最基本的字符串类,从最开始接触iOS开发就用过它,那今天说的NSString中的Format实例化方法,也类似于C语言中的printf中的format格式化。昨天在看《10 iPhone Memory Management Tips》一文的时候看到文中为了提高效率用initWithFormat代替stringWithFormat,今天详细看看这两个方法: + stringWithFormat: – initWithFormat: 一个类方法,一个实例方法,仅仅是用起来可以少些两个字吗? For Example 下面来个For Example,在非ARC环境下,循环构造10w个NSString,内容一样:

归档

Apache + Flask + mod_wsgi + Koding 部署小记

之前发现了Koding,一直没怎么注意,今天试用了一下练练手,也算是第一次在真正的服务器上操作,用它搭个Flask站点出来,一路也是坑坑包包啊,特别是Apache的配置,复杂的无脑,第一次搞还是推荐先看看Apache的文档。话说Koding还真是不错,虽然不能拿来当生产环境,弄弄玩还是挺好,特别是像我们这种新手来练手。用Koding的原话来说是这样: Koding is first and foremost a Development Environment, and not a Production Host. VMs Shutdown After Logout,Approximately 20 minutes after you log out, your Free VMs will shut down.