修改pantheon-terminal字体

前两天看了elementary OS的介绍,感觉挺漂亮的,而且基于Ubuntu,用起来也会比较习惯。在虚拟机上安装试用了一下以后,很想在本本上尝试一下。于是想了想办法,从home分区上拆了20G的空间下来安装。折腾了一个中午,终于装上了,此后曲折,以后再表。

装完以后,没找到地方改pantheon-terminal,这可是我天天要用的东西,默认的字体虽然也挺漂亮,但是我还是习惯了用Yahei Mono,虽说可以通过修改gconf的全局变量来达到目的,可是作为一个有些强迫症的人,还是Google了一把,最后找到了这个网页,最终解决了问题。其实pantheon-terminal是有相关配置项的,就是没有个可视化工具配置,只需要执行以下命令,就可以修改字体:

改完了之后我发现一个问题,由于默认字体的大小有些小,配合我的字体看起来不太舒服,于是加忆了一下gconf里的配置方法,使用如下命令

即在字体后面加上字号即可。有兴趣的还可以看一下org.pantheon.terminal.settings的其它配置项。

3,806 次浏览 | 没有评论
2013年5月13日 | 归档于 未分类
标签:

27岁了

终于还是更老了一岁。年纪越大,越是不想过生日。这一年经历了很多事情,最近才觉得自己其实没有想像中的那么成熟,很多事情处理得还是很幼稚。不过还好,起码自己意识到了这一点,希望自己明年过生日的时候,看到这段话,还能想得起自己说的是什么事情,能够嘴角微微一扬,告诉自己,有些事情,没有想像中的那样坏,有些事情,自己有能力去改变。

工作上都还好,工作一年了,学到了很多,无论是技术上还是为人处事上。

过去的一年,还是有很多事情要记在心里不用记在博客上的,能忘掉的就忘掉,忘记不了的就改掉。更多的还是希望下面的一年能过得好,下一次写生日日志的时候,可以更开心一些。

 

3,329 次浏览 | 没有评论
2012年8月8日 | 归档于 总结, 感悟, 生日
标签:

pthread_cond_timedwait时间设置

最近在使用pthread_cond_timedwait的时候,发现当超时时间设置成1秒以下的值时,无法得到想要的效果,具体表现为,没有wait足够的时间就被唤醒,且返回值正确。首先来看一下pthread_cond_timedwait的原型:

#include <pthread.h>
int pthread_cond_timedwait(pthread_cond_t *restrict cond,
pthread_mutex_t *restrict mutex,
const struct timespec *restrict abstime);

abstime是一个绝对时间,struct timespce的原型为:

struct timespec
{
__time_t tv_sec;        /* Seconds. */
long int tv_nsec;       /* Nanoseconds. */
};

其中tv_sec是秒,tv_nsec是纳秒(即1000,000,000分之一秒)

那么,看一下我之前出错的代码:

struct timespec abstime;
abstime.tv_nsec = (timeout_ms % 1000) * 1000000;
abstime.tv_sec = time(NULL) + timeout_ms / 1000;
pthread_cond_timedwait(&_read_cond, &_read_mutex, &abstime);

以上代码有问题,主要是因为time(NULL)的返回结果的精度是秒级的,那么如果当前时间是m秒+n毫秒,那么实际等待的时间只是timeout_ms – n,且还有可能发生n > timeout_ms的情况,这种情形下,如果这段代码处在一处while循环内,则会造成大量的pthread_cond_timedwait系统调用,并造成大量的context switch,系统CPU会占用很高。

正确的代码应该改为如下:

struct timespec abstime;
struct timeval now;
gettimeofday(&now, NULL);
int nsec = now.tv_usec * 1000 + (timeout_ms % 1000) * 1000000;
abstime.tv_nsec = nsec % 1000000000;
abstime.tv_sec = now.tv_sec + nsec / 1000000000 + timeout_ms / 1000;

pthread_cond_timedwait(&_read_cond, &_read_mutex, &abstime);

通过gettimeofday获得精确到微秒(1000,000分之一秒)的时间数据,并处理不足一秒加上超时时间超过一秒的情况(即tv_sec上需要加上nsec/1000000000)。

6,370 次浏览 | 没有评论
2012年7月19日 | 归档于 C++, Linux, 技术

MIUI是个好ROM

有句话叫,Android用户有三大爱好,刷机重启拔电池。我向来是不赞同这句话的。没见过有谁电脑买来之后整天装系统玩的,Android的用户之所以有很多人喜欢刷ROM,那是因为有许多不同的ROM可以选择,可以尝试,但是在用MIUI之前,我一直觉得Stock ROM(即官方的)是最好的,尤其是Nexus系列手机原生的Android,即稳定,又灵敏。但是自从Google宣布不再给Nexus One提供升级支持以后,我便开始寻找非官方的ROM来刷,毕竟手机才买了一年,就这样一直用一个不再升级的系统,对我这个升级控来说,是万万不能接受的。我挑ROM的标准很简单:

1、要有类似Stock ROM般的简洁。

2、要有强大的技术团队支持不断更新。

所以大概我能选的ROM也不多,被我看上眼的也就CM7.1和MIUI。

CM是从去年12月份开始用的,很接受原生的用户体验,并且开启A2SD+以后,再也不用担心内部存储空间不足的问题。但是Android 4.0出来以后,CM的全部精力都投入到ICS系统的移植上,CM7不再更新,而且目前我觉得Nexus One没有一个真正完全可用的4.0的ROM(你能想到的那些我也知道,但都不完美)。所以用了三个月以后,闲来无事的一个下午,把手机刷成了MIUI。

MIUI用了一周,我觉得MIUI是个好ROM:

1、ROOT权限系统在系统中集成。可以打开或关闭,无须自己再破解。

2、Android Market(Google Play)可以访问到所有应用,以前需要装个MarketAccess伪装成米国人才能。PS:我一直没有想明白MIUI是怎么做到这一点的,也许是对Android Market的某些系统属性的请求做了特殊处理,使之误认为不是中国的运营商?

3、主题支持,虽然我不是个追求花哨界面的非主流青年,但是我挺喜欢Nokia的那套圆润的图标的,于是有了主题支持,换之。

4、黑名单,这个其实应该挺实用的,只是大概我也没啥使用场地。

5、集成了A2SD+,在系统属性里也能看到EXT分区的大小,这个就不用自己再刷一遍了。

6、轨迹球解锁,这个功能我很喜欢,当初刷CM也很大一部分原因是因为这个。

7、VPN的密码可以被记住,这个应该是在最近才做出来的功能,在天朝,这个功能很实用。

8、分类设置更加人性化,这个看个人喜好了吧。

9、轨迹球针对不同提醒可以设置不同颜色,大多数人可能都不知道Nexus One的那个LED轨迹球可以发出很多色彩的颜色的吧。

10、流量统计,这个功能很实用,虽然我现在每个月300MB流量也用不完,但是相信大多数人都用得着的。

其实上面大部分功能在CM上都有或者通过某些应用都可以实现,但是我觉得给我一个整合过的方案,我会更加喜欢。虽然MIUI有些ROM是基于CM的内核的,但是MIUI在UI和UE上,确实下了很大的功夫,我想在这方面,Google也未必有MIUI下的功夫大。

很多人说MIUI太像iPhone了,我觉得你如果是指一些基本组件像,那么我认同,但是用户体验上,MIUI绝对不是在模仿苹果。

我用的是RA-passion-2.2.1的recovery,目前看来OTA的时候不能自己刷,需要手工选择sd卡上downloaded_rom里的升级包,只要不选错,OTA是没有问题的,我没有使用MIUI给的recovery。

另外说一下开启A2SD+的方法吧,在终端模拟器里执行:

$ su

# a2sd reinstall

# a2sd zipalign

# a2sd cachesd

执行以上操作后,相当于将/data/app软链到/sd-ext/app以及/data/app-private软链到/sd-ext/app-private,后面的cachesd相当于将/data/dalvik-cache软链到/sd-ext/dalvic-cache。

最后贴张图:

4,341 次浏览 | 4 条评论
2012年3月10日 | 归档于 Android, Google, Mobile
标签: , , ,

怎么样才能做好一件事情?

工作了大半年,自己也有点工作上的心得体会。我所在的部门是基础架构部,我在的组负责了某度大部分的分布式存储产品,当然这些产品都不是直接面向最终用户的,而是提供给不同的产品线,服务于某度不同的产品的。由于岗位的特殊性,所以平时在工作当中,可以接触到许多不同的人。跟别人合作的过程当中,自已对于“怎么样才能做好一件事情”有过一点点思考,特此写下来:

1、要有明确的目标。

这一点说白了很简单,首先要弄明白自己做的事情的目标是什么,我从来都不赞成曲线救国的做事方式,一件事情,想要做好它,就找最直接最有效的方式。任何多余的、无用的东西都不是必须的。如果当前的系统设计目标是为了服务每天100万的访问量,就不需要考虑怎么样能支撑对1000万人的服务。但是需要注意的一点是,有明确的目标,不代标急功近利,即使系统的设计是只能支撑100万的访问量,也要保证以后扩展到可以为1000万人服务时,不需要投入10倍的人力成本。

2、要弄清楚问题的本质。

经常有人来问我一件事情怎么做,在回答他之前,我都会多问一句,你为什么需要知道这件事情的做法。我可能会遇到这样一些人,他从我这里得到的答案可以协助他解决他原来的问题,但是绝对不是最佳的途径。这些人往往自己把自己限定在了一个特定的问题里,不能跳出这个问题看,没有去想想很多问题其实换个方式解决会更简单。

3、要有长远的打算。

虽然我一直强调要有明确的目标,但是我一直很否定那种只为当前做考虑的设计,系统可以支持三种命令,但是如果命令扩展到1000种,还是用判断语句一个一个来实现么。在有限的可预测到的未来,提前做好准备,可以节省日后大量的人力成本。有着良好的架构的系统、完美的基础组件支撑的系统,无论在系统以后的可扩展性、维护性方面,都有很大的优势。

4、协调好人力资源。

我现在只能说,作为一个新入职场的人,做自己擅长做的事情。如果作为一个团队的领导,那就是让合适的人去做合适的事情。很多人之所以失败,就是因为选择了一个自己不擅长的领域。姚明如果去跑110米栏,刘翔如果去打篮球,我想这两个人都没有办法取得今天的成就了吧。但是做自己合适的事情,并不代表遇到困难就退缩,适当的时候,挑战一下自己才能成长起来。

5、沟通的成本

软件这种东西,其实最合适的就是一个人做一个系统,免去人与人之间沟通的成功。但是现在的系动辙几千万行代码,有些时候让一个人独立完成开发确实不现实。当多个人共同完成一件事情的时候,沟通就成了很大的成功,所以很多人整天就是在各种沟通。沟通就会有误解,我觉得对于沟通,最好的作法就是控制时间,不要把沟通变成了头脑风暴,沟通之前一定要有一个人对将要讨论的事情有个大体的框架。

自己工作的时间也不长,很多东西其实也比较幼稚,我就这么一写,看官您就这么一看。有句话说的好,按照大部分人努力的程度,其实根本不需要跟别人去拼天赋。哈哈,努力用心,做好事情其实也没有什么难的。

5,328 次浏览 | 1 条评论
2012年2月19日 | 归档于 学习, 总结, 感悟, 未分类
标签:

吐糟一篇

很久很久没有么有写日志(为什么现在看到日志里,满脑子全是WARNING和FATAL)了,工作以后,每天做的事情大部分都是跟工作有关,我也不知道我遇到的那些问题哪些是能在博客上写的,哪些是不能写的,所以干脆都不写吧,省得违返了某些我不知道的条例。

从入职到现在,三月有余了,从工作的第二个月开始,我就把主操作系统换成了Ubuntu,虽然我们的工作环境几乎不依赖我们所使用的客户端的操作系统,不过觉得即然每天要在Linux写代码、编译、测试,还不如直接就换成Linux得了。不过要喷一下公司的IM软件,没法在Linux下用,Web版功能太弱,不能多人会话,不能保存聊天记录,一断网就啥都没有了,现在逼着我每天还得开个VirtualBox,跑个XP里面跑个百度Hi。继续向一个合格的Linux程序员进化。浏览器还是用Firefox+Pentadactyl,LibreOffice我基本上也能忍了,苦序员阶段还是很少有机会写Word和PPT的,ThunderBird装了Conversations和Lightning两个扩展以后,基本上我还对这个邮件程序比较满意。嗯,另外自己重新编译了个Screen的新(话说这代码也是2006年之后就没有更新了的)版本,基本上现在用着也不会coredump了,VIM也积累了一些自己用着顺手的插件,以至于现在到别人的环境里写代码会感觉很不适。虽然我觉得Ubuntu对多显示器的支持有些烂,但是多虚拟桌面的功能还是很赞,随便切来切去,基本上可以让整个人多线程起来,写代码的间隙不影响看邮件,不影响处理别人的问题。嗯,前段时间看了下gdb里的tui功能,让我的“GDB真难用”的观念发生了巨大的变化,并且对于我们这种只能在终端调试程序的苦程来讲,gdb也是唯一能用的调试工具,用好它,平时的工作可以事半功倍。俗话说,工欲善其事,必先利其器,感觉这几个月确实学会了不少利器啊。

现在起床的时间越来越晚,回家的时间也越来越晚,好在不用挤地铁,好在每周都能完整的休息两天,好在每天做的事情自己也能沉浸在其中,以至于经常感觉一周的时间很快就过去了。周末的时候像个家庭主妇似的收拾家里,自己去买买菜,自己做点饭,倒也算不错。

貌似博客现在访问的速度很慢,我用代理访问就没有任何问题,难道Godaddy的服务器也被某墙污染了?不得其解。

4,944 次浏览 | 6 条评论
2011年11月3日 | 归档于 工作, 总结, 感悟, 生活
标签:

主机换到国外了

为了访问国外的资源方便一些,我把AgilePHP,也就是我的博客的主机换到了国外自己在GoDaddy上买的主机,现在升级WP、安装插件的速度也快一些,并且由于一些众所周知的原因,换到国外,可能装一些插件会比较方便。

非常感谢叶博这几年无偿提供的主机空间!

4,077 次浏览 | 2 条评论
2011年8月12日 | 归档于 互联网, 博客
标签:

iPod Touch 4

终于在这个26岁生日的时候,完成了一个小小的心愿,入了第一个iDevice,泡泡送了我一个iPod Touch 4。通过这段时间的使用,我对iOS总算有了一个比较切身的体会。当年买Nexus One的时候写过一篇评测,今天也写一篇吧,算是从一个互联网从业人员的角度来观察苹果的产品,并且尽量从中立的角度来比较一下iOS(iPod Touch 4)与Android(Nexus One)的优缺点。

1、外观
第一点就说说外观吧,iTouch 4很薄,以致于我现在拿着Nexus One就觉得它又厚实又重,苹果的工业设计很棒,做出来的东西在视觉和感觉上会比实际的尺寸给人更薄的感觉。

2、操作
Android最明显的特征就是一般来说正面有4个按键+一个滚球,从第一眼看到这种设计我就觉得完全没有必要设计成4键,完全可以把操作的按钮放到界面上,我觉得只有Symbian的一些触控机器的通话、挂机键的设计要比这更扯蛋了。

3、电池
iTouch号称播放音乐可以40+小时,播放视频可以7小时,如果一直用来上网的话,其实一样不给力,不比Android的电话更牛逼。

4、界面
说不上iOS的界面就比Android更美观,甚至一些程度的操作流畅度不如Android(比如一些Twitter客户端滑动明显没有Nexus One流畅),是因为内存太小么?iTouch的内存只有Nexus One的一半。iOS 的界面设计比较适合一般的消费者,而Android的界面似乎面向的还是Geek工程师。

5、通知系统
iOS的通知系统烂,真的很烂,听说iOS 5里要改成与Android一致的样子,可以下拉标题栏。我好几次在iTouch的界面想下拉标题栏,都没成功,升级iOS 5后应该可以了。不过iOS的图标上的“数字通知”真是大赞啊,充分利用了已有的空间,向用户展示更多的信息。

6、VPN
Android的VPN连密码都不能记忆,而在iOS上连VPN只需要滑一下即可,哎(别跟我讲换ROM,换ROM我也知道)

7、游戏
Android上的游戏很多不要钱,iOS上的游戏大部分都要钱。App Store里的收费游戏基本上的我在Android上都玩过了。

8、应用市场
App Store和Android Market,菜市场的速度在中国还是很给力的,而App Store下程度却有点慢,不知道是不是因为我是用的iTunes美国账号的原因。只有在开了VPN以后,下载程序的速度才比较给力。

9、任务管理
我觉得苹果的理念还是对的,不需要用户去关心有哪些任务在后台,我需要关闭哪些任务来释放空间,操作系统会帮你做所有这些事情。电子消费产品有些时候要少给用户引起选择。这一点其实Android的处理也是类似的,只是有好事的人做出了各种各样的Task Killer。

10、越狱
MS这个是智能手机永恒的主题,手机制造商和移动运营商为了保证手机的稳定性,往往对手机进行了一定的限制,所以就有人想出各种办法,解除这种限制。目前看来,除了iOS上笔划输入法那大大的按键让我不舒服以为,我可以通过越狱安装百度输入法,没有别的什么有让我越狱的冲动了。装盗版软件嘛,想想还是算了,真的有好的软件就买几个呗,常用的软件也都是免费的。

11、Twitter
我对Twitter还是比较依赖的,我安装了Twitter for iPhone、Echofon for iPhone、TweetCaster、Twitterrific、TwipBird、HootSuite和TweetDeck,只有官方应用和TwipBird支持API,嗯,这些应用的体验反而不如Seemic for Android。不过官方支持API倒挺好的。(注意要用Twip 4的O模式哦!)

嗯,iPod Touch在野外不能上网确实比较尴尬,特别对于我这样一相拿它来当一个移动互联网终端的人来说,不过用Nexus One的WiFi共享可以完美解决这个问题,哈哈,乔帮主也不会想到有人会通过Android来保持iPod在线的吧?

3,465 次浏览 | 1 条评论
2011年8月10日 | 归档于 Android, Apple, Google, iOS, iPhone, iPod Touch, Mobile, Nokia, 互联网
标签:

入职半月小记

上班快一个月了,其实环境都还好,比较符合我对工作的要求,忙也倒不算是特别忙,压力嘛,作为新人,肯定有一点,但好在导师、同事、经理人都比较Nice,有问题可以随时找人问。接触到的东西也算是符合我的预期,每天的工作流程基本上可以总结为:

ssh
screen -r work
vim
make
./run_test
现在才觉得以前用vi用到弱爆了,用shell也用得弱爆了,这些工具果然日常不用,光是知道看过读过DOC是没有用的,不实践是出不了真知的。嗯,自觉的Python也派上了用场,可以很方便的写一些脚本,看组里的脚本大部分还是用perl和shell写的,想想也无所谓吧,反正用脚本的人不会关心这脚本是什么语言实现的。公司给配的小黑也很给力,可是想想我们开发也不用在本地做,这么牛逼的机器纯粹就是浪费啊!
加油工作!闲言碎语就说到这了!

3,618 次浏览 | 1 条评论
2011年8月10日 | 归档于 未分类
标签:

26岁了

终于到了不想过生日的年龄!以前每次过生日我都会很开心的写一篇日志记录一下这一年获得的成长,展望一下未来,可是唯独这次(我想以后每次应该都是吧?直到有孩子?),觉得过生日真不是件啥好事情啊,不是又长了一岁,而是又老了一岁。10年到11年度,人生经历中最重要的成分应该就是找工作了,关于这个,我以前的日志里,写里很多很多。除此以外,经过我三年时间的奋斗,终于毕业了,顺利的拿到了毕业证和学位证,学历从本科变成了硕士。其实回想起这三年来,过得也不容易,有许多怨言,学习上也遇到过很多不顺利的事情,不过总算都是挺过来了。我这个人一向是经历困难的时候很能挺但也是一肚子苦水不知道该找谁倒(可怜了泡泡了~),可是困难解决了过去以后,也就不那么在乎了。

最近这几年在北京呆着的经历就是所有的事情都不怎么顺利,但是所有的事情在最好都顺利解决了。

还是展望一下未来吧,话说已经入职有一个月了,还算是比较适应某度的工作节奏,每天按照读书的时候的时间起床,各种办法解决早饭,然后搭着地铁去上班。9点钟到公司,开始一天的工作,晚上8点左右回来,其实也还好,不是很累,也不用像在学校的时候那样每天11点钟才回宿舍;而且周末可以正常休息,这一点满足了我对工作的基本要求。

未来的一年,希望自己工作顺利,希望生活顺利,希望家里人都平安健康,嗯,到明年过生日的时候再想想是不是要在2012来了之前把婚结了呢?哈哈……

3,071 次浏览 | 1 条评论
2011年8月8日 | 归档于 总结, 感悟, 生日
标签: