Say Goodbye,Wordpress!

其实一开始想要放弃WordPress我是拒绝的,因为,不能说你们都放弃了,我就马上要放弃,第一我要先尝试一下,因为我不愿意说放弃以后用上静态框架,博客就“Duang”一下,变得很快,很屌,这样路过的访客肯定会骂我,说根本就没有WordPress那么便捷,那么功能强大,那就证明我其实只是闲得蛋疼。后来我经过各种围观,发现确实有很多静态框架可以选择,如Jekyll,Octopress,Hexo等等,在一些开源社区也有很丰富的theme,plugin可供使用,然后就,Duang,真的放弃了……

阅读全文 »

OSX的MouseEntered和MouseExited事件检测

在OSX中检测鼠标移入移出事件不是特别方便,并且使用起来也不少坑,其实我们大多时候要求都是非常简单,就是希望鼠标移入移也时能正确响应,并且最终都能成对的调用,但事实又如何呢?
先来看看要实现mouseEntered和mouseExited应该怎么怎么做,通过查看NSView的文档可以看到,如果需要需要这两个事件,我们需要创建一个trakingArea的东西,有两个API可供使用:

阅读全文 »

OSX/iOS中多路I/O复用总结

在OSX/iOS中IO多路复用通常会选择select和kqueue,最近在尝试优化socket改进通信效率,所以总结一下两种模型的用法。

阅读全文 »

利用ARC解决遗忘unlock的毛病

我们在使用lock的时候会有这样的情况:因为某方法内部逻辑较为复杂,会有很多地方return,稍不留神都会漏掉一次unlock的操作,在查看一些C++源码时发现一种比较优雅的设计,在某个方法或一个代码块需要锁时,不直接对锁进行操作,而是通过创建一个局部对象来管理这个锁,我们将这个对象称之为”哨兵”,该对象在构造函数中执行lock操作,而在析构函数中执行unlock,这样当我们需要加锁时只需要创建这个对象,当函数return后或代码块结束时,因为局部对象在超出作用域后释放,便自动完成了unlock的动作。

阅读全文 »

Objective-C实现的简单逻辑表达式解析

因为项目中会用到远程配置,配置内容会进行很多条件判定,为了让配置更灵活,所以希望最终能将条件满足情况直接进行逻辑表达式运算.
所以就涉及到表达式的解析,开源的表达式解析的库倒不是少,但考虑仅是逻辑表达式的处理,便不想引入庞大的外部库,于是就决定自己来造这个轮子.
简单分析,其实需要处理的表达式一共就包含这7种符号:&&,||,!,(,),YES,NO,并且相互之间的优先级也非常简单.

阅读全文 »

解决NSDistributedLock进程互斥锁的死锁问题(二)

上一篇文章中介绍了采用了文件记录锁来实现更加安全的多进程互斥,它的平台兼容性也非常好,并且我们也采用它实现了NSDistributedLock的所有的方法.
其实在OSX还可以采用文件读写锁来实现更加方便的进程互斥,在fcntl.h中我们可以看到这样的宏定义:

阅读全文 »

解决NSDistributedLock进程互斥锁的死锁问题(一)

在MAC下的多进程开发中,NSDistributedLock是一个非常方便的互斥锁解决方案,一般的使用方法:

1
2
3
4
5
6
7
8
NSDistributedLock *lock = [[NSDistributedLock alloc] initWithPath:@"/Users/mac/Desktop/lock.lock"];
while (![lock tryLock])
{
sleep(1);
}

//do something
[lock unlock];
阅读全文 »

Yosemite自定义window的titleView

在OSX系统中对Windows的自定义向来都是一个很麻烦的事情,从事MAC开发的同学应该都深有体会.
在过去,如果我们需要在标题栏中添加自定义的控件,可能通过下面的方式:

阅读全文 »

由一个像素引发的"血案"

由于项目中经常需要程序绘制各种奇形怪状的自定义控件,所以NSBezierPath是一个非常不错的选择,偶然的机会发现当设置NSBezierPath的lineWidth为1.0时,绘制出来的效果很不理想,如下图所示:

阅读全文 »

MAC系统状态栏通过插件添加图标MenuExtra Plugin

在开发MAC软件时,为是让用户更方便的使用功能并且不占用过多桌面空间,我们一般都会选择在状态栏添加图标,就如Windows上的任务栏一样.我们通常使用如下的方式的生成状态栏图标:

1
[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength];
阅读全文 »