实在受不了screen了的同学想转tmux,可以看看

干掉Google Chrome Instant Extender新NTP

NTP就是NewTab Page的意思,也就是chrome://newtab对应的页面。 忘了从哪个版本开始,Chrome的NTP就变成了Google搜索框,现在居然还加上了Google Plus的提示等等,简直就是把Google首页搬过来了,和我直接设成Google首页有啥区别。 我的需求是只显示书签栏,其它全部去掉。之前用Old New Tab这个扩展,不过到了Chrome 33这个扩展也失效了。 于是想到16进制直接修改文件的办法,试了下,可行。

Windows下,在chrome.dll中寻找chrome/newtab并将该字符串包括花括号内容,替换为about:blank,用\x00补足,即可阻止Google从远程加载NTP;在resources.pak中搜索document.addEventListener(‘DOMContentLoaded’, init);将其中事件随便替换为无意义的,即可阻止本地NTP的渲染。 Linux下原理一样,只不过不是chrome.dll而就是chrome本身,vim的话记得开set binary并只用R/r操作,如果要用vim进行16进制编辑可以参考该文

修改完成后,记得清楚所有缓存后立刻关闭整个Chrome防止加载本地缓存。

至此,一切都清净了,只是每次Chrome升级都要记得修改一番。

Tags: Chrome

Ubuntu下无法连接WPA2 Enterprise无线

公司无线是用WPA2 Enterprise+PEAP+MSCHAPv2的方式搭建的,在Windows上连接正常,在Ubuntu 13.10下却始终连不上。

一开始我是用接有线的方式解决的,但实在有些不方便,今天又查了一下,是Network Manager的一个已知问题,可以看到影响到多个发行版本,其中Gentoo发布了一个r1解决了这个问题,而渣Gnome的开发人员也承认这点做的确实不如Windows好

临时解决方案是,关闭无线,修改/etc/NetworkManager/system-connections/下的文件,把里面的system-ca-certs=true改成false或删除掉这行,再打开无线就正常了。但只要Network Manager会重写那个文件,就会重新加上这行,导致连接再次连不上。

半永久方案是,按这个文章,指定连接无线使用某个CA证书例如/usr/share/ca-certificates/mozilla/AddTrust_External_Root.crt(不一定是这个证书,至少在我这里无效),至少在我这里解决了问题。

永久方案当然是backport那个补丁然后重新打包Network Manager(在Ubuntu下包名叫network-manager-gnome)。

2014-03-28 Update: Ubuntu 14.04已经使用了新版的Network Manager,解决了这个问题。

解决Firefox在英文Windows下字体显示奇怪的问题

如果使用的是英文Windows XP以上系统,区域设置里,日期时间选择的是非中文的其它如英语美国,那在部分网站如Twitter上,中文字体将以很奇怪的方式渲染。

这个问题折磨了我很久,最后找到了Firefox的一个bug,里面提到了,在没有声明语言的网页中,很可能会被判断为是日文页面,从而用日文字体渲染,导致该问题的发生。

解决方法很简单,在Firefox 8以后的版本,把优先显示的语言中,加入中文即可。

screenshot

Tags: firefox

在阿里写了一段时间的node.js后,作为一个曾经的Python粉,对本文内容深以为然,现在也开始倾向于TypeScript这种能提供类型系统的东西了。

estblog:

看发帖IP是亮点。后面后贴的一堆喷子。

发信人: daluobu (阿土仔), 信区: Python
标 题: 终于把一个8万行的Python程序用Java重写了
发信站: 水木社区 (Fri Dec 6 08:10:26 2013), 转信

在噩梦般地维护了一年多一个8万多行的Python程序之后,终于争取到机会把这个破烂玩意用Java重写了一遍,大概是4万行Java左右。说说效果吧:
1. 从过去平均每周down一次,到现在连续运转近半年只down过一次。
2. 节省超过80%的cpu和内存
3….

Tags: Python Java

gReader修改

年初的时候以为gReader不更新了,曾经修改过一次,后来不仅更新了,还大幅度修改了UI。

最近实在受不了每次打开feed内容时都要等那个无用的favicon出来后页面才会重排的问题,于是又打算修改。

这次特意小心的查了下,发现这货还是在更新的。作者很不厚道的把github当网盘了,不过也省却我到处找apk的麻烦事。

为了避免过一段时间忘了修改哪些地方,特写此文标记一下。

不用Xposed框架来修改的原因是,gReader这玩意儿代码隔离不好,添加favicon的代码是混杂在某个方法里一大坨代码里面的,无法用简单的替换方法来实现。

成品在http://sdrv.ms/1aASmU4


com\noinnion\android\greader\reader\ui\ItemActivity$BodyWebViewClient.smali com\noinnion\android\greader\reader\ui\fragment\ItemTabletFragment$BodyWebViewClient.smali

这两个文件中的shouldOverrideUrlLoading方法控制feed内容中的超链接处理方式。 修改if-nez v0, :cond_0goto :cond_0


com\noinnion\android\greader\reader\Prefs.smali

该文件中的hasProAccess方法控制是否是Pro版,v0直接改成0x1即可


com\noinnion\android\greader\reader\ui\ItemActivity.smali

该文件中的createBodyHtml方法,判断其中.local v3, favicon:Ljava/lang/String;的值是否为零,来控制favicon的显示 直接将下面的if-eqz v3, :cond_4改为goto :cond_4

Tags: android

杭州是个排外的城市

都说上海人排外,但来到杭州两个多月,才知道,其实小地方,比大城市排外多了。

  • 杭州的地铁入口是非常隐蔽的,你在大街上永远不知道往哪儿走会有地铁入口,哪怕是在杭州城战(火车站),你下个扶梯右手是入口的情况下,你在扶梯上面也不会知道下面是地铁入口
  • 杭州的公交是几乎没有指示牌的。几乎大部分车的侧面都是没有指示牌的,车进站后你就别想知道停在面前的是几路车。更有部分路线(43路等),电子指示牌也没有,就车窗前放个硬纸片,车不停到跟前你别想知道来的是什么车。
  • 杭州的路永远也没有指示牌的。你永远不知道你现在走的是什么路,到了路口面前横着的又是什么路。东南西北什么的就更别说了。

有同学说,这是城市基础建设不行。不过杭州不是出现一两年了吧,这些问题的严重程度,只能说明杭州政府觉得自己是本地人,不需要这些,优先级很低,不熟悉地理的外地人请圆润的滚开。

Tags: 杭州 生活

这个回答证实了我一贯的观点:中国的经济问题本质上是得利于人多,又失利于人多。人多便于初期快速发展(人口红利),但到了瓶颈需要广义上的精英化(例如农业的机械化)的时候,中国的人口就成为极大的阻碍因素了。说服100个人和说服1000个人的工作量和难易度是不可单单用指数变化来形容的。

Android尝试加密设备时正常重启

尝试用Encrypt Phone对全手机加密时,手机未进入加密流程,而是正常重启。

连上adb后logcat,可以看到重启前最后的log提示

E/Cryptfs ( 300): unmounting /data failed

E/Cryptfs ( 300): Error enabling encryption after framework is shutdown, no data changed, restarting system

Google一下可以发现#58073这个issue,其中29楼提供了非常有用的方法:

while true; do lsof | grep /data; sleep 0.2; done

在执行加密时,在adb shell中同时执行上面的命令,看重启前是哪个进程依旧挂住/data。

在我这里是CallRecorder的alsa_daemon进程,把CallRecorder临时卸载,并killall alsa_daemon,就可以正常进入加密流程读进度条了

Tags: android

GDC 2012: From Console to Chrome - Javascript

对来源视频中涉及到V8引擎部分的总结。

  • JIT Compiler
    • Numbers
      • Small ints (SMIs)
        • Immediate, fast
        • 31 bits on 32 bit machines OR on 32 bits x64
      • 64 bits “heap numbers”
        • Won’t fit in an SMI and is not local
        • Wrapped and heap allocated
        • Slightly slower
        • Doubles may be optimized, no guarantees
    • Arrays
      • TypedArrays
        • Uint32Array, Float64Array, etc
        • Memory efficient, no boxing
      • JS Arrays
        • API allows operations not possible in C
        • Backing storage: sparse vs. dense
        • C-like array OR hash table (“dictionary mode”)
        • Many factors switch backing, e.g. space efficiency
  • Object Model
    • Objects are associative arrays
    • Large systems have structured data
    • Hidden classes: Internal type system
      • Group objects with same structure
      • Shared across objects
      • Expensive to generate once, cheap afterwards
    • Property inline caching (IC)
      • Check hidden class on property lookup
      • First time fully generic lookup
        Remember where you found the property
      • Generate new optimized code
        Next time, direct access
    • Object properties storage
      • directly on object
      • array
      • hash table “dictionary mode” >_<
      • What triggers dictionary mode?
        • Too many properties (around 30)
        • Change property attributes
        • Delete a property
  • Optimizing Compiler
    • Heavier operations than JIT compiler
    • Warm up on fully-general path
    • Profile for hot functions
      • Non-deterministic sampling profiler
    • Mine types, specialize
      • New optimized code (inlining, licm, gvn)
      • Speculative optimization
    • Not all constructs are handled
      “bailout” == tried to optimize but quit
      V8 --trace-bailout
      V8 --trace-opt
      • Function too long
      • TryCatch, ForIn, NonStringToString, etc (may change)
    • But those optimizations were speculative
      “deopt” == assumptions of fast path violated
      V8 --trace-deopt
    • Javascriptisms: so elegant, so slow
      • Static and “like C” is often fast
      • Create a few well-defined object types
      • Avoid objects with too many properties (< 30)
      • Feed your functions consisten data
      • Don’t use gigantic functions
      • Keep an eye on your code with V8 flag
  • Garbage Collector
    • Two generations
      V8 --trace-gc
      • Young: small frequently collected space
      • Old: longer-lived data
    • Promotion (between young and old) is expensive
      Want very long or very short lived objects
    • Release your references
      Execution contexts can hold onto references
      Closures can hold onto references
    • Avoid GC stalls
      Use SMIs, scratchpads, update in place

(Source: youtube.com)

Tags: javascript v8