重启十年前的博客

距离上一次更新这个博客,已经过去了整整十年。 当年用 Octopress 搭的,最后一篇是 2016 年;这次跟 Cursor 聊,换成了 Hugo。 ...

March 7, 2026 · 预计阅读时间 1 min · Uraka Lee

Android: 9-patch的夜间模式

https://www.evernote.com/l/ABCVzpSbJs1HoKym6kJDBZQsyMlFtgXKYpM

March 10, 2016 · 预计阅读时间 1 min · Uraka Lee

做题解析性能优化始末(1)

https://www.evernote.com/l/ABC9oWR2d7xBaK-bic2LbgXHmwIsthq2-HI

March 10, 2016 · 预计阅读时间 1 min · Uraka Lee

Android机制: AsyncTask

https://www.evernote.com/l/ABDmk4yr90FNi6-Pa69oLDK291tym7e00qE

March 10, 2016 · 预计阅读时间 1 min · Uraka Lee

Mac Tips: 对 Chrome 禁用 Cmd+Q

我有一个坏习惯, 开巨多 Chrome 标签页, 然后幻想着有一天可以一个一个看完并记录… 以前的解决方案是使用 OneTab, 实际情况是内存占满, 从未看完过. 在一天两次 Cmd+Q 把所有标签页都关掉之后, 我要继续 hack 这个问题. Quora 上已经有人遇到并解决了这个问题, copy 过来: System Pref - Keyboard - Shortcuts - App Shortcuts - Add App: Chrome Title: Quit Google Chrome Shortcut: Cmd+Opt+Q

April 19, 2015 · 预计阅读时间 1 min · Uraka Lee

Mac 重装/数据迁移

transfer 出来的 Mac 系统, 有一些地方需要重新设置 关闭 guest: Pref - User - Unlock - Guest User - Uncheck 修改机器名1: Pref - Share - Computer Name 修改机器名2: sudo scutil --set HostName <name> 修改 Terminal 提示符 vim ~/.bash_profile export PS1="[\u@\h \W]\$ " # 增加这一行 source ~/.bash_profile 开启 TRIM 方法 1: 使用 Terminal 命令 方法 2: 使用 Chameleon SSD Optimizer 我是在使用过方法 1 之后才找到方法 2 的, 不过以后再有需要会先用方法 2 检查安装的软件 Dropbox CloudStation -> 家用 ONLY GoAgentX: 升个级吧 -> 买个 VPN 吧 Alfred: 设置 Spotlight 索引, 重建 Alfred 索引 配置 hosts/ssh-config/known_hosts/vimrc/gitconfig/SwitchySharp 各种清理 清理个人的 Login Items: Pref - User - Login Items 使用 CleanMyMac 清理全局的 Login Items 使用 CleanMyMac 删除没用的软件 到 ~/ 下删除没用的目录和没用软件的残留 到 ~/Library/Application Support/ 和 Preferences, Caches, Logs 目录下删除没用软件的残留 运行 Disk Utility 修复 HomeBrew 按照 brew doctor 的提示做即可 Update@2015.04.13: 修改"检查安装的软件"部分

April 19, 2015 · 预计阅读时间 1 min · Uraka Lee

Android: 捕获 Home 键

在猿题库工作一年多, 新功能做了不少, bug 也改了许多, 近期开始做更多的优化工作. 本篇博客的内容来自"错题锁屏"功能的优化. 我们 2014 年 9 月开始做"错题锁屏"功能, 希望增加曝光, 提高存留. 开发该功能的同学现在已经结束实习出国工作了, 但做这个功能的时候我就知道坑很多, 而且上线前为了避免风险留了一些坑没改. 上线后, 发现该功能比较受欢迎, 所以又有了多次拉锯式的修改, 不过对于锁屏本身的坑并没有填. 关于如何防止锁屏进程被杀, 我可能会开另外一篇博客来说明, 不过其实你也可以逆向工程我们的 apk 自己去看. 还有就是错题锁屏变成一个独立进程之后, 进程间共享数据变成了一个新的大坑… 由于我们一开始就不想把错题锁屏做得很暴力, 所以虽然禁用了 Back 键(按 Back 键不能退出锁屏), 却还是保留了按 Home 键退出的可能性, 避免用户因为答不对题而无法解锁(我们可能低估用户了). 于是有一个问题, 按 Home 键退出锁屏之后, 用户可以在"最近使用"中重新打开锁屏界面, 而我们只想让用户在"最近使用"中看到猿题库本身. 我开始寻找如何在用户按 Home 键时让锁屏界面自己把自己 finish 掉的方法. 首先查到的方法是 onUserLeaveHint, 按 Home 键时确实会调用这个函数. 不过遇到的问题也很坑: 当有其它锁屏, 甚至 QQ 弹窗(实际上也是用类似锁屏的方法实现的)出现时, 我们的锁屏可能被挤掉(onUserLeaveHint 被调用). 然后开始寻找能够捕获 Home 键的方法: override onKeyDown, 不过 no longer works as of 4.0, 这里给出了完整的代码 这篇 vote 比较少的文章其实离最终答案很近了, 不过因为 vote 太少, 我一开始没有相信它… 中文网络上看起来有更多人搞过这个问题: 文章 A B C 大同小异, 这里分析得更详细一些. 其中 B 的代码更漂亮一些, 我试过可行 (Android4.+) 可行之后, 我发现又掉到了坑里: 即使 finish 掉了, 用户还是可以在最近使用中重新打开锁屏界面!!! ...

January 21, 2015 · 预计阅读时间 1 min · Uraka Lee

致 Weiwei: 我们期待着你的降临

记录 圣诞节, Mimi 怀孕 14 周 2 天; 大风; 上线结束的时间还好, 9点到家. 本周体重 51kg, 没有增加; 食欲仍然一般, 胃有胀气, 偶尔拉肚子; 睡 8 小时, 但梦比较多. 第一次产前筛查已经过了一周; 约了 1 月 5 号的孕期课程第一节. 致 Weiwei 你的名字叫李 Weiling, 因为还不知道你是男宝宝还是女宝宝, 所以字还没有定. Weiling 这个名字是爸爸起的, 依照 willing 的发音, 希望你能够有自己的意志, 不随波逐流. 不过名字只是个祝愿, 健康快乐才最重要, 爸爸妈妈都清楚这一点. 因为你曾经离开过爸爸妈妈一次, 所以这一次爸爸妈妈都有点紧张. 说什么放轻松那是骗人, 但着急也没用却是真的. 一方面担心你是不是能顺利地到来, 另一方面也希望能在你到来之前做好更多的准备. 两个月前爸爸刚换了一份工作, 降薪来到了一家创业公司. 虽然心态好了不少, 也有了努力的方向, 但钱少了是个事实. 于是爸爸开始尝试理财, 赶上比特币大涨, 小赚了一笔. 投资还是投机, 一开始爸爸没有把握好, 赚了又赔, 身心疲惫. 反复几次之后, 爸爸开始尝试给自己设定几条规则: 投资自己(学习)最重要 投机没有关系, 但要自律, 不能违背第一条 设定合理的收益目标, 有助于平衡上述关系 这几条规则并不一定普遍适用, 但至少符合爸爸目前的情况. 同时, 爸爸也意识到目前物质基础还算牢固, 但快速增长也不现实, 应该更关注精神方面的准备. 这一点妈妈做得很棒呢! 从很久以前就开始看书, 还给爸爸普及了许多妈妈和宝宝相关的健康知识. 不过爸爸偶尔还是会神经兮兮地在削苹果的过程中洗 3 次手, 生怕妈妈吃到什么脏东西. ...

December 25, 2013 · 预计阅读时间 1 min · Uraka Lee

Mac Chrome 升级

直接升级失败, Error 12 找到官方解决方案 ~/Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources/GoogleSoftwareUpdateAgent.app/Contents/Resources/install.py --uninstall # Mac 10.9 上无此文件 sudo /Library/Google/GoogleSoftwareUpdate/GoogleSoftwareUpdate.bundle/Contents/Resources/GoogleSoftwareUpdateAgent.app/Contents/Resources/install.py --uninstall 折腾半天还是不行, 最后从官网下载了最新版的 Chrome, 覆盖安装 Update@2016.03.10: 使用 Homebrew Cask brew install caskroom/cask/brew-cask brew cask search chrome brew cask install google-chrome

December 25, 2013 · 预计阅读时间 1 min · Uraka Lee

Android 开发点滴

Manifest 弹出键盘 android:windowSoftInputMode 控制弹出键盘 stateHidden 为刚进入 activity 时不显示键盘 控件 EditText 与弹出键盘 在 xml 中设置 android:inputType, 常用的有: default, 中文手机会弹出中文输入法, 并切换到默认输入模式(通常是中文模式) phone, 电话号码键盘, 不过我们通常还是会用 number 彻底限制只能输入数字 textEmailAddress, 虽然名字是 email, 但是也可以输入电话号码 java 中可以 setInputType, 对应的 type 在 InputType 找到: 比如 textEmailAddress 对应 TYPE_TEXT_VARIATION_EMAIL_ADDRESS 注意 textPassword 对应 TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PASSWORD 详见 官方文档 工具 sleep SystemClock.sleep 不会抛出 InterruptedException, 同时也无法 thread.interrupt Thread.sleep 则正相反 线程 UI 线程 UI 控件不是线程安全的, 所以只能在 UI 线程上操作 Activity.runOnUiThread View.post/postDelayed Handler AsyncTask doInBackground 在 worker 线程 onPre/PostExecute 和 onProgressUpdate 在 UI 线程 WebView 使用 HttpClient 的 cookie /** * @param url - 形如 http://xxx.domain.com/yyy/zzz.z?mmm=nnn * @param cookie - 从 HttpClient 取得的 cookie */ public static void synCookies(Context context, String url, Cookie cookie) { CookieSyncManager.createInstance(context); CookieManager cookieManager = CookieManager.getInstance(); cookieManager.setAcceptCookie(true); // 这句可能可以不要 String cookieString = cookie.getName() + "=" + cookie.getValue() + "; domain=" + cookie.getDomain(); cookieManager.setCookie(url, cookieString); CookieSyncManager.getInstance().sync(); }

December 20, 2013 · 预计阅读时间 1 min · Uraka Lee