……我发现看我 blog 的人比较多……
所以无内容纯引用一下。
因为是很重要的事情所以要说两遍
其实应该是 3 ,因为其实这类观察类是第三次,虽然上一篇并没有标注为2。
对他人的吐槽有助于增进了解,或者说我就是个经常处于不吐不快的这样一个人。
这次挑几个想要吐槽的人吐槽好了,仅代表个人印象。
phoenixlzx,multiple1902,都是认真过头的那种人。所有会让人升起调戏的冲动,活的轻松点不好吗。
Adaptee,太勤劳了……太勤劳了。
lilydjwg,……太容易受伤了。“破体无形剑气的心法,不重死记,无须苦练,一旦突破执着迷思,便可进入那个境界!出剑之际,还需两个条件,其一:大量亡者的尸气化为力源…其二:学你大哥我痛痛快快的骂一句——我操你娘!”——关七《温瑞安群侠传》
firefoxmmx,虫,太淡定了……
felix,需要得到好人卡的程度
wheat0r,太黑了……
lynx,自己学坏了
yyc,被我带坏了
关于开源软件和用户
开源软件和用户到底是什么关系,这非常微妙。
以下言论是我见过的非常无稽的言论:
1、你觉得不好用你去改进啊
2、你觉得不好用去报bug啊
3、你又没掏钱你没资格批评啊
用户始终是用户,不管用什么软件,用户都是用户。
开源软件和那些闭源的软件(其实并非所有的开源软件,这里特指那些可以汇报bug的那些更加“open”的)都是软件而已,区别在于开源软件给予了用户查看源代码,以及和开发者直接交流的机会(mostly)。而并非你用了开源软件你就需要承担任何责任。
无论你用什么软件,你都不需要承担以下责任:
1、参与开发
2、汇报bug
同时你也有自由批评或者赞扬任何软件的权利。
用开源软件给予的是用户参与开发和汇报bug的权利,而不是加在用户身上的义务。开发者只可以善意的建议你如果有能力,有兴趣,可以来写个patch试试,任何人不能因为你“没这么做”而指责你。
关于代码万能论
这是需要承认的,但是不可滥用。
代码确是是万能的,如果你说一个软件有这个功能,另一个软件没有,然后反驳的理由是另一个软件“凭什么就不能实现”这个功能。代码当然可以写,区别在于:
1、现在有这样的代码吗?没有,“空谈无益,show me the code”。
2、其次,即使没有,潜在的实现这个功能的工作量是多少?如果需要的工作量很大或者你压根就不了解,用一个潜在而不确定的理由来argue就更加没意义。
关于项目和项目
太多人早就忘记了backward compatiblity 这种事情(当然,我说这种事也代表了我做好了被打脸的准备)……所以,不支持同一个软件包名多版本的包管理只能玩具一辈子。当然如果你没法认清他是玩具的事实,你活该。那些商业操作系统在向后兼容上的重要贡献是没一个发行版比得上的。
以及有些很“NB”的项目忘记了自己是被很多人用的事实,以及忘记了版本号的意义。
当然如果你的潜在目的就是搞那些用你的人……
我觉得以上这些都是正常人应该能想明白的道理。欢迎自行对号入座。
……嘛,我为数不多的几个游戏就是这个了。
最近遇见一些奇葩的问题……但总之我现在可以跑起东方的全部正作了……(相对正常的)
1、声音
用pulseaudio的话可能会忘记装32位的alsa-plugins……然后就没声。不过在前几个版本的wine似乎用alsa和pulseaudio会爆音,结果就跑去编译 wine-multimedia 来用原生的 pulseaudio 支持。
因为编译很烦人,所以测试前先看看到底能不能用alsa和pulseaudio。没音乐玩毛东方……
2、诡异的按键问题
描述上和这里一样 http://ubuntuforums.org/showthread.php?t=1577051 一启动游戏就处于上和左被按下的状态。
不过没人提过解决办法,我这里非常奇妙的是,插上usb鼠标的话,就会出现这个问题,拔了就消失。Raven Dark 兄的提示是和direct input 有关,于是我今天突然想看看替换成windows的direct input 的 dll 如何,于是用winetracks替换了,结果似乎问题消失。
3、绯想天和非想天则
找了很久找到了这个补丁,提取出来放在这,打了就可以跑绯想天和非想天则了。
http://uploads.csslayer.info/uploads/chakra/wine_th123_th105.patch
4、for chakra
前几天又编译了个wine-multimedia,带了上面的补丁,arch/chakra 这种发行版你们也知道的,以后肯定会不得不需要recompile,于是到时候出了问题别来找我,这个大概现在能用吧。
http://uploads.csslayer.info/uploads/chakra/wine-multimedia-1.5.19-1-x86_64.pkg.tar.xz
5、性能
我的intel显卡禁用垂直同步之后似乎可以跑60fps全速……
修改 ~/.drirc,为以下内容
<device screen="0" driver="dri2"> <application name="Default"> <option name="vblank_mode" value="0"/> </application> </device>
看,活了这么久,依然可以当小白。
Clang 的 inline 是怎么回事呢?
先来段代码:
inline void f() { } int main() { f(); return 0; }
然后
$ clang main.c /tmp/main-hn0696.o: In function `main': main.c:(.text+0x12): undefined reference to `f' clang: error: linker command failed with exit code 1 (use -v to see invocation)
WTF?这不科学!
好吧,我们来学习下clang 的inline 的behavior,换句话说,C99的。(http://clang.llvm.org/compatibility.html#inline)
static inline:永远展开代码
inline:在编译器觉得应该展开的时候展开,例如在debug的时候,不展开。
所以你会发现
$ clang main.c -O2
是没问题的。因为此时 f() 被当作 inline 展开了所以并不需要解析 f 的符号。
结论:
写static inline,或者就不inline。或者让 clang 用 gnu89 的方言,但是这并不推荐。