Bash Pitfalls: 编程易犯的错误(一)

Bash Pitfalls 文章介绍了40多条日常 Bash 编程中,老手和新手都容易忽略的错误编程习惯。每条作者在给出错误的范例上,详细分析与解释错误的原因,同时给出正确的改写建议。文中有不少引用的文章,也值得大家仔细阅读。仔细阅读了这篇文章后,收获很多,不感独享,把这篇文章以半翻译半笔记的形式分享给大家。

本篇翻译一共分成四篇文章,以下是索引:

1. for i in $(ls *.mp3)

Bash写循环代码的时候,确实比较容易犯下面的错误:

for i in $(ls *.mp3); do    # 错误!
    some command $i         # 错误!
done

for i in $(ls)              # 错误!
for i in `ls`               # 错误!

for i in $(find . -type f)  # 错误!
for i in `find . -type f`   # 错误!

files=($(find . -type f))   # 错误!
for i in ${files[@]}        # 错误!

这里主要两个问题:

我们不能避免某些文件名中包含空格,Shell会对$(ls *.mp3)展开的结果会被做单词拆分(WordSplitting)的处理。假设有一个文件,名字为01 - Don't Eat the Yellow Snow.mp3,for循环处理的时候,会今次遍历文件名中的每个单词:01, -, Don't, Eat等等:
继续阅读

Shell 编码风格

Scripting with style 是少见的一篇介绍 Shell 编码风格 的文章,相信对大多数运维人员有用,现在将译文献上。

缩进准则

我一般使用2个空格来缩进(尽管大多人使用4个空格),原因是:

  • 输入简单快速;
  • 没有输入一个Tab键,避免不同环境下显示的差异问题;
  • 缩进的效果已经足够,并且没有浪费太多的空间;

译者注:本人也是使用4个空格,如果你也与本文作者的风格不一样,下面说到2个空格的地方请自觉替换成你实际使用的空格数。个人认为,缩进只是一个个人的风格,只要不影响可读性即可。

顺便说一句,尽量不要使用Tab键,它们容易带来麻烦,我只能想到一种情况下它是有用的:here document中的缩进。
继续阅读

MySQL Python 教程(二)

原文链接:http://zetcode.com/databases/mysqlpythontutorial/
翻译作者:kodango dangoakachan at foxmail dot com
译文链接:
a. https://kodango.com/mysql-python-tutorial-part-one
b. https://kodango.com/mysql-python-tutorial-part-two

译者注:本文的前半部分请看上一篇文章

字典游标

在 MySQLdb 模块中有许多种游标类型。默认的游标类型以元组的元组形式返回数据。当我们使用字典游标时,这些数据是以Python字典的形式返回。这样一来,我们就可以通过列名来访问数据。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import MySQLdb as mdb
import sys

con = mdb.connect('localhost', 'testuser', 
    'test623', 'testdb')

with con:

    cur = con.cursor(mdb.cursors.DictCursor)
    cur.execute("SELECT * FROM Writers")

    rows = cur.fetchall()

    for row in rows:
        print "%s %s" % (row["Id"], row["Name"])

继续阅读

MySQL Python 教程(一)

原文链接:http://zetcode.com/databases/mysqlpythontutorial/
翻译作者:kodango dangoakachan at foxmail dot com
译文链接:
a. https://kodango.com/mysql-python-tutorial-part-one
b. https://kodango.com/mysql-python-tutorial-part-two

关于本教程

这是一份介绍用Python语言操作MySQL数据库的教程,覆盖了基础的Python MySQL编程内容。本教程中使用了MySQLdb模块,文中的例子在Ubuntu系统下运行和测试。

译者注:我使用ArchLinux,会在文中添加与ArchLinux相关的内容,例子也会一一在ArchLinux下验证。

在本站中,有许多与本文类似的教程,其中包括PostgreSQL PythonMySQL Visual BasicMySQL PHP。如果你需要更新与Python语言相关的知识,在这里还有一份完整的Python教程。你也可以考虑阅读MySQL教程

关于MySQL数据库

MySQL是一个领先的开源数据库管理系统。它是一个多用户,多线程的数据库管理系统。MySQL在网上非常流行,它与Linux、Apache、PHP一起组成LAMP平台,这是一个非常流行的Web平台。目前,MySQL是由甲骨文拥有。MySQL数据库可用于最重要的几个操作系统上。它能够运行在BSD UNIX,Linux,Windows或Mac操作系统之上。

继续阅读

理解 Python 语言中的 defaultdict

原作者: Jason Kirtland
日期: January 13th, 2009
许可证: Creative Commons Attribution-Share Alike 3.0
原文链接(PPT): http://discorporate.us/jek/talks/defaultdict/
翻译作者:kodango <dangoakachan@foxmail.com>
翻译时间:March 17th, 2012

今天看到一篇讲defaultdict的PPT,同时第一次见到__missing__()这个方法,好奇之下,仔细阅读了这篇PPT。看完之后随手做笔记,分享给有需要的人。准确地说,这篇文章不是纯粹的翻译,因为原文本身只是一份PPT。文章的大多数文字内容,都是本人的阅读心得。

默认值可以很方便

众所周知,在Python中如果访问字典中不存在的键,会引发KeyError异常(JavaScript中如果对象中不存在某个属性,则返回undefined)。但是有时候,字典中的每个键都存在默认值是非常方便的。例如下面的例子:

strings = ('puppy', 'kitten', 'puppy', 'puppy',
           'weasel', 'puppy', 'kitten', 'puppy')
counts = {}

for kw in strings:
    counts[kw] += 1

该例子统计strings中某个单词出现的次数,并在counts字典中作记录。单词每出现一次,在counts相对应的键所存的值数字加1。但是事实上,运行这段代码会抛出KeyError异常,出现的时机是每个单词第一次统计的时候,因为Python的dict中不存在默认值的说法,可以在Python命令行中验证:

>>> counts = dict()
>>> counts
{}
>>> counts['puppy'] += 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'puppy'

继续阅读

JavaScript 最佳实践

原文链接:http://www.javascripttoolbox.com/bestpractices/
翻译声明:非逐句逐字翻译,若有翻译不当,纯属搞笑。
翻译状态:未完成

介绍

这篇文档是一份清单,它罗列了一系列开发JavaScript代码的最佳的编程实践和首选的编程方法。文档中的每条内容都基于JavaScript社区中众多开发者的意见和经验总结而来。但是,这些条款仅仅是一些建议,而并非需要绝对遵守的原则,一些经验丰富的开发者对于以下描述的内容,可能会持有些许不同的意见。

始终使用var关键字

JavaScript中变量只有两种作用域范围:全局作用域和函数作用域, 使用var关键字对于保持变量作用域清晰是至关重要的。当声明一个变量作为全局变量或者函数级的变量(译者注:函数内部声明的变量,也就是在函数内部的局部变量), 始终在声明的最前面添加var关键字。下面的例子强调不使用var关键字会造成的潜在问题:

不使用var造成的问题

var i=0; // 正确:通过声明创建了一个全局变量
function test() {
   for (i=0; i<10; i++) {
      alert("Hello World!");
   }
}
test();
alert(i); // 警告:全局变量i的当前值为10

继续阅读