轻量级的 Linux 终端软件 RXVT

最近发现了个轻量级的Linux终端 —— RXVT,功能比xterm丰富,又不像其它终端(比如GNOME Terminal)那么臃肿。RXVT主要依靠配置文件来设置各项参数,下面是我的配置文件内容。

!!$HOME/.Xdefaults
Rxvt.preeditType: root

!!窗口大小及标题
Rxvt.geometry: 80x25
Rxvt.title: hutaow-rxvt

!!输入法设置
Rxvt.inputMethod: fcitx

!!透明度设置
!Rxvt.transparent: true
!Rxvt.shading: 110
!Rxvt.tintColor: grey
!Rxvt.inheritPixmap: false

!!扩展设置
Rxvt.perl-ext-common: default, matcher, fullscreen

!!URL操作
Rxvt.urlLauncher: /usr/bin/chromium …

使用 OProfile 进行性能分析

1 介绍

OProfile是Linux上的性能监测工具,通过CPU硬件提供的性能计数器对事件(如CPU Cycle、Cache Miss等)进行采样,可以帮助开发者从代码层面分析程序的性能消耗情况,很方便的找出影响程序性能的问题点。

硬件上,OProfile支持多种架构的CPU,包括Alpha、MIPS、ARM、x86/x86-64、Sparc64、PowerPC等;软件上,OProfile支持Linux 2.2、2.4、2.6多种版本的内核,并且所占用的系统开销较小,一般在1%-8%范围内,具体数值依赖于采样频率。

2 环境准备

2.1 编译Linux内核

OProfile需要Linux内核的支持,到Linux内核源代码目录中(一般为/usr/src/linux-xxx)执行下面的命令:

make menuconfig

在配置菜单中找到OProfile的选项并将其打开,然后保存退出。

如果不想用 …


将 Python 脚本转换为可执行程序

本文所使用的工具是cx_Freeze,相对py2exe和PyInstaller来说,cx_Freeze的兼容性更好,支持最新的Python 3.X,支持PyQT,并且可以跨平台支持Windows和Linux系统。

cx_Freeze的官方主页为http://cx-freeze.sourceforge.net,下面以Windows系统为例介绍一下它的使用方法。

1 配置转换脚本

新建一个Python脚本文件,如setup.py,内容如下:

import sys
from cx_Freeze import setup, Executable

base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(  name = "MyApp",
        version = "0.1",
        description = "My PyQT application!",
        executables = [Executable("pyqt_example.py …

使用 PyQT 作为 Python 的图形界面

以前Python写出来的脚本都是靠命令行执行,输入要是复杂点就得靠加参数,甚至加配置文件来搞定,自己用下还行,给别人用的时候总是不太方便,就一直想找个好用的图形界面库。

有试过Python内置的Tkinter,部署倒是挺简单,不需要额外安装库,但是开发效率还是不够高,而且需要手写不少界面相关的重复代码,用起来不太方便。

最近开始尝试第三方的界面库,几经权衡,最终在PyGTK、wxPython、PyQT中选择了PyQT,试了一下,确实很不错,下面就介绍一下PyQT的使用方法。

1 介绍

PyQT以QT为基础,跨平台(可以运行在Windows、Linux/Unix、MacOS等操作系统上),同时PyQT的界面可以直接用QT Designer做出来,可以很容易移植到其它语言上(C++、C#、Java、Perl等)。

2 例子

为了更好了了解PyQT,先写一段简单的示例代码,例子中通过点击按钮,来改变文本框所显示的内容,具体代码含义直接通过注释说明了。

# -*- coding: utf-8 -*-

import sys
from PyQt4 import QtCore …

类型转换导致字符串大小计算错误的问题

今天在定位问题时,发现有一个字符串关键字在搜索时死活不命中,但实际那个关键字在数据中是存在的,跟踪发现是一个不起眼的细节导致的。

用一段简短的代码来说明一下问题出在哪里:

#include <stdio.h>

#define M_STRING_1 "test"
#define M_STRING_2 (char *)"test"

int main(int argc, char *argv[])
{
    char *pcStr = M_STRING_1;

    printf("Size of string macro 1      : %u bytes \r\n", sizeof(M_STRING_1));
    printf("Size of string pointer 1    : %u bytes \r\n", sizeof(pcStr));
    printf("Size …

配置 VIM 开发环境

1 插件列表

1.1 CTags

CTags用来给源代码生成索引文件,以便于文本编辑器快速定位符号位置(变量、函数、类等)。

下载地址:http://ctags.sourceforge.net

使用方式:在代码的根目录执行如下命令即可生成tag文件:

ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .

这个命令有点长,可以在.vimrc的文件中加个键盘映射,像下面的样子,这样只需要按下CTRL+F12即可生成tag文件了。

map <C-F12> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .

另外,如果需要指明源代码的语言,则需要加上--languages …


在 ArchLinux 中使用 Fcitx 输入法

Fcitx是Linux中以轻量箸称的输入法框架,短小精悍且兼容性非常好。简单记录一下Fcitx在ArchLinux中的安装配置方式。

安装输入法

执行下面的命令安装FCITX:

pacman -S fcitx-im

配置环境变量

将下面的环境变量设置加入到显示管理器的配置文件中(KDM、GDM、LightDM的配置文件为~/.xprofile,startx、Slim的配置文件为~/.xinitrc

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"

配置后重新登录生效,使用CTRL+空格激活输入法,如果发现fcitx没有运行,则直接在命令行里执行fcitx即可。


MySQL协议分析

目录

[TOC]

1 交互过程

MySQL客户端与服务器的交互主要分为两个阶段:握手认证阶段和命令执行阶段。

1.1 握手认证阶段

握手认证阶段为客户端与服务器建立连接后进行,交互过程如下:

  • 服务器 -> 客户端:握手初始化消息
  • 客户端 -> 服务器:登陆认证消息
  • 服务器 -> 客户端:认证结果消息

1.2 命令执行阶段

客户端认证成功后,会进入命令执行阶段,交互过程如下:

  • 客户端 -> 服务器:执行命令消息
  • 服务器 -> 客户端:命令执行结果

MySQL客户端与服务器的完整交互过程如下

MySQL客户端与服务器交互示意图

2 基本类型

2.1 整型值

MySQL报文中整型值分别有1、2、3、4、8字节长度,使用小字节序传输。

2.2 字符串(以NULL结尾)(Null-Terminated String …


通过PXE方式安装Linux系统

1 准备工作

2 建立PXE启动目录

  • 创建E:\Server\PXE目录,将Linux光盘镜像/images/pxeboot文件夹中的initrd.imgvmlinux文件拷贝到该目录中
  • E:\Server\PXE中创建pxelinux.cfg目录,将光盘镜像/isolinux文件夹中的isolinux.cfg文件拷贝到该目录中,并重命名为default
  • 将syslinux的PXE启动加载程序pxelinux.0拷贝到E:\Server\PXE …

Linux中生成 Core Dump 文件的方法

1 什么是 Core Dump

Core Dump 又叫核心转储。在程序运行过程中发生异常时,将其内存数据保存到文件中,这个过程叫做 Core Dump。

2 Core Dump 的作用

在开发过程中,难免会遇到程序运行过程中异常退出的情况,这时候想要定位哪里出了问题,仅仅依靠程序自身的信息打印(日志记录)往往是不够的,这个时候就需要 Core Dump 文件来帮忙了。

一个完整的 Core Dump 文件实际上相当于恢复了异常现场,利用 Core Dump 文件,可以查看到程序异常时的所有信息,变量值、栈信息、内存数据,程序异常时的运行位置(甚至记录代码行号)等等,定位所需要的一切信息都可以从 Core Dump文件获取到,能够非常有效的提高定位效率。

3 如何生成 Core Dump

3 …