手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆
浏览模式: 标准 | 列表全部文章

json2select的全国城市数据

怎么说呢,这个东西不太适合存储ID进数据库的用户,因为我在打开该文件后发现,里面的key全是t,s之类的,作者shawphy也建议换成j,s,q之类的key,但对于普通 用户来说太累了。

当然,这个数据应该是配合json2select插件而来的,所以我们不能奢求什么。
如果确实需要,到这里下载数据,然后自己通过程序生成json文件,修改一下json2select插件。当然更能做的就是问一下google,百度,谁有三级联动的代码。

原文如下:

去年写过一个小插件,json2select 一直想要转换出配套的数据,但总有这样那样的问题之后,终于拖到了现在。
好在一切悲剧的日子已经过去了,新时代已经来临。猛击这里
三级联动,直辖市精确到城镇街道,一般城市到达区。强烈推荐。

这一切都要感谢 Asfman ,辛勤的工作,当然也少不了感谢搜狐白社会,是他们提供了这么好的数据,也要感谢我们伟大祖国,我们中华民族地大物博,省市也很多……

这套数据有100K多一点,但可以想办法压缩
把其中重复字符串替换掉,把街道替换成j,市替换成s,区替换成q,都可以减少文件体积。要用的时候先用正则替换后,再eval执行字符串就能得到数据了,可以达到68K左右
另外,保存成gb2312的话也可以减小体积。目前我手头的是52K左右大小了。但可能导致乱码,慎用。

进一步,如果通过词频分析,找出重复最多的前20个,替换的话,相信可以把体积维持在30K以下了。但手头没工具,最近也很忙,所以大家自己发挥吧。
我粗略压缩后的东西我就不单独发布了。

javascript处理事件的一些兼容写法

 

司徒正美的一些关于javascript的处理的兼容写法。如果不想用这些,可以直接用jQuery中的功能。如bind,unbind,$('XX'),$(document).ready()等

绑定事件

JavaScript代码
  1. var addEvent = function( obj, type, fn ) {  
  2.     if (obj.addEventListener)  
  3.         obj.addEventListener( type, fn, false );  
  4.     else if (obj.attachEvent) {  
  5.         obj["e"+type+fn] = fn;  
  6.         obj.attachEvent( "on"+type, function() {  
  7.             obj["e"+type+fn]();  
  8.         } );  
  9.     }  
  10. };  

另一个实现

JavaScript代码
  1. var addEvent = (function () {   
  2.     if (document.addEventListener) {   
  3.         return function (el, type, fn) {   
  4.             el.addEventListener(type, fn, false);   
  5.         };   
  6.     } else {   
  7.         return function (el, type, fn) {   
  8.             el.attachEvent('on' + type, function () {   
  9.                 return fn.call(el, window.event);   
  10.             });   
  11.         }   
  12.     }   
  13. })();  

移除事件

JavaScript代码
  1. var removeEvent = function(obj, type, fn) {  
  2.     if (obj.removeEventListener)  
  3.         obj.removeEventListener( type, fn, false );  
  4.     else if (obj.detachEvent) {  
  5.         obj.detachEvent( "on"+type, obj["e"+type+fn] );  
  6.         obj["e"+type+fn] = null;  
  7.     }  
  8. }  

加载事件与脚本

JavaScript代码
  1. var loadEvent = function(func) {  
  2.     var oldonload = window.onload;  
  3.     if (typeof window.onload != 'function') {  
  4.         window.onload = func;  
  5.     }else {  
  6.         window.onload = function() {  
  7.             oldonload();  
  8.             func();  
  9.         }  
  10.     }  
  11. }  

阻止事件

JavaScript代码
  1. var cancelEvent = function(event) {  
  2.     event = event||window.event  
  3.     if (event.preventDefault) {  
  4.         event.preventDefault(  );  
  5.         event.stopPropagation(  );  
  6.     } else {  
  7.         event.returnValue = false;  
  8.         event.cancelBubble = true;  
  9.     }  
  10. }  

取得事件源对象

相当于Prototype.js框架的Event.element(e)

JavaScript代码
  1. var getTarget = function(event){  
  2.     event = event || window.event;  
  3.     var obj = event.srcElement ? event.srcElement : event.target;  
  4.     return obj  
  5. }  

删除广告

本期阿里妈妈的广告结束后,开始清理广告。
同时征租广告位:
1、logo旁
2、全站左侧
3、文章内页
4、友情链接(目前清理中)


说明:

想知道IP、PV之类的请看网站底部的统计代码(已开放浏览功能)。

Tags: 广告

What makes a good programmer?

本文来自nio's blog(nio?尼奥?黑客帝国?),原文如下:

What makes a good programmer?

Some casual surfing led me to this article from a couple of years ago, titled "How to recognize a good programmer". It was a nice read, but as many in the comments pointed out, the criteria the author set forth most likely describe himself and are not really useful as rules-of-thumb on how to recognize a good programmer.

It got me thinking though, on what are the attributes I consider useful in fellow programmers. So what makes a good programmer?

以下五项,按照优先级,你会怎样排序呢?

  • Security(安全性)
  • Maintainability(可维护性)
  • Usability(可用性)
  • Performance(性能)
  • LOC (lines-of-code) count(代码量)

作者认为最重要的是 usability,因为你开发的东西最终价值取决于最终用户。我们开发的目的是为了解决问题,如果解决不了问题,则说明项目是失败的。

 

Linux下安装TM2008

正是因为看了这篇文章,我才能在linux下面使用TM进行聊天,以前都是使用虚拟机的。如今。我也可以直接在ubuntu下面聊天了。

内容如下[说明一下,本篇内容为精简版,如需查看完整版,请到http://rainux.org/running-tm2008-beta-with-wine]:

腾讯已经发布了官方的 QQ for Linux,虽然有很多问题,例如没有 amd64 版本,功能太弱,聊天记录格式与 Windows 下的 QQ/TM 格式不一致等等,但无疑是 Linux 里使用 QQ/TM 最简单的方案。如果它已经能满足你的需求了,那么不必浪费时间看本文。

精简版本

如果你没时间看我唠叨,精简的版本是:TM2008 Beta 运行需要 Unicode 版本的 IE6、rpcrt4.dll、Visual C++ 2005 SP1 运行库,安装程序需要 GDI+。不可以使用 IEs4Linux,因为它安装的 IE6 及相关运行库是 Win9x 的 ANSI 版本。必须使用 CrossOver Games 里的 rpcrt4.dll,然后用 winetricks 安装 msxml3 gdiplus riched20 riched30 ie6 vcrun6 vcrun2005sp1 即可安装运行 TM2008 Beta。

详细版本

只看精简版没搞定?请看详细的(唠叨的)版本:

安装 Wine,运行一下 winecfg,让它生成一个干净的 ~/.wine 目录。如果要使用已有的 ~/.wine,请先将其备份。同时确保 winecfg 里设置的 Windows 版本至少是 Windows 2000(我用的是 Wine 1.x 默认的 Windows XP)。

获取一份 CrossOver Games 里的 rpcrt4.dll, 将其复制为 ~/.wine/drive_c/windows/system32/rpcrt4.dll(覆盖已有的文件),运行 winecfg,在 Libraries -> DLL Overrides 里将 rpcrt4 设置为 Native (Windows)。

下载 winetricks,使用它安装 IE6 和一些重要的运行库。如果这个过程失败,删除 ~/.wine(或者恢复备份的 ~/.wine)并从头再来。

  1. sh winetricks msxml3 gdiplus riched20 riched30 ie6 vcrun6 vcrun2005sp1  

此时如果你有 Windows 上安装好的 TM2008,它已经可以运行了,但是无法登录,会提示“网络连接失败,请检查网络。”。所以还是老老实实用安装程序装一次吧。这里有个很莫名的问题,如 果直接使用 Wine 运行 TM2008 安装程序,它很可能会直接崩溃,看不到任何图形界面的提示。而使用 Wine 运行一个其它的程序,例如 cmd.exe 或者 Total Commander,再用这个程序去启动 TM2008 安装程序则不会有任何问题。

查看聊天记录时的性能问题

好了,现在不会有什么问题阻挡你了,TM2008 Beta 安装和启动都非常顺利,使用也很稳定。甚至 QQ2009 Preview4 都可以安装并启动,不过使用时很容易崩溃。但是如果你像我这样疯狂地保存了七八年的聊天记录,你会发现:

  • 每次启动 TM2008 后第一次给任何人发消息都会导致 TM2008 失去响应将近 20 秒钟,之后继续发消息则不会有问题。第一次接收到某人的消息也会同样如此。
  • 任何试图查看聊天记录的操作都会导致 TM2008 消耗 100% CPU 并且很长时间没有反应,等待足够长的时间后才可以看到聊天记录。

这是由于 TM2008 的聊天记录数据库使用了 Windows 的 Structured Storage 技术,而其 API 库 ole32.dll 的 Wine 实现还不完善或者可能性能太低。虽然可以用 winetricks 安装 dcom98 来获取一个 Win9x 的 ANSI 版本的 ole32.dll,但它没法让 Unicode 版本的 TM2008 运行起来。搜遍了网络也找不到在 Wine 里使用 Win2k 以上系统的 ole32.dll 的方法。没办法,为了保持聊天记录的一致性,只有两个选择。要么不在 Linux 里看聊天记录;要么把聊天记录数据库 Msg2.0.db 备份并从 QQ Profile 目录(我的文档\QQ Files\QQ 号码)里删除,让 TM2008 自己生成一个空白的 Msg2.0.db,暂时抛弃历史包袱,以后再到 Windows 下把新的记录导出为备份文件后合并到老的数据库里。