Xhacker’s Base

视网膜图片

之前注意到一个现象,在用「预览」打开 Retina 显示屏上的截图时,截图会以相同的物理尺寸显示。也就是说,一张实际分辨率为 800×600 的 Retina 显示屏上的截图,在 Retina 显示屏上会以 800×600 的物理分辨率显示,图片是完全清晰的。而在 1× 的显示器上,则会以 400×300 的物理分辨率显示。这个行为是非常理想的,因为我们希望图片的物理尺寸保持一致,不希望在 1× 设备上看到一张巨大的截图。

self.join(Apple)

iOS 10 和 macOS Sierra 发布了,我实习时写的代码也开始进入数以亿计的设备。虽然只是一点微小的工作,却籍由 Apple 这个放大器产生了影响。然而,夏天终究短暂,太多想法还未实现。昨天,我正式加入 i18n team,希望继续在文字输入上做点事情。这里的改进,实实在在地影响着 70% 非英语用户的切身体验。

我得给自己买个新相机了

在纠结了很久〈到底买哪代 RX100?〉之后,Svenja 同学最终买了橙色的 GM1。见到真机,我可以负责任地说,橙色的 GM1 是目前最好看的相机。Svenja 回到温哥华后,GM1 被我征用体验了一段时间。

北京和三藩

北京夏天的晚上是穿衬衫的时节,三藩此时还是冬天。
北京王府井大街繁华又整洁,三藩的 Downtown 散发出阵阵臭味。
北京的凌晨是僻静的,三藩天黑了不敢出门。
北京的路都是平的,三藩的路都是斜的。
北京买不起房了,三藩租不起房了。
北京过马路是个艰巨的事,三藩的车都会让人。
北京巨堵,三藩挺堵。
北京地铁上都玩手机,三藩 MUNI 上都玩手机。
三藩的咖啡馆好多人码代码。
北京的空气其实没那么糟。
三藩的 Uber 都是丰田。
北京的饭馆不用给小费。
北京的麦当劳不用收盘子。
北京的红绿灯没有按钮。
三藩有人在街上打鼓。
三藩有很多奇怪的小店。
三藩有五颜六色的小房子。
北京的 Wi-Fi 上不了 Twitter。

LLVM 和 Program Analysis 杂想

之前一直在吐槽 LLVM 后端混乱的架构。比如三万多行的文件、调来调去的各种模块。后来又想想,编译器这种东西的固有复杂度就在那里,也许对于这样一个项目,理想中的的最佳架构也比现在好不上多少。何况如我之前所说 1,在高速发展的今天,一个软件系统停下来修 bug 尚且不能,更别提重构这种没有实质意义的事了。LLVM 圈里的人有足够多的 domain knowledge,可以理清这些头绪。LLVM 外面的人,who cares。

给 Mou 说两句好话

无疑 Mou 是违反了契约,收了钱却没有按时交货。但我觉得也没必要上升到「骗局」的程度。

Oh My 2015

Annotated GitHub Contribution Graph

Summary

丰收之年。结了大大小小很多个坑。

How to Make Window Buttons Look Proper for Dark-Themed Mac Apps

It’s been a while since OS X El Capitan came out. Inboard still doesn’t support Split View. It’s not because we don’t want. It’s because of we are not using the system standard window buttons. Instead, as a dark-themed app, we are using customized window buttons for a better look.

Castro vs. Overcast:设计上的美观与功能上的独特

我最早听播客是用苹果出的 Podcasts,Overcast 推出后就受 Smart Speed 的吸引而换了过去。在 Castro 改为 free + patronage 模式后,有幸体验了一下,感觉 Castro 在设计上更为美观,而 Overcast 在功能上更为独特。我最终还是选择了后者。

3D Touch Peek and Pop 二三事

3D Touch 有一个 Peek and Pop 功能,简单的说就是用力按可以预览即将载入的 view controller,再按下去将其变为全屏。前几天给 Expense 实现了,在这里记录一下。

买什么鼠标?

作为一个偶尔搞搞设(yóu)计(xì)的程序员,有一个好的鼠标是至关重要的。这学期 Svenja 把 Razer Naga 拿走了,我只好又开始了找鼠标之旅。tl;dr: 最终解决方案是 Magic Trackpad 加一个 Razer 的游戏鼠标。

什么时候不要对齐?

在 UI 设计中,一个重要的原则就是保持元素尽量整齐。然而,在有的应用场景我们应该尽可能不对齐。比如一个显示邮件内容和附件的界面,附件放在一个可以横向滑动的 view 里。

XcodeGhost 的警示,为何要使用 App Sandboxing 和 Gatekeeper

XcodeGhost 给我们带来的教训不止是要从正规的地方下载 Xcode,而是要尽可能只使用在 sandbox 中的(Mac App Store 上的应用都在 sandbox 里)应用。再不济也切记不要关闭 Gatekeeper。

Node.js、V8、webOS 和 WebKit 的故事

/* 这篇文章于一年多前写就,我也忘了是为什么写的了。没有什么主题,就是像讲故事一样随便聊聊 Node.js、V8、webOS 和 WebKit。*/

到底买哪代 RX100?

Svenja 同学这学期去三藩实习了,让我推荐一款相机。我第一反应是大法的黑卡(RX100),但 RX100 发展至今已有四代实在难以选择,故列此表以供参考。

拟物未死,只是设计潮流变了

在 iOS 7 中,苹果其实没有杀掉拟物,只是杀掉了大量使用阴影、材质的设计风格。这种风格是拟物的直接体现,却不是拟物一定要有的。

使用 NSDateComponentsFormatter 显示相对时间

tl;dr: 如果你想把「66233」转换为「About 18h 24m remaining」,使用 NSDateComponentsFormatter

如果有机会我想去这些公司玩玩

Quark Shell:用 HTML + JS 编写 Mac Menubar App

Quark Shell 可以让你用 HTML 和 JavaScript 编写 Mac menubar app,有点像 Electron(原 Atom Shell)和 MacGap,但专注于 menubar app。

Steamclock

礼拜二正在码编译器的时候,突然收到 Allen Pike 的邮件,「we’d like to invite you to do an internship here at Steamclock」,终于。在被无数大的小的中的公司无情拒绝之后,居然能加入 Steamclock,也算是不枉了。

精工细作

我是一个很喜欢 feedback 的人。报 bug 这些年下来,最大的收获是明白了「没有人鸟你」。无论操作系统还是 app、无论商业还是开源、无论大公司还是小公司,报 bug 基本是徒劳的。我曾经非常沮丧。但当我成为了一个开发者,我开始理解——毕竟人的精力是有限的。公司为了发展,不可能真的停下脚步提高软件的质量 1。无论是 Chrome 还是 OS X,我都目睹了软件质量随着功能增多而下降。也许这就是混乱的现实世界吧 2

  1. 不禁感叹 Snow Leopard 的伟大。 ↩︎

  2. 作为一个开发者,我又比普通用户幸福很多。如果 app 是开源的,便可以去改掉自己不喜欢的部分。就算作者不 merge,起码可以自己用。所以我一直觉得,能开源就开源吧。如果没有真正的技术壁垒,开源不会造成什么损失。相反,开源可以让有需要的人修改、让新手学习,这些都是巨大的好处。 ↩︎

Oh My 2014

Summary

First year in Vancouver.

键盘和屏幕尺寸

我对更大的屏幕本身没有什么渴求,只是希望更大的屏幕能带来更好的键盘。

IM 吐槽大会

做一个合格的 IM 并不难:

  1. 稳定快速的收发(包括文本、图片、文件)。
  2. 多平台原生客户端。别自作聪明,要符合目标平台的习惯 1
  3. 聊天记录同步。

志愿荒废了

去年志愿没用起来。今年我很早就开始做准备,把 Django 从 1.3 升级到了 1.6,联系刘子渊、联系陶泽平。

关于 HDMI 线和版本的误区

看了 V2EX 和上很多关于显示器的讨论,大家似乎对 HDMI 线和版本有一些认识上的错误。事实上,HDMI 线材是和版本无关的。比如,一根所谓的 HDMI 1.1 线,是可以用于 HDMI 1.4 版本的。线是橡胶包着铜的物理结构,版本是用于两边设备交互的。

Halo Word 0.6

拖了将近三周,我终于把 Halo Word 修好了。其实 3 月 6 日就收到了第一封反馈邮件,发现 Google Dictionary API 不能用了。但我迟迟没有决定该换成什么 API,也不想面对之前写的 JavaScript 代码,就一直拖着。

《黑客与画家》

这本书刚出来的时候就想看,然后从闫铮那借来一本,最后也没看。说来惭愧,我的「2013 必须读完」一本也没有看掉。于是我开始填坑了。

Oh My 2013

Summary

Objective-Year.

CA991 ✈︎ Vancouver

现在正飞越佳木斯上空,预计 9 小时后到达温哥华。趁这个机会启用我的新 blog 吧。:)

如果程序员也是设计师

优势很明显:避免沟通成本。不需要相互理解。

最近意识到缺陷。