文件管理控件elfinder中的一个小bug

2015年6月27日 没有评论

最近项目中用到了elfinder这个控件,用下来总体效果不错,可配置性很强,也能够根据自己的需求增加自定义菜单,但是在测试的过程中发现了一个小bug,记录一下。

如果用firefox浏览器访问www.elfinder.org,选中Test文件夹后,用鼠标悬浮到上传文件的icon上,本来应该显示“Upload files”的tooltip却显示为了“No files selected”,看了下原因,貌似是firefox浏览器在解析如下html代码的时候,会将子元素input的tooltip覆盖父元素的title属性。

<div class="ui-state-default elfinder-button ui-state-disabled" title="Upload files">
<form style="display: none;">
<input type="file" multiple="multiple" />
</form>
</div>

 

原因找到了就好办了,只需要把input的title属性动态地设置成”Upload files”就可以了,可以在init事件中添加该行为。

$(".elfinder-button form input[type='file']").attr('title', nls.uploadFiles);

 

CSS之阴影效果

2015年5月18日 没有评论

在CSS3中,引入了一个box-shadow属性,可以非常方便地给元素增加阴影效果,在各种电商网站中,非常常见,加了阴影效果以后,图片可以突出显示,减少了视觉疲劳。

下面就是一个CSS的往四周扩散的阴影效果,同时加入了对IE6-8的支持:

#box {
   zoom: 1; //触发hasLayout
   filter: progid:DXImageTransform.Microsoft.Shadow(Color=#cccccc, Strength=5, Direction=0),
         progid:DXImageTransform.Microsoft.Shadow(Color=#cccccc, Strength=5, Direction=90),
         progid:DXImageTransform.Microsoft.Shadow(Color=#cccccc, Strength=5, Direction=180),
         progid:DXImageTransform.Microsoft.Shadow(Color=#cccccc, Strength=5, Direction=270);
   box-shadow: 0 0 5px #cccccc;
   -webkit-box-shadow: 0 0 5px #cccccc;
   -moz-box-shadow: 0 0 5px #cccccc;
}
分类: CSS, 语言 标签: ,

Javascript中函数前面感叹号,加号的意思

2015年5月12日 没有评论

在Javascript的开发以及学习过程中,我们经常能看到函数前面加个感叹号或者是加号的写法。

比如:

bootstrap的JS组件就是采用了加号的写法:https://github.com/twbs/bootstrap/blob/master/dist/js/bootstrap.js

再比如:

大众点评官网编译出的好多JS插件都是采用了感叹号的写法。

那么为什么要加感叹号以及加号呢?原因很简单,先看下面的代码,写过jQuery插件的都知道jQuery插件的套路写法就是:

(function($) {         
  //...  
})(jQuery);

在function外面多加的一个括号是为了保证这个匿名函数能够被当做函数表达式来执行,如果不添加function外层的括号的话,浏览器就会报错。

我们再回到函数前加感叹号以及加号的问题,其实道理是一样的,就是为了保证匿名函数能够被当做函数表达式来执行而已,而且这种写法有一丝丝好处是比较清楚地标示了这个匿名函数,大括号的写法你还得在一大坨代码中去寻找右括号在哪里,如果没有编辑器的帮助的话有点费眼力。

分类: Javascript, 语言 标签:

在Javascript中应该如何判断数据类型

2015年5月8日 没有评论

引子


在实际的前端项目中,我们经常需要判断某个数据是否是数组,或者是否是函数,自己之前经常的写法就是instanceof,但是在看美国peer的代码的时候,看到了一个这样的写法Object.prototype.toString.call(x) === ‘[object Array]‘,感觉很奇怪,于是就搜索了一下,就有了这篇博文。

 

为什么不用typeof


初学javascript的话,一定会有这个疑惑,typeof和instanceof,这两货到底有啥区别?实际上typeof的返回值只有六个: undefined, boolean, number, string, function以及object,无法判断数组,但是呢,instanceof就可以,所以很多情况下使用instanceof就可以了。

 

那干嘛不用instanceof


确实在很多情况下,instanceof就可以了,但是呢,如果一个页面包含多个frame的话,这样的判断方法就失效了,我们来看下面这个例子:

v instanceof Array

如果v是来源于另外一个frame的数组对象,那么此时该表达式返回的是false,因为v只是anotherFrame.contentWindow.Array的实例,并不是当前frame的数组的实例。

 

我该用啥


如果是原生的javascript的话,用Object.prototype.toString.call(x) === ‘[object Array]‘类似的语句就可以很好地判断对象的数据类型了。

如果在项目中使用到了underscore或者是lodash’的话,那么恭喜你,你可以使用它们提供的isArray, isNumber, isFunction, isRegExp等方法来判断数据类型。

如果你的项目是nodejs的话,那么你可以使用util这个模块:

var util = require("util");
var a = [];
console.log(util.isArray(a));

[转]来,让我们谈一谈 Normalize.css

2015年4月23日 没有评论

本文转自http://jerryzou.com/posts/aboutNormalizeCss/

本文译自Normalize.css官网: http://nicolasgallagher.com/about-normalize-css/

Normalize.css 只是一个很小的CSS文件,但它在默认的HTML元素样式上提供了跨浏览器的高度一致性。相比于传统的CSS resetNormalize.css是一种现代的、为HTML5准备的优质替代方案。Normalize.css现在已经被用于Twitter BootstrapHTML5 BoilerplateGOV.UKRdioCSS Tricks 以及许许多多其他框架、工具和网站上。

综述

Normalize.css是一种CSS reset的替代方案。经过@necolas@jon_neal花了几百个小时来努力研究不同浏览器的默认样式的差异,这个项目终于变成了现在这样。

我们创造normalize.css有下面这几个目的:

  • 保护有用的浏览器默认样式而不是完全去掉它们
  • 一般化的样式:为大部分HTML元素提供
  • 修复浏览器自身的bug并保证各浏览器的一致性
  • 优化CSS可用性:用一些小技巧
  • 解释代码:用注释和详细的文档来

Normalize.css支持包括手机浏览器在内的超多浏览器,同时对HTML5元素、排版、列表、嵌入的内容、表单和表格都进行了一般化。尽管这个项目基于一般化的原则,但我们还是在合适的地方使用了更实用的默认值。

Normalize vs Reset

知道Normalize.css和传统Reset的区别是非常有价值的。

1. Normalize.css 保护了有价值的默认值

Reset通过为几乎所有的元素施加默认样式,强行使得元素有相同的视觉效果。相比之下,Normalize.css保持了许多默认的浏览器样式。这就意味着你不用再为所有公共的排版元素重新设置样式。当一个元素在不同的浏览器中有不同的默认值时,Normalize.css会力求让这些样式保持一致并尽可能与现代标准相符合。

2. Normalize.css 修复了浏览器的bug

它修复了常见的桌面端和移动端浏览器的bug。这往往超出了Reset所能做到的范畴。关于这一点,Normalize.css修复的问题包含了HTML5元素的显示设置、预格式化文字的font-size问题、在IE9中SVG的溢出、许多出现在各浏览器和操作系统中的与表单相关的bug。

可以看以下这个例子,看看对于HTML5中新出现的input类型searchNormalize.css是如何保证跨浏览器的一致性的。

/**
 * 1. Addresses appearance set to searchfield in S5, Chrome
 * 2. Addresses box-sizing set to border-box in S5, Chrome (include -moz to future-proof)
 */

input[type="search"] {
  -webkit-appearance: textfield; /* 1 */
  -moz-box-sizing: content-box;
  -webkit-box-sizing: content-box; /* 2 */
  box-sizing: content-box;
}

/**
 * Removes inner padding and search cancel button in S5, Chrome on OS X
 */

input[type="search"]::-webkit-search-decoration,
input[type="search"]::-webkit-search-cancel-button {
  -webkit-appearance: none;
}
3. Normalize.css 不会让你的调试工具变的杂乱

使用Reset最让人困扰的地方莫过于在浏览器调试工具中大段大段的继承链,如下图所示。在Normalize.css中就不会有这样的问题,因为在我们的准则中对多选择器的使用时非常谨慎的,我们仅会有目的地对目标元素设置样式。

A common sight in browser debugging tools when using a CSS reset

4. Normalize.css 是模块化的

这个项目已经被拆分为多个相关却又独立的部分,这使得你能够很容易也很清楚地知道哪些元素被设置了特定的值。因此这能让你自己选择性地移除掉某些永远不会用到部分(比如表单的一般化)。

5. Normalize.css 拥有详细的文档

Normalize.css的代码基于详细而全面的跨浏览器研究与测试。这个文件中拥有详细的代码说明并在Github Wiki中有进一步的说明。这意味着你可以找到每一行代码具体完成了什么工作、为什么要写这句代码、浏览器之间的差异,并且你可以更容易地进行自己的测试。

这个项目的目标是帮助人们了解浏览器默认是如何渲染元素的,同时也让人们很容易地明白如何改进浏览器渲染。

如何使用 normalize.css

首先,安装或从Github下载Normalize.css,接下来有两种主要途径去使用它。

  • 策略一:将normalize.css作为你自己项目的基础CSS,自定义样式值以满足设计师的需求。
  • 策略二:引入normalize.css源码并在此基础上构建,在必要的时候用你自己写的CSS覆盖默认值。

结语

无论从适用范畴还是实施上,Normalize.cssReset都有极大的不同。尝试一下这两种方法并看看到底哪种更适合你的开发偏好是非常值得的。这个项目在Github上以开源的形式开发。任何人都能够提交问题报告或者提交补丁。整个项目发展的过程对所有人都是可见的,而每一次改动的原因也都写在commit信息中,这些都是有迹可循的。

分类: CSS, 语言 标签:

[转自淘宝UED]Reset CSS研究(八卦篇)

2015年4月23日 没有评论

八卦为先

八卦是种优良品质,特别是用在技术上时。来看几个Reset CSS的八卦问题吧:

  1. 你知道世界上第一份reset.css在哪么?
  2. * { margin: 0; padding: 0 }人品很坏吗?
  3. Eric Meyer和YUI是情侣吗?
  4. Google有用reset.css吗?
  5. No CSS Reset的口号是谁最先提出来的?

类似问题或者说困惑还能列举很多,reset.css极其简单又极其不简单。继续挖掘八卦之前,请先关机遐思,或去如厕更衣透透气,想想后再读下文。

不是历史

2004年,遥远又如近在眼前的昨天,Tantek被不同浏览器下默认样式的差异搞烦了,于是琢磨中写了一个undohtml.css, 这就是第一个八卦问题的答案。

对于基于Gecko引擎的Firefox等浏览器,请在地址栏中输入resource://gre/res/html.css,默认样式就这样裸体着呈现在面前了。CSS界的Guru级人物Eric Meyer立刻就嗅探到了html.css的有趣性:Really Undoing html.css. 知道CSS好玩,实在没想到CSS居然这么好玩。比如style, script { display: block }就可以显示CSS和JS源码,在做代码演示的demo页时,就不用辛辛苦苦用pre或textarea了(虽然因为ie不支持导致不实用,不过这的确是个思路)。

继续八卦:CSS Negotiation and a Sanity Saving Shortcut* { margin: 0; padding: 0 }的学名是Global White Space Reset. 从原文中可以看出这个方法刚问世时是非常火爆的,并且作者建议一定要先破后立,要将清扫差异和重置默认样式结合起来,这样才是正确的做法。

为何Global White Space Reset当初风光一时,如今却黯然销魂?* { margin: 0; padding: 0 }的成功之处在于,管你三七二十八,统统抹平,人人生而平等!然而其失败之处也正是因为其威力太大,虽然捣了蜂窝得了蜜,却惹来群蜂追尾,麻烦无限(因为被抹平的样式,你得再重新设置回来,比如input的padding等)。这就如西汉一代名将韩信哪,是成也萧何,败也萧何!

还有一个传说中的说法是,星号*选择符还会导致性能问题。由于一直没找到可靠的资料,我又不知道怎样才能测试CSS选择符的渲染性能(知道的请一定告诉我),这个传说中的性能问题就只能当它是传说了。

眨眼一瞬间,三年就过去了。2007年,Eric Meyer的一篇文章Reset Styles, 重新唤起了一股reset热潮。这篇文章里有第3个八卦问题的答案:Eric的reset.css是源自YUI的,可能是母子关系,但总之不是情侣关系。

很快,Eric发布了第二版:Reworked Reset. 后面的解释极具价值,很多属性值的设置在这里有详尽说明。

火爆的回复给了Eric源源不断的动力:Reset Reloaded. 看完这篇文章,有一种尘埃落定的感觉。

但上面的文章并不是最终版本,2008年2月份,Eric Meyer还更新了一次:CSS Tools: Reset CSS

说完Eric Meyer的心路历程,不得不提一下YUI Reset CSS. 创始人是Nate Kokechley. 去年北京D2论坛上还见过一面,前不久已离开YAHOO,让我的直觉里对YUI都有点担心起来了,唉。

上面是两个最有名的CSS Reset方案。但世界永远是多样化的,比如Less is more – my choice of Reset CSS. 这和Eric Meyer的期望其实是一致的:不同的应用环境下,应该选择自己的reset方案,而不是简单的copy过去。比如Google首页,在这种特定页面里,不用就是一种最好的用。

更多眼花缭乱的Reset方案请参看:A Killer Collection of Global CSS Reset Styles. 很标题党,内容就鱼龙混杂了。

最后,隆重揭晓最后一个八卦问题的答案:No CSS Reset. 提倡的核心思想也是Less is more. 原因很简单,* { margin: 0; padding: 0 }杀伤力太大,在某些场合下,Eric Meyer的方案杀伤力也还是太大了。有想法并说出来,总是好的。

有反对就会有支持:Why I Like (and Use) Reset CSS. 公说公有理,婆说婆有理,并非所有问题都需要一个确切的答案,有时过程本身,就是追求的结果。

Eric Meyer对No CSS Reset一文的回复:Crafting Ourselves. 读罢此文,明月松间照,清泉石上流。下面摘录两段,做为此八卦闲文的完结:

Because this isn’t a field of straightforward answers and universal solutions. We are often faced with problems that have multiple solutions, none of them perfect. To understand what makes each solution imperfect and to know which of them is the best choice in the situation—that’s knowing your craft. That’s being a craftsman/craftswoman. It’s a never-ending process that is all the more critical precisely because it is never-ending.

…It’s evidence that we continue to challenge ourselves and each other to advance our skills, to keep learning better and better how better to do what we love so much.

预告:下一篇是技术篇,将详细探讨淘宝目前使用的Reset CSS方案,欢迎各位提前准备好板砖,我已购买坚固头盔一顶…… 敬请期待。

参考资料

分类: CSS, 语言 标签:

浅谈程序语言中的鸭子类型(Duck Typing)

2015年4月13日 没有评论

引子


今天在看Underscore的API文档时遇到了一个术语”Duck Typing”,面向对象的编程思想学习了这么久,竟然不知道这个术语是什么意思,赶紧google了一把脑补一下。

 

起源


wiki的解释来看,这个概念的名字来源于由James Whitcomb Riley提出的鸭子测试,“鸭子测试”可以这样表述:

“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”

 

阐释


wiki上的定义如下:

在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定。

wiki上的定义比较绕口,个人的理解就是你不需要去严格地继承自某个类,但是你可以实现该类所具有的一些特征,让这个类即使是鸟,看起来像鸭子就行。

 

例子


个人经常用的动态语言就是Python和Javascript。所以分别找了这两个语言的例子帮助大家进行理解。

 

Python

Python的例子满大街都是,网上抄了一个,如下所示:

#coding=utf-8  
class Duck:  
    def quack(self):  
        print "Quaaaaaack!"  
 
class Bird:  
    def quack(self):  
        print "bird imitate duck."  
 
class Doge:  
    def quack(self):  
        print "doge imitate duck."  
 
def in_the_forest(duck):  
    duck.quack()  
 
duck = Duck()  
bird = Bird()  
doge = Doge()  
for x in [duck, bird, doge]:  
    in_the_forest(x)

这个例子实在简单,我就不多解释了,大意就是Duck,Bird以及Doge虽然没有继承自同一个父类,但是都具有quack方法。

 

Javascript

Javascript的例子来源于Stackoverflow,问题的回答者写的十分风趣,用流行的话说,就是萌萌哒…

链接如下:http://stackoverflow.com/questions/12762550/example-of-javascript-duck-typing

 

回顾Underscore


在Underscore的文档中,有这么一段话涉及到了Duck Typing:

Note: Collection functions work on arrays, objects, and array-like objects such asargumentsNodeList and similar. But it works by duck-typing, so avoid passing objects with a numeric length property. It’s also good to note that an each loop cannot be broken out of — to break, use _.find instead.

意思就是说underscore的collection相关的函数是由Duck typing的方式来编写的,不能传入带有length属性的对象,否则就不正常工作了。

OK,那么我们再来看下Underscore的源代码,我们找个比较简单的each函数来看下,下面的函数依赖于传入参数obj的length,如果obj是个数组的话,那当然没什么问题,但是如果传入参数是一个{length: 100},那就只能呵呵了。

_.each = _.forEach = function(obj, iteratee, context) {
    if (obj == null) return obj;
    iteratee = createCallback(iteratee, context);
    var i, length = obj.length;
    if (length === +length) {
      for (i = 0; i &lt; length; i++) {
        iteratee(obj[i], i, obj);
      }
    } else {
      var keys = _.keys(obj);
      for (i = 0, length = keys.length; i &lt; length; i++) {
        iteratee(obj[keys[i]], keys[i], obj);
      }
    }
    return obj;
  };

 

我是怎样使用 Docker 来帮助 X 系统上的开发工作的(译)

2014年8月20日 没有评论

作者:SEBASTIAN GĘBSKI
译者:brightzhou

对应用进行设置可能会相当复杂,尤其是在 Linux 系统上。不用的应用有不同的配置方法,它们会在不同的文件系统路径下(在不同的 Linux 发行版中,由于应用存在多种变种,这些路径也会有所不同)保存二进制文件和数据。一旦你把系统配置好了,就很难再恢复到之前的状态,尤其是你同时进行了一些其他修改的时候(比如,安装了一些其他应用程序)。这就是为什么最近一些部署工具,比如 Puppet、 Chef、 Ansible 和 Salt,这么流行的原因。但即使有了这些工具的帮助,创建 cookbook/recipe 也许也十分麻烦: Linux 系统并不是以傻瓜化著称的,系统本身并不会阻止你干任何事情。

业界出现了一个新的工具

很幸运的是,对于 Linux 运维人员来说,一个新的工具产生了,而该工具很有可能改变游戏规则:Docker,一个开源的平台,该平台能够以一种轻量级的方式打包应用程序以及它们的依赖。

这到底意味着什么?

Docker 使你能够在 Linux 系统上对不同的应用程序进行隔离,在不同的上下文环境中运行这些程序(这些程序可能执行在一台物理机器上,也可能运行在不同的物理机器上),请记住,这一点是非常重要的:

  • Docker 使用了底层的内核机制做到了资源隔离,而并不需要其他资源消耗型的虚拟化技术,如果想了解更多细节,请点击这里。
  • Docker 镜像(一些保存的快照)以及 Docker 容器(运行时隔离应用程序的容器)与虚拟镜像相比,使用起来快多了。
  • 容器十分灵活,你可以在容器里打包很多应用,你也可以只打包一个,同时你可以尽你所愿来运行容器。
  • Docker 容器里运行着一些镜像,而这些镜像之上有一个层的概念,分层使得你能够很容易地构造你的应用程序(每次操作都可以很容易地回滚/前滚,你只需要简单地增加或是删除层,却不会对下面的层产生影响)。
  • Docker 完美地支持了“一次配置,到处运行”的范式。

在实践中 Docker 是如何工作的?

或者这么讲,至少对于我来说,它是这么工作的:

  1. 我已经在我的本地 Vagrant 环境中指定了 Docker 作为部署工具,Vagrant 从 1.6 版本就引入了这一功能。我相信我不用过多地解释什么是 Vagrant,以及为什么它是 X 平台开发人员必备的工具。
  2. Docker 已经为我自动下载了一些 Linux 发行版的镜像(这些镜像会被 Vagrant 使用,在 hypervisor 上运行)。
  3. 现在我能够以至少两种方式创建我自己的容器(正在运行的,实现资源隔离的应用程序):
    • 第一种方式是制作一个用命令配置好的 Dockerfile ,这个 Dockerfile 基于干净的 Linux 镜像来生成,同时这些命令也使用了非常简单的 DSL (领域特定语言)。这种方式是我比较喜欢的,而且比较有道理。
    • 第二种方式是创建一个运行着终端的全新的容器,这样的话你就可以在终端上执行你自己的命令,来做到你自己想做的事情。
sudo docker build
...
or
...
sudo docker run -i -t <image_name> /bin/bash    

有些重要的事情需要记住

  1. 如果在 Dockerfile 里的命令执行完了,或者是通过 run 这个子命令运行的命令执行完了(因为它们并不是 daemon 程序),那么容器就会关闭并且消失!
  2. 当容器正在运行时,你可以十分方便地:
    • 查看容器中命令的输出(docker logs
    • 挂载到运行的容器(docker attach
    • 列出容器内文件系统的实际变化(记得不同的容器并不能看到其他容器的变化!)(docker diff
    • 暴露并且映射容器中的端口(比如,如果你正在搭建一个应用程序,而该应用程序在容器内已经有了相应的端口)(在 dockerfile 中的 EXPOSE 选项,Docker 命令的 -p 选项)
  1. 如果你想要通过手动执行命令的方式创建你自己的容器(run),你需要存储你自己的镜像 – 首先你需要在正在运行的容器列表里找到你想要的容器,然后执行commit命令:
sudo docker ps
sudo commit <container name>

通过使用以上所有的选项…

…我能够:

  • 使用应用组件的任何组合来组成我的本地开发环境,添加或者删除一个运行时组件就如同开启或者关闭容器那么简单。一旦我关闭了某个应用组件,那么它也从文件系统中完全消失了。
  • 非常方便地(回滚/前滚)创建出独立的,隔离的应用容器,同时又不像虚拟镜像那样会耗费许多时间,也没有不必要的操作系统开销。
  • 实验一系列很有意思的事情,却几乎不会冒重头来过的风险(有鉴于此,Chef recipe已经过时了…)。

…在我做到以上所有事情的同时,我的操作系统却坚如磐石:我不会破坏任何事情,我可以很简单地回滚我做的任何操作。安装其他的容器也不会互相影响。

总之,在几周的时间里,我已经把 Docker 作为了我的主要的软件开发工具。现在我已经无法想象缺少了 Docker 我该怎样进行基于 JVM 的开发工作了


这篇文章由 SEBASTIAN GĘBSKI 撰写,brightzhou 翻译。点击 这里 阅读原文。
The article was contributed by SEBASTIAN GĘBSKI, translated by brightzhou, click here to read the original publication.
分类: 信息技术 标签: ,

Python 2013 精彩回顾:新闻、好文和资源

2014年3月2日 没有评论

本文由 伯乐在线 - brightconan 翻译自 PyPix.com。欢迎加入技术翻译小组。转载请参见文章末尾处的要求。

没想到2013年这么快就过去了,但是2013留给我们的却是互联网上很多优秀的文章、教程、经验以及开源项目。现在,就让我们来回顾一下2013年有关于Python的精彩的开发文章吧。趁着这些文章还没有过时,Python开发者们赶紧看过来了。

下面是有关于Python新闻,好文以及资源的列表。

干货十足,希望你喜欢!

好了废话不多说了,让我们赶紧切入正题…


新闻公告

让我们首先来回顾一下Python社区在2013年的新闻公告。

1. Heroku now supports different Python runtimes.

Heroku现在支持不同版本的Python环境了。只需要在runtime.txt中加入你所需要的Python版本信息,就能实现这个功能了,非常简单。默认的Python版本是64bit CPython 2.7.4。

(译者注:Heroku是一个PaaS平台,现在率属于Salesforce,这货现在支持Ruby,Java,Node.js,Python,Clojure,Scala。译者之前稍微玩过,不过感觉没有Redhat的Openshift好用,功能也没有Openshift强大,与其类似的概念是Google的Google App Engine,Redhat的Openshfit,新浪的Sina App Engine,百度的Baidu App Engine)

2. Two Scoops of Django

这本书是由Django爱好者Daniel Greenfeld和Audrey Roy共同编写的。这本书对于中级的Django开发者来说十分有用,包含了许多Django 1.5的最佳实践。

(译者注:相信玩Python的人大都知道或者玩过Django,译者觉得Django对于Web开发者来说的确足够敏捷,许多网站应该具有的功能Django都已经默认自带了。目前基于Django搭建的有大名鼎鼎的Instagram还有云计算领域著名的OpenStack项目)

3. Codeq: Static Analysis for Python Projects

这是一个非常酷的工具,能够对Python工程进行静态代码分析。还等什么,赶紧登陆GitHub来看看吧。目测该工程现在是以PEP8检查作为标准。

(译者注:该网站现在貌似不能访问,好悲剧:-(。不过译者可以推荐另一个静态代码分析工具叫SonarQube,译者用下来感觉非常不错。静态代码分析能够帮助开发者找出项目里面十分弱智的错误,最好将静态代码分析引入项目构建的过程中去,持续地去分析项目中的代码)

4. PyCon US 2013 Talk Videos

是不是错过了PyCon US 2013?不要烦恼了,所有的演讲都被录了下来,现在都放到了网上,大家都可以看到。非常感谢视频音频组和PyCon US组织者的辛勤劳动。

5. PythonMonk

这是学习Python的一系列免费的交互式的教程。非常不错!

6. Asyncio (Tulip) Merge Into Python 3.4

(译者注:Asyncio是Python3.4引入的一个支持异步IO的模块,Tulip是它的开发代号,该模块几乎是纯python实现的。利用python3.3+的 yield from 特性,可以轻松实现同步语法的异步IO,不必使用回调,译者网上搜了下,该模块的性能似乎比node.js还要好。)


精彩文章

1. Will Scientists ever move to Python 3?

科学家们会开始转向支持Python 3了吗?这篇文章里面作者讨论了这个不可能的任务:将Python 3引入到整个科学届社区。

(译者注:Python 3已经发布了好几年了,但是现在的事实就是Python 3还不足够稳定,还有一坨package没有完全迁移到Python 3上来)

2.A guide to Python frameworks for Hadoop

Hadoop上的Python框架指南。现在每个人都在讨论大数据,而Hadoop就是处理大数据集的最常用的工具。这篇文章将会向你详细介绍Hadoop上的流行的Python框架。

(译者注:这篇文章是写在cloudera的blog上的,cloudera目前来讲应该是大数据领域做得比较成功的startup,值得一读)

3. An introduction to pytest

对pytest的介绍。目前Python的世界里面有许多测试框架,pytest就是其中比较出众的一个。本文是介绍pytest的比较精彩的文章,值得一读。

4. Realtime Django Using Node.js and Redis

使用Node.js和Redis构建实时的Django。本文将介绍如何使用Django,redis和node.js构建实时的应用。

5. Python shortcuts for the Python beginner

Python初学者快速入门。本文对于其他编程语言转到Python的初学者来说非常实用。

6. Of being lazy

本文讨论如何用Python去实现延迟载入,在实现的同时却并不复杂。

7. Better Typography for iPython Notebooks

非常实用的文章,教你怎样使用一点点CSS提高iPython Notebook的可读性和排版美观。

(译者注:译者表示自己玩了好几年Python竟然不知道这货的存在!看了一篇介绍以后觉得这货非常酷,如果能把iPython Notebook应用于计算机科学教学之中,应该会很受学生的欢迎)

8. Virtualenv’s bin/activate is Doing It Wrong

本文作者认为,尽管virtualenv是个不错的工具,但是它包含的bin/active脚本的设计思路却一点也不想unix风格,会导致许多问题。作者接着就给出了许多应该怎么做的建议。

9. Threading in Python

本文介绍了如何在多线程系统中使用Python线程和队列模块,但是本文中没有提到 GIL,在处理Python多线程时GIL这个模块是个重要的考虑因素。

10. Python Is Not Just a Language — It’s a Development Platform

这是一篇非常精彩的文章,每一个Python开发者都应该读一读。Doug Hellmann这本文中给出对Python的很好的回顾。

11. Deploying Django with Salt Stack

部署工具Salt Stack非常棒。大家可以来看看这篇文章学习Salt Stack的基本知识以及如何使用Salt Stack部署Django应用。

12. Getting started with Python for Data Scientists

数据社区DC给立志成为数据科学家的人做了个很好的Python介绍。该社区详细列出了入门以及数据分析所需要的所有的工具和资源。

13. Core Concepts of Django Forms

你是不是对Django表单还是有些不太清楚,或者你想更新一下你的Django表单核心概念的知识?本博客的作者能够帮助你回答这个问题。赶紧来看看吧。

14. Approach: Building a toy template engine in Python

如果你对模板引擎到底是怎样工作的感到困惑,那么就来看看这篇博文吧。本文的作者将引导你一步步建立起一个简单的模板引擎。

15. Python’s magical self

Python魔术一般的self,有些人恨它,有些人不了解它,也有些人不在乎它。在这篇博文里面,作者会用实际的例子来解释Python的self语句。

16. Python Descriptors Demystified

对于Python描述符不太了解,那么赶紧看过来吧!

17. Facts and Myths about Python names and values

Python的变量名和值机制到底是怎样实现的?就让Ned来解释一下吧,本文中包含了大量的例子,非常不错的文章。

18. setup.py vs. requirements.txt

对于setup.py和requirements.txt以及它们的角色总是有许多的误解。许多人会认为它们两个是重复的,并开发出了工具来处理这种“重复性”。

19. Functional linked lists in Python

本文将会告诉你怎么使用函数式编程风格在Python中实现一个链接表。

20. A Guide to Analyzing Python Performance

本文是一个很好的入门教程,教你在Python中如何去分析程序性能。

21. Of Solving the Rubik’s From Scratch

本文详细介绍了如何使用Python去解决魔方问题,文中包含大量代码实例,非常不错。

22. Introduction to Pandas and Vincent

本视频介绍了Pandas以及该项目中的Dataframe和Series对象。接着使用了Vincent这个工具生成了这些对象的可视化视图。

(译者注:Vincent这个项目非常不错,几行Python代码就可以画出很绚丽的图表,妈妈再也不用担心我不会画图了,值得mark)


项目分享

1.radon

你想知道你自己的代码的复杂度是多少吗?或者你想分析你的代码的圈复杂度吗?那么来看看这个项目吧,该项目能够对Python代码进行复杂度分析,赶紧来看看吧!运行一下该项目你就能看到结果了。

2. django-conch

这是一个非常简洁的项目。Django-conch把django shell暴露了出来,可以通过ssh进行访问。如果你想调试远程服务器上的Django应用,你就会觉得该项目非常实用了。

3. pudb

pudb是一个控制台上的Python调试器

(译者注:怀旧风格,感觉回到了最早的Pascal和C编辑器的年代)
4. python-social-auth

Python Social Auth的目标是成为认证所有社交服务的利器。该项目目前支持Django、Flask以及Web.py,并且支持许多服务。如果你在应用里面需要用到这个功能的话推荐你看下。

5. motor

该项目是专为 Tornado应用编写的MongoDB驱动,是以非阻塞方式实现的。

6. elephant

该项目是一个基于S3的key-value存储,并且提供Elastic search检索功能。

7. sublime-bower

非常酷的工具。现在使用Twitter的Bower工具的人可以通过包管理来安装Sublime Text 2了。

8. Pony ORM

Pony ORM这个项目挺好玩的,它会把Python的代码翻译成SQL。并且还有一个图形化的编辑器能够把对象模型转换成Python代码。对于非商业用户来说可以免费使用商业版。

(译者注:该项目确实非常不错,强烈推荐啊)
9. Falcon Framework

Falcon是个高性能的云API框架。Falcon号称与Web框架相比,它能够提供在相同的硬件上服务30倍的请求。有兴趣吗?试试看吧。

10. cherrymusic

该项目是一个用Python编写的音乐流服务器。赶紧把你自己的音乐唱片集推送到你的设备上吧!

11. smiley

Smiley包含了一些命令,能够运行Python程序并监控其执行的过程,能够记录运行过程并生成一个报告。

12. wssh

该项目是websockets桥接的ssh,能够在浏览器中运行ssh shell。非常不错。包含了一个Web界面以及一个服务器。

13. babel

Babel是个Python的国际化库,提供了许多国际化方面的实用工具。

14. regexpbuilder

该项目能够使得你的正则表达式可读性变强,同时易于维护,。写正则表达式时,该项目采用了链式方法以及变量。

15. flask-restful

该项目是一个简单的框架,能够在Flask项目中快速地搭建出REST API出来。

16. pulsar

如果你正在寻找一个Python的web框架,该框架能够很好地支持异步操作的话,恭喜你找到了答案,pulsar是一个并发事件驱动的Python框架。

(译者注:Tornado也是一个支持异步操作的非常著名的web框架,同样也是Python系的)

17. quokka

这是一个基于Flask的内容管理系统,该系统还使用了MongoDB。

18. dejavu

你还在好奇Shazam到底是怎么实现的么?那么就来看看这个用Python实现的声纹识别算法吧!

(译者注:Shazam是一个手机App)

分类: Python, 语言 标签: , , ,

Python程序员必知必会的开发者工具

2014年2月20日 没有评论

本文由 伯乐在线 - brightconan 翻译自 PyPix.com

Python已经演化出了一个广泛的生态系统,该生态系统能够让Python程序员的生活变得更加简单,减少他们重复造轮的工作。同样的理念也适用于工具开发者的工作,即便他们开发出的工具并没有出现在最终的程序中。本文将介绍Python程序员必知必会的开发者工具。

阅读全文…