1. 探索 Python 的变量、类型和引用

    我一开始为 Python 的强大和简洁所震撼,看了些 Python 的教程,学了不少东西。前面那些探索就以后再写吧……今天先讲讲今天知道的东西。

    在探索到 Python 函数的参数传递的时候,我不禁赞叹 Python 灵活的参数设计,但慢慢的,开始迷惑与传递参数的修改和返回。

    众所周知,在 C++ 中传递参数分为传值和传引用两种,但 Python 没有,那到底传进去的东西,修改一下,能不能传出来呢?这是一个很奇怪和让人费解的问题,不是么?在查阅了一些资料后,对 Python 关于变量、类型和引用的一些基本方式有了一些了解,进而基于这种理解并结合实验,了解了参数传递的奥妙。

    Python 的变量是没有类型的,这与以往看到的大部分语言都不一样。但 Python 却是区分类型的,那类型在哪里呢?事实是,类型是跟着内存中的对象走的。Python 的所有变量其实都是指向内存中的对象的一个指针,所有的变量都是!此外,对象还分两类 ...

    read more

    There are comments.

  2. 基于 jQuery 的 CSS 更换术

    最近开始写一中的新选歌系统,这次要大改,顺便练手。

    想加入换肤功能(不然女生肯定觉得老是蓝色不好……),而且我想到的换肤,最简单的方式就是换 CSS,把界面颜色、图形相关的内容放入皮肤的 CSS 中就很容易了~不过问题是换肤呢?

    正好新系统中因为客户端代码可能非常强大,准备引入 jQuery 框架来简化开发,便学了一些。于是我就想,能不能通过 jQuery 来解决呢?

    首先,我给出了下面这个简单的页面:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
      "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999 ...
    read more

    There are comments.

  3. 安装配置 LXR

    专业课学习操作系统,满心欢喜地以为可以是 Linux 代码导读,结果选用了一本八十年代的教材,介绍 UNIX v6 的。于是自己从图书馆借来了内核开发的入门读物《Linux 内核设计与实现》。既然是介绍内核的书,自然少不了代码,但是书中又不可能将每个提到的代码的相关信息全部写出来,这时就得自己去查看代码。查看代码的话,虽然 Linux 的代码可以很容易地得到,但那来看终归有些麻烦,各种调用需要查找半天。于是想起了很有名的一个网站 LXR,Linux 交叉引用。这个网站好是好,就是网络原因速度太慢,于是就想自己装一个。

    先说一句,下面的安装环境都是64位 Gentoo。

    最开始找到了 LXR Cross Referencer 这个项目,一看最后更新时间还挺新,看起来是一直都还在维护的。然后在 Gentoo 的网站上查到 LXR 是可以直接用 portage 安装的,于是安装,安装相关的包,最后放弃了。出于什么原因我也不记得了 ...

    read more

    There are comments.

  4. 方便使用 VC6 编译器的小脚本

    因为一些原因,有时候不得不在 Linux 下使用 VC6 编译器。(比如学校的作业要求能在 VC6 下编译通过之类的要求)之前的用法太麻烦了,要把待编译的文件复制到 VC6 的安装目录,还要写很长的一串东西。要是能像调用 GCC 那么方便就好了~

    于是就有了下面这个小脚本:

    #!/bin/bash
    # - * - coding: UTF-8 - * -
    
    VC6_DIR="这里写上VC6的安装地址"
    
    BIN="$VC6_DIR/VC98/Bin"
    export INCLUDE="$VC6_DIR/VC98/Include"
    export LIB="$VC6_DIR/VC98/Lib"
    
    ARGS=
    
    while getopts "o:c" optname
    do
      case "$optname" in
      "o")
        ARGS ...
    read more

    There are comments.

  5. [翻译] AST 模块:用 Python 修改 Python 代码

    原文:Static Modification of Python With Python: The AST Module

    修改代码在有时会变的十分有用,比如在进行测试和分析的时候。在这篇文章中,我们将看到如何使用 ast 模块对 Python 代码进行修改,同时还将看到一些使用了这个技术的工具。

    CPython 的编译过程

    在开始之前,我们应该先看看 CPython 的编译过程,这个过程在 PEP 339 中有详细的描述。

    当然,在读这篇文章的时候,你并不需要对这个步骤有很深入的理解,不过这可以帮助你对整个过程有一个大体的了解。

    首先,编译器会根据源代码生成一棵语法分析树 (Parse Tree),随后,再根据语法分析树建立抽象语法树 (AST, Abstract Syntax Tree)。从 AST 中可以生成出控制流图 (CFG, Control Flow Graph ...

    read more

    There are comments.

  6. 关于饭否的两个小脚本

    前几天因为某些原因,我把饭否上所有的好友和关注者全部清空了。当然,如果没有程序的帮忙,估计还不等我删完我也就后悔了。

    我没有那么狠心的把饭否的消息给清空,因为消息是不可恢复的(而且也太多了),但好友和关注者是可以的。做事情都给自己留后路显然是我一贯的风格,不然的话,我大概早从我家阳台跳下去了……

    两段脚本都不长,第一段是备份饭否的好友列表和关注者列表的,做的毫无泛用性,因为 bash 编程我并不很熟,只知道可以用 wget 来抓取。本来这种事情其实可以直接用 API 抓的,不过我想抓下我能直接看的东西,所以最终还是导出了 Cookie 抓网页。

    第一段代码如下:

    #!/bin/bash
    
    mkdir friends
    for i in {1..11}
    do
        wget -k -e robots=off --load-cookies cookies.txt -P friends/ \
            http ...
    read more

    There are comments.

  7. 为 Linux 做一把 USB “钥匙”

    我曾经很早以前就在想,能不能将U盘作为登入我系统的验证机制。当时的想法是,这样比较有趣~不过后来发现另外一个重要的用途就是,防止在众目睽睽之下输入密码……

    这个问题提出后,邮件列表里很快就有人告诉我,Linux 已经有一个现成的机制了,这就是 pam_usb。不过我在网上搜了半晌都没搜到相关的中文资料,前几天弄成了,就写出来供大家参考~

    其实来说,是很简单的。首先,当然,要准备一个U盘~(废话),然后安装 pam_usb。在 Ubuntu 下的话,源里就有,可以输入命令

    sudo apt-get install pamusb-tools
    

    直接安装。当然如果你连终端也懒得打开,可以直接点击这里:安装 pamusb-tools。当然,在后面的步骤中你终归还是要打开终端的,所以还是先开了吧~这个东西目前暂时还没什么图形界面的样子(当然做一个相信也不难)。

    另外,Fedora 源里有 pam_usb 包,Arch ...

    read more

    There are comments.

  8. 鼠标控制音乐播放的小程序

    看这个标题一定很奇怪:难道我以前控制音乐播放不用鼠标么?这个文章的标题看起来像鼠标刚刚发明的推广期的文章……不过,当然不是这样的!

    其实只是想:如何把我的小本合上放书架上,当作一个音乐播放器+功放,并用我的无线6键鼠当遥控器遥控控制之。

    想想其实还是蛮有意义的功能,这样我做作业的时候可以不用戴耳机,不用用MP3,直接把本当播放器;同时,我不会看到屏幕上的东西,可以安心做作业~再看看我的6键无限鼠,那额外的功能键平时根本不用,也想不出能有什么用……这么好的东西就这样被我浪费了……(话说,拿本当音乐播放器是不是更浪费?)

    说干就干!

    首先提出构想:左键用于暂停和播放,滚轮调节音量,侧边的两个功能键用来切换上一首和下一首。至于右键和中键……再说吧,说不定以后可以扩展更多功能?说不定以后高兴了弄个鼠标手势什么的~嘿嘿

    接下来查找资料。印象中我的 Audacious 是可以用 D-Bus 控制的。简单地查阅了一下相关资料,发现了一个叫做 MPRIS 的播放器控制接口。为此,我还专门学习了一下 python-dbus 的使用。

    插一句话:python-dbus 怎么没有中文教程啊 ...

    read more

    There are comments.

  9. [翻译] 在 Python 中使用模糊匹配根据发音搜索

    原文:Using Fuzzy Matching to Search by Sound with Python

    当你编写代码搜索数据库时,你不能总是依赖于相信所有的数据项都有正确的拼写。DreamHost 的开发者以及《Python 标准库编程范例》(The Python Standard Library by Example) 的作者 Doug Hellmann 在这篇文章中回顾了一些根据目标的发音,而不是准确的拼写,进行数据库搜索的方法。

    在数据库中搜索人名是一项独特的挑战。对于不同来源和不同年代的数据,你不但不能指望其中名字的拼写是正确的,甚至相同的名字如果多次出现时,它们的拼写都不一定一样。而储存的数据和搜索项之间也有可能因为个人喜好、文化差异、同音词、拼写错误、文盲或仅仅因为在某些时期根本没有标准拼法而出现差异。这些问题在历史学家、谱系学家和其他研究者的手写的文本记录中尤为常见。

    一个常用的解决这样的字符串搜索问题的方法是寻找与搜索目标相近的值。但是,使用传统的模糊匹配算法计算两个任意字符串之间的相似度,代价是很大的,同时它也不适合用于搜索大规模数据集。一个更好的解决方案是为数据库里的每一项预先计算一个哈希值,有一些专门的哈希算法正是为此设计的。这些语音算法 ...

    read more

    There are comments.

  10. Linux 死机了该怎么办?

    Linux 会死机么?我可以很肯定地说,会!如何?很简单,fork 炸弹就可以~要让 Linux 死机很容易,但难的是在死机以后如何安全的让他摆脱死机状态。

    Linux 死机有很多种情况,最常见的是系统负载过高导致的。如上次介绍的 fork 炸弹就是这个原理,此外还可以运行内存耗用极大的程序(如虚拟机),也会迅速提升系统负载。由于系统负载过高导致的卡死,一定是解决的越快越好!此时必须记住的是,不能再试图依赖任何图形界面的东西,如 Gnome 的系统监视器(这是我从 Windows 遗留下来的愚昧习惯……),这只会继续加重这种卡死的局面。那怎么办?

    不要怕,Linux 最初就是不需要图形界面的,因为有一个很强大的文字界面。按 Ctrl-Alt-F1(F1-F6 一般来说都可以),然后等一会儿,就会切换到 tty,也就是所谓的文字界面。这个时候需要用用户名密码登入。注意,可能键盘输入的速度比较慢,不过应该还是可以忍受的 ...

    read more

    There are comments.

« Page 3 / 3

social