给 Garfileo 留言

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Avatar_small
依云 说:
2012年4月16日 01:51

Gerfileo, 又来打扰你了 :-)
我这里这个函数有重复操作,怎么改进下呢? https://github.com/lilydjwg/myhaskells/blob/master/locatewrapper/LocateMapper.hs#L20

Avatar_small
Garfileo 说:
2012年1月14日 15:12

@yyc:

> 但是所有的窗口信息都保存在server上啊, 一个新的server不可能知道原来的server上面有人建了什么窗口啊.

实现一个 server 将自己保管的信息传递给另一个 server,应该不是很么难事。

至于另外那两个问题,我觉得就没有讨论的必要了,Wayland 的使命就是要结束它们。

yyc 说:
2012年1月14日 12:48

@Garfileo:

> 应该是这样。但是由于 X11 可以运行在 Wayland 的 Server 上,所以单独的 CM 与不含合成特效的 WM 也还是可以协同工作,前提是机器要首先能运行得起来 Wayland Server。

不过这样的CM就仅仅能渲染X的那部分了~~因为根窗口(如果Wayland里面也叫这个名字的话)不属于X啊

> 理论上是可以简单切换的,因为 Wayland 只是一个协议,按照这个协议实现的 Server 端,应该可以简单切换。

但是所有的窗口信息都保存在server上啊, 一个新的server不可能知道原来的server上面有人建了什么窗口啊.

> 嗯,这个是肯定的。X11 的 Server 崩掉,不也是这样么。

但是server和wm分开的话崩溃的可能性肯定会低啊, wm/cm的插件/配置啥的肯定要比(X)server的复杂/丰富程度大的多啊.
虽然wm/cm崩溃现在遇到的也不多(连续开机几个星期也就在干了什么奇怪的事情的时候可能崩溃) 不过即使是这个频率换到X上也让人受不了啊 (而且给gnome3.0写扩展的时候有时候会一天重启gnome-shell几次, 这要是X的话就要疯了啊)

P.S. 留言回复没有邮件提示??

Avatar_small
Garfileo 说:
2012年1月13日 21:58

@yyc:

> 1, 不可能有单独的cm与不含混成特效的wm协同工作了

应该是这样。但是由于 X11 可以运行在 Wayland 的 Server 上,所以单独的 CM 与不含合成特效的 WM 也还是可以协同工作,前提是机器要首先能运行得起来 Wayland Server。

> 2, 不能简单的切换wm

理论上是可以简单切换的,因为 Wayland 只是一个协议,按照这个协议实现的 Server 端,应该可以简单切换。

> 3, 如果wm由于自身的一点小错误崩溃掉, 那么整个图形界面(或者至少当前的会话)就需要重启?

嗯,这个是肯定的。X11 的 Server 崩掉,不也是这样么。

Avatar_small
Garfileo 说:
2012年1月13日 21:44

@ManateeLazyCat: 我的邮箱是 liyanrui.m2@gmail.com,另外上次你给我留言的时候,我也没找到你的邮箱地址,所以没有回复,很抱歉.

Clutter 提供了 clutter_box_layout_set_spacing 函数,它应该可以控制各项间距。

yyc 说:
2012年1月13日 18:33

再请教一个关于Wayland的小问题(终于决定不在那篇文章的回复里面发了)

wayland将CM和WM集成到服务端是不是就说明:
1, 不可能有单独的cm与不含混成特效的wm协同工作了
2, 不能简单的切换wm
3, 如果wm由于自身的一点小错误崩溃掉, 那么整个图形界面(或者至少当前的会话)就需要重启? (虽然wm出错的可能性没那么大, 但是如果wm/cm支持插件的话(好像一般的cm都带插件), 有个什么段错误啥的还是可以理解的)

ManateeLazyCat 说:
2012年1月13日 14:44

博主你好, 最近在写 gnome-shell 插件,我用 BoxLayout 纵向排列图像和文字, 发现如果文字在上面, 文字上下的填充是正确的, 但是如果文字放在图片下面的话, 文字的上下的填充就很大, 不正常。

请问一下 BoxLayout 是不是要设定某个选项才能让子 Actor 的填充为 0 ?

不知道怎么联系你, 所以就给你留言了, 谢谢!

Avatar_small
Garfileo 说:
2012年1月04日 17:36

@依云: 我的意思是使用 doesFileExist 与 openFile 可以写出与下面 C 代码

if (NULL == (fp = fopen ("foobar", "r")) {出错处理代码};

等价的 Haskell 代码。虽然真正实现起来有些繁琐,需要用到单子变换。

简单的方案是使用 IO 模块中的 try 函数,例如:

try $ openFile "foobar" ReadMode

Avatar_small
依云 说:
2012年1月04日 16:33

@Garfileo: 不一样啊,两个函数怎么能够一起使用呢,总有个先后啊,而且不可能说这两个函数执行的间隙不让文件系统把文件删掉。

-dynamic 试过了,自己写的 OK,调用了 cabal 回来的库时它告诉我要重新编译那些库 :-(

Avatar_small
Garfileo 说:
2012年1月04日 14:20

@依云: 晕,如果你认为“有了文件描述符文件内容就不会没了”,那 doesFileExist 与 openFile 一起使用,本身就起到了 C 语言判断 fopen 返回值的效果了。

ghc 编译文件的时候,默认是将运行时库静态连接到可执行文件中的,你可以使用 -dynamic 选项,使之成为动态连接。

Avatar_small
依云 说:
2012年1月04日 13:41

@Garfileo: 打开文件后它(的目录项)消失不消失没关系啊,有了文件描述符文件内容就不会没了,除了 NFS 那种。fopen 返回失败之后文件又可读那是以后的事了。使用 doesFileExist 的问题是,如果判定后文件消失了,openFile 失败,哗,进程挂掉了。

Haskell 还是得慢慢研究啊。它生成的可执行文件都好大。

Avatar_small
Garfileo 说:
2012年1月04日 08:02

@依云: 按照你在 #51 回复的逻辑,即使 fopen 返回 NULL, open 返回 -1 什么的,也是有时间差阿,说不定你在刚打开一个文件句柄之后,这个文件就消失了呢?说不定 fopen 刚返回 NULL 的时候,文件又有了呢?

事实上你在一开始的那个程序里使用 forM 和 readFile 来读取一组文件,这其中是有惰性的。例如 forM 在运行时并不是遇到一个文件名就开启它的句柄再读取它的内容,而是将读取文件内容的操作推迟到最后。你提供它的一组文件名,如果其中对应着不存在的文件,程序会一个文件都不读取,直接退出了。

此外,Haskell 也是有 try ... catch 机制的,见《real world haskell》第 19 章。

Avatar_small
依云 说:
2012年1月03日 22:26

@Garfileo: 我只是指望 Haskell 能更懒一些而已。不行就算了。

至于不存在的文件之类的,fopen 会返回 NULL 啊,open 会返回 -1 啊,errno 会被设置啊,strerror 会得到错误消息啊(还是国际化过的)。这些,在 Python 里就是 try,在 Haskell 里我还不知道怎么办呢。

Avatar_small
Garfileo 说:
2012年1月02日 15:24

@依云: 那你认为对于不存在的文件有什么判断方法?怎样可以让程序需要的时候自动为你打开文件描述符或读入文件内容?我觉得任何编程语言也解决不了这样的问题啊。

比如,你用 C 语言写一个 for 循环,在这个 for 循环里面 fopen 一些文件,它们的描述符也是一次性的都被开启了,遇到不存在的文件也会导致程序崩掉。Haskell 在处理 I/O 问题,与命令式语言没什么本质的区别,除了它可以在读取超级大的文件时可以利用一下惰性计算。

Avatar_small
依云 说:
2012年1月02日 14:39

@Garfileo: 文件打不开的原因有太多了(大约20来个),总不能一个个地判断吧。而且,预先判断的话会和之后的打开动作之间存在时间差,说不定那个文件就在判断完后消失了呢。

Avatar_small
Garfileo 说:
2012年1月02日 08:15

@依云: 我所指的“打开文件描述符不浪费资源”是以 openFile 相对 readFile 而言的。如果你不希望一次全打开文件,那只好放弃那个 forM。待你需要打开某文件的时候就在文件名列表中找到相应的文件名 openFile 一次。

对于不存在的文件,可以使用 doesFileExist 预先判断一下。

Avatar_small
依云 说:
2012年1月02日 01:47

@Garfileo: 谁说文件描述符不浪费资源了。你觉得那些 daemon 进程 fork 后要千辛万苦地把不用的文件描述符都关掉是为了什么?默认的文件描述符限制是 1024 个,一会儿就用完了。(比如 grep xxx **/*.[ch] 这种东西。连命令行参数上限我都超过过。)

至于遇到不存在的文件嘛,我还不会处理呢。

今天看到两样东西很不错:pandoc 和 gitit。

Avatar_small
Garfileo 说:
2011年12月31日 08:07

@依云: 打开文件描述符又不浪费资源,关闭描述符用 hClose 就可以了。可能你是因为这个 cat 程序遇到不存在的文件会导致程序直接挂掉吧。

Avatar_small
依云 说:
2011年12月30日 20:28

@Garfileo: openFile 也是一样会打开一堆文件描述符啊,而且似乎还不方便关。算了,还是传函数吧,虽然我觉得匿名函数的写法有些丑……

Avatar_small
Garfileo 说:
2011年12月29日 07:45

@依云: 呃,那你使用 openFile 只获取文件 Handle 就可以了。