小编fex*_*fex的帖子

将事件归结为时间间隔

场景:我有一个记录此CSV示例中的事件的服务:

#TimeStamp, Name, ColorOfPullover
TimeStamp01, Peter, Green
TimeStamp02, Bob, Blue
TimeStamp03, Peter, Green
TimeStamp04, Peter, Red
TimeStamp05, Peter, Green
Run Code Online (Sandbox Code Playgroud)

例如彼得穿绿色的事件将经常连续发生.

我有两个目标:

  1. 保持数据尽可能小
  2. 保留所有相关数据

相关办法:我想知道,在这种时间跨度一个人穿什么颜色.例如:

#StartTime, EndTime, Name, ColorOfPullover
TimeStamp01, TimeStamp03, Peter, Green
TimeStamp02, TimeStamp02, Bob, Blue
TimeStamp03, TimeStamp03, Peter, Green
TimeStamp04, TimeStamp04, Peter, Red
TimeStamp05, TimeStamp05, Peter, Green
Run Code Online (Sandbox Code Playgroud)

在这种格式中,我可以回答以下问题:Peter在TimeStamp02时穿的是哪种颜色?(我可以放心地假设每个人在相同颜色的两个记录事件之间穿着相同的颜色.)

主要问题:我可以使用现有技术来实现这一目标吗?即我可以提供连续的事件流,并提取和存储相关数据?


确切地说,我需要实现这样的算法(伪代码).OnNewEvent为CSV示例的每一行调用该方法.其中参数event已包含来自行的数据作为成员变量.

def OnNewEvent(even)
    entry = Database.getLatestEntryFor(event.personName)
    if (entry.pulloverColor == event.pulloverColor)
        entry.setIntervalEndDate(event.date)
        Database.store(entry)
    else
        newEntry = …
Run Code Online (Sandbox Code Playgroud)

events logging mapreduce reducing

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

GMock:如何返回由 EXPECT_CALL() 定义的函数指针

我正在使用一个将函数指针作为void*. 我想要一个模拟返回一个函数指针,并且我想要就地定义该函数(如 lambda;它不起作用,如下所示)。

下面显示了一个最小的工作示例。

#include <gtest/gtest.h>
#include <gmock/gmock.h>

using namespace std;
using namespace testing;

class Original
{
public:
    typedef int(*fptr)();

    void Func() 
    {
        void* f = Func2();
        fptr func = reinterpret_cast<fptr>(f);
        if (func) {
            int i = func();
            if (i == 1) {
                //do something
            } else if (i == 3) {
                //NOTE my unit test should test this decision branch
            }
        }
    }

    static int Func3() {return 1;}

    virtual void* Func2() {return (void*)&Func3;}
};

class MyMock : …
Run Code Online (Sandbox Code Playgroud)

c++ lambda googletest googlemock

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

创建加密安全的密码。并验证它是否有效

我正在开发一个也能生成密码的软件。它基本上是这样的:

static char AllowedChars[] = {...}
static int passwordLength = 123;

std::string password;

std::random_device rd;
std::mt19937 mt(rd());
std::uniform_int_distribution<int> dist(0, sizeof(AllowedChars) - 1);
for (int i = 0; i < passwordLength; ++i) {
    int index = dist(mt);
    password.push_back(AllowedChars[index]);
}
Run Code Online (Sandbox Code Playgroud)

我怎么知道这个算法创建了加密安全的密码?

我知道这random_device取决于编译器、目标平台、它自己的版本等。我也不能依赖于方法的输出 std::random_device::entropy,因为它可能只是一个固定值。请参阅:http : //www.pcg-random.org/posts/cpps-random_device.html

我也不能对其输出进行黑盒测试:https : //security.stackexchange.com/questions/83254/how-to-check-randomness-of-random-number-generators

我如何知道使用了哪个“随机性来源”(即哪个 RNG)?如果种子有足够的熵?(显然,这必须在编译后的二进制文件上完成,因为静态源代码无法显示这些细节。)通过此输出,我可以验证是否使用了 CSPRNG。

c++ security random passwords cryptography

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