Category Archives: Operation System and Linux

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