小编Har*_*rry的帖子

Groovy/Grails:如何实现约束?

Grails中的入门 - 2e,第42页(电子页面,而不是纸质页面)中,列出了以下示例.

class Race {

    static constraints = {

        name(blank:false, maxSize:50)


        // NOTE: This doesn’t do
        // what you think it does
        startDate(min: new Date())

        // And this is what we're supposed
        // to be using:
        // startDate(validator: {return (it > new Date())})
    }

    String name
    Date startDate
    // ...
}
Run Code Online (Sandbox Code Playgroud)

然后建议读者使用startDate上面注释的版本.引用的原因是:该static constraints属性仅被评估一次(在服务器启动时),而我们的目的是在每个实例化和随后的验证中评估它Race.

我的问题是:为什么name约束的非闭包样式适用于每次验证尝试但不适用于startDate约束?而且,相反,如果需要封闭口味startDate,那么为什么它也不是必需的name呢?

如果我正确理解上面的Groovy语法,似乎static constraint块中列出的每个约束在语法上都是对函数的调用,该函数将各种验证属性作为一个Map.现在,由于静态块将在服务器启动时进行评估(一次),因此两个函数调用也会在服务器启动时发生(一次),并且应该在非闭包形式中导致相同且一致的行为.不是吗?

validation grails groovy closures constraints

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

Perl 6:从里面获取函数的名称

在Perl 6中,如何在运行时从其体内获取函数/子例程的名称?

例如,

sub foo {
    say "My name is: " ~  <WHAT-API-HERE??> ;
}
...
foo();
Run Code Online (Sandbox Code Playgroud)

上面的代码应该打印:

My name is: foo
Run Code Online (Sandbox Code Playgroud)

我查看了MOP,FAQFunctions等地方.

function introspection perl6

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

如何将ELF可执行文件转换为C代码?生成的C代码不必是人类可读的

我有一个ELF文件,我想将其反编译为C代码,并对生成的C代码进行简单的更改,然后将其重建为ELF。

反编译的C代码不需要完全可读。例如,如果混淆了变量和函数名称,那就可以了。

我可以使用哪些工具在Linux上完成此任务?

PS:如果C无法进行编译或不容易进行编译,尽管对汇编源进行调整对我来说非常困难,但我愿意考虑对汇编语言进行反编译。

更新:您可能会假设我正在使用以下C程序来获取我的a.outELF。现在,进一步假设我已经失去了这个原始C资料。所以,我现在想将其编译到(一个可能混淆),C其中我至少能够改变像琴弦的小东西源"world""Hello""Bye",或能扭转感if等语句

#include <stdio.h>
#include <string.h>

char buf[256];

const char *Hello = "Hello";
const char *Bye = "Bye";
const char *Who = "world";

char * greet(const char *greeting, const char *str) {
    strcpy(buf, greeting);
    strcat(buf, ", ");
    strcat(buf, str);
    strcat(buf, "!");
    return buf;
}

int main(int argc, char *argv[]) {
    int sayHello …
Run Code Online (Sandbox Code Playgroud)

c linux transform elf

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

Java SoftReference保证失败

JDK 7文档对此有一个说法SoftReference:

" 在虚拟机抛出OutOfMemoryError之前,保证可以清除对软可访问对象的所有软引用."

然而,在我的测试程序中,我看到的OutOfMemoryError一致(除了"陌生人行为"一节):

// RefObjectTest.java

import java.util.*;
import java.lang.ref.*;

public class RefObjectTest {

    public static void main(String[] args) {

        ArrayList<byte[]> leaks = new ArrayList<>();

        byte[] obj = new byte[10 * 1024 * 1024];

        SoftReference<byte[]> ref = new SoftReference<>(obj);

        // WeakReference is supposed to be eagerly GC'ed, but I see no
        // difference in terms of program behavior: still get OOME.
        //
        // WeakReference<byte[]> ref = new WeakReference<>(obj);

        obj = null; …
Run Code Online (Sandbox Code Playgroud)

java garbage-collection weak-references out-of-memory soft-references

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

测试新的Java解析器

纯粹作为一种自学习练习,我正在尝试使用该Parse::RecDescent模块在Perl中编写Java解析器.我稍后可能会使用Antlr,Bison等其他工具重新实现解析器.

但是,根据Java语言规范,我如何确保我的解析器确实生成了正确的解析?意义,正确处理悬空else,操作员关联和优先等.

一种方法是通过让两个解析器为大量测试Java程序生成AST,然后比较两组AST来将我的解析器与已知的无错解析器进行比较.

如果这确实是唯一的方法,我在哪里可以找到一整套测试Java程序,完全覆盖整个Java语言规范?

我查看了JavaParser,但它似乎没有详尽的测试数据集.

当然,另一种方法是自己手工编写成千上万的测试Java程序,这对我来说是非常不切实际的,不仅在时间方面,而且在确保其详尽无遗!

java testing parsing javaparser

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

`/usr/bin/strip` 的任何 Java 对应物吗?

是否有任何工具可以从 Java .class 文件中删除调试信息,就像/usr/bin/strip可以从 Linux 上的 C/C++ 对象文件中删除一样?

编辑:我喜欢 Thilo 和 Peter Mmm 的回答:Peter 的回答很短,以至于暴露了我对 JDK 附带的内容的无知;Thilo 的 ProGuard 建议无论如何我肯定会检查它似乎提供的所有额外功能。谢谢蒂洛和彼得!

java strip debug-information .class-file

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

反向代理:为什么响应调度不是瓶颈?

当反向代理主要用于负载平衡时,很明显为什么将请求路由到 N 个代理服务器池应该有助于平衡负载。

然而,一旦请求的服务器端计算完成并且是时候将响应分派回客户端,为什么单个反向代理服务器永远不会成为瓶颈?

我对反向代理概念的直观理解告诉我,

  1. 代理 N 个源服务器的反向代理服务器显然不会像涉及 N 个代理服务器的单服务器等价物的设置那样容易或早成为瓶颈,但它也会在某些时候成为瓶颈,因为所有 N 个代理服务器的响应都通过它。

  2. 也就是说,为了进一步延迟上述瓶颈点(避免到达),N 个代理服务器实际上应该“以某种方式”直接将响应分派给客户端,而不是通过位于前面的单个反向代理来完成他们。

我对反向代理概念的理解哪里有问题?也许第 2 点是根据定义不是反向代理服务器设置,但保留定义,为什么 #2 相对于反向代理选项不流行?

reverse-proxy

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

从命令行在 Java 代码中进行更高级别的语义搜索和替换

grep诸如、sedawk、 和 之类的命令行工具perl允许执行文本搜索和替换操作。

但是,是否有任何工具允许我从命令行在 Java 代码库中执行语义搜索和替换操作?

例如,Eclipse IDE 允许我轻松地重命名变量、字段、方法或类。但我希望能够从命令行执行相同的操作。

上面的重命名操作只是一个示例。我还希望能够选择具有附加语义约束的替换文本,例如:

  • 仅 C、D 和 E 类的方法 M1、M2 的范围;
  • 仅 C 类的所有变量或字段;
  • 出现某个类变量的所有表达式;
  • 仅变量的类定义范围;
  • 仅类 C 的方法 M 的所有重写版本的范围;
  • ETC。

使用此类任意语义约束选择代码后,我希望能够对其进行任意转换。

所以,基本上,我需要访问代码的符号表。

问题:

  1. 是否有适合此类工作的现有工具,或者我必须自己构建一个工具?
  2. 即使我必须自己构建一个,是否存在任何工具或库至少可以为我提供 Java 代码的符号表,并在其上添加我自己的搜索和替换以及其他重构操作?

java refactoring command-line sed toolkit

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

/ usr/bin/find:无法动态构建其参数

以下命令在终端中以交互方式按预期工作.

$ find . -name '*.foo' -o -name '*.bar'
./a.foo
./b.bar
$
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做,我就没有结果!

$ ftypes="-name '*.foo' -o -name '*.bar'"
$ echo $ftypes
-name '*.foo' -o -name '*.bar'
$ find . $ftypes
$
Run Code Online (Sandbox Code Playgroud)

我的理解是,在有机会跑之前,它$ftypes会被扩展.在这种情况下,该方法也应该有效.bashfindftypes

这里发生了什么?

提前谢谢了.

PS:我需要动态构建一个文件类型列表(ftypes上面的变量),以便find稍后在脚本中给出.

bash interactive find

3
推荐指数
1
解决办法
373
查看次数

bash发布了额外的,虚假的后台进程

我看到一个非常非常奇怪的行为与bash(RHEL 5.3版本3.2.25).

我有一个'Launcher'脚本执行以下操作(作为前台进程,在一个始终保持打开的终端中运行):

  1. 它在后台启动一个程序A,然后退出.
  2. 然后,A在后台启动程序B的两个(进程)实例(例如:B1,B2);
  3. A,还在后台启动程序C的一个实例.

上面的想法主要是让A,C和两个B彼此通信,直到它们被用户杀死.(它们继续while sleep DURATION; do ... ; done循环运行.)

问题:

完成上述3个步骤之后,当我ps -ef从另一个终端窗口重复发出时,我有时会看到一些额外的,虚假的B实例(比如说B3,B4 ......)和/或有时会列出一个额外的,虚假的A实例!

这些额外的实例是暂时的 - 它们来自ps -ef列表.

此外,这些虚假实例恰好是有效(或期望)过程的子项 - 而不是兄弟姐妹.例如,B3和B4将分别列出B1和B2作为其父级; 同样,假的A2会将A列为其父级!

现在,我PRETTY非常确信我是NO WAY从B内部产生的任何追加B的情况下,也没有任何一个实例从里面A.

那么,这里发生了什么?

提前谢谢了.

PS:我已经看到了一个类似的问题(多个虚假实例),一段时间回到cron作业的背景下,这些作业被设计成在初次首次发布时无限期地挂起.在这里,我会看到我的cron作业的多个实例,即使我有明确的逻辑来防止crond启动任何其他实例(通过检查磁盘上是否存在锁定文件).而且,即使在这里,我也无法弄清楚问题.


$ ps -ejfH 
UID        PID  PPID  PGID   SID  C STIME TTY          TIME CMD
root     28503     1 28474 11126  0 22:14 pts/1    00:00:31   /bin/bash A
root     28525 28503 28474 11126  0 22:14 pts/1    00:00:26 …
Run Code Online (Sandbox Code Playgroud)

linux bash jobs background

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