做题解析性能优化始末(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

Markdown Style

本文仅用于有洁癖者(本人)统一 markdown 风格, 以及 check style 行文 标点 除非必要, 所有标点都使用英文标点 强调 说明性的词和短语用双引号("")强调 提示性的词和短语用双星号(**)强调 结论性的短语和句子用三星号(***)强调 删除 ~~删除的文字~~ -> 删除的文字 空格 第一级列表标记(比如*)前不需要空格 英文单词的前后都需要空格 行首不需要前面的空格, 句尾不需要后面的空格 如果英文单词在括号里, 则前后的空格写在括号外, 比如 " (abc) " 或 " (abc 很不错)" 左引号前和右引号后都需要空格 行首不需要前面的空格, 句尾不需要后面的空格 强调标记的前后都需要空格 行首不需要前面的空格, 句尾不需要后面的空格 链接 行文中需要文字的, 使用引用方式 直接贴链接不影响行文的, 可以直接贴连接 比如 少量 不是很长 且 在行尾 的链接 比如 少量 不是很长 的链接列表 其它情况均需要使用引用方式, 引用需要集中写在文章或段落末尾 [Display Name][name] ... [name]: http://external.link "Link Description" [name]: /blog/yyyy/MM/dd/internal-link/ "Link Description" 更新 在文档末尾添加 **** Update@yyyy.MM.dd: 更新的内容 大小写 TODO 用词 举例时用 “比如”, 不用 “如”; “比如” 后面不加冒号, 除非后面跟着列表 并列时用 “和”, 不用 “及”; 除非需要使用 “以及” “其他” 修饰人, “其它” 修饰非人 代码 单行模式 一行可执行代码使用变音符号(`)单行模式 一行文本内容使用变音符号单行模式或 pre-code 多行模式 特殊记号使用变音符号单行模式 比如文件路径 C:\Windows 比如代码元素 ++ -- 变音符号单行模式的空格规则同引号 可执行代码和支持代码高亮的文本 使用变音符号(`)多行模式 支持代码高亮的语言列表: http://pygments.org/docs/lexers/ 不支持代码高亮的文本内容 使用 pre-code 多行模式 打开该文本文件的命令可以写在一起, 命令和文本之间空一行

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

SSH 配置解析

使用 git (ssh 模式)和 scp 等 ssh 相关命令时也遵从该配置 vim ~/.ssh/config Host github.com User git # 使用 github 时的默认用户名 IdentityFile ~/.ssh/id_rsa.github # 为不同的 host 配置不同的 key Host gerrit.work-host.com User work-name # 使用公司 gerrit 服务时的默认用户名 IdentityFile ~/.ssh/id_rsa.work # 为不同的 host 配置不同的 key # ssh mctx => ssh urakalee@192.168.1.1 # 不需要配系统 host, 不过除 ssh 相关命令外, 该 host 不起作用 Host mctx HostName 192.168.1.1 # 私人服务器 ip User urakalee # ssh 到私人服务器时的默认用户名 IdentityFile ~/.ssh/id_rsa.urakalee # 为不同的 host 配置不同的 key # ssh workstation 和 ssh 10.0.0.1 同时生效 # 不需要配系统 host, 不过除 ssh 相关命令外, 该 host 不起作用 Host workstation 10.0.0.1 HostName 10.0.0.1 # 公司 workstation 服务器 ip User work-name # ssh 到公司 workstation 服务器时的默认用户名 IdentityFile ~/.ssh/id_rsa.work # 为不同的 host 配置不同的 key vim ~/.ssh/known_hosts # 通过用户认证的主机列表, 一行一个 <主机名>,ip1[,ip2]...[,ipN] ssh-<加密方式> <主机指纹> vim ~/.ssh/authorized_keys # 设置本机允许那些用户登录, 一行一个 ssh-<加密方式> <公钥> [user@host]

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