脚本化 -> 自动化 -> 智能化


  • MySQL主从同步配置


    近期数据库业务遇到性能评价,于是想通过主从数据库来进行分流,配置过程非常简单,分别配置主MySQL、从MySQL即可,本文对MySQL主从配置进行记录。



  • 在不重新创建docker容器情况下修改配置


    近期在处理应用软件漏洞时,需要对docker容器内Java应用程序增加JVM的运行参数,希望可以在不重新创建容器的情况下进行修改,这里通过搜索并实践得出了一些结果,本文将详细进行描述。



  • 关于锐捷路由器VPN配置中的【允许总部访问分支内网】作用


    近期在配置锐捷路由器VPN客户端的时候,发现一个奇怪的问题,一旦开启【允许总部访问分支内网】后在客户端就无法ping通总部网络,而在路由器上是OK;经过分析后,知道了最终原因:开启【允许总部访问分支内网】会采用分支网络的客户端IP作为VPN隧道内的源IP,而总部如果没有配置相应的路由,则会导致网络包无法到达分支网络;



  • 关于MeterSphere中脚本中自定义变量和项目环境变量逻辑


    近期在使用MeterSphere前置/后置脚本时候,对于项目环境变量有比较大的困惑:



  • 关于crontab限制使用的问题排查


    近期在做数据自动备份用到了crontab,在使用时报了”You (xxx) are not allowed to use this program (crontab)”错误,这里总结了一些排查思路



  • 服务器中挖矿病毒分析及移除


    近期服务器中了顽固病毒,花了不少时间,最终得以圆满解决,这里分享下整个解决思路,便于为大家提供一定的参考。



  • vsftpd配置注意事项


    近期在搭建ftp服务器,这里分享下整个搭建过程及遇到的问题。



  • macOS Catalina ssh 无法登录部分远程服务器


    由于近期需要升级xcode,被迫升级了macOS系统至Catalina,升级完后发现有些远程服务器服务登录,利用-v看了下



  • 一行命令快速搭建上传和下载的HTTP服务


    如何与任意一台电脑进行文件传输,想到最有效的方式就是通过浏览器进行上传和下载,这就涉及到了上传和下载服务的搭建,当然搭建方法很多,下面给出最简单快速的方式。



  • 分析命令行可以访问而浏览器无法访问的原因


    遇到一个奇怪的现象:命令行可以访问 http://serverip:6666 ,而浏览器无法访问,抓包无法抓取相应的包;经过一番排查发现是浏览器拦截了受保护端口 The error is: "Not allowed to use restricted network port



  • 快速访问iOS沙盒


    开发IOS APP,经常需要查看沙盒中的一些文件,如日志文件;一般我们需要用USB连接电脑,使用iTools或XCode工具导出,但经常会遇到XCode版本低于iOS系统,因此就无法支持;本文推荐一个好用的工具 SandboxAccessor, 只有在您的工程中集成SandboxAccessor,您可以不安装任何额外软件或USB连接,直接通过浏览器访问APP沙盒中的文件.



  • 算法 - 给定一组数列出所有可能组合


    ``` Description Given a list of numbers, return all possible permutations.



  • 理解2>&1 >file 和 >file 2>&1的不同


    要理解2>&1 >/dev/null 和 >/dev/null 2>&1的不同,需要知道以下几点:



  • 算法 - 求第k个只能含有2-3-5因子的数


    ``` Ugly number is a number that only have factors 2, 3 and 5.



  • GIT导出子目录


    git archive --remote 远程仓库 REF:子路径 -o output.zip
    

    PS: REF可以是标签名、分支名、HEAD



  • 磁盘坏道检测及修复


    Linux磁盘坏道检测及修复方法



  • 百度云加速器 - baiduyun-accelerator


    随着百度云限速的到来,速度已经降到100KB/s以内,每次下载都很烦恼;该工具是为了解决此痛点而生。该工具使用了 HTTP RANGE原理进行分段下载,可以将一个文件分成N块来下载,这样下载速度就有可能提升N倍(理论上)



  • JAVA WEB发展历程


    • 第一阶段:静态网页
      • 服务端放置写好的html
      • 不足:无法展示一些动态的信息


  • Linux的NICE时间


    使用top命令时,会显示一个ni值,一直没留意,今特地研究了下:NICE表示进程的友好值,从-20到19,值越高,进程优先级越低(越友好,越不会抢占CPU);NICE TIME是指NICE大于0的进程所占用CPU时间百分比



  • git忽略已追踪文件的变动


    经常遇到这种情况:需要某个文件,但又不想把本地修改同步至远端,因此不同电脑路径不一样,可以通过如下语句忽悠

    git update-index --assume-unchanged 文件路径
    


  • 微信扫一扫自定义二维码实现支付


    众所周知,微信提供了APP、公众号、小程序、H5及扫码等支付方式,而本文需要实现微信”扫一扫”自定义二维码支付功能; 而扫码支付中用到的二维码是微信规范的二维码(weixin://),H5需要在非微信浏览器才能打开;因此只剩下了公众号(或小程序),本文基于公众号支付为大家讲解下整个流程



  • 分析并解决Asterisk CPU占用过高问题


    现象:近来,发现Asterisk SIP服务经常占用CPU 100%以上,而且都在服务启动1个小时后出现,但重启服务后就恢复正常



  • lua调用c


    本文介绍lua如何调用c方法



  • sed提取一行中匹配的字符串


    提取123
    echo 'abcdef123liek'|sed 's/.*ef\(.*\)liek/\1/g'
    

    PS: ()中的内容可用1、2、3等数字表示且需要加转义符\



  • Lua编写带有so的Wireshark插件


    wireshark支持纯lua和c插件,那么如何支持lua和c混编的问题,即lua调用c接口,对于lua语言,这个不是问题,但加上环境,就会出现如下问题



  • Lua编写wireshark插件


    在我们自己的系统中,会自定义协议,甚至加密;为了更容易进行抓包分析,我们需要编写wireshark插件.



  • 重定义Linux的rm命令


    rm -rf可以说是非常致命,删除之后比较难恢复,因此我们尽量减少直接使用,可以参考mac、window都有一个回收站,因此我们可以重定义rm命令



  • sed的hold space


    hold space - 是sed上一次pattern space的缓存



  • sed替换带路径符


    sed 's@aa@bb@'
    

    PS: 可以使用@、$、?、%等替代/



  • sed n,N,p,P,d,D区别


    n - 打印当前行,读入下一行,且替换模式空间内容,即后续命令只对第二行生效;若遇到没有第二行的情况,则直接退出
    N - 读入第二行,把两行都放入模式空间,并打印;若遇到没有第二行的情况,则直接退出
    p - 打印模式空间内所有行
    P - 只打印第一行
    d - 删除模式空间内所有行
    D - 只删除第一行
    


  • bash通过curl执行远程脚本如何携带参数


    /bin/bash <( curl http://localhost/test.sh ) args
    


  • Android tcpdump抓取整个包


    tcpdump -s 0 
    

    -s 0表示抓取整个包,否则只会抓取头部



  • Linux监听某个文件是否发生变更


    很多时候,我们希望在变更某个文件后,系统可以自动触发操作,比如我们更新某个文件后,自动执行编译,本文将为大家介绍相应的方法。



  • oracle jdk下载方法


    wget下载oracle jdk需要加上--no-cookies --no-check-certificate --header "Cookie: oraclelicense=accept-securebackup-cookie",否则无法下载.



  • 苹果开发者账号填写手机号的正确方法


    最近登录苹果开发者账号,提示如下信息:



  • 喜马拉雅音频下载工具 - xmlyfetcher


    xmlyfetcher用于下载喜马拉雅歌曲资源,可以下载单个音频资源,也可以下载整个专辑. 项目地址:https://github.com/smallmuou/xmlyfetcher



  • 获取图片某个位置rgb值


    通过如下代码可以获取图片某个位置rgb值,前提需要安装opencv



  • 重放rtp流


    1. 使用tcpdump或wireshark对rtp数据进行抓包
    2. 对包数据进行过滤,取得真实的rtp包,并保存成新的pcap
    3. 使用rtprewrite(https://github.com/smallmuou/rtprewrite)对上一步pcap进行修改
    4. 保存rtprewrite输出的sdp
    5. 按提示执行`tcpreplay ...`,并使用vlc播放sdp
    


  • gitbook生成pdf


    1. 下载安装Calibre应用 https://calibre-ebook.com/
    2. sudo ln -s /Applications/calibre.app/Contents/MacOS/ebook-convert /usr/local/bin
    3. 进入gitbook工程目录,执行gitbook pdf
    


  • 通过redis漏洞入侵系统


    熟悉linux ssh应该知道可以在authorized_keys添加自己的共有密钥以达到免密码登录系统的目的。本文将展现如何通过redis漏洞达到入侵系统的目的。



  • 利用activemq的fileserver漏洞修改系统cron


    当服务器安装activemq后,默认开启fileserver用于文件上传,我们可以通过下面指令达到修改系统cron的目的



  • linux下的buffers和cached


    使用free命令经常看到buffers/cached占用了大量内存,那buffers/cached到底存了哪些内容?



  • curl上传文件


    curl http://yourservice --upload-file file.txt
    


  • NAT类型及穿透


    NAT可以为内网主机提供一条通道以便其访问外网,通道分为共享及独占2个大类,共享又细分全锥形、受限锥形和端口受限锥形



  • asterisk源码解读 - SIP


    这几天阅读了下asterisk channels/chan_sip.c部分的源码(基于13.3.2版本),现梳理如下(代码只列出关键点):



  • asterisk中fullcontact私有IP导致被呼叫失败


    最近发现某些注册到asterisk的SIP客户端无法被呼叫,抓包确定是由于asterisk往私有IP发送数据,通过对比发现这些客户端发送的SIP信息Contact字段是私有IP,google了下相关资料并未找到解决方法,于是跟踪了下代码,找出了原因,现梳理如下:



  • iPhone蓝牙靠近解锁


    之前购买了一款APP - NearLock,可以通过iPhone蓝牙靠近解锁Mac,一旦在一定距离内,Mac就会自动解锁,而离开后,Mac又会自动上锁,挺方便的,虽然偶尔也会抽风,于是近期正好接触蓝牙,也简单实现了个类似的DEMO,本文将描述这其中的整个思路。



  • MacOS配置JAVA_HOME


    export JAVA_HOME=$(/usr/libexec/java_home)
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASS_PATH=$JAVA_HOME/lib
    


  • 查看二进制文件的末尾N字节


    查看二进制文件末尾N个字节 xxd -s length-N file



  • wipefs病毒排查过程


    最近服务器被植入病毒了,现象是ssh经常卡死,于是我使用vnc登录至服务器



  • 测试带宽常用方法


    很多时候,我们为了排查问题,往往需要了解对方网络带宽,下面给出几种方法:



  • 重启腾讯云服务器后导致数据遗失问题排查


    近日,遇到一个非常奇怪的问题:重启腾讯云服务器后导致数据遗失,即整个/var下的内容都不见了,而且mysql、sshd都无法启动. 针对以上问题,经过了一个下午的排查,最终确定是由于挂载了新硬盘导致原数据看不到。如果你只想关注结果,本文就到此结束了,然而我更想把整个排查过程分享于此。最近在看电视剧《神探狄仁杰》,非常精彩,试想一下,如果一下子给出谁是凶手,就没有那么精彩了,其给出的往往是一些蛛丝马迹,通过这些蛛丝马迹慢慢推出凶手;排查问题跟断案也是一个道理,我们可以根据已有的蛛丝马迹,推出真正的『凶手』。



  • 如何解决umount提示设备忙问题


    每当我们需要卸载硬盘,经常会提示device is busy,即设备忙,今天为大家介绍一款工具 — lsof, 通过它就可以看出谁占用了该设备。



  • 衡量网络好坏的指标QoS


    前段时间看过华为的《QoS 技术白皮书》,写的很不错,这里记录下关键的点,以备不时之需。



  • 使用nc命令发送或接收任意数据包


    在网络问题的排查过程,我们经常需要去单方地验证客户端或服务端是否正常、以及网络是否可达,往往我们需要编写特定的测试代码,显得非常麻烦,今天将为大家介绍一个神器 —- nc



  • 百度语音识别


    随着亚马逊的Echo、Google的Home、京东的叮咚、阿里巴巴的天猫精灵的推出,都在市面上引起了不少波动,其中用到的关键技术就是语音识别. 关于语音识别,找到了百度语音识别,本文将给出该接口使用方法.



  • 使用bash编写pcm转wav脚本


    最近需要将一段pcm音频文件转换成wav,以进行播放,但没有发现类似命令,于是自己动手写了一个,现在已开源至github(https://github.com/smallmuou/wavutils);大家知道使用c编写,难度非常小,只要填充头部44字节,并写入文件即可,我为什么用bash进行编写?这里考虑到bash脚本的几个有点:免编译、跨平台;因此对于bash脚本,可以做到「拿来即用」. 本文将只对关键技术点进行阐述,有兴趣的童鞋,可以查看源码.



  • 树莓派下编译及使用linphone客户端


    linphone是一款开源的SIP客户端工具,支持Linux、MacOS、Windows、iOS、Android以及树莓派,非常强大,本文将为大家展现如何在树莓派下编译及使用linphone客户端



  • 外部可以访问而内部访问不了


    今天发现个非常有趣的问题,即netstat并没有发现80端口,但外部却可以正常访问,而更奇怪的是使用127.0.0.1或localhost访问时提示’Connection refused’.



  • map2cloud - 映射本地端口至云端


    很多时候,我们需要远程访问本地的服务,一般我们是借助于Teamviewer或者花生壳,而这往往需要人在对方电脑旁,还有一点,无法真正做到本机操作,体验比较差;而借助该工具就可以直接将远端服务映射到云端,我们只需要访问云端对应端口就能访问远程服务。



  • 如何解决域名访问腾讯云-该网站暂时无法访问-问题


    最近访问腾讯云服务器突然提示”该网站暂时无法访问”,列出了3点原因,后面去腾讯云论坛查了下,说需要在腾讯云这边备案的域名才可以访问腾讯云服务器,相当坑,而我域名是阿里云的,这是强制捆绑买卖。考虑到域名迁移的麻烦性,本文给出了在不迁移域名的情况下的解决思路



  • window下自动切换IP脚本


    懒,就要懒到底; 工作中遇到一个坑点,存在两个网络环境,需要配置不同的IP才能访问,今天终于忍无可忍,把它自动化了,在未自动化前,我需要经历『打开网络和共享中心』-> 『更改适配器设置』->『右键本地连接属性』-> 『双击Ipv4』-> 配置IP、子网掩码、网关,之后再插拔网线;在自动化之后,我只需要插拔网线,脚本会自动根据网络类型设置相应的IP。现在分享脚本如下



  • asterisk配置mysql来保存peers


    asterisk是一个开源的sip服务器,默认情况,asterisk是从sip.conf来配置peers,如果peers有变更或者数量比较大,就不能采用这种方式,asterisk提供的realtime方式,支持数据库实时保存及读取peers,数据库支持mysql、sqlite、postgres等,本文将指导如何进行mysql配置.



  • 通过tcpdump抓包分析ETHERNET-IP-TCP-UDP包结构


    抓包是学习网络协议的有效途径,通过实际分析,使得”理论”不那么枯燥,本文会通过抓包来分析各类包结构。



  • 快速展现和保存16进制


    经常会遇到一些16进制文本”70 e7 2c cd 52 87 d0 c7 c0 8a 1a”,如何展现和保存这些内容,今天为大家介绍一个工具xxd. 通过这个语句echo '70 e7 2c cd 52 87 d0 c7 c0 8a 1a' | xxd -r -p > out,就能把”70 e7 …“保存至out文件.



  • 像操作本地文件一样操作七牛云


    一提到文件操作,自然就想到了相关命令,ls、mkdir、rm、cp、mv等,而且作为linux入门用户,都能熟练地使用,那么七牛云是否也可以采用类似操作。本文我为大家介绍一款工具包,当然也是我自己本人的作品qn-ctl.



  • 记录并展现命令行




  • linux下nginx反向代理配置


    关于反向代理服务器,大家应该都有耳闻,形象地说就是增设的”前台”,所有访问都通过这个前台,不能直接访问内部服务器,从而实现了隐藏. 通过反向代理可以实现重定向、负载均衡等.



  • Sublime Text好玩的快捷键


    Sublime Text可谓是文本编辑的神奇,类似于vim,玩遛它并非一朝,可能你也和笔者一样,是一个Sublime Text新手,作为新手,你必须掌握一些神奇的快捷键,这样你才会慢慢爱上它。本文将对一些常用快捷键进行归纳,罗列如下. 当然笔者使用的是MAC系统,因此以下快捷键是针对MAC。



  • iptables简述


    很多linux系统都采用iptables来构建防火墙,因此有必要对iptables进行深入的了解。



  • 软链接与硬链接


    常常搞不清软链接和硬链接的区别,看了inode才正真理解。



  • 理解MTU和MSS


    遇到个奇怪的问题「无法上传文件至七牛服务器」,依次排除了七牛服务、本地网络,最终定位到只要数据发送超过1440Byte,连路就断了,实际测了下是对方电信出口的限制,具体原因不得而知,解决方法,就是把路由的MTU设小,使得数据小于1440Byte。籍此,对MTU进行了深入学习。



  • 为什么你的广播包收不到


    ‘为什么收不到广播包’,听到的答案都是被路由丢弃了,其实这只是一种情况,而这种情况是比较好理解,一般都会规避,往往实际情况不是这样,比如:

    • 同一个路由器下,两台设备的广播包到不了
    • 两台设备网线直连,广播包到不了


  • linux内核module编译


    最近公司服务器系统升级至 centos7,升级后发现原先的 bios 升级工具无法使用,提示:



  • mysql数据迁移


    最近公司需要切换SIP服务器,需要从原数据库迁移数据至新服务器,其中新旧服务器采用的架构不用,数据结构也不同,下面我将描述下整个迁移过程。



  • 记spring boot应用运行非常慢问题排查过程


    项目上遇到一个问题『Spring Boot应用运行非常慢』,一个正常只要运行3分钟的应用在我们的自己服务器上需要运行10多分钟,针对这个问题我们做过了一些尝试



  • 静态库与动态库优先级顺序


    关于静态库与动态库的区别,大家应该比较清楚;静态库中的所有符号会打包到目标中(应用程序或者库),而动态库的符号定义不会打包进目标中,因此,静态库只存在于编译阶段,而动态库除了编译阶段,还存在于运行阶段。这就是为何系统lib下会存在很多so文件。那么有这样一个问题,假如编译时同时存在静态库与动态库,那么到底优先链哪个,下面我们通过实验证明下。



  • 邮箱配置错误排查


    最近电脑重装系统,于是需要重新配置邮箱,在配置SMTP服务器是Foxmail老提示SMTP Server:Email address or password error,尝试了无数个可能的密码,还是无效。想起了命令行可以测试SMTP,于是命令行下直接执行,发现是错误次数太多535 Error: too many incorrect passwords,坑啊,竟然误导性提示



  • SVN服务迁移


    近期公司SVN服务器迁移,需要从Windows切到Linux,主要出于Windows版权问题;下面主要讲述下迁移过程



  • 云服务器sshd安全配置


    最近频繁收到公司购买的阿里或者腾讯云服务器被攻陷的信息,hacker在里面运行些肉鸡程序,经常占用系统大量资源,导致正常服务无法运行,甚至多次还被阿里和腾讯隔离,非常痛苦,于是去了解下关于sshd的安全配置,并实践了下发现很有用,这里分享下。



  • 利用CGI快速构建HTTP API服务


    为了保证跨平台访问,最好的方式就是通过HTTP API方式,而HTTP API框架很多,有web.py、flask,但缺乏灵活性,只能用某种特定语言编写;而CGI则是语言无关,利用stdin、stdout进行数据传输,那么如何构建.



  • Unix无法执行bash_profile


    一些理所当然的事,一旦出错,我们就如同热锅上的蚂蚁,到处乱窜,没有任何方向,因为在我们的脑海里,这是再熟悉不过的,是不可能发生的。就如同前些时间遇到的问题:MacOSX上Terminal登录的时候不执行bash_profile。遇到这种情况,必须clear自己,清空固化在脑中的「所谓常识」,理清原理。



  • 教你读懂路由表


    很多网络问题都跟路由有关,那么首先必须学会看懂路由表,本文将讲述如何读懂路由及如何决策.



  • SHELL常用技巧


    真正喜欢SHELL还是从使用MacBook开始,MacOSX可谓是将SHELL与图形结合的淋漓尽致(Windows偏图形、Linux偏SHELL),使用到现在,差不多也有3年了,其中积累了很多有用的技巧,可以大大提升我的工作效率,现在我将这些罗列出来,当然这是一个长期的过程,毕竟有些可能会一时想不起来。



  • iOS后台实践


    一提到iOS后台机制,网上搜了下一大堆资料,众说纷纭,现结合苹果官方文档及自身实际对现阶段(iOS10)iOS后台技术做个梳理。APP应用状态分为激活、未激活、后台:



  • 让树莓派播报实时天气


    最近一段时间天气总是多变,经常需要查手机,于是希望树莓派能够实时播报天气,这样可以让家里的老人小孩了解到天气变化。因为原来有弄过一些功能,比如文字转语音、播放语音等,因此过程相对简单,具体如下



  • lighttpd支持HTTPS


    随着Apple、Google大力推广HTTPS,HTTPS将成为今后网站的主流,而前段时间正好看到Let’s Encrypt可以生成免费的SSL证书。因此尝试配置了下lighttpd,发现非常容易,大体步骤如下:



  • HTTPS协议的由来


    一提到HTTPS,第一印象就是安全,可是具体怎么安全,为什么安全,可能就说不上来,我不断查阅了资料,对HTTPS也有了一定的理解,现在用一个比较恰当的故事来表示HTTPS的由来.



  • netstat命令


    如果你需要获取一些网络信息,如路由表、端口、连接数,一个netstat足以;以前我经常使用专门的工具来做这些,比如route、lsof等.后面对netstat进行学习,发现非常好用.



  • TCP状态图


    在使用netstat发现有个State字段,于是脑补了下,发现水还是蛮深的,以前只了解三次握手、四次握手,并没有了解其中的状态,现在有幸能够接触,大家可以直接Google搜索TCP状态图,会出现经典的状态图,如下:



  • 集成DISQUS评论


    今天突然收到多说发来的邮件:多说即将关闭服务,原文如下



  • 命令行下高性能的JSON工具


    作为一个命令行控,希望一切都能够在命令行下完成,当然也包括JSON。JSON作为新时代的通信方式,深受API爱好者的欢迎,因此我也希望能够在命令行下操作JSON。要实现在命令行操作JSON(解码、编码),首先想到的当然就是利用python提供的json库写一个python脚本,于是动手,并且很快实现(python毕竟就是快),在普通pc上可谓流畅,后面迁移到树莓派上,发现慢的要命,即使是非常简单的json,也要解析个2s以上,果断放弃,于是继续征途…



  • KODI JSON-RPC解读


    大概一年前就开始关注KODI了,确实是个非常不错的开源项目,KODI提供很好的操作界面,但作为一个命令行控或者是没有显示屏的树莓派,我希望能够通过命令行对其进行控制,比如播放、暂停、静音等等. 于是去搜索了下,发现有个JSON-RPC,他是kODI官网推出的,方便其他开发者对接,到目前为止已经更新到v8,可以点击这里查看。这里将为大家详细介绍下它的用法。



  • 解决Github Page无法更新


    春节后,写了一篇文章提交到Github,发现pages没有更新,原先以为Github问题,等了2天,发现一直不更新,于是去查了下什么原因,原来Github在构建pages失败时,会发送邮件给你的邮箱(由于设置了另外一个邮件,因此一直没察觉),查看邮件(也可以进入repo设置界面查看),发现真的是构建失败,给出的提示是Your site is having problems building: Page build failed. For more information, see https://help.github.com/articles/troubleshooting-github-pages-builds/.于是点击相应连接,了解到Page build failed是构建失败,具体原因可以尝试在本地构建。Github给出了本地构建方法



  • 为何请求总是延时5s


    引言:本文描述了我对于”为何请求总是延时5s”问题的分析、解决过程.



  • 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版本管理工具,来解决这些不足,以促进项目的快速迭代、持续集成及代码质量改善。