小编Par*_*ife的帖子

铁甲和沙发pbkdf2哈希之间的不匹配

我的问题上下文:Linode KVM实例上的Fedora 22 64位,CouchDB v.1.6.1,SBCL 1.2.16

CouchDB:我用密码创建了一个用户"testpass"._users数据库中相应的创建文档包含(以及其他内容):

{ ...
  "password_scheme": "pbkdf2",
   "iterations": 10,
   "name": "test",
   "roles": ["reader"],
   "type": "user",
   "derived_key": "7b0cad0d2762b448b88684332e68988e801195ad",
   "salt": "2e4bcf85f39279ab9d1e1336a00dce0e"
...}
Run Code Online (Sandbox Code Playgroud)

所以我在同一台机器上的lisp repl中做了:

REPL>(in-package :ironclad)
REPL>(byte-array-to-hex-string 
         (pbkdf2-hash-password 
             (ascii-string-to-byte-array "testpass") 
             :salt (hex-string-to-byte-array "2e4bcf85f39279ab9d1e1336a00dce0e")
             :digest 'sha1 
             :iterations 10))

"ce55610fe10bc49703f0df95adb6c9c9c71e3f8e"
REPL>
Run Code Online (Sandbox Code Playgroud)

因此"ce55610fe10bc49703f0df95adb6c9c9c71e3f8e"铁甲的输出与"7b0cad0d2762b448b88684332e68988e801195ad"沙发不匹配.

我已经尝试了所有支持的摘要,但没有运气.有没有人对什么可能是错的有任何想法?

couchdb common-lisp ironclad pbkdf2

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

Java接口继承和实现

我在apache中看到了驼峰源代码

public class DefaultCamelContext extends ServiceSupport implements CamelContext, Service
Run Code Online (Sandbox Code Playgroud)

我的问题是为什么这个定义

public interface CamelContext extends Service

并且

public abstract class ServiceSupport implements Service

不应该只是

public class DefaultCamelContext extends ServiceSupport implements CamelContext
Run Code Online (Sandbox Code Playgroud)

是否需要明确的"实施服务"而我错过了什么?通常是否有需要这样的情况?

java inheritance interface

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

多个独立maven项目的通用测试数据

我有一个maven项目,将特定格式的文本文件转换为另一种格式.为了测试我已经在src/test/resources中放入了大量的测试文件.

我还有另一个项目,它使用第一个进行转换,然后在输出格式上做一些额外的东西.我也想针对相同的测试数据集测试这个项目,但我不希望有重复的数据集,我希望能够单独测试第一个项目,因为它也是一个独立的转换器项目.

这样做有什么共同的解决方案吗?我不介意在项目源代码树中没有测试数据集,只要每个项目可以独立于另一个项目访问数据集.我也不想为此设置数据库.我想的是比RDBMS更简单的测试数据存储库.我可以使用特定的maven插件来满足这种需求吗?易于设置和简单是我的首要任务.此外,我想的是打包测试数据并将其放入内部maven仓库,然后下载并在junit代码中解压缩.或者更好的是,有一个maven插件可以为我做这个吗?

有任何想法吗?

maven-2 unit-testing

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

lisp中的宏行为问题

如果在REPL中我这样做:

(dolist (x (1 2 3))
  (print x))
Run Code Online (Sandbox Code Playgroud)

然后我得到一个错误,因为在(1 2 3)中数字1不是符号或lambda expr.如果我做:

(dolist (x (list 1 2 3))
      (print x))
Run Code Online (Sandbox Code Playgroud)

然后它工作正常.

我的问题是为什么以下工作:

REPL> (defmacro test (lst)
           (dolist (x lst)
             (print x)))
=> TEST
REPL> (test (1 2 3))
1
2
3
=>NIL
Run Code Online (Sandbox Code Playgroud)

为什么dolist在宏定义中接受(1 2 3)而在直接在repl中时不接受?假设:

"由于TEST是一个宏,它不会评估它的参数,因此(1 2 3)会按原样传递给dolist宏.因此,玩家必须像在REPL中传递(1 2 3)时那样抱怨"

显然是错的.但是哪里?

更新:虽然答案有助于澄清对宏的一些误解,但我的问题仍然存在,我将尝试解释原因:

我们已经建立了dolist评估其列表参数(代码块1,2).好吧,在宏定义中调用它并且传递给它的list参数是定义的宏参数之一(代码块3)似乎并非如此.更多细节:调用时,宏不会评估其参数.因此,我的测试宏在调用时将保留list参数,并在扩展时将其原样传递给dolist.然后在扩展时,玩家将被执行(在我的测试宏def中没有反引号).并且它将以(1 2 3)作为参数执行,因为这是测试宏调用传递给它的内容.那么为什么它不会抛出错误,因为dolist试图评估它的列表参数,在这种情况下它的列表参数(1 2 3)是不可评估的.我希望这有点清除我的困惑.

lisp macros common-lisp

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

如何避免在构造函数中使用它

我有这种情况:

interface MessageListener
{
   void onMessageReceipt(Message message);
}

class MessageReceiver
{
  MessageListener listener;
  public MessageReceiver(MessageListener listener, other arguments...)
  {
     this.listener = listener;
  }

  loop()
  {
    Message message = nextMessage();
    listener.onMessageReceipt(message);
  }
}
Run Code Online (Sandbox Code Playgroud)

我想避免以下模式:(在客户端构造函数中使用this)

class Client implements MessageListener
{
   MessageReceiver receiver;
   MessageSender sender;

  public Client(...)
  {
    receiver = new MessageReceiver(this, other arguments...);
    sender = new Sender(...);
  }
  .
  .
  .
  @Override
  public void onMessageReceipt(Message message)
  {
     if(Message.isGood())
       sender.send("Congrtulations");
     else
       sender.send("Boooooooo");
  }
}
Run Code Online (Sandbox Code Playgroud)

我需要上述功能的原因是因为我想在onMessageReceipt()函数中调用发送者,例如发送回复.但是我不想将发送者传递给监听器,所以我能想到的唯一方法就是在实现监听器的类中包含发送者,因此产生上述客户端实现.有没有办法在构造函数中不使用'this'来实现这个目的?感觉很奇怪,我不喜欢它,因为我在完全构建之前将自己传递给一个对象(MessageReceiver).另一方面,MessageReceiver不是从外部传递的,它是在内部构造的,但这是否"净化"了奇怪的模式?我正在寻找一种替代或某种保证,这种安全,或者它可能适得其反.

java design-patterns

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

Lisp:如何在initialize-instance:around方法中获取创建的实例

我想为类X创建一个初始化实例的(:around qualified)特化器,它将首先调用next-method然后调用另一个类的make-instance,为它提供创建的X实例.我怎么能在initialize-instance:around方法中获取创建的实例?(假设当然在调用了call-next-method之后,所以我们处于以下方面:

编辑:A类与B类的双向关系通过每个中的一个插槽保持另一个的id,但A类要求B类的id,而不需要相反的.所以我想要的流程是:

  1. make-instance'classA
  2. 在initialize-instance中:围绕classA我会:

    一世.make-instance classB和aquire id-of-B.

    ii call-next-method添加id-of-B

    iii将classB指向的相应id-of-A槽设置为我们创建的classA实例(这是我原来的问题原因)

现在我可以在[i]之前和[iii] in:之后做,但是我不能:类A和B是通过大象的持久类,我想将整个流程包装在一个我不想跨越多种方法的事务中.对于熟悉elephant的人,我想使用ensure-transaction包装器,我不想在不同的点使用显式的begin和commit函数调用.

lisp common-lisp clos

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

在 ncurses 中,属性 A_PROTECT 有什么作用?

在 ncurses 中:

1.A_PROTECT属性有什么作用?网络上的任何地方,文档都说:保护模式。那是什么?

2.另外我想用下划线标记用户输入字符的区域,但我希望当用户删除或退格时下划线重新出现。是否有一个属性可以做到这一点,或者我必须手动做到这一点?

ncurses

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

Lisp:宏/函数定义中的包前缀问题

我想创建一个宏(或函数),它将包含以包为前缀的符号.只有已经定义了这些包,才有可能.为什么?只要我在宏/函数被调用时定义了包,为什么在定义宏/函数时它们是未定义的?

我想要这个的原因是我希望在我的init文件中有便利功能,用于启动我在不同项目开发的东西 - 包但我不想加载所有项目只是为了能够定义便利功能,因为我一次只开发一个项目.

lisp common-lisp

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