小编pas*_*cal的帖子

获取仅有标头库的有用GCov结果

对于我的仅标题C++库(许多模板等),我使用GCov来检查测试覆盖率.但是,它会报告所有标头的100%覆盖率,因为编译器首先不会生成未使用的函数.手动发现未覆盖的功能很容易,但却无法实现持续集成的目的......

如何自动解决这个问题?我应该使用"line hit/LOC"作为我的覆盖率指标,而且再也不会达到100%吗?

c++ gcc gcov

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

Monad m => a - > [a - > ma] - > ma

我是Haskell的新手,我想知道是否有更好的方法来确定是否有一个复制库功能而不是Hoogle?

一个很好的例子:我有许多f :: Monad a => a -> m a我希望链接在一起的函数,比如

f1234 x = (return x) >>= f1 >>= f2 >>= f3 >>= f4
Run Code Online (Sandbox Code Playgroud)

但我宁愿写信

chain :: Monad m => a -> [a -> m a] -> m a
chain = foldl (>>=) <$> return
f1234 = (flip chain) [f1, f2, f3, f4]
Run Code Online (Sandbox Code Playgroud)

看起来非常基本,基础库是否提供了相当于的东西chain

haskell

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

联合查找图形结构

我有一条描述图形的记录作为节点和边的集合:

data MyGraph a = MyGraph {
  nodes :: Set a,
  edges :: Set (a,a),
  components :: UnionFindM a -- ?
}
emptyGraph = MyGraph{
  nodes = empty, edges = empty,
  components = emptyUnionFind singleton union --?
}
addEdge g (a,b) = g{
  edges = (a,b) `insert` (edges g),
  components = (components g) >>= (equate a b) -- ?
}
Run Code Online (Sandbox Code Playgroud)

由于我不会删除边缘,我想使用union-find结构跟踪连接的组件(我可以在添加边缘时轻松更新),因为我想映射连接的组件,因此它将是有用的将它们保存为一组.当然,我想获得一个节点的组件.

我发现了我选择的等价库,因为我无法看到如何使用union-find创建集合,而持久性等价需要知道值范围.

现在我可以创建关系,并使用以下命令返回集合:

import Control.Monad(liftM)
import Data.Equivalence.Monad
import Data.Set(singleton, union, fromList)
f = runEquivM …
Run Code Online (Sandbox Code Playgroud)

haskell union-find

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

GTK:无限懒惰的小部件列表

我需要显示一个几乎无限的滚动式交互式小部件列表,并在添加新数据或用户滚动到未缓存区域时根据需要添加/删除它们.

TreeView(如此处所述)是没有选项的,因为我需要完整的Widgets作为项目(由具有多个动作等的标准小部件组成,但CellRenderer不适用于此)

更糟糕的是,我不提前知道我的小部件的高度(虽然没有太大的差异),因此使用VBox可能会导致跳跃.

使用滚动条仍应感觉好像名单是有限的(即只更新后滚动完成,因此scrollbutton不跳从你的鼠标移开),并调整窗口的大小和窗口的布局时被更新,滚动位置不应该改变太多(焦点小部件应该保持原样,除非焦点小部件被滚动掉......).

最好的方法是什么?甚至可能只是在需要添加新窗口小部件时向我发送信号的库?

或者可以强迫ListView以一种不太讨厌的方式做到这一点?(即在屏幕外缓冲区上绘图,使用CellRenderer将其复制到单元格中,将鼠标/键盘事件转发到实际的窗口小部件?)

c gtk vala

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

动态链接:如何忽略版本标签?

我想编译一个使用clAmdFFT,AMD的OpenCL FFT的OpenCL程序,它是闭源的.

$ objdump -x libclAmdFft.Runtime.so
Dynamic Section:
  NEEDED               libOpenCL.so.1
Version References:
  required from libOpenCL.so.1:
    0x028568b0 0x00 05 OPENCL_1.0
Run Code Online (Sandbox Code Playgroud)

在一台机器上,我正在使用AMD驱动程序,它附带一个包含版本信息的libOpenCL.so,如下所示:

a$ objdump -T /opt/AMDAPP/lib/x86_64/libOpenCL.so
0000000000002610 g    DF .text  0000000000000018  OPENCL_1.0  clGetSamplerInfo
00000000000032e0 g    DF .text  0000000000000018  OPENCL_1.1  clSetEventCallback
0000000000002350 g    DF .text  0000000000000018  OPENCL_1.2  clCreateSubDevices
Run Code Online (Sandbox Code Playgroud)

这台机器上的一切都很好.

在另一台机器上,我使用的是nVidia驱动程序,它带有一个不包含版本信息的libOpenCL.so,如下所示:

b$ objdump -T /usr/lib/libOpenCL.so # -> /usr/lib/nvidia-current/libOpenCL.so
00000000000021f0 g    DF .text  0000000000000018  Base        clGetSamplerInfo
0000000000002a40 g    DF .text  0000000000000018  Base        clSetEventCallback
Run Code Online (Sandbox Code Playgroud)

-llibOpenCL.so -llibclAmdFft.Runtime.so由于clAmdFft想要链接到带标记的符号,因此在此处链接程序失败:

libclAmdFftRuntime.so: undefinded reference to `clCreateBuffer@OPENCL_1.0`
Run Code Online (Sandbox Code Playgroud)

动态链接器也会生成此抱怨:

b$ ldd libclAmdFft.Runtime.so …
Run Code Online (Sandbox Code Playgroud)

linker ld

7
推荐指数
0
解决办法
946
查看次数

通过SOCKS代理使用Hadoop?

因此,我们的Hadoop集群在某些节点上运行,只能从这些节点访问.你通过SSH连接它们并完成你的工作.

因为这很烦人,但是(可以理解)没有人会试图配置访问控制,以便它可以从外部使用,我正在尝试下一个最好的事情,即使用SSH运行SOCKS代理到簇:

$ ssh -D localhost:10000 the.gateway cat
Run Code Online (Sandbox Code Playgroud)

有SOCKS支持的耳语(自然我没有找到任何文档),显然这进入core-site.xml:

<property>
  <name>fs.default.name</name>
  <value>hdfs://reachable.from.behind.proxy:1234/</value></property>
<property>
  <name>mapred.job.tracker</name>
  <value>reachable.from.behind.proxy:5678</value></property>
<property>
  <name>hadoop.rpc.socket.factory.class.default</name>
  <value>org.apache.hadoop.net.SocksSocketFactory</value></property>
<property>
  <name>hadoop.socks.server</name>
  <value>localhost:10000</value></property>
Run Code Online (Sandbox Code Playgroud)

除了hadoop fs -ls /仍然失败,没有提到SOCKS.

有小费吗?


我只是尝试运行作业,而不是管理集群.我只需要通过SOCKS访问HDFS并提交作业(似乎在集群节点之间使用SSL /代理等完全独立;我不希望这样,我的机器不应该是集群的一部分,只是一个客户.)

那有什么有用的文件吗?为了说明我没有找到任何有用的东西:我通过运行hadoop客户端strace -f并检查它读取的配置文件来找到配置值.

是否有任何描述甚至会对哪些配置值作出反应?(我确实找到了零参考文档,只是不同的过时教程,我希望我一直在遗漏什么?)

有没有办法转储它实际使用的配置值?

proxy hadoop

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

将两个溢出的整数乘以模三分之一

鉴于三个整数,a,bca,b <= c < INT_MAX我需要计算(a * b) % c,但a * b可以溢出,如果值太大,这给错误的结果.

有没有办法通过bithacks直接计算它,即不使用不会溢出的值的类型?

c bit-manipulation

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

在递归查询中检测循环

我的 PostgreSQL 数据库中有一个有向图,节点和循环之间可以有多个路径:

create table "edges" ("from" int, "to" int);
insert into "edges" values (0, 1), (1, 2), (2, 3), (3, 4), (1, 3);
insert into "edges" values (10, 11), (11, 12), (12, 11);
Run Code Online (Sandbox Code Playgroud)

我想找到一个节点和连接到它的每个节点之间的最小边数:

with recursive "nodes" ("node", "depth") as (
  select 0, 0
union
  select "to", "depth" + 1
  from "edges", "nodes"
  where "from" = "node"
) select * from "nodes";
Run Code Online (Sandbox Code Playgroud)

返回所有路径的深度:

 node  0 1 2 3 3 4 4 
 depth 0 1 2 2 3 3 4 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql common-table-expression

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

GTKmm 3:使用 Gtk::Application 解析命令行

我正在尝试使用 GTK 的 argv 处理,但主循环似乎存在一些问题。

我的目标是在 GTK 删除其选项(如--display)之后解析命令行,但在打开窗口之前,因为我希望我的应用程序也可用于仅 CLI 的界面,并且两种变体都使用 Glib 等。这这就是我试图在command_line信号处理程序中打开窗口的原因。

这按预期工作,在窗口关闭时退出。

#include <gtkmm.h>
int main(int argc, char **argv) {
    auto app = Gtk::Application::create(argc, argv, "my.app");
    Gtk::ApplicationWindow win;
    return app->run(win);
}
Run Code Online (Sandbox Code Playgroud)

但简单地添加HANDLES_COMMAND_LINE标志会破坏:窗口永远不会显示。

#include <gtkmm.h>
int on_cmd(const Glib::RefPtr<Gio::ApplicationCommandLine> &) {
    return 0;
}
int main(int argc, char **argv) {
    auto app = Gtk::Application::create(argc, argv, "my.app",
                 Gio::APPLICATION_HANDLES_COMMAND_LINE);
    app->signal_command_line().connect(sigc::ptr_fun(on_cmd), false);
    Gtk::ApplicationWindow win;
    return app->run(win);
}
Run Code Online (Sandbox Code Playgroud)

所以我认为command_line处理程序实际上不应该返回?但是文档说run启动主循环。我还没有找到一种简单地等待主循环完成的方法,所以我手动启动它。窗口再次显示,但当然循环会在关闭后继续,这是该代码的最小问题:

#include <gtkmm.h>
int on_cmd(const Glib::RefPtr<Gio::ApplicationCommandLine> &, …
Run Code Online (Sandbox Code Playgroud)

c++ gtkmm

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

带插件的最小完整SBT项目

所以当我尝试创建一个具有任何配置的项目时,sbt(0.10)会产生最奇怪的错误,甚至不会复制wiki示例的工作......

是否有一个很好的最小,有效的sbt项目集合?(不是基本/快速的.sbt东西,而是完整的.scala文件project/)维基片段似乎已经过时或错误...

我在尝试整合梯状带SBT不能够编译失败import sbt._project/plugins/Plugins.scala?!(在树中没有任何其他自定义文件.根据我的理解,这应该是有效的...)

基本上,我需要一个项目scalariform-deprecated编译器选项(甚至没有在快速模式下工作......)

scala sbt

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