Machine Readiness
Stored receipt and evidence
20
65
0
0
0
Samples
No stored offer samples.
Samples
No stored action samples.
Samples
No stored product samples.
Document
User-agent: * Disallow: /wp-admin/ Allow: /wp-admin/admin-ajax.php Sitemap: https://felixc.at/sitemap.xml Sitemap: https://felixc.at/sitemap.rss
Document
Generated by All in One SEO v4.9.6.2, this is an llms.txt file, used by LLMs to index the site.
# Felix's Blog
@felixonmars
## Sitemaps
- [XML Sitemap](https://felixc.at/sitemap.xml): Contains all public & indexable URLs for this website.
## Posts
- [Ingress 拼图与我的足迹](https://felixc.at/2018/08/ingress-banners-and-my-footprint/) - (时间上是倒序,日后新增的话我会默默更新) 苏州 无锡 - 常州 - 上海 深圳 - 香港 曼谷 - 佛统 深圳 - 河内 - 岘港 - 会安 会安 - 岘港 - 芽庄 大叻 - 胡志明市 - 广州 杭州 绍兴 - 宁波 宁波 - 长沙 长沙 - 桂林 阳朔 桂林 - 柳州 柳州 - 南宁 南京 合肥 - 重庆 东京 - 镰仓 横滨
- [[Arch] systemd 时代的 NBD 客户端持久化配置方法](https://felixc.at/2022/11/arch-systemd-era-nbd-client-persistent-config/) - NBD 用于提供块设备给远程设备使用是一种非常简便、低成本的方法。然而,让 NBD 开始工作的方法在网上能找到很多,但是 NBD 客户端的配置持久化却很难搜到比较完整的资料。在参考了一些过时博客、manpage 等比较分散的资料之后,我总算是凭借蛛丝马迹找到了应当是正确的配置方法。 1、自动加载 nbd 内核模块 echo nbd > /etc/modules-load.d/nbd.conf (虽然——我觉得这件事应该在 nbd 包里完成,因为上游不愿意默认提供的理由只是为了考虑 nbd 未被编译为内核模块的情况。) 2、/etc/nbdtab 没错,光是发现这个东西就花了我不少时间。 nbd 服务器、连接选项等本来在 nbd-client 命令中配置的内容,应当被写到这个文件里。 一个简单的例子: nbd0 192.168.0.10 export0 persist 显而易见,分别对应设备名、服务器地址、服务器上配置的 export 名、其他选项。完整的介绍可以参考对应的 manpage。 3、/etc/fstab 和 nbd@.service 到这里就是最后一步了,也是非常容易出错的一步。 此处的设备名应当和 nbdtab 内配置的设备名相符,nbdtab 的配置由这个对应的服务应用。和其他网络设备一样,挂载点、挂载相关的配置应当设置在 /etc/fstab。 这里需要使用 x-systemd.requires 来声明对 systemd 服务的依赖关系。由于服务会被这个依赖关系自动唤起,不需要手动 enable 服务。 /dev/nbd0 /var/lib/archbuild btrfs defaults,x-systemd.requires=nbd@nbd0.service,_netdev,nofail 0
- [[Arch] OpenSSL 3 更新杂记](https://felixc.at/2022/11/notes-about-arch-openssl-3-update/) - 最近 Arch Linux 终于把 OpenSSL 更新到了 3.x 系列版本。一直以来,在处理涉及打包工具链本身的 soname bump 等更新问题时,我们一直缺乏一个透明、优雅的流程。 以往采用过的方法包括但不限于:临时往编译环境里手动塞旧版本兼容包、手动在过渡版本的新版 PKGBUILD 里再编译一份旧版包然后把 lib 装进去等。由于处理这件事的开发者一般独自完成了整个过程,留下来的资料除了 IRC 里的寥寥几语往往十分有限,对于其他开发者、或是下游发行版试图重现这个过程来说,都是一个比较痛苦的过程。 这一次趁着 OpenSSL 3 的机会,本喵深度参与了整个 bootstrap rebuild 过程,并且在 RISC-V port 里复现了一遍。现在记录一下大致的过程和遇到的问题,以备不时之需。 1、首先把旧版库打包,使其可以与新版库同时安装。 openssl-1.1:https://github.com/archlinux/svntogit-packages/commit/d50ecccc79b637830b71795bd919e6467e118ef0 由于需要避免文件冲突,相应的编译选项(--libdir)和 package() 过程中做了一些兼容性处理。如果这个包还需要在 rebuild 之后留下来,比如这次的 openssl-1.1 的情况,头文件和 pkgconfig 的 .pc 文件也需要做处理。如果只是作为兼容包,可以仅保留带 soname 和具体版本的库文件本身。(当然,这种情况下也可以考虑在新版包里直接编译一份旧版库安装进去,毕竟只是临时使用。) 2、让新版库临时依赖旧版库的包 https://github.com/archlinux/svntogit-packages/commit/eef05b437f55c4d9403668ebdc27973c6a6c2134#diff-37538beb61ff63edebbf735dfcf39e5d732f49183d6beb097169d971875ca422R56 这里用到的技巧是,在 package() 方法内追加 depends,以避免编译环境中提前引入这个依赖,产生文件冲突(此时的仓库中,原包名对应的包仍然是旧版本,和 openssl-1.1 兼容包存在文件冲突)。 3、用此时的环境 rebuild 整个工具链需要用到的基础包 这一步具体要处理哪些包需要仔细分析。以这次
- [最常见几种U盘病毒的简单手动清理(To新手)(Win)](https://felixc.at/2010/01/flash-disk-virus-cleaning/) - 照相馆、复印店、老师电脑、网吧机器、机房机器……在这些地方插过的U盘、手机,往往有很大概率“中招”.借助杀毒软件往往较为复杂,而且很多同学发现,即使杀毒完成,手机里还是看不到目录……这里介绍一种简单的方法进行手动查杀,在任何安装了Windows(2000/XP/Vista/7)的电脑上都可以这样操作
- [压片学习笔记(一)-Linux下的音轨处理](https://felixc.at/2010/03/learning-tlf-minisd-1/) - 据说使用neroAacEnc来压制音轨能取得最好的效果,而neroAacEnc只能接受WAV输入,因此有必要对音轨进行加强处理.
- [Python, wxPython / Boa Constructor 学习笔记 - Day 1](https://felixc.at/2010/03/python-wxpython-boa-constructor-study-notes-day-1/) - 在GTK+, QT 和 wxWidgets 之间犹豫了挺长时间, 最后还是选择了wxWidgets(其实我只是看中了"native"控件)
- [压片学习笔记(二)-Linux下的万能视频处理方法](https://felixc.at/2010/03/learning-tlf-minisd-2/) - ffmpeg作为一个"万能"的解码器, 有时候实在可以帮我们很多忙.这个方法的原理是, 安装ffmpeg来开启x264的lavf输入, 内部调用ffmpeg处理各种视频, 从而"一个命令"通吃所有视频:)
- [释放教育网的潜能! 教育网开启IPv6完全教程](https://felixc.at/2010/03/cernet-fast-enable-ipv6-howto/) - IPv6不是一个传说, 它确实地存在于这个神奇的国度.
- [影片信息提取 —— 我的第一个wxPython程序](https://felixc.at/2010/03/movie-info-fetcher/) - 我的第一个在 Boa Constructor 下写的 wxPython 程序... 基本功能:1, 输入影片名(中文/英文, 可以不输全) 输出影片信息2, 从资源管理器拖放mkv文件到窗口, 输出影片信息+文件信息(分辨率 片长 MD5/SHA1/ed2k链接 等等) ***ChangeLog***20100514 0.11a增加制作par2包功能hash可选卡界面的事情移到子线程,多线程操作增加制作人选择功能完美实现跨平台兼容(WinXP/Ubuntu x64已测试) 20100329 发布第一个版本(v0.1a) 下载请移步 http://code.google.com/p/movieinfofetch/downloads/list 以下是全部代码: #Boa:Frame:Frame1 # -*- coding: utf-8 -*- import wx import wx.richtext import urllib,hashlib import re from MediaInfoDLL import * import time import threading import thread import Queue import traceback import os import sys
- [修改BIOS设置解决ThinkPad系列笔记本电脑电流声问题](https://felixc.at/2010/04/bios-powe-settings-solve-thinkpad-humming/) - 通常来说,笔记本电脑使用中发出噪音的部分,除了硬盘就是风扇了。然而有些笔记本电脑却还有第三个首要的“罪魁祸首”。距离Felix给自己的小黑换上SSD过去了一个星期,每当夜深人静的时候,总觉得电脑左侧有滋滋滋的声音,在半夜相当令人头疼。
- [解决依赖关系,让Debian/Ubuntu下的boa-constructor使用wxgtk2.8](https://felixc.at/2010/04/debian-ubuntu-boa-constructor-use-wx-2-8/) - Debian/Ubuntu下的boa-constructor有对python-wxgtk2.6的依赖关系,即使安装了python-wxgtk2.8,boa-constructor仍然只调用2.6版本。Felix通过以下的步骤解决了这个问题
- [Ubuntu Linux 字体相关——资料存档](https://felixc.at/2010/04/ubuntu-fonts/) - 此专题仅仅是存档字体相关的一些资料。 一、TTF字体安装 1、准备字体文件,比如simsun.ttc等,复制到自己的文件夹下的某个目录下。比如,复制到用户的主目录~/ttf中(即/home/用户名/ttf) 2、依次执行如下命令: sudo mkdir /usr/share/fonts/ttf sudo cp ~/ttf/* /usr/share/fonts/ttf cd /usr/share/fonts/ttf sudo chmod 744 * sudo mkfontscale sudo mkfontdir sudo fc-cache -f -v 3、工作完成:) 二、字体文件存档 1、SimSun 宋体/新宋体(大家都熟悉 效果图就略了)http://movieinfofetch.googlecode.com/files/simsun.ttc2、ZhunYuan 准圆http://movieinfofetch.googlecode.com/files/ZhunYuan.ttf
- [Ubuntu 下 fcitx 小企鹅输入法 相关资料存档](https://felixc.at/2010/04/ubuntu-fcitx/) - fcitx相关资料存档,包括安装/英文环境处理方法/乱码处理/美化。 一、fcitx安装 1, 卸载scim: sudo apt-get purge scim 2, 安装fcitx: sudo apt-get install fcitx im-switch 3, 设置fcitx为默认输入法: sudo im-switch -s fcitx -z all_ALL im-switch -s fcitx -z all_ALL 4, 新建文本文件 /etc/X11/Xsession.d/95fcitx_start: sudo gedit /etc/X11/Xsession.d/95fcitx_start 并粘贴如下内容: export LC_CTYPE=zh_CN.UTF-8 export XMODIFIERS=@im=fcitx export XIM=fcitx export XIM_PROGRAM=fcitx fcitx 并且赋予执行权限。命令: sudo chmod +x /etc/X11/Xsession.d/95fcitx_start 重新启动X(按下Ctrl+Alt+Backspace),或者重新启动系统后,小企鹅输入法应该就可以用了。 二、英文环境的特别设置: 1, 编辑 /etc/gtk-2.0/gtk.immodules(如果存在) 或者
- [在 Ubuntu Lucid 下请回 Sun Java6 Jre, 赶走 OpenJDK](https://felixc.at/2010/04/install-sun-java6-jre-instead-of-openjdk-in-ubuntu-lucid/) - Ubuntu Lucid 将 sun-java6-jre 系列包移出了源,java软件用 openjdk 系列包提供支持。然而在某些软件(比如FreeRapid)的使用中,openjdk还是喜欢出一些莫名其妙的错误(比如栈溢出),因此考虑请回sun-java6-jre。 具体方法很简单,首先添加 Ubuntu Karmic 的multiverse源: sudo gedit /etc/apt/sources.list 在底部添加 deb http://ftp.sjtu.edu.cn/ubuntu/ karmic multiverse 保存退出后 sudo apt-get update && sudo apt-get install sun-java6-jre 完毕! 另附: 一、SUN JAVA中文字体问题(显示为“口口”)的解决方法 注:其中的路径及使用的字体可能不一样,请根据需要修改。 cd /usr/lib/jvm/java-6-sun/jre/lib/fonts sudo mkdir fallback cd fallback sudo ln -s /usr/share/fonts/truetype/arphic/uming.ttc . sudo ln -s /usr/share/fonts/truetype/arphic/uming.ttc uming.ttf 二、OpenJDK的中文显示不正常(“窄”字或是“花”字) 1、网上找到的一些可能性: 字体配置文件地址:/usr/lib/jvm/java-1.6.0-openjdk/jre/lib/fontconfig.properties文件中的字体路径可能有误! 2、两种可行解决方法(任选其一) 解决方法(1):
- [Ubuntu:修复ThinkPad小黑的静音键](https://felixc.at/2010/04/ubuntu-recover-thinkpad-mute-key/) - Felix安装了Ubuntu Lucid后发现调音量大小的两个媒体键有效,而静音键失效了。于是Google到百度空间一篇文章,解决了这个问题。因为那篇文章标点符号略有错误,因此Felix加以修正并发在这里。
- [Python / wxPython 学习笔记 – Day 2 多线程 / 文本编码](https://felixc.at/2010/05/python-wxpython-study-notes-day-2-multi-process-text-encoding/) - 转到Ubuntu学习已经很长时间,另外在VirtualBox虚拟机中安装了WinXP,以检测跨平台的问题。 关于多线程,我想实现的功能具体是:子线程运算,更新主线程进度条; 子线程调用外部进程获取返回值,更新主线程进度条
- [[译] Ubuntu 10.04 开机黑屏问题的解决方案](https://felixc.at/2010/06/ubuntu-lucid-10-04-black-screen-on-startup-workaround/) - 译者注: Felix 遇到了nVidia和Intel 915显卡的问题, 用Google到的方法解决了. 今天看到这篇文章, 介绍的方法与我用的一样, 而且更全更详细, 因此翻译出来给遇到同样问题的朋友参考:)
- [[译]使用Unclutter在空闲时自动隐藏鼠标指针(Ubuntu)](https://felixc.at/2010/06/auto-hide-mouse-pointer-when-idle-with-unclutter-ubuntu/) - unclutter在鼠标指针一段时间不动后从屏幕上把它隐藏,这样它就不会妨碍到您正在看的屏幕区域了.
- [音轨压制 With FFmpeg & neroAacEnc ---- 我的第二个 wxPython 程序(ffnraudio)](https://felixc.at/2010/06/audio-compress-with-ffmpeg-neroaacenc/) - 我的第二个在 Boa Constructor 下写的 wxPython 程序… 基本功能:1, 拖入含音轨的媒体文件(任意格式), 列出音轨, 选中需要压制的音轨, 选择压缩选项, 然后单击"Go"即可开始压制. ***ChangeLog***20100617 0.1a 发布 下载请移步: http://code.google.com/p/ffnraudio/downloads/list 以下是全部代码: #Boa:Frame:Frame1 # -*- coding: utf-8 -*- import wx import re import time import sys, os import threading import subprocess #if cmp(sys.platform[:3],'win')!=0: # reload(sys) # sys.setdefaultencoding('utf8') f=[] #File List fd=[] #File Duration List s=[] #Stream List sf=[] #Stream
- [继续我的Ubuntu之旅 (1)](https://felixc.at/2010/06/ubuntu-1/) - 8.04到10.04, LTS到LTS的跨越, 升级的也绝不仅仅是版本号. 7秒的开机速度(SSD)和插到别的机子上引导, 驱动全部装好, 都是Win很难达到的优势. 某次驱动起了一块难缠的3G网卡, 事后别人问起却忘记了具体方法, 方觉早应该把这样一些细节记录下来.
- [添加 Linux 原生游戏到 Wine Steam 里并记录游戏状态 / 让 Wine Steam 里的不同游戏用不同的语言(环境变量)运行](https://felixc.at/2014/04/add-linux-native-game-to-wine-steam-and-track-gaming-status-run-wine-steam-games-with-different-locale-environment-variable/) - 首先解释下这个奇怪的需求哈: 1. 添加 Linux 原生游戏到 Wine Steam 里并记录游戏状态: 可以让 Steam 好友知道自己在玩什么, 而同时又可以避免用 Wine 跑相应游戏带来的性能损失. 如果直接用 Wine 自带的 start.exe 启动 Linux 游戏, 因为 start.exe 会在启动游戏后直接退出 (/wait 参数对 Linux 进程无效), 因此游戏时 Steam 状态会显示为不在游戏中, 这样我们的目的就达不到了... 2. 让 Wine Steam 里的不同游戏用不同的语言(环境变量)运行: Wine 对 CJK 字符编码的修正是和语言(Locale)环境变量有关的, 比如 Touhou 用 ja_JP 环境跑表现一切正常, 而在 zh_CN 或者 en_US 下标题栏均是不同程度的乱码 (其它程序有更严重的问题, 包括全部字符变成问号等). 但是用 Steam
- [开启 Teredo 通道, 提前感受 IPv6 (for 非教育网用户)](https://felixc.at/2010/04/install-teredo-ipv6/) - 当初Win7刚要出来时,Felix对其“DirectAccess”功能感到十分向往,从网上找到资料,发现这只是 Teredo 的一个应用。在其他平台上,也一样可以轻易开启 Teredo 从而访问 IPv6 资源。
- [Freessh.us的自动连接脚本(Python)](https://felixc.at/2010/07/freessh-us-auto-connect-python-script/) - 虽然我有付费的SSH Tunnel服务用,不过昨天围观到freessh.us改成了每15分钟换一次密码,新密码在其首页上发布,还是猥琐了一把,写了个简单的自动链接脚本: import urllib,re,os while True: a=urllib.urlopen('http://www.freessh.us').read() a=a.replace('\n','').replace('\r','') b=re.compile('\>(\w{1,3}\.freessh\.us)\.+?(\w{4,7})\.+?\>(\w{3,7})\
- [继续我的Ubuntu之旅 (2)](https://felixc.at/2010/07/ubuntu-2/) - 恩,作为笔记系列的文章,内容会比较混乱.这段时间以来,作为Ubuntu双十版的小白鼠,虽然挂彩数次,不过也在 @yegle @tjmao @poplarch @BOYPT @liangsuilong @jimmy_xu_wrk 等等推友的帮助下搞定重生.以下是这段时间来发现的好东西: 1, @tualatrix 大大的notify脚本(Felix降碳版) #!/bin/bash # Copyright: TualatriX GPL v3 # Website: http://imtx.cn/archives/1516.html # Please add the following line to ~/.bashrc to enable the bash completion support # complete -o filenames -F _root_command notify $* && \ notify-send "\"$*\" finished successfully" || \ notify-send "\"$*\" failed" 并在 ~/.bashrc
- [一个简单的srt字幕多行转单行的脚本[Python]](https://felixc.at/2010/07/srt-multiline-convert-python/) - 基本功能: 双语字幕中英文分离, 各自成一行避免srtedit在合并某些字幕后中英文各占不止一行, 导致最终生成的字幕占4行的尴尬情况. 基本示例:源文件: 1 00:01:06,107 --> 00:01:07,483 This is a test 这是一个测试 2 00:01:12,906 --> 00:01:16,450 测试! 快测试呀 3 00:01:18,703 --> 00:01:19,953 测试好了没有? 我问你好了没有? Is the test OK? What's the result? 处理后: 1 00:01:06,107 --> 00:01:07,483 这是一个测试 This is a test 2 00:01:12,906 --> 00:01:16,450 测试! 快测试呀 3 00:01:18,703 --> 00:01:19,953 测试好了没有? 我问你好了没有?
- [我在 VB6 用的 Regex 小模块](https://felixc.at/2010/07/vb6-regex-module/) - 我一直在用 VB6 写的各种需要正则的小程序里引入这个模块, 很简洁很好用:)使用之前当然需要在 工程 -> 引用 里勾选 Microsoft VBScript Regular Expression 5.5 具体用法嘛...1, StrReplace(正则替换): MsgBox StrReplace("1d2e3f","\d","a") 将会输出adaeaf 2, StrMatch(正则查找): Dim mhs As MatchCollection Set mhs = StrMatch("1d2e3f","\d") If mhs.Count > 0 Then For i = 1 To mhs.Count MsgBox mhs(i).Value Next i End If 具体效果嘛...能猜到了吧? 猜不到的自己试试去... 其他用法请参见MSDN :)下面附上模块源码: Attribute VB_Name = "Regex" Option Explicit
- [两个算分数(比例)的小程序 [Python]](https://felixc.at/2010/07/scale-python/) - 随手写的小程序 很小很实用, 尤其是在压片的时候计算sar值等方面.第一个: 化简分数 样例输入1: 16/12 样例输出1: 4 : 3 样例输入2: 16*480/(9*704) 样例输出2: 40 : 33 恩, 简单说来, 就是化任意分数为最简分数 第二个: 小数化分数给一个范围,用范围内的数组成分数,并使这个分数的值最接近所给的小数(如样例给的是1-100和1-1000的范围) 样例输入1: 3.1415926535897 100 样例输出1: 22 : 7 样例输入2: 3.1415926535897 1000 样例输出2: 355 : 113 以下是全部代码:第一个: def gcd(m, n): while n: m, n = n, m % n return m import sys if len(sys.argv)
- [Linux 下 Dropbox 的通用更新脚本修改版 - 支持代理](https://felixc.at/2010/08/linux-dropbox-update-support-proxy/) - 源脚本来自 http://forums.dropbox.com/topic.php?id=12153, 但是不能支持代理服务器, 主要问题是它的"联网检测"用的是ping, Felix将其改成了wget然后判断页面上是否有forums Patch 如下: --- a/dbupdate +++ b/dbupdate @@ -37,7 +37,7 @@ declare -r useCount="http://bit.ly/dbupdate_count"; declare -r nIcon="/usr/share/icons/hicolor/64x64/apps/dropbox.png"; declare -r userAgent="Mozilla/5.0 (X11; U; Linux i686; $LANG; rv:1.9.1.3) Gecko/20090924 Ubuntu/9.10 (karmic) Firefox/3.5.3"; -declare -r internetTest="ping -c3 -w10 www.dropbox.com | grep -c '64 bytes'" ; +declare -r internetTest="wget -qO - http://www.dropbox.com | grep -c
- [Ubuntu 多网环境自动路由表(区别教育网内外) + 分享到多张网卡网络的实现](https://felixc.at/2010/08/ubuntu-multi-internet-auto-route-list-cernet-share-to-multi-eths/) - 首先, 感谢 @BOYPT @jimmy_xu_wrk @tjmao @yegle 等朋友的帮忙! 1, 多网环境, Felix 的环境是 VPN over cernet2 + cernet 双网. 2, 自动路由表, 采用 www.nic.edu.cn 的官方 Free IP 数据.以下是 Felix 用 Python 写的一个小小的自动生成脚本: import re import urllib a=urllib.urlopen('http://www.nic.edu.cn/RS/ipstat/internalip/real.html').read() b=re.compile("([\d\.]+)\s+[\d\.]+\s+([\d\.]+)") c=b.findall(a) m=["#!/bin/bash","OLDGW=$1","NEWGW=$2","route del -net 0.0.0.0 netmask 0.0.0.0","route add -net 0.0.0.0 netmask 0.0.0.0 gw $NEWGW"] n=["#!/bin/bash"] for d in c: m.append("route
- [继续我的Ubuntu之旅 (3)](https://felixc.at/2010/09/ubuntu-3/) - Ubuntu Server 短按电源键热关机/Xorg版本过新导致nvidia驱动不加载的workaround(ABIVersion)/HUST/Tsinghua/SJTU的6in4 tunnel/三种Linux下的锐捷认证工具(mystar/xrgsu(破解版)/mentohust)/路由表脚本
- [Pingcheck - 用Ping检查网络通断并即时通知](https://felixc.at/2010/09/pingcheck-use-ping-to-check-network-and-notify-in-realtime/) - 使用方法: python pingcheck.py 比如 python pingcheck.py 8.8.8.8 简单的小脚本...跨平台...分别用了pynotify和pywin32库来执行通知, 因此需要安装相应的库才可以使用.用ping检查网络通断,并且在通断情况改变时提示用户... 截图: 下载地址:脚本(任意平台): http://movieinfofetch.googlecode.com/files/pingcheck.pyWindows下的已编译版本(需要VC2005运行库): http://movieinfofetch.googlecode.com/files/pingcheck.exe #!/usr/bin/python import subprocess,platform,sys if len(sys.argv)
- [RunTC - 在任意平台的任意IDE中调用TurboC编译运行C程序](https://felixc.at/2010/09/runtc-compile-c-with-turbo-c-in-any-ide-on-any-platform/) - 本项目已建立在 Google Code: http://code.google.com/p/runtc/某些学校(比如某猫所在的HUST)的C课程设计作业仍然需要用TC及其graphics.h完成, 由于"不能忍受"那个糟糕的IDE, 本猫写了这么个小脚本, 可以在任意平台使用. ChangeLog r4 - Alpha 2 整合 run.bat 到主脚本, 不需要手动安装 - 2010/9/14r3 - 修复长文件名支持, 修复带空格的路径支持, 修复非.c扩展名支持 - 2010/9/14r2 - Alpha 1 基本实现功能 - 2010/9/13 安装使用说明(以 Geany 为例): Windows: 下载安装 Geany: http://www.geany.org/Download/Releases进入页面后下载 Windows Binaries 的 Full Installer including GTK, 安装过程不再赘述.下载安装 Dosbox: http://www.dosbox.com/download.php?main=1进入页面后下载 Windows 版本, 安装过程不再赘述.下载 Turbo C++ 3.0: http://www.xdowns.com/soft/38/121/2006/Soft_21504.html下载后解压到任意目录(目录名建议不要有空格和中文) 下载
- [C语言课程设计的一点资料(TC)](https://felixc.at/2010/10/c/) - 恩, 因为Teacher要求对图形/文件/工程熟练掌握, 我把这些东西总结一下吧 1, 图形 使用图形库,首先引入 #include 头文件graphics.h, 以及在编译环境里勾上图形库(作用是tcc编译时加入lib/graphics.lib)基本操作请参考: http://www.bccn.net/Article/kfyy/vc/jszl/200708/5808.html 2, 文件 这个,书上够详细了,就略吧..推荐一个方便调试的方法: 用scanf/printf调试输入输出成功后,直接在程序开始处加上 freopen("debug\in.txt","r",stdin); freopen("debug\out.txt","w",stdout); 即可使输入输出全部文件化(不用做其他改动,比较方便). 3, 工程 每一个C源文件都要建立一个与之名字一样的H文件,里面仅仅包括该C文件的函数的声明和注释(接口说明等),其他的什么也不会有,比如变量的定义等等不应该有; 建立一个所有的文件都要共同使用的头文件,里面就是放那些需要的系统头文件,比如 #include#include 等等,把这个文件命名为common.h; 每个C源文件应该包含自己的头文件以及那个共同使用的头文件 主文件main.c里面包含所有的头文件(包括那个共同使用的文件),main.c里面的函数可以再做一个头文件,也可以直接放在文件的开头部分声明就可以了 参考资料: http://blog.ednchina.com/fpga2006/33233/message.aspx
- [[多图]Windows 平台 OpenVPN (IPv4/IPv6) 简明使用教程](https://felixc.at/2010/11/openvpn-win/) - 1, 如果是IPv4用户, 可以到官网(http://openvpn.net/)下载安装最新版OpenVPN, 并跳过下面的 5 - 6 步 如果是IPv6用户, 可以到官网下载2.1.1版本(http://openvpn.net/release/openvpn-2.1.1-install.exe)的OpenVPN(IPv6补丁最高支持到2.1.1版本的OpenVPN)然后到github(https://github.com/downloads/jjo/openvpn-ipv6/openvpn.exe-2.1.1-ipv6-0.4.11.zip)下载IPv6补丁. 2, 如果无法访问上述地址(如教育网用户), 可以访问http://m.uudisc.com/user/felixonmars/files/3671029下载OpenVPN 2.1.1及其IPv6补丁包. 3, Win7 用户下载后不要直接打开, 需要使用管理员权限运行. 4, 按照提示安装 OpenVPN 客户端软件 5, IPv6用户下载补丁包后打开 6, 覆盖到OpenVPN安装路径下的bin目录. 默认情况下, 这个目录应该是 C:\Program Files\OpenVPN\bin 7, 打开OpenVPN帐号提供者发来的OpenVPN帐号包, 解压到OpenVPN安装目录下的config目录. 默认情况下, 这个目录是: C:\Program Files\OpenVPN\config 8, 现在, 可以双击 OpenVPN GUI 的图标运行 OpenVPN , 使用 OpenVPN 上网冲浪啦! 错误报告请勿发在这里! 请邮件联系我以获得支持!
- [晒一下我的 conky](https://felixc.at/2010/12/my-conky/) - 折腾了一下conky配置, 目前暂时对自己折腾出来的效果比较满意啦.效果: 配置文件 ~/.conkyrc: # Based on conky-jc and the default .conkyrc. # Original: Pengo (conky@pengo.us) # Modified: Felix Yan (felixonmars@gmail.com) # Create own window instead of using desktop (required in nautilus) own_window yes own_window_type overide own_window_transparent yes own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager background no #Transparent background. # Use double buffering (reduces flicker, may not work for everyone)
- [让Ubuntu不在设备变化时将网卡重新编号](https://felixc.at/2010/12/ubuntu-interface-disable-rename/) - 如果你和我一样, 常常把硬盘在不同的电脑上插来插去, 或许会烦恼于网卡命名 eth0/eth1, wlan0/wlan1 之类的问题. 如果不喜欢更改电脑后 Ubuntu 自动累加这个计数, 可以用下面的方法设置一下: sudo mv /lib/udev/rules.d/75-persistent-net-generator.rules /lib/udev/rules.d/75-persistent-net-generator.rules.disabled sudo mv /etc/udev/rules.d/70-persistent-net.rules /etc/udev/rules.d/70-persistent-net.rules.disabled 这样重启后, 第一张有线网卡总是 eth0, 第一张无线网卡一定是 wlan0 了, conky等东西也不用重新配置啦 :)
- [找回 Ubuntu Natty 里 Compiz 0.9.2.1 版本丢失的附加特效包](https://felixc.at/2010/12/ubuntu-natty-compiz-0-9-2-1-plugins-extra/) - Compiz 更新到 0.9 虽然已经过去挺长时间了, 但是 Ubuntu 源似乎一直没有打算把 plugins-extra 也跟上更新到0.9.2.1版本. 搜索了一阵, 在 LinuxQuestion 找到了一个可行的编译方法以配合系统源里的compiz.步骤:1, 到 http://releases.compiz-fusion.org/0.9.2.1/ 下载合适版本的plugins-extra.传送门: http://releases.compiz-fusion.org/0.9.2.1/compiz-plugins-extra-0.9.2.1.tar.gz 2, 解压之: tar xzvf compiz-plugins-extra-0.9.2.1.tar.gz cd plugins-extra 3, 执行下面的命令: mkdir build && cd build cmake .. 4, 编辑 CMakeCache.txt gedit CMakeCache.txt 5, 查找下面的内容: CMAKE_INSTALL_PREFIX:PATH=/usr/local 替换为 CMAKE_INSTALL_PREFIX:PATH=/usr 6, 然后继续安装 make sudo checkinstall --pkgname=compiz-fusion-plugins-extra --pkgversion "0.9.2.1-0" --backup=no --default 7, 之后,
- [把完美的notify-osd找回来](https://felixc.at/2011/01/i-want-my-perfect-notify-osd-back/) - 写在前面: 本文希望通过一个具体的修改编译安装Ubuntu系统软件包的过程 帮助在编译安装时遇到类似问题的盆友解决问题. 恩, 首先呢, 这个问题仅仅针对启用了 ppa:xorg-edgers/ppa 的 alpha tester 盆友...这个悲剧已经有两个多月(以上)的历史拉(因为两个多月前Felix才忍不住去report了), 我report的错误参见: https://bugs.launchpad.net/ubuntu/+source/pixman/+bug/623272不过某位大大(Peter Clifton)给出了解决方案, 这里简单解释一下... 首先获得当前版本的notify-osd的源代码: sudo apt-get source notify-osd 完成后进入目录, 把下面的patch存成文件 然后用patch命令应用上去: === modified file 'src/tile.c' --- src/tile.c 2009-07-31 11:07:29 +0000 +++ src/tile.c 2010-12-06 00:24:55 +0000 @@ -180,7 +180,7 @@ // top right cairo_matrix_init_scale (&matrix, -1.0f, 1.0f); - cairo_matrix_translate (&matrix, -width, 0.0f); + cairo_matrix_translate
- [Felix 的 60 个 Android App 推荐](https://felixc.at/2011/01/felix-60-android-app-recommendation/) - 本猫入爪机(T-Mobile G2)半月, 折腾ROM/Kernel/App无数=.=现在我安装了下面这些常用到的App(Google自带的就不提啦), 供分享, 供参考. 1, 3G Watchdog Pro流量监控 最靠谱的一个... 有时候比ISP统计的还多一点点, 总之不会少 :)有按月/周/天的统计报表, 有一个还不错的Widget, 而且, 能显示每个App使用了多少流量 :) 2, Adfree恩, 各种去广告, 很多时候还是不错的 XD 3, Adobe Flash Player为了优酷/土豆, 不得不弄一个=.= 4, Advanced Task Killer Free杀进程用的Tool, 目前觉得它最正常=.= 5, Angry Birds额, 这个..你懂的...(还有Seasons版) 6, aQQ比官方QQ简洁清爽, 功能上也不含糊, 只是偶尔在加好友的时候会FC掉=.= 7, Aquarium我还是挺喜欢这一类的动态壁纸的~~ 8, ASTRO最给力最靠谱的文件管理器~ 9, Baidu Input试用无数输入法后, 最后觉得还是百度IME比较和谐, 各种自定义完善, 主题挺多, 能支持我这种诡异输入习惯的用户=.= 10, Bluetooth File
- [QQ群管理员小工具 - 串群检查(Python)](https://felixc.at/2011/01/qq-group-admin-tool-multi-check/) - 恩, 很久没发python小工具了, 现在来发点=.=串群检查 - 检查两个或多个QQ群里相同的QQ号, 输出每个QQ号在哪些群及在各群的马甲.输入格式:1群: 1.txt2群: 2.txt...把1.txt, 2.txt, 3.txt等文件和下面的py脚本放一个目录里, 然后运行py脚本即可~ 下面就是代码啦~v0.2 - 2011/01/18重写了算法, 速度更快增加了全部群友信息输出, 方便管理员查找感谢牛B轰轰的吉米大大贡献代码! #coding:utf-8 #!/usr/bin/env python # QQ 串群检查 - By Felix Yan GPL v3 # felixonmars@gmail.com # http://blog.felixc.at import sys chuanqun = [] ren = [] for i in range(1,100): try: f = open("%d.txt" % (i), "r") for line in f:
- [Android 2.2 Froyo 完美安装 OpenVPN](https://felixc.at/2011/01/android-froyo-install-openvpn-perfectly/) - 刷上 Froyo 的盆友们在安装 OpenVPN 的时候会怨念的发现, "明明在 OpenVPN Settings 里显示已连接, 却连一点连接上了的感觉都没有呢?"如果在终端里手动键入 openvpn 的命令来获得反馈的 log, 会得到下面这样让你感到十分 confused 的结果: Sat Jul 3 13:30:58 2010 Options error: Unrecognized option or missing parameter(s) in [PUSH-OPTIONS]:4: route (2.1.1) Sat Jul 3 13:30:58 2010 Options error: Unrecognized option or missing parameter(s) in [PUSH-OPTIONS]:7: ifconfig (2.1.1) 神马? 找不到哥的 route 和 ifconfig 命令? 他们都很乖的呆在
- [Ubuntu uwsgi + nginx / bottle 的配置方法](https://felixc.at/2011/01/ubuntu-uwsgi-nginx-bottle-configuration/) - 首先赞PT大牛帮了很多忙, 本文大部分原型来源于 http://apt-blog.net/moinmoin-on-nginx-via-fastcgi-and-uwgi UPDATE: 更新到 nginx 1.0 / uwsgi 0.9.6.8 的配置 - 2011/4/15然而由于现在那几个玩意版本更新挺厉害, 有许多配置都不一样了, 再加上本猫是要让它运行bottle, 所以决定重新整理一下:) 下面这段关于 uwsgi 的介绍 来自PT牛的那篇文章: uwsgi充当了python解析器的角色,使用wsgi的接口和Python程序交互,这个过程中做了优化,和上层nginx之间则设计了更加轻量的协议。nginx0.8.40以后官方默认带了uwsgi的协议模块,所以使用很方便。 恩, 由上面这段话 我们可以淡定的看出, 官方源里那个残念的0.7.x的nginx肯定是满足不了要求的啦! 所以, 首先添加nginx的源: sudo add-apt-repository ppa:nginx/stable 然后添加uwsgi的源: sudo add-apt-repository ppa:uwsgi/release 由于uwsgi源暂无natty版本, 如果你的系统是 Natty, 那麻烦手动把uwsgi源的发行版从natty改回maverick=.= 然后, 装上他们吧! sudo apt-get update sudo apt-get install uwsgi-python nginx 然后配置一下uwsgi, 如果你不知道怎么配置, 全部照抄下面PT牛的吧!
- [在 Ubuntu 里用 DVD-RAM 光硬盘](https://felixc.at/2011/02/ubuntu-dvd-ram/) - Felix 弄来了一摞光硬碟(DVD-RAM), 打开 Wikipedia 看到了那个夸张的10W次重写和30年不损坏, 感到各种爽, 于是插入光驱随便存了一堆东西进去...于是, 问题来了: Nautilus 把这张 DVD-RAM 当作普通空光碟了, gvfs 仅挂载了一个空刻录目录(就像WinXP自带的刻录功能一样), 而我把一坨东西拖进去点刻录, 会调用 brasero, 然后提示: 剩余空间不足...WTF? 我的 DVD-RAM 是双面的, 每个单面也有 4.7G, 怎么可能装不下 3.3G 的不大的(小)电影呢?于是跑去问谷哥, 悲剧的没有遇到和我遇到同样问题的人(貌似 DVD-RAM 实在太小众了?). 但是大家都纷纷指出(见这里)要用udf这个文件系统..于是我打开 Disk Utility, 点Format, 但是在列表中并没有找到udf这个文件系统...于是...上命令行吧! sudo apt-get install udftools 然后看看 Disk Utility 里这光盘的设备在哪里(我的在/dev/sr1), 然后手动建文件系统: sudo mkudffs --utf8 --media-type=dvdram /dev/sr1 然后你会看到类似这样的输出: start=0, blocks=16, type=RESERVED start=16, blocks=3,
- [Ubuntu 命令行调节屏幕亮度](https://felixc.at/2011/03/ubuntu-change-screen-brightness-from-terminal/) - 今天本猫的本本突然开机后最大亮度只能调到30%, 各种漆黑一片纠结无比, 感觉有可能是intel驱动的bug(未确定)...然后...很笨笨的一度以为是高压条灯管之类的出问题了, 直到某次重启发觉引导界面很亮- -各种Google之后找到一篇blog及其评论里比较详细的介绍了两种命令行调节屏幕亮度的方法 原理不一样.其中的第一种解决了我屏幕亮度的问题, 第二种让我写出了一个很蛋疼的程序..恩..下面分别介绍. 1, 用setpci命令对显卡设备操作来硬调节亮度: sudo setpci -s 00:02.0 F4.B=xx 其中的00:02.0来自于 lspci 命令输出结果中显卡对应的序号, 比如我的: 00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07) 而xx对于不同显卡有不一样的取值规律, 在我这里是00最暗, ff最亮(16进制), 而原文作者和我正相反, 读者可以自己试试~~ :) 2, 用xgamma来软调节亮度: xgamma -gamma x 这里x的取值在0.1到10之间, 0.1最暗, 10最亮. 3, [蛋疼]让屏幕"呼吸"起来! #!/usr/bin/env python from math import sin
- [左键拖选复制 + 中键粘贴 + 长按中键滚动的AHK脚本](https://felixc.at/2011/03/left-key-copy-middle-key-paste-or-scroll-ahk-script/) - 猫在Linux里用习惯了配置后很好使的中键滚动(TP的小红点+中键来滚动神马的), 以及左键拖选/中键粘贴功能, 现在在Win下也想把他们找回来... 此脚本的效果是: 左键拖选文字: 复制 短按中键(0.15s): 滚动 Shift+中键: 中键点击(用于浏览器新标签打开/关闭标签页等) 熟悉的朋友当然可以进一步更改这些行为以适合自己的需求^_^ *中键滚动: 虽然TrackPoint的官方驱动也提供了滚动的功能(而且算是好使), 不过他只允许中键滚动, 不能做到轻点粘贴, 此外默认情况下还不支持QQ.. **原脚本来自: http://www.autohotkey.com/forum/topic47816.html http://forum.notebookreview.com/5947142-post6.html Felix 把这两个脚本进行了合并, 并进行了一些修改以使他们能共同工作, 以及修改了一部分的特性. Changelog: 3/25/2011: 修复切换窗口时Ctrl-C的不正常表现, 修复windows cmd界面无法复制的问题. 3/24/2011: 第一个版本,基本可以做到正常工作... $*MButton:: Hotkey, $*MButton Up, MButtonup, off KeyWait, MButton, T0.15 If ErrorLevel = 1 { Hotkey, $*MButton Up, MButtonup, on MouseGetPos, ox, oy SetTimer,
- [PyQt4 笔记 (1)](https://felixc.at/2011/03/pyqt4-note-1/) - 于是又为自己挖了个坑, 开了一系列新笔记...基于某些原因(boa丑爆了而且Bug太多啊!!有没有!!)我放弃了wxPython, 投奔Qt了... 首先赞一下Qt Designer 简单的画窗口过程, 还是相当像我熟悉的VB6的(这个真不是贬低..)...下面就是某些笔记啦! 1, Let's Begin!首先... 由于eric的编辑体验挺糟糕..(特别容易崩溃神马的, 而且我不知道怎么让它按F2直接运行别提示我输入参数....), 但是本懒猫又不肯放弃它一键compile ui到py(可以一键处理所有ui文件)的功能, 以及自动generate事件代码的功能, 于是...猫在eric里添加窗口, 然后调用Qt Designer编辑, 保存后compile, 然后generate dialog code神马的...之后在喜欢的编辑器Geany里打开generate了dialog code的那个py文件(主程序文件神马的), 再继续填充各种代码... 2, 多选菜单点击后不消失..猫做了个多选菜单, 有十来项多选项... 如果每次点开菜单再选其中某个, 又要再次点开菜单选下一个, 还是一件挺崩溃的事情...于是本猫手动添加槽(注意, 不能用Slots直接拖的方法, 因为你拖不到菜单项上, 必须在Signal/Slot Editor里手动添加):菜单项actionXXX的triggered() => 相应的菜单menuXXX的show()于是现在点击菜单项, 会勾上勾, 同时菜单也不会消失哟! 3, 从sqlite数据库读取数据显示在菜单上 conn = sqlite3.connect("data.sql") cur = conn.cursor() cur.execute("select * from settings") for num, line in enumerate(cur):
- [ArchLinux 小白好奇看 (1)](https://felixc.at/2011/04/archlinux-newbie-coming-1/) - Hello Felix~于是...在上次愤怒的卸载掉arch几周之后, 我又忍不住伸出猫爪了~~这次很乖的Follow着wiki安装, 可是某几个问题依旧没有在wiki上得到(能看懂的)答案, 于是在各种折腾之后...算是解决了吧!在此记录下解决的过程, 以免自己以后忘掉~! 1, KDE英文locale启用ibus输入中文首先是需求: 我选择的桌面环境是KDE, 而我要让所有的QT和GTK应用程序都能正确调用ibus输入法!(题外话: 我把dbus @kdm都加到DAEMONS里才可以正常用KDE4的, 这个wiki里貌似没说耶...)打开 ~/.bashrc, 在前面加上下面几句: export GTK_IM_MODULE=ibus export XMODIFIERS=@im=ibus export QT_IM_MODULE=ibus 然后重启X就好啦~ 注意: 如果在GTK程序里仍然不行(貌似不是必然的...吧?), 还需要编辑 /etc/gtk-2.0/gtk.immodules, 找到 "/usr/lib/gtk-2.0/2.10.0/immodules/im-xim.so" "xim" "X Input Method" "gtk20" "/usr/share/locale" "ko:ja:th:zh" 替换为 "/usr/lib/gtk-2.0/2.10.0/immodules/im-xim.so" "xim" "X Input Method" "gtk20" "/usr/share/locale" "en:ko:ja:th:zh" (也就是让en的locale也能调用啦~!) 2, ThinkPad x200s的小红点(TrackPoint)中键滚动/灵敏度设置和ubuntu下的路径和设置方法都有点不一样哟~首先是中键滚动!由于官方推荐 xinput 来设置, 而xinput必须在x启动后由启动x的用户身份启动, 于是我仍然把这部分代码放到了 ~/.bashrc 里: xinput
- [ArchLinux 使用 netcfg 建立 Ad-hoc 热点共享上网](https://felixc.at/2011/04/archlinux-netcfg-ad-hoc-wifi-tethering/) - 为这个问题Felix搜索了一圈, 几个页面上的方法各有问题, 结合自己以前使用Ubuntu里dnsmasq的经验, 拼凑起来成功实现了, 于是就留下这篇笔记啦~netcfg的前期配置这里不再赘述, 有需求的盆友请移步ArchWiki :) 新建Ad-hoc热点样例: CONNECTION="wireless" INTERFACE="wlan0" SECURITY="wep-old" IP="static" ADDR="" ESSID="" KEY="s:" PRE_UP="ifconfig wlan0 down; iwconfig wlan0 mode ad-hoc" QUIRKS=(prescan predown) 如果网卡不一样请修改=.= 这个配置在我这里可以完全正常工作(虽然不知为何建立的网络会多两个双引号= =|||) 接下来配置dnsmasq: 修改/etc/dnsmasq.conf: no-resolv no-poll server=4.2.2.1 server=2001:470:20::2 dhcp-range=192.168.0.100,192.168.0.200,12h dhcp-option=3, dhcp-option=6, 注意本机IP要和上面的IP段在一个网段哟^_^最后...至于通用的iptables和sysctl.conf...我就不说啦..哈哈~~~ 参考资料:1, https://bbs.archlinux.org/viewtopic.php?id=662732, https://bbs.archlinux.org/viewtopic.php?id=106723
- [为新浪微博修改的 Autolink.php](https://felixc.at/2011/04/autolink-php-for-sina-weibo/) - Dabr里采用的靠谱的Autolink库让我在写新浪微博应用的时候很是心动, 于是拿来改了改...除了修改了@中文人名,#标签#等匹配方式, 和url匹配末尾的左方括号[问题(因为新浪微博上许多人发url后会按一个表情- -), 还增加了email匹配功能 :) 请注意: 此代码继承原作者的 Apache License v2进行授权. autoLinkUsernamesAndLists($this->autoLinkURLs($this->autoLinkHashtags($this->autoLinkEmail($tweet)))); } public function autoLinkHashtags($tweet) { // TODO Match latin chars with accents /*return preg_replace('$(^|[^0-9A-Z&/]+)([##]+)([0-9A-Z_]*[A-Z_]+[a-z0-9_üÀ-ÖØ-öø-ÿ]*)$iu', '${1}${2}${3}', $tweet);*/ $t = preg_replace('$([##])([a-z0-9\-_\/\x{4e00}-\x{9fa5}]{1,20})([##])$iu', '${1}${2}${3}', $tweet); return $t; } public function autoLinkEmail($tweet) { $t = preg_replace('/([a-zA-Z0-9_\.]+)([@|@|#]|\[at\])([a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4})/', '${1}${2}${3}', $tweet); return $t; } public function autoLinkURLs($tweet) { $URL_VALID_PRECEEDING_CHARS = "(?:[^/\"':!=]|^|\:)";
- [修改 DHCP 超时时间解决 netcfg 无法连接某些Wifi连接的问题](https://felixc.at/2011/04/change-dhcp-timeout-to-solve-netcfg-ip-lease-attempt-failed-error/) - 今天公交车堵在路上, 蛋疼的拿出本本开机, 用爪机的Wi-fi hotspot打开了分享, 但是使用wifi-select的时候却提示连接失败...失败时候的提示类似如下: :: WirelessLAN up [BUSY] ... DHCP IP lease attempt failed [FAIL] 经各种测试和纠结后, 后来在Archlinux论坛上找到可行解了:修改此连接的profile文件, 增加一行: DHCP_TIMEOUT=30 然后...再连接就可以啦!(因为Google搜索此问题这个解法并不在最前面, 而且前面的几个解都很ugly而且不好使..于是在此记录一下^_^) 参考资料: https://bbs.archlinux.org/viewtopic.php?id=55901
- [ArchLinux 小白好奇看 (2)](https://felixc.at/2011/04/archlinux-newbie-coming-2/) - 纠结了一坨东西之后, 忍不住猫爪痒痒继续记笔记- - 1, 首先记下一些有用的从AUR安装的软件包: aur/aliedit aur/arpoison aur/bin32-wine-suse aur/chromium-browser-bin aur/dropbox aur/ffmpeg-mt-git aur/googlecl aur/google-talkplugin aur/hotot-hg aur/jdownloader aur/neroaacenc aur/nginx-unstable aur/pacfile aur/ruijieclient aur/sdcv aur/uwsgi aur/vidalia aur/virtualbox_bin aur/virtualbox-ext-oracle aur/winff aur/x264-git aur/xmind 安装Arch之前对Arch的印象都是"难装", 而事实上, 从AUR安装这些不被官方支持的第三方软件, 比Ubuntu等发行版还要容易的多 XD 2, 屏幕截图之前在ubuntu里我有留下一个叫ctrlalta的脚本, 在Arch里安装了scrot后, 这个脚本也可以正常运行: #!/bin/bash sleep .1;scrot -bs -e 'mv $f ~/Pictures/' 之后在KDE里进入 System Settings -> Shortcuts and Gestures -> Custom Shortcuts (注意这个位置,
- [Apple Magic Mouse 多点触控在 Linux 里的安装与配置](https://felixc.at/2011/04/how-to-configure-apple-magic-mouse-multi-touch-on-linux/) - Felix 弄来一只 Apple Magic Mouse 小白, 蓝牙配对上后发现各种scrolling很靠谱, 三键也支持好了, 但是多指动作没有支持...在各种Google之后, 找到了有人使用 PyMT 来实现 Magic Mouse 多点触控手势的脚本, 由于原脚本(参考资料1)是针对GNOME/compiz的, 而且网上没有靠谱的KDE可用版本, 于是本猫自己Hack了一下... 安装说明:首先要安装pymt, ArchLinux用户可以直接 yaourt -S pymt Ubuntu用户可以直接 sudo apt-get install python-pymt 接下来, 配置pymt识别MagicMouse的多点触控:编辑 ~/.pymt/config找到 [input] 段, 修改为: [input] default = hidinput,/dev/input/event 上面的需要替换成MagicMouse对应的编号, 可以用下面这个本猫写的挫挫的语句察看: cat /var/log/Xorg.0.log|grep udev|grep -i apple|grep /dev/input/event 然后, 给这个文件(设备?信号?事件? = =不知道怎么称呼了)加上读属性, 以使得pymt可以用当前用户身份读取: sudo chmod a+r `cat
- [Linux 命令行调节屏幕到任意分辨率的 Python 脚本](https://felixc.at/2011/04/linux-set-x-screen-resolution-in-command-line-python-script/) - 本猫把一台19寸显示器插在本本VGA插口上, 结果在KDE的分辨率管理界面上发现只能最高选择分辨率到1024x768, 甚是不爽! 于是...写了一个脚本, 以后就可以一步做到啦!此外: 运行此脚本后, KDE的分辨率管理列表中也会出现运行此脚本的时候指定的分辨率哟!(即使是显示器不支持的)当然啦, 显卡不支持的分辨率是不会设置成功的... 实现的功能比较简单, 但是很方便, 希望对你也有用~ 使用方法: resolution [刷新率] 使用示例: resolution VGA1 1366x768 60 resolution LVDS1 1280x800 Changelog:2011-4-29 发布第一个版本 下面...就是脚本啦! #!/usr/bin/env python2 import os, sys, subprocess if len(sys.argv) < 3: print "Usage: resolution [refreshrate]" sys.exit(1) device = sys.argv[1] resolution = sys.argv[2] x, y = resolution.split('x') try: refreshrate =
- [初探 Mercurial (1)](https://felixc.at/2011/05/mercurial-note-1/) - 首先..友情提示: 我也是版本控制的新手一只, 勿轻信勿轻易follow我的做法... 于是在被SVN痛苦的煎熬许久之后, 终于决定换一个VC了...在git和水银之间徘徊了一下, 由于google都选择了水银, 所以我也选用水银了~ 于是现在我正在做的项目被host在本地一台服务器上(下称A), 同时在bitbucket上注册了一个私有项目用来备份, 然后对外展示的产品运行在服务器B上(下称B). 我的想法是, 因为产品本身有些复杂, 开发人员不方便直接本机调试, 所以在本地服务器上进行测试. 从本地pull到服务器A时, 服务器A应立即更新测试环境, 并同步备份到bitbucket上. 而服务器B应该手动或以较长时间间隔从bitbucket上抓取. 那么... 首先实现中间环境吧! 首先在bitbucket上注册帐号...(略去若干字)...然后, 在服务器A和B上分别clone bb上的repo. 之后, 配置服务器A的.hg/hgrc, 加入hook: [hooks] changegroup = uploadtobb ...然后..写脚本updatetobb! #!/bin/sh cd /path/to/your/repo hg update hg push OK! 这样第一部份的工作就done了~ 然后, 设置crontab定时从bb上更新代码到服务器B: crontab -e 增加一行任务: * * * * * /path/to/your/script 修改频率为你所需的......至于脚本, 可以这样写: #!/bin/sh cd
- [ArchLinux 小白好奇看 (3)](https://felixc.at/2011/05/archlinux-newbie-coming-3/) - 1, 应用ubuntu的LCD补丁, 让字体不发虚!从AUR里那高高的投票数就知道这几乎是个must-have feature了`~使用这货让整个2D渲染都犀利起来, 尤其是中文字, 完全不发虚~~安装方法: yaourt -S cairo-ubuntu 一路上会继续自动安装 fontconfig-ubuntu, freetype2-ubuntu, libxft-ubuntu 这么几个带补丁的包(从aur里).这个包提供了3种可选的优化方案, 可以用下面的方法选用其中一种: cd /etc/fonts/conf.d/ sudo ln -s ..conf.avail/10-hinting-.conf ./ sudo rm 10-hinting-.conf 来实现可选渲染方案的切换.默认的方案名是 slight, 可选的方案名总共包括: slight medium full 2, 试一试systemd!首先是安装: pacman -S systemd arch-systemd-units initscripts-systemd 然后...替换syslog-ng为rsyslog: pacman -R syslog-ng pacman -S rsyslog 并编辑rc.conf, 把DAEMONS里的syslog-ngd改为rsyslogd.然后在/boot/grub/menu.lst里对应启动项的kernel行后面加上 init=/bin/systemd 就行了!最后...需要配置systemd使用service. 比如我使用kdm, 那么就需要: sudo systemctl enable kdm.service
- [Python: 纯文本转PNG](https://felixc.at/2011/05/python-text-to-png/) - 这个方法效果一般般, 只是"可用"的程度, 近似于长微博(changweibo.com)的效果... 字体方面, 我选用了YaHeiYt等宽字体(来源: http://yutuo5.blog.163.com/blog/static/300846782010019113537523/), 效果一般, 具体见下图: def text2png(text): # Configurations: adtexts = [u'---------------', u'广告太多是不对的!'] textcolor = "#000000" adcolor = "#FF0000" # Don't touch the code below import Image, ImageDraw, ImageFont, uuid # Build rich text for ads ad = [] for adtext in adtexts: ad += [(adtext.encode('gbk'), adcolor)] # Wrap line for text
- [Android 里安全上 QQ 的新方法](https://felixc.at/2011/07/android-qq-the-safer-new-way/) - QQ Windows版偷偷做坏事的事情已经被争论了很久很久了, 作为一个终端用户, 我自然希望风险越小越好...然而, 自从 aQQ For Android 被封杀以后, 手机上QQ就没什么好方法了...官方QQ特别臃肿, 而 QQ For Pad 更是带了个虚拟桌面出来, 无用功能实在太多. 不过, jimmy 酱 上次给我看的一个限制应用程序权限的方法, 给了我一个启发.. 像我这样的轻度QQ用户(只是偶尔需要和QQ上几个特定的人联系), 在手机上为此装个QQ而且整天挂着, 实在是太重口了...而 QQ For Pad 带了一个系统桌面挂件, 可以添加六个联系人, 可以和他们之间收发消息, 支持图片发送接受, 支持语音视频聊天(各种美)... 本猫在尝试禁止它的一些权限后, 现在认为这个方法比较靠谱, 也比较安全, 因此共享出来 :) 下面是配置步骤(真的不会很复杂的= =). 哦对了, 这是使用 CM 的 ROM 时的配置方法, 其他 ROM 我不清楚是否可以这么用, 以及怎么用... 1, 首先从菜市场正常安装 QQ For Pad 2,
- [PyQt作品 - PingTester - 多点Ping测试工具](https://felixc.at/2011/07/pyqt-pingtester-multi-ping-tool/) - 由于猫每次在一个临时测试点此测试一大片服务器的延迟和丢包, 一个个去跑太蛋疼, 于是用PyQt做了这么个小工具来测试各种线路的延迟丢包等信息.这是我的第二个PyQt作品= =||| 截图:(Archlinux / KDE4 环境下) (Windows XP) 这个工具我已经初步实现了跨平台(在以上截图环境下运行正常), 在编写过程中, 我有如下的收获: 不可以在子线程中直接操作UI, 以免引起资源冲突导致Segmentation Fault 使用Queue类可以初步实现子线程与UI线程更新界面的通信. Signal方面, 我实例了一个QTimer, 每隔一定时间处理一次消息队列. QTableView比QTableWidget效率高得多, 尤其是在Win32平台下. 因此应尽量采用 QTableView + QStandardItemModel 的搭配来做Table 注: 代码中已经内置了一份测试IP列表, 可以根据需要添加/删除. 第一次运行会生成 ips.conf 文件, 以后需要修改IP列表, 只需要编辑此文件.再注: 这个程序写的确实很丑, 欢迎各种拍砖 = = 下面贴上全部的代码: # -*- coding: utf-8 -*- import sys import time import subprocess from threading import Thread
- [C语言课程设计 - 汉化全屏文本编辑器](https://felixc.at/2011/07/c-program-chinese-full-screen-text-editor/) - 这个是我大半年前和 @T_buger 童鞋一起做的C语言课程设计程序, 一直忘记发上来. 最近有盆友的盆友找我盆友找我要了...于是, 我就把这货发上来吧!文档神马的也都在里面哦~ 我多传几个网盘吧, 以免各种链接失效...注: 彩蛋暴多的...不过内存泄露还是有一些的...使用C graphics.h 神马的做图形显示, 蛋疼到爆什么的你懂的.. @T_buger 童鞋发在优酷上的视频:传送门 介绍: 下面是下载地址(放在不同网盘, 内容都一样):程序: https://drive.google.com/open?id=0B_Zp8i1wD-UJeHJaX2JtSElGYmM http://min.us/mj9rtP http://www.megaupload.com/?d=PWG29B5K http://good.gd/1413726.htm http://hotfile.com/dl/124391593/a9aa84b/EDITORNEW.7z.html 文档: 暂缺
- [我的scrot截图脚本(自动上传imgur并复制链接)](https://felixc.at/2011/07/scrot-screenshot-script-auto-upload-to-imgur-and-copy-link/) - 效果: 调用后用鼠标选中一矩形区域, 截图后上传到imgur, 上传成功后复制图片的外链地址到剪贴板, 并弹出系统提示, 然后删除本地保留的临时图片文件. 脚本(其实就一行 - -) sleep .1; scrot -bs -e 'curl -F "image=@$f" -F "key=486690f872c678126a2c09a9e196ce1b" http://imgur.com/api/upload.xml | grep -E -o "(.)*" | grep -E -o "http://i.imgur.com/[^
- [内网Windows XP用户使用ISATAP隧道的方法(附自动配置脚本)](https://felixc.at/2011/07/isatap-behind-nat-windows-xp-auto-config-python-script/) - 声明: 本文采用方法来自 http://blog.lifetoy.org/2010/01/31/isatap-behide-nat/, 我仅仅是写了一个自动配置脚本(不包括配置路由器). 首先, 这个方法只能让内网一台机器用上ISATAP隧道(仅仅是简单的转发了相关数据包而已). 主要步骤分为两个: 配置路由器转发协议号41的数据包到你的内网机器 修改本机的ISATAP相关配置(拥有外网环境则会自动完成这一步, 内网环境需要手动处理一些问题) 只有一部分路由器本来的FIRMWARE支持转发协议号41的数据包, 如果你用的路由器不支持, 那就只能尝试dd-wrt或者openwrt了. 如果你的路由器很不幸的也不能刷这类自定义固件, 那也就没办法了..(嗯) Linux类环境可以使用iptables实现转发(假设你的内网IP地址为192.168.0.10, 网关IP为192.168.0.1, 下同): iptables -t nat -A PREROUTING -d 192.168.0.10 -p 41 -j DNAT --to 192.168.0.1 openwrt则可以修改文件 /etc/config/firewall: (此段为转载) config redirect option src wan option dest lan option dest_ip 192.168.0.10 option proto 41 至此, 第一步就做完了. 第二步, 可以用下面的脚本自动完成.原文给出的bat脚本我在win7和winxp里都试过, 不能发挥应有的作用, 而且每次外网ip变动时都需要修改, 这对于动态ip用户更是无法接受的.
- [让 Linux 里的 .xmind 文件能被双击打开](https://felixc.at/2011/08/linux-xmind-double-click-open/) - 这其实只是一个简单的小trick :) ubuntu和arch默认安装的xmind, 如果直接在WM/DE的文件管理器里双击打开, 只会打开一个新脑图, 而不会打开你指定的文件, 这个问题还是相当annoying的. 下面是解决方法: 编辑 /usr/share/applications/xmind.desktop 文件,找到 Exec= 开头的那一行, 修改为: Exec=/usr/share/xmind/xmind-bin %f (如果安装位置不一样请自行修改, 总之一定要是这个-bin的文件, 而不能是直接xmind %f)(其实很纳闷为啥xmind的策略这么诡异- -) 之后保存退出, 然后xmind文件就能直接打开啦!不过这样仍然有一个问题: 打开的xmind里会有两个标签页, 一个是你打开的文件, 一个仍然是个新建的脑图, 而且默认焦点在新建的脑图上, 这个还是非常不爽的...希望各路大神提供解决方法 ^_^ 参考资料: http://code.google.com/p/xmind3/issues/detail?id=200
- [给用NexusPHP的PT站写的分流/保种员自动发工资脚本](https://felixc.at/2011/08/auto-pay-for-nexusphp/) - 如题.使用说明:1, 为实现统计本月流量/保种时间(NexusPHP默认的数据表没有留这些数据), 需要在users表里增加 downloaded_lastmonth, uploaded_lastmonth, seedtime_lastmonth 三个字段.2, 需要获取分流员/保种员信息, 也需指定pipeliner/guarder字段(enum或boolean, 后者需略微改动此代码)3, 需要python2.x环境, 以及python-MySQLDb库.4, 需要服务器上有正常的crontab, 每月1日0点执行即可.5, 此脚本还提供了记录上月实际上传下载(不含优惠信息), 以及下载时间的统计部分, 相应部分默认已注释掉, 可以手动替换启用. 如需显示在userdetails页面上, 只需做一个简单的减法(当前-上月). 实际上传/下载量的统计还需修改announce.php.6, 工资(魔力/邀请)参考下面的设置修改. 本初始数据来自CMCT-PT的考核标准和奖励细则.7, 修改数据库连接字符串的相应部分, 即可用. #!/usr/bin/env python2 import MySQLdb, math, datetime from MySQLdb.cursors import DictCursor db = MySQLdb.connect("localhost", "user", "password", "database", charset = "utf8", connect_timeout = 5) cs = db.cursor(DictCursor) query = "SELECT * FROM
- [让libTorrent优先选择教育网IPv6地址](https://felixc.at/2011/08/libtorrent-choose-cernet-ipv6-address-first/) - 猫在教育网机子上挂PT, 但是机子同时是内网的IPv6网关(HE的/64), 结果rtorrent每次返回给tracker的&ipv6=后面总是我在HE的2001:470:xx:xx::1, 和教育网PT上其他用户之间连接效果差爆了. 在折腾了几种workaround无效后, 最后不得不改libtorrent的代码了! 由于ipv6部分本身就是由一个patch加上去的, 我只需要对这个patch再patch一次即可:安装过程就不再赘述了, 满网上都是的... --- A/libtorrent-0.12.6-ipv6-07.patch 2011-08-19 00:02:03.603735921 +0800 +++ B/libtorrent-0.12.6-ipv6-07.patch 2011-08-19 00:36:14.824983083 +0800 @@ -417,7 +417,7 @@ diff -Nur libtorrent-0.12.6.orig/src/net/local_addr.cc libtorrent-0.12.6/src/net/local_addr.cc --- libtorrent-0.12.6.orig/src/net/local_addr.cc 1970-01-01 01:00:00.000000000 +0100 +++ libtorrent-0.12.6/src/net/local_addr.cc 2010-07-23 14:44:51.000000000 +0200 -@@ -0,0 +1,336 @@ +@@ -0,0 +1,340 @@ +// libTorrent - BitTorrent library +// Copyright (C) 2005-2007, Jari
- [解决SSH远程登录后屏幕尺寸不对的问题](https://felixc.at/2011/08/fix-ssh-remote-screen-auto-resize/) - 首先解释下标题: 其实我想表达的是: 解决SSH远程登录后本地终端窗口大小改变远程屏幕尺寸没有随之改变导致显示混乱的问题, 但是太长了, 嗯.我的一部分Linux VPS存在这个问题, 而另一部分是正常的; 一个由镜像默认安装的Ubuntu 10.04 Server一定存在这个问题. 具体解决方法其实很简单, 只是因为搜索的时候有点小纠结, 所以当做译文吧:编辑 /etc/screenrc找到 termcapinfo xterm 'is=...' 注: ...表示还有很多长得像乱码的字符, 反正前面部分能对上就行修改为: termcapinfo xterm* 'is=...' 也就是说, 只添加那个*(星号).之后重新连接/重新打开screen即可. 之前因为连上ssh并没有启动screen, 而是直接打开mtr, rtorrent 之类的程序, 也存在此问题, 所以没有怀疑到screenrc头上去 = =|||| 参考资料:http://lists.gnu.org/archive/html/screen-users/2010-12/msg00027.html
- [用 pacman-accel 给 pacman 加速](https://felixc.at/2022/11/use-pacman-accel-to-accelerate-pacman/) - 我在选镜像站的时候,总会遇到一个矛盾:镜像站访问快、镜像站和上游同步延迟低(同步到了最新的包)两者不可兼得。 比较容易想到的解决思路是:只从同步延迟低的镜像下 db,然后从速度快的镜像开始依次试,跳过 404 的镜像,直到找到一个已经存在该文件的镜像。 在过往的十来年里,我一直是通过写一个脚本来分别给 pacman -Sy 和 pacman -Su 设置不同的镜像来勉强解决的。但是这个用法在 pacman 最新系列中被破坏了——pacman 加入了一个镜像站如果 404 次数过多,在同一次更新中就再也不尝试了的新行为。 想到以往的用法会在命令中夹杂许多 404 报错,需要专门的脚本来换镜像体验也并不是很好,我写了个非常简单的本地服务来实现这个需求: #!/usr/bin/ruby # # A simple local redirector for pacman, to get you the latest packages and # utilize available mirrors. # # Usage: # - Set multiple mirrors in /etc/pacman.d/mirrorlist-accel with ordering: # https://fastest-mirror-but-updates-once-a-day/archlinux/ #
- [给dabr添加140字自动截断功能](https://felixc.at/2010/02/add-140-char-auto-trim-to-dabr/) - dabr默认没有140字自动截断功能,有时候长推发不出去犹然不知,这里Felix给出一个简单的方法为dabr添加140字自动截断功能(未处理网址等特殊结构)
- [最新 nvidia 295.20 驱动造成 gnome-shell 搜索时崩溃的临时解决方案](https://felixc.at/2012/02/latest-nvidia-295-20-crashes-gnome-shell-on-search-temp-solution/) - 最近的 nvidia 295.20 驱动会造成 gnome-shell 搜索时崩溃, 查看自己的log有类似如下输出者即为此 bug 所致: /var/log$ sudo grep gnome messages.log | grep nvidia Feb 15 14:16:16 archdesktop kernel: [10841.584296] gnome-shell[9257]: segfault at c ip b5433ea3 sp ab7f3c8c error 6 in libnvidia-tls.so.295.20[b5433000+3000] 下面翻译来自 Arch 官方论坛的一些临时解决方案(任选): 清除GLCache的旧缓存文件: rm -rf ~/.nv/GLCache 不过肯定过些时会重现这个问题 清空最近打开文件记录: echo "" > ~/.local/share/recently-used.xbel sudo chattr +i ~/.local/share/recently-used.xbel 第二句会让文件处于"只读"状态, 使问题不再重现. 降级
- [Google TalkPlugin (包括 Hangout) 不能正常使用与 iptables NAT](https://felixc.at/2012/05/google-talkplugin-hangout-conflict-with-iptables-nat/) - 嗯, 准确的说, 如果 iptables -t nat 吃掉了 lo 的包 (MASQUERADE 之类的), Google TalkPlugin 就会傲娇掉, 具体表现为无论刷新重装多少次, 都提示没有连接, 网上介绍的各种方法都无效. [006:450] Started GoogleTalkPlugin, path=/opt/google/talkplugin/GoogleTalkPlugin [006:450] Waiting for GoogleTalkPlugin to start... [007:451] Read port file, port=52545 [007:453] Initiated connection to GoogleTalkPlugin [007:551] Socket connection established [007:551] ScheduleOnlineCheck: Online check in 5000ms [007:552] Warning(clientchannel.cc:669): Connection lost while waiting for authorization
- [在 Xfce4 里一键切换 Composite 开关](https://felixc.at/2012/05/one-key-toggle-composite-in-xfce4/) - 常用 KDE4 的用户可能很熟悉 KDE 的 Alt-Shift-F12 切换 Composite 状态, 下面咱让 Xfce4 拥有相同的效果: xfconf-query -c xfwm4 -p /general/use_compositing -T 在 Xfce4 的快捷键设置里, 定义一个快捷键(我选的是Ctrl-Alt-Backspace, 不知为何 Alt-Shift-F12 无法选用), 绑定上面的命令, 就可以了 :)
- [猫颜文字 For Fcitx QuickPhrase](https://felixc.at/2012/05/kitty-for-fcitx-quickphrase/) - 嗯, 原版来自猫老师的 http://catfan.me/_/p18814 喵, 俺只是简单转了下格式.把下面的内容放到 ~/.config/fcitx/data/QuickPhrase.mb 就可以了(没这个文件/目录就建一下) aowu ┗┛ mobai mm baobao
- [检查 /usr 目录哪些文件不在包管理里 For Arch Linux](https://felixc.at/2012/05/check-not-in-package-files-in-usr-for-arch-linux/) - 当然改改里面的命令也就能用在其他发行版了= =随手写的, 各种不靠谱勿喷哦>< #!/usr/bin/env python2 import subprocess import os from os.path import join pkg_list = subprocess.check_output(["pacman", "-Q"]).split("\n")[:-1] pkg_list = map(lambda line:line.split()[0], pkg_list) file_mapper = {} for pkg in pkg_list: file_list = subprocess.check_output(["pacman", "-Ql", pkg]).split("\n")[:-1] file_list = map(lambda line:line.split(" ",1)[1], file_list) for filename in file_list: file_mapper[filename] = pkg for root, dirs, files in os.walk('/usr'): if "__pycache__"
- [简易的默认网关保存+Bash补全解决方案 For Arch Linux](https://felixc.at/2012/05/simple-savedefault-gateway-and-bash-completion-solution-for-arch-linux/) - 嗯, 本猫的脚本有多烂大大们都知道的, 所以本文旨在抛砖引玉, 简单介绍利用 pppd hook 和 dhcpcd hook 做到记忆网关, 以及 bash_completion 补全的实现. 保存用的脚本:/usr/local/bin/froute-save #!/bin/bash interface=${interface:-$1} gateway=${new_routers:-$5} if [ "$reason" = 'BOUND' ] && ! ([ -z "$interface" ] || [ -z "$gateway" ]) then mkdir -p /tmp/froute/ chmod 755 /tmp/froute echo $gateway > /tmp/froute/$interface chmod 644 /tmp/froute/$interface elif ([ "$reason" = 'STOP' ] ||
- [给 Systemd 的操作加上 Bash 简写及其自动完成](https://felixc.at/2012/06/systemd-add-shortcut-and-bash-completion/) - 大家都知道 systemd 启个服务打 systemctl start nginx.service 实在是长的难受(尽管有Tab...), 于是 ArchWiki 上有介绍一个简单用 start nginx 来代替的方法, 但是这个方法没有 Bash 自动补全, 于是我自己折腾了一下.. 补全函数都取自他们各自原来的 bash-completion 文件, 我只修改了一点点(可惜不能复用啊..). 嗯, 照例上代码.../etc/bash.bashrc, 或者 ~/.bashrc 里添加: if ! systemd-notify --booted; then # not using systemd start() { sudo rc.d start $1 } restart() { sudo rc.d restart $1 } stop() { sudo rc.d stop $1
- [Archlinux - 安装 testing/glibc 2.16.0-2 时出现 "/lib exists in filesystem" 的一种处理方法](https://felixc.at/2012/07/how-to-fix-lib-exists-in-filesystem-when-installing-testing-glibc-2-16-0-2/) - 首先感谢falconindy提供的几个note, 这是我的解决思路的基础: A few things to note... 1) If you find yourself in a position to recreate the symlink yourself, the link target is [b]usr/lib[/b] and not [b]/usr/lib[/b]. This is an important difference that's only evident in a chroot situation. 2) The linker is an interpreter, just like /bin/bash. If it exists on the system
- [计算SMSC的方法 (附带Py小工具)](https://felixc.at/2012/07/smsc-calculator-python/) - 早上小青蛙 @hexchain 发不了短信找俺要SMSC号码, 于是...嗯...于是...步骤就用代码里的注释描述算了, 直接上代码: #!/usr/bin/env python2 #coding:utf-8 import sys # 获取短信中心号码 if len(sys.argv) > 1: orig = sys.argv[1] else: print "输入短信中心号码:", orig = raw_input() # 去掉+号 if orig[0] == "+": orig = orig[1:] # 不是偶数在后面加F if len(orig) % 2 == 1: orig = orig + "F" # 把奇位和偶位互换 orig = "".join(["".join(x) for x in
- [简单的 Arch 第三方软件源自动化同步上传工具](https://felixc.at/2012/07/simple-tool-to-sync-upload-arch-3rd-party-repo/) - 首先解释下, 这玩意是给包维护者用的, 不是给普通用户的(功能: 扫描自己维护的包列表, 同步所有包到远程软件仓库. 自动判断architecture. 如使用 yaourt, 需要配置 yaourt 输出到 pacman 目录, 或者手动修改工具里的路径.PKGLIST格式: 一行一个包名.PS: 因为用到了 GNU Parallel, 所以记得装一下嗯( packageupload: #!/bin/bash [[ "$1" = *x86_64* ]] && ARCH=x86_64 || ARCH=any echo "Uploading $1 to repo, architecture: $ARCH" rsync -azP $1 root@$SERVER_IP:/home/www/repo/$ARCH/ packagesync: #!/bin/bash cat /path/to/PKGLIST|xargs pacman -Q|sed -e "s/\s/-/"|xargs -IQ bash -c "ls /var/cache/pacman/pkg/Q-*"|parallel packageupload
- [记一次虚拟机装 FreeBSD 9 #坑爹](https://felixc.at/2012/09/install-freebsd-9-in-virtualbox-fml/) - 嗯还是忍不住把 #坑爹 放在了标题里, 这个...嗯有槽请轻吐什么的我才不知道呢( 虚拟机是 VirtualBox OSE 的最新版. (才不告诉你们为什么用OSE 首先呢, 作为一个 Arch 用户, 俺打开 FreeBSD 的网站看到 8.3 和 9.0 乃说我会下哪个呢? (喂喂 然后... 安装光盘引导到一半... 神马? mount 光驱 失败??!! 经过一番用力的Google总算找到了 这个帖子 , 原来是Chipset选的不对啊..喂喂VirtualBox乃都为每个操作系统改一些Presets了为啥不干脆把FreeBSD默认到ICH系列啊??!! 然后... 基本用默认配置连分区都没改安装到 ports, 挂了, 提示 out of inodes. 于是S&L大法启动, 重新引导安装进到分区修改界面按编辑... なに? 居然没有输入自定义选项的地方, 上网随手一搜大家的方法都坑爆了, 比如装到一半挂了重引导用dd还有什么一番折腾然后再手动完成剩下的安装过程( 后来呢... 后来还是找到对头的地方了, 这个帖子 和 这个Issue 报告, 然后告诉我在9.1修了... 于是... 于是果然还是重新下了一个9.1的iso装上了嗯! (
- [一句话检查自己 Arch 里装的 AUR 包是否和社区同步](https://felixc.at/2012/09/one-line-bash-check-if-aur-packages-in-your-arch-sync-with-community/) - 我们知道 aurget yaourt 等工具可以解决普通升级的情况, 但是如果一个包改名了, 或者(不靠谱的)维护者降级了没加前置version, 这些工具不会给出任何提示. 如果没有关注自己使用的包的 comments (没有notify) 以及 aur-general 邮件列表的话, 常常会错过这样的信息, 以致自己机子上的包过期很久也没发现, 以后出现莫名其妙的问题什么的( 举例来说, aur/qtcreator-bin 被收入 [community] 一段时间了, 因为收入后改了名 (新名称是 qtcreator), 导致 yaourt 没有给我任何提示. 今天用下面的语句检查后我才发现, 自己机子里的 qtcreator-bin (版本2.3) 包已经不在 AUR 里了, 而[community-testing]/qtcreator 版本是2.6.0beta, 可见我这里的包已经过期许久. 和上次的小脚本一样, 我又用到了 GNU Parallel, 嗯就是这样( pacman -Qmq | parallel 'ver=($(package-query {} -AQ -f "%l")); [[ "${ver[0]}" != "${ver[1]}"
- [[Arch] 今日更新的 fcitx(-gtk2) 在 gtk2 应用中无法使用问题的解决与启示](https://felixc.at/2012/11/fix-and-thought-of-the-arch-new-fcitx-gtk2-cannot-use-in-gtk2-application-problem/) - 今日更新了 fcitx, 许多用户反馈在部分应用程序中无法激活/使用, 虽然这类问题已经并不新鲜, 但是我觉得还是有必要说明一下. 首先, 这个问题从根本上是pacman的错(升级顺序混乱). 升级的时候你应该看到 fcitx-gtk2/fcitx-gtk3 的 installing 后面跟着个 error, 那就是因为, 存在下面的依赖链(以 fcitx-gtk2 为例): fcitx-gtk2 -> gtk2 -> pango -> harfbuzz -> icu 最后的两个都在升级列表里, 而按照逻辑, fcitx-gtk2 需要在他们之后升级才是正常的, 但是 pacman 没有考虑这个问题(依赖链中间有两个未参与此次升级的包). 我今天中午收到反馈就 bump 了版本(在基友 yuyichao 的建议下更新了 fcitx-gtk2.install, 简单的 hack 了一下使得以后类似情况时不出现此问题), 现在你看到(或者装了)的应该是 -3 结尾的版本号. 但是即使升级后, 所有使用 gtk2 相关库的应用程序仍需重启才能生效. 因为类似情况并不是第一次出现了(以前有数次大规模 rebuild 后某些包不正常的情况), 基本上如果你在升级过程中看到有库链接错误/segfault/参数错误之类的提示, 在此次升级指令完成后把这些出错的包重新安装, 如果还有错,
- [改坏了 sudo 的配置文件, 又没有办法切换到 root 用户? 也许 polkit 能救你!](https://felixc.at/2012/12/sudo-configuration-mistake-and-root-user-not-availabe-polkit-to-the-rescue/) - 今天帮基友折腾 Ubuntu 的时候, 修改 /etc/sudoers 不小心改坏了格式, 然后 sudo 提示 sudoers 格式不对无法运行, 然后各种泪目. 突然想到 polkit 直接调用 systemd (或者在较老的系统上调用 consolekit), 或许可以绕过 sudo 提权. 于是在终端敲下了: $ pkexec bash 输入密码后果断进入了 root shell! 于是省去了一次重启改 init 然后 remount (或者插入安装盘 mount 等)的繁琐步骤... 希望可以帮到谁 XD
- [[非技术] 谈谈开源社区和贡献](https://felixc.at/2013/06/about-open-source-community-and-contribution/) - (一不小心就起了这么大个标题, 汗... 前几天忙搬家, 今天 @xiehuc 提起我才知道 OpenSUSE 中文社区的事. 本来一如既往的懒得动笔, 不过看到博客又有几个月没更新都快长草了, 还是决定随便写点什么, 凑凑字数也好. 我进入开源社区的时间并不长. 虽然 2008 年开始用 Ubuntu 作为主力系统 (后来又一度中断过, 转而使用 Windows 7 等), 但是直到 2009 年才萌生社区贡献的念头. 当时的契机是 OwnLinux 翻译小组招人的消息在 QQ 群里被我看到了, 恰好当时的群主圈圈 (又名蛋蛋, Q名 Oo...) 是负责人之一, 于是我愉快的寄去了一封报名邮件, 然后很快完成了考核(翻译测试)成为了正式的一员. 我在差不多的时间段里也在 launchpad 上参与了一些软件和distro方面本地化的工作. 现在想起来, 当时还真是选择了最合适, 也是最不合适的一件事情来贡献. 说最合适, 是因为那时候技术啥都不懂, 能做的事情差不多只剩下翻译了; 说最不合适, 是因为我当时努力学英语, 各系统(包括 Windows) 都用的纯英文版, 自己从来都看不到自己翻译的结果. 没有回馈也并不是兴趣所在的工作, 热情一过就只是靠责任感维持住的.
- [[译] 如何防止丢失任何 bash 历史命令?](https://felixc.at/2013/09/how-to-avoid-losing-any-history-lines/) - 原文链接: http://mywiki.wooledge.org/BashFAQ/088译者: Felix Yan 注: 这个方法是为了让你保存一个用户的完整命令记录; 它不是用来对用户输入的命令做安全审计的 - 对这个用途, 请阅读提升 bash 安全-防止命令历史被移除 (英文) 默认情况下, bash 只在退出的时候更新命令历史, 而且这个"更新"是用新版直接覆盖旧版. 这会使你无法保持一份完整的命令历史记录, 原因有两个: 如果一个用户登录多次, 这种覆盖的机制会使得只有最后一个退出的 bash 能保存它的历史记录. (一个登录的用户打开多个终端模拟器, 或者使用 screen/tmux 等工具启动多个 bash 等也在此列 - 译者注) 如果你的 bash 异常退出了 - 比如网络故障, 防火墙更改, 或者它的进程被杀掉了 - 会话中所有的历史记录都会丢失. 为了解决前一个问题, 我们设置命令行选项 histappend 来采用"追加"的方式写入新的命令历史记录, 并保证了多次登录不会覆盖彼此的历史记录. 为了使得命令历史记录不因为 bash 异常退出而丢失, 我们需要保证每次命令之行后, 对应命令的历史记录就被写入. 我们可以用 bash 内置的 history -a
- [记一次在 AWS 网络出故障的时候让自己的线上服务提前"恢复"](https://felixc.at/2013/09/get-my-online-service-back-early-when-aws-have-connectivity-issues/) - 嗯, 首先声明, 这个方法不具备普适性, 甚至几乎完全是一个运气问题, 不过总觉得这么神奇的事情还是写一下吧, 于是才有了这篇 blog. 22:08 A 服务器突然离线, 访问分配的 Elastic IP 不通.22:15 发现我在同机房的另一台 AWS (B) 在线, 遂登陆访问 A 的 AWS 私有 IP - 通!22:20 用 B 开 ssh -D, 配合 tsocks 登陆 A 的 AWS 私有 IP, 检查服务器状况良好. 抓包确认包可以正常从 Elastic IP 出去, 但是回不来. 确认是 AWS 的错.22:23 登陆 Cloudflare 修改服务的解析到 B. (Automatic 的 DNS
- [Pipelight - 让 Linux 原生 Chromium/Chrome 无缝支持 ActiveX 控件 (看! 网银!)](https://felixc.at/2014/02/pipelight-let-linux-native-chromium-chrome-support-activex-seamlessly/) - 工行网银, Silverlight, 支付宝控件, 放开那个 Windows 虚拟机, 让 Wine 上吧~ 无图无真相: 基本的原理是, 利用 Chrome 里已有的 npactivex (ActiveX for Chrome) 扩展, 配合 pipelight 提供的 npactivex NPAPI 插件, 将 ActiveX 控件本身用 wine 执行, 并且无缝地嵌入 Chrome 网页中. 因为此功能依然在活跃开发中 (今年 FOSDEM 2014 的一个碰撞产生的火花神马的), 稳定版本的 pipelight 暂时没有加入此功能. 大家如果想尝鲜的话, 我下面介绍一下 Arch Linux 里的安装测试方法 (暂时只针对 64 位测试用户哈): 2014/2/27 更新: 因为 pipelight 0.2.5 已经添加了
- [开源图形驱动也可以流畅 Wine "原生的" DX9!](https://felixc.at/2014/03/open-source-graphics-driver-can-run-wine-native-dx9-smoothly/) - 想在 Linux 里 Wine 点什么 Direct X 游戏? 买 A 卡啦? Intel 集显啦? 用 nouveau 开源驱动啦? 哈哈哈哈哈哈哈哈(大雾 其实我们改改 Gallium3D (Mesa) 再改改 Wine 的话, Direct X 9 还是可以跑得刷刷的快的哦~! (虽然这个其实不是新闻了) 首先解释一下原理, Gallium3D 拥有一种被称为 "State Tracker" 的机制, 下面的介绍翻译自维基百科: Gallium3D 提供了一个统一的 API, 将标准的硬件功能暴露出来, 比如现代硬件中的着色器单元. 因此, 如 OpenGL 1.x/2.x, OpenGL 3.x, OpenVG, GPGPU 平台, 或者甚至 Direct3D (存在于 Wine 兼容层中) 都将只需要一个后端
- [尝鲜: 新的网络连接管理工具 systemd-networkd](https://felixc.at/2014/04/try-new-network-configuration-tool-systemd-networkd/) - 在吃掉 udev 和谋划收编 dbus 后, systemd 又将它的魔爪伸向了网络管理方面. 虽然这已经是 systemd 209 时候的旧闻, 不过因为整个功能太过不完善 (被吐槽有超多 bug, 以及各种基本功能缺失) 以及没有文档, 上游一直没有大力推广. 本文仅就最为简单普通的有线网络连接介绍 systemd-networkd 的打开方式. (wifi 呀, ppp 呀, vpn 呀之类的复杂配置现在都不支持哦) (大部分信息翻译自 ArchWiki) 先介绍一些基本的信息: 配置文件存放在 /usr/lib/systemd/network (上游提供的配置), /run/systemd/network (运行时配置), 以及 /etc/systemd/network (本地配置). 其中 /etc/systemd/network 有着最高的优先级. 有三类配置文件: .network 文件: 给匹配到的设备应用一个网络配置 .netdev 文件: 给匹配到的环境创建一个虚拟的网络设备 .link 文件: 当一个网络设备出现时, udev 会寻找第一个匹配到的 .link 文件. 他们都遵循一些相同的规则:
- [搜狗拼音 for Linux 新版发布](https://felixc.at/2014/04/sogou-pinyin-for-linux-new-release/) - 官网地址:http://pinyin.sogou.com/linux/ 本猫折腾了一下, 做了一个 PKGBUILD, Hack 了一下 curl 版本的问题, 目前自己测试可以用哈~ 坑爹之处在于, 这次放出的版本必须用内置的 qimpanel 界面! 也就是说, 经典 UI 和 kimpanel (包括 gnome-shell 那个 kimpanel 插件之类的) 都不能用, 否则你会看到一条超坑的提示: "请启用fcitx-qimpanel面板程序,以便更好的享受搜狗输入法!" 做好的包和完整的 src 包下载: http://pkgbuild.com/~fyan/staging/fcitx-sogoupinyin/ PKGBUILD: (偷懒的猫只做了 x86_64 的) # Maintainer: Jove Yu # Contributor: csslayer pkgname=fcitx-sogoupinyin pkgver=1.0.0.0011 pkgrel=1 pkgdesc="Sogou Pinyin for Linux" arch=('x86_64') url="http://code.google.com/p/fcitx" license=('custom') depends=('fcitx') source=("http://ime.sogou.com/dl/1397738329/sogou_pinyin_linux_${pkgver}_amd64.deb"
- [让 Pipelight 用中文 Locale 运行 - 解决非中文 Locale 下 Pipelight 插件中文显示为方框问题的简单方法](https://felixc.at/2014/04/run-pipelight-with-zh_cn-locale-to-workaround-pipelight-chinese-font-rendering-issue-with-other-locale-settings/) - 如果你和我一样, 系统语言喜欢用英语等非中文语言, 但是又需要 pipelight 的插件能正常显示中文(比如 flash player + AB 站之类的), 那么这个简单的方法可以让你两者兼得! 先上效果图: 方法其实很简单, 只是因为 pipelight 还在开发中, 所以没看到相关的介绍哈. 以下方法是 pipelight 开发者在 irc 中告诉我的, 特此感谢~!(如果你的 pipelight 安装的地方和我不一样, 别忘记相应修改路径哈) 1. 创建文件 /usr/local/bin/wine-pipelight-zh_cn-wrapper: #!/bin/sh LANG=zh_CN.utf8 /opt/wine-compholio/bin/wine "$@" 给它加上执行权限. 2. 复制 pipelight 配置文件以便编辑: (以 flash 为例) $ cp /usr/share/pipelight/configs/pipelight-flash ~/.config/ 3. 编辑 pipelight 配置文件:找到 winePath = /opt/wine-compholio/bin/wine 修改为: winePath =
- [让 PyMongo + MongoDB 2.6 继续支持空 $set](https://felixc.at/2014/04/add-empty-set-support-back-for-pymongo-with-mongodb-2-6/) - tl;dr 这只是一个丑陋的 monkey-patch 方法. 在 MongoDB 2.4 及以前版本中, db.foo.update({...}, {"$set": {}}), 也即 "空 $set" 是可以正常执行的. 配合 upsert 等参数执行时可以有不同的方便用法. 但是升级到 MongoDB 2.6 以后, 由于引入了严格的参数检查, 试图进行空 $set 操作时, 会出现这样的错误: OperationFailure: '$set' is empty. You must specify a field like so: {$mod: {: ...}}" 由于本猫不太想改依赖这个方法的代码逻辑(有点多...), 于是写了一个丑陋的 monkey patch 来 workaround 这个问题: # Monkey patch pymongo to allow empty
- [解决 Debian Wheezy 使用 Nginx 1.6 官方包和 php-fpm 时返回空白页的问题](https://felixc.at/2014/05/fix-debian-wheezy-blank-page-issue-when-using-nginx-official-deb-and-php-fpm/) - Nginx 1.6 终于迎来了 SPDY 3.1 以及其他激动人心的新特性, 然而, 如果从 Nginx 官方提供的 Debian 仓库安装 Nginx 1.6, 并配合 php-fpm 等 fastcgi 程序时, 却会遇到蛋疼的空白页问题. 之所以说这个问题蛋疼, 是因为页面上没有错误信息(完全空白), 而 Nginx 返回的状态码是 200, 就连 php-fpm 也没有写下任何日志 (这个可能是因为其他原因, 不过本猫暂时没有细查). 从故障现象上看很像是 fastcgi_params 的问题, 因为确认了 nginx 的权限等方面均无错, 而且如果按照网上说的增加 PATH_TRANSLATED 之类的变量却可以得到 "File not found." 的返回. 最后, 本猫通过比较 Nginx 官方包和 Debian 提供的 Nginx 包中的 fastcgi_params 文件, 确认是因为
- [pybabel 不支持 PO 文件 "Language" 字段的临时解决方法](https://felixc.at/2014/09/workaround-for-pybabel-not-supporting-language-header-of-po-files/) - Babel 的上游似乎很不活跃, 我有根据之前一个 Pull Request 添加测试后再次提交这个更改, 但是没有得到任何回应... 因为急用, 就先采用了这个临时的方法. 如你所料, 这又是一个丑陋的 monkey-patch :D 使用这个脚本来执行 pybabel extract, update, compile 等操作时, 如果用 -l 参数正确指定了语言, 生成的相应 .po/.mo 文件里就能保留相应的 Language 字段了. #!/usr/bin/env python import sys from pkg_resources import load_entry_point import babel.messages.catalog _get_mime_headers = babel.messages.catalog.Catalog._get_mime_headers def _get_mime_headers_with_language(self): headers = _get_mime_headers(self) if self.locale is not None: headers.append(('Language', str(self.locale))) return headers babel.messages.catalog.Catalog.mime_headers
- [用 Jinja 的 Babel 支持来提取 Bottle STPL 模板里的待翻译文本](https://felixc.at/2014/10/extract-translation-strings-from-bottle-stpl-template-using-jinja-s-babel-integration/) - Bottle 的 SimpleTemplate (STPL) 模板引擎虽然颇为简单, 但是从我们长期的使用看来还是十分方便的. 然而美中不足的是, Bottle 并没有像 Jinja 那样对 Babel 的待翻译文本提取工具进行集成支持. 因此, 当我们需要提取模板中的待翻译文本的时候, 便只好把主意打到语法有些接近的 Jinja 上面了. 安装 jinja2 模块, 然后直接使用 Jinja 处理全部模板文件: [jinja2: **.html] (如果你仍在使用 Bottle STPL 的默认后缀 .tpl, 可以按照需要进行修改.) 这时我们会发现, 大部分的文本被提取出来了, 但是仍然可能会缺一些, 这是为什么呢? 阅读 Jinja 关于 Babel 集成部分的文档, 我们看到: Until 2.7 template syntax errors were always ignored. This was done since many
- [Arch Linux [testing] 系列仓库简介](https://felixc.at/2015/09/a-brief-introduction-to-arch-linux-testing-repository-series/) - Arch Linux 中的 [testing]、[community-testing] 和 [multilib-testing] 三个仓库构成了 [testing] 系列仓库。由于网上许多地方对 [testing] 系列仓库存在一定的误解,我作为一只开发者,想藉此文介绍一下 [testing] 系列仓库。 一、[testing] 系列仓库里有哪些包?主要有三类,按照数量排序应该是:由 soname 等 TODO 产生的大批完全未经测试的包;重要软件包、软件集合的更新、不靠谱上游推出的新版本、上游大版本更新等维护者虽然测试过但是不敢肯定没问题的包;因为维护者没有时间等情况而完全未经测试的包。注意,这里多数的情况都是完全未经测试的包,keep in mind。 二、什么情况下软件包会留在 [testing] 系列仓库里很长时间?主要也有三类:没人测试给 signoff 的;已知有问题但还未修复或不知道怎么修复还在研究的;维护者明明拿到 signoff 了(针对目标仓库是 [core] 的情况)或明明不需要 signoff(针对所有除了 [core] 以外的仓库)但还是觉得没把握的。简单来说,一般情况下你想用的新版软件不会在 [testing] 系列仓库里停留超过一个星期,除非它已经被发现有问题了。 三、开 [testing] 系列仓库需要满足什么条件? 对当前系统中所有重要资料的备份。因为你不知道你装的下一个未经充分测试的包里是否会出现类似之前 bumblebee 或 steam 那样的灾难性错误。 有从包括 bumblebee 在内的各种灾难中恢复的能力。几乎没有人能帮你完成这件事,所以你需要自己拥有这种能力。这里包括的不止是对修复针对性问题所需要的知识和/或找到这些知识的能力,还包括提前准备好修复工作中需要的工具,比如 USB 安装介质和你的备份。 能接受系统在一段时间内不可用。 如果你正在工作中赶进度,或者明天就需要在一场演讲中用到,这不是一个开启 [testing] 跑更新的很好时机。请保证你在满足前两个条件的情况下,还能接受你的系统需要一段时间才能修复这个事实。无论是找到问题、修复还是重装系统,还有从备份中 恢复文件,都是需要一定时间的。 最后,如果读到这里还没被我吓跑,欢迎你像我一样启用 [testing]
- [Pacman Hooks 简介](https://felixc.at/2016/05/a-brief-introduction-to-pacman-hooks/) - Pacman 5.0 带来了 Hooks 支持,但在大规模应用前,我们留出了一个多月的时间来让用户先升级到 Pacman 5.0(因为同时升级 pacman 和有定义 hooks 的包会导致无法正常执行这些 hooks)。现在距离 Hooks 正式投入使用已经过去了一个月,我觉得是时候介绍一下 Hooks 和如何使用它了。 先来看一个简单的 Hook: [Trigger] Type = File Operation = Install Operation = Upgrade Target = usr/lib/tmpfiles.d/*.conf [Action] Description = Creating temporary files... When = PostTransaction Exec = /bin/sh -c 'while read -r f; do /usr/bin/systemd-tmpfiles --create "/$f"; done' NeedsTargets 这个
- [不双清给一加氢 OS 刷上 Google Apps](https://felixc.at/2016/07/install-google-apps-on-h2os-without-wiping-data-or-cache/) - 最近入爪一台一加 3,解锁刷 root 后几乎配置完了所有东西,然后才发现忘记了 gapps。网上看到许多人在这种情况下刷 gapps 遇到了各种各样的问题,一般都被建议双清解决。我查找了一些资料后,决定试试不双清自己修复权限问题。 安装 OpenGApps 这里的假设是已经刷过第三方 Recovery,我这里是 TWRP。从 OpenGApps 网站下载对应的包(我这里对应的是 ARM64、6.0),我选择了 nano 包。 重启进入 Recovery 刷入此包。然后不要急着重启,因为大量网友反应此时重启后会不断 fc。我在一加论坛找到了这样的方法,经实测有效(针对 TWRP,其他 Recovery 请自行调整):此时应回到 Recovery 首页,进入 Mount 页面勾上 System,然后回到首页依次选择 Advanced -> File Manager -> system -> priv-app -> SetupWizard,然后点击右下的选择气泡,最后点击 Delete 删除这个文件夹。 重启正常进入系统后,点击 Google Play 或直接添加 Google 帐号即可。 遇到的问题 一、Google Play 无法正常下载应用 Google Play 下载或更新任何应用时,提示 DF-DLA-15
- [记一次磁盘数据损坏的修复过程](https://felixc.at/2017/03/recover-from-corrupted-disk/) - 昨晚我大概没有把硬盘插紧,零点(一堆计划任务执行时)在 dmesg 里看到了大量 ext4/SATA 错误。今天开机时 BIOS 直接提示没有可引导的设备。下面记录了我所有的测试和恢复步骤: 用备份盘开机,首先发现 /dev/sda 存在,但没有任何 /dev/sda*。判断是分区表损坏。 执行 testdisk 快速扫描找回分区表,因为盘里只有一个分区,这一步很顺利。继续操作写回分区表。 此时 /dev/sda1 已经出现,尝试 mount,失败。提示 ext4 没有 journal。 执行 fsck.ext4 /dev/sda1,期间提示包括 root node 不是 directory 等一系列错误,一路 y 下去重建了 root node,并把一堆目录丢到了 /lost+found。 重新 mount,成功挂载到 /mnt。 进去查看,发现只有一个 ./lost+found。果然 / 目录里的信息丢失了。 进入 ./lost+found,里面有二十来个目录。一个个进去查看。 根据目录内容,将 home、var、usr、etc、srv、opt、root、boot 猜出来,并移动回对应的 /mnt/*。剩下的多是空目录,放弃。 尝试 arch-chroot,失败,想起来还需要重建 / 里的一些 symlink 和空目录。 mkdir dev
- [给 Arch 打一个包 - Python 模块篇](https://felixc.at/2017/08/make-an-arch-package-for-python-module/) - 这是一篇简化的教程,如果你有一个喜爱的 Python 模块不在 Arch 仓库里,AUR 里也没有,可以尝试读下去。 准备 对 Python 模块来说,一般仅仅一个 PKGBUILD 文件就足以完成所有的事情。现在你可以打开你最喜欢的文本编辑器,把下面这一个简单的 PKGBUILD 模板复制进去: # $Id$ # Maintainer: Felix Yan pkgbase=python-whatever pkgname=('python-whatever' 'python2-whatever') pkgver=0.4.3 pkgrel=1 pkgdesc='Easy way to make anonymous functions by partial application of operators' arch=('any') license=('BSD') url='https://github.com/Suor/whatever' makedepends=('python-setuptools' 'python2-setuptools') checkdepends=('python-pytest-runner' 'python2-pytest-runner') source=("$pkgbase-$pkgver.tar.gz::https://github.com/Suor/whatever/archive/$pkgver.tar.gz") sha512sums=('162d66753ef4fb15279150b7fa953b4ecf086e2b36cc77531dac099ff4a25b3458af627bdf52e168b7b4b2163a1445f35c2c656b1c10c0c73502d2357ba42dd8') prepare() { cp -a whatever-$pkgver{,-py2} } build() { cd
- [Arch Linux devtools 简介 - 在干净的环境里编译软件包](https://felixc.at/2017/08/introduction-to-arch-linux-devtools-build-packages-from-a-clean-chroot/) - devtools 是 Arch Linux 开发者们用来往官方仓库里推进软件包使用的一系列工具。由于里面有许多工具可能不是我们常用的,这里主要介绍里面的一部分——用于在干净的环境中编译软件包的命令。 为什么要在干净的环境里编译软件包?这里有几个常见的理由: 避免忘记写依赖 - 当前环境中已安装的软件包可能在普通的 makepkg 过程中被忽略,最后在 depends 或者 makedepends 等列表中缺失。 避免编译过程污染环境 - 因为一些你可能没有想到的原因,编译过程中可能会对你当前的系统产生污染,比如跑 npm install 的时候可能会把缓存塞到 $HOME。 避免因环境不干净导致的奇怪编译错误 - 你的环境中可能有各种不干净的情况,比如 profile.d 里覆盖了 gcc 等常见命令、/usr/local/bin 里有覆盖常用命令、用非系统包管理器安装(覆盖)了一些东西等。 或者你只是不想把这个软件包编译时需要的一堆乱七八糟的依赖都装在自己机器上。 如果你有这样的需求,可以考虑使用 devtools。安装过程很简单 pacman -S devtools 下面需要考虑的是,这个软件包是符合哪个仓库规范的。由于一般用户不需要考虑 staging 系列仓库和配置文件等问题,下面这个列表是从 ArchWiki 中简化的版本: (注意最后两个命令来自 devtools-cn-git 软件包,可以从 [archlinuxcn] 仓库中得到) 直接在包含 PKGBUILD 文件的目录中执行对应的命令(替换原来工作流里的 makepkg 命令)即可。 常见问题、小技巧 软件包的依赖不在官方仓库中,如何把这个包“塞”到编译环境中? extra-x86_64-build --
- [尝鲜可能比 sunpinyin 好一点的新拼音输入法](https://felixc.at/2017/08/lets-try-a-new-pinyin-input-method-that-might-be-slightly-better-than-sunpinyin/) - 大概很多人还不知道,在老K同学偷偷默默开发了很久后,新一代的 fcitx5 已经“能用”了。不过因为还处在早期开发阶段,现在只有拼音输入法能用,而且输入界面极挫,没有配置界面和任何命令行帮助信息等。 先来一段 demo: 下面简单介绍一下 Arch 里的安装及配置方法: 首先从 AUR 中安装相关的软件包: yaourt -S fcitx5-git fcitx5-qt-git fcitx5-gtk-git fcitx5-chinese-addons-git 依赖中其他的相关包会被 yaourt 自动安装。如果你更喜欢手动安装,可以参考下面的顺序: xcb-imdkit-git -> fcitx5-git -> libime-git -> fcitx5-chinese-addons-git -> fcitx5-gtk-git -> fcitx5-qt-git 注意原来的 fcitx 和这系列软件包冲突,可能会被提示卸载。 安装完成后,把下面的内容粘贴到 ~/.config/fcitx5/profile 中(来自老K的博客) [Profile] # CurrentGroup CurrentGroup=Default [Profile/GroupOrder] 0=Default [Profile/Groups/0] # Default Input Method DefaultIM=pinyin # Layout Default Layout=us # Group
- [Thunderbolt 3 eGPU Bumblebee 方案尝鲜](https://felixc.at/2018/09/trying-out-thunderbolt-3-egpu-with-bumblebee/) - 最近从公司淘了一块 GTX 1060,淘宝了一个显卡盒折腾 TB3 eGPU 方案。由于笔记本经常带出门,打算采用即插即用的 bumblebee 方案(回家插上盒子用独显,拔下盒子可以带出门,可以正常待机不用重启)。下面记录一下 Arch 上配置的步骤和遇到的坑。 1、准备软件包 # pacman -S bumblebee primus lib32-primus nvidia-dkms lib32-nvidia-utils bolt 2、修改 bumblebee 配置 修改 /etc/bumblebee/xorg.conf.nvidia,在 Section "Device" 中加入: Option "AllowExternalGpus" "true" 修改 /etc/bumblebee/bumblebee.conf,在 [optirun] 中修改: Bridge=primus 3、插入 TB 线,验证设备(不建议完全关闭设备验证!) 输入 boltctl 查看设备信息,记下设备的 uuid。 $ boltctl ● TUL TBX-550CA ├─ type: peripheral ├─ name: TBX-550CA ├─
- [为 glibc localedata 添加民国纪年支持](https://felixc.at/2018/11/add-minguo-calendar-support-as-glibc-localedata-era/) - 昨天被 @聞其詳 问起 glibc 对日本平成XX年的纪年支持情况(感谢 @farseerfc 老师),发现 glibc localedata 中并未包括民国纪年支持。在查询文档后稍微鼓捣了一下,简单实现了这个功能: $ LC_TIME=zh_TW.UTF-8 date +%EY 民國107年 $ LC_TIME=zh_TW.UTF-8 date +%EY --date="1912/4/3" 民國元年 $ LC_TIME=zh_TW.UTF-8 date +%EY --date="1913/4/3" 民國2年 $ LC_TIME=zh_TW.UTF-8 date +%EY --date="1911/4/3" 民前1年 $ LC_TIME=zh_TW.UTF-8 date +%EY --date="1900/4/3" 民前12年 修改方法: 编辑 /usr/share/i18n/locales/zh_TW 文件,找到 END LC_TIME,在它之前加入这样三行: era "+:2:1913//01//01:+*:民國:%EC%Ey年";/ "+:1:1912//01//01:1912//12//31:民國:%EC元年";/ "+:1:1911//12//31:-*:民前:%EC%Ey年" 保存后重新 locale-gen 即可。 不足:暂时没有弄明白怎么实现中文数字,不过阿拉伯数字也还过得去…… 提交:glibc 的提交方式好像比较麻烦,所以先写篇博客好了。已提交并合并到 glibc。
- [用脏办法解决 BLE 鼠标重连后指针不动的问题](https://felixc.at/2019/01/dirty-hack-to-workaround-cursor-not-move-issue-after-ble-mouse-reconnect/) - 我的蓝牙鼠标(雷柏 MT750)使用 BLE(Bluetooth Low Energy) 连接笔记本时,时常遇到自动重连后电脑这边认为已连接,而鼠标那边灯自动灭掉,鼠标指针无反应的问题。在网上反复搜索 bluez 相关问题找到了许多类似问题,鼠标类型也集中在罗技、ThinkPad 等 BLE 鼠标上。 偶然间发现每次重连后,如果手动用 bluetoothctl 发一个 “pair” 指令(会超时失败),就能令鼠标正常连接。给 bluez 报了一个 bug 后,我写了下面的简单脚本先绕过问题: #!/usr/bin/python import dbus import dbus.mainloop.glib from gi.repository import GLib adapter = "hci0" device = "xx:xx:xx:xx:xx:xx" device_path = '/org/bluez/' + adapter + "/dev_" + device.replace(":", "_") dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) system_bus = dbus.SystemBus() device_object = system_bus.get_object('org.bluez', device_path) device_interface =
- [nspawn.org:简单的 systemd 发行版容器](https://felixc.at/2019/04/nspawn-org-simple-container-for-systemd-distributions/) - 如果你想要运行一个发行版容器,而又不想被 docker 一类的重量级方案打扰,现在有一个新的简单方案了。 nspawn.org 目前提供了 Arch、CentOS、Debian、Fedora、Ubuntu 的各版本镜像,并可以直接用 systemd-nspawn 的验证机制进行签名验证。 推荐的用法是使用其提供的 "nspawn" 工具。下面以创建一个 Fedora 30 容器为例: 1、获取工具: $ wget https://raw.githubusercontent.com/nspawn/nspawn/master/nspawn $ chmod +x nspawn 2、获取 Fedora 30 镜像: $ sudo ./nspawn init fedora/30/tar 3、启动容器并获取 shell: $ sudo machinectl start fedora-30-tar $ sudo machinectl shell fedora-30-tar Connected to machine fedora-30-tar. Press ^] three times within 1s to
- [萌新的 PolarFire SoC Icicle Kit 初体验](https://felixc.at/2022/06/newbies-polarfire-soc-icicle-kit-first-experience/) - 这两天翻出来了去年代收的 PolarFire SoC Icicle Kit。因为隔壁的 FPGA 大佬们看不上这块板子,我打算尝试物尽其用一下,目标只是用板子上的 RISC-V 核启动 Arch Linux RISC-V 的 rootfs 测试(把它当作一块 SD 卡槽没有问题、并且带 PCIE 的 HiFive Unleashed 来用。隔壁嵌入式群的大佬们:买椟还珠!)。如此便开始了年轻人的 FPGA 初体验(可能还是不能算)。 噩梦的开始 一开始尝试的当然是最新版的 Yocto 镜像,毕竟这是“官方”的 Linux 镜像。结果刷完后立刻遇到了启动失败: 一开始我还以为是 SD 卡坏了。在多次尝试未果后…… 当时的猜测是(不一定对),可能因为板子上 FPGA 部分(抱歉,我不知道专业的称呼)不够新,所以我打算刷一下 HSS。结果这成为了噩梦的开始。 可怕的“硬件”工具链 我最初参考的文档来自 U-boot:https://u-boot.readthedocs.io/en/latest/board/microchip/mpfs_icicle.html 这份文档可能已经颇为过时,里面编译 HSS 的部分从一开始就找不到名叫“icicle-kit-es”的 BOARD. 在我加上 mpfs- 前缀,并根据后续报错依次按照我的 CROSS 工具链目标修改了 PLATFORM_RISCV_ABI=lp64d PLATFORM_RISCV_ISA=rv64gc 之后,我遇到了第一个大魔王:SoftConsole。 好在这个工具可以无需注册直接下载。 顺利安装完成后,按照要求设置 SC_INSTALL_DIR,我终于看到了……下个错误:缺少
- [Arch Linux 社区中不成文的约定(一)](https://felixc.at/2018/08/arch-linux-community-undocumented-details-1/) - 作为一个年轻和小众的社区(咳咳),Arch Linux 社区中有着许多不成文的约定。本文希望通过稍稍讲解一二,来消除一些新人们常常感到的困惑。由于预感到日后可能还会有更多问题,暂且认为这是系列里的第一篇 :P 修理“坏”包和提醒更新 仓库里一般的包可能有一个或多个维护者,也可能没有维护者,成为“孤儿”。如果坏掉或者过期的包是一个孤儿,申请从仓库里删掉是更有效的方法,这样它可以在 AUR 找到新的主人。发邮件到 aur-general 解释一下情况,并表明自己或者别人想维护它,一般都会很快得到解决。 如果“坏”包有维护者,但他太忙了呢?这种情况下,这个包很可能已经在 Bug Tracker 里泥足深陷。这种时候可以通过帮维护者一个小忙的方式来促进问题的解决。如果有人找到了上游 Bug Report,并且上游已经修复提供了 patch 的话,可以考虑把 patch 贴到 Arch 的 Bug Tracker;如果这件事已经有人做了,可以修改 PKGBUILD 打上 patch,然后把改好的 PKGBUILD 贴上去;如果连 PKGBUILD 都有人准备好了,而且过去了一段时间的话,可以考虑把这份准备好的 srcpkg 或者 diff 直接发邮件给维护者,附上简短的感谢和一个笑脸 :) 同样的道理,如果一个过期包已经被标记过期很久了,也可以准备一个新版的 PKGBUILD 发邮件给维护者。 提供旧版软件包 因为懒得迁移各种各样的原因,你可能希望某些软件包的新旧版本同时提供。在 Arch 的实践中,这种情况被尽量避免了。把无法迁移的古老软件删掉还是提供一个旧版库让古老的软件能用,一定程度上取决于维护者对这个古老的软件有多坚持。 另一个考虑的因素是上游如何看待新旧版本。有的软件新版发布后,旧版就不再维护了,这种情况下 Arch 通常尽力避免成为新的上游。而有的上游则同时维护多个版本,Arch 这边根据其他软件的依赖情况,可能会有选择性地同时维护几个。 第三方 patch 能不能加上 Arch 对 patch 的态度比较保守,在规则里写的是一般只有修复编译和主要功能的上游已经接受的 patch
- [请不要把 Wifi Dongle 翻译成加密狗](https://felixc.at/2018/10/please-dont-translate-wifi-dongle-to-encryption-lock/) - 在许多翻译过来的文本里,无线网卡(Wifi Dongle / Wifi Adapter)被翻译成了“加密狗”。最近在微博大火的一篇《俄罗斯特工又蠢了!实名行动暴露自己还卖了300多特工队友.....》里面,又出现了类似的错误,让我不得不想说说这个问题。 先来看看这个例子: 文章描述了几个黑客在目标附近发射伪造热点钓鱼,此处的未翻译单词包括了 Wifi 和 Dongle。根据上下文,带一个无线网卡发射热点应该是正确的意思,而加密狗在这里和上下文没啥关系…… 我尝试在搜索引擎里搜索对应词组,很不幸,惨状令人叹息: 就连正规电子产品的用户界面都中了枪: 这个问题的来源,看起来是国内加密狗早年被简单称呼为 Dongle: Dongle,按照维基百科的解释,是和 Adapter(适配器)很类似的一个词,泛指了一大类连接、转换器。 Wireless/Wifi Dongle = Wifi 适配器,Bluetooth Dongle = 蓝牙适配器,以此类推。所以,在看到类似 USB Dongle 这样模糊名字的时候,请务必联系上下文。如果原文用了 Wifi Dongle 这样比较明确含义的词组,请翻译为 Wifi 适配器,或者无线适配器,不要再翻译成加密狗了。
- [Hello world!](https://felixc.at/2009/12/hello-world/) - Welcome to Felix's Blog. This is my first stand-alone blog, and it's still under construction. 欢迎来到肥猫的博客。这是我的第一个独立博客,还在建设中。
- [Linux 发行版:“强迫症患者”们的共识社区](https://felixc.at/2018/05/linux-distribution-intentional-communities-for-ocders/) - 世界上有几百个还在更新的 Linux 发行版。新手常常感叹挑花了眼,换来换去也找不到自己满意的。维护一个发行版需要花费很多时间、精力,为何人们要这样“重复劳动”呢? “强迫症患者” 我小时候追求整齐、秩序,无论是家里的电灯开关还是电脑上的图标,一定要排列的整整齐齐,不惜自己接电线、一个个重命名文件。“我的电脑”、“我的文档”、“网上邻居”,下面的蓝色 e 名字太长,就改叫“上网浏览”吧……然而随着安装了越来越多的软件,这些“秩序”被不断破坏,自己不断妥协。有的程序在我的文档里乱放目录——忍。有的程序会自动下载更新,然后在我代码写到一半的时候弹出来更新提示——忍。有的程序会带各种运行时包安装、替换系统文件导致另外一个程序运行不了——忍。 每次出了大问题的时候,所有人都告诉我:“现在只能重装了。” 2008年的时候,厌倦了折腾各种魔改定制 WinPE 的我首次下定决心安装了 Ubuntu 8.04,从此打开了新世界的大门。 不再需要依赖猜测。手握源代码,就如同掌握了施工的图纸,一切不符合心中秩序的地方都能找到原理。一群志同道合的前辈早已构建了井井有条的目录结构、依赖关系、软件仓库、……一切都显得那么美好。和每个第一次玩 Linux 桌面的折腾狂一样,我花了很多时间试图让 GTK+ 和 Qt 的程序界面一样而且好看,以及折腾 compiz 特效。 然而事情也不是那么完美。当时我在压片组用 x264 压片,采用的方案是使用加上一些特别 filter、并且带 lavf 输入的 x264 命令行。我用 wxPython 做了一些小工具,比如音轨提取、mkv 合成等,但是自动压片脚本需要的 x264 不能用仓库里的版本。我注册了 Launchpad 帐号并创建了一个 PPA,接下去,我花了很长很长时间都没有学会打出一个靠谱的包。别说各种 macro 的使用,就连拆包的部分都让我焦头烂额了。 长久以来折腾的零碎结果——各种经验、配置文件、补丁、翻译,散落在各种网站、论坛、聊天工具,而自己真正想分享出去的成果——软件包,又不知如何下手。我想要为这份秩序做点贡献,怎么办呢?后来群里的大牛们给我了一个简单一些的方法——AUR。 我在 2011 年安装了 Arch,从此找到了贡献之路。 共识社区 使用 Ubuntu 的时候,我有过很多想打包的软件,也曾经用简单的 checkinstall 打出过数个“勉强算是包”的包,但是这个过程一直十分痛苦,以至于我搁置了大量的 TODO。 而在 AUR 里,一个简单的十几二十行普通
- [修复 Android ROM 的 Google 网络定位](https://felixc.at/2016/09/fix-google-gms-network-location-on-your-android-rom/) - 一些定制、第三方 ROM 在安装了 Google 框架后,仍然无法使用其网络定位功能。我在网上搜索了许多资料,整理如下。 本文假设你的设备已经 Root,并已经安装了 Google 框架。我测试用的 ROM 为一加氢 OS。 一、准备工具 需要准备的工具有 zip、unzip、apktool、adb、zipalign,以及一个好使的文本编辑器。 (注意 zipalign 工具可能不在 $PATH 中,如 Arch AUR 包 android-sdk-build-tools 安装后会放在 /opt/android-sdk/build-tools/$pkgver/zipalign) 二、提取需要的资源 取出 ROM 中的 framework-res.apk,并反编译得到需要修改的文件: adb pull /system/framework/framework-res.apk apktool if framework-res.apk apktool d framework-res.apk 三、修改文件 修改位置提供商相关设置,使用 Google 提供网络定位。 1、修改 framework-res/res/values/arrays.xml,找到 config_locationProviderPackageNames 的位置,确保 Google 在列表中。如我的 ROM 默认只有 com.android.location.fused 和 com.amap.android.location
- [来尝鲜 KDBus 吧!](https://felixc.at/2014/02/lets-try-kdbus/) - 虽然这玩意现在还不被认为稳定, 而且有些东西用它之后工作不正常, 但是我还是想介绍一下 - 怎么说不折腾不舒服是吧! 首先介绍下 kdbus (及相关的用户态工具), 这玩意是 Greg KH (Linux 内核稳定版本负责人, 主要负责 kdbus 部分) 和 Lennart Poettering (混乱邪恶的 Avahi, Pulseaudio, Systemd 作者, 主要负责 libsystemd-bus 部分) 等大神写的, 用来在内核态实现一个 dbus 的实现, 而用户空间的 dbus-daemon (包括 session dbus) 则交由 libsystemd-bus 来提供(兼容)接口. 下面引用的介绍来自Solidot: kdbus支持内核消息过滤、提供了可靠的次序保证,支持传送文件描述符,它被认为比用户空间的D-Bus能提供更强的安全性和更好的性能。 不过对于咱用户来说, 关心的主要问题当然是更好的性能啦, 根据一篇 Gentoo 的如何玩 kdbus 的介绍, 咱能感觉到的变化有: dbus 本身更快了! 机器启动也更快了! 下面就是 Arch 里测试的步骤啦,
- [将 Gitlab 迁移到新服务器](https://felixc.at/2013/11/gitlab-migrate-to-new-server/) - 今天把一台服务器上的 Gitlab 换了个地儿, 记录一下遇到的大大小小的各种坑们: 原服务器系统是 Ubuntu, 而新的是 Debian, 各种库版本不一样(从 glibc 开始), 于是 Ruby 的 vender 文件夹显然不能留, 各种清空重新跑 bundle. Gitlab 用到了 Redis, 虽然主要的配置说明里没有用力提及. 因此搬的时候连 Redis 的数据库一起搬过去. (当然主力数据库比如 MySQL 也必须不能忘记啦) /home/git/.ssh/authorized/keys 保存了能用 git 帐号登陆服务器的所有小伙伴的 SSH PubKey 们, 需要一起搬过来 gitlab-shell 需要重新安装以走进科学 (只需要跑它那个 bin/install) initscript 脚本和 logrotate 配置都要重新安装不能忘记的说 nginx 需要访问 gitlab 的 socket, 而 rsync 过来的目录里因为 exclude 掉了 gitlab/tmp/
- [Arch Linux 折腾小记 - 申请 TU 通过后三个多月来我做了什么?](https://felixc.at/2013/02/what-have-i-done-since-approved-as-arch-linux-trusted-user-more-than-3-months-ago/) - 自从我申请 Arch Linux Trusted User 通过后: 我往 [community] 仓库添加了这些软件包(按先后顺序): pyzy: 作为 ibus-pinyin 的新依赖引入, 拼音注音库 kcm-fcitx: Fcitx 输入法框架(下文简称 Fcitx)的 KDE Config Module (KDE 控制面板模块) fcitx-cloudpinyin: Fcitx 的云拼音输入引擎插件 (注意这不是一个输入法哦! 在 fcitx 中各拼音输入法的第二个候选词的位置插入一个云拼音引擎的返回结果, 支持 QQ/搜狗/百度/Google 的云输入法 API) fcitx-configtool: Fcitx 的经典配置工具, 基于 gtk3 fcitx-sunpinyin: 为 Fcitx 添加 sunpinyin (中文拼音)输入引擎支持 (词典相当智能, 强力推荐) fcitx-anthy: 为 Fcitx 添加 anthy (日语)输入引擎支持 fcitx-chewing: 为
- [在地址栏输入一个字母后的网址](https://felixc.at/2011/10/these-websites-best-describe-me/) - 在好友的日志里看到了一份他的网址列表, 随手整理了一下自己的 "These websites best describe me." a is for aur.archlinux.org //好地方不解释... b is for bilibili.tv //这个..必须的..看糟糕物的地方 c is for chdbits.org //下电影的地方... d is for dns.he.net //我主要的DNS托管地 e is for ebay.com //好吧, 其实上的挺少的, 不过其他e开头的网址开的更少吧... f is for felixcat.net //这个必须的= =虽然域名改了一段时间了, 但是访问次数还是没有老域名多... g is for g.camoe.org //...下糟糕东西的地方 h is for hub.hust.edu.cn //..查分选课的地方 i is for iptorrents.com
- [Plink+Polipo 轻松打造IE可用的SSH Tunnel(Win)](https://felixc.at/2010/01/plink-polipo-ssh-tunnel/) - 通常介绍的Windows环境下构造SSH Tunnel使用的软件是MyEntunnel、Privoxy,出于绿色、轻量的考虑,本文旨在介绍一种Felix个人认为的最简易的搭建SSH Tunnel的软件方法(Polipo+Plink)。
- [Discuz! X1.5 的 电驴[eD2K]链接发布插件](https://felixc.at/2011/01/discuz-x15-ed2k-link-plugin/) - 效果图: 原插件来自 http://www.discuz.net/thread-1624289-1-1.html 原插件是 For Discuz 7.2 的, 我进行了一些修改使得它在 Discuz X1.5 下正常工作. 注: 本插件用到的 js/图片 资源请到上面的地址下载. 下面就是安装步骤了 很抱歉这个插件仍然一点都不GREEN :( 1, 编辑 source/function/function_discuzcode.php 找到这几行: if($allowbbcode) { if(strpos($msglower, 'ed2k://') !== FALSE) { $message = preg_replace("/ed2k:\/\/(.+?)\//e", "parseed2k('\1')", $message); } } 修改为: if($allowbbcode) { if(strpos($msglower, 'ed2k://') !== FALSE) { $message = preg_replace("/\s*\[emule\](.+?)\[\/emule\]\s*/ies", "emu('\1')", $message); } } 2, 在这个文件末尾 ?>
- [[译] 给XMind脑图文件添加Gnome缩略图显示 [Ubuntu]](https://felixc.at/2010/07/howto-thumbnails-for-xmind-mind-map-files/) - 由于 XMind (脑图软件) 使用一种类似 OpenOffice.org 的文件格式, 我调整了那些脚本, 让它们也能为我的 XMind 脑图文件创建缩略图. 由于 XMind 文件尚无 mime 类型定义, 我们还需要花一些额外的功夫来解决这一问题. 1, 为 XMind 文件设置一个 mime 类型定义. 默认情况下, XMind 文件被识别为可执行/压缩文件(application/zip), 因此我们需要为 XMind 文件指定 mime 类型: sudo gedit /usr/share/mime/packages/x-xmind.xml 我仅仅把一些东西简单的放在了一起, 让系统把 ".xmind" 为扩展名的文件认为 mime 类型 应用程序/x-xmind(application/x-xmind) XMind mindmap 保存这个文件之后, 更新 mime 类型的数据库: sudo update-mime-database /usr/share/mime 2, 创建生成 XMind 文件缩略图的脚本 sudo gedit
- [使用电骡KAD,请慎用“断头档”](https://felixc.at/2010/02/emule-kad-half-complete-file-friend-connect/) - 分流供源,留档分享,是让eMule下载速度提高的最直接、最有效的途径;“断头档”虽然增加了KAD连接数,却严重降低了KAD节点的“质量”,其实是得不偿失的。
- [天朝有风险,上网须谨慎——网络安全知识普及系列(一)——上网环境篇](https://felixc.at/2010/02/network-safety-1/) - 对于Google被窃密事件,不上推特的普通用户可能难以意识到天朝令人担忧的网络安全环境和隐私保障体系。因此,Felix谨从平常容易注意到的地方向大家介绍保护自己的必要技巧。
- [介绍一款 Windows 桌面环境的 Twitter 客户端:Tween](https://felixc.at/2010/02/twitter-client-tween-on-windows/) - Tween 是一款由日本人开发的 Windows 下的 Twitter 客户端,功能比较强大,不支持自定义API,但是支持普通HTTP代理连接方式。免安装,界面语言可选日文/英文(没错,没有中文)。
- [CNNIC,我不信任你!——从“受信任的根证书”里赶走CNNIC](https://felixc.at/2010/01/throw-out-cnnic/) - 出于对CNNIC深深的不信任,我决定将CNNIC ROOT从“受信任”的列表里赶出去。因为IE/Chrome采用微软的CA目录,而微软现在暂未将CNNIC加入,因此需要先从Firefox中导出这几个证书。
- [给dabr添加多种图片上传服务](https://felixc.at/2010/01/add-more-picture-upload-services-to-dabr/) - 众所周知,Dabr/奶瓶腿默认的图片上传服务Twitpic在很久以前就已经惨遭杯具,为了让广大手机推友能完善体验到Twitter衍生的强大的图片功能,Felix将现在流行的数种未被墙的图片上传服务(Twic.li/Mobypicture/imgur/Img.ly/TwitSnaps/Tweetphoto)加入了Dabr
- [分享我喜欢的小软件,第一批(Win)](https://felixc.at/2010/01/small-software-1/) - 分享我喜欢的小软件(PicPick,Clipx,Everything,Virtual CloneDrive,Altdrag,Launchy)
- [几款流行拼音输入法的“用户体验”评测(Win)](https://felixc.at/2010/01/pinyin-input-method-user-experience-evaluation/) - 面对着现在琳琅满目的输入法,我们常常会纠结于“哪个拼音输入法好用?”、“哪个拼音输入法的整句输入智能性最好?”、“哪个输入法在细节上更人性化?”等问题。本文旨在以一名普通用户的角度,从日常的使用中对常见的几款拼音输入法(包括搜狗/QQ/谷歌/紫光/拼音加加等)给出主观的评价,谨供大家参考。
## Pages
- [Donate](https://felixc.at/donate/) - Thank you for supporting my work on Arch Linux, and many other random projects. PayPal: https://paypal.me/felixonmars AliPay:
- [Wiki](https://wiki.felixc.at)
- [About](https://wiki.felixc.at/FelixYan)
- [Friends](https://felixc.at/friends/) - Linux BOYPT Hexchain - 一只很好玩的小青蛙 liangsuilong Ownlinux ACG 好喝的粒粒橙 其他大牛 Ai.freedom - 一起OI的兄弟, 曾经的校友 ZWWoOoOo A-shun nonozone xream 另一个 Felix's Blog - (Felix021) RyanBJF zkaip - 来自火星的一枚话痨 imdalan sunnydayli Lv.Wind 狗狗郑界涵 Rocky 大猫猫 场主的 fqsoft 王二 - 计协的兄弟 Mengyao Li iceboy Derek 麦田 MM组 ELL - 一个漂亮MM ^_^
- [Life](https://felixc.at/life/)
- [Feeds](https://felixc.at/feeds/) - 文章摘要 RSS Entries RSS (Summary) 文章全文 RSS Entries RSS (Full Text) 文章评论 RSS Comments Feed
## Categories
- [Technology](https://felixc.at/category/technology/)
- [Life](https://felixc.at/category/life/)
## Tags
- [Windows](https://felixc.at/tag/windows/)
- [Software](https://felixc.at/tag/software/)
- [SSH](https://felixc.at/tag/ssh/)
- [PHP](https://felixc.at/tag/php/)
- [dabr](https://felixc.at/tag/dabr/)
- [CNNIC](https://felixc.at/tag/cnnic/)
- [Firefox](https://felixc.at/tag/firefox/)
- [Twitter](https://felixc.at/tag/twitter/)
- [eMule](https://felixc.at/tag/emule/)
- [Kademlia](https://felixc.at/tag/kademlia/)
- [AAC](https://felixc.at/tag/aac/)
- [Python](https://felixc.at/tag/python/)
- [wxPython](https://felixc.at/tag/wxpython/)
- [x264](https://felixc.at/tag/x264/)
- [IPv6](https://felixc.at/tag/ipv6/)
- [Ubuntu](https://felixc.at/tag/ubuntu/)
- [Linux](https://felixc.at/tag/linux/)
- [Java](https://felixc.at/tag/java/)
- [Teredo](https://felixc.at/tag/teredo/)
- [isatap](https://felixc.at/tag/isatap/)
- [ThinkPad](https://felixc.at/tag/thinkpad/)
- [VPN](https://felixc.at/tag/vpn/)
- [VPS](https://felixc.at/tag/vps/)
- [nginx](https://felixc.at/tag/nginx/)
- [PPTP](https://felixc.at/tag/pptp/)
- [OpenVPN](https://felixc.at/tag/openvpn/)
- [VB6](https://felixc.at/tag/vb6/)
- [Regex](https://felixc.at/tag/regex/)
- [XMind](https://felixc.at/tag/xmind/)
- [Gnome](https://felixc.at/tag/gnome/)
- [Dropbox](https://felixc.at/tag/dropbox/)
- [Route](https://felixc.at/tag/route/)
- [Cernet](https://felixc.at/tag/cernet/)
- [TurboC](https://felixc.at/tag/turboc/)
- [Compiz](https://felixc.at/tag/compiz/)
- [Natty](https://felixc.at/tag/natty/)
- [Conky](https://felixc.at/tag/conky/)
- [Xorg](https://felixc.at/tag/xorg/)
- [QQ](https://felixc.at/tag/qq/)
- [Android](https://felixc.at/tag/android/)
- [Discuz](https://felixc.at/tag/discuz/)
- [Bottle](https://felixc.at/tag/bottle/)
- [uwsgi](https://felixc.at/tag/uwsgi/)
- [DVD-RAM](https://felixc.at/tag/dvd-ram/)
- [Qt](https://felixc.at/tag/qt/)
- [PyQt](https://felixc.at/tag/pyqt/)
- [Sqlite](https://felixc.at/tag/sqlite/)
- [AutoHotKey](https://felixc.at/tag/autohotkey/)
- [KDE](https://felixc.at/tag/kde/)
- [GTK](https://felixc.at/tag/gtk/)
- [ibus](https://felixc.at/tag/ibus/)
- [Arch](https://felixc.at/tag/arch/)
- [netcfg](https://felixc.at/tag/netcfg/)
- [新浪微博](https://felixc.at/tag/新浪微博/)
- [AUR](https://felixc.at/tag/aur/)
- [Wine](https://felixc.at/tag/wine/)
- [Mercurial](https://felixc.at/tag/mercurial/)
- [systemd](https://felixc.at/tag/systemd/)
- [scrot](https://felixc.at/tag/scrot/)
- [libtorrent](https://felixc.at/tag/libtorrent/)
- [rtorrent](https://felixc.at/tag/rtorrent/)
- [screen](https://felixc.at/tag/screen/)
- [iptables](https://felixc.at/tag/iptables/)
- [Google](https://felixc.at/tag/google/)
- [NAT](https://felixc.at/tag/nat/)
- [Xfce](https://felixc.at/tag/xfce/)
- [Nvidia](https://felixc.at/tag/nvidia/)
- [Fcitx](https://felixc.at/tag/fcitx/)
- [Bash](https://felixc.at/tag/bash/)
- [FreeBSD](https://felixc.at/tag/freebsd/)
- [VirtualBox](https://felixc.at/tag/virtualbox/)
- [pacman](https://felixc.at/tag/pacman/)
- [AWS](https://felixc.at/tag/aws/)
- [Gitlab](https://felixc.at/tag/gitlab/)
- [Git](https://felixc.at/tag/git/)
- [Ruby](https://felixc.at/tag/ruby/)
- [Debian](https://felixc.at/tag/debian/)
- [dbus](https://felixc.at/tag/dbus/)
- [kdbus](https://felixc.at/tag/kdbus/)
- [ActiveX](https://felixc.at/tag/activex/)
- [Steam](https://felixc.at/tag/steam/)
- [Pipelight](https://felixc.at/tag/pipelight/)
- [Flash](https://felixc.at/tag/flash/)
- [MongoDB](https://felixc.at/tag/mongodb/)
- [Ingress](https://felixc.at/tag/ingress/)
- [RISC-V](https://felixc.at/tag/risc-v/)
Document
Not stored for this site.