新年快乐, Mac上简约至上的音乐电台DJ软件 LessDJ 现已开源
下载此软件 link
项目地址 https://github.com/xhan/LessDJ
平时工作会非常频繁的使用到命令行, 常见的场景是需要CD到Finder的当前路径操作, 或是打开命令行当前的路径. 后者通过 open . 即可打开. 而前者的操作就比较繁琐, 我需要先输入 cd[空格] ,然后将文件夹拖入到终端中.
在忍受了无数次拖拽后突然想到通过 AppleScript 来获取路径并传送到终端. 考虑过ruby,需要额外的gem支持. 考虑过用 objc 写个工具, 但随后发现个命令 osascript 能直接运行 AppleScript的代码 ,解脱!
tell application “Finder” to set myname to POSIX path of (target of window 1 as alias)
这段代码能将当前的Finder的路径输出, 可以使用 osascript -e ‘codes’ 来测试结果.
编辑 ~/.profile (没有就创建一个), 添加如下代码
function cdf() # cd to finder's front's window's path
{
path="`osascript -e 'tell application "Finder" to set myname to POSIX path of (target of window 1 as alias)' 2>/dev/null`"
if [ -n "$path" ]; then
echo "cd to $path"
cd "$path"
else
echo "no finder window finded"
fi
}然后source下此文件, 以后只要直接输入 cdf (cd-finder or cd-front 反正很好记) 即能切换到当前路径中.
周一参加了 iOS Tech Talk Bejing 有个session中演示了一招加快debug效率的方式, 觉得非常好. 在此也分享下我常用的技巧方便提升大家的工作效率
PS. 还有几个OSX系统通用的命令也很有效率
Xcode4 启用一体化IDE后, 调试程序有时候变得非常讨厌, 有同感的同学请继续往下看吧. (此内容学习至 ios tech talk ! )
找了下找到个比较挫的办法
tell application "Adium" go away with message "Busy" end tell
但是必须指定鸭子的状态, 最后翻了下文档自己写了段测试成功:
tell application "Adium" set the title of every status to "funny" set the status of every account whose status type is not offline to the first status whose title is "funny" # 也可以这么写 # repeat with state in every status # set title of state to "come on baby" # end repeat end tell
也许下版本 LessDJ 会多个同步歌曲信息到 鸭子状态的功能 ![]()
对了 LessDJ 上线一周下载2000多次了, 但最近状态低迷, 需要些时间来添加新功能.
是时候在这些照片后面加上乔帮主了。
附广告中的诗词全文
Here’s to the crazy ones.
The misfits.
The rebels.
The troublemakers.
The round pegs in the square holes.The ones who see things differently.
They’re not fond of rules.
And they have no respect for the status quo.You can quote them, disagree with them, glorify or vilify them.
About the only thing you can’t do is ignore them.
Because they change things.
They push the human race forward.And while some see them as the crazy ones,
We see genius.
Because the people who are crazy enough to think
they can change the world,
Are the ones who do.
向那些疯狂的家伙们致敬。
那些我行我素的家伙。
那些桀骜不驯的家伙。
那些惹事生非的家伙。
那些方孔中的圆桩。他们总是异想天开,
既不喜欢循规蹈矩,
也不尊重既成事实。你尽可以赞美他们,否定他们,引用他们,
质疑他们,颂扬抑或是诋毁他们。不过惟独不能漠视他们。
因为他们进行着变革。
他们推动着人类的进程。他们是别人眼里的疯子,
却是我们眼中的天才。因为,只有疯狂到认为
自己能够改变世界的人,
才能真正做到这一点
向乔帮主致敬,你是我永远的精神领袖。
你是享有如此成就却仍然燃烧到最后一刻的伟人。
很庆幸能亲眼见证你的年代。
很庆幸能亲手体验到你的产品对我们生活产生的巨大改变。
很庆幸留给我们巨大的财富,作为开发者我们能在你的世界里继续寻找未来,追逐自己的梦想。
Thanks Steve!
-send from my macbook air
NSString类已经中提供了现成的API:
/* Adds all percent escapes necessary to convert the receiver in to a legal URL string. Uses the given encoding to determine the correct percent escapes (returning nil if the given encoding cannot encode a particular character). See CFURLCreateStringByAddingPercentEscapes in CFURL.h for more complex transformations */ - (NSString *)stringByAddingPercentEscapesUsingEncoding:(NSStringEncoding)enc;
但是非常重要的一点苹果没注明:该API并不会将”& + -”等需要转义的字符编码。
如若将需要传递的某个param的内容通过该API来转义就可能坑爹了!!你内容中的&=不会被转义,服务端就会把原来的内容根据&和=拆开成一片一片了!!
解决方法是使用介绍中提到的CFURLCreateStringByAddingPercentEscapes
@implementation NSString (URLEscaped)
- (NSString *)URLEscaped {
CFStringRef escaped = CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)self, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]",
kCFStringEncodingUTF8);
NSString *out = [NSString stringWithString:(NSString *)escaped];
CFRelease(escaped);
return [[out copy] autorelease];
}
需要注意的是不能将这个函数用来 encode 整个URL,而是params的内容
—
写这篇文章是因为自己也掉了这个大坑,而且半年后才注意到。惨吖,不知道收集的10多w条数据中有多少是内容破坏的 – -
原谅4月份时候的大放厥词 “LessLyrics歌词秀后续计划”
今天写这文章时才发现居然又过去了5个月。这几个月里辞去了百度的工作,和朋友们开始了全新的创业之路,断断续续的也就选择性的忘记了这个升级计划。
当然还有2个原因,计划的0.8版本中无缝滚动动画效果依赖非常精确的iTunes播放时间,但是能取到最小的间隔是1秒,所以处理起一些细节会比较麻烦。但是呢从当时的预览视频可以看到其实当时完成度已经很高了,在我开心的向datou炫耀这个超级华丽无缝歌词滚动动画效果,结果datou研究了很久后,说了句。不好。
虽然不愿意承认这么帅气的效果被否决,但仔细想确实有很大的问题。无缝滚动效果会导致整个界面一直处于动画中,当前高亮播放中的歌词也一直在逐渐向上滚动,会导致使用者为了fo这行歌词一直让眼球向上扫描,接着目光聚集到下面的歌词,然后又继续向上扫。看久了就会觉得挺累。
昨天在我们的app内测qq群中有用户问要显示歌词的软件。我赶紧推荐了LessLyrics,结果人家居然说,居然说,说:“这个app早就知道了!!我想要iPhone版本的”
于是我爽到现在,于是决定必须立刻重新启动LessLyrics软件计划了!
新的0.8版本没增加太多的功能,因为迫不及待要发布新版本收集下反馈。这次完全重写了app的设计结构和渲染模块(现在看1年前刚学习mac开发的代码真的很戳),接下来的添加新功能就方便了。
不用期待,几小时内发布。
哈哈哈哈哈哈哈哈哈哈哈哈哈哈。
下载请移步至 项目页面
写iOS程序最讨厌的就是写个如下图的设置界面 或 登陆(注册)界面了

这完全是体力活,没头脑,还得在cell里加入一大堆控件。同时由于tableview的重用机制,导致必须每次都得对各个控件设置属性,防止出现内容错误。
虽然iOS5中增加了新的静态tableview类型,可等它普及估计至少要半年,还是早些其他解决方法为妙。
目前有两个开源的代码能完成类似的功能
原来是将苹果app外部的setting.bundle在程序内部显示用的开源库。现在也提供了快速搭建脚手架的功能
地址 https://github.com/futuretap/InAppSettingsKit
QuickDialog allows you to create HIG-compliant iOS forms for your apps without having to directly deal with UITableViews, delegates and data sources. Fast and efficient, you can create forms with multiple text fields, or with thousands of items with no sweat!
刚发现的,看起来比InAppSetting方便,未测试使用过~
地址 https://github.com/escoz/QuickDialog/
原来计划几个小时内加个IAP功能,结果一天过去了,还没搞定。无奈的刷机中。
搜索了下IAP是个超级大坑,各种奇怪的问题,而且苹果没一份完整的文档解释可能出现的情况。于是有人根据回馈总结了这么个表格
To save you the pain of exhaustively searching the web for the cause of your error, here is a checklist of everything I have stumbled across that can cause an invalid product ID. Make sure you can answer “Yes” to each of these questions:
SKProductRequest?If you answered “No” to any one of these questions, there’s your problem.
原文附录了一大堆可能提供解决方案的链接,如果你也有类似的问题可以尝试下。
当然stackoverflow也有大量关于IAP的离奇问题
--- 更新 ---
刷玩最新的 4.3.5后,然后什么都没改动就突然能用了。
这里有篇写的不错的教程,希望对用IAP的人有帮助