Category: Opensource

  • 读后: 大教堂与市集

    这本书完美的解答了若干关于开源(open source)的问题. 作为一名开源软件的死忠, 我只能遗憾没早些读完它. 书中的很多观点和论据我就不重复了, 只说说我曾经赞同的错误论点吧. 首先, 我曾经以为, 开源软件的存在是离不开闭源的商业软件的, 因为给开源软件做志愿者是没有收入的, 所以这些”志愿者”们其实是靠商业软件的销售来养活的. 这是错误的. 首先, 不是所有的软件开发人员都是以开发商业软件为工作的. 举个最简单的例子, 淘宝网这类电子商务企业雇佣了很大一批开发人员, 但是淘宝有卖什么”淘宝”牌的软件么? 貌似没有. 他们卖的是服务. 类似还有众多为大企业例如金融/电信工作的开发人员们.因此为软件供应商例如微软工作的开发人员只是一个小部分而已. 那么大企业为何乐于使用并回馈开源软件? 淘宝使用开源的 MySQL 数据库, 并将自己的一些改进回馈到开源社区. 那么这样做淘宝有损失么? 基本没有, 因为淘宝的优势绝对不是使用了一个开源的谁都可以使用的数据库软件. 而如果淘宝拒绝交出对 MySQL 的改进, 那么 MySQL 升级版本就没有这些改进, 那么淘宝每次升级(因为升级版本可能有其他人提交的改进)就不得不自己打补丁, 自己再测试了. 所以开源是互利的开发方式. 我从前以为某某公司为开源贡献就是因为有某种途径获利的阴谋论是不可靠的. 要为商业软件付费是因为要保护知识产权? 当然我是反对盗版的, 但保护知识产权绝对不是以 CD-KEY + 激活等等给用户添麻烦的理由. 而软件的生命在于用户群, 没人用的软件就是死掉的软件, 它的知识产权也就成了笑话. 这样的例子就是 UNIX. 曾经百花齐放的 UNIX 系统, 因为各家厂商为了”保护各自的知识产权”, 各自的改进没有相互共享, 后来导致…

  • Linux 命令行上的文字处理

    总是有些用户, 明明是自己手抖点错了, 却偏偏要怪服务器出问题. 如果让我选择相信一个人还是一台机器, 那… 还是选机器比较放心. 当然也不能冤枉好人, 于是如何从若干 GB 的服务器日志里找到线索就成为解决问题的关键了. 首先是 grep. grep 就好像是个过滤器, 将无关的内容滤掉, 却从不漏下真相. 假设服务器日志是 server.log, 其中包含时间, 地点, 人物: 1, 找出所有含 beijing 的记录 grep beijing server.log 2, 包含 2013-12-01 当天, 在 beijing 关于 user 的记录 grep  -E -e ‘2013-12-01.*beijing.*user’ server.log 3, 也可以将 grep 串联起来, 逐步缩小包围圈, 这样如果个别记录不符合时间, 地点, 人物的顺序, 也不会被漏掉. 当然我觉得日志还是规矩一点的好. grep ‘2013-12-01’ server.log…

  • 用 MariaDB 替换 MySQL

    自从 MySQL 被邪恶的 Oracle 收购后, 貌似就到了后娘手里, 基本没什么发展. 不过还好, 原创班子已另起炉灶, 在 MySQL 5.5 的基础上做出很多改良, 发布了 MariaDB 5.5. 另外一个好消息就是终于看到了国人在开源圈子里的贡献: MariaDB 10.x 分支就包含了来自淘宝的两处贡献: https://mariadb.com/kb/en/what-is-mariadb-100/ <–在这页上找 taobao 即可. 希望这样的案例越来越多吧. 免费使用开源软件, 在事业成功之后回馈开源社区, 这是个良性循环. 目前我试用了 MariaDB 5.5, 是 MySQL 5.5 的完美替代品. 安装方法在此: https://downloads.mariadb.org/mariadb/repositories/#mirror=aarnet_pty_ltd&distro=Debian&distro_release=squeeze&version=5.5 另外如果用 Ruby 的 mysql2 gem 的话, 需要安装 libmariadbclient-dev(debian/ubuntu). 而如果 innotop 这个小工具不灵的话, 很可能需要安装 libterm-readkey-perl. 🙂  

  • 在 Linux 中充分利用多核 CPU 来转码

    上回写的<听美剧, 练英语听力>之后, 发现忘了放个批量处理的脚本. 下面补上, 顺便练习一下多核心协同处理. 嗯, 手机都4核了不是? 用到的命令类似: avconv -i your.mkv -vn -acodec libmp3lame -ac 2 -f mp3 your.mp3 简单的 bash 单循环写法: ls *.mkv |while read i; do avconv -i $i -vn -acodec libmp3lame -ac 2 -f mp3 $i.mp3; done 这就只用到了一个 CPU 核心. 如果将 avconv 放到后台执行就可以做到多进程, 但又不方便控制进程数, 当进程数远远大于 CPU 核心数时就可以体验一下一台服务器快被烤熟时的感觉了. 后来发现 xargs 支持指定数目的进程, 简直是无法要求更多了: ls *.mkv…

  • 用一秒钟解数独(Sudoku)

    最近要热身一下准备做编程工作了, 想起来以前曾计划写个程序解 Sudoku 但一直拖拉也没做成, 那说做就做吧. 首先我从手机里的 Sudoku 游戏里抄了一道高难度的题目, 写成九行九列的一个方阵. 然后找到已知的数字, 猜测未知的数字. 基本算法是递归. 经过一些优化, 从第一个能解题的版本的 4.6 秒改善到第三版的 1.1秒. 改天再战, 希望能进 1 秒内. 源码我放 GitHub 了, 这里就不重复贴了.  

  • 笔记: Linux 简单的网关脚本

    这个现在用到的机会不多了, 因为无线路由器什么的都是现成的网关了. 但如果要在一台 Linux 主机上建一些虚拟机, 可能还用的到. eth0 是外网网卡, br0 是局域网网桥. #!/bin/sh #this is /etc/network/if-up.d/gateway PATH=/usr/sbin:/sbin:/bin:/usr/bin # # delete all existing rules. # iptables -F iptables -t nat -F iptables -t mangle -F iptables -X # Always accept loopback traffic iptables -A INPUT -i lo -j ACCEPT # Allow established connections, and those not coming from…

  • 简单的 Shell Singleton 脚本

    有的时候, 多线程能提高性能, 但偶尔也可能希望有且只有一个线程在运行, 例如系统维护脚本, 如果前一个脚本还没有完成, 而下一次检查时间到了, 那不小心同一个脚本可能就会被运行多次了. 最近发现 pidof 命令很适合此目的, 下面是样本脚本: #!/bin/bash script_name=`basename $0` if [ “$(pidof -x $script_name|wc -w )” -gt 2 ]; then echo ‘More than one instance is running. Exiting…’ exit 1 fi echo ‘Just me alone, get to work…’ for i in 1 2 3 4 5; do echo $i sleep…

  • Ubuntu 12.10, 双屏以及AMD HD 5670显卡

    Ubuntu 12.10 已经发布很多天了, 而我最近却被它折腾的不轻. 好消息是, 不像之前的版本, 12.10 终于能在我的 Xeon E3 上正常启动了(以前版本会在检测显示模式时死掉), 而且对双屏的支持也达到了开包即食的程度. 系统的显示控制面板: 但是毕竟不是真正的硬件显卡在做加速, 因此显示速度可谓爬行, 当然, Unity 效率也不高. 我于是去下载 AMD 的显卡驱动. 这时, 我会羡慕 Windows 用户了, 因为在 Windows 下装个最新驱动一般就没问题了. 我在新安装的 Ubuntu 12.10 系统下安装 AMD Catalyst 12.8/12.9/12.10 几个最近的版本, 均告失败. 不幸中的万幸, Linux 桌面挂了并不是非得进入”安全模式”才能修复. 按 Ctrl + Alt + F1 进入命令行模式, 用下面命令卸载 AMD Catalyst 驱动程序. sudo service lightdm stop…