从写C#的年代开始,我经常在面试程序员的时候问这个一个简单得不能再简单的问题:Java(or C#)中,接口是干什么用的?

很可惜的是,非常多简历上写着“精通java开发”的童鞋们都答不上来。最近改一个Android程序,在Activity和View之间用全局Handler把消息传来传去,颇有古时候用go to语句搞noodle program的架势。

无奈重构,用Listener回调来传递消息,上代码,先定义Listener,然后在自定义View里插入回调,Activity里重写回调方法:

MyViewListener

package com.net.laonan.plum.views; /** * Created by Alan on 15/12/16. */ public interface MyViewListener { void onLaonanShow(boolean naked); }

MyView

package …

利用百度地图sdk开发Android app时,要先得到一AK码配置进去,如果你的sha1正确,但死活一直有一个错误如下:

baidumapsdk: Authentication Error errorcode: 230 uid: -1 appid -1 msg: APP Scode码校验失败

极有可能配置时你的包名出问题了,检查以下各个位置,看包名是否一致: 1、manifests。 2、build.gradle。 我就是第2个文件里跟包的名字不一样,死活不出地图的。

?OS X升级到El Capitan之后,MySQLdb不能用了,一直报:unsafe use of relative rpath libmysqlclient.18.dylib in /Users/XXX/.python-eggs/MySQL_python-1.2.3-py2.7-macosx-10.7-intel.egg-tmp/_mysql.so with restricted binary

TNND个凶,查半天stackoverflow没搞定,后来在一台湾博客上找到解决方法,原来是EI Capitan增加了个什么鬼System Integrity Protection,关闭即可。

Step 1. 重启电脑,按Command+R进入Recovery Mode,打开终端,输入csrutil disable。

Step 2. 再重启,Done.

若要打开SIP,重复上述步骤,但csrutil …

利用wc工具,以Android代码为例,到工程目录输入如下命令,回车:

wc -l `find . -name '*.java' -or -name '*.xml'`

申请软件著作权时用得着。。。

/media/upic/2015/10/09/flashlightandpowerbank.jpg

中秋及中秋之前“微际生活”(http://www.weigi.com.cn)和深圳市鑫辉光电有限公司(http://www.sunwayman.com/)送的两个小玩意儿,晒一晒之。

使用datetime直接构造时间的时候,设置时区是没有北京时间的,一般来说习惯了linux的同志都会默认用上海时间来代替,这里却有一个问题,如果要进行时区转换,上海时间比北京时间差6分钟。。。

比如:

tz = pytz.timezone('Asia/Shanghai') t = datetime.datetime(2015, 9, 5, 9, 0, 0, 0, tzinfo=tz)

这样打印出来得到的时间是: 2015-09-07 09:00:00+08:06

在django框架中,貌似from django.utils.timezone import localtime的这个localtime会修正那6分钟,这问题就来了,要自己在程序里构造时间,并且跟用这个localtime转化的时间对比的时候巨麻烦。

解决方法:

tz = pytz.timezone('Asia/Shanghai') t …
/media/upic/2015/07/15/django-rest-framework-logo.png

舍不得Django的Admin界面,最近用Django Rest framework(官网)重构公司之前用Flask写的REST API服务端。

然后打算用JWT做认证,找到一个简洁的框架Django Rest framework JWT(官网),按文档配置完成,执行:

$ curl -X POST -d "username=admin&password=abc123" http://localhost:8000/api-token-auth/

时,一直报

Authentication credentials were not provided.

重做权限配置之类这的那的折腾了两天,最后发现Django Rest framework默认的登录界面消失,检查urls.py发现url(r'^', xf_views.api_root),少了一个截至符$,加上,改为url(r'^$', …

/media/upic/2015/07/04/linux_logo.png

关于uwsgi:

#查看uwsgi进程

ps -ef|grep uwsgi|grep -v grep

#停止uwsgi

killall -9 uwsgi

或通过查看的那条命令找到PID,如果是2222,

kill -9 2222

#uwsgi 启动

uwsgi -x /websitedir/laonan.net/heather/uwsgi.xml --daemonize /var/log/uwsgi.log

scp下载文件

scp root@192.168.120.204:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/

scp上传文件

scp /opt/soft/nginx-0.5.38.tar.gz …

LinearLayout这些布局view默认是没有点击事件,所以点击的事件传递到下面一层的布局了,xml布局设置 android:clickable="true",下一层就不响应了。

​参考:http://blog.csdn.net/yung7086/article/details/17063323

公司API服务器转放在阿里云上。因为我平常用的Python Web框架Django要多一点,记下部署Flask需要注意的几点,这不是一篇Step By Step的教程,如果需要看教程,中文的推荐这一篇:http://www.oschina.net/translate/serving-flask-with-nginx-on-ubuntu

安装过程就不说了,其实主要在uWSGI的配置上,uwsgi.ini文件内容如下:

[uwsgi] #application's base folder base = /base/youproject #这里是你的项目位置 #python module to import app = run #对应你的Flask启动文件,我在项目里叫run.py,如果你的是app.py的话,那么这个run改为app module = %(app) pythonpath = %(base) #socket file's …

因为用pip安装curl时出了点问题,直接下载源码安装。

调用的时候出以下错:

 

ImportError: pycurl: libcurl link-time version (7.19.7) is older than compile-time version (7.20.0)

太久不配服务器了,到处都是坑。。。

解决方法:

 

rpm -Uvh http://www.city-fan.org/ftp/contrib/yum-repo/city-fan.org-release-1-12.rhel6.noarch.rpm yum install libcurl

来源:https://gogo244.wordpress.com/2014/09/25/libcurl-link-time-version-is-older-than-compile-time-version/

部署公司产品博客的时候,用python manage.py syncdb命令,创建表什么的都很正常,在创建超级用户时报如下错:

self.UserModel._default_manager.db_manager(database).create_superuser(**user_data) TypeError: create_superuser() got an unexpected keyword argument 'nick_name'

google半天无解,试着在自定义里注释掉nick_name唯一的代码,就ok了,暂时不知道为嘛,先记下。

USERNAME_FIELD = 'email' #REQUIRED_FIELDS = ['nick_name']

五婆婆嫁给了一个地主,所以五婆婆是地主老婆。五婆婆嫁给地主后生了个儿子,她的儿子会说话之后很爱唱歌。五婆婆的儿子刚会唱歌之后没多久,她的地主老公就死了。

然后五婆婆就和他的儿子相依为命。

五婆婆的儿子十五岁那年,村里来了一小支军队,住在五婆婆的屋檐下。第一次见到这么多村子以外的人,五婆婆的儿子很兴奋,不停地唱歌给他们听。

有一天五婆婆从山上回到家里,军队不见了,儿子也不见了。五婆婆漫山遍野的找,村里人说,你儿子说当兵去了。五婆婆说,我儿子不会打仗只会唱歌,怎么能当兵呢?

五婆婆天天到屋后的瀑布面前哭,终于哭瞎了眼睛。如果不是村里面的人都这么说,我以为哭瞎了眼睛只是书上一种夸张的说法。地主的老婆五婆婆又继续生活了好些年,土改来了,五婆婆被戴着高帽子游行。

再接下来是批斗。

在最后一场批斗里,五婆婆背上背着一只铁桶,被挂在一根木杆上,里面装满了烧红的木碳。五婆婆凄厉的叫一晚, 终于第二天清早死在了木杆上。

很多年以后,我在省电视台里面看到一个在省城小有名气的歌唱家的访谈。歌唱家深情的回忆了他是怎么从一个山村穷苦小孩,因为喜欢唱歌,加入了路过的部队文工团,勤学苦练,终于取得了今天的成就的励志故事。

访谈的结尾,歌唱家献曲一首《我们的生活充满阳光》。

/media/upic/2015/03/27/devices_t.jpg

煤气警报器,上面写着“保护你家人免受沉默杀手的伤害”,华强北买的。过年回来,我们家领导在厨房煮东西,过程中她出去买菜,我跟小外甥在客厅聊天,聊一会儿她说要洗澡。我说我帮你把煤气开好,我去开的时候发现阀门是已经打开了,心里嘀咕了一下,下意识关掉。

然后突然想起要给小外甥开好煤气,于是又重新打开。完了回到客厅继续聊天,突然过一会儿警报声大作,我捂鼻开窗跑去检查,发现是厨房煤气灶漏气(刚刚我关了又开导致的),关上,满头汗。

在我这个故事的影响下,两个同事分别叫我又帮他们买了俩个,喏,就是下图这玩意儿,标准三无产品,全英文,估计是出口用的:

优点:便宜,60元一个。

缺点:太丑,太TMD丑了。

不知道是优点还是缺点:相当灵敏,在旁边喷杀虫剂之类的也会警报。

改进空间:重新做ID设计,加上WIFI模块跟手机对接。

另外就是这个东西了,感应LED灯,50块,这东西本来我没打算买的。主要是前段时间买了个小蚁IPC,就价格来说,100多块,物美价廉,但是晚上啥也看不见,想想一般小偷多是随风潜入夜的主,就另外买了一个这个东西来配合摄像头用。

其实是想说小蚁摄影头的问题,如果加上夜视功能,还有,软件做一些改进:比如我设定某个时间段内,只要有活动的影像,立马向我手机报告。

这样的话,成本会提高多少?零售价会超过200块吗?

还有下面这个,等等,搞错了,这是领导雄心勃勃用来建阳台植物园的仪器,我也不知道干啥用的。

第一段

半年来,村里的人都变得相当古怪。

我不知道到底怎么得罪的他们,所有人对我不理不睬。

我坐在村头的井水旁边想了很久,井里有人放的鱼,游来游去,我扔个石头进去,连鱼都不怕我。我看见细桃过来挑水,腰弯下去的时候,屁股像个丰满的桃子,很好看。我叫,细桃细桃,你弟弟呢?细桃没理我,挑着水腰一扭一扭地走了。

我挺喜欢细桃的,我跟我妈说以后长大了要娶细桃做老婆,我妈哈哈大笑,说等你长大,细桃崽都要有你现在这么大了,那天我闷闷不乐了一个晚上。细桃的弟弟常常跟我一起到山上去养牛,我摘到野草莓总是分给他,偷包谷的时候也总是分给他。

我妈后来常跟细桃的妈开玩笑,说我扬言要娶细桃,细桃的弟弟开始慢慢疏远我,养牛的时候不跟我在一块了。

山上很多野果,有长得像牛奶头的牛咪咪,有小小的红葡萄,还有埋在地下的葛麻根,我收获了很多,但是无人可分享。我跟我家的牛讲话,有时候它会停下吃草竖耳朵听,若有所思的样子,我也不知道它是不是在听我。

我说牛啊牛啊,为什么知道我要娶细桃做老婆,细桃的弟弟就不跟我玩了。

我说牛啊牛啊,你觉得细桃的屁股好看吗?

牛也不理我。

第二段

去年夏天有一天我早上赶牛出去养,路上碰到细桃拿着一把柴刀一个人,她跟我打招呼:你怎么不叫上我弟一起呢?

我回答,我叫了,他讲泻肚子,要等他一下,我等不及,就先出来了。

细桃回答,哦。

一个人上山碰到另外一个人可以聊天,让我很高兴,特别是又碰上细桃。我跟细桃讲我们家黑狗生了一窝狗崽,我跟细桃讲昨天晚赶牛回家的时候,有只雀雀一起跟着我飞啊飞,细桃细桃你觉得它是不是在想跟我讲话呢?

我的大学同学操哥姓操叫操奔,黑龙江人士。

当时到学校报道,操哥在宿舍内抱拳作揖跟大家自我介绍:我姓操,这个是第一声,不是第四声,我比大家都年长,我75年的,大家叫我奔哥吧。

后来所有人叫他操(第四声)哥。

操哥是我们班高考分数的状元,放在我们西部老少边穷地区,他的分数除了北大清华,随便选,但是在黑龙江,他就只能跟我们一起读三流大学。

操哥一开始是数学科代表,但自从他在数学期末考试的时候回头来问我:那一撇长长的啥鸡巴玩意儿。被监考的数学老师听到,愤而开骂,连积分符号都不懂,当啥科代表,然后操哥挂科,同时从数学科代表那个光荣职位上下岗。

下岗之后操哥死猪不怕开水烫,干脆天天翘课。第二学期金属材料期末考试,班上多人抓耳挠腮,同样监考的是金属材料老师,不忍之,到女生旁边小声提示。被操哥听到,操哥忿忿然说:这逼老头谁啊,看起来还像懂一点似的。

我答,这逼老头是任课老师。

还有一次流体力学考试,操哥为了表示仗义,把一道最难的答案传给了我,那道题对我来说太难了,我确实不会。我抄完之后觉得很不对劲,好几个变量都是凭空而降,没有任何推理就有值了,但我也不会,只好照抄交了上去。考完我问操哥咋回事,他想了半晌,一拍大腿:

他妈拉个逼的,我抄张辉那小子的,那道题目跨页,我可能只抄了后面那部分!

试卷批下来,我俩那道题分别得了一半的分数。。。

操哥后来恋爱了,准确来说是单方面恋爱了。

操哥喜欢那女生不是我们班的,是计算机系的,嘴唇有点偏黑,四环素牙,脖子上一圈圈纹路,喜欢穿一双中老年妇女穿那种中跟鞋。但我不能这么在他面前描述,我要说成,唇红齿白,走姿妖娆。我第一次在我们那层楼的洗漱间一边冲凉水澡一边如实描述时,操哥光着屁股呼啸着在楼道追打我,眼睛发红。

后来我就改成说他那计算机系女生唇红齿白,走姿妖娆,操哥满意地点点头,欣然接受。

可惜唇红齿白,走姿妖娆的计算机系女生不喜欢操哥,操哥下雨天追到她们教室去送伞,下雪天到图书馆去送暖手宝,唇红齿白,走姿妖娆的计算机系女生都礼貌地拒绝了。

每次被那个女生拒绝操哥就很伤心,都要买一瓶二锅头喝,我有次小心翼翼地问操哥,没戏了?他回答,没戏了。我说,那我说她四环...

/media/upic/2015/01/05/ny_544_300.jpg

一般来说,在2015年新年钟声敲响的时候,按回车发送新年感悟之类的,比较有仪式感。

但我又天生不是一个很有仪式感的人,常常自己都忘记自己的生日,只到有人祝福时才想起:哦,今天是我生日啊。

所以拖到今天,写写新年。

2014年是自己逼自己转型的一年,我实在厌倦透了十年的软件开发外包,特别是面对国内的甲方,大家像一对冤家相互咒骂,又谁也离不开谁,乙方呢,更像那个傍大款的二奶。当年跟老池刚认识的时候,他打了个比方,我们搞技术的,就两种命运,一是做较大的项目傍大款当二奶,二是开发个小软件站街当小姐。。。其实快十年过去了,现在回头来看,如果站街站得好,搞成连锁站街,站街O2O,要比当二奶有前途得多。

我俩当年选择了一次包养费更多的当二奶,一干就十年,面对甲方,想要什么普士配合什么普士,除非条件实在不允许。

从OA到CRM,从CRM到ERP,从ERP到电子商务在线系统。。。

 这次下定决心做产品,同学的朋友的外包单子,拒掉,哪怕裤腰带勒得一天比一天紧。

智能家居是什么?以前从来没认真想这个问题,做博特拉虚拟管家也是因为正好碰上豪哥一直是围着房子转的。加上在深圳,深圳做硬件相关的东西在中国有得天独厚的优势。

2014-04-21 发出第一条任务,编号#49,算是正式立项。

中间进行了两个月的调研

2014-06-20 确定硬件方案商

2014-06-20 写下第一行代码

2014-07-14 确定交互设计主设计

管理员

首先,要保证你把gitlite-admin仓库clone到本地,并有读写权限。

管理员用以下命令把自己的公钥传到服务器,如下,目录改成正确的目录:

scp ~/.ssh/id_rsa.pub user@server:/git_home_dir/git-admin.pub

然后git clone git@server:gitolite-admin.git把git管理仓库拿到本地。

添加开发成员

先叫开发人员用ssh-keygen命令生成公发给管理员,把它复制到gitlite-admin/keydir下,比如名字叫laonan.pub。

在gitlite-admin/conf下找到gitolite.conf,修正成如下样子,laonan就是新加进去的开发成员,注意这里的配置应该跟公钥的文件名相同。有读写删除等权限。

在gitlite-admin仓库把以上新增文件和改动push到服务器即可。

git add conf git add keydir git commit -m "added laonan." git push …

重装gitolite,配置了N遍,在取gitolite-admin的时候一直显示

FATAL: R any gitolite-admin git-admin DENIED by fallthru (or you mis-spelled the reponame) fatal: Could not read from remote repository.

相当郁闷,百无聊赖ls -a,把.git为前缀的隐藏文件(如.gitolite)一个个删除干净,居然TMD行了。

花掉一个小时,NND个胸。

/media/upic/2014/11/14/talky.png

最近在查关于在手机端上即时视频通话的资料,除了一些老牌的sip客户端如Linphone这些,google有项技术叫WebRTC,用意是直接使用Javascript调用实现实时视频通话,不少人也打主意把这东东移植到移动app里去。

查找过程中发现http://talky.io(复制这个网址粘帖到浏览器访问,最近这个博客的这个CKEditor抽风,不能直接写链接HTML,有空再改)基于WebRTC技术开发网站,在首页给对话取一个名,点击"Let's go"按钮进入,把网址发给别人,你们就可以不用安装任何插件进行视频聊天了。

古时候,当年读大学,没有微信,QQ没有群,好多人在要装插件的视频聊天室里眼巴巴等表演(你懂的),还要抢麦。。。

暂时只支持Chrome,Firefox以及Opera的高版本浏览器,又土又老又过时的IE玩不动,国产山寨浏览器也玩不动,那什么360极速浏览器跟Chrome是基于Chromium的,可以一试,我没试过,不知道。