<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[bluesky_03的专栏]]></title><description><![CDATA[不断优化工作方式、工具、流程，不断重构代码，不断思考是否合理。]]></description><link>https://blog.youkuaiyun.com/bluesky_03</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; bluesky_03]]></copyright><item><title><![CDATA[iOS-compile_debug-crash_record]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/46793119</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/46793119</guid><author>bluesky_03</author><pubDate>Tue, 07 Jul 2015 18:59:58 +0800</pubDate><description><![CDATA[1. 对同一个变量，在不同线程，同时读写的问题。　崩溃定位：越界。
解决方案：
变量加锁


2.
*** -[__NSCFString dataUsingEncoding:allowLossyConversion:]: didn't convert all characters
推测是某些字符不能转换，但也不应该崩溃呀。
解决方案：允许有损转换：
NSData* retData]]></description><category></category></item><item><title><![CDATA[iOS-compile_debug-debug_skill]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/46792909</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/46792909</guid><author>bluesky_03</author><pubDate>Tue, 07 Jul 2015 18:40:10 +0800</pubDate><description><![CDATA[1. EXC_BAD_ACCESS
对于这种问题，
1、增加NSZombieEnabled和MallocStackLogging环境变量:菜单Product--》Edit Scheme...，在弹出的窗口上方选择自己的项目及模拟器，左侧选择"Run ***.app"(***是你的项目名称)，右侧选择Arguments选项卡，在Environment Variables中增加Name: NSZo]]></description><category></category></item><item><title><![CDATA[iOS-compile_debug-crash_gain]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/46792739</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/46792739</guid><author>bluesky_03</author><pubDate>Tue, 07 Jul 2015 18:18:53 +0800</pubDate><description><![CDATA[1。调试过程中出现。
2。App Store上的应用，崩溃记录从App Store下载。
3。任意设备运行应用时的崩溃，会记录在设备中，通知itunes同步到电脑（mac系统或windows系统）后，可以在相应的目录找到崩溃记录：
   • Mac OS X: ~/Library/Logs/CrashReporter/MobileDevice/
• Windows XP: C:\Docum]]></description><category></category></item><item><title><![CDATA[iOS-ui-UISlider]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/46792139</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/46792139</guid><author>bluesky_03</author><pubDate>Tue, 07 Jul 2015 17:32:41 +0800</pubDate><description><![CDATA[滚动条
滚动条分两部分：track and thumb
滚动条提供默认的track和thumb，可以使用自定义的图片。


使用两张图片来表示进度。
从最小值（一般是最左边）滑块之间，使用minimum track image图片来绘制，使用setMinimumTrackImage来设置。
从滑块到最大值（一般是最右边）之间，使用maximum track image图片来绘制，使用]]></description><category></category></item><item><title><![CDATA[iOS-ui-normal_ui_control]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/46792073</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/46792073</guid><author>bluesky_03</author><pubDate>Tue, 07 Jul 2015 17:27:00 +0800</pubDate><description><![CDATA[苹果的ui控件都是以UI开头，比如UISlider、UIView、UISwitch、UITextField。所以，在查找一个控件时，查找关键字的开始是UI。


很多控件都是UIControl，所有UIControl都是UIView。
静态控件，一般只用于显示信息，不交互，如label和imageView。
动态控件，如按钮等，一般用于交互。
被动控件，如文本控件，能交互，一般记录信息]]></description><category></category></item><item><title><![CDATA[iOS-ui-colorPicker]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/46792045</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/46792045</guid><author>bluesky_03</author><pubDate>Tue, 07 Jul 2015 17:25:59 +0800</pubDate><description><![CDATA[本质
一个展示信息并可选择信息的控件。
前提
使用BHColourPickerController。
结构
设计成一个UIViewController，跟常规的view的容器的使用没有差别。


推导发散
* BHColourPicker是实现了选择颜色的ui。
* BHBlackCircleView提供一个黑色的底图，在前景图完全透明时，即看到黑色。
* BHColourP]]></description><category></category></item><item><title><![CDATA[iOS-ui-application_run_based_view]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/46791995</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/46791995</guid><author>bluesky_03</author><pubDate>Tue, 07 Jul 2015 17:22:01 +0800</pubDate><description><![CDATA[本质
程序运行时的交互。
结构
设置为代理并实现特定协议。


// 新版xcode自动创建的工作，传入AppDelegate给sdk内核。
#import "AppDelegate.h"


int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain]]></description><category></category></item><item><title><![CDATA[software_base-command_tool-vim-ctags]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/45111955</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/45111955</guid><author>bluesky_03</author><pubDate>Sat, 18 Apr 2015 11:44:12 +0800</pubDate><description><![CDATA[--------------------------------------
跳转功能
几乎所有ide都有这个功能，比如跳到定义的地方。
需要安装ctags：
brew install ctags
（先安装brew：
sudo su
curl -L http://github.com/mxcl/homebrew/tarball/master | tar xz --strip 1 -C]]></description><category></category></item><item><title><![CDATA[software_base-command_tool-vim-find]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/45111945</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/45111945</guid><author>bluesky_03</author><pubDate>Sat, 18 Apr 2015 11:43:01 +0800</pubDate><description><![CDATA[查找文件（包括文件夹），几种方式：


建议多使用easygrep跟vimgrep，其次是cscope。


1. find
使用find命令，在当前目录查找并打开文件（夹），比如:find vim-find，相当:e vim-find，可以直接使用e来替代find。
这种查找是在当前path中查找，所以应该先设置好当前路径，比如使用netrw的情况下只需要按下c即可。操作：c -]]></description><category></category></item><item><title><![CDATA[software_base-command_tool-vim-netrw]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/45111933</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/45111933</guid><author>bluesky_03</author><pubDate>Sat, 18 Apr 2015 11:40:25 +0800</pubDate><description><![CDATA[vim可以配置成直接编译运行，也就是执行gcc之类的指令。如果要使用第三方的库文件，应该在编译指令中指定，比如：
exec "!g++ -Iffmpeg/include/ -Lffmpeg/lib/ % -o %


--------------------------------------
netrw.vim
这是vim7.x自带的文件管理插件，比较实用。
可以这样打开netrw]]></description><category></category></item><item><title><![CDATA[software_base-command_tool-find]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/45111919</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/45111919</guid><author>bluesky_03</author><pubDate>Sat, 18 Apr 2015 11:38:51 +0800</pubDate><description><![CDATA[find ./ -iname "bsdir"
find ./ -iname "*.plist" | xargs grep "hello.IosDemo"
find ./ -iname "gcctest.c" | xargs grep "FLLOW_ME" -n 
find ./ -iname "*.c" | xargs grep "HAVE_FIRST" -n
find . -type f]]></description><category></category></item><item><title><![CDATA[software_base-version_control-git-normal]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/45014437</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/45014437</guid><author>bluesky_03</author><pubDate>Sun, 12 Apr 2015 21:46:46 +0800</pubDate><description><![CDATA[#配置信息
git config --list  (git config -l)  
git remote set-url origin http://192.168.xx.yy:8888/git/projetname
#配置自己的名字跟email
git config --global user.name "hello"
git config --global user.email "]]></description><category></category></item><item><title><![CDATA[android-command_tool-busybox]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/45014021</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/45014021</guid><author>bluesky_03</author><pubDate>Sun, 12 Apr 2015 21:11:22 +0800</pubDate><description><![CDATA[adb shell后，不是所有定制的android都支持像grep、find、top、ps之类的命令。为了使用这些命令，使用busybox是个好的选择。
1. 在pc上下载busybox，选择对应手机平台。
2. adb push到卡上。
3. 在手机内操作，拷贝busybox到/system/xbin/内。
4. 更改执行权限，chmod 755 busybox。
5. 之后就可以使用]]></description><category></category></item><item><title><![CDATA[multi_media-ffmpeg-get_format]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/44709975</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/44709975</guid><author>bluesky_03</author><pubDate>Sat, 28 Mar 2015 23:43:02 +0800</pubDate><description><![CDATA[格式获取
本质上是通过文件的后缀、文件头部信息，在既定的格式集合中，找出最匹配的格式。
前提是先要有既定格式集合（av_format_register_all，并在编译的时候把demuxer打开），并且要有数据才能分析。
结构上：


推导发散：
1.在编译configure的时候，可以enable或disable特定的demuxer，以修改既定的格式集合。
2.既然是匹配，就存在]]></description><category></category></item><item><title><![CDATA[c++-tissue_habit-namespace]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/44708363</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/44708363</guid><author>bluesky_03</author><pubDate>Sat, 28 Mar 2015 22:57:21 +0800</pubDate><description><![CDATA[auto --自动推导类型
for (int v: vec)
本质上是语法规则，前提是c++11的支持。推导发散：
1.可以简化代码的编写。


namespace
本质上是标识符的组织方式。推导发散：
1.类似于java中的package，使得在不同的目录下可以有同样的命名文件（类）。
2.namespace可以作为一个模块，里面可以有不同的类，这些类不会跟别的namespac]]></description><category></category></item><item><title><![CDATA[software_base-event_drive-listener_msgloop]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/43852825</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/43852825</guid><author>bluesky_03</author><pubDate>Mon, 16 Feb 2015 16:54:20 +0800</pubDate><description><![CDATA[====基于监听的事件处理
本质上是一种设计模块，是一种交互方式。
前提是要创建监听对象，然后设置给事件源。
结构上，事件源有一个监听对象表，当事件发生时去查表，找出监听对象，然后根据协议，调用监听对象的方法。
比如在win32上的观察者模式的实现，自己写一个协议类，然后让事件源持有这个协议类的对象，在适当的时候事件源调用协议类对象的函数，并且要实现协议类的子类，并设置给事件源。
比如在]]></description><category></category></item><item><title><![CDATA[software_base-compile_debug-makefile]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/43852779</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/43852779</guid><author>bluesky_03</author><pubDate>Mon, 16 Feb 2015 16:49:43 +0800</pubDate><description><![CDATA[====make file
使用autoscan把目录中的所有源码文件生成一个configure.scan。
mv configure.scan configure.in
sublime configure.in #修改其中内容
aclocal  #create m4
autoconf #create configure using m4
创建Makefile.am，并加入内容。
a]]></description><category></category></item><item><title><![CDATA[android-logic_class-SharePreference]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/43852709</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/43852709</guid><author>bluesky_03</author><pubDate>Mon, 16 Feb 2015 16:37:03 +0800</pubDate><description><![CDATA[SharePreference
本质是io操作（或持久化），是android平台给的一个简约api，类似于ini之类的配置文件操作类。
前提是要先得到一个SharePreference或者是它的editor，可以是当前应用的也可以是别的应用的，这样就可以进一步读写。
结构上，操作的文件是key-value结构，提供的接口也是key-value的读或写的接口。
推导发散：
操作的是同一个文]]></description><category></category></item><item><title><![CDATA[android-tissue_habit-1]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/43852679</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/43852679</guid><author>bluesky_03</author><pubDate>Mon, 16 Feb 2015 16:34:31 +0800</pubDate><description><![CDATA[界面都用xml来组织。
推导发散：
多个xml的出现。
在代码中要加载xml。
所有控件都有id。
res/layout/activity_main.xml


-----------------------------------------


eclipse中项目的树结构就是真实的目录结构。
推导发散：
对树结构的操作的就是对真实目录的操作。
gen里面放自动生成]]></description><category></category></item><item><title><![CDATA[android-command_tool-adb]]></title><link>https://blog.youkuaiyun.com/bluesky_03/article/details/43852617</link><guid>https://blog.youkuaiyun.com/bluesky_03/article/details/43852617</guid><author>bluesky_03</author><pubDate>Mon, 16 Feb 2015 16:23:59 +0800</pubDate><description><![CDATA[android --打开android sdk manager


android list or android list avd --列出所有avd
android avd --打开设备管理器
emulator ** --模拟器相关
emulator -avd d1 --启动名为d1的模拟器


ddms --打开调试器


adb devices --所有设备
ad]]></description><category></category></item></channel></rss>