一切脚本化、自动化、智能化


  • SIP信令裁剪


    引言:对于UDP来说,若包大小超过MTU(一般1500),需要分包发送,而UDP本来就无法保证顺序及可达率,因此发送大于MTU的数据出错概率就非常高;因此对于UDP传输,数据必须控制在MTU以内,而一些SIP信令(如INVITE)基本快接近这个值,倘若多些音视频编码,那必然超出,因此需要对其进行裁剪,本文将为大家阐述如何裁剪SIP信令。



  • 类Unix下语言环境locale


    引言:在使用类Unix系统时,经常会遇到无法显示中文字符,各种乱码,于是Google,找到了若干解决方案,各种设置LC_CTYPE、或者LC_ALL、又或者LANG,然后经过多种答案的叠加,问题就解决,可对其中的原理仍无法理解,可能每次遇到乱码的情况还不一样,解决方法也不一样,于是就更晕.我最近也遇到关于中文字符显示成?的问题,于是想更深入的了解下其中的原理,找到了一篇好文,现在我再整理下.



  • 跨域请求(CORS)要点


    前端开发的童鞋,应该都有听过跨域请求,但这其中的细节可能还不清楚,比如:

    * 什么是跨域请求?
    * 为什么会存在跨域请求?
    * 跨域请求是怎么工作的?
    * 如何解决跨域请求?
    


  • 三层交换机工作流程


    引言:对于三层交换机这个名词,大家应该不陌生,但大家是否正真了解它,对于它我有太多的疑问:

    * 为什么叫三层?
    * 为什么要有三层,二层不够?
    * 其工作流程是怎样?
    * 为什么同时可以工作在二层模式也可以工作在三层模式下?
    * 什么是一次路由多次转发?
    * ...
    


  • Chrome google不根据VPS跳转到对应域名


    在启用VPS后,各位可能会发现使用Chome进行Google搜索时经常会跳转到VPS所在地区的域名,如https://www.google.co.jp,于是出来了一大堆日文(太影响阅读了),今天又去搜索了下解决方法,最终发现其实只要简单的设置就可以.



  • Alfred workflow若干要点


    Alfred workflow真是个神器,自从上手后,就割舍不掉,目前很多原来繁琐的动作都可以通过简单的方式进行,虽然网上已经有很多别人写好的workflow,但总是不够用,毕竟各自的偷懒点不同,因此就必须会workflow的编写,本文将为大家介绍最为常用的技巧.



  • font-awesome 字体文件路径如何配置


    最近工程中有使用到font-awesome,其中涉及到font路径的配置纠结了我好长一段时间,经过探索发现,该路径是相对于css路径.



  • 关于CSS预编译器SASS


    关于sass其实在早些时候已经听说过,但一直没有用上,今天在前端同事答辩的过程中再次进入视线,经过了解,在sass中可以定义变量,感觉非常欣喜,因为在之前的编写css过程中,发现很多内容都需要重复写多边,于是一直想寻找一种更高级的css编写技术,果不其然,sass解决了我的痛点,接下来我来详细介绍下sass带来的好处.



  • iOS静态库的链接与加载


    引言:研究iOS静态库的链接与加载是源自这个问题:为何引用同一个SDK,在真机可以编译成功,而在模拟器在出现duplicate symbol?,一时间无法理解,按道理说如果出现duplicate symbol,说明代码中应该有重复定义的部分,而为何真机又ok,难道真机屏蔽了部分代码?带着这些疑问和猜想,进行如下实验



  • 如何理解JSP


    虽然JSP技术有些过时,但很多网站还是使用JSP,于是想了解下JSP的来源,即为什么会有JSP?



  • MacOSX终端下翻墙


    最近需要安装gitbook,发现老卡死,猜测应该是由于那个wall,于是想找下如何在终端下使用shadowsocks来跨过那个wall,果然,通过google发现可以通过proxychains-ng来实现,亲测可行,记录于此.



  • SIP各业务逻辑流程


    近期在跟踪SIP问题,顺道把各个业务流程记录于此,方便后续查阅.



  • apache2配置反向代理


    关于反向代理的概念,这里就不过多阐述,我们直接进入正题



  • 如何查看Linux内存使用情况


    内存是计算机不可或缺的一部分,不论是Window还是Linux,内存占用过高,计算机就会慢下来,因此我们需要知道当前内存使用情况,从而更好地控制计算机,那么在Linux我们如何查看我们的内存?



  • 域名解析的那些事


    域名是指向一个IP,这也许是每个人都知道,估计也是很多人唯一知道的。但其实域名的用法还有其他很多用户,如MX记录、CNAME等,这些都是非常重要的功能,因此大家有必要掌握各种域名解析方法。一条域名解析包含记录类型主机记录记录值TTL



  • Linux下邮件系统的搭建


    前端时间尝试了下自己搭建邮件系统,遇到了很多难点,主要是不了解邮件系统,如果你和一样不了解邮件系统,你可以先看下我的另一篇文章《邮箱系统的新认识》,相信在看完后再去搭建就会很明确。那假如你已经了解了邮箱系统,于是你可以继续往下看。



  • 邮箱系统的新认识


    这段时间公司需要使用自己的域名来构建一个邮箱,于是想了解下邮箱系统,发现里面的水很深,本文将记录下这些新知识。



  • 论linux下service的坑


    近日,通过service运行脚步来跑java程序,发现输出的中文都是?,而直接运行脚步又是正常的,感觉非常奇怪,于是通过man service查看

    service(8)                                                          service(8)
    
    


  • Swift调用ObjectiveC


    Swift中调用OC代码,并不是直接import头文件,然后开始调用,而是需要进行配置,方法也很简单,步骤如下:



  • VPS加速(已验证有效)


    买了VPS也有一段时间了,主要作用还是翻墙,Google、youtube等等,发现特别是看youtube视频非常卡,于是想去看看有没有解决方法,当然搜到了不少tip,如ServerSpeeder、net-speeder、finalspeed、xsocks等,其中ServerSpeeder需要注册,稍显麻烦,而且目前不支持centos7.2系统;net-speeder属于比较简陋,因此也不考虑;最终尝试了finalspeed,速度果真上去,能够达到1MB以上,看youtube视频是杠杠的,下面我把配置流程记录下.



  • 理解Git的Rebase


    今天同事偶然问道git rebase的问题,于是想去了解下,可是看了好几篇文章都无法理解,后来理解了下rebase的词面意思,rebase可以理解为重新定义起点,可以结合下图理解:



  • 服务端API测试工具之JMeter


    在互联化的时代浪潮里,服务端API变得无处不在,几乎每个公司都有会提供服务API给第三方调用,而服务API的测试也就提上日程,本文我们将介绍API测试工具JMeter,JMeter是Apache组织的开放源代码项目,它是功能和性能测试的工具. 本文将对Jmeter进行比较系统化的阐述.



  • gitlab之repos位置迁移


    前段时间gitlab服务出现503错误,查看了下日志,发现是gitlab数据所在的挂载点空间已经满了无法写入,于是想把数据迁移到另一个挂载点上,查了下gitlab仓库数据是位于/var/opt/gitlab/git-data下,于是最直接的做法就是把git-data拷贝到新挂载点下,然后建立一个软连接到/var/opt/gitlab下,而实际测试发现会有问题. 后来通过查看gitlab.rb配置文件,发现git_data_dir选项,于是通过把git_data_dir指向新挂载点,发现还是有问题,后来通过stackoverflow找到了正确的方法,现记录于此:



  • Debian无法执行rc.local原因


    今天在配置树莓派启动项的时候,发现无法执行/etc/rc.local中的命令,非常奇怪,后来网上搜索了下,发现原来是dash在作怪,具体怎么回事,我来细细讲述下.



  • 外网环境下控制内网主机


    很早就有这样一个想法: 通过远程控制内网主机,原来有尝试借助于路由器的端口映射或DMZ来实现,可是后面发现这并不现实,首先是假如有多级路由,那每个路由都要配置,非常麻烦,而且有些根路由,根本无法触及到;其次电信、联通等网络并不一定暴露公网IP给我们,因此外网根本访问不到(可以理解为我们处于一个大局域网下);由于这种种原因,渐渐放弃了这个想法,直到有一天发现SSH反向连接这个东西. 当时一看到这个,就好像发现新大陆一样,无比兴奋,经过一段时间的折腾,终于找到了控制内网直接的好方案.



  • 快速守护你的进程


    为了保证服务一直存在,需要对服务进行守护,以保证在服务挂了的情况下自动启动服务,该机制可以通过守护进程去实现,可以去Google,相信会出来一大pia,各种语言对应的templete都有,c、python、shell。。。这样一般对于开发者很有用,当时略显繁琐,后来发现有daemon命令,爽到爆.不信你往下看



  • 通过expect实现自动输入密码


    #!/usr/bin/expect
    spawn ssh root@192.168.61.223
    expect "password:"
    send "123456\r"
    interact
    


  • 关于xargs与alias矛盾


    xargs和alias是UNIX/类UNIX下比较常用的命令,而且也非常好用;他们非常和谐的各自活着,可是有一天,有一个攻城狮把他俩凑在一起,于是他们吵架了,闹矛盾了. 我们一起来看看为何吵架?



  • Gitlab服务器迁移


    最近公司新批了一台GIT服务器(Dell T130),需要把原来Git服务器的数据迁移到新服务器.这里对迁移过程做个简单的记录.



  • 如何理解依赖注入


    最近接触了Spring、AngularJS,发现一个有趣的名称依赖注入,听起来非常高大上,一开始给蒙了,于是疯狂地Google,在几经波折后,终于有了一点感悟,现在把它记录下来,希望也能够给初学者一点提示.



  • HTML5之SVG


    最近在解析douban.fm网页时,发现一些图标绘制时用SVG,于是借机脑补下. SVG是HTML5中绘制矢量图的技术.SVG利用XML技术,非常容易理解,来个DEMO:

    
        
    
    

    PS: 画个圆,是不是很容易,比直接采用jpg、png等图片方便多了,而且还不会糊.



  • Tomcat编译及源码分析


    最近在学习Java Web服务端架构,想从最原始的架构学起,于是选择了Servlet,而在学习Servlet必须用到Tomcat,于是想进一步深入了解Tomcat。Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。



  • MacOSX配置ssh服务


    最近想用公司的一台闲置的Mac-Mini搭建一个服务器,而Mac-Mini没有显示器,因此想通过ssh来登录并进行操作,本文将讲述MacOSX系统如何配置ssh服务.



  • 可持续化集成Travis-CI入门教程


    Build Status



  • linphone源码解读之Filter


    Filter是linphone源码的精髓,Filter可以比作过滤器,负责对数据进行不同功能的操作,如解码、编码、显示、滤噪等等. 往往一个流程需要很多个Filter来组成,只有经过一层层的过滤,才能得到【纯净】的数据. 比如视频接收显示流程,需要经过rtprecv、decoder、tee、jpegwriter、display几个Filter. 下面我们来详细地讲述Filter.



  • 关于Gitlab若干权限问题


    公司切入Gitlab来管理代码已经有一年多了,其中遇到很多权限问题,如没有权限clone、没有权限提交代码等等,这里做个总结. 权限分为访问权限和行为权限两个层次.



  • linphone-iphone最新源码编译


    最近在解决音视频对讲的问题,发现原先那版linphone sdk存在比较多的问题,比如内存泄露、信令错乱、crash等等,通过github了解到,linphone sdk一直都在更新,于是想更新下linphone sdk.



  • MacOSX命令行下快速切换WiFi


    办公室内有多个WiFi热点,由于工作内容的不同,需要不停地在多个WiFi下切换,而且有些WiFi还需要手动分配IP,如果是使用手动选择WiFi,再配置就非常不方便,因此,需要实现命令行下快速切换WiFi,首先列出一些tips



  • 自己搭建OpenVPN


    去年买了vultr的VPS,使用shadowsocks可以在MAC上翻墙,但对于iPhone手机来说,不是特别好用,经常连不了,而且需要设置本地代理,想了想还有VPN这一条路,于是就想用OpenVPN来搭建服务器,过程蛮简单的,这里记录下.



  • iptables要点


    iptables是一个配置 Linux 内核防火墙的命令行工具. iptables是由tables组成,table由chains组成.



  • UNIX命令行技巧


    命令行可以说是一个非常神奇的东西,喜欢MACOSX、Linux也是在于他们有强大的shell,本文将记录好用的技巧.



  • 命令行下获取TP-LINK路由器DHCP客户端列表


    需要实现一个需求:当我回到家时,音乐自动播放起来;关于这个需求有很多方式,比如声音识别、摄像头识别(仿生),当然也可以通过蓝牙、WIFI。声音与摄像识别的难度相对较大,后期再研究,因此就剩下蓝牙和WIFI,蓝牙的话,目前缺少蓝牙适配器,因此也暂时不考虑,那么就剩下WIFI了. 这里讲下总体思路,就是实时监控路由器中是否有我的手机在线,如果在线,则认为我在家. 那么问题就来了,如何知道我手机是否连到路由器. 这里有两个方法,方法一:为手机设置静态ip,不断ping这个ip;方法二:动态获取手机ip,不断ping这个ip.本文主要讲述如何动态获取手机ip.



  • APNS统计分析


    最近有个业务是设备需要呼叫手机,要求手机在后台的情况下,也要接收到来电;iPhone手机在后台也能响应呼叫,应该就只有VOIP和推送了。VOIP是指手机后台化之后,系统会维持一条与服务器的长连接,当设备呼叫手机端时,服务器往手机发送一条呼叫指令,系统接收到呼叫指令后,会唤醒应用并执行相应代码,并本地推送. 推送是指通过APNS推送呼叫信息到手机,手机展现远程推送.关于VOIP,发现失败率挺高的,与想通过APNS实现,那么首要的工作就是对APNS的推送到达率和实时性需要做个测试,这里记录推送的统计过程.



  • 树莓派利用motion来搭建流媒体及运动检测


    1. 确认是否含有/dev/video0

    通过ls参看是否有/dev/video0, 若没有则可以通过如下命令生成.

    sudo modprobe bcm2835-v4l2
    

    当然需要写入/etc/rc.local以保证开机运行.



  • python网络框架之flask


    常听起有些网站后台是用python来构建的(如豆瓣君),于是teyi去了解下,python的web框架还真不少(python社区果然强大),有django、Tornado、Bottle、flask、web.py等等,在前面『python构建WEB服务器』介绍过用web.py来构建网站,当时看起来非常简单,今天我们来介绍另一个框架flask.



  • 树莓派搭建视频流服务器


    可以利用树莓派搭建一个IPC,Google下找到了此文,非常给力,这里照搬下.



  • BASH输出TAB键


    有时候shell脚本需要输出TAB键,如脚本生成Makefile

    makefile() {
    cat << EOF
    all:build
    build:
    	make all -C submodules/build
    clean:
    	make clean -C submodules/build
    veryclean:
    	make veryclean -C submodules/build
    install:
    	mkdir -p $PREFIX/include
    	mkdir -p $PREFIX/lib
    	cp -rf $SOURCE/include/* $PREFIX/include
    	cp -rf $SOURCE/lib/* $PREFIX/lib
    
    


  • 树莓派1 B+ OSMC支持HiFiBerry


    最新版本的OSMC已经完美地支持了HiFiBerry,大家只要进行相关设置就ok,不用aplay、/etc/modules各种折腾(我就这么过来的)



  • MACOSX写入img到sd卡


    最近在整树莓派的声卡,又需要重新装系统,这里记录下如何将img 写入到sd卡



  • 搭建自己的AppleTV


    大家知道,我们可以通过AirPlay将手机的内容投放到电视上,可假如我们不想买AppleTV,有没有实现将手机内容投放到电视上,答案是肯定的. 本文将讲述如何利用树莓派搭建自己的AppleTV.



  • osmc支持中文


    xbmc的缺省字体字符集应该不是gbk的,显示中文很多子都是方块,可以用其他字体替换



  • python构建WEB服务器


    本文将利用web.py来快速构建一个WEB服务器,看下面 test.py

    
    


  • 命令行生成二维码


    为了实现自动化,有时我们希望在脚本中生成二维码的需求,因此需要支持生成二维码的命令,通过Google发现qrencode可以达到要求.



  • MACOSX命令行发送邮件


    最近准备打一个iOS APP自动化发布环境,在发布完后需要通知测试人员,于是考虑邮件通知,但又不可能人工方式(不(tai)智(lan)能(le)),于是就找找有没有命令行下发送邮件,果真找到了很多,有telnet、mail、sendmail等等,本文选择了一个最简单的方法.



  • 查看iOS设备各系统比率


    点击这里查看iOS设备各系统占用比率



  • iOS 9.0.x UIScrollView崩溃BUG


    前段时间在分析一个崩溃bug,发现原来iOS9.0.x的UIScrollView有一个bug,具体表现为,当我继承UIScrollView,并重写setDelegate方法,如下:

    - (void)setDelegate:(id)delegate {
        [super setDelegate:self];
    }
    

    当调用.delegate=xxx,就会出现如下崩溃信息:

    objc[88233]: Cannot form weak reference to instance (0x7fc37c857400) of class TestScrollView. It is possible that this object was over-released, or is in the process of deallocation.


  • 悦读FM iOS客户端发布


    经过2周漫长的等待,悦读FM v1.0.0 iOS客户端终于审核通过了,这里给出链接:https://appsto.re/cn/-9iG-.i



  • XCode之ARC模式


    先来看一段ARC代码

    objB = objA;
    objC = objA;
    

    经过两个赋值后,会发现objA的对象引用+2了,很神奇吧,仅仅只是一个赋值语句,就能把objA对象的引用+2;一向自认为c基础扎实的我,认为有点不可思议,甚至有时会认为此处引用根本没有增加,但没有增加的说法似乎又不同,于是Google下,发现这是编译器在搞鬼,这一点是没有想到的. 此处终于理解了“ARC是编译器特性,而不是运行时特性”;既然知道了是编译器在搞鬼,那么我来简单地模拟下编译器的工作流程.

    确认代码是否处于ARC模式 -> 当有对象赋值时,会根据相应变量的特性(weak、strong...)进行相应的代码修改
    
    


  • ObjC之Block解读


    1. 类型

    根据block在内存中的位置,分为如下三种



  • iOS HTML图片本地预览


    1.引言

     相信用过苹果手机的童鞋,会发现很多新闻类的应用,都可以实现HTML图片本地预览,那么这是如何实现的呢?本文将深入阐述其中的原理.



  • 推荐一个MAC上看在线视频不卡工具(还带去广告)


    详情猛戳这里



  • ObjC转向Swift若干tips


    • 不分头文件和实现文件,而是集合到.swift文件
    • 类型对象化(类似于java) Int、Float、Double、Bool、Character
    • let 定义常量; len pi = 3.14
    • var hello :NSString ?
      • var 定义变量var hello :NSString = @"1212"
      • : 指定变量类型
      • ? 表示optional,即该变量可能为nil; 调用时必须加? 如 hello?.length
      • ! 表示该变量一定不为nil,否则crash


  • Objective-C之runtime


    image



  • 2015半年个人工作总结


    转眼又是半年,这里对这半年的工作来个小结.



  • 创建自己的CocoaPods私有仓库


    引入CocoaPods来管理iOS第三方库有一段时间了,这里说一下体会 “快乐并痛着”,为何说快乐呢,可以方便我们去寻找第三方库,并引入到已有的项目工程中,而且保证了工程结构的清晰;为何又说痛着呢,主要是由于更新第三方库太慢了,目前我们引用的第三方库已将近20个,更新一次耗费了至少得半个小时以上,而且更可恶的是,更新期间无法编译代码;总的来说,还是痛多些,现在都不敢更新,于是Google下,发现CocoaPods支持私有仓库. 这里简单描述我的经过.



  • 关于Github上的Contributions不记录问题


    很长时间一段时间都认为Github的Contributions只有通过pull request才能更新,今天特地Google了下,发现原来不是如此,关于Contributions,Github给出了答案。



  • 论git还原


    以前在使用SVN工具时,经常用到revert来还原到某个提交点,而现在切换到git,是否也有呢? 答案是肯定的,那么下面我们来看看git如何实现还原。



  • 使用git的patch功能


    最近遇到一个这样的情况,云端需要架设SIP服务器,即需要在服务器端编译源码并生产可执行文件,而代码在局域网内维护,这样就一个代码同步的问题,如何把本地修改的内容同步到云端,通过Google发现git有一个patch的功能,就能实现代码同步,具体有2种方式,描述如下:



  • awesome-raspberrypi


    本文将记录我在树莓派开发过程中遇到的一些难点.



  • awesome-ios-develop


    下文是我在开发iOS APP两年后的一些经验总结.



  • 解决git的detached from临时分支问题


    今天偶然发现git会出现detached from的分支, 导致很多commit未push到服务器,以至于其他同事clone的代码编译错误

    StarnetdeMacBook-Pro:mediastreamer2 starnet$ git branch -a
    * (detached from b34a935)
      master
      remotes/origin/HEAD -> origin/master
      remotes/origin/master
    

    google发现如下解决方案



  • 在MacOSX上如何抓拍iPhone或iPad的屏幕


    今天看到iTool有一个LiveDesktop的东东,感觉挺新奇的. 于是想看看是什么原理,找了半天,发现一个好东西libimobiledevice,这个开源库提供很多工具,比如查看设备信息、设备DEBUG信息,大家可以直接编译生成这个工具,当然也可以到这里下载编译好的可执行文件.



  • 命令行查看iOS设备的UUID(system_profiler)


    每次要查看iOS设备的UUID,都要打开iTool或iTunes,显得非常麻烦,有没有更简单的方式,经过Google发现真有,现将此命令记录于此。



  • Ruby学习路程


    Ruby是另一种脚本语言,为什么说“又”,因为我已经了解了lua和python,那么为什么要学习Ruby,最主要的原因是现在很多第三方工具,如Cocoapods、Jekyll是用Ruby写的,为了更好的了解他们,至少得看得懂Ruby语法,于是就有了该Blog,我会将我学习Ruby的经历记录与此。



  • iOS APP图标一键生成


    随着工龄的渐长,发觉越来越懒,对于繁琐的事情,总想少干点,就像今天提及的APP图标这个事,往常的做法无非是两种,一是让UI工程师提供所有尺寸的图标,二是UI工程师给出一个大图标,自己缩小,方法一可谓是害己又害人,虽然开发者的工作量少,但一旦图标调整,苦了UI工程师,又累了开发者(要自己替换图标);方法二,那可是够累,打开PS,调整图像大小,保存,调整图像大小,保存…,今天可谓终于忍无可忍,决定写一个脚本ios-icon-generator,下面简单介绍下.



  • 命令行下播放yuedu.fm的文章


    一直喜欢yuedu.fm里的文章,本来想弄个APP,结果API不开放,后来偶然间发现网页中竟然带有mp3路径的字段,这不是给我留漏洞,此时若不钻,天理不容^-^,通过curl、awk就能获取到MP3的url,再利用mplayer,就可以在命令下播放,再加上随机函数,就可以随机播放yuedu.fm的文章,



  • MacOSX命令行播放音乐


    为啥要在命令行下播放音乐呢?直接利用iTunes播放不行吗?确实,在命令行下播放音乐,显得折腾,但有时你在命令下正敲着命令,结果发现太安静了,想听听歌,怎么办呢?没错,这个主题就是在这个背景下提出的。



  • 为博客添加 多说 评论


    博客少了评论,总感觉缺(chun)少(shu)灵(che)魂(dan),今天可算是抽了点时间,集成了一个多说评论,为什么用多说,因为它排行第一 ^-^. 下面记录下Jekyll中添加多说评论步骤.



  • TCP服务端与客户端DEMO


    最近在整理SOCKET这块知识,发现好久不写,都忘了差不多了,这里给出服务端与客户端的DEMO,以便后面使用, 代码猛戳这里.



  • 亲爱的方,致你的第二封信


    亲爱的方: 我不知你是否看了我前天写的信,我知道事情发展成这样,可以说都是我的错,这里我再次给你说声“对不起”、 “对不起”、”对不起” …



  • 利用七牛自动同步文件


    在写围脖的时候,有时需要关联图片,而对于Markdown来说,又没有办法直接贴图片,需要将图片上传到一个网站上,之后再取图片的链接,利用[!image]来关联图片,感觉还是挺麻烦的,后面做项目时,同事有用七牛服务器做存储,发现是个好东西,不仅能够方便上传图片,而且容易提供外链,非常方面,可惜的是体验用户只有1G空间,不过对于写围脖来说还是够用的. 下面我来说说如何实现自动同步.



  • MACOSX之NFS服务器搭建


    NFS即网络文件系统,允许一个系统在网络上与它人共享目录和文件,通过mount可以将它挂载点本地节点,就可以方便访问远程文件. MACOSX如何搭建NFS服务器呢?



  • 论XCODE之Architectures、Valid Architectures和Build Active Architecture Only


    对于自己不懂的东西,总想弄明白,可有时又没有那么多时间,于是可能就不了了之,就像今天要讲的”Architectures”, 之前弄明白了“Build Active Architecture Only”的含义,可是对于“Architectures”和“Valid Architectures”,确是云里雾里的,今天总算抽点时间把它弄明白了.



  • TestFlight试用感想


    一提到iOS APP的测试,估计很多iOS开发者(当然也包括我),肯定在心里头暗骂“好坑”,确实对于一个未发布的APP来说,要测试它,根据以往我的经验,只有以下2个途径来安装APP:



  • 新版博客主题上线啦


    今天终于完成了新版博客主题Jekyll-Pithy的开发工作,果断上线之,发现还是不错(主要是原来那一版太丑了^_^). 大家可以到这里下载最新的主题,如有任何问题,可以发邮件给我(lvyexuwenfa100@126.com).



  • 给Firefox添加搜索引擎


    Firefox已经提供了很多搜索引擎,包括Google、百度、Bing、维基百科等等,但有时我们想添加自己的搜索引擎,昨天找了下,发现Firefox有个好用的插件“Add to Search Bar”,可以添加任意搜索引擎. 下面我将Google克隆站http://www.clonegoogle.com/添加为默认搜索引擎.



  • 线程局部存储


    在移植linphone代码时,发现在注册SIP账号时,经常报如下错误:

    There is no object pool created in thread [xxxxx].Use belle_sip_object_pool_push() to create one. Unowned objects not unref'd will be leaked.
    

    经过调试发现是pthread_getspecific和pthread_setspecific出现了问题,原来想我只设置了一次pthread_setspecific,而发现有时pthread_getspecific获取的值是不一样的,当获取到得值为NULL,则报如上错误;而在其中我并没有进行pthread_key_delete和pthread_setspecific操作,为何相同key下,pthread_getspecific获取的值不一样呢?



  • iOS8 Size Class形象图


    image



  • 论iOS应用之中间层构建策略


    在iOS应用开发中,我们一般会将应用分为3层: View - Controller - Model, 我们这里所说的中间层其实是指Model层。对于Model层我们还可以细分为2层: Manager - Data,即原始数据+数据接口;对于Manager层,在我们原先的做法,是对于各种Data我们建议独立的Manager,如NetManager、ThumbManager、FileManager。随着功能的不断添加,会创建越来越多的Manager,而这些Manager都是独立,无从管理,从而就会显得整个工程比较混乱。这里我提出一种来管理新的解决思路 - 服务模型. 各种Model通过服务来管理,只有对此服务进行注册,启动后才能提供相应的服务.



  • 如何抓取iOS设备的网络包


    有时我们在开发iOS APP时,需要抓取iOS设备的网络包.下面根据我实际工作经验,给出如下几个思路:



  • XCode Copy Bundle Resources “Red”


    本文将阐述XCode Copy Bundle Resources中为何会出现红色的文件资源.



  • InAppSettings的使用


    InAppSettings为APP提供了Settings的快捷化构建,只需少量代码就可以实现复杂的设置界面,下面来阐述如何使用InAppSettings.



  • iOS Safiri如何播放网页中的视频


    众所周知,网页中的视频一般是基于flash的,而接触过iOS的人,应该都知道,iOS的safari是不支持的flash,至于iOS为何不支持flash,可以查考这里. 那如何支持视频呢?对,就是html5的video,iOS safari已经支持了html5的video. 于是第三方视频网站要实现的就是提供带video的html,这样iOS设备才有办法播放.



  • ping解读


    提到ping命令,相信大部分人都用过,比如要查一下IP,ping之;查一下网关,ping之;查一下网络状态,ping之. 由此可见,ping虽小,但却精悍. 下面我们来解读ping之原理.



  • wget进度条显示原理


    每次使用wget下载内容时,会发现进度条都是当行一直更新,而在c中打印都是printf,这个似乎没有此功能;今天查了下,发现printf \n 是另起一行,\r是回到本行的开头,如果继续输入的话,则覆盖之前的内容,如下是个DEMO:

    include < stdio.h>
    include < stdlib.h>
    include < unistd.h>
      
    //类似wget的进度条的实现,实际就是转移符\r的使用,\r的作用是返回至行首而不换行
    int main(int argc, char *argv[])
    {
        unsigned len = 60;
        char *bar = (char *)malloc(sizeof(char) * (len + 1));
        for (int i = 0; i < len + 1; ++i)
        {
            bar[i] = '#';
        }
        for (int i = 0; i < len; ++i)
        {
            printf("progress:[%s]%d%%\r", bar+len-i, i+1);
            fflush(stdout);//一定要fflush,否则不会会因为缓冲无法定时输出。
            usleep(100000);
            //sleep(1);
        }
        printf("\n");
        return 0;
    }
    


  • iOS 摄像头操作


    通过[AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]可以获取到所有摄像头设备

    "AVCaptureFigVideoDevice: 0x14fd07620 [Back Camera][com.apple.avfoundation.avcapturedevice.built-in_video:0]",
        "AVCaptureFigVideoDevice: 0x14fd079e0 [Front Camera][com.apple.avfoundation.avcapturedevice.built-in_video:1]",
    

    PS: 从上面可以看出分别包含后置摄像头、前置摄像头



  • 牛逼的ImageMagick


    ImageMagick[1] 是一个免费的创建、编辑、合成图片的软件。可用于格式转换、变换、透明度设置、特效….; 可支持的格式多达89种。



  • linphone-iphone代码解读


    linphone-iphone是Linphone官方提供的iPhone版本源码,源代码结构可谓是相当庞大,不得不做些记录,现记录与此.



  • MacOSX下编译linphone


    Linphone是一个开源的VOIP框架,利用它提供的库能够快速构建一个VOIP的客户端. 虽然Linphone提供了iPhone版源码,但编译它还是遇到了不少问题,现将记录于此.



  • UITabbarItem图标要求


    image



  • ObjC探索之@符


    程序猿可能没见过猪跑,但必定会认识”hello world”, 不论是教科书还是各种入门教程,都是以hello world来开始一门新语言的学习,ObjC也不例外。在ObjC的世界里,第一眼见到的可能是如下内容:

    int main(int argc, const char * argv[]) {
        NSLog(@"hello world");
        return 0;
    }
    

    学过C语言的应该都比较清楚这其中的各面,唯一困惑的应该是@符号,这是何物?为何需要在字符串加上@???心中不免留下千万个问号。那么我们讲为你一一解开谜底。



  • MacOSX常用工具


    这里将记录我在使用MacOSX过程中,需要设计到的工具.



  • 敏捷开发落地新范式(MOMOKO)


    敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。



  • SDP协议解读


    SDP(Session Description Protocol),即会话描述协议,为会话通知、会话邀请和其它形式的多媒体会话初始化等目的提供了多媒体会话描述,在rfc2327中定义。



  • iOS 设备配置


    这里将会列表所有iOS设备的配置信息.



  • Asterisk 技术点


    Asterisk 是一个开放源代码的软件VoIP PBX系统,它是一个运行在Linux环境下的纯软件实施方案。这里我将记录在编译和使用Asterisk遇到的问题和解决思路.



  • sed命令学习


    sed 是一种在线编辑器,它一次处理一行内容.可以在不用打开文件进行类似vim的操作,如插入、删除、替换等.



  • ftp自动化登录及一键上传


    吐槽: 最近注册了一个空间,需要通过ftp来管理空间文件,命令行用惯了,不想用FileZilla类似的界面软件,于是就想用ftp命令直接操作,网上啪啪搜了一堆ftp命令使用教程,用起来还算简单,可发现老断,经常需要重新登录,够烦的,有时紧紧只想上传一个文件,却把大部分时间花在登录输密码上,想想应该有自动化的方法,于是开启了折腾ftp自动化的旅途.



  • GIT服务器部署


    考虑到目前SVN版本管理工具在模块化开发、代码审查及离线开发方面存在的不足,希望通过引入GIT版本管理工具,来解决这些不足,以促进项目的快速迭代、持续集成及代码质量改善。