跳至主要内容

博文

关于代码缩进的思考

在 PEP8 读到了关于代码缩进的指导建议: Code lay-out Indentation Use 4 spaces per indentation level. For really old code that you don't want to mess up, you can continue to use 8-space tabs. Tabs or Spaces? Never mix tabs and spaces. The most popular way of indenting Python is with spaces only. The second-most popular way is with tabs only. Code indented with a mixture of tabs and spaces should be converted to using spaces exclusively. When invoking the Python command line interpreter with the -t option, it issues warnings about code that illegally mixes tabs and spaces. When using -tt these warnings become errors. These options are highly recommended! For new projects, spaces-only are strongly recommended over tabs. Most editors have features that make this easy to do. 在此之前我也仔细考虑过缩进应该使用哪个比较好——tab vs. white space.最终我觉得使用tab比较适合我,主要是基于以下几点考虑: 在行首的所有缩进都是用tab,在行内和行末只适用white space,这样无论代码使用哪一种IDE或是editor打开,无论设置的tab width是4或是8或是其他什么奇怪的数,每一行的缩进关系都可以正确的显示出来,差别只是宽度而已,不影响可读性。 我使...

Fixed width within display:inline

根据老板的需求修改web page中的footer的时候发现了<span>的宽度有问题,HTML的结构大致如下: <div style="margin: 0pt 260px; width: 380px;">     <span class="footTag">About</span>     <span class="footTag">Partners</span>     <span class="footTag">Advertise</span> </div> <div style="margin: 6px 0pt; clear: left;">   © 2008 Company-Name </div> 其中样式footTag指定了width,但是尝试了很久发现span的宽度无论如何也不能按照CSS的定义显示…… 但是如果换成DIV或是用 display: block 就可以。在Google了不少keyword之后终于发现了一篇 相关的解释 。到W3C的CSS 2.1规范里具体找了一下,果然发现: 10.3.1 Inline, non-replaced elements The 'width' property does not apply. A computed value of 'auto' for 'left' , 'right' , 'margin-left' or 'margin-right' becomes a used value of '0'. 有空一定要仔细看看规范~做WEB开发的至少先将CSS、JavaScript和DOM混个脸熟,然后再研究不同browser的特性。

Ubuntu下的nvidia硬件加速

在老PC里装上Ubuntu 7.10已经有一段日子了,平时上班主要用ACER的laptop,回家有时候开着PC下aMule或是Azureus。本来也曾经试着用PC来看片,可惜有时候CPU占用率偏高,遇到解码率较高的片子,如HD的片子就会卡…… 今晚在google是否有linux的土豆加速器版本,无意中看见了一个安装nvidia驱动的帖子——打开菜单『系统』|『系统管理』|『受限驱动管理器』,启用nvidia驱动程序即可。打开了nvidia驱动之后的视频果然强悍了不少:Firefox里头的控件多了shade;Flash看土豆的CPU使用率降低了不少;整个desktop的view变得更细致了,估计是抗锯齿打开了的好处。 看来以后买硬件还是大牌比较好,至少linux下面驱动的支持找得到~

File Mode in Linux (1)

Linux中的文件具有三种访问权限:read(读)、write(写)和execute(执行)。每一个文件都属于一个指定的user(用户)和group(群组)。对于文件访问的控制是依据user、group和other来分开定义的。所谓的other,指的是既不是拥有该文件的用户(owner),也不是属于拥有该文件的群组的用户。 使用命令 ls -l 可以列出文件的长列表,在有的linux主机上,定义了该命令的alias别名为ll。其中以10个字符来标记一个文件的类型和权限——drwxrwxrwx。其中,第一个字符标识的是文件的类型,如d表示目录,-表示普通文件,c表示字符设备,b表示块设备,l表示符号链接,p表示管道文件,s表示套接字文件等;后面的九个字符每三个为一组,一次表示owner、group和other的权限;每一组的三个字符又一次表示read、write和execute的权限。此外,s表示setuid,该标志位仅对可执行的文件有效。如果ll命令显示的权限中有'-',则表示对应该位的权限没有被授予。 提到文件的权限,就必须要说到chmod。这个命令就是用于改变一个文件的模式(change mode)的。具体的用法参考man chmod,这里只介绍几个常见的用法: chmod g+x [filename] # grant the Execute privilege to Group chmod g+s [filename] # set the group id to the executable file chmod 755 [filename] # set the mode as rwxr-xr-x

VIM diff用法简介

进入 diff 模式编辑的最简单方法就是用 "vimdiff" 命令。它象通常启动 Vim 一样, 不过额外地,它设定一些参数来设定查看不同之处。 vimdiff file1 file2 [file3 [file4]] 这等同于: vim -d file1 file2 [file3 [file4]] 你也可以使用 "gvimdiff" 或 "vim -d -g"。GUI 就启动了。 你也可以使用 "viewdiff" 或 "gviewdiff" 。Vim 会进入只读模式。 有两条命令可用于在 diffs 之间跳转: * [c * [c 向后至上一个更改的开始。当加上个数字后,便重复执行相应 次。 * ]c * ]c 向前至下一个更改的开始。当加上个数字后,便重复执行相应 次。 如果不存在光标可以跳转到的更改,将产生错误。 有两个命令可用来在两个缓冲之间拷贝。相应的结果是,在一定的范围内两缓冲的内容 被统一。 * :diffg * * :diffget * : [range] diffg[et] [bufspec] 用另一个缓冲来修改当前的缓冲,消除不同之处。如果给定 [bufspec],就使用该缓冲。否则,它仅当有另一个在 diff 模式下 的缓冲时才起作用。 [range] 参考下面。 ...

VIM + CTags (2)

CTAGS工作的原理其实就是抓取源文件中所有的标签名字——包括关键字、变量名、方法名等,将它们排序后存储在标签列表文件中。VIM可以读取这个标签列表,根据用户的需要执行跳转。 CTAGS生成标签列表的方法很简单,以下命令展示了如何使用CTAGS抓取src目录中的所有文件生成标签列表: # ctags -f .\.tags -h .java -R .\src %JAVA_HOME%\src 这里用到了ctags的2个option(命令选项): -f [name]: 指定生成的标签列表的存储路径。 按照一定的规则存放所有的项目文件是一个好习惯。这里如果[name]指定为 - ,将会在stdout输出生成的标签列表。 -R: 等效于--recursive,要求递归对子目录进行抓取,一并生成标签。 对于Java、C#这些通过package支持命名空间的语言来说,这无疑是个非常高效的选项。想想com.jlazy.ctags.vim.Sample 这样的名字吧,对应到文件系统该需要多少个子目录,如果手动来抓取,那岂不是要抓到手抽筋…… -h [list]: 指定待处理的文件扩展名列表。 例如,".h.c.cpp.cxx.hpp"是为典型的C++程序指定的文件扩展名列表。 仔细打开ctags生成的tags文件看看,会发现头部其实定义了一些表明当前文件的状态的变量: !_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ !_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ !_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/ !_TAG_PROGRAM_NAME Exuberant Ctags // !_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ !_TAG_PROGRAM_VERSION 5.5.4 // 通常直接生成的tags文件都是排过序的(sorted),显而易见排序的目的是方便vim通过查询算法快速定位标签。就像二分查找需要应...

VIM + CTags (1)

通常情况下,程序员在日常工作中打开的不可能只有一份文件——想想Java的package和class,C、C++的header files,还有.Net C#的partial class就会赞同这个观点。VIM这种强悍的编辑器自然充分考虑到程序员的需求 —— move around quickly。 VIM支持CTAGS程序,这是一个独立的程序,大多数Unix/Linux系统都安装了它的实现。只需要在$VIM/plugin中安装 taglist 插件即可借助于ctag的威力对所有文件进行tag的索引。值得一提的是,ctag本身在不同系统上的实现是可能有所不同的,推荐使用的是source forge上的开源项目 exuberant ctags。 C:\Program Files\GNU>ctags --version Exuberant Ctags 5.5.4, Copyright (C) 1996-2003 Darren Hiebert Compiled: Mar 29 2004, 22:21:09 Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net Optional compiled features: +win32, +regex, +internal-sort 安装了CTAGS程序之后,可以在系统变量path中加入该程序的路径,比较方便。如果不加入path,则需要在vim中加入配置行: let Tlist_Ctags_Cmd='C:\Program Files\GNU\ctags.exe' let Tlist_Use_Right_Window=1 let Tlist_File_Fold_Auto_Close=1 使用taglist的第一步,就是调用CTAGS程序生成tag list。 > ctags.exe $SRC\*.cpp $SRC\*.h 如果需要针对给定目录下的所有代码文件都生成tag,可以采用: > ctags.exe -R $SRC\*.java 生成的tags文件就是所谓的tag list(标签列表文件)。VIM可以通过这个文件来查找任何一个标签被定义的位置并跳转。 如果知道一个标签的名字,可以通过命令...