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

DOMjudge结构简介

最近在公司里架了个 DOMjudge。简单介绍下它的结构吧。 DOMjudge 是一个自动化的编程竞赛的判定系统,由一个 DOMjudge server 和复数个 Judgehost 构成。 DOMjudge server 给用户、评委、管理员提供网页界面。它是一个典型的 LAMP 网络应用的架构,运行于 Linux 操作系统,Apache 提供网页服务,PHP 作为 CGI 脚本,MySQL 存储数据。用户界面主要显示队伍、排名、文件提交和提交状态;评委界面是管理员界面的子集,主要用来查看队伍的答题情况,可以显示提交的源代码、测试例的输出比较等,以便评委和进行验证。管理员界面用来管理竞赛、队伍、题目等配置,大多数的配置也可以通过直接编辑 domjudge 数据库中的 configure 表进行。 Judgehost 负责编译和运行队伍提交的源代码,给出判定结果。鉴于性能考虑,Judgehost 可以有复数台,且一般不和 DOMjudge server 运行于同一台服务器。它通过守护进程连接 DOMjudge server,通过轮询的方式检查 server 是否有需要判定的代码,如有,则编译运行代码,并做出判定。有趣的是,除了编译运行的部分,Judgehost 的结构和 server 的结构非常相似。守护进程仅仅是一个 PHP 脚本,而每次轮询贯彻了 … Continue reading

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

GNU Link Order

http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html -l library Search the library named library when linking. It makes a difference where in the command you write this option; the linker searches and processes libraries and object files in the order they are specified. Thus, `foo.o -lz … Continue reading

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

对 Ubuntu 11.04 的 Unity 绝望了

好吧,其实也没这么夸张了。看到 Unity 我第一眼的感觉是:它实在是太像Mac了。 当然,仿Mac并不能成为我不喜欢它的原因。原因是我本来就不喜欢类Mac的UI风格,或者也许只是我太习惯菜单风格了。 简述理由。不考虑非直观的复合快捷键方式。 对于快捷图标的应用程序,一般的启动方式都是一致的。不论。 对于非快捷图标的应用程序,我更喜欢用两三下鼠标在多层菜单下的移动加一次单击启动,而不是在一个 Search 框中输入几个字母再用键盘或鼠标选择启动(也许习惯纯键盘操作的人会喜欢这种方式),或在一个很大的非层次的图标列表中寻找。 对于需要打开多个同一应用程序(在文件系统管理的时候打开多个 Nautilus 是非常合理的吧)的情况,将快捷图标和在运行程序合一的做法也相当不便,为了多开启一份程序,不得不在右键弹出菜单中选择打开新窗口,同样窗口切换的时候也需 要多进行一次选择。在小屏幕上这是合理的方式,但对于宽屏幕来说一条底栏足够放置所有的在运行程序了。 然后,把程序的菜单放到顶栏的做法也是相当非直观的,特别是对于非最大化的窗口,窗口的显示部分和控制部分被拆开到两个在屏幕上距离相当遥远的位置。 最后,Unity 本身的流畅度也相当有问题。自动隐藏的 Launcher 在鼠标移动上去后需要半秒以上的时间才能滑出,也有一定概率根本就不滑出。在滑出后,就算鼠标不移开 Launcher 有时也会自动隐藏。如此不方便的动画效果完全不如没有动画了。 也许习惯Mac操作方式的人会有不同的意见。但是我至少希望 Linux 下有差异化的可选的UI风格,而不是一味的迎合流行的需求。 也看了下 Gnome 3,它的默认 shell 似乎也和 Unity 类似了。也许该看看 KDE 了。

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