twitter前端简单分析(一)

May 28th, 2011 by Dream☆Wing No comments »

今天在上twitter时,偶然发现twitter前端也采用了JS模板引擎,于是便整体浏览了下twitter使用到的js,做个简单的记录分析。

以http://twitter.com/#!/mops_2010 为研究对象

主要采用的分析工具:Firebug以及http://www.strictly-software.com/unpacker

内嵌JS待分析
以下为加载的JS:
1. 加载GA
2. 加载http://a3.twimg.com/sticky/base.21.bundle.js
3. 加载http://a1.twimg.com/a/1306441242/javascripts/api.bundle.js
4. 加载http://a3.twimg.com/a/1306441242/javascripts/phoenix_plugins.bundle.js
5. 加载http://a2.twimg.com/a/1306441242/javascripts/phoenix.bundle.js

1. 跳过。
2. base.21.bundle.js中包含jQuery, easyXDM(Using for Cross-Domain), 以及Twitter自己的our JavaScript rules:
function h(A) 采用div的text()和html()方法来过滤html标签
function _(B, A) 貌似是语言包?待确定,涉及3个对象方法twttr.is.object(B), twttr.util.getTranslation(C, D), Mustache.to_html(C, A)
接下来是一个闭包,闭包中function C(G, K)用来注册全局对象
下面就是用这个C方法来注册一系列的全局对象
首先是twttr对象,其属性有
provide = C
augmentObject
aug
augmentString
augString
each
localize
filter
map
every
inject
reduce
memoizing
merge
extend
method
methods
statics
at
klass
magic
bind
然后是设置twttr.klass.mixin(E, D) = twttr.magic(E, D)
接着再注册twttr.is对象,其属性有:
element
bool
nil
def
number
fn
array
string
blank
falsy
object
regex
inArray
接着注册twttr.assets对象,其属性有:
getPathFromAbsoluteURL
path
stringToBucket
然后是注册twttr.EventProvider对象,其属性有:
events: null
_provider
_createEvent
trigger
bind
one
unbind
(完)

  • Share/Save/Bookmark

使用HTML5本地存储local storage示例

April 13th, 2011 by Dream☆Wing 2 comments »

http://www.graphicpush.com/using-localstorage-api-as-a-light-database

  • Share/Save/Bookmark

创业公司CEO每天应该做的13件事

April 7th, 2011 by Dream☆Wing 1 comment »

Mr. Jamie说,一般人大概很难想像创业公司 CEO 的工作有多难,你的公司在烧钱,说不定只剩下 6 个月的粮草,你怎么可能不担心?偏偏在团队面前你又必须装作若无其事,一切都在你的掌控之中。

Jason Goldberg 整理了一个列表,列出创业公司CEO每天应该做的13件事,以下是36氪编译版本:

  1. 记住你的“一件事”:你的创业公司在一段时间内只能把一件事做好,明确你的“一件事”,写在墙上,每天重复出现在自己眼中,将“一件事”作为公司例会最高级别的事情,不要让任何事情让你和你的团队分心。
  2. 记住,只有当你的团队优秀时,你才一起优秀:花时间培养你的团队,招聘那些在他们工作上比你曾经做得更棒的人,激励他们,让他们完成他们从来没想过他们能做到的事情,在引导他们去做“一件事”的同时给他们自由,像对待家人那样对待你的同事,创业不容易,让你的团队愿意成为公司一员是能够成功的重要因素,创业公司并不只是一个工作的地方,更是一种生活的方式,作为CEO,你的工作不是把每个人的工作都做了,你的工作是帮助他们把工作做得更好,确保定期给你的主管们反馈,告诉他们你的期望,需要他们改进哪些地方。
  3. 设定风格:每个人 – 你的同事,客户,合作伙伴,投资者,你的Twitter和Facebook关注者 – 都会从你身上得到暗示。从你公司的增值速度,数据,创新,客户服务直到公司文化都会反映出你作为一个CEO的职能,所以,不要做一个粗鲁的混蛋,付出行动,如果你希望人们想到你公司时是按照你想让他们想的那样,你需要付出行动并从个人做起。如果你自己无精打采,你的公司也会,如果你忘记微笑,你的公司也会,如果你缺乏耐心,你的公司也会,如果你不说请和谢谢,你的公司也会,公司高于每个人,但公司是由每个人和每个人的工作风格反映出来的,而你是领导者。
  4. 花至少75%的个人时间在你的产品上:只有当你的产品优秀的时候,你的公司才能优秀,亲自参与管理功能和用户利益,我的观点是CEO必须是首席产品官,作为CEO你必须为屏幕上每一个像素负责,我知道这听起来有点过了但是你的产品是你们所有努力工作对用户的输出,所以它的每个功能都应该反映出你们的目标和目的。
  5. 审视数字:我不是在谈论预算和现金流,而是一些关键指标,每周发一封邮件给你的团队,提炼出那些影响公司业务的关键数据,亲自写这封邮件,写邮件会强迫你自己去挖掘和分析你的数据,真正拥有那些数据,让你的工作能够确保公司的每个人都能专注在那些能给公司带来业务的数字上。
  6. 锻炼:我实在忍不住要强调这一点,让自己每周去至少4次健身房,最好是5-6次,锻炼能给你能力和耐心去解决复杂的问题,作为CEO对身体是很大的挑战,让健身房作为一个使自己头脑清醒和保持快活的一种方式,如果你还没有这么做,我保证去了之后你会震惊的,当你有规律的出去锻炼你会发现生活是多么的容易!离开你的键盘,去健身!
  7. 要求反馈:你猜怎样?你并不像你认为的那样聪明,你会犯错误,去问你的雇员,你的客户,你的合作伙伴等,确保你的管理团队中有一个人敢直言不讳,确保你有一个董事会之外的成员或朋友能够给在公司发展上给你提供建议(例如在融资上,董事会管理上)。
  8. 离开办公室:人们太容易生活躲在键盘后面,生活在收件箱里,离开办公室,去和你真正的客户,合作伙伴,供应商,博主们讨论
  9. 写博客,写微博,阅读,参与CEO论坛:写类似于这篇的文章,分享你学到的经验教训,和你工作的技巧等,不要担心没人看,从网络中获得反馈,阅读Hacker News,看其他创业者和科技极客们在分享什么,利用投资者的网络从其他CEO那里获得建议。
  10. 管理现金:现金是你的生命线,你必须一直清楚你还剩多少现金,能够你维持你多久,什么样的决定会影响你的现金状况,不要等到需要钱的时候才去融资。
  11. 像投资者一样去做:在每周结束的时候,问问你自己下面的问题:我们这周所做的提升了我们的价值么?过去的一周你对时间的投资回报率是多少?如果你连续2周或者一个月内有2周没有一个积极的投资回报率,你可能就在做错误的事情了。
  12. 享受乐趣:这很难,需要很大的精力,确保每一天都是愉快的一天,即使很糟糕的一天也需要一下乐趣,如果你觉得不快乐,你可能在作错误的事情,我最喜欢的一句格言:成熟,但不要长大。
  13. 爱:爱你的公司,爱你的同事,爱你的投资者,爱你的合作伙伴,爱你的供应商,但最重要的是,爱呆在家里等你的人 – 那些支持你让你能够日复一日战斗在最前线的人!

转载自@36氪

  • Share/Save/Bookmark

关于memcached的PHP扩展

March 27th, 2011 by Dream☆Wing 1 comment »

刚接触”memcache”时,一直被”memcache”的正确写法究竟是”memcache”还是”memcached”所困扰。今天在查如何配置session保存到”memcache”时,又遇到了各种版本困扰的问题,于是整体整理一下,如下:

首先,无论memcache还是memcached,所指的系统都是memcached内存对象缓存系统

至于,为什么有memcache,这得从PHP的扩展说起,memcached是一个开源的系统,最初在PECL中出现的是一个叫memcache的PHP扩展(04年),按照memcached的接口实现的。

在09年某月某日的时候,PECL中又出现了一个叫memcached的PHP扩展,很好,这下有3个概念了。

1. 服务器跑的进程是memcached系统

2. 实现memcached接口的PHP扩展之PECL/memcache

3. 实现memcached接口的PHP扩展之PECL/memcached

无论使用哪种PHP扩展,在服务器安装都需要先安装memcached,最新的版本为1.4.5(安装文档可参考该篇文章

而PECL/memcache和PECL/memcached则也有各自的版本(与memcached系统的版本号无关)

PECL/memcache 2.*系列的版本最新stable版为2.2.6(这也是在phpinfo中查看的memcache扩展的版本号),PECL/memcache 3.*版本最新为3.0.5beta版

PECL/memcached 1.*系列的版本最新stable版为1.0.2,2011-03-13则提交了2.0.0b1版

这里有这两个扩展的对比表,简单翻译如下:

这两个扩展都支持最基本的操作,比如多组服务器,读写值,值的增减以及获取服务器的统计信息。

这里是一些更为高级的特性和信息。

pecl/memcache pecl/memcached
首次发布日期 2004-06-08 2009-01-29 (beta)
活跃发展? Yes Yes
依赖的外部组件 None libmemcached
特性
key的自动修正1 Yes No
追加/预置Prepend No(注:从3.0.0开始已增加对Append/Prepend的支持) Yes
自动序列化2 Yes Yes
二进制协议 No(注:从3.0.0开始已增加对二进制协议的支持) Optional
CAS3 No(注:从3.0.0开始已增加对CAS的支持) Yes
压缩 Yes Yes
通信超时 Connect Only Various Options
Consistent Hashing4 Yes Yes
延迟获取 No Yes
一次获取多值Multi-Get Yes Yes
支持Session Yes Yes
读写到指定的一个服务器 No Yes
存储数值 Converted to Strings Yes
  1. pecl/memcache会自动转换无效的key为有效。pecl/memcached则会返回false。
  2. 你无须对对象、数组进行序列化,这两个客户端都会自动完成序列化的过程。
  3. CAS:Memcached于1.2.4版本新增CAS(Check and Set)协议类同于Java并发的CAS(Compare and Swap)原子操作,处理同一item被多个线程更改过程的并发问题。
    在Memcached中,每个key关联有一个64-bit长度的long型惟一数值,表示该key对应value的版本号。这个数值由 Memcached server产生,从1开始,且同一Memcached server不会重复。在两种情况下这个版本数值会加1:1、新增一个key-value对;2、对某已有key对应的value值更新成功。删除 item版本值不会减小。参考:http://langyu.javaeye.com/blog/680052
  4. Consistent Hashing:Memcached分布式的一种策略,比余数策略要好很多,具体原理可以参考这里,在pecl/memcache 3.0.0之前,默认的策略为stardard,即余数策略,在3.0.0之后则默认为consistent。可以通过php.ini里修改memcache.hash_strategy = consistent来指定。

从pecl/memcache的3.0.0开始,对原先许多不支持的特性进行支持,具体可以参考changelog,对二进制协议的支持可以通过memcache.protocol = {ascii, binary}来设置,并且修改了默认的设置:

memcache.hash_strategy = consistent(在3.0.0之前默认是stardard,即余数策略)

memcache.chunk_size = 32768(在3.0.0之前默认是8192,说明中也提到这个参数指数据传输块大小,这个值越小网络I/O次数越多,如果发现莫名的速度降低, 可以尝试将此值调至32768,所以在3.0.0中干脆直接默认值就是32768了)

当然pecl/memcache 3.0.*还没有stable版本发布,所以相比较而言,pecl/memcached 1.0.2 stable版就比pecl/memcache 2.2.6 stable版功能要强大些(二进制协议和CAS的支持),但是pecl/memcached 1.0.2 stable版也有一些不支持的功能,比如不支持发生错误时(对用户)透明的转移到其他服务器(即memcache.allow_failover ),也不支持持久连接等等。

在社区看到有人讨论,pecl/memcached有项功能getServerByKey,可以返回key所映射的服务器,这对于调试很是方便。

现在在pecl/memcache 3.0.5 的changelog中也加入了类似的功能MemcachePool::findServer(key)

目前我们用的是pecl/memcache 2.2.5,期待3.0系列的stable版!

最后,回到今天的问题上来,如何保存session到memcached中

对于pecl/memcache设置如下:

session.save_handler = memcache

session.save_path = "tcp://host1:11211, tcp://host2:11211"

(注:每个url可以包含参数,这些参数于方法Memcache::addServer()的参数相同。比如: “tcp://host1:11211?persistent=1&weight=1&timeout=1&retry_interval=15″

对于pecl/memcached设置如下:

session.save_handler = memcached

session.save_path = "host1:11211, host2:11211"

注意:无tcp协议标识符

key
  • Share/Save/Bookmark

html5资源

March 20th, 2011 by Dream☆Wing No comments »

JS APIs:

选择器

Web Storage

Web SQL Database

Application Cache API

Web Workers

Web Sockets

Web Notifications

Drag and drop

Geolocation

HTML:

新的语义标签

新链接关系、Microdata、ARIA attributes

新表单元素类型

Audio + Video

Canvas 2D

Canvas 3D(WebGL)

SVG

DEMOs:

转自:http://directguo.com/blog/index.php/2010/08/html5_resources/

  • Share/Save/Bookmark