小编z5h*_*z5h的帖子

虫子狩猎策略?

假设您在软件相当复杂的部分的功能测试中发现了一个错误.它可能源于数据库中的错误/意外数据,中间层代码或前端的某些内容.

精细.我们都去过那儿.

你有单元测试来编写和运行,调试/记录语句要插入,sql语句要编写和运行,你要用FireBug检查的东西等等.

假设第一步是提出您想要调查的潜在原因列表.

现在你必须决定做什么顺序.

你呢:

  1. 根据直觉调查订单中的原因?
  2. 调查原因从最快检查到最慢检查?
  3. 假设该错误是特定于此功能的,并从大多数特定于功能的代码调查到最不具体的特定代码?
  4. 假设这是别人的错,并从最常见的代码调查到您的特定代码?
  5. 我没有提到的其他东西?

我有一种感觉,第一种策略是最常用的.也许只是因为我不与许多初级开发人员合作,而更多高级开发人员倾向于拥有体面的直觉.或许我们只是认为我们有不错的直觉,但应该使用更系统的方法.

有什么想法吗?

language-agnostic debugging

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

如何使用类型系统编码和实施合法的FSM状态转换?

假设我有一个Thing具有state属性的类型A | B | C,
并且合法的状态转换是A->B, A->C, C->A.

我可以写:

transitionToA :: Thing -> Maybe Thing

Nothing如果Thing处于无法过渡的状态,它将返回A.

但是我想定义我的类型,并且过渡函数的转换方式只能在适当的类型上调用.

一个选项是创建单独的类型,AThing BThing CThing但在复杂的情况下似乎不可维护.

另一种方法是将每个状态编码为它自己的类型:

data A = A Thing
data B = B Thing
data C = C Thing
Run Code Online (Sandbox Code Playgroud)

transitionCToA :: C Thing -> A Thing

这对我来说似乎更清洁.但是我发现A,B,C是函数,除了转换函数之外,所有的函数都可以被映射.

使用类型类,我可以创建像:

class ToA t where  
    toA :: t -> A Thing
Run Code Online (Sandbox Code Playgroud)

哪个看起来更清洁了.

是否有其他首选方法可以在Haskell和PureScript中使用?

haskell purescript

10
推荐指数
2
解决办法
741
查看次数

是否有针对jvisualvm或NetBeans探查器的调用树视图?

JProfiler提供实时调用树视图,因此您可以实时查看使用CPU的内容并深入了解详细信息.随时将计数重置为零,冲洗,重复.

我目前没有这个工具,并试图通过免费/开放替代方案.jvisualvm和NetBeans探查器具有静态快照调用树和实时平面视图.似乎有理由会有一个实时的调用树视图(或作为一个插件),但我似乎找不到一个.

这种功能仅适用于商业分析器吗?

谢谢.

java profiling netbeans jprofiler jvisualvm

9
推荐指数
2
解决办法
2237
查看次数

榆树的可比性意味着什么?

我无法理解comparable榆树究竟是什么.榆树似乎和我一样困惑.

在REPL上:

> f1 = (<)
<function> : comparable -> comparable -> Bool
Run Code Online (Sandbox Code Playgroud)

所以f1接受可比较的.

> "a"
"a" : String
> f1 "a" "b"
True : Bool
Run Code Online (Sandbox Code Playgroud)

所以它似乎String具有可比性.

> f2 = (<) 1
<function> : comparable -> Bool
Run Code Online (Sandbox Code Playgroud)

所以f2接受可比的.

> f2 "a"
As I infer the type of values flowing through your program, I see a conflict
between these two types:

    comparable

    String
Run Code Online (Sandbox Code Playgroud)

所以,String 是不是媲美?
为什么类型f2number …

elm

9
推荐指数
2
解决办法
3706
查看次数

我怎样才能在Rails中执行类似find_in_batches_by_sql的操作

find_in_batches不允许纯SQL(据我所见).
find_by_sql没有批量支持(据我所知).

那我该怎么做find_in_batches_by_sql呢?

SQL是令人讨厌的编程生成的东西,它指向第三方数据库,结果集可以返回数十万到数百万条记录.

我应该研究一下ActiveRecord的其他光标技巧吗?

谢谢.

sql activerecord ruby-on-rails

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

Elm Tagged Union Type比较构造函数

是否可以用来==比较Elm中标记的联合类型的构造函数,或者你是否必须使用大小写?

例:

  type alias Model =
    { accessToken : String
    , page : Page
    , config : Config 
    } 

  type Page 
    = Home String
    | Profile String


   menu : Model -> Html Msg
   menu model = 
      div []
          [ a [ href "#home", classList [ ("active", model.page == Home) ] ][ text "Home" ]
          , a [ href "#profile", classList [ ("active", model.page == Profile)] ][ text "Profile" ]        
          ]
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我想写一些像model.page == Home来检查当前页面是否为Home,以便我可以在该链接上将css类设置为"active",但似乎我必须使用我可以做的一个案例,但对于这种情况实施起来有点尴尬.

elm union-types

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

简单(代码)安全散列函数

我需要一个具有以下属性的安全(加密)哈希函数:

  1. 可以在尽可能少的行中编码(在R5RS方案中).希望50岁以下.
  2. 密码长度数据的内存和CPU性能.(例如,它不必非常高效或为数百万字节的数据创建哈希)

我能找到的最安全的散列函数在设计时考虑了速度/内存效率,因此编码很复杂.

目前的候选人是Mash-1(或Mash-2): 应用密码学手册.Google图书

谢谢.

编辑:到目前为止,谢谢大家的答案.请原谅我,如果以下是粗鲁的,我只想清楚.请相信我,我完成了我的作业并考虑了"标准"选项.我知道最简单的事情就是使用其中一种,但这不是我想要的.

我想回答的一个问题是:什么加密安全哈希算法可以用最少量的"可读"代码实现?

我已经发布了我能找到的最佳候选人.任何关于更简单的建议或关于Mash-1/2的评论都会有所帮助.

hash scheme cryptography

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

如果Tomcat服务器显示"Client Aborted",并且客户端显示"Premature EOF",那么谁是对的?

我有一个Tomcat服务器通过http将数据流传输到Java客户端.它将字节从文件复制到servlet中的HTTPServletResponse的输出流.

客户端使用HttpURLConnection连接和读取数据.

有时一切都很好,有时候客户端和服务器都会抛出异常.
客户说有一个"早产EOF".
服务器声称"ClientAbortException".

不仅仅是上述可能之一吗?

客户:

java.io.IOException: Premature EOF
       at sun.net.www.http.ChunkedInputStream.fastRead(ChunkedInputStream.java:234)
       at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:662)
       at java.io.FilterInputStream.read(FilterInputStream.java:116)
       at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2669)
       at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2664)java.io.IOException: Premature EOF
       at sun.net.www.http.ChunkedInputStream.fastRead(ChunkedInputStream.java:234)
       at sun.net.www.http.ChunkedInputStream.read(ChunkedInputStream.java:662)
       at java.io.FilterInputStream.read(FilterInputStream.java:116)
       at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2669)
       at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2664)  
Run Code Online (Sandbox Code Playgroud)

服务器:

ClientAbortException:  java.io.IOException
    at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358)
    at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434)
    at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:349)
    at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:381)
    at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:370)
    at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
    ...
Caused by: java.io.IOException
        at org.apache.coyote.ajp.AjpAprProcessor.flush(AjpAprProcessor.java:1223)
        at org.apache.coyote.ajp.AjpAprProcessor$SocketOutputBuffer.doWrite(AjpAprProcessor.java:1310)
        at org.apache.coyote.Response.doWrite(Response.java:560)
        at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353)
        ... 23 more
Run Code Online (Sandbox Code Playgroud)

java tomcat exception http

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

如何使用新的断言函数扩展QUnit?

我想向QUnit添加新的断言.我做了一件事:

QUnit.extend(QUnit.assert, {
  increases: function(measure, block, message){
    var before = measure();
    block();
    var after = measure();
    var passes = before < after;
    QUnit.push(passes, after, "< " + before, message);
  }
});
Run Code Online (Sandbox Code Playgroud)

当我increases(foo,bar,baz)在我的测试中使用时,我得到了

ReferenceError:未定义增量

从浏览器控制台,我可以看到increases在发现QUnit.assert以及所有其他标准功能:ok,equal,deepEqual等.

从控制台,运行:
test("foo", function(){console.log(ok) });
我看到的来源ok.

跑步:
test("foo", function(){console.log(increases) });
我被告知增加没有定义.

在测试中使用增加所需的魔力是什么?此外,哪里(如果有的话)是文件?

谢谢

javascript unit-testing qunit

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

如何测试Sidekiq作业失败?

在例外情况下,sidekiq中的作业将被置于重试队列中.

因此,并且因为任务是异步运行的, MyWorker.perform_async(...)所以永远不会抛出在任务代码中生成的异常.

但是,在测试中,任务中发生的异常不会导致任务放入重试队列.异常泡沫了perform_async.

因此,在测试中发生的事情是运行代码时不可能发生的事情.

那么,什么是测试代码的最佳方法,这些代码会触发可能失败的作业并被置于重试队列中?

请注意,以下似乎对测试没有影响:
Sidekiq.default_worker_options = { :retry => true}

ruby integration-testing unit-testing sidekiq

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