使用Html5 video在iPad/iPhone上碰到的几个问题

最近使用mediaelementjs做一个iPad上的Html5的video标签的播放器包装. 首先感谢一下mediaelementjs这样的开源项目, 可用度极高, 代码质量明显比我自己写要好多了, 模块化清晰, 许可证很开放(MIT). 开发的过程中遇到了些浏览器兼容问题, 也涉及到一下iPad这样的平板平板设备上的浏览器与桌面浏览器在用户行为设计上的不同的问题. 下面罗列一下: 0. position:fixed 最著名的应该是iOS5之前的版本不支持css的 position:fixed 了吧. 1. 脱离浏览器的视频播放和全屏问题 在手机上, 如iPhone, 浏览器对video标签的处理, 基本上是直接使用系统的媒体播放器播放. 这时由于已经脱离了浏览器, 所以没有办法在播放视频的同时在屏幕上叠加任何显示元素. iPad好一点, 能在页面内直接播放视频, 但是一但用户选择了全屏播放, 则进入iPhone一样的状态. 只有桌面上的Chrome对这个支持的最好, 全屏状态下依然能够叠加浏览器里元素; Firefox逊色些, 全屏并没有全屏显示,…

Continue Reading

javascript里delete操作符什么时候能成功删除变量?

ECMAScript里关于delete操作符的解释晦涩的很, 实在不是我能理解的. 有兴趣你可以去看看. 实际中使用中, 经常会碰到Javascript变量有时候能成功删除, 有时候却不掉成功删除的情况. 这篇Understanding delete牛文详细解释了, 为什么会这样, 什么样的变量能成功delete, 什么样的不能成功delete. 简而言之, 就是通过"声明"方式创建的变量不能成功删除, 通过"赋值"方式创建的变量能成功删除; 一但一个变量创建后, 它能不能被删除的属性将不会改变. 一个特例是通过eval()函数执行动态代码创建出来的变量,都是可以删除的. 如下面这段代码在Firefox/Chrome/Nodejs里的运行结果如下: [source lang="javascript"] (function(global){ var aaa = "aaa"; bbb = "bbb"; global.ccc =…

Continue Reading

对象赋值时的Javascript prototype chain

在Web程序员应该知道的Javascript prototype原理里,说到了prototype chain. 但是有一点要特别注明一下, 那就是prototype chain只在对对象的方法和属性调用和读取时有效, 遵循沿着prototype查找方法和属性的规律; 但是在对对象属性进行赋值时, 并不遵循这一规律. 在对Javascript对象的属性进行赋值时, 原则是这样的: 1. 如果该对象本身有这个属性, 则对该属性赋值 2. 如果该对象本身没有这个属性, 则在该对象上新建一个该属性, 并进行赋值. (这时不会通过__proto__属性, 找该对象的prototype, 检查prototype上有没有该属性, 然后在prototype的属性上赋值.) 举个简单的例子: [source lang="javascript"] var Car = function(){ this.color…

Continue Reading

Web程序员应该知道的Javascript prototype原理

有同事问了我几个和Javascript的类继承的小问题,我在也不太理解的情况下,胡诌了一通. 回来以后有些内疚, 反省一下, 整理整理Javascript的prototype的原理, 自己清楚点, 也希望对别人也有帮助. 首先js里面没有类这回子事情, 虽然class是js的保留字, 但是到现在也没派上任何用场. 在js里面, 几乎所有的东西都是对象, 函数也是对象, 所以函数可以赋值给别的变量. 另外js对象也可以用数组的方式访问, 也就是说访问obj1.something, 也可以写成obj1['something']. 在js里虽然没有类, 但是有一个在类编程里常用的的概念, Constructor构造器, 或者叫构造函数. 语法上Constructor跟普通的js函数没有区别, 但是Constructor前面加上new关键字就可以产生新的对象. 那么"new Constructor()"这样调用时到底做了什么事情呢? 1. js运行环境首先创建一个空对象 2. 把this变量指向这个对象 3. 把__proto__指向这个构造器的prototype属性…

Continue Reading

Sublime text 2:程序员的编辑器,大家的编辑器

我使用过的编辑器主要有: Ultraedit, VIM, e-Texteditor, Sublime text 2. 基本上是从收费到免费,再到无限期试用. 由于我是个程序员, 编辑器除了用来编辑文本, 主要用来写JavaScript/PHP这样的脚步程序. 直到遇见了Sublime text 2以后, 它基本上满足了所有的要求. 我没用过textmate,不敢说Sublime一定比textmate好, 但是我想至少不会差, 而它不光能在Mac上跑, 也能在Windows和Linux上跑.

下面罗列一下Sublime跟我用过的其他编辑器的简单对比.
(more…)

Continue Reading

如何掌握一个开发语言

* 仔细研读官方文档和一本参考书 * 加入 IRC http://freenode.net/ 上的这个相关channel * 关注 stackoverflow.com 上的相关标签 * 在Github上维护自己的实验项目 * 参加各类会议,与有共同爱好的人交流,Tweet,Blog * 破釜沉舟, 不要给自己留后路, 找借口

Continue Reading

PHP扩展 memcache vs. memcached

两个扩展的介绍基本一样(memcache, memcached),没有任何特别关于他们之间区别的说明. 那我们什么时候应该用哪个扩展呢? Stackoverflow上有比较详细的讨论: using memcache vs memcached with php 和memcache vs memcached 这里还有一个很清晰表格,对比了这两个扩展的具体特性. 主要区别是php memcached扩展比较新,几乎支持memcached的所有特性(如Delayed Get, Append/Prepend等). 但是它依赖libmemcached才能运行(在debian里面包名是libMemcached5). 所以如果你不使用如Delayed Get这样的特性,又不想多依赖libmemcached库, 完全可以使用memcache扩展. 反之请选择memcached扩展. 不过debian和ubuntu上直接用apt-get install php5-memcached安装的php memcached扩展,libmemcached库有些问题. 很多人报告不能正常使用. memcache扩展由于不依赖libmemcached库,没这个问题. 我的debian…

Continue Reading

Log.io: 浏览器里的tail -f

前段时间提到过基于node.js的一个挺好玩的应用TermKit. 现在又碰到一个基于node.js的有意思的应用Log.io. Log.io的目标是在浏览器里实现实时监控日志文件.这跟很多人喜欢在终端上通过tail -f来实时监控日志文件类似. 不过通过node.js的良好的异步模式, Log.io把这个功能很好的在浏览器里搞定了. Log.io由两部分组成, harvester和server. harvester负责监视具体的日志文件,当文件有变化是通知server. harvester可以有多个运行实例, 在不同的机器上收集日志. server则负责处理与使用浏览器监视日志的用户的交互. server只有一个运行实例. Log.io的安装步骤如下. [source language="bash"] #重新以全局模式安装socket.io connect underscore等模块 su - npm uninstall socket.io connect underscore npm install -g socket.io…

Continue Reading

TermKit, 图形化的Linux终端

node.js这两年异军突起,基于node.js的工具也越来越多.

TermKit就是这两天网络上讨论很多的一个工具.从TermKit作者的blog看,这是运行在Mac,以node.js写服务端,以js+webkit来写客户端,实现的一个图像化的Terminal终端工具.

作者只做了Mac上的开发.我搜索了一个,看到已经有人做了Linux+Chrome的移植.下载下来是了一下,运行不出结果,就在github上comment了一下,没想到作者马上就修正了.
(more…)

Continue Reading

joomla编辑theme时导致文件权限变成不可写的问题

最近我编辑joomla的Gantry theme的时候,经常碰到css等文件,保存以后变成不可写“unwritable”的情况。 把这些文件的权限改成755,通过joomla一编辑保存,又变成555了。 在网上Google了一下,发现碰到这个问题的人还真不少。 比如这里和这里,都用一堆人说这事。Gantry theme的用户也说这事。 开始我以为是apache或者php什么地方的配置有问题。但是写了个简单的php脚本,跑了一下发现没这个问题,创建出来的文件的权限很正常。 直到看到这篇文章,才发现这是个老问题,从2006就有人不停的在抱怨了。 起因就是在joomla的模板组件的controller文件administrator/components/com_templates/controller.php里有这么几行代码: [source lang="php"] // Try to make the template file unwriteable if (!$ftp['enabled'] && !JPath::setPermissions($file, '0555')) { JError::raiseNotice('SOME_ERROR_CODE', JText::_('Could not make the…

Continue Reading

End of content

No more pages to load