<![CDATA[Luosky's Playground]]> 2016-03-12T17:50:02+08:00 http://luosky.com/ Octopress <![CDATA[My Reading Flow]]> 2016-02-29T22:22:00+08:00 http://luosky.com/2016/02/29/my-reading-flow [TOC]

主要用于记录和分享我当前的阅读流程、用到的工具、自动化的方案以及弃用的方案。会随时根据变化而更新,也欢迎大家推荐好用的工具和服务。主要适用于 Mac 和 iPhone 用户。

阅读工具

主要用 Reeder 和 Instapaper 来进行阅读。 Reeder Mac 和 iOS 客户端都有,体验很一致。 Instapaper 就只有 iOS 客户端,虽然 Reeder 现在也支持 Instapaper 帐号了,但并不能同时自动缓存 Rss 和 Instapaper 两个帐号。Mac 上我还是用 ReadKit 来看 Instapaper。

阅读源

readingSources

(这里偷懒用 markdown 的顺序图画了下)

```sequence
Blog->Reeder: via Inoreader
Reeder->Instapaper:
PinboardNetwork->Instapaper: 根据 Pinboard Network 的 RSS 利用 IFTTT 存到 Instapaper 上
Twitter->Instapaper: use Tweetbot's Share to Instapaper
微信文章->Instapaper: 在 Safari 里打开后 Share to Instapaper
```

知识库管理

  • Evernote
    • 将有价值的文章全文保存至 Bookmark 笔记本中,利用插件可整合到 google 搜索结果页中。
  • fetching.io
    • 用的是其 native 客户端,可将浏览器的浏览历史全文保存在本地,进行全文搜索。也有插件可以整合到 google 搜索结果页中。

Highlight

  • Genius + IFTTT 自动将 highlight 的内容同步更新到 Evernote 上
    • 这是目前正在用的方案,配合 Mac 上 Chrome 的插件十分方便,不用改变原有的阅读流程。
    • 缺点是手机端的体验还不是很好,可考虑利用 Instapaper 同步过去
  • instapaper 需要付月费
  • 利用 kindle 支持有限
  • Clippings.io 月费2$

好文分享流程

目的:将觉得有价值的文章自动化分享到 Pinboard 并同时全文保存到 Evernote 流程:存到 Instapaper,利用它的Like 自动分享到Pinboard 和 Evernote(需要 evernote plus)

可选方案:

  • IFTTT 连接 evernote 的 create linked post
    • 缺点是没有全文
  • Evernote 的 email post
    • 缺点是需要 evernote plus 月费,每月 18 rmb

⚓ Permalink

]]>
<![CDATA[KeyRemap4MacBook]]> 2013-08-13T19:21:00+08:00 http://luosky.com/2013/08/13/keyremap4macbook KeyRemap4MacBook 是个可以改变Mac按键映射的工具,用到最多的就是将Caps Lock键改成Hyper键。也强烈建议开发人员把 Caps Lock 改成 Hyper(Shift + Control + Command + Option),这样你就可以有一整套一般不会被程序占用的快捷键可供使用了。

今天看了下他的具体语法,发现还可以有别的玩法:

一键切换到指定的输入法

切换中英文输入法我一直觉得是浪费时间的一件事情,每次都要先试错法判断下当前处于什么输入法。特别是如果你有时候还会用到中文输入法的英文输入的话,这时候你要切换到中文的话恐怕得将视线移到标题栏里确认当前是处于英文输入法还是处于中文输入法的英文输入,然后才好切换到中文输入(当然避免这种情况最好的办法还是把中文输入法的英文输入禁掉)。

用KeyRemap4MacBook,你可以为你的每个输入法都设置一个快捷键。这里我用Cmd + Space来切换到英文输入法,用Shift + Cmd + Space来切换到中文输入法。我的中文输入法是百度拼音,用别的输入法的同学可以用KeyRemap4MacBook的Event Viewer来查看自己所用的输入法的input source id,然后将下面的inputsourceid_equal值换成对应的 source id 就可以了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    <item>
      <name>fast input source switch</name>
      <appendix>Change input source to US by command + space</appendix>
      <appendix>Change input source to Baidu by command + alt + space</appendix>
      <identifier>luosky.change_input_source_to_us</identifier>
      <vkchangeinputsourcedef>
          <name>KeyCode::VK_CHANGE_INPUTSOURCE_BAIDU</name>
          <inputsourceid_equal>com.baidu.inputmethod.BaiduIM.pinyin</inputsourceid_equal>
      </vkchangeinputsourcedef>
      <autogen>
          __KeyToKey__
          KeyCode::SPACE, ModifierFlag::COMMAND_L | ModifierFlag::NONE,
          KeyCode::VK_CHANGE_INPUTSOURCE_US
      </autogen>
      <autogen>
          __KeyToKey__
          KeyCode::SPACE, ModifierFlag::COMMAND_L | ModifierFlag::OPTION_L | ModifierFlag::NONE,
          KeyCode::VK_CHANGE_INPUTSOURCE_BAIDU
      </autogen>
  </item>

单独设置 HHKB 以贴合普通键盘的习惯

最近入了神器键盘 HHKB,由于它天生就把Caps Lock去掉了,重度依赖的Hyper键一下子没了很不习惯,于是我做了以下修改,以便在保留 HHKB 键位优点的基础上,尽可能的贴合普通键盘的习惯(这些设置都只在 HHKB 上才生效):

  • 长按Tab => Hyper
  • 右边的Option => Hyper,搭配之前设置的Hyper + J/K/H/L 输出 下/上/左/右,这样只要用手掌按住右Option就可以直接单手用 J/K/H/L这些 vi 键来做方向键了。
  • 左边的Shift + Delete => Forward Delete
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
    <item> 
      <name>HHKB adopt Hyper settings</name>
      <identifier>luosky.hhkb_hyper</identifier>
      <appendix>(Option_R / TAB to Hyper (ctrl+shift+cmd+opt), press only once, send escape)</appendix>

      <devicevendordef>
          <vendorname>TOPRE</vendorname>
          <vendorid>0x0853</vendorid>
      </devicevendordef>

      <deviceproductdef>
          <productname>HHKB_PRO2_TYPES</productname>
          <productid>0x0100</productid>
      </deviceproductdef>
      <device_only>DeviceVendor::TOPRE, DeviceProduct::HHKB_PRO2_TYPES</device_only>
      <autogen>
          --KeyOverlaidModifier--
          KeyCode::TAB,
          KeyCode::COMMAND_L,
          ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L,
          KeyCode::TAB
      </autogen>
      <autogen>
          --KeyOverlaidModifier--
          KeyCode::OPTION_R,
          KeyCode::COMMAND_L,
          ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L,
          KeyCode::ESCAPE
      </autogen>
      <autogen>
          --KeyToKey--
          KeyCode::DELETE, ModifierFlag::SHIFT_L | ModifierFlag::NONE,
          KeyCode::FORWARD_DELETE
      </autogen>
  </item>

update: HHKB 的 Fn 键 不能被 KeyRemap4MacBook 捕获,所以不支持 Fn 相关的修改。只有 Fn 键在 EventView 里能看到的键盘,才可以修改。

一键启动/切换程序,在该程序里按的话则隐藏该程序的窗口

经常有些应用,比如 QQ 或者邮件,你只需要很快的瞄一眼, 就可以切换回原来正在进行的工作中。用 Command + Tab切换的话得一个个切换过去实在太慢。如果可以为这个应用指定一个快捷键,按一下就切换过去,再按一下,切换回之前的应用,那可以节约不少时间。

这个用 KeyRemap4MacBook 也能做到,实现的思路是当当前应用不是 QQ 时,这个快捷键打开 QQ,当当前应用是 QQ 时,这个快捷键隐藏当前应用的所有窗口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

  <vkopenurldef>
    <name>KeyCode::VK_OPEN_URL_APP_QQ</name>
    <url>file:///Applications/QQ.app</url>
  </vkopenurldef>
  <appdef>
    <appname>APP_QQ</appname>
    <equal>com.tencent.qq</equal>
  </appdef>

  <item>
    <name>Change hyper + q to open QQ</name>
    <identifier>luosky.hyper_q_qq</identifier>
    <not>APP_QQ</not>
    <autogen>
      __KeyToKey__
      KeyCode::Q, ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L | ModifierFlag::COMMAND_L,
      KeyCode::VK_OPEN_URL_APP_QQ
    </autogen>
  </item>
  <item>
    <name>Change hyper + q to hide QQ in QQ</name>
    <identifier>luosky.hyper_q_hide_qq</identifier>
    <only>APP_QQ</only>
    <autogen>
      __KeyToKey__
      KeyCode::Q, ModifierFlag::OPTION_L | ModifierFlag::SHIFT_L | ModifierFlag::CONTROL_L | ModifierFlag::COMMAND_L,
      KeyCode::H, ModifierFlag::COMMAND_L
    </autogen>
  </item>

updated:后来想想,这个功能用 betterTouchTool 来实现更方便些,这里就当留个备份吧

其他

除了上面几个以外我还用到了下面这些:

  • Hyper + Space 输出 Enter。 适合需要按 Enter而右手在鼠标上时用,最常见的场景就是跳出对话框让你选确定还是取消,而你想直接按Enter键选择确定的时候。
  • Shift_L/R + Space 输出 ( / )
  • 自带的
    • 单击 Option_L 进入浏览模式
    • vi mode中的Command +h/j/k/lFn+h/j/k/l 输出 上下左右 ,和Command + f/b输出 PageDown/PageUp
    • Command_L + Command_R 进入 complete vi mode

完整的 private.xml

⚓ Permalink

]]>
<![CDATA[高效程序员的45个习惯:敏捷开发修炼之道 读书笔记]]> 2012-12-10T00:47:00+08:00 http://luosky.com/2012/12/10/gao-xiao-cheng-xu-yuan-de-45du-shu-bi-ji 暂时没有能比较方便处理多看导出的书摘的markdown工具, 先放个Evernote的链接, 回头再导进octopress.

⚓ Permalink

]]>
<![CDATA[Be Careful with NSString's Hash]]> 2012-12-08T11:24:00+08:00 http://luosky.com/2012/12/08/be-careful-with-nsstring-hash My recent iOS project, Aimeiwei, is an image-oriented app focused on food. We use lots of images, and one picture user updated can have two different aspect ratios, one is the original square food picture, and one is a cropped rectangle picutre that can possiblly be used as the restaurant’s header image. I utilized EGOImageLoading to cache and display images from our remote server. But I came across a strange problem: Sometimes the rectangle image view displays the square one instead, dispite the fact that the urls of the two images are different and the url of the rectangle one points to the correct rectangle image.

After a long time digging, I found that the problem rooted in the hash method of NSString. These two url:

http://aizheke-img-dev.b0.upaiyun.com/imagefs/amw/food_story/50b85c545c168b2e6000003f/image/banner_46664ae45ffaff8ad1ab1cd55d38b6ac.jpg 

and

http://aizheke-img-dev.b0.upaiyun.com/imagefs/amw/food_story/50b85c545c168b2e6000003f/image/medium_46664ae45ffaff8ad1ab1cd55d38b6ac.jpg

Their hash is identical! (And EGOImageLoading uses the hash result as a key to cache the image. So if the square image had been cached, the rectangle view used the cached square image to display.)

Then I found this article back in 2004, it says:

NSString/CFString/NSURL

The hash is a convolution of the first and last eight bytes plus the length of the string basically the byte values are shifted and added to the string length.

I do know that the hash result is not guaranteed to be unique, but I don’t expect a “weak unique” like these. The implementation of hash must have been improved after these years because the data provided in the article no longer give the same result. But as of now 2012, on iOS 6 SDK, those two urls in my project still yield the same hash.

The fix is simple, just use MD5 as the key. Now I use this fork instead. If someday I had time, I may give SDWebImage a try.

⚓ Permalink

]]>
<![CDATA[使用TestFlight 安装测试版iOS应用(面向测试人员)]]> 2012-11-30T11:11:00+08:00 http://luosky.com/2012/11/30/use-testflight-to-beta-test-ios-app 之前使用的AirTest有不稳定时常装不上和一定要在内网才能安装等缺点,打算换用TestFlight来进行iOS测试版的安装部署.

TestFlight主要有以下几个好处:

  1. 随时随地下载发布的测试版应用
  2. 新版本通知. 这样以后有新版本发布大家马上就能安装测试,十分方便.
  3. 新版本可带有release note, 测试人员看了可以有针对性的进行测试

安装步骤:

  1. 到开发人员提供的邀请网址里注册TestFlight帐号. 完成这步你的帐号就会加到组里.
  2. 注册完之后会收到一封注册右键,在你的iOS设备上 点击邮件里的登录按钮 (iOS设备指iPhone,iPod touch或iPad)
  3. 按照登录后的网页提示安装证书.完成这步会将你的设备和帐号对应起来.
  4. 若你是在safari中打开邮件里的链接的话,此时你可以将这个网页添加到主屏幕. 这会在你的iOS桌面上生成一个TestFlight的应用,以后要下载新版本的应用可以直接打开这个应用下载,不用再输入地址了.
  5. 等开发人员为你的设备开通权限后,即可在这台设备上下载测试app了.

⚓ Permalink

]]>
<![CDATA[My BetterTouchTool Config]]> 2012-08-06T12:14:00+08:00 http://luosky.com/2012/08/06/my-bettertouchtool-config BetterTouchTool Gestures:

Keyboard Shortcuts:

image

Magic Mouse:

image

Magic Trackpad:

image

You can download my config here and import to BetterTouchTool directly.

⚓ Permalink

]]>
<![CDATA[我的 Mac App 列表]]> 2012-08-02T17:42:00+08:00 http://luosky.com/2012/08/02/mac-app-list 以下是我觉得好用的app,如果没有链接的,一般都可以在Mac的App Store里找到. 划掉的一般都是免费的,曾经用过一段时间,后来换成了收费的。

开发

  • CodeRunner
  • Dash
    • 文档查看和代码 snippet 管理
  • TextExpender
    • snippet 管理,比 Dash 好的地方是 placeholder 可以下拉选择,另外支持 script
  • Tower SourceTree
    • Git 客户端
  • Charles SpeedLimit
    • 查看网络请求及模拟弱网络环境
  • Paw

命令行增强:

  • Oh my zsh
    • 各种附加功能,我主要用到这些
  • autojump
    • 快速进行目录跳转
  • Go2Shell
    • 从 Finder 里直接跳到当前目录的控制台
  • resty
    • curl 的替代品

笔记

  • Evernote
  • MWeb Mou
    • 好用的 markdown 编辑器,目前写 blog 也主要用它来写
  • nvAlt
    • evernote的替代品,支持markdown,支持wiki式的笔记链接,更适合用来自己写笔记,evernote则适合当做知识库,用来存别人写的东西.
  • Clearly
    • Evernote的插件,highlight功能非常不错,很适合边看文章边划重点.也是从遥远的年代就希望evernote加上却一直没加上的功能.如果还能加上类似pdf的笔记功能,可以添加一些自己的文字上去就更完美了.
  • Sublime Text 2
    • 神器不解释

效率

  • Alfred spotlight替代品.神器!
  • Paste 剪贴板管理工具
  • Witch 窗口切换应用,我主要用来切换当前应用的多个窗口.和系统自带的区别是可以显示一个窗口的列表供你选择,而不是直接一个一个切换.
  • slate 窗口布局管理, 可以一键将各个应用的窗口调整到预设的大小.支持多显示器.我的配置
  • BetterTouchTool 触摸板/键盘/鼠标增强, 支持很多手势和自定义功能. 我的配置
  • Hazel 根据自定义的规则自动对文件进行分类
  • Bartender 隐藏/合并menubar上的图标
  • DejaMenu 随时随地呼出菜单栏  改为给菜单栏增加 cmd+shift+? 的全局快捷键来代替
  • RescueTime 记录时间
  • Dropbox
  • Mackup 备份各个程序的配置文件到Dropbox

  • PCKeyboardHack 可将caps lock按钮改成别的按键. 这个没用的按键占据了这么好的键盘位不好好利用实在可惜.建议配合下面的KeyRemap4MacBook使用.

  • KeyRemap4MacBook 可自定义按键的映射,将你的键盘 hack 成完全适合你自己习惯的样子。我的配置在这里

  • DaisyDisk [Disk Inventory X] 大文件清理

  • CleanMyMac 3 [GrandPerspective] 磁盘清理
  • Second Bar 在多个显示器里都显示menu bar
  • XtraFinder  Finder强化,支持 tab,显示路径等
  • Afloat 让某个窗口”总是在前”
  • DTerm 在Finder里command + shift + enter 快速执行命令行
  • 设计:

  • SparkBox
    • 截图管理
  • Xee
    • 看图软件
  • paparazzi
    • 网页截屏

阅读

  • Reeder
  • Instapaper
  • PDF Expert
  • Calibre
    • 电子书格式转换

Music:

  • 网易云音乐
  • Simplify
    • 统一控制音乐播放器,兼容 iTunes, Spotify, Rdio, Pandora等等
  • MusicSeekerX
    • 高音质音乐下载
  • Soulseek
    • 音乐下载

更新歌词及ID3 tag等:

⚓ Permalink

]]>
<![CDATA[Create Custom Rss Feed for Octopress]]> 2012-07-24T22:27:00+08:00 http://luosky.com/2012/07/24/create-custom-rss-feed-for-octopress Octopress offers an atom.xml feed only. But many other blog providers’ default feed is different from this, such as /feed on wordpress. So how to move your existing blog subscribers smoothly from your old blog to Octopress?

Rss feed address can be change by modifying the subscribe_rss value in _config.yml. But this only change the url for the feed link on your page. It won’t generate a feed there. Then how do you generate a feed there?

If you have ssh access to your blog server:

just ssh to the server and do $ ln -s atom.xml $your_rss_file, then you are done.

If you don’t have ssh access:

If you host your Octopress on heroku or github, then you have no ssh access to the server.

For heroku user

You can redirect the request. Details can be found in the redirect part of this article, and code can be found here.

For github user

Simple method:

You can simply copy the atom.xml in your source(not public) directory to any location in the source directory or its sub-directory.

But this method has a little disadvantage, that due to your have two(or more) same feed source files now, Octopress will generate the rss feed more than one time. But that would not be a problem.

Better method:

To eliminate this disadvantage, I added a rake task to copy the generated atom.xml to other feed files in the Rakefile as follow:

1
2
3
4
5
6
7
8
9
# Feed files other than atom.xml that needed to be compatible with previous blog
feed_files = ["feed"]

desc "copy atom.xml to feed_files"
task :copyfeeds do
  feed_files.each do |filename|
    cp("#{public_dir}/atom.xml","#{public_dir}/#{filename}")
  end
end

And invoke the task before push to github by modify the deploy task in Rakefile:

1
2
3
4
5
6
desc "Default deploy task"
task :deploy do
  Rake::Task[:copydot].invoke(source_dir, public_dir)
  Rake::Task[:copyfeeds].invoke
  Rake::Task["#{deploy_default}"].execute
end

A little problem and how to work around:

Methods above serve well if the feed you want is somehing like rss.xml. But there is still a little problem if your old feed url is like /feed.

Since in github pages, the content-type of a file is determinate by the file extension. The response content-type of the request to /feed is application/octet-stream rather than text/xml as a normal rss feed. When user clicked on the /feed clink, it eventual downloads the feed file other than displaying the feed content or bringing up the Rss subscribe interface. And even if you add the address to google reader manually , although it can read the content first time you import this feed, you can’t get further updates.

What is worse is that github has no support for .htaccess or other ways to redirect /feed to atom.xml.

After searching a long time and no solution was found, I almost gave up. But suddenly I came up with an idea: how about look /feed as a directory rather than a file? Then the /feed request eventually redirect to /feed/index.html, and the content-type can be specified in the html.

I tried that. And it DID WORK!

So the solution is :

  • copy your source/atom.xml to source/feed/index.xml if you use the simple method

or

  • set the feed_files = [“feed/index.html”] if you use the better method

⚓ Permalink

]]>
<![CDATA[Migrated to Octopress]]> 2012-07-22T14:46:00+08:00 http://luosky.com/2012/07/22/migrated-to-octopress 将 blog 从 wordpress 迁移到 Octopress 上了,主要是因为其支持 markdown 。用 markdown 写文章真是太适合理工科的宅男了。

安装完后用 rake new_post['Title of The Post'] 来新建一篇文章。编辑完后用 rake generate 生成 html, 然后 rake deploy 即可将文章发布了。

原来的blog改到photo.luosky.com上,将主要用来放日常用手机拍的照片。

一些迁移时碰到的问题记录如下:

Some Tips:

  • pow来本地运行很方便
  • rake setup_github_pages时出现undefined method `[]’ for nil:NilClass
    • 一般是因为repository地址你填的是http的地址
    • 填ssh的那个形式如 git@github.com:your_username/your_username.github.com.git 的地址即可
  • 带本地图片的markdown上传
    1. 在本地建一个/images 的soft link指向到{octopress}/source/images目录
    2. 将图片放在/images目录下,在markdown文件中以/image/xxx.jpg引用
  • When you are filling the values in _config.yml. A space need to be added between the value and the colon after the key.
  • add category list

⚓ Permalink

]]>
<![CDATA[切换到Oh My Zsh]]> 2012-07-20T10:39:00+08:00 http://luosky.com/2012/07/20/switch-to-oh-my-zsh Oh My Zsh 的优点
  • 各种补全
    • 目录补全可以只输入目录的中间部分进行补全
    • 命令可以补全参数,并且可以显示参数对应的说明
  • 各种主题
  • 目录切换:
    • d : 显示最近使用过的几个目录,按1-9可以直接切换过去
    • 1-9 : 切换至最近使用过的前n个目录
    • .. 等于 cd ..
    • … 等于 cd ../..
    • mcd xxx 等于 mkdir xxx & cd xxx
    • 使用~xxx快捷目录来通过 cd ~xxx 甚至是 ~xxx 快速进入对应的目录
      • 在.zshrc里加上 hash -d xxx=”/Users/Luosky/Documents/xxx”
  • 各种插件:
    • extract 直接extract filename ,支持各种tar.gz, bz2, 7z等各种压缩格式
    • terminalapp 让OS X Lion下的Terminal 启动时打开上次的目录
    • osx
      • pfd 打印finder的当前路径
      • cdf cd到finder的当前路径
      • pushdf pushd 到finder的当前路径

一些问题:

  • 换用zsh后出现ssh到服务器上按tab出现 warning: setlocale: LC_CTYPE: cannot change locale (zh_CN.UTF-8)的问题
    • 解决: 在~.zshrc内加上 export LANG=en_US.UTF-8 export LC_ALL=en_US.UTF-8

⚓ Permalink

]]>
<![CDATA[PassKit (PassBook api) 学习笔记]]> 2012-06-21T21:40:00+08:00 http://luosky.com/2012/06/21/passkit-passbook-api-study-notes PassKit 学习笔记

PassBook里存放的是一个个电子凭证(pass),这些pass可以是兑换券,机票,门票等,这些pass可以通过各种第三方app,网站,或者email进行安装. PassBook本身不提供这些pass,只是提供了一个查看这些pass,以及接受pass更新的平台. PassKit则是这个平台开放的API.

pass的安装方式

  1. 通过网站下载 (MIME type: application/vnd-com.apple.pkpass)
  2. 通过email下载
  3. 通过提供pass的app安装

pass type identifier

必须在developer.apple.com里注册自己pass type identifier

pass的类型

  • boardingPass
  • coupon
  • eventTicket
  • storeCard 余额卡,必须指定余额值
  • generic

pass的提醒方式

预先指定的提醒:

  • 时间 –当时间接近时可在锁屏界面提醒用户相关信息
  • 地点 –当用户接近指定地点时提醒用户相关信息(指定地点最多只能指定10个)

预先指定的提醒在发布到用户的PassBook后仍可以随时被修改.

实时提醒:

  • 当pass信息需要更改时,可通过推送通知用户,界面上可展示相应的修改信息. (除了pass的类型和序列号,其他字段都可以随时修改)

pass的样式

颜色:

image

样式:

store card & coupon:

image

event :

image

pass的字段

image

  • serialNumber用来标识pass,同样的pass type identifier 下不能有两个pass的serialNumber相同
  • 只有发布时指定了验证地址和验证token的pass才能在发布后进行修改(这个token只是用来验证pass本身可以接收更新,和设备是没有关系的)
  • webServiceURL token的验证地址,指向用户自己实现的rest服务器,必须实现更新pass所需的各种接口,必须是https…
  • relevantDate 提醒用户的时间. 具体显示提醒的时间范围由pass类型决定
  • locations 提醒用户的地址.范围大小由pass类型决定
  • 显示App Store item : "associatedStoreIdentifiers" : [ 375380948 ]

    注意点

  • iPad上没有Passbook

  • 导出P12时不用选中私钥
  • 签名和打包pass可用wwdc示例代码提供的签名工具
  • BARCODE不支持中文(应该跟用的编码有关)
  • 日期格式: 2012-06-20T17:30+08:00
  • 使用相对时间的格式 “isRelative” : true
  • coupon的primaryFields很大,中文只能放4个字()
  • PKPassLibrary不是singleton,注册PKPassLibraryDidChangeNotification通知时,通知是针对某个具体的library对象的,所以需将你创建的library传过去.
1
2
3
4
    [noteCenter addObserver:self
                   selector:@selector(passLibraryDidChange)
                       name:PKPassLibraryDidChangeNotification
                     object:self.library];

附上自己写的 pass工程 (你可能需要换成自己开发者账号签名的pass才能在pass列表中查看已安装的pass,添加pass的话则不需要)

⚓ Permalink

]]>
<![CDATA[家庭无线音乐方案]]> 2012-05-10T00:36:00+08:00 http://luosky.com/2012/05/10/wireless-music-solution AirPlay
  • 优点:
    • 有了苹果的推广,前景有不小的想象空间
    • 支持视频
  • 缺点:
    • 需要一个master设备来输出多媒体数据,一个slave设备来展现多媒体
    • 目前只能一对一
  • 入门体验:
    • 正道:买个Airport Express,既可以用作无线路由器,插在离音箱近的地方用音频线连接音响即可无线播放音乐了
    • 歪道:使用破解了AirPlay密钥的开源方案,如Shairport,将电脑变成AirPlay的音频输出端.

Sonos

  • 优点:支持多个输出点,如果你需要多个房间无线同步播放音乐,Sonos适合你
  • 缺点:
    • 相比AirPlay来讲,前景没那么乐观
    • 入门价格较贵

⚓ Permalink

]]>
<![CDATA[程序员的福音]]> 2012-03-23T00:36:00+08:00 http://luosky.com/2012/03/23/programmer-saver

以后不知道取什么名字的时候就来这网站捞一个

btw,图中这个类名碉堡了

⚓ Permalink

]]>
<![CDATA[第一次处理Github的Pull Request]]> 2012-03-23T00:36:00+08:00 http://luosky.com/2012/03/23/first-time-handle-pull-request-on-github

第一次处理Github的Pull Request,还是CocoaPods这样的项目,要点Merge pull request时不禁有点手抖…

算是对CocoaPods做了点小贡献.

============== 我是分隔线 ==============

CocoaPods很活跃, 我的pull request提交没多久, 管理员就提了修改建议,并且把我加入到了成员组里,同时还有另外一个人也提了别的建议.

关注了这个框架挺久了, 因为改动太大,之前一直不敢用. 现在算是已经挺成熟的了,这几天正在把爱折客换成用它来管理用到的组件.强烈推荐iOS和 Mac开发者也试试,要升级你用到的组件的版本真的非常方便.

⚓ Permalink

]]>
<![CDATA[iOS模拟器居然还可以监测出来Mac上正在facetime,做得也太细致了]]> 2012-02-27T00:36:00+08:00 http://luosky.com/2012/02/27/amazing-ios-simulator

⚓ Permalink

]]>
<![CDATA[2011年小结]]> 2012-01-02T00:36:00+08:00 http://luosky.com/2012/01/02/my-2011 Blog

发表了256篇blog (btw,这个数字真不错)
link

电影

2011 年,看了 58 部电影,打出 8.4 的平均分。电影关键词是: 美剧 电视剧 文艺 暴力 成长 奇幻 浪漫 搞笑 友情 政

link

音乐

我在虾米的这些年,累计听歌10285首!
link

Google Reader

Since June 22, 2006 you have read a total of 101,836 articles.

电脑使用情况(从下半年开始使用RescueTime统计)

Overview

image

All Activities

image

Finder居然花了33h 42m,位居第七,实在超乎想象.看来是应该找个替代品了. 不知道Alfred的Power Pack能否完全替代Finder?

Activities by week

image

去过的地方

image

已行驶 7,537 公里,距月球还有 355,566 多公里

在上海的签到点

image

在厦门的签到点

image

link

⚓ Permalink

]]>
<![CDATA[没走的路]]> 2011-11-02T00:36:00+08:00 http://luosky.com/2011/11/02/road-not-taken Posted on 2011-11-02 by luosky

小时候觉得,一个人的一生,如果不能使人类的科技或文明前进哪怕一小步,那人生还有什么意义。

当初的一小步,现在想想,却是那么的遥不可及。
就连儿时梦想的成为一名天文学家,宇航员或考古学家,现在想想,也已经是风马牛不相及的事了。

人生有很多的岔路,选择了一个,就没法选另一个。却总是时不时不经意地想起那些没走的路,以及曾经决心要做的而最终却没做成的事,心怀愧疚。

写到这里突然想起多年前曾经摘抄过的诗,竟然还静静地躺在原来的博客里。多年后重读,有了更深的感悟。

http://my.opera.com/Luosky/blog/show.dml/389440

The Road Not Taken

Saturday, August 5, 2006 2:54:09 AM
life, poetry

The Road Not Taken
-Robert Frost

Two roads diverged in a yellow wood,
And sorry I could not travel both
And be one traveler, long I stood
And looked down one as far as I could
To where it bent in the undergrowth;

Then took the other, as just as fair,
And having perhaps the better claim
Because it was grassy and wanted wear;
Though as for that, the passing there
Had worn them really about the same,

And both that morning equally lay
In leaves no step had trodden black.
Oh, I marked the first for another day!
Yet knowing how way leads on to way
I doubted if I should ever come back.

I shall be telling this with a sigh
Somewhere ages and ages hence:
Two roads diverged in a wood, and I,
I took the one less traveled by,
And that has made all the difference.

黄叶林中分出两条小路,
可惜我一人不能同时涉足,
我在路口伫立良久,
向着其中一条翘首极目,
直到它消失在丛林深处。

但我选择了另一条路,
芳草待踏,分外幽寂,
同样显得诱人,美丽,
显然这两条路是如此相似,
都几乎没有旅人的足迹。

那天清晨落叶满地,
两条都是未经脚步踩踏的小径,
呵,留下一条路等下次再走,
但我知道路径蜿蜒没有尽头,
恐怕一走就再难回首。

也许多少年后在某地,
我回首往事轻声叹息,
两条道路分散在树林里
而我选择的那条更少人迹,
从此决定了我人生的迥异

20111102-234423.jpg

⚓ Permalink

]]>
<![CDATA[挥别乔布斯]]> 2011-10-06T00:36:00+08:00 http://luosky.com/2011/10/06/fareware-steve-jobs Posted on 2011-10-06 by luosky

今天插着耳机一个人走了大半个厦门
我想还是应该写篇blog悼念一下

作为一个iOS开发者,我的工作可以说是拜Steve Jobs所赐

他让我”follow your heart”

他让我明白交互设计的重要性

他让我看到科学和艺术能够结合得如此紧密

也是他让我能够在生活中享受着那些便利

我向来比较理智,我也会说苹果这样那样的不好,我不会说自己是果粉

他辞去CEO的那天,我就知道这一天应该不远了

但当这一天真的来临的时候,心里还是不免难过

昨天iPhone 4S 的S对我来说代表的还是”Same” as iphone 4

今天这个S恐怕要代表Steve了

我想我会去买一台你的遗作来收藏

以此感谢你带给我们的一切

Rest in peace, Steve Jobs

⚓ Permalink

]]>
<![CDATA[First Week on Xcode ]]> 2011-04-03T00:36:00+08:00 http://luosky.com/2011/04/03/first-week-on-xcode-4 经历了上周的one week on rails,这周又切换回iOS了.自从更新了Xcode 4之后,就跑去做支付宝连接和学习Ruby on Rails去了,一直没有碰Xcode.

Xcode 4相比Xcode 3变化好大,这一周花了N多时间在熟悉和折腾Xcode 4上.

Xcode 4亮点很多,比如Interface Builder现在和Xcode整合在一起了,创建outlet只要拖动到代码里就搞定了,非常方便,让我不禁又重回xib的怀抱.还有其他不少改进.

相关的文章已经很多了.这里就仅记录下碰到的问题,方便后来者:

无法自动补全 / 没有语法高亮 的问题:

在build settings里将precompile prefix header设为NO,删掉Derived Data目录(在Organizer里可以找到),等index完之后再看看

打开static library时出现 “workspace integrity”错误:

这一般是在打开了引用这个static library的项目的情况下打开这个static library项目导致的.关掉那个项目的xcode窗口即可.

按照文档创建workspace后将static library项目拖进workspace结果只是认成是一个文件的问题:

同上.因为这个static library 项目已经在别的xcode窗口中打开了.

带有static library的项目找不到lib的问题:

检查static library项目和主项目的building setting是否一致.比如主项目的building setting用的是自建的Distribution而不是Release,那么在static library里也得有这个Distribution名字的setting(并且由于前面的workspace integrity问题当时还没解决,无法打开该library项目,使得这个问题花了我n多时间才解决)

带有static library的项目用Organizer提交到app store时无法verify/share/submit的问题:

在static library的building settings里将skip install设为YES

⚓ Permalink

]]>
<![CDATA[窗外]]> 2011-03-20T00:36:00+08:00 http://luosky.com/2011/03/20/outside-the-window Posted on 2011-03-20 by luosky

花谢花开又是一季
对于有些花儿
这是它的起点
对于有些花儿
这是它的终点

地球是圆的
你的春天也许正是别人的秋天
如果你看过(500)Days of Summer
你的夏天就是别人的秋天

Media_httpimagesinsta_arbhj

Taken at 汤臣豪园

⚓ Permalink

]]>