小编Lee*_*ins的帖子

有没有办法使用Cereal/C++为std :: map指定更简单的JSON(de-)序列化?

我正在开发的项目是一个管理大量自定义硬件设备的C++应用程序.该应用程序具有客户端的套接字/端口接口(如GUI).每种设备类型都有自己定义良好的JSON模式,我们可以使用Cereal对这些模式进行序列化.

但该应用程序还需要解析来自客户端的入站JSON请求.请求的一部分指定设备过滤器参数,大致类似于SQL'WHERE'子句,其中所有表达式都是AND.例如:

"filter": { "type": "sensor", "status": "critical" }
Run Code Online (Sandbox Code Playgroud)

这将指示客户端想要在具有"关键"状态的每个"传感器"设备上执行操作.从表面上看,似乎过滤器参数的C++实现将是std :: map.但是当我们尝试使用Cereal反序列化它失败的对象时.当我们序列化硬编码的过滤器映射时,它看起来像这样:

"filter": [
   { "key": "type", "value": "sensor" },
   { "key": "status", "value": "critical" }
]
Run Code Online (Sandbox Code Playgroud)

现在我可以理解为什么Cereal支持这种详细的地图序列化.毕竟,地图的关键字可以是非字符串类型.但在这种情况下,键一个字符串.

我并不十分热衷于重写我们的界面规范,并让我们的客户生成明显非惯用的JSON,以满足Cereal.我是谷歌的新手,我们坚持这一点.有没有办法告诉Cereal将此过滤器解析为std :: map?或者我可能是错误的方式.是否还有其他一些我们应该反序列化的stl容器?

c++ serialization json stl cereal

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

如何从PyTorch的ResNet模型中删除最后一个FC层?

我正在使用PyTorch的ResNet152模型。我想从模型中删除最后一个FC层。这是我的代码:

from torchvision import datasets, transforms, models
model = models.resnet152(pretrained=True)
print(model)
Run Code Online (Sandbox Code Playgroud)

当我打印模型时,最后几行如下所示:

    (2):  Bottleneck(
      (conv1):  Conv2d(2048,  512,  kernel_size=(1,  1),  stride=(1,  1),  bias=False)
      (bn1):  BatchNorm2d(512,  eps=1e-05,  momentum=0.1,  affine=True,  track_running_stats=True)
      (conv2):  Conv2d(512,  512,  kernel_size=(3,  3),  stride=(1,  1),  padding=(1,  1),  bias=False)
      (bn2):  BatchNorm2d(512,  eps=1e-05,  momentum=0.1,  affine=True,  track_running_stats=True)
      (conv3):  Conv2d(512,  2048,  kernel_size=(1,  1),  stride=(1,  1),  bias=False)
      (bn3):  BatchNorm2d(2048,  eps=1e-05,  momentum=0.1,  affine=True,  track_running_stats=True)
      (relu):  ReLU(inplace)
    )
  )
  (avgpool):  AvgPool2d(kernel_size=7,  stride=1,  padding=0)
  (fc):  Linear(in_features=2048,  out_features=1000,  bias=True)
)
Run Code Online (Sandbox Code Playgroud)

我想从模型中删除最后一个fc层。

我在SO上找到了一个答案(如何在Pytorch中将预训练的FC层转换为CONV层),其中mexmex似乎提供了我正在寻找的答案:

list(model.modules()) # to …
Run Code Online (Sandbox Code Playgroud)

python resnet pytorch

8
推荐指数
3
解决办法
7375
查看次数

jQuery的烧烤生成错误与jQuery 2

jQuery的烧烤noob问题:我已经下载的jQuery 1.2.1烧烤,我试图用jQuery 2.1.0使用它.烧烤工作的意义在于它做了我想做的事情,但我注意到控制台中有一条错误信息.我跟踪它到什么似乎是一个兼容性问题.下面是产生错误的样本HTML页面:

<!DOCTYPE HTML>
<html>
    <head>
        <title>example</title>
    </head>
    <body>
        example
    </body>
    <script src="../js/lib/jquery-2.1.0.min.js"></script>
    <script src="../js/lib/jquery.ba-bbq.min.js"></script>
</html>
Run Code Online (Sandbox Code Playgroud)

在Firefox中,控制台错误是TypeError: f is undefined.在Chrome中的错误是不同的:Uncaught TypeError: Cannot read property 'msie' of undefined.

我注意到jQuery的烧烤是很老.是否有更新的jQuery BBQ版本?或者是否有更新的替换库?

UPDATE

我使用jQuery烧烤,因为谷歌搜索把我送到这个先前回答一个问题:解析URL哈希/片段标识符用JavaScript.我试图解决真正的问题是一样的链接的问题:应对在URI的哈希部分变化,并分析该片段.

事实证明,我的目的(到目前为止),我可以消除jQuery的烧烤,写一对夫妇的代码获取哈希串线(和删除井号):

    $(window).bind('hashchange', function() {
        var hashString = window.location.hash || '';
        hashString = hashString.replace("#",'');
        myEventHandler(hashString);
    });
Run Code Online (Sandbox Code Playgroud)

这样就可以了.这很简单,它少了一个模块的依赖性,所以双赢.我想这就是为什么对jQuery-BBQ问题没有回应,是吗?

html javascript jquery jquery-bbq

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

如何在 BitBucket 中强制执行(拉取请求)合并提交消息的格式

我们的团队正在迁移到 BitBucket。我们的工作流程需要对合并到主源存储库的代码的提交消息进行某些格式化。

每个开发人员都有一个(或多个)分叉。我们的工作流程是将功能/错误分支推送到分支并从该分支创建拉取请求。另外两个开发人员必须在合并之前审查并+1 拉取请求。

当有人单击合并时,BitBucket 会显示一个标题为“合并拉取请求”的对话框。此时,开发人员可以在单击第二个合并按钮之前编辑为合并记录的文本消息。这是需要符合特定格式的消息。

我已阅读此处的文档:https : //scriptrunner.adaptavist.com/latest/bitbucket/StashMergeChecks.html它有几个非常具体的示例,但没有与我们的用例相关的内容。我还没有找到关于如何创建合并检查的良好的通用参考。

我可以编写一个检查特定字符串值的条件:

mergeRequest.message == "My Message"
Run Code Online (Sandbox Code Playgroud)

但我需要它来检查正则表达式。如果消息不符合正则表达式,如何编写预合并挂钩来拒绝合并?

添加

从文档来看,条件检查脚本代码似乎是强制执行此条件的正确位置。脚本可以添加到Repository Settings > SCRIPTRUNNER > Script Merge Checks > Conditional merge check. 有一长串用于条件合并检查的示例,包括以下内容:

  • 特定组中的当前用户
  • 更改的文件包含 .XYZ 文件
  • 更改敏感目录中的文件
  • 目标分支是发布

经过一些搜索和实验,我发现我可以根据提交消息阻止合并。但到目前为止,我只找到了将整个字符串与常量字符串表达式进行比较的示例。我还没有找到如何在这个比较中使用正则表达式。

bitbucket

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

如何关闭 VS Code 中的快速修复弹出窗口

我在 Windows 中运行 VS Code 1.52.1,编辑 JavaScript 代码。我是一个双击、复制和粘贴的瘾君子。我将鼠标悬停在某个东西上,例如函数名称,意图双击将其复制到剪贴板。但有时 VS Code 想要建议一个“快速修复”。这对我来说没问题,除了快速修复显示在覆盖我试图复制的代码的弹出窗口中。根据我的工作速度,在将剪贴板的“旧”内容粘贴到目标位置之前,我可能不会注意到。

以下面的函数为例。

// function to allow a promise-oriented caller to invoke
// a callback-oriented function
function callbackToPromise( resolve, reject ) {
    return function done( err, data ) {
        if(err) {
            reject(err);
        }
        else {
            resolve(data);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我将鼠标悬停在函数名称上,Quick Fix 出现,覆盖鼠标悬停的代码行。修复本身已被编辑以避免无关紧要的讨论。

在此处输入图片说明

这种行为既不方便又令人讨厌,因为它将我的注意力从代码转移到行为不端的工具上。这就像每天踢我的脚趾十几次一样。

如何配置 VS Code 不自动显示快速修复弹出窗口?如果 VS Code 只是简单地在函数名称下划线并让我按下热键来查看弹出窗口,我会更喜欢。

visual-studio-code vscode-settings

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