这本《一分钟经理人》不知是何时买的书,好像是大学里,放在我家很久,过年回家的时候又带来上海,最近闲暇的时候又回顾了一下。书很薄,32开,只有100多页。 令我惊讶的是,虽然书的内容几乎完全淡忘,但是书中阐述的道理似乎已经完全渗入我的思维之中,让我阅读的时候一直有戚戚焉。虽然我并不做管理,但是过去三年的工作,也让我意识到了工作中存在的管理问题。书中也若隐若现有一些GTD的方法以及敏捷开发的思想。让我隐隐感到一种符合我的哲学理念。 当然管理是关于人的问题,虽然书阐述了一些很简单的道理,但也并非总是适用于各种环境和背景——尤其是有中国特色的公司组织中。关键还是看人。对于书中描述那样高效的团队真是向往啊。 同时,今天正好看到这篇文章:哈佛经典:谁背上了猴子,也有类似的哲学在里面。
我应该对标题做一个更详细的解释:用C语言在SpiderMonkey中产生一个在JavaScript中可以当成函数被调用的对象,换句话说,就是一个非Function的对象,在JavaScript中可以被当成Function进行调用。例如,我有一个Hash对象,当我在var h = new Hash()之后,可以直接调用h(key),h并非一个函数对象,却可以以这种函数调用的方式来获取键key对应的值。 首先,必须要在创建这个Hash类的结构时,将JSClass中的”call”字段设置为相应的函数,如下: static JSBool call_hash(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval){ /* here the obj refers to the global object, not the callee itself */ *rval = JSVAL_NULL; return JS_TRUE; } static JSClass hash_class = { “Hash”, JSCLASS_HAS_PRIVATE, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, finalize_hash, 0, 0, [...]
最近复习C/C++,今日用APR编写了一个生产/消费模型的小程序。结果出现了这样一个奇怪的警告:“提领类型双关的指针将破坏强重叠规则”,让我大惑不解,特此和大家讨论一下。 我用的是gcc 版本 4.2.3 (Ubuntu 4.2.3-2ubuntu7) 线程模型:posix。出现警告的这段是这样的: apr_queue_t *queue = (apr_queue_t *) data; int *d = NULL; while(1){ apr_queue_pop(queue, (void **)(&d)); // -- 此处为出现警告的地方。 printf(“Consumed: %d\n”, *d); } 虽然可以运行无误,但该警告还是让我比较无奈,最后我改成了如下: apr_queue_t *queue = (apr_queue_t *) data; int *d = NULL; void *c = NULL; while(1){ apr_queue_pop(queue, &c); d = (int *)c; printf(“Consumed: %d\n”, *d); } 因为很久没有写C,在这里,我的问题是: [...]
在Rails中使用helper链接应用中的JavaScript和CSS文件的时候,会在文件的路径后面添加一个问号和一个数字,如: <link href=”/stylesheets/application.css?1200155369″ media=”all” rel=”stylesheet” type=”text/css” /> 问号后面的数字被称为asset id,目的是为了一些容易被缓存的目标如JavaScript和CSS文件,在文件被更改后不会被浏览器或代理服务器强制使用缓存,这也用于某些Ajax请求中。 但是这种asset id的行为比较怪异,他是一个查询字符串,但是没有键值对。我的一个部署方式是在一个已经架设了Wordpress的域名下,使用反向代理向用户暴露某个控制器。因为给Wordpress配置了mod_rewrite,并启用了.htaccess,将所有不存在的文件重写到wordpress的脚本处理。而这时我使用了Alias来将Rails的public目录下的javascripts和stylesheets目录绑定到相应的URL路径下,Apache却在处理这个asset id上有些问题,直接访问/javascripts/prototype.js可以得到,但/javascripts/prototype.js?11223344却会跑到WordPress中,并且说这个文件不存在。这可能和Apache处理URL的次序有关。当然,将DocumentRoot配置到Rails的Public目录,则不会出现这个问题。 无论如何,我要去掉这个asset id,根据Rails 2.0的代码,大家可以在actionpack/lib/action_view/helpers/asset_tag_helper.rb中找到生成asset id的方法rails_asset_id,如下: # Use the RAILS_ASSET_ID environment variable or the source’s # modification time as its cache-busting asset id. def rails_asset_id(source) if asset_id = ENV["RAILS_ASSET_ID"] asset_id else path = File.join(ASSETS_DIR, source) if File.exist?(path) File.mtime(path).to_i.to_s else ” end end end 代码的注释也说的很清楚了,asset id默认为文件的修改时间的时间戳,也可以通过环境变量RAILS_ASSET_ID来自行设置。环境变量可以在系统中设定,也可以在environment.rb或相应的环境配置的代码中修改,比如我在config/environments/production.rb中添加了: [...]
PHP主要是设计于文本操作的,其实PHP不适合做数学运算,效率也不高,不过因为这次的项目中有个东西必须使用到二进制位移操作,在PHP上面遇到了一些麻烦。 因为PHP只有32位有符号整数,没有64位长整型,也没有无符号整数。其整型的范围是-231-1~231,超出这个范围的,将被解释为浮点数。因此,0xFFFFFFFF,直接打印,显示的是4294967295,及232: >> 0xFFFFFFFFF 4294967295 >> gettype(0xFFFFFFFF) ‘double’ 而在32位有符号整型中,0xFFFFFFFF应表示-1: >> (int)0xFFFFFFFFF -1 而PHP不支持浮点数的二进制位移操作,如果要进行,会先转换为整型,最后的结果,也将按照整型来返回: >> 1 << 31 -2147483648 >> 1 << 30 1073741824 >> 1 << 32 1 >> 0xFFFFFFFF >> 1 -1 同时PHP的向右位移操作,高位会填充符号位,而且PHP没有提供类似Java的>>>来强制填充0: >> 1 << 32 1 >> 0xFFFFFFFF >> 1 -1 >> 0xFFFFFFFF >> 2 -1 >> 0xFFFFFFFF >> 3 -1 >> [...]
虽然前一段时间Ruby社区推出了很多重大的更新,如RubyGems发布了1.0,Rails发布了2.0,Ruby发布了1.9测试版。但是却潜藏了很多危险。比如在Windows平台下,升级了RubyGems之后,会导致我现有的Mongrel无法启动,原因在于RubyGems1.0修改了系统的识别,将mswin32改成了x86-mswin32,从而导致gem_plugin无法正确定位相应gem。 修复的方法也很简单,只需要先删除Mongrel再重新安装: ::先升级RubyGems到1.0 gem update –system ::卸载再重装Mongrel gem uninstall mongrel gem i mongrel 另外还在一些人的BLOG中发现Rails2.0刚发布时,是要求使用RubyGems0.9.5,也会出现一些问题。幸而我暂时没有迁移到Rails2.0上,也还没有遇到问题。 从这一个事件上也可以看出Ruby社区相对于Python/Perl的社区来说,还不是十分的成熟。
问题描述: 当使用memcached并将Model对象保存在其中时,若要取出这个缓存对象时,可能会找不到Model的类,并抛出“Undefined Class/Module SomeClass”的错误。 例如: if not (genres = Cache.get(key)) genres = Genre.find(:all, :condition => “platform_id = 1″) Cache.put(key, genres, 60*60*24) # cache for 1 day end 解决方案 要解决这个问题,可以在引用到该对象之间,先引用其类。比如,在前面的代码前面加入要引用的类Genre: Genre if not (genres = Cache.get(key)) genres = Genre.find(:all, :condition => “platform_id = 1″) Cache.put(key, genres, 60*60*24) # cache for 1 day end 还有更好地方法是在Controller的before_filter中加载所依赖的所有Model: before_filter :preload_models [...]
今天将代码部署到服务器上之后出现了这个奇怪的错误,经过删除gems重装之后问题依旧,最后查找资料,发现可能是 require 和 class 之间的问题,最后在今天写的代码中发现了我在某个model的文件开头require了一个包。将require移入class定义内该问题解决。 原来代码如下: require ‘faster_csv’ class Character < ActiveRecord::Base … end 修改后: class Character < ActiveRecord::Base require ‘faster_csv’ … end 这个问题产生的原因我还不是非常清楚,难道和ruby的语法或者是内部运行机制和rails有冲突么? 这个问题在Rails的BUG列表中依然存在争议,目前还没有被彻底解决 2007-12-11更新 今天在我更新了服务器后,服务器上又出现了这个问题,但这次换了一个文件,变成了account.rb。这台服务器上装的是CentOS3,而另外一台同步更新的Windows2003服务器,则没有出现这个情况。多次修改找不出原因也不能解决问题,最后通过重启服务器解决了问题…… 重新看了Rails Trac上的问题,发现情况并不是那么简单,很多条件可以造成这个错误,而问题的解决也是非常奇怪,比如有个人出现错误后,将某个设置从true改为了false,便正常了,然后他又把设置改回true,但是错误就没有了。