Category Archives: Operation System and Linux

Unicode equivalence

A few days ago I planned to write a Python script to migrate some music playlist from Mac to PC. The task was just to parse XML file and convert the content to PPL file (just plain text). How hard … Continue reading

Posted in Computer and Internet, Operation System and Linux | Tagged | Leave a comment

Install Arch Linux

When come to Linux, previously I would take Ubuntu distribution. It is rather easy to use, and the Debian package manager is more than adequate. Well, this time I am trying Arch Linux for a change. This is a minimalism … Continue reading

Posted in Operation System and Linux | Tagged | Leave a comment

gdb 7.6 performance bug

http://sourceware.org/bugzilla/show_bug.cgi?id=15454 http://sourceware.org/bugzilla/show_bug.cgi?id=15519 http://sourceware.org/bugzilla/show_bug.cgi?id=15412 Ubuntu 13.04 带的 gdb 7.5.91 也有同样的问题。 自机编译 gdb 7.5.1,单独将可执行文件 gdb 复制至 /usr/bin/gdb 貌似能简单解决。目前还没发现小版本不匹配引起的问题。 PS: 偶尔会见到替换后的 gdb 的 crash report,但似乎没什么影响。

Posted in Computer and Internet, Operation System and Linux | Tagged | Leave a comment

PyGTK

本人 Qt 用的比较多。不过最近看到 PyGTK(GTK+ 的 Python 绑定,当然对于 Qt 也有 PyQt)发现这个其实也挺方便。 https://github.com/NoIE/bedit 这里是一个 PyGTK 写的编辑器(看点是带背景图)。东西不是我写的,coding 本身非常一般,只是实现功能所需要的代码量还是比较少的。 再次感叹,GUI 的很多概念和技术都是通用的。 在我看来,Qt 主要的优势还是可移植性。在嵌入式系统中,只要有 frame buffer,或进一步支持全屏 OpenGL (就是说不需要任何窗口系统),就可以完整编译运行 Qt 程序(QGaphicsView 方式,或者直接 Qt Quick 方式)。

Posted in Computer and Internet, Operation System and Linux, Programming and Algorithm | Tagged , , | Leave a comment

坑爹的 i.MX6 GLES2 驱动

四核 ARM Cortex-A9 + Vivante GC2000,看起来不错(SABRE Lite 开发板,$199)。不过真要跑起来还是费了番功夫。 在 Ubuntu 上跑 GLES2。嗯?谁定的这个 requirement?虽然 Ubuntu 是方便(其实主要是 GNU Debian 方便),板子是强大,但是未优化未精简的 Ubuntu 对系统资源的要求可是人所共知的。 然后,就是魂淡的 GLES2 驱动。目前能看到的问题是下面几点: X11 用的 EGL lib 是 libEGL-x11.so。程序只有在最后链接这个库才能链接通过。就是说,链接顺序必须是“-lGLESv2 -lGAL -lX11 -lxcb -lXau -lXdmcp -lm -lEGL”。 生成的程序必须用 root 运行(“sudo”)。嗯这对 framebuffer … Continue reading

Posted in Computer and Internet, Operation System and Linux | Tagged , | Leave a comment

非正式 Debian 软件包制作手册

正式的 Debian 软件包一般是由源代码和 AutoTools 工具配置编译生成,再和 debian 配置文件一起打包发布的。过程还是相当繁杂的。 下面是简化的非正式的流程,适用于简单的利用 Debian 包来部署 Linux 应用。 首先,注意 Debian 包的名字遵循下面的约定: [package]_[version]-[revision]_[arch].deb package 是软件包名,version 是版本号,revision 是修订号,arch 是软件包架构(例如 i386 或 armle,也可以是通用的 all 或 any)。 最为例子,我们的工作目录就用 package_version-revision_arch。 接下去要做的有两件事,一是准备要部署的文件和目标路径,二是编写 debian 的配置文件。 准备部署文件很简单,只需要将文件连同其完整目标路径复制到刚才准备的 package_version-revision_arch 目录中。例如要将 foo 文件部署到目标系统的 /usr/bin/foo,只要将 foo 文件复制到 … Continue reading

Posted in Computer and Internet, Operation System and Linux | Tagged , | Leave a comment

Linux 的 Socket 通信

Socket 不仅是网络通信工具,同时也是 *nix 系统下方便且通用的跨进程通信方式。 但是如果通信双方配合不当的话也会给系统造成负面效果。 在发送和接收端传输数据的时候,可以把双方的缓存合起来看作一个大的缓存。如果当接收端的处理速度跟不上发送端的发送速度的话,就会把双方的缓存用尽而造成发送端的阻塞。而如果发送端不幸又使用了阻塞的 Socket API 发送的话,就很容易引起其性能下降了。 根本的解决方案一是提高接收端处理速度,解决性能瓶颈;如果一做不到的话,二则是用非阻塞的方式发送数据。在二中,一是使用线程,二是使用异步IO,比如 libevent 库(资源方面,线程是线性扩展性的,而异步IO则可能达到次线性甚至常数的扩展性)。 对于简单的阻塞式的 Socket API,一个对应瞬时性的大容量的数据传输的方式是加大发送端的缓存(使用 setsockopt)。但需要注意的是 Linux 一般可以设置的缓存最大值往往不过数百kB,有时不够满足需求。如果需要更大的缓存则需要调整系统设置,可以参考 Boost socket performance on Linux。 需要注意的是,即使使用文件名作为地址的本地 Socket 通信(AF_UNIX,或 AF_LOCAL / AF_FILE),上面讨论的缓存和缓存设置同样起作用。

Posted in Computer and Internet, Operation System and Linux | Tagged , | Leave a comment