在终端下面使用transmission下载bittorrent

本文简单介绍了如何安装、使用与配置bt下载软件。简而言之,

sudo zypper install transmission #安装
transmission pathtobt.torrent #开始下载一个bt文件
transmission-remote -a pathtobt2.torrent #同时下载第二个bt文件
类型:LinuxApp,创建时间:June 19, 2014, 5:52 p.m. 点击查看完整内容。。。
在OpenSUSE上面安装nginx+php+mysql

今天在我的opensuse 13.1虚拟机上面安装nginx+php+mysql整了好久。碰到几个问题,纪录一下。

首先是安装必要的软件。

zypper install nginx php5 php5-fpm php5-mysql mysql-community-server

安装完还跑不起来。需要进行一系列的配置。

首先需要配置一下nginx,在/etc/nginx/nginx.conf里面写个配置:

location ~ \.php$ {
    root           /srv/www/htdocs/;
    fastcgi_pass   127.0.0.1:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include        fastcgi_params;
}

这个配置最重要的部分是fastcgi_param SCRIPT_FILENAME,因为这个参数决定了真正执行的php文件的路径。如果直接使用nginx的默认配置会有问题。

那接下来就是配置php的fastcgi服务了。默认配置一样有问题,跑不起来,缺少配置文件。先复制一个配置文件过来:

cd /etc/php5/fpm
cp php-fpm.conf.default php-fpm.conf

然后修改/etc/php5/fpm/php-fpm.conf这个配置文件,把里面一行:

error_log = log/php-fpm.log

修改成为

error_log = /var/log/php-fpm.log

不然php-fpm服务就跑不起来了,会报日志文件错误。因为默认配置里面的/usr/var/log/这个目录是不存在的。

这两个东西配置好之后启动三个服务

systemctl enable mysql nginx php-fpm systemctl start mysql nginx php-fpm

类型:LinuxApp,创建时间:June 19, 2014, 5:47 p.m. 点击查看完整内容。。。
YY一个适合普通家庭使用的PC。

硬件方面,

  1. CPU仍然以双核CPU为主流,因为现有的软件对多核的支持实在太差了。
  2. 芯片的集成度越来越高,除了集成GPU之外,还集成了各种控制器以及协处理器,甚至有可能出现专门执行js的 芯片为网页应用加速。
  3. SSD将会成为PC的主流,但是不是拿来作为主存储器,而是集成在主板上面作为机械硬盘的缓存。这个加速将交 由硬件来完成。
  4. 从上面就可以看出来,现有的大机箱式的PC将成为少数发烧玩家的玩物。平板、只有平板才是以后家庭PC的核心 。整个PC将会是拥有8寸屏幕集成以上配置的平板。
  5. 机械硬盘可以放在平板上面,并且没有1T以下的硬盘了。
  6. 能够使用无线网络接入大的电视以及显示器上面。
  7. 当用户需要办公的时候接入无线键鼠。需要游戏的时候接入无线的游戏手柄。

软件方面,

  1. 操作系统不会是windows。
  2. 首先,它是一个平板操作系统。
  3. 不存在360之类的软件。操作系统支持沙盒。这是为什么不会是windows的原因,因为旧的win32api已经过时了。 而不支持win32api的话,windows屁都不是。
  4. 越来越多的软件存在两个版本,一个是touch版本,主要面向显示区域受限的触屏操作。另外一个版本是pc版本 ,支持键盘与鼠标、很大的显示器。
类型:随感,创建时间:April 12, 2014, 2:39 p.m. 点击查看完整内容。。。
怎么使用dd命令以及windows光盘映像创建一个可启动的U盘

windows的安装光盘映像本身是一个可以启动的光盘映像,理论上只要使用直接写入到u盘就可以启动了,就好像linux的live cd一样。不过windows不行,后来了解了一下,说是主板必须把这个U盘识别为USB-CDROM才行。大概是因为BIOS需要的引导纪录在windows光盘映像里面不存在。所以我们这里需要为u盘安装一个引导纪录。几个步骤,首先为U盘分区。然后创建启动纪录,再把ISO映像里面的文件复制到U盘。

# fdisk /dev/sdb
# mkfs.ntfs -f /dev/sdb1
# ms-sys /dev/sdb
# mount -o loop windows7.iso /mnt/iso
# mount /dev/sdb1 /mnt/usb
# cp -r /mnt/iso/* /mnt/usb/
类型:LinuxApp,创建时间:Feb. 25, 2014, 3:41 p.m. 点击查看完整内容。。。
在OpenSUSE 13.1 64位系统里面解压安装WPS

其实也没啥。如果不肯折腾的话,直接安装WPS提供的RPM包就行了。

使用压缩包的话,如果安装的是32位系统的话,直接下载回来就可以用。不过现在大家的电脑都不错,至少4G内存杠杠的,很多人会选择安装64位系统。这个时候需要安装一些依赖库。。

依赖库的名称我记在这里。

sudo zypper install libX11-6-32bit libgthread-2_0-0-32bit libpng12-0-32bit libfreetype6-32bit libgobject-2_0-0-32bit libSM6-32bit libXrender1-32bit fontconfig-32bit libXext6-32bit

貌似还缺一个libGLU,但是我发现如果安装这个东西会连wayland一起装,反正也不影响启动,只是缺少一个导出PDF的功能。所以就没有加到上面去了。之前发现WPS的RPM包依赖于wayland,比较奇怪才开始折腾这个。

装完WPS的依赖之后就下载压缩包,回来解压缩,运行里面的WPS搞定。

类型:LinuxApp,创建时间:Dec. 2, 2013, 10:43 a.m. 点击查看完整内容。。。
在OpenSUSE下关闭笔记本的触摸板

很简单,在命令行下输入如下命令synclient TouchpadOff=1即可。

类型:LinuxApp,创建时间:Nov. 29, 2013, 11:31 a.m. 点击查看完整内容。。。
Python与C++联合编程的简介

作为Python程序员,应该能够正视Python的优点与缺点。众所周之,Python的运行速度是很慢的,特别是大数据量的运算时,Python会慢得让人难以忍受。对于这种情况,“专业”的解决方案是用上numpy或者opencl。不过有时候为了一点小功能用上这种重型的解决方案很不划算,或者有时候想要实现的操作在numpy里面没有,需要我们自己用C语言来编写。总之,我们使用Python与C++的混合编程能够加快程序热点的运算速度。

还有些情况,Python程序员们想要使用操作系统或者外部模块提供的函数。这些模块一般是为C/C++程序员提供的。这时候也是Python与C++联合编程的用武之地。

Python语言可以说是最好的胶水语言。仅就与C++联合编程这个问题来讲,依使用难度与功能来排列,Python社区提供了以下几种解决方案:

  1. 使用标准库ctypes直接调用C/C++编写的动态链接库。
  2. 如果你使用的是Jython或者IronPython的话,它们也提供了类似于ctypes之类的模块,能够直接访问Java或者.Net语言编写的模块。
  3. 使用Cython语言,一种类似于Python语言的一种新型语言编写预定功能的代码,然后将这些代码转换成为C语言编译成为Python语言可以直接调用的二进制模块。
  4. 使用boost.python。供熟练的C++程序员操作Python的数据类型,调用Python解释器。
  5. 使用SWIG或者SIP,通过编写一个接口文件,使用类似于C/C++语法——声明函数、类型的信息,然后使用特殊的工具为C/C++的代码生成Python的接口代码。
  6. 直接使用Python的API,可以称之为最终解决方案。
类型:Python,创建时间:March 22, 2013, 8:47 p.m. 点击查看完整内容。。。
三则vmware的使用技巧

本文介绍两则vmware的使用技巧:

  1. 设置vmware虚拟机的显存
  2. 让vmware虚拟机使用千兆网卡
  3. 禁用vmware的vmem文件
类型:随感,创建时间:March 21, 2013, 8:49 p.m. 点击查看完整内容。。。
Coroutine在PyQt中的简单应用

在PyQt程序内操纵网络连接是一个非常常见的需求。目前,纯粹的单机程序已经非常的少见。解决这个问题,习惯于C++的Qt开发者第一个反应可能是QtNetwork,而习惯于Python的开发者第一个反应则是Python的标准库socket, urllib2或者第三方模块requests等。

本文提供了另外一种解决方案,基于coroutine的UI编程。与基于threading的同步编程方案相比,第三种方案能够免去同步的麻烦,非常适合天生线程不安全的UI编程。与signal/slot, 回调式的编程相比,第三方案的控制结构更清晰,资源管理更高效,非常适合复杂的逻辑UI操作。

本文还可作为eventlet-pyqt的编程指导。

类型:Python,创建时间:March 12, 2013, 5:33 p.m. 点击查看完整内容。。。
Python 代码优化常见技巧(转载)

代码优化能够让程序运行更快,它是在不改变程序运行结果的情况下使得程序的运行效率更高,根据 80/20 原则,实现程序的重构、优化、扩展以及文档相关的事情通常需要消耗 80% 的工作量。优化通常包含两方面的内容:减小代码的体积,提高代码的运行效率。本文介绍:

  • 改进算法,选择合适的数据结构
  • 对循环优化
  • 充分利用 Lazy if-evaluation 的特性
  • 字符串优化
  • 其他优化技巧
  • 定位程序性能瓶颈
  • 使用PyPy或者Cython
类型:Python,创建时间:Sept. 17, 2012, 6:18 p.m. 点击查看完整内容。。。
py3k新特性——声明参数类型的函数

众所周知,Python是一种强类型动态语言。“动态”意味着Python从不声明变量的类型。可以认为Python里面,一切变量的类型都是自动推定的。

这种灵活又智能的设定让程序员们写代码时不用花时间去考虑定义变量的类型,又方便程序员设计出灵活的程序。写过Python代码的人朋友们一般会觉得写Python程序很爽。

不过,因为在定义函数的时候也没有参数的传递,合作者往往难以确定传入的参数类型。再者,即使IDE可以自动地推定变量的类型,也难以推断函数参数的类型,不好做自动补全。

幸运的是,现在,Python 3.0已经克服了这个缺点,可以声明参数类型了。请点击“阅读更多”查看本文。

类型:Python,创建时间:May 29, 2012, 11:25 a.m. 点击查看完整内容。。。
介绍一下KDE/Qt程序的QtCurve皮肤

推荐KDE的程序皮肤(样式)QtCurve。它可以同时支持KDE3、KDE4和GNOME环境的皮肤,方便我们统一整个Linux桌面的外观。还支持非常多的细节调整,让我们每个人都可以有自己独特的外观。

因为它支持在Windows下编译,我在Besteam里面也应用了QtCurve。非常好用!

类型:LinuxApp,C++ & Qt4,创建时间:May 7, 2012, 7:48 p.m. 点击查看完整内容。。。
如何设计插件式结构的程序,兼谈Python语言的动态性

为了扩充软件的功能,通常我们会把软件设计成插件式结构。Python这样的动态语言天生就支持插件式编程。与C++相比,Python已经定义好模块的接口,想要载入一个插件,一个__import__()就能很轻松地搞定。不需要特定的底层知识。而且与C++等静态语言相比,Python的插件式结构更显灵活。因为插件载入后,可以利用Python语言的动态性,充分地修改核心的逻辑。

本文不止用几个最简单的程序示范了如何设计插件式结构。还演示了插件的两种布署方法以及一些小技巧。详细内容请点击查看全文。

类型:Python,创建时间:March 23, 2012, 5:46 p.m. 点击查看完整内容。。。
Python中使用线程的技巧

这篇长文介绍了Python如何创建一个新线程,以及几个注意事项:

  1. 创建线程的两种方法,以及它们的正确写法。
  2. 创建线程的第三种写法。
  3. 如何“强制地”结束一个线程。
  4. 不要在线程里面import新模块
  5. 不要使用PyQt的QThread类。
  6. 不要在非主线程里面使用QObject的对象。
类型:Python,C++ & Qt4,创建时间:March 14, 2012, 8:59 p.m. 点击查看完整内容。。。
最全的Tkinter教程与参考手册

这本是我见过的最全的Tkinter教程与参考手册。主要介绍了Tkinter的Layout模型、控件的标准属性、事件。详细列出了每一种控件的属性的意义。里面还有很多的代码例子,实在是一本不可多得的好书。

点击下载

类型:Python,创建时间:March 14, 2012, 11:16 a.m. 点击查看完整内容。。。
在PyQt里面如何做长操作时同时更新GUI

经常看到有人问在PyQt里面如何做长操作的时候更新GUI。我自己总结了几种方案,以及他们的适用场合:

  1. 使用processEvents(),适合每次处理时间短的情况,缺点是CPU占用可能很大。
  2. 用threading启动工作线程,再用QMetaObject.invokeMethod()向主线程传递跨线程的信息。
  3. QProgressDialog。有同步与异步两种方法。
  4. 把长的操作分为小的操作,适合每次处理都是异步的或者很复杂的情况。

第四种方案不常用,但是当你的处理过程本身是异步的时候就会用到。第一、第二方案都不错,优点是灵活。第三种方案也常见,优点是模态对话框阻止用户的其它操作,可以随时取消。缺点是一个对话框挡在那里,相当地影响用户体验。

类型:Python,C++ & Qt4,创建时间:Jan. 17, 2012, 3:53 p.m. 点击查看完整内容。。。
Django的MEDIA_ROOT和STATIC_ROOT

在水木的Python版问了一下,MEDIA_ROOT主要是用来放置上传的文件。Django的ORM有个特殊的字段叫做FileField是用来存储文件的。不过实际上并不会把文件内容存到数据库里面——因为大多数数据库保存文件时效率低,而是保存在文件系统里面。FileField只记录一个路径。FileField可以像个Python的file类型那样读写。

在开发的时候MEDIA_ROOT不应该存放任何文件。它应该指向一个空的目录。运行Django的开发服务器时,需要在urls.py里面加入一个MEDIA_URL的映射,才能正常显示上传的内容:

from django.conf import settings

if settings.DEBUG:
    urlpatterns += patterns(",
            url(r"^media/(?P<path>.*)$", \
                "django.views.static.serve", \
                {"document_root": settings.MEDIA_ROOT,}),
)

当工程被布署到Apache时也要记得给MEDIA_URL做个映射。

STATIC_ROOT是Django 1.3新增的特性。如同字面上的意思。保存在这个目录里面文件被当成静态文件处理。不过,千万不要把自己辛苦写的JavaScript、图片等静态文件放到里面去,接着看下去就知道了。与STATIC_ROOT搭配使用的还有STATIC_URLSTATICFILES_DIRS两个变量。STATIC_URL一般用默认的/static/,用于指定的静态目录的URL。STATICFILES_DIRS则指定一个工程里面哪个目录存放了与这个工程相关的静态文件,它是一个列表。假定在STATICFILES_DIRS有一个目录是"/dolphin/besteam/pages/static",其中有一个文件是common.js。那么,在浏览器里面输入http://localhost:8000/static/common.js就可以访问这个JavaScript文件了。

类型:Python,创建时间:Jan. 1, 2012, 7:14 p.m. 点击查看完整内容。。。
将Python程序打包成.zip文件并发布

在部署Python程序的时候。一般是把所有的源代码复制到目标机器上。我发现一个更好的办法是把源代码打包成.zip文件,然后直接运行这个.zip文件。比如:

python besteam.zip

它的秘密是在.zip文件中包含一个__main__.py,当python运行这个zip时,会自动找到它并运行。__main__.py的内容一般是调用主脚本。一行即可,比如:

import besteam
类型:Python,创建时间:Jan. 1, 2012, 7:02 p.m. 点击查看完整内容。。。
使用非对称密钥登录SSH服务器

通常登录SSH服务器都使用用户名与密码。每次都输入用户名和密码比较麻烦,特别是有很多台机器的时候。Windows下的putty支持大多数的SSH认证方式,其中就包含了非对称密钥登录。步骤其实很简单,

  1. 使用puttygen.exe生成非对称密钥,将私钥保存起来,将公钥传输到远程主机上,假定保存到~/id_rsa.pub。然后用下面这台命令放到认证文件里:

    cat ~/id_rsa.pub >> ~/ssh/authorized_keys
    
  2. 运行putty.exe,首先载入Session

  3. 在putty配置对话框的Connection->Data页的Auto-login username里填上登录所使用用户名,比如root

  4. 在配置对话框的Connection->SSH->Atuh页的Private key file for authentication内添入私钥所在的路径。

  5. 保存Session。下次登录的时候就不需要输入用户名和密码了

类型:LinuxApp,创建时间:Jan. 1, 2012, 6:59 p.m. 点击查看完整内容。。。
让VMWare进入全屏模式的时候不显示最顶上的工具栏

相当于进入Exclusive Mode

方法是编辑C:\Document and Settings\username\Application Data\VMWare\preferences.ini,其中的username请替换成自己的用户名。在其中加入

pref.fullscreen.v5 = "true"
类型:随感,创建时间:Jan. 1, 2012, 6:57 p.m. 点击查看完整内容。。。