小编Dou*_*rel的帖子

在Ruby中查找类的所有后代

我可以轻松地提升Ruby中的类层次结构:

String.ancestors     # [String, Enumerable, Comparable, Object, Kernel]
Enumerable.ancestors # [Enumerable]
Comparable.ancestors # [Comparable]
Object.ancestors     # [Object, Kernel]
Kernel.ancestors     # [Kernel]
Run Code Online (Sandbox Code Playgroud)

有没有办法下降层次结构?我想这样做

Animal.descendants      # [Dog, Cat, Human, ...]
Dog.descendants         # [Labrador, GreatDane, Airedale, ...]
Enumerable.descendants  # [String, Array, ...]
Run Code Online (Sandbox Code Playgroud)

但似乎没有一种descendants方法.

(出现这个问题是因为我想找到Rails应用程序中的所有模型,这些模型来自基类并列出它们;我有一个控制器可以使用任何这样的模型,我希望能够添加新模型无需修改控制器.)

ruby

138
推荐指数
6
解决办法
6万
查看次数

为了一个卑鄙的目的打破CAPTCHAs

要求用户阅读扭曲文本的CAPTCHA对于有视力的人来说是好的,但对于那些失明或有其他残疾的人来说是一个可怕的障碍.音频备选方案偶尔可用,但仍然无法帮助那些聋哑人和盲人,并且很难使用屏幕阅读器(已经在向您朗读文字).

存在一对夫妇使用人类解决代表用户,如的CAPTCHA解决方案的WebVisiumSolona,但这些依靠志愿者运营商的可用性(例如,Solona显然只有一个志愿,所以你必须希望他当你需要帮助时醒着).

在我看来,盲人所需的CAPTCHA解决方案的数量非常低 - 我猜想在像英国这样的人口稠密的国家每天不到几百个.这意味着,与想要在短时间内多次执行动作的坏人不同,为盲人提供的CAPTCHA援助服务可以承担相当大的计算资源 - 例如,亚马逊EC2中的计算机云- 来识别所呈现的文本.

我的问题是:假设你不太关心速度,并且你有很多可用的计算机,是否有算法可以让你解决今天常见的文本失真CAPTCHA,比如reCaptcha使用的那些?或者即使有大量的资源和时间,这些问题是否真的难以解决?

几点说明:

  1. 在这一点上,我的问题只是理论上的,但显然任何此类服务都必须谨慎控制访问以防止垃圾邮件发送者.也许只有注册的盲人才会被允许使用它.

  2. 我知道几年前使用一台算法在一台计算机上运行几秒钟就破坏旧的Yahoo CAPTCHA.我在问现代CAPTCHA是否可以打破,可能更慢,资源更多.

  3. 我知道会出现一些新的CAPTCHA类型,要求用户识别小猫定位图片.这些还没有普及,所以我现在只是询问文本失真.

captcha accessibility blind

12
推荐指数
1
解决办法
2773
查看次数

Grails过滤器语法,或者,如何在Grails外调用Grails过滤器

Grails提供在控制器之前运行的过滤器.它们在类似于以下的类中定义:

class SecurityFilters {
   def filters = {
       myFilter(controller:'*', action:'*') { // What are those weird colons??
           print "I'm filtering!"
           // Code that does the filtering goes here
       }
   }
}
Run Code Online (Sandbox Code Playgroud)

这些工作很好,但我想更好地理解语法,因为它看起来不像我以前见过的任何Groovy代码.特别是,上面的那行开头myFilter似乎很奇怪.这是一个名为方法的方法定义myFilter吗?如果是这样,:'*'每个参数后的含义是什么?我认为这可能是一个默认参数值,但那可能是='*'.我之前在方法调用中看过使用冒号的命名参数,但这不是方法调用,因为我没有myFilter()在其他任何地方定义.

如果有人能告诉我如何从普通的Groovy类执行过滤代码,我想我会理解得更好.换句话说,如果我有一个文件MyFilters.groovy包含上面的行,我怎么能完成这个Groovy代码,所以它打印"我正在过滤"?

import MyFilters
def mf = new MyFilters()
mf.filters.somethingGoesHere // Help! How do I finish this line so it calls my filtering code?
Run Code Online (Sandbox Code Playgroud)

grails groovy filter

7
推荐指数
1
解决办法
7018
查看次数

Groovy记录进程输出的方法

我想在我的Grails应用程序中启动一个长时间运行的命令行进程,当它到达时将每行输出记录到控制台,并异步执行其他操作,同时进程和日志记录活动继续进行.(在某些时候,我想要对每行输出做一些其他事情,比如记录到文件或查找某些值并触发其他操作.但是为了这个问题的目的,登录到控制台是好的.)

下面是我提出的执行此操作的代码.它有效,但启动logger线程而没有明确地终止它让我感到困扰 - 它会正常终止吗?它会变成僵尸吗?我宁愿告诉Groovy将进程输出直接发送到System.out流 - 类似于command.execute(outputStream=System.out)- 但是没有找到一种非阻塞的方法来做到这一点.你能建议一个更好的方法吗?

def runCommand(command) {
    def process = command.execute()
    def out = process.getInputStream()
    def logger = Thread.start { out.eachLine { println it } }
    process.waitForOrKill(TIMEOUT_IN_MILLIS)
    return process // use to get exit code et cetera
}
Run Code Online (Sandbox Code Playgroud)

io groovy multithreading asynchronous

6
推荐指数
1
解决办法
5594
查看次数

使用算法制作动画GIF的最佳方法是什么?

我有一个骑在各种尺寸(大尺寸,如100x100)的棋盘上骑行的算法,我想为结果制作动画.每当骑士移动到一个新的方块时,(方形)画布中的相应像素将改变颜色,直到最终整个画布被着色.所得到的电影将可在网页上查看有关该算法的内容.

如果我想要广泛的浏览器支持,动画GIF似乎是最好的方法(尽管欢迎其他建议).使用它的最佳工具或库是什么?我很高兴使用Linux或Mac电脑上免费提供的任何东西.

实际的算法太长了,无法在这里做一个有用的例子(如果你真的好奇的话,请参阅本文),但这是一个8x8板上(无聊)国王之旅的伪代码:

movie = new Movie()
frame = new Frame()
frame.fillRectangle((1,1), 8, 8, BLUE)
for row in [1..8] {
    if (row.isOdd()) { colrange = [1..8] } else { colrange = [8..1] }
    for col in colrange {
        frame.colourPixel(row, col, RED)
        movie.addFrame(frame)
    }
}
movie.saveAsGIF("tour.gif")
Run Code Online (Sandbox Code Playgroud)

额外信用问题:我们可以利用这部电影的特殊功能来减小文件大小吗?在维基百科的文章表明,我们也许能够做到这一点,如果我们只是改变一些像素-事实上,我们只更改每帧的一个!

algorithm gif movie

5
推荐指数
1
解决办法
2821
查看次数