minecraft server.exe_server.1.6.4. @ECHO OFF java -Xms1g -Xmx1g -jar minecraft server.exe_server.1.6.4.jar pause

September 28, 2016
可能汝和咱的有些不一样(因为 ECC 加密算法在 gpg 2.14 才开始支持).
ECC 又称椭圆曲线密码学,主要优势是在某些情况下
它比其他的方法使用更小的密钥——比如RSA加密算法——提供相当的或更高等级的安全。
不过有些地方还不能用这种新加密算法,这里示范咱就只用默认的 RSA 啦?
输入密钥种类前面的数字(不带括号),然后确认.
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)
在这里设置一个密钥长度,默认的长度应该足够安全了.如果有需要,也可以增加.
RSA 密钥长度应在 1024 位与 4096 位之间。
What keysize do you want for the subkey? (2048)
然后为子密钥设置密钥长度.
是不是想问啥是子密钥 (subkey) ?
一个密钥对下可以添加不同的子密钥,这样做的好处有啥咧?
区分目的:例如一个子密钥用于加密,另一个子密钥用于电子邮件签名等等......
区分设备:比如某些安全性稍差的设备(例如手机),汝可以只把一对专用的子密钥放到里面.
保护主密钥:如果子密钥泄漏,只要吊销相应的子密钥就好,而主密钥依然安全~
请设定这把密钥的有效期限。
0 = 密钥永不过期
= 密钥在 n 天后过期
&n&w = 密钥在 n 周后过期
&n&m = 密钥在 n 月后过期
&n&y = 密钥在 n 年后过期
密钥的有效期限是?(0)
接下来为密钥设置有效期啦~
不用担心密钥过期啦,因为在密钥过期前汝还是可以用 gpg --edit-key 命令来重新设置有效期呗~
设定完过期时间以后输入 y 确认.
You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) &heinrichh@duesseldorf.de&"
真实姓名:
电子邮件地址:
在这里用姓名,电子邮件地址和注释标识这把密钥吧~
gpg 会用这些信息生成特定的用户 ID ,以后对密钥进行操作都需要用到用户 ID 呐~
您选定了这个用户标识:
“ThisIsAName (Comment) &mailaddress@domain.tld&”
更改姓名(N)、注释(C)、电子邮件地址(E)或确定(O)/退出(Q)?
在输入完成之后会有一次确认的机会,觉得没问题就输入 O 继续吧~
接下来会弹出一个对话框,提示汝输入一个密码来保护私钥.至于如何创建一个强密码......
我们需要生成大量的随机字节。这个时候您可以多做些琐事(像是敲打键盘、移动
鼠标、读写硬盘之类的),这会让随机数字发生器有更好的机会获得足够的熵数。
于是随便做些啥吧~
gpg: 密钥 A4A7BA4D077C612F 被标记为绝对信任
gpg: revocation certificate stored as
'/home/horo/.gnupg/openpgp-revocs.d/2A35F5ED3FB328E39DFADA2AA4A7BA4D077C612F.rev'
公钥和私钥已经生成并经签名。
rsa-29 [SC]
2A35F5ED3FB328E39DFADA2AA4A7BA4D077C612F
ThisIsAName (Comment) &mailaddress@domain.tld&
rsa-29 [E]
这个时候就表示密钥生成好啦~
像 A4A7BA4D077C612F 这样的就是汝的用户 ID 啦,有时也会用到下面那个比较长的 ID.
同时会在 .gnupg/openpgp-revocs.d/ 文件夹下生成一份吊销证书,当汝因为某些原因
丢失了私钥或者怀疑密钥被窃时,可以用这个吊销证书来吊销汝的密钥.
这样一对密钥就创建好啦~,下次再细水长流密钥的应用咯 ?
一些定制、第三方 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,并反编译得到需要修改的文件:
三、修改文件
修改位置提供商相关设置,使用 Google 提供网络定位。
1、修改 framework-res/res/values/arrays.xml,找到 config_locationProviderPackageNames 的位置,确保 Google 在列表中。如我的 ROM 默认只有 com.android.location.fused 和 com.amap.android.location 两项,这时应当加入 com.google.android.gms,使得最终结果类似这样:
2、修改 framework-res/res/values/bools.xml,启用 config_enableNetworkLocationOverlay 和 config_enableFusedLocationOverlay。如果原来的值是 false,把它们改成 true:3、修改 framework-res/res/values/strings.xml,设置 config_networkLocationProviderPackageName 为 com.google.android.gms。(我一并修改了 config_fusedLocationProviderPackageName 为 com.android.location.fused,虽然可能是不必要的)
四、应用修改
1、重新编译,并从结果中提取出需要的部分:2、将提取出的文件替换到原来的 framework-res.apk 中:3、对资源进行 4 字节对齐处理:4、将修改后的 ROM 和更新脚本上传到手机:
这个更新脚本是我自己写的,主要处理了权限问题:
install-framework-res.sh和修改后的 framework-res-aligned.apk 一起上传到手机:5、运行脚本,替换 apk 文件:如果此时得到了 $ 命令符,请先获得 root:然后运行脚本:6、重启到 Recovery,清空 Cache & Dalvik Cache,再次重启回到系统。
至此,你的手机应该重新拥有了网络定位功能,赶快打开一个除地图以外的需要定位的 App (比如 Ingress)测试吧!
参考资料:
September 13, 2016
在 Windows 上连接好打印机,安装上驱动,再通过“设备与打印机”共享这个打印机,Windows 上的设置就完成啦~
记得记下来 Windows 电脑的 IP 地址和打印机的名称,还有给共享打印机的账户设置个密码。
打开汝的 Arch Linux ,先安装必要的软件包:
# pacman -S cups, ghostscript gsfonts samba
然后激活并启动 CUPS 服务:
# systemctl enable org.cups.cupsd.service --now
这个时候就可以通过
访问到 CUPS 的 Web 界面啦~
首先点击 "Administration" 打开管理界面:
然后点击 "Add printer",这时会要求汝登录.咱只试过 root 登录能成功.....
接下来选择要连接到哪种打印机啦,连接 Windows 打印机就选择
"Windows Printer via SAMBA" (通过 Samba 连接 Windows 打印机) 呗~
接下来输入打印机的 URI 啦,
对于 Windows 打印机 ,URI 大概像这样:
接着用人类的语言描述一下这台打印机(例如名字和位置啦)~
然后依照打印机的品牌和型号选择适合的驱动程序呗:
咱这台 Samsung M2070 的打印机要从三星的网站上下载驱动 _(:з」∠)_
接着修改默认打印参数,保存,新的打印机就添加好啦~ ?
为了测试打印机,可以从 Maintaince 菜单中选择 “Print Test Page” 打印一张测试页试试 ?
还有记得添加汝自己成为可以使用打印机的用户:
然后桌面环境下的程序应该可以看到打印机了啦~(例如 GNOME)
本文来自,转载请注明。
首先看看你的网卡和驱动组合是否支持这样的操作。
&&& iw list | grep -A2 combinations:
valid interface combinations:
* #{ managed } &= 1, #{ AP, P2P-client, P2P-GO } &= 1, #{ P2P-device } &= 1,
total &= 3, #channels &= 2
上边这个输出说明支持,并且频道可以不一样。
然后,添加一个用途 AP 的网络接口,并配置 IP 地址。我的无线网络接口名字是 wlan0,因为我通过创建空 /etc/udev/rules.d/80-net-setup-link.rules 文件的方式禁用了 systemd 的网络接口改名。
sudo iw dev wlan0 interface add wlan0_ap type __ap
sudo ifconfig wlan0_ap 192.168.17.1
配置 NAT:
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
sudo iptables -w -t nat -A POSTROUTING -s 192.168.17.0/24 -j MASQUERADE
配置 DHCP。我用的是 dnsmasq。它本来是作为 DNS 缓存用的,但是也支持 DHCP,那就用它了:
interface=wlan0_ap
no-dhcp-interface=wlan0
dhcp-range=192.168.17.50,192.168.17.150,12h
注意不要在其它只提供 DNS 服务的接口上提供 DHCP 服务,以免出现冲突。
然后就可以开启热点啦。hostapd 配置如下:
interface=wlan0_ap
driver=nl80211
ieee80211d=1
country_code=cn
ieee80211n=1
ieee80211h=1
ignore_broadcast_ssid=0
auth_algs=1
wpa_passphrase=secret
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
最后把它们跑起来就可以了。
为了方便使用,我创建了个 systemd 服务 wlan0_ap.service:
Description=Setup wlan0_ap
Before=hostapd.service
After=sys-subsystem-net-devices-wlan0.device
After=iptables.service
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/iw dev wlan0 interface add wlan0_ap type __ap
ExecStart=/usr/bin/ip address add dev wlan0_ap 192.168.17.1/24
ExecStart=/usr/bin/iptables -w -t nat -A POSTROUTING -s 192.168.17.0/24 -j MASQUERADE
ExecStop=-/usr/bin/iptables -w -t nat -D POSTROUTING -s 192.168.17.0/24 -j MASQUERADE
ExecStop=/usr/bin/ip address delete dev wlan0_ap 192.168.17.1/24
ExecStop=/usr/bin/iw dev wlan0_ap del
WantedBy=hostapd.service
systemctl enable wlan0_ap 之后就可以直接 systemctl start hostapd 来启动了~当然也很容易停止服务:systemctl stop hostapd wlan0_ap。我的 dnsmasq 总是开启的,所以就不用加依赖了。还有 ipv4_forward 我也是早就写到配置文件 /etc/sysctl.d/99-sysctl.conf 里的。
September 10, 2016
本文来自,转载请注明。
matplotlib 是很不错的数据可视化库,然而每次写一个脚本,跑出来看完又回头改,改完再跑,实在是累。所以就有 IPython Notebook 啦,后来改名叫 Jupyter 了,不光支持 Python,还支持 Julia 什么的样子(在下一盘很大的棋呢)。
Arch Linux 用户使用以下命令安装:
sudo pacman -S jupyter-nbconvert jupyter-notebook
我没有装 mathjax 这个包。我就用 MathJax 官方的 CDN 地址好了。所以我的启动命令是这样子:
jupyter notebook --NotebookApp.mathjax_url=https://cdn.mathjax.org/mathjax/latest/MathJax.js
然后界面就会在浏览器里打开啦~
Jupyter notebook 最令我不爽的一点是,它的编辑区用起来很不习惯: 不支持 readline 式快捷键(就是 Emacs / bash 风格那些啦),不支持 * 不支持补全
我尝试过配置快捷键,但是还是不太会的样子,好像又没有现成而且可用的代码。
不过它的可视化和交互能力实在是太吸引人了~所以做一些交互式的数据处理时还是用用好了~
。(当然只是导出的 HTML 页面~)
本文来自,转载请注明。
WoSign 最近曝出,而且其处理问题的态度、解决问题的方式十分令人担忧。其官方形象也很糟糕,比如,比如只吊销了因 bug 误发的 GitHub 域名的证书,给某大学误发的证书视若无睹。具体问题有兴趣的可以去相关邮件组查看讨论。
这次问题我认为比起 CNNIC 要严重多了(最主要是这态度、这水准,就算它不主动作恶,也很容易被利用的样子),所以我获知情况之后就取消对了 WoSign 的信任。StartCom 签名 WoSign 的证书,所以需要一并吊销(反正也是一家人)。
火狐(桌面版)
依次打开「首选项」-&「高级」-&「证书」-&「查看证书」,找到并选择 StartCom 和 WoSign 下的所有证书(使用 Shift 键可以选择连续的项目),然后点「编辑信任」按钮,取消弹出框中三个选项框的勾选。
Arch Linux
用户直接执行命令:
sudo pacman -Sy revoke-disputable-ca
手动操作的话,是这样子。把需要取消信任的证书复制(不要软链接)到 /etc/ca-certificates/trust-source/blacklist/ 目录下,然后执行 update-ca-trust 命令即可。
我那个包里取消信任的证书是下边这八个:
CA_WoSign_ECC_Root.pem
CNNIC_ROOT.pem
StartCom_Certification_Authority_G2.pem
WoSign_China.pem
Certification_Authority_of_WoSign_G2.pem
StartCom_Certification_Authority.1.pem
StartCom_Certification_Authority.pem
WoSign.pem
在「设置」-&「安全」-&「受信任的凭据」中禁用掉相关证书。这对 Opera Mobile 有效,但是对火狐无效。
目前还没找到火狐 Android 版禁用根证书的方式。
目前 USTC 已经更改证书,禁用这些根证书不影响 USTC 镜像源的使用。现在我因此不能访问的网站主要是 。
August 19, 2016
(话说知乎啥时候能内置水平线标记……)
其实不止 Arch Linux ,几大主流发行版不都是一群有着相同理想主义倾向的用户/开发者们一手构建起来的呗~
Debian :以创建一个自由的类 Unix 操作系统为己任,大部分尽可能的采用自由软件
(后来从 Debian 衍生出的完全自由的发行版 gNewSense 获得了自由软件基金会的赞助 )。
Fedora :和 Debian 同样更多的专注于自由软件。和 Debian 偏向稳定不同,
Fedora 的开发者更多的会和上游紧密协作,尽可能的快速推动新技术的应用和完善。
openSUSE:这个咱没用过,只知道他/她/它们做了个很出色的系统配置工具 YaST ,
还有能给 openSUSE 和其他各种发行版构建软件包的 Open Build Service (OBS)。
至于 openSUSE 为啥没有其它发行版那么流行的原因,活跃于 openSUSE 社区的苏姐的回答应该解释的比较全面 :
openSUSE 的人气为何远不如 Ubuntu 和 Fedora ? - 瑪麗蘇的回答
Gentoo:应该是除了 LFS (Linux From Scratch)以外定制程度最高的 Linux 发行版,
用户可以自由的选择自己喜欢的组件,无论是安装方式,需要的程序,
以至于init 程序( Gentoo 是目前为数不多的不默认采用 Systemd 的 Linux 发行版之一)。
许多用户喜欢的就是 Gentoo 的高度可定制性,
例如 长期使用Arch,Gentoo等滚动更新的发行版是怎样的一种体验? - 李小的回答 和
长期使用Arch,Gentoo等滚动更新的发行版是怎样的一种体验? - ZX Huo 的回答 。
Arch Linux:自称 " a lightweight and flexible Linux(R) distribution that tries to Keep It Simple." ,
一个轻量化,可定制,试图遵循 KISS 原则 ( Keep It Simple, Stupid,对应中文为“保持简单,且一目了然”)的 Linux 发行版。
简洁,现代,实用和以用户为中心构成了 Arch Linux 用户和开发者们一贯共识的 “Arch 之道”(Arch Linux - ArchWiki)
(Ubuntu ?那是啥,好吃吗?啦啦啦……)
关于 Arch Linux 的可定制性,现任 Trusted User 之一的 fc farseer 这么写到:
我自己用 Ubuntu 從 8.04 經歷多次版本升級升到 12.04 ,期間雙系統裝裹 OpenSuSE 和Arch ,
然後在 OpenSuSE 上完成了畢業設計(那時候只有suse提供了Xen補丁內核,這是我的畢業設計需要),
之後本科畢業後新臺機直接裝 Arch,現在3年多了一切穩定完好。這 3 年多我經歷了 Arch 從 rc.conf 到 systemd 的轉變,
經歷了 grub legacy 到 grub 2 的轉變,換過好幾個 DE 和 WM 然後現在穩定在 Awesome3.4 兩年多,
系統分區從原本的 ext4 換到過 btrfs 分區然後現在組 btrfs raid1 ,我換過顯卡,換過好幾塊硬盤,
期間滾掛過好幾次然後都修好了,自己作死折騰btrfs壞過也從備份中恢復好了。重要的是這個系統一直活着而且活得很好,
pacman.log裏的裝機歷史能一直追溯到3年前裝的第一個包,我知道這裏面只有我需要的包,
只有我做過的配置,發生任何問題我都知道是系統的哪裏的問題。這是 Arch給我的安心感,
是Ubuntu不能給我的。反觀我用Ubuntu的那段時間,每次 dist-upgrade 都要麼立刻掛掉要麼用一段時間掛掉,
要麼就是升級的方案實在太將就然後換新的重裝。都說 debian穩定ubuntu穩定,
而那時的我沒有任何穩定的感覺,那時的我害怕每一個小包的升級,因爲我不知道升級了一個包之後會對別的包造成什麼不可預知的後果。
服務器系統那種有管理員管理的計算機集羣需要的穩定性,和桌面用戶需要的穩定性,在我看來是不同的概念。
我不怕一個升級之後東西壞掉然後需要我花兩個小時找方案把它修好,
但是我怕爲了某個新版本的庫而不得不升級的時候,
整個系統都變得面目全非導致我不得不花兩個小時重裝系統,然後這個全新的系統我不再認識了。
—长期使用Arch,Gentoo等滚动更新的发行版是怎样的一种体验? - fc farseer 的回答
所以嘛,既然选择了滚动更新的发行版,就要学会适应这种快速的变化呗~
另外还有一句,Arch Linux 的滚动更新模型是不支持部分升级的。
还有,Archer 哪里说要秒杀各大软件公司了啦 ?明明咱们连有多少用户都不怎么在意:
许多 Linux 发行版都试图变得更“用户友好”,Arch Linux 则一直是,永远会是“以用户为中心”。
此发行版是为了满足贡献者的需求,而不是为了吸引尽可能多的用户。
Arch 适用于乐于自己动手的用户,他们愿意花时间阅读文档,解决自己的问题。
报告问题、完善 Wiki 社区文档、为其它用户提供技术支持。
Arch 用户仓库 收集用户贡献的软件包。Arch 开发者都是志愿者,活跃的贡献者很快就能称为开发人员。
不要以偏概全好不好……
August 17, 2016
本文来自,转载请注明。
如题。域名换成了 blog.lilydjwg.me,别的暂时不变。浏览器访问时会自动跳转到新域名。
请 RSS 订阅读者更新订阅地址。
请网站上有链接到本博客的读者也更新一下旧链接。
我不知道旧域名到底能存在多久。当然也不知道这个网站还会存在多久。总之先把入口拿回来。
August 09, 2016
可视化编辑器(下面就说VisualEditor呗~)还需要一个叫
的程序来承担把wiki标记转化成html的任务啦(看下图)~,所以需要服务器来运行它呐~
上游的指南在这(好好学英语呗~)
Ubuntu和Debian系统的话直接添加MediaWiki.org的软件源然后通过apt安装就好了啦~
首先添加MediaWiki.org的GPG公钥:
sudo apt-key advanced --keyserver keys.gnupg.net --recv-keys 664C383A2F007A322AC6E84AFDD2
然后添加Parsoid源:
sudo echo "deb https://releases.wikimedia.org/debian jessie-mediawiki main" & /etc/apt/sources.list.d/parsoid.list
安装需要的软件包:
sudo apt-get update && sudo apt-get install curl parsoid
然后看下下面一节的内容修改一下配置文件呗~
上游的指南在这(还是要好好学英语呗~)
首先汝要装上Nodejs(&0.8,建议0.10或更新的版本呐~),还有git.
具体的安装方法为了避免降低正交性 (其实是系统太多不好写......),就麻烦汝自己去找了呐~
「呵。咱是贤狼,不是神呐。如果汝开始会期待起咱能够泄露天机给汝,那咱就得从汝眼前消失了呗。」
node --version # 如果是Debian或Ubuntu ,输入 nodejs --version
然后用git克隆版本库呗~
git clone https://gerrit.wikimedia.org/r/p/mediawiki/services/parsoid
用npm安装上相应的依赖:
npm install
然后看下面一节的内容修改一下配置文件呗~
如果是通过软件源安装的,配置文件位于
如果是通过git下载的,从parsoid目录中先复制一份样例出来呗~
cp config.example.yaml config.yaml
打开配置文件,找到这一段内容,然后改它~:
- # This is the only required parameter,
# the URL of you MediaWiki API endpoint.
uri: 'http://localhost/w/api.php'
# The "domain" is used for communication with Visual Editor
# and RESTBase.
It defaults to the hostname portion of
# the `uri` property below, but you can manually set it
# to an arbitrary string.
domain: 'localhost'
# optional
其中"uri"对应汝的wiki的api.php的位置,"domain"是汝的域名啦~. "prefix"可以自己起一个(反正因为换了API也没用啦~,不过测试时可能用得到) Prefix 真的没了……
sudo systemctl start parsoid # Debian Jessie ,用Systemd启动
sudo service parsoid start # Debian Wheezy 或Ubuntu ,用init.d脚本启动.
如果汝不是通过远程访问执行的命令,可以在浏览器上打开
来进行测试.试着加载
node bin/server.js
可以用screen一类的工具让Parsoid在后台运行~
或者可以自己写一个 Systemd 单元 (听说这样更清真?
咱自己写了一个在这:
如果汝不是通过远程访问执行的命令,可以在浏览器上打开
来进行测试.试着加载
# Allow override of port/interface:
#serverPort: 8000
#serverInterface: '127.0.0.1'
反注释最后一行并改成0.0.0.0,就可以通过
上游的指南在这:
获得扩展然后上传到汝的wiki上的extensions目录呗~
然后修改汝的LocalSettings.php:
require_once "$IP/extensions/VisualEditor/VisualEditor.php";
// 反注释下一行来默认启用可视化编辑器
#$wgDefaultUserOptions['visualeditor-enable'] = 1;
// 反注释下一行来启用测试中的功能
#$wgDefaultUserOptions['visualeditor-enable-experimental'] = 1;
//在除了主名字空间以外的名字空间中也启用可视化编辑器(下面的例子是用户名字空间)
$wgVisualEditorNamespaces=array_merge($wgContentNamespaces,array( NS_USER ));
完整的设置选项可以在扩展页面上找到.
然后在汝的wiki上试试看呗~
August 08, 2016
然后接下来就是我承诺的翻译了
Q: Do you agree that you undermine GPLv3? and ...
问:你是否同意说你贬低了 GPLv3 ? 以及……
Q: How can we get you to stop?
问:我们如何才能让你别这么做?
Q: How can we get you to stop?
问:我们如何才能让你别这么做?
L: Oh I hate GPLv3. I undermined it on purpose.
I actually thought the GPLv3 extensions were horrible.
I understand why people would want to do them but I think it should have
been a completely new license.
L: 哦我讨厌 GPLv3 ,我是在故意贬低它。实际上我觉得 GPLv3 的扩展非常可怕。
我能理解为什么人们想要做这个,但是我觉得它本应是一个全新的协议。
Emm my argument for liking version 2, and I still think version 2 is a
great license, was that, "I give you source code, you give me your
changes back, we are even." Right? That's my take on GPL version 2, right,
it's that simple.
嗯我喜欢版本 2 的那些理由,并且我仍然觉得版本 2 是一个非常棒的协议,
理由是:「我给你源代码,你给我你对它的修改,我们就扯平了」
对吧?这是我用 GPL 版本 2 的理由,就是这么简单。
And version 3 extended that in ways that I personally am really
uncomfortable with, namely "I give you source code, that means that if
you use that source code, you can't use it on your device unless you
follow my rules." And to me that's, that's a violation of everything
version 2 stood for. And I understand why the FSF did it because I know
what the FSF wants.
But to me it's not the same license at all.
然后版本 3 的扩展在某些方面让我个人觉得非常不舒服,也就是说「我给你源代码,
这意味着你必须服从我的一些规则,否则你不能把它用在你的设备上。」
对我来说,这是违反了版本 2 协议所追求的所有目的。然而我理解为什么 FSF 要这么做,
因为我知道 FSF 想要达成什么,但是对我来说这完全是不同的协议了。
So I was very upset and made it very clear, and this was months before
version 3 was actually published. There was a discussion about this
long before... There was an earlier version of version 3, years before
actually, where I said "No, this is not gonna fly."
And during that earlier discussion I had already added to the kernel that,
"Hey, I don't have the version 2 or later". And there was no...
And I was really happy then when version 3 came out, that I have done that
something like 5 years before, because there was ever never any question
about what the license for the kernel was.
所以我当时非常不安,并且表明了自己的观点,并且这是在版本 3 发布的数月之前。
在那很久之前曾经有过一场讨论……在版本 3 之前有一个早期的版本,
事实上几年之前,那时我就说过:「不,这不可能工作」。
并且在那个早期的讨论阶段我已经在内核里写好了「嘿,我可没有写过版本 2
或者更高版本」。所以之后也没有过(争议)……随后版本 3 出来的时候我非常开心,
因为我早在大概 5 年前做了预防,之后也就再也没有过关于内核的协议究竟是哪个
版本的讨论。
But I actually thought that version 3 is ... Uh, no ... I actually think
version 3 is a FINE license, right. I'm a firm believer in,
"If you write your code, it is your choice to pick a license."
And version 3 is a fine license. Version 3 was not a good ...
"Here we give you version 2, and then we tried to sneak in these new rules,
and tried to force everybody to upgrade." That was the part I disliked.
And the FSF did some really sneaky stuff, downright immoral in my opinion.
不过事实上我觉得版本 3 是……呃不……我事实上觉得版本 3 是个 不错 的协议,
对吧。我坚定地相信「如果是你写的代码,那么你有权利决定它应该用什么协议」。
并且版本 3 是个不错的选择。版本 3 不好的地方在……「我们给你了版本 2
,然后我们试图偷偷混入这些新的规则,并且想逼着所有人都跟着升级」这是我不喜欢版本
3 的地方。并且 FSF 在其中做了很多见不得人的事情,我觉得做得很不道德。
Q: So you are talking about ?
Tivoization 是 FSF 发明的一个词,表示 TiVo 的做法。 TiVo
是一个生产类似电视机顶盒之类的设备的厂商,他们在他们的设备中用到了 Linux
内核和很多别的开源组件,并且他们根据 GPLv2 协议开放了他们使用的组件的源代码。
然而他们在他们出售的设备中增加了数字签名,验证正在执行的系统和软件是他们自己
编制的软件,从而限制了用户修改运行软件的自由。这种做法在 FSF 看来是钻了 GPLv2
的法律上的空子,所以 FSF 提出了 GPLv3 封堵这种做法。
问:所以你在说
的事情么?
L: Ehmm, yeah the Tivoization is always my main, eh dislike of version 3.
And, the FSF was being very dishonest thing. "Hey, we actually allow you
to invalidate the Tivoization clause" and they tried to, they literally
lied to people, and say "Hey, so that means that you can use GPLv3 without
the Tivoization part", right. This is ... How many people heard this
particular statement from the FSF? (Please raise your hands)
L: 没错,Tivoization 的事情一直是我反对版本 3 的主要根据。并且,FSF
在这件事上表现得极不诚实。「嘿,其实我们允许你无效化 Tivoization 条款」,这样他们试图,
应该说他们是在明白着欺骗别人,并且说「嘿,这意味着你可以使用除去 Tivoization 部分的 GPLv3」。
这很……在场的诸位中有谁从 FSF 那儿听过这个说法?(请举手)
Ok, maybe they only tried to convince me with that one.
But they did try. And it was like, "I'm not stupid", right. Yes, you can
... The GPLv3 allows you to say "Ok, Tivoization is not an issue for us".
But it allows somebody else to take the project, and say "Hey, I ... The
GPLv3 without Tivoization is compatible with the full GPLv3, so I will now
make my own fork of this, and I will start doing drivers that use the full
version of version 3" And where am I stuck then? I am stuck saying "Hey I
give you the source code, and now I can't take it back your changes".
That's completely against the whole point of the license in the first
好吧,或许他们只试过对我用这套说辞,但是他们真的试过。我的反应是「我可不傻」,对吧。是的,
的确你可以…… GPLv3 允许你说「好, Tivoization 的事情对我们来说不是问题」,
但是它同时又允许别人接过这个项目,并且说「嘿,我觉得……去掉了 Tivoization 的 GPLv3
是兼容完整的 GPLv3 的,所以我可以 fork 这个项目,然后我将在自己的 fork 上用完整的
GPLv3 写驱动。」然后我就囧了。我的困境在于说「嘿,我给了你我的源代码,现在我却不能拿回你对它
的修改了」。这是彻底违背了我用这个协议最初的目的了。
So the FSF was, I mean the kind of stuff that was going on behind the
scenes, ah, made me once and for all to decide to never had any thing to
do with the FSF again. So if you wanted to give money to an organization
that does good? Give it to the EFF. The FSF is full of crazy bittered
people. That's just mine opinion. Uh, actually I have ... Ah ...
I overstated that a bit, right. The FSF has a lot of nice people in it,
but some of them are bit too extreme.
所以 FSF 是,我是说那时他们暗地里做的那些事情,让我当下决定永远不再和 FSF 有任何瓜葛。
所以如果你想捐钱给一个行善的组织,那就捐给 EFF 吧。FSF 充满了疯狂难处的人。这只是我的观点。
呃其实我……嗯……我说得有点过分了。FSF 里有很多不错的人,不过其中有些人有点过激。
Q: Well I wish the EFF care more about software freedom. But, uh,
can you ... Do you think that Tivoization benefits me as a user somehow?
问: 嗯我也希望 EFF 能更多的关注于软件的自由方面。但是你能……你觉得 Tivoization
这种行为也能在某种方式上让我作为用户获益么?
L: No, no I don't. I mean that ... But that was never my argument. That
was not why I selected the GPLv2. This is my whole point. It's not that
I think Tivoization is necessarily something that you should strive for.
But it is something that in my world view, it's your decision.
If you make hardware that locks down the software, that's your decision
as a hardware maker. That has no impact on my decision as a software maker
to give you the software. Do you see where I am coming from? I don't like
the locked down hardware, but at the same time that was never the social
contract I intended with Linux.
L: 不,我不觉得。我的意思是……这从来都不是我的论据,这不是我选择了 GPLv2 的理由。
并不是说我觉得 Tivoization 是某种值得你去争取的权利,而是说在我的世界观中,这是你的决定。
如果你生产硬件去锁住了其中的软件,这是你作为一个硬件提供者的决定。
这完全不影响我作为一个软件提供者给你软件的决定。你能看出我的立场在哪儿了么?
我不喜欢上锁的硬件,但是同时这也从来不是我想要给 Linux 加上的的社会契约。
To me, umm, I mean, people may or may not
realize GPLv2 wasn't even the first license for Linux.
To me the important part was always "I give you software, you can do
whatever you want with it. If you making improvements, you have to give
them back." That was the first version of the license. It also had a
completely broken clause which was completely insane and I was stupid.
Hey it happened. My origin license says that you can't make money
change hands. And that was a mistake. That was clearly just wrong and bad
because it really didn't have anything to do with what I wanted. But I
was young, I was poor, I didn't realize that the whole money thing wasn't
the important part. And I have saw the errors in my ways, I saw the GPLv2
and said "Hey, that's the perfect license". And I saw the GPLv3 and I said
"No, that's overreaching a lot, that's not what I wanted". And so I made
Linux GPLv2 only, right.
对我来说,呃我想说,大家可能知道或者不知道, GPLv2 并不是 Linux 的最初的协议。
对我来说重要的部分一直是「我给你软件,你可以用它做任何你想要做的事情。如果你做了任何改进,
你需要把它交还给我。」这是协议最初的样子。最早的协议还有一条完全错误的条款,写得完全不合理,
那时我很傻。嘿我也傻过。我最初的协议说你不能用它赚钱。这是失策,这明显是不对的不好的,
因为它和我真正想要做的事情没有任何关系。但是那时我很傻很天真,
我没意识到钱的事情在其中完全不重要。然后我发现了其中的问题,我看到了 GPLv2 然后说「嘿,
这是个完美的协议」。然后我看到了 GPLv3 我说「不,这做得过分了,这不是我想要的」
所以我让 Linux 成为了仅限 GPLv2 ,对吧。
Q: So do you think getting the patches back is as useful even if you can't
modify the device that it is used on?
问: 所以你是否认为,即使你不能修改跑着这个软件的设备,拿回对软件的修改也还是同样重要的?
L: Yeah, absolutely. And I mean TiVo itself is actually an example of this.
Their patches were kind of crafty but I mean they were basically running
on a, originally a fairly standard MIPS thing. And their patches were
working around bugs in the chipsets they used. And they were valid patches.
The fact that they then felt that their hardware had to be locked down
someway. I didn't like it. But as I have mentioned, I felt that that was
their decision.
L: 是的,当然。我想说 TiVo 它自己实际上就是一个例子。他们的修改有点复杂,但是我想说他们基本
是,一开始基本是运行在一套相当标准的 MIPS 设备上。然后他们的修改是想绕开他们用到的芯片上的
一些问题,并且这些是合格的修改。之后的事情是他们觉得他们需要锁住他们的硬件,我不喜欢这个。
但是就像我已经说的,我觉得这是他们的决定。
And they had real reasons for that. That's something people sometimes
missed. There are sometimes reasons to do what TiVo did. Sometimes it's
imposed on you by, wireless carriers. Sometimes it's imposed on you by
Disney. Uh sometimes it's imposed on you by laws. The GPLv3 actually
accepts the last one when it comes to things like medical equipment
I think. But the point is that the whole Tivoization thing is, sometimes
it's, there is a reason for it. And if you make ... I mean I am not a
hardware designer. I think FPGA and stuff like that is really cool.
But I always ... I mean I really don't want to impose my world view on
anybody else. You don't have to use Linux. If you do use Linux, the only
thing I asked for is source code back. And there is all these other
verbiages in the GPLv2 about exact details, those aren't important.
And that was always my standpoint.
并且他们有真正的理由去这么做。这是有时人们忽视的地方。有时是真的有理由去做 TiVo
他们做的事情。有时强加给你这种限制的是,无线运营商。有时强加给你的是迪士尼。
有时强加给你限制的甚至是法律。 GPLv3 在医疗设备之类的场合其实允许最后一种情况,我记得。
我的观点是,整个 Tivoization 的事情有时是有理由去这么做的。如果你生产……
我是说我不是硬件设计者,我觉得 FPGA 之类的东西很酷,但是我……我的意思是我真的不想把我对世界的
看法强加给别人。你不是非得要用 Linux ,如果你想要用 Linux
,那么我唯一要求你做的事情是把源代码(变更)还给我。然后在 GPLv2
中还有很多繁文缛节规定了详细的细节,这些都不重要。这是我一直以来的观点。
Q: Ok, well I will stop my non-point of making noise now.
ISC 协议是一个开源软件协议,和两句的 BSD 协议功能相同。OpenBSD 项目选择尽量用 ISC
协议公开他们新写的代码。
问: 好吧那我就不浪费时间了。
L: I mean don't get me ... I mean I like other licenses too. I have used
like the four, emmm... Which BSD license is the acceptable one?
One of the BSD license is actually really nice. And it's actually the...
L: 我的意思是别误解……我也喜欢别的协议。我用过……到底是哪个 BSD 协议是可以接受的?
有一个 BSD 协议实际上非常不错。它实际上是……什么?
观众: ISC
L: ISC? And I actually encourage people who don't care about the giving
code back but care about the "Hey, I did something cool, please use it".
I encourage people to use the BSD license for that. And I mean the BSD
license is wonderful for that. It so happens that I thought that for my
project the giving back is equally important so I, for me BSD is bad.
But the point is for me. The GPLv3 maybe the perfect license for what
you guys want to do. And that's fine. And then it's the license you should
use. It's just that when somebody else wrote the code you don't get that
L: ISC?并且事实上我在鼓励那些不在意拿回修改但是在意「嘿,我做了一个很酷的东西,请用它」。
我鼓励这些人去用 BSD 协议做这些事情。我想说 BSD 协议在这种场合是完美的。
只是碰巧我觉得对于我的项目,拿回修改也同样重要,所以对我而言 BSD 不好。但是重点是
对我而言 。 GPLv3 可能对你们想要做的事情而言是完美的协议,这很好,并且这时你就应该去用
GPLv3 。只是当代码是别人写的时候,你没有这个选择权。
August 07, 2016
,所以他们是不同的,不过的确
实现,不需要单独一个运算符。
嗯,我这是说现代的标准化的 C 语义上来说,
的组合实现。
早期的 C 有一段时间的语义和现代的 C 的语义不太一样。
稍微有点汇编的基础的同学可能知道,在机器码和汇编的角度来看,不存在变量,不存在 struct 这种东西,只存在寄存器和一个叫做内存的大数组。
所以变量,是 C 对内存地址的一个抽象,它代表了一个位置。举个例子,C 里面我们写:
其实在汇编的角度来看更像是
其中 A 和 B 各是两个内存地址,是指针。
好,以上是基本背景。
基于这个背景我们讨论一下 struct 是什么,以及 struct 的成员是什么。
假设我们有
struct Point {
struct Point p;
struct Point *pp = &p;
从现代语义上讲
就是一个结构体对象,
各是其成员,嗯。
从汇编的语义上讲,
是一个不完整的地址,或者说,半个地址,再或者说,一个指向的东西是虚构出来的地址。而
各是在 Point 结构中的地址偏移量。也就是说,必须有
同时出现,才形成一个完整的地址,单独的一个
没有意义。
早期的 C 就是在这样的模型上建立的。所以对早期的 C 而言,
没有意义,你取得了一个 struct ,而这个 struct 不能塞在任何一个寄存器里,编译器和 CPU 都无法表达这个东西。
这时候只有
有意义,它们有真实的地址。
早期的 C 就是这样一个看起来怪异的语义,而它更贴近机器的表达。
所以对早期的 C 而言,以下的代码是对的:
a = &(p.x);
而以下代码是错的:
(*pp).x = 1;
因为作为这个赋值的目标地址表达式的一部分,
,这个中间结果没法直译到机器码。
所以对早期的 C 而言,对 pp 解引用的操作,必须和取成员的偏移的操作,这两者紧密结合起来变成一个单独的操作,其结果才有意义。
所以早期的 C 就发明了 -& ,表示这两个操作紧密结合的操作。于是才能写:
pp-&x = 1;
嗯,这就是它存在的历史原因。
而这个历史原因现在已经不重要了,现代的符合标准的 C 编译器都知道
是等价的了。
说句题外话, C++ 里面还发明了
这两个运算符(注意
不是单独的
并排放的意思),关于为什么要发明这两个运算符,而不能直接说
的意思就是
,这个就作为课堂作业吧。
新增了对 GitHub Issue comments 里面
的支持,套用 font-awesome 的图标(似乎没 GitHub 上的图标好看)。这个还属于 GitHub API
的实验性功能,要加入
Accept: application/vnd.github.squirrel-girl-preview
HTTP 头才能拿到。
日23:16更新
感谢 @iovxw 的测试让我发现 github 的高亮回复和邮件回复是需要特殊处理的。
高亮回复用上了
邮件引言的展开事件直接用 jQuery 做了:
$(".email-hidden-toggle & a").on("click", function (e){
e.preventDefault();
$(".email-hidden-reply", this.parent).toggle();
还得注意邮件的回复需要 CSS 里面
white-space: pre-wrap
August 06, 2016
TeXLive 相关包已经更新到 2016 版。
最显著的变化是 biber 工具现在作为独立的包提供。 你可以用 pacman 像往常一样安装它。
现在 TeXLive 系列包会使用 Pacman 挂钩(Hook)升级了,所以它将比去年少一些输出。
August 05, 2016
(啥,汝到现在连这三个词都没听说过???)
良好隐私密码法(英语:Pretty Good Privacy,缩写为PGP),一套用于讯息加密、验证的应用程序,采用IDEA的散列算法作为加密与验证之用。
PGP的主要开发者是菲尔·齐默尔曼(Phil Zimmermann)。齐默曼于1991年将PGP在互联网上免费发布。
后来,PGP 被 Symantec 公司收购成为了商业软件。
OpenPGP 是一套标准,大多数 PGP 软件(例如 GnuPG)都遵循这一标准。
GNU Privacy Guard(GnuPG或GPG)是一种加密软件,它是PGP加密软件的满足GPL的替代物。GnuPG依照由IETF订定的OpenPGP技术标准设计。GnuPG用于加密、数字签名及产生非对称匙对的软件。
GnuPG是自由软件基金会的GNU计划的一部分,目前受德国政府资助。以GNU通用公共许可证第三版授权。
而大多数 Linux 发行版中内置(或者在软件仓库中)的应该都是 GnuPG 啦。汝可以在终端里输入
来查看一下版本呗~(如果已经安装了的话)
#咱的 gpg --version 大概像这样,某些发行版(例如 Ubuntu )里可能还会有 gpg2~
gpg (GnuPG) 2.1.14
libgcrypt 1.7.2
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later &https://gnu.org/licenses/gpl.html&
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Home: /home/horo/.gnupg
支持的算法:
公钥:RSA, ELG, DSA, ECDH, ECDSA, EDDSA
对称加密:IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256,
TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256
散列:SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
压缩:不压缩, ZIP, ZLIB, BZIP2
至少咱自己经历过的作用有这两种呗~
用来证明这个文件是某个人创建的,而且在到达汝的过程中没有被篡改呗~
大部分 Linux 发行版的软件包管理器已经用上这个用途了呐~
(所以咱推测 gpg 应该已经安装在汝的系统上了呗~)
在某处用汝自己的密钥对加密某些文字,或是文件。然后传输到某个地方以后再使用汝自己的密钥对解密这些内容,在传输的过程中,如果私钥不泄露的话,其他人只会看到约等于无意义的乱码而已呐~
然后请允许咱从维基百科上抄一张图下来??
于是这另一个新坑就挖好了呢(雾??,下次就文字直播生成一个汝自己的密钥对好啦~
July 31, 2016
基于在 arch-general 邮件列表中的讨论, pid1 在 anthraxx, strcat, sangy, rgacogne 等人的帮助下创建了 test-sec-flags 项目用于测试诸多面向安全方面的编译和链接选项对于性能的影响。这个项目的目的是为了决定这些编译选项是否适合作为所有 Arch Linux 包打包时候的默认选项。我们的早期测试显示和我们目前使用的编译选项相比这些新的编译选项的性能损失几乎可以认为不存在,不过在进一步推进之前我们希望收集更多测试数据帮助判断。
请下载,根据 README 的提示安装和使用。在 results 子目录中关于如何从测试结果文件中提取需要的统计信息。
我们在 收集测试结果,请将你的测试结果添加到这里。特别的,我们非常期望看到 i686 的结果,因为之前的志愿者测试全部基于 x86_64 设备。
我们也欢迎改进补丁。
July 30, 2016
我喜欢 Arch Linux ,大概是因为唯有 Arch Linux 能给我对整个系统「了如指掌」的感觉。
在 Arch Linux 里我能清楚地知道我安装的每一个包,能知道系统里任何一个文件是来自哪个包,
以及我为什么要装它。或许对 Debian/Fedora/openSUSE 足够熟悉了之后也能做到这两点,
不过他们的细致打包的结果通常是包的数量比 Arch 要多个 3 到 10 倍,并且打包的细节也比 Arch
Linux 简单的 PKGBUILD 要复杂一个数量级。
每一个装过 Arch Linux 的人大概都知道,装了 Arch Linux 之后得到的系统非常朴素,按照
ArchWiki 上的流程一路走下来的话,最关键的一条命令就是
pacstrap /mnt base
里作为根调用
pacman -S base
装上了整个 base 组,
然后就没有然后了。这个系统一开始空无一物,你需要的任何东西都是后来一点点用
手动装出来的,没有累赘,按你所需。
然而时间长了,系统中难免会有一些包,是你装过用过然后忘记了,
然后这些包就堆在系统的角落里,就像家里陈年的老家具,占着地,落着灰。虽然
pacman -Qtd
能方便地帮你找出所有
曾经作为依赖被装进来,而现在不被任何包依赖 的包,但是对于那些你手动指定的包,
它就无能为力了。
于是我就一直在找一个工具能帮我梳理系统中包的关系,方便我:
找出那些曾经用过而现在不需要的包
找出那些体积大而且占地方的包
厘清系统中安装了的包之间的关系
关于最后一点「厘清包的关系」,我曾经看到过
和 Android 的系统架构图,对其中的层次化架构印象深刻,之后就一直在想,是否能画出现代
Linux 桌面系统上类似的架构图呢?又或者 Linux 桌面系统是否会展现完全不同的样貌?
从维基百科或者别的渠道能找到 Linux 内核、或者 Linux 图形栈,
或者某个桌面环境的架构,但是没有找到覆盖一整个发行版的样貌的。
于是我便想,能不能从包的依赖关系中自动生成这样一张图呢。
在开始写 PacVis 之前,我试过一些类似的工具,他们都或多或少能解决一部分我的需要,
又在某些方面有所不足。这些工具成为了 PacVis 的雏形,启发了 PacVis
应该做成什么样子。
pactree 曾经是一个
,现在则是
从手册页可以看出, pactree 的输出是由某个包开始的依赖树。
参数之后 pactree 还能输出
格式的矢量图描述,然后可以用 dot 画出依赖图:
$ pactree pacvis-git -d3
pacvis-git
├─python-tornado
│ └─python
├─openssl
├─libffi
├─pyalpm
│ ├─python
│ └─pacman
├─libarchive
├─pacman-mirrorlist
└─archlinux-keyring
└─python-setuptools
└─python-packaging
├─python-pyparsing
└─python-six
$ pactree pacvis-git -d3 --graph | dot -Tpng &pacvis-pactree.png
从画出的图可以看出,因为有共用的依赖,所以从一个包开始的依赖关系已经不再是一棵
了。最初尝试做 PacVis 的早期实现的时候,就是试图用 bash/python 脚本解析 pactree 和
pacman 的输出,在 pactree 的基础上把整个系统中所有安装的包全都包含到一张图里。
当然后来画出的结果并不那么理想,首先由于图非常巨大,导致 dot
的自动布局要耗费数小时,最后画出的图也过于巨大基本上没法看。
然而不得不说没有 pactree 就不会有 PacVis ,甚至 pacman 被分离出 alpm
库也和 pactree 用 C 重写的过程有很大关系,而 PacVis 用来查询 pacman 数据库的库
pyalpm 正是 alpm 的 Python 绑定。因为 pactree 的需要而增加出的 alpm 库奠定了 PacVis
实现的基石。
是一位 Arch Linux 的
Trusted User
写的程序,和
PacVis 一样也是用 Python 实现的。
比起 pactree , pacgraph 明显更接近我的需求,它默认绘制整个系统的所有安装包,
并且用聪明的布局算法解决了 dot 布局的性能问题。
pacgraph 的输出是一个富有艺术感的依赖图,图中用不同的字体大小表示出了每个包占用
的磁盘空间。通过观察 pacgraph 的输出,我们可以清楚地把握系统全局的样貌,
比如一眼看出这是个桌面系统还是个服务器系统,并且可以很容易地发现那些占用磁盘空间
巨大的包,考虑清理这些包以节约空间。
更棒的是 pacgraph 还提供了一个交互性的 GUI 叫做 pacgraph-tk ,显然通过 tk 实现。
用这个 GUI 可以缩放观察整幅图的细节,或者选中某个包观察它和别的包的依赖关系。
pacgraph 还支持通过参数指定只绘制个别包的依赖关系,就像 pactree 那样。
不过 pacgraph 也不是完全满足我的需要。如我前面说过,我希望绘制出的图能反应
这个发行版的架构面貌 ,而 pacgraph 似乎并不区别「该包依赖的包」和「依赖该包的包」
这两种截然相反的依赖关系。换句话说 pacgraph 画出的是一张无向图,
而我更想要一张有向图,或者说是 有层次结构的依赖关系图 。
总结了老前辈们的优势与不足,我便开始利用空余时间做我心目中的 PacVis 。
前后断断续续写了两个月,又分为两个阶段,第一阶段做了基本的功能和雏形,
第二阶段套用上
的模板,总算有了能拿得出手给别人看的样子。
于是乎前两天在 AUR 上给 pacvis 打了个
包,现在想在本地跑 pacvis 应该很方便了,用任何你熟悉的 aurhelper
就可以安装,也可以直接从 aur 下载 PKGBUILD 打包:
~$ git clone aur@aur.archlinux.org:pacvis-git.git
~$ cd pacvis-git
~/pacvis-git$ makepkg -si
~/pacvis-git$ pacvis
Start PacVis at http://localhost:8888/
按照提示说的,接下来打开浏览器访问
就能看到 PacVis
的样子了。仅仅作为尝试也可以直接打开跑在我的服务器上的 demo:
,这个作为最小安装的服务器载入速度大概比普通的桌面系统快一点。
另外补充一下,因为 PacVis 只依赖 pyalpm 和 tornado ,所以在别的基于 pacman
的系统上跑它应该也没有任何问题,包括
里(尽管在 msys2 上编译
tornado 的包可能要花些功夫)。
操作上 PacVis 仿照地图程序比如 Google Maps 的用法,可以用滚轮或者触摸屏的手势
缩放、拖拽,右上角有个侧边栏,不需要的话可以点叉隐藏掉,右下角有缩放的按钮和
回到全局视图的按钮,用起来应该还算直观。
pacvis-git 包的依赖
先解释图形本身,整张图由很多小圆圈的节点,以及节点之间的箭头组成。
一个圆圈就代表一个软件包,而一条箭头代表一个依赖关系。缩放到细节的话,
能看到每个小圆圈的下方标注了这个软件包的名字,鼠标悬浮在圆圈上也会显示响应信息。
还可以点开软件包,在右侧的边栏里会有更详细的信息。
比如图例中显示了 pacvis-git 自己的依赖,它依赖 pyalpm, python-tornado 和
python-setuptools ,其中 pyalpm 又依赖 pacman 。图中用
紫色 表示手动安装的包,
橙色 表示被作为依赖安装的包,
箭头的颜色也随着包的颜色改变。
值得注意的是图中大多数箭头都是由下往上指的,这是因为 PacVis 按照包的依赖关系做
了拓扑排序,并且给每个包赋予了一个拓扑层级。比如 pacvis-git 位于 39
层,那么它依赖的 pyalpm 就位于 38 层,而 pyalpm 依赖的 pacman 就位于 37
层。根据层级关系排列包是 PacVis 于 pacgraph 之间最大的不同之处。
除了手动缩放, PacVis 还提供了搜索框,根据包名快速定位你感兴趣的包。
以及在右侧边栏中的 Dep 和 Req-By 等页中,包的依赖关系也是做成了按钮的形式,
可以由此探索包和包之间的关联。
最后稍微解释一下两个和实现相关的参数:
这是限制 PacVis 载入的最大拓扑层。系统包非常多的时候 PacVis
的布局算法会显得很慢,限制层数有助于加快载入,特别是在调试 PacVis 的时候比较有用。
这是限制 PacVis 绘制的最大被依赖关系。稍微把玩一下 PacVis 就会发现系统内绝大多数
的包都直接依赖了 glibc 或者 gcc-libs 等个别的几个包,而要绘制这些依赖的话会导致
渲染出的图中有大量长直的依赖线,不便观察。于是可以通过限制这个值,使得 PacVis
不绘制被依赖太多的包的依赖关系,有助于让渲染出的图更易观察。
稍微玩一下 PacVis 就能发现不少有趣现象,上述「绝大多数包依赖 glibc 」就是一例。
除此之外还有不少值得玩味的地方。
系统中安装的包被明显地分成了这样几个层次:
glibc 等 C 库
Bash/Perl/Python 等脚本语言
coreutils/gcc/binutils 等核心工具
pacman / systemd 等较大的系统工具
gtk{2,3}/qt{4,5} 等 GUI toolkit
chromium 等 GUI 应用
Plasma/Gnome 等桌面环境
大体上符合直观的感受,不过细节上有很多有意思的地方,比如 zsh 因为 gdbm
间接依赖了 bash,这也说明我们不可能在系统中用 zsh 完全替代掉 bash。
再比如 python (在 Arch Linux 中是 python3)和 python2 和 pypy
几乎在同一个拓扑层级。
zsh 因为 gdbm 间接依赖了 bash
不过偶尔显示的依赖层级不太符合直观,比如 qt5-base & qt4 & gtk2 & gtk3 。
qt5 因为被拆成了数个包所以比 qt4 更低级这可以理解,而 gtk 系比 qt
系更高级这一点是很多人(包括我)没有预料到的吧。
有些包的依赖关系形成了循环依赖,一个例子是 freetype2 和 harfbuzz,freetype2
是绘制字体的库,harfbuzz 是解析 OpenType 字形的库,两者对对方互相依赖。
另一个例子是 KDE 的 kio 和 kinit,前者提供类似 FUSE 的资源访问抽象层,
后者初始化 KDE 桌面环境。
freetype2 和 harfbuzz 之间的循环依赖
因为这些循环依赖的存在,使得 PacVis 在实现时不能直接拓扑排序,我采用环探测
算法找出有向图中所有的环,并且打破这些环,然后再使用拓扑排序。
因此我在图中用红色的箭头表示这些会导致环的依赖关系。
man-pages 和 licenses 没有依赖关系
有些包既不被别的包依赖,也不依赖别的包,而是孤立在整张图中,比如
man-pages 和 licenses 。这些包在图中位于最顶端,拓扑层级是 0 ,我用
正方形特别绘制它们。
所有用户空间的程序都依赖着 glibc ,而 glibc 则从定义良好的 syscall 调用内核。
因此理所当然地,如果只看用户空间的话, glibc 和别的 GNU 组件是整个 GNU/Linux
发行版的中心,而 Linux 则是位于依赖层次中很深的位置,甚至在我的 demo 服务器上
Linux 位于整个图中的最底端,因为它的安装脚本依赖 mkinitcpio
而后者依赖了系统中的众多组件。
msys2 中带有循环依赖的孤儿包
这是我在 msys2 上测试 PacVis 的时候发现的,我看到在渲染的图中有一片群岛,
没有连上任何手动安装的包。这种情况很不正常,因为我一直在我的所有系统中跑
pacman -Qtd
找出孤儿包并删掉他们。放大之后我发现这些包中有一条循环依赖,
pacman -Qtd
不能像语言的垃圾回收机制那样找出有循环依赖的孤儿包。
目前的 PacVis 基本上是我最初开始做的时候设想的样子,随着开发逐渐又增加了不少功能。
一些是迫于布局算法的性能而增加的(比如限制层数)。
今后准备再加入以下这些特性:
更合理的 optdeps 处理。目前只是把 optdeps 关系在图上画出来了。
更合理的 依赖关系抉择 。有时候包的依赖关系并不是直接根据包名,而是
由一个包提供另一个包的依赖。目前 PacVis 用 alpm
提供的方式抉择这种依赖,于是这种关系并没有记录在图上。
目前的层级关系没有考虑包所在的仓库 (core/extra/community/...) 或者包所属的组。
加入这些关系能更清晰地表达依赖层次。
目前没有办法只显示一部分包的关系。以后准备加入像 pactree/pacgraph 一样显示部分包。
如果你希望 PacVis 出现某些有趣的用法和功能,也
July 24, 2016
然后这个 filesystem 是啥咧?
这么写到:
pacman -Ql filesystem 看下它都有什麼唄。
這個包就是提供最基礎的 Arch Linux 的目錄結構和一些不屬於任何別的包的配置文件。
這樣 Arch Linux 裏面任何系統文件都在 pacman 管轄範圍內了。
那就首先照着 fc 的写法来一遍呗~
[horo@yoitsu-surfacebook ~]$ pacman -Ql filesystem
filesystem /bin
filesystem /boot/
filesystem /dev/
filesystem /etc/
filesystem /etc/arch-release
filesystem /etc/crypttab
filesystem /etc/fstab
filesystem /etc/group
filesystem /etc/gshadow
filesystem /etc/host.conf
filesystem /etc/hosts
filesystem /etc/issue
filesystem /etc/ld.so.conf
filesystem /etc/ld.so.conf.d/
filesystem /etc/motd
filesystem /etc/mtab
filesystem /etc/nsswitch.conf
filesystem /etc/passwd
filesystem /etc/profile
filesystem /etc/profile.d/
filesystem /etc/profile.d/locale.sh
filesystem /etc/resolv.conf
filesystem /etc/securetty
filesystem /etc/shadow
filesystem /etc/shells
filesystem /etc/skel/
filesystem /home/
filesystem /lib
filesystem /lib64
filesystem /mnt/
filesystem /opt/
filesystem /proc/
filesystem /root/
filesystem /run/
filesystem /sbin
filesystem /srv/
filesystem /srv/ftp/
filesystem /srv/http/
filesystem /sys/
filesystem /tmp/
filesystem /usr/
filesystem /usr/bin/
filesystem /usr/include/
filesystem /usr/lib/
filesystem /usr/lib/modprobe.d/
filesystem /usr/lib/modprobe.d/usb-load-ehci-first.conf
filesystem /usr/lib/os-release
filesystem /usr/lib64
filesystem /usr/local/
filesystem /usr/local/bin/
filesystem /usr/local/etc/
filesystem /usr/local/games/
filesystem /usr/local/include/
filesystem /usr/local/lib/
filesystem /usr/local/man/
filesystem /usr/local/sbin/
filesystem /usr/local/share/
filesystem /usr/local/share/man
filesystem /usr/local/src/
filesystem /usr/sbin
filesystem /usr/share/
filesystem /usr/share/man/
filesystem /usr/share/man/man1/
filesystem /usr/share/man/man2/
filesystem /usr/share/man/man3/
filesystem /usr/share/man/man4/
filesystem /usr/share/man/man5/
filesystem /usr/share/man/man6/
filesystem /usr/share/man/man7/
filesystem /usr/share/man/man7/archlinux.7.gz
filesystem /usr/share/man/man8/
filesystem /usr/share/misc/
filesystem /usr/src/
filesystem /var/
filesystem /var/cache/
filesystem /var/empty/
filesystem /var/games/
filesystem /var/lib/
filesystem /var/lib/misc/
filesystem /var/local/
filesystem /var/lock
filesystem /var/log/
filesystem /var/log/old/
filesystem /var/mail
filesystem /var/opt/
filesystem /var/run
filesystem /var/spool/
filesystem /var/spool/mail/
filesystem /var/tmp/
嗯 filesystem 的作用大概有这几个:
首先摆好一个 Linux 发行版基本的目录结构。
大多数 Linux 发行版的目录结构都是遵循
的啦,Arch 也不例外~
然后放些 Arch 特有的文件
例如默认设置啦( 这不是废话么 ),甚至还有一个手册页(汝不妨试试
这下所有的文件都在 pacman 的纪录之下了呗~
所以咱很无聊咯~ ??
前段时间 Qt5.7 更新移除了 QGtkStyle 这个模块,直接导致了非 KDE 环境下 Qt 应用主题直接崩坏(
在 ArchWiki 上找了下解决方案,发现一个叫
的包可以在非 KDE 下设定 Qt 应用的主题(oxygen、breeze)。
安装好后首先在菜单栏里打开 qt5ct(这玩意是有 .desktop 文件的),咱选择的是用 breeze,字体个人喜欢用 noto。
之后在你的 .xprofile 里加上一句 export QT_QPA_PLATFORMTHEME=qt5ct 重启 X 后那些 Qt 应用就能直接用 KDE 主题辣
已知问题:
ss-qt5 会崩溃,启动 ss-qt5 的时候记得去掉这个环境变量。
默认没法用暗色主题,breeze 自带的 color-scheme 和 qt5ct 不兼容,无奈花了点时间,对着 arc-dark 的颜色自己做了一份配色:
July 23, 2016
特首试图用 Deepin 的 LiveUSB 安装 AOSC OS (然后失败了?
这个看起来和摄像头类似的物体竟然是用来校正色彩的 ?
ThinkPad 信仰充值中心二分部 ?
换大屏幕以后就舒服多了~
特首施展了现场修 issue 技能 ?
画风突变??
AOSCC 微软信仰充值中心 ?
新鲜出炉的 vba-m ?
OS X 来砸场啦 ?
真机笑而不语?
被特首抢了观众的 Icenowy 在默默的继续调试自己的板子……
(好像有啥奇怪的东西混进来了?
白学家进入现场, 打死!
? 围观狮子赶工社区网站中……
听说有人要加入 FSF 神教? ?
GitCafe 的精神继任 Coding.net 借尸还魂啦?
糟糕!你们竟然昏了头脑把圣战者公审了!他引爆了藏在衣服里的炸弹,和所有人同归于尽了 #圣战者胜。?
Jelly Bai 在 BroncoTc 的提醒下发现忘记像去年一样照集体照了 ??
BroncoTc | Keybase√, [18.07.16 19:16]
BroncoTc | Keybase√, [18.07.16 19:16]
我们忘了拍合影。
liushuyu ?, [18.07.16 19:16]
liushuyu ?, [18.07.16 19:17]
建议开始 AOSCC 2017 的筹划
Mingcong Bai, [18.07.16 19:17]
ヨイツの賢狼ホロ ?(*), [18.07.16 19:18]
下一次第一天就拍合影吼不吼啊?
Mingcong Bai, [18.07.16 19:18]
[In reply to ヨイツの賢狼ホロ ?(*)]
gumblex, [18.07.16 19:18]
[In reply to BroncoTc | Keybase√]
?这应该是第一天中午的事情
Mogician Yang, [18.07.16 19:18]
Jactry Zeng, [18.07.16 19:19]
[In reply to Mingcong Bai]
这次会续了不少啊 xD
ヨイツの賢狼ホロ ?(*), [18.07.16 19:19]
[In reply to Mingcong Bai]
? /me 然而下一次来不来难说了
KayMW | Syntax-Breaker | 不想猎取灵魂的咸鱼不是好灵魂画手 | 0x547E6, [18.07.16 19:19]
[In reply to ヨイツの賢狼ホロ ?(*)]
还真应该这样……有时候不知道谁就突然不见了(比如今天中午的A2
KayMW | Syntax-Breaker | 不想猎取灵魂的咸鱼不是好灵魂画手 | 0x547E6, [18.07.16 19:20]
[In reply to KayMW | Syntax-Breaker | 不想猎取灵魂的咸鱼不是好灵魂画手 | 0x547E6]
还有昨天还是前天的 Bob Cao(
Icenowy 请大家不要在 SoC 上套用 PC 的 GPU 概念, [18.07.16 19:20]
[In reply to KayMW | Syntax-Breaker | 不想猎取灵魂的咸鱼不是好灵魂画手 | 0x547E6]
a2 最后回来啦
IMisakaTransferFrame4e21 神乐坂美蒋, [18.07.16 19:21]
应该和AOSCC 2015一样,人没到齐就合多张
KayMW | Syntax-Breaker | 不想猎取灵魂的咸鱼不是好灵魂画手 | 0x547E6, [18.07.16 19:21]
[In reply to Icenowy 请大家不要在 SoC 上套用 PC 的 GPU 概念]
然而那个时候人基本走光啦(
本文来自,转载请注明。那个处理 DNS AAAA 的程序,后来请求量大的时候就经常报错。经过研究,是在sendto的时候返回了「Pemission Denied」错误。后来的 Rust 版本也发生了类似的问题,得到操作系统返回的代码「EPERM」。
我翻了半天 man 手册,其中只说到向广播地址发包可能会得到 EACCES 错误。Google 也没有得到结果(都是些权限不够的问题,但我的程序是 root 跑的呀,并且错误比较零星)。后来发到 中询问,才终于得知了和我有的人,但是也没有结论,只是说关掉 iptables 就正常了。可我的程序依赖 iptables 呢……而且我要的不仅仅是解决方案(实际上这个问题并没有造成什么可感知的影响,就算有,我也有办法 migrate),我更想知道为什么。
确定是发包太快造成的问题,拿着相关关键词去搜,还真找到了一些有用的信息。比如之前看过的 时会让 iptables 不跟踪相关数据包,有人在使用 SIP 协议时也遇到了同样的问题,并且。于是我照着做,让 conntrack 放过我发出的 UDP 包:
iptables -t raw -I OUTPUT -p udp -m udp --sport 53 -j NOTRACK
然后不仅那些错误都没了,而且处理速度快了一倍!(图中红虚线是发生错误的时候。)
July 22, 2016
(道具是自由且开源的 Inkscape 哦~)
这张用了 全景(不能) 变焦以后更糊了 ?
安同开始程序(Anthon Starter Kit),可以去 repo.aosc.io 获取演讲时用到的幻灯片。
(原谅咱真找不到更合适的词啦,况且 LibreOffice Impress 也叫“幻灯片” ??
然后后面有人玩起了 Uno 牌?
ABBS ,全称 AutoBuild Build Service 。是 AOSC OS 管理软件包编译配置树的工具(目前是这样
还是老样子,演讲时的幻灯片在这:
(瓶装毒品??)
然而咱只拍了一张照片,而且用了 全景(不能) 变焦以后更糊了 ?
这回怪了,没人投票?你们终于意识到投票杀人是不人道的了吗?
夜幕降临,人们都活在恐惧中,彻夜难眠。这漫长的夜晚竟然......还是有好几个小时 ??
July 21, 2016
多图杀猫+原谅咱的渣照相技术?
(当地桥好像很多的样子~)
(当心电离辐射......#滑稽)
(简朴的导向标志)
AOSCC 与会人员们聚集在会场 —— 大家都如释重负,因为昨晚似乎无人受袭。
在白特首来之前先来围观下 A2 ~
夭寿辣,会场聚众吸毒啦??
现场生成 locale 中(貌似 AOSC 没给 /etc/locale.gen 上注释?
ThinkPad 信仰充值中心一分部 ? (画面中间的是果冻特首的 W541 ,旁边的是 A2 的 X1 Carbon)
还有特首的龙芯笔记本~
Hmm...清真猪肉公共许可证, 嗯可以,这很清真
现场装 X 中的树莓派 (然而不久有人把线碰掉然后就关机了, 毕竟出来混迟早是要还的嘛 ?)
AOSCC 2017,下一站广州!?
AOSCC 2016 与会者选出的 AOSC OS Core 4 的开发代号是 "Duang-Duang"(努力保持严肃……);
夜幕降临,人们都活在恐惧中,彻夜难眠。这漫长的夜晚竟然有几个小时! ??
July 16, 2016

我要回帖

更多关于 java serversocket 的文章

 

随机推荐