小编Bar*_*lly的帖子

在 GraphViz 中将多个短节点与单个高节点并行排列

我想生成这样的东西 - 节点的对齐是重要的事情,而不是边缘的角度:

+--------------+
|              |
+--------------+
   |        |
   V        V
+-----+  +-----+  <--- alignment at top
|     |  |     |
|     |->|     |
|     |  |     |
+-----+  |     |
   |     |     |
   V     |     |
+-----+  |     |
|     |  |     |
|     |->|     |
|     |  |     |
+-----+  +-----+  <--- alignment at bottom
   |        |
   V        V
+--------------+
|              |
+--------------+
Run Code Online (Sandbox Code Playgroud)

我能想到的最好办法是将两个左节点粘贴到一个带有白色(=>不可见)边框的簇子图中,并将其中一条边的权重设置为0。但它仍然不太正确:

digraph G {

    // scale things down for example
    size="5,5" 
    rankdir=TD
    ranksep=1
    nodesep=1

    node …
Run Code Online (Sandbox Code Playgroud)

dot alignment graphviz

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

在Rails/Rack中禁用Content-Type标头

我正在编写一个返回HTTP 102(处理)的Rails控制器方法:

render nothing: true, status: :processing, content_type: nil
Run Code Online (Sandbox Code Playgroud)

但是,我得到了Rack::Lint::LintError(通过独角兽):

Content-Type header found in 102 response, not allowed
Run Code Online (Sandbox Code Playgroud)

我没有找到任何明显的方法来禁用此标头.Nilling它response.headers,从hash中删除它,nilling out response.content_type,在render选项中将它作为nil传递,似乎都没有效果.

我在/sf/answers/282272161/中读到,如果缺少Rails会增加标题,但是Rack.然而,它的Rack本身就是在抱怨!

如何禁用标题添加?

或者我最好禁用机架linting?

或者还有其他我想念的东西?

PS:我在Rack源上查看了我正在使用的版本(1.4.5):没有为没有实体主体的状态代码添加Content-Type标头,根据rack-1.4.5/lib/rack/utils.rb包含所有1xx状态代码.所以我不认为它是Rack实际上添加了标题.

PPS:经过几个小时的调试,罪魁祸首是to_a对响应的调用,调用assign_default_content_type_and_charset!actionpack-3.2.11/lib/action_dispatch/http/response.rb:

def assign_default_content_type_and_charset!
  return if headers[CONTENT_TYPE].present?

  @content_type ||= Mime::HTML
  @charset      ||= self.class.default_charset

  type = @content_type.to_s.dup
  type << "; charset=#{@charset}" unless @sending_file

  headers[CONTENT_TYPE] = type
end
Run Code Online (Sandbox Code Playgroud)

如果没有一些侵入性的黑客行为,例如添加专用中间件或monkeypatching actionpack,我似乎没有太多可以做到这一点ActionDispatch::Response.

rack content-type ruby-on-rails http-headers

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

如何跨多个 pom Maven 项目固定传递依赖版本

我正在开发一个大型 Java 代码库,该代码库分为多个模块,每个模块都有一个单独的 pom.xml,所有模块都以顶级 pom.xml 为父级。

我目前正在引入几个库依赖项。依赖项的传递集很大,幸运的是,不同模块的依赖项版本存在冲突。

这是我的情况的简化:

project/pom.xml
       /module-a/pom.xml # references library-a, depends on library-c:v1
       /module-b/pom.xml # references library-b, depends on library-c:v2
       /module-c/pom.xml # references module-a and module-b
Run Code Online (Sandbox Code Playgroud)

现在单元测试将在存在 的情况下module-a进行练习,而将在存在 的情况下进行练习。library-alibrary-c:v1module-blibrary-blibrary-c:v2

问题在于,部署时module-amodule-b需要一起生活在同一个类路径上,但无论打包时选择module-c哪个版本,至少有一个库组合尚未经过单元测试!library-cmodule-c

我想library-c以某种方式将 的版本固定在父 pom 级别,而不是在每个传递依赖的模块中重复自己library-c;理想情况下,它会以这样的方式添加,表明它是一个传递依赖项,允许消失library-a并且library-b不再依赖它。

我想要保证,从这个父 pom 开始的整个项目中的每个传递依赖项都选择了一个版本,如果不是这样,我希望构建会崩溃。我编写了一个工具来解析输出mvn dependency:tree(将树的叶子变成从叶子到根的路径森林,然后找到具有依赖路径的叶子的所有不同版本),以便我可以看到问题,但没有明确解决每个冲突的传递依赖以及冗余声明导致 pom 膨胀,这似乎没有成果。如果我别无选择,我自然会这么做。

处理 Maven 的传递依赖冲突问题的最佳方法是什么?

这个问题有多严重?除了获得令人难以置信的测试覆盖率外,在实践中,我还看到NoSuchMethodError由于部署了错误的版本而导致运行时 JVM 被终止。我希望至少在测试时看到这些。

java dependency-management maven

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

如何将C bitflag枚举转换为C++?

C++主要是C的超集,但并非总是如此.特别是,虽然C和C++中的枚举值都隐式转换为int,但反之则不然:只有在C中,int会转换回枚举值.因此,通过枚举声明定义的bitflags无法正常工作.因此,这在C中是可以的,但在C++中则不行:

typedef enum Foo
{
    Foo_First = 1<<0,
    Foo_Second = 1<<1,
} Foo;

int main(void)
{
    Foo x = Foo_First | Foo_Second; // error in C++
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如何有效和正确地处理这个问题,理想情况下不会损害使用Foo作为变量类型的调试器友好性质(它会分解为手表中的组件位标志等)?

还要考虑可能有数百个这样的标志枚举,以及数千个使用点.理想情况下,某种有效的运算符重载可以解决问题,但它确实应该是高效的; 我想到的应用程序是受计算限制的,并且具有快速的声誉.

澄清:我正在将一个大型(> 300K)C程序翻译成C++,所以我在运行时和开发人员时间都在寻找有效的翻译.只需在所有适当位置插入演员阵容可能需要数周时间.

c c++ enums flags

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

如何从bash脚本中终止Cygwin bash中脚本的进程树

我有一个Cygwin bash脚本,我需要在某些条件下观察和终止 - 特别是在创建某个文件后.但是,我很难确定如何以与Ctrl + C完全相同的完整性来终止脚本.

这是一个简单的脚本(称为test1),只需要等待即可终止.

#!/bin/bash

test -f kill_me && rm kill_me

touch kill_me
tail -f kill_me
Run Code Online (Sandbox Code Playgroud)

如果此脚本在前台运行,则Ctrl + C将终止tail脚本本身.如果脚本在后台运行,则a kill %1(假设它是作业1)也将终止tail脚本和脚本.

但是,当我尝试从脚本执行相同的操作时,我发现只有bash运行脚本的进程被终止,而tail挂起则与其父进程断开连接.这是我试过的一种方式(test2):

#!/bin/bash

test -f kill_me && rm kill_me

(
    touch kill_me
    tail -f kill_me
) &

while true; do
    sleep 1
    test -f kill_me && {
        kill %1
        exit
    }
done
Run Code Online (Sandbox Code Playgroud)

如果运行此命令,则后台运行的bash子shell会终止,但tail仍然会挂起.

如果我使用明确单独的脚本,像这样,它仍然无法工作(test3):

#!/bin/bash

test -f kill_me && rm …
Run Code Online (Sandbox Code Playgroud)

bash scripting cygwin process terminate

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

安装 Windows 服务时,如何以编程方式使其使用特定的域帐户

我有一个运行良好的 Windows 服务,但我必须让它在特殊用户帐户下运行。

目前,我进入服务并更改登录方式部分,但对于部署来说,这必须更专业地完成。

有没有办法让我以编程方式或在服务安装过程中以自定义用户帐户身份登录?

installation service windows-services

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

提高PostgreSQL集的差异效率

我正在尝试在PostgreSQL 9.3中进行一些设置操作.

我有两个表,为了简单起见,我们姑且称之为table_atable_b:

create table table_a(id varchar primary key);
create table table_b(id varchar primary key);
Run Code Online (Sandbox Code Playgroud)

我有一个简单的查询(最简单的公式,虽然它是实践中插入的来源):

(select id from table_a) except (select id from table_b);
Run Code Online (Sandbox Code Playgroud)

在我开始使用PostgreSQL之前,我会做一个这样的操作:

set-diff table_a.csv table_b.csv > table_c.csv
Run Code Online (Sandbox Code Playgroud)

set-diff的外观大致如下:

while (not eof(a)) and (not eof(b)):
  line_a <- peek_line(a)
  line_b <- peek_line(b)
  if line_a < line_b:
    output read_line(a)
  else if line_a == line_b:
    read_line(a)
  else:
    read_line(b)
while not eof(a):
  output read_line(a)
Run Code Online (Sandbox Code Playgroud)

这不需要很长时间,具有无关紧要的内存要求,并最大限度地有效使用顺序磁盘I/O. 这很重要,因为这台机器没有大量内存 - 它无法容纳RAM中的所有数据.

但是,PostgreSQL提出了这种计划(来自一些实际的表):

                                    QUERY PLAN
----------------------------------------------------------------------------------
 SetOp Except  (cost=3184554.28..3238904.44 rows=9434298 width=51) …
Run Code Online (Sandbox Code Playgroud)

sql database postgresql performance

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

散列函数和表格大小为2 ^ p

在从密钥的哈希码计算哈希表桶索引的同时,为什么当桶的数组大小为2的幂时,我们在分割(模数)后避免使用余数?

hash data-structures

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