小编Bru*_*man的帖子

如何在Erlang中连接两个二进制文件?

如何在Erlang中连接两个二进制文件?

例如,假设我有:

B1 = <<1,2>>.
B2 = <<3,4>>.
Run Code Online (Sandbox Code Playgroud)

如何连接B1和B2以创建二进制B3,即<< 1,2,3,4 >>?

我问这个的原因是因为我正在编写代码来编码某个网络协议的数据包.我通过为数据包中的字段编写编码器来实现这一点,我需要连接这些字段以构建整个数据包.

也许我这样做是错误的.我应该将数据包构建为整数列表,并在最后一刻将列表转换为二进制文件吗?

erlang binaries

51
推荐指数
5
解决办法
3万
查看次数

Read-the-docs 构建失败,“无法从‘pip._internal.index’导入名称‘PackageFinder’”

在 read-the-docs 上构建 Sphinx 文档失败,并显示以下错误(完整日志如下):

ImportError: cannot import name 'PackageFinder' from 'pip._internal.index' (/home/docs/checkouts/readthedocs.org/user_builds/cascade-python/envs/latest/lib/python3.7/site-packages/pip/_internal/index/__init__.py)
Run Code Online (Sandbox Code Playgroud)

我做错了什么还是这是阅读文档中的错误?

Sphinx 文档的本地构建运行良好。

在 read-the-docs 上完成错误日志:

Read the Docs build information
Build id: 10299638
Project: cascade-python
Version: latest
Commit: a7d50bf781bd8076b10dd7024db4ccb628016c27
Date: 2020-01-21T17:03:12.876711Z
State: finished
Success: False


[rtd-command-info] start-time: 2020-01-21T17:03:13.203354Z, end-time: 2020-01-21T17:03:13.215400Z, duration: 0, exit-code: 0
git remote set-url origin https://github.com/brunorijsman/cascade-python.git


[rtd-command-info] start-time: 2020-01-21T17:03:13.276220Z, end-time: 2020-01-21T17:03:13.630658Z, duration: 0, exit-code: 0
git fetch origin --force --tags --prune --prune-tags --depth 50
From https://github.com/brunorijsman/cascade-python
   2a28505..a7d50bf  master     -> origin/master

[rtd-command-info] start-time: 2020-01-21T17:03:13.824496Z, …
Run Code Online (Sandbox Code Playgroud)

python python-sphinx read-the-docs

25
推荐指数
1
解决办法
5124
查看次数

在32位模式下编译gcc原子操作时链接错误

我有以下程序:

~/test> cat test.cc
int main()
{
  int i = 3;
  int j = __sync_add_and_fetch(&i, 1);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在使用运行在多CPU 64位Intel机器上的Linux上的GCC 4.2.2编译该程序:

~/test> uname --all
Linux doom 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:56:44 EST 2007 x86_64 x86_64 x86_64 GNU/Linux
Run Code Online (Sandbox Code Playgroud)

当我以64位模式编译程序时,它编译并链接正常:

~/test> /share/tools/gcc-4.2.2/bin/g++ test.cc
~/test>
Run Code Online (Sandbox Code Playgroud)

当我在32位模式下编译它时,我收到以下错误:

~/test> /share/tools/gcc-4.2.2/bin/g++ -m32 test.cc
/tmp/ccEVHGkB.o(.text+0x27): In function `main':
: undefined reference to `__sync_add_and_fetch_4'
collect2: ld returned 1 exit status
~/test>
Run Code Online (Sandbox Code Playgroud)

虽然我永远不会在32位处理器上运行,但我确实需要一个32位可执行文件,所以我可以链接一些32位库.

我的两个问题是:

  1. 在32位模式下编译时,为什么会出现链接错误?

  2. 有没有办法让程序编译和链接,同时仍然能够与32位库链接?

linker gcc atomic

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

Linux:检索每个接口发送/接收的数据包计数器(ethernet,ipv4,ipv6)

在Linux上,我如何(以编程方式)基于每个接口检索以下计数器:

  • 发送/接收以太网帧,
  • 发送/接收的IPv4数据包,
  • 发送/接收的IPv6数据包.

linux ip networking

12
推荐指数
3
解决办法
4万
查看次数

从多个线程在同一TCP套接字上发出阻塞write()调用是否安全?

假设我有两个线程,T1和T2.

线程T1在TCP套接字S上进行阻塞write()调用,以发送大量字节B1的缓冲区.字节B1的缓冲区很大,以至于(a)写调用块和(b)TCP必须使用多个段来发送缓冲区.

线程T2还在同一个TCP套接字S上进行阻塞write()调用,以发送一些其他大的字节B2缓冲区.

我的问题是:

在UNIX上实现TCP是否保证B1的所有字节都将在B2的所有字节之前发送(反之亦然)?

或者TCP是否可能交错B1和B2的内容(例如,TCP发送带有B1数据的段,然后是带有B2数据的段,然后是带有B1数据的段).

PS - 我知道这样做并不是一个好主意.我正在尝试确定一些我没写的代码是否正确.

sockets linux multithreading tcp

11
推荐指数
1
解决办法
4372
查看次数

如何使用正则表达式进行Erlang模式匹配?

当我编写用于文本解析的Erlang程序时,我经常遇到我希望使用正则表达式进行模式匹配的情况.

例如,我希望我可以做这样的事情,其中​​〜是一个"组合"的正则表达式匹配运算符:

my_function(String ~ ["^[A-Za-z]+[A-Za-z0-9]*$"]) ->
    ....
Run Code Online (Sandbox Code Playgroud)

我知道正则表达式模块(重新)但AFAIK你不能在模式匹配时或在警卫中调用函数.

此外,我希望匹配字符串可以以不区分大小写的方式完成.这很方便,例如,在解析HTTP标头时,我很乐意做这样的事情,其中​​"Str~ {Pattern,Options}"的意思是"使用选项选项匹配模式模式":

handle_accept_language_header(Header ~ {"Accept-Language", [case_insensitive]}) ->
    ...
Run Code Online (Sandbox Code Playgroud)

两个问题:

  1. 你如何使用标准的Erlang来处理这个问题?是否有一些机制/编码风格在简洁和易于阅读方面接近于此?

  2. 在Erlang中是否有任何工作(EEP?)来解决这个问题?

regex string erlang text-parsing

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

io的意外行为:在Erlang中的fread

这是一个Erlang问题.

我通过io遇到了一些意想不到的行为:fread.

我想知道是否有人可以检查我使用io的方式是否有问题:fread或者io中是否有错误:fread.

我有一个文本文件,其中包含一个"数字三角形",如下所示:

59
73 41
52 40 09
26 53 06 34
10 51 87 86 81
61 95 66 57 25 68
90 81 80 38 92 67 73
30 28 51 76 81 18 75 44
...

每对数字之间有一个空格,每一行以一个回车换行符结束.

我使用以下Erlang程序将此文件读入列表.

-module(euler67).
-author('Cayle Spandon').

-export([solve/0]).

solve() ->
    {ok, File} = file:open("triangle.txt", [read]),
    Data = read_file(File),
    ok = file:close(File),
    Data.

read_file(File) ->
    read_file(File, []).

read_file(File, Data) ->
    case io:fread(File, "", "~d") of
        {ok, [N]} -> 
            read_file(File, [N | Data]); …

erlang

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

Pylint:"问题导入模块....:无法导入名称'类型'"

每次运行pylint(无论检查什么程序)都会产生以下错误消息:

(env) $ pylint hello.py 
Problem importing module logging.py: cannot import name 'Type'
Problem importing module spelling.py: cannot import name 'Type'
Problem importing module python3.py: cannot import name 'Type'
Problem importing module typecheck.py: cannot import name 'Type'
Problem importing module variables.py: cannot import name 'Type'
Problem importing module refactoring.py: cannot import name 'Type'
Problem importing module format.py: cannot import name 'Type'
Problem importing module imports.py: cannot import name 'Type'
Problem importing module utils.py: cannot import name 'Type'
Problem importing module …
Run Code Online (Sandbox Code Playgroud)

python macos pip virtualenv python-3.x

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

Plotly:无法与本地 orca 服务器进程通信,即使服务器进程似乎正在运行

当我将绘图渲染到文件时,如下所示:

import plotly.graph_objects as go

def produce_graph(graph, data_dir):
    figure = go.Figure()
    [...]
    figure.write_image("output_file.png")
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Traceback (most recent call last):
  File "/Users/brunorijsman/cascade-python/env/lib/python3.7/site-packages/plotly/io/_orca.py", line 1559, in to_image
    figure=fig_dict, format=format, scale=scale, width=width, height=height
  File "/Users/brunorijsman/cascade-python/env/lib/python3.7/site-packages/retrying.py", line 49, in wrapped_f
    return Retrying(*dargs, **dkw).call(f, *args, **kw)
  File "/Users/brunorijsman/cascade-python/env/lib/python3.7/site-packages/retrying.py", line 212, in call
    raise attempt.get()
  File "/Users/brunorijsman/cascade-python/env/lib/python3.7/site-packages/retrying.py", line 247, in get
    six.reraise(self.value[0], self.value[1], self.value[2])
  File "/Users/brunorijsman/cascade-python/env/lib/python3.7/site-packages/six.py", line 696, in reraise
    raise value
  File "/Users/brunorijsman/cascade-python/env/lib/python3.7/site-packages/retrying.py", line 200, in call
    attempt = Attempt(fn(*args, **kwargs), attempt_number, False)
  File "/Users/brunorijsman/cascade-python/env/lib/python3.7/site-packages/plotly/io/_orca.py", …
Run Code Online (Sandbox Code Playgroud)

python plotly

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

如何使用 pyo3 将 Rust 函数作为回调传递给 Python

我使用 Pyo3 从 Python 调用 Rust 函数,反之亦然。

我正在努力实现以下目标:

  • Python 调用rust_function_1

  • Rust 函数rust_function_1调用 Python 函数python_function,传递 Rust 函数rust_function_2作为回调参数

  • Python 函数python_function调用回调,在本例中是 Rust 函数rust_function_2

我无法弄清楚如何rust_function_2作为回调参数传递给python_function.

我有以下Python代码:

import rust_module

def python_function(callback):
    print("This is python_function")
    callback()

if __name__ == '__main__':
    rust_module.rust_function_1()
Run Code Online (Sandbox Code Playgroud)

我有以下非编译 Rust 代码:

use pyo3::prelude::*;

#[pyfunction]
fn rust_function_1() -> PyResult<()> {
    println!("This is rust_function_1");
    Python::with_gil(|py| {
        let python_module = PyModule::import(py, "python_module")?;
        python_module
            .getattr("python_function")?
            .call1((rust_function_2.into_py(py),))?;  // Compile error
        Ok(())
    })
}

#[pyfunction] …
Run Code Online (Sandbox Code Playgroud)

python callback rust pyo3

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

将指针转换为int64_t时,最重要的32位丢失

有人可以解释以下奇怪的行为吗?

我在64位Intel平台上运行以下程序:

include <stdio.h>
#include <stdint.h>

int main(void)
{
  int x;
  int *ptr = &x;

  printf("ptr = %p\n", ptr);
  printf("sizeof(ptr) = %d\n", sizeof(ptr));

  int64_t i1 = (int64_t) ptr;
  printf("i1 = 0x%x\n", i1);
  printf("sizeof(i1) = %d\n", sizeof(i1));

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

该程序产生以下输出:

ptr = 0x7fbfffdf2c
sizeof(ptr) = 8
i1 = 0xbfffdf2c
sizeof(i1) = 8
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释为什么i1只包含最低32位的ptr?(注意它缺少0x7f).

Compiler: gcc version 3.4.6 20060404 (Red Hat 3.4.6-9)
OS: Linux scream 2.6.9-67.ELsmp #1 SMP Wed Nov 7 13:56:44 EST 2007 x86_64 x86_64 x86_64 GNU/Linux
Processor: Intel(R) Xeon(R) …
Run Code Online (Sandbox Code Playgroud)

c gcc casting

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

如何为使用 Clang LLVM 编译的 C++ 代码生成图形代码分析报告?

如何为使用 Clang LLVM 编译的 C++ 代码生成图形代码分析报告?

  • 我将哪些命令行选项传递给 clang++ 以指示它在执行代码时收集分析数据?

  • 收集到的分析数据存储在哪个文件中?

  • 将收集到的配置文件数据转换为图形报告的后处理步骤是什么,该报告显示每个函数被调用的频率、每个函数花费的时间百分比以及每个函数是从哪些函数调用的(类似于https:// /s3-us-west-2.amazonaws.com/brunorijsman-public/example-rift-python-code-profile.png)?

我可以完全控制 C++ 源代码和 Makefile。

它必须是 LLVM clang++ (GNU g++ 对我来说不是一个选择)。Xcode 也不适合我。

c++ profiling llvm clang

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

C++如何产生完全由种子决定的随机序列,与编译器或操作系统无关

考虑以下 C++ 程序,它根据用户输入的种子值生成 10 个随机数序列:

#include <iostream>
#include <random>

int main()
{
    std::random_device rd;
    std::mt19937 mt(rd());
    std::uniform_int_distribution<int> dist(0, 10000);

    int seed;
    std::cout << "Enter seed: ";
    std::cin >> seed;
    mt.seed(seed);

    for (int i=0; i<10; ++i) {
        std::cout << dist(mt) << std::endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我在 MacBook 上运行这个程序并输入种子值 12345 时,它会产生以下随机数序列:

$ bin/demo
Enter seed: 12345
4578
2177
3492
4094
4478
546
7709
3441
7483
6798
Run Code Online (Sandbox Code Playgroud)

如果我再次运行程序并再次输入相同的种子值 12345,那么正如预期的那样,我会得到相同的随机数序列:

$ bin/demo
Enter seed: 12345
4578
2177
3492
4094
4478
546
7709
3441 …
Run Code Online (Sandbox Code Playgroud)

c++ random c++14

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