小编per*_*oud的帖子

如何抑制pip升级警告?

我的pip版本已关闭 - 每个pip命令都说:

You are using pip version 6.0.8, however version 8.1.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Run Code Online (Sandbox Code Playgroud)

而且我不喜欢这里给出的答案:我如何摆脱这个警告从pip升级?因为他们都希望pip与RH版本不同步.

所以我尝试使用这个VagrantFile进行干净的系统安装:

Vagrant.configure("2") do |config|

  config.ssh.username   = 'root'
  config.ssh.password   = 'vagrant'
  config.ssh.insert_key = 'true'

  config.vm.box = "bento/centos-7.3"

  config.vm.provider "virtualbox" do |vb|
    vb.cpus   = "4"
    vb.memory = "2048"
  end

  config.vm.synced_folder "..", "/vagrant"

  config.vm.network "public_network", bridge: "eth0", ip: "192.168.1.31"

  config.vm.provision "shell", inline: <<-SHELL
    set -x

    # Install pip
    yum install -y epel-release
    yum …
Run Code Online (Sandbox Code Playgroud)

python pip

16
推荐指数
4
解决办法
5030
查看次数

在C++中,指针算法的a + i和&a [i]有什么区别?

假设我们有:

char* a;
int   i;
Run Code Online (Sandbox Code Playgroud)

许多引入到C++(像这样一个)表明,右值a+i&a[i]可以互换.我天真地相信这几十年,直到我最近偶然发现了[dcl.ref]引用的以下文字(这里):

特别是,空引用不能存在于定义良好的程序中,因为创建这样的引用的唯一方法是将它绑定到通过解引用空指针获得的"对象",这会导致未定义的行为.

换句话说,将引用对象"绑定"到空取消引用会导致未定义的行为.基于上述文本上下文,可以推断仅仅评估 &a[i](在offsetof宏内)被认为是"约束"参考.此外,似乎存在共识,&a[i]导致在a=null和的情况下出现未定义的行为i=0.这种行为不同于a+i(至少在C++中,在a = null,i = 0的情况下).

这导致约之间的差异至少2个问题a+i&a[i]:

首先,是什么底层之间的语义差别a+i以及&a[i]导致这种行为差异.是否可以根据任何类型的一般原则来解释,而不仅仅是"绑定对空取消引用对象的引用会导致未定义的行为,因为这是一个每个人都知道的特定情况"?是否&a[i]可以生成内存访问a[i]?或者规范作者对那天的空引用不满意?或者是其他东西?

其次,除了情况a=nulli=0,是否有任何其他地方的情况a+i&a[i]不同的表现?(第一个问题可以涵盖,取决于答案.)

c++ pointer-arithmetic language-lawyer

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

如何在 Linux 中查询 Vsync 相位

我需要创建一个 C++ 函数,它将返回到下一个 Vsync 间隔的秒数作为浮点值。

为什么?

我正在创建显示跟随鼠标光标的矩形的程序。表面上,OpenGL 在 glXSwapBuffers 函数中提供了一个 vsync 机制,但我发现这是不可靠的。使用某些卡驱动程序,您可以获得 vsync;与其他人你不。在某些情况下,您会获得 vsync,但也会获得额外的 2 帧延迟。

但这不是 OpenGL 中的错误。规范故意含糊其辞:“后台缓冲区的内容然后变得未定义。更新通常发生在监视器的垂直回溯期间,而不是在调用 glXSwapBuffers 之后立即发生。” 关键词是“通常”......基本上glXSwapBuffers 不承诺蹲wrt vsync。去搞清楚。

在我目前解决这个基本问题的尝试中,我目前猜测初始垂直同步时间,然后假设相位等于经过时间 MOD 1/(59.85Hz),这似乎与我当前的显示器同步。但这并不奏效,因为我实际上并不了解初始阶段。所以我得到一滴眼泪。至少它不会四处走动。但我真正需要的是以某种方式测量当前的 vsync 相位。

不,我不想依赖一些 OpenGL 调用来为我做一个 vsync。由于规范中的含糊不清,这使得 OpenGL 实现可以随心所欲地增加延迟。

不,我不想依赖某些 SGI 扩展或其他一些必须安装才能使其工作的东西。这是图形 101。Vsync。只需要一种查询其状态的方法。一些内置的、总是安装的 API 必须有这个。

也许我可以创建一个以某种方式等待 Vsync 的辅助线程,并记录发生这种情况的时间?但请注意以下顺序:

#include <sys/ioctl.h>
#include <fcntl.h>
#include <linux/types.h>
#include <linux/ioctl.h>
#include <linux/fb.h>
#include <errno.h>
#include <string.h>
#include <stdio.h>

int main()
{
  int fb = open("/dev/fb0", O_RDWR);
  assert(fb != -1);
  int zero = 0;
  if (ioctl(fb, FBIO_WAITFORVSYNC, &zero) == …
Run Code Online (Sandbox Code Playgroud)

c++ linux vsync

8
推荐指数
1
解决办法
1921
查看次数

openssl s_client 没有密码匹配

尝试在中设置密码时出现以下错误openssl s_client

# openssl s_client -connect 10.0.0.3:8443 -cipher TLS_AES_128_GCM_SHA256
Error with command: "-cipher TLS_AES_128_GCM_SHA256"
140230972122240:error:1410D0B9:SSL routines:SSL_CTX_set_cipher_list:no cipher match:../ssl/ssl_lib.c:2549:
Run Code Online (Sandbox Code Playgroud)

当我在 Google 中查找此错误时,它表示该密码在 报告的列表中丢失openssl ciphers。然而,这种情况并非如此:

# openssl ciphers | sed 's/:/\n/g' | grep TLS_AES_128_GCM_SHA256
TLS_AES_128_GCM_SHA256
Run Code Online (Sandbox Code Playgroud)

此错误不是服务器配置的功能,因为即使我将-connectIP 地址更改为虚假地址,也会打印该错误。显然,问题s_client甚至在尝试连接到服务器之前就发生了。

鉴于该错误消息似乎与 无关,它意味着什么openssl ciphers

openssl

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

Python 2.7:流式HTTP服务器支持一个端口上的多个连接

我正在寻找一个标准的Python 2.7软件包,它提供了一个HTTP服务器,可以在同一个端口号上同时进行连接.

嘿你们那里的主持人,请停止将我的问题标记为想要以非流方式提供的问题的副本,例如: python中的多线程Web服务器.不,我不想要一个ThreadingMixIn只是收集响应并将其作为一个单元返回的黑客.

换句话说,我正在寻找标准方法来执行以下示例程序所做的事情 - 但是没有自己编写整个HTTP服务器.

import time, socket, threading

sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 8000

sock.bind((host, port))
sock.listen(1)

# my OWN HTTP server... Oh man, this is bad style.
HTTP = "HTTP/1.1 200 OK\nContent-Type: text/html; charset=UTF-8\n\n"

class Listener(threading.Thread):

    def __init__(self):
        threading.Thread.__init__(self)
        self.daemon = True # stop Python from biting ctrl-C
        self.start()

    def run(self):
        conn, addr = sock.accept()
        conn.send(HTTP)

        # serve up an infinite stream
        i = 0
        while …
Run Code Online (Sandbox Code Playgroud)

streaming multithreading python-2.7

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

codecs.open(utf-8)无法读取纯ASCII文件

我有一个普通的ASCII文件.当我尝试打开它时codecs.open(..., "utf-8"),我无法读取单个字符.ASCII是UTF-8的子集,为什么不能codecs以UTF-8模式打开这样的文件?

# test.py

import codecs

f = codecs.open("test.py", "r", "utf-8")

# ASCII is supposed to be a subset of UTF-8:
# http://www.fileformat.info/info/unicode/utf8.htm

assert len(f.read(1)) == 1 # OK
f.readline()
c = f.read(1)
print len(c)
print "'%s'" % c
assert len(c) == 1 # fails

# max% p test.py
# 63
# '
# import codecs
#
# f = codecs.open("test.py", "r", "utf-8")
#
# # ASC'
# Traceback (most recent call last):
#   File "test.py", …
Run Code Online (Sandbox Code Playgroud)

python utf-8 readline codec python-2.7

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

如何在不损失结果范围的情况下将C中的uint转换为int

我想要两个无界整数之间的差异,每个整数都由一个uint32_t值表示,该值是取2 ^ 32为模的无界整数。如,例如,TCP序列号。请注意,模数2 ^ 32表示形式可以环绕0,这与更严格的问题不允许环绕0有关

假定基础无界整数之间的差在正常范围内int。我想要这个带符号的差异值。换句话说,返回一个正常int范围内的值,该值等于两个uint32_t输入模2 ^ 32之差。

例如,0 - 0xffffffff = 1因为我们假设基础无界整数在int范围内。证明:如果A mod 2 ^ 32 = 0且B mod 2 ^ 32 = 0xffffffff,则(A = 0,B = -1)(mod 2 ^ 32)因此(AB = 1)(mod 2 ^ 32)和在int此模级的范围内,具有单个代表1

我使用了以下代码:

static inline int sub_tcp_sn(uint32_t a, uint32_t b)
{
    uint32_t delta = a - b;

    // this would work on most systems
    return delta;

    // …
Run Code Online (Sandbox Code Playgroud)

c math language-lawyer

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

OpenSSL KEYUPDATE 和“SSL_key_update:错误的 ssl 版本”

我使用的是 Ubuntu 19.04,它附带了 OpenSSL 1.1.1b。系统信息如下。SSL_key_update:wrong ssl version我在传输大文档时遇到了KEYUPDATE

我正在启动我的服务器:

openssl s_server -accept 443 -cert /app/keys/cert.pem  -key /app/keys/private.key
Run Code Online (Sandbox Code Playgroud)

我使用 AES128 通过以下命令连接到服务器:

openssl s_client -connect localhost:443 -cipher AES128-GCM-SHA256 -tls1_2
Run Code Online (Sandbox Code Playgroud)

有时它会起作用,特别是当我发送的数据少于 100KB 时。然而,对于较大的传输,它通常会停止:

KEYUPDATE
140048546800768:error:1420310A:SSL routines:SSL_key_update:wrong ssl version:../ssl/ssl_lib.c:2090:
Run Code Online (Sandbox Code Playgroud)

其他人也看到了这一点,但他们似乎没有断定配置的哪个方面导致了问题。

有趣的是,如果我s_client针对同一个 1.1.1b 服务器运行较旧的 openssl 1.1.0h-fips,则在使用相同-cipher AES128-GCM-SHA256 -tls1_2选项时它工作得很好。事实上它说:

Protocol  : TLSv1.2
Cipher    : AES128-GCM-SHA256
Run Code Online (Sandbox Code Playgroud)

与 1.1.1b 客户端一样...只是 1.1.1b 客户端似乎无法正常工作。

问题是什么?我该如何解决?


这是系统信息:

cli5# openssl version -a
OpenSSL 1.1.1b  26 Feb 2019
built on: Wed Apr 17 16:50:04 2019 …
Run Code Online (Sandbox Code Playgroud)

ubuntu openssl aes

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

GCC 5及更高版本支持AVX2

我编写了下面的类"T"来加速使用AVX2对"字符集"的操作.然后我发现它在gcc 5及以后使用"-O3"时不起作用.任何人都可以帮助我追溯到一些已知不能在最新的编译器/系统上工作的编程结构吗?

这段代码是如何工作的:底层结构("_bits")是一个256字节的块(为AVX2对齐和分配),可以作为char [256]或AVX2元素访问,具体取决于是访问元素还是整个事物用于矢量运算.似乎它应该在AVX2平台上运行良好.没有?

这真的很难调试,因为"valgrind"说它很干净,而且我不能使用调试器(因为当我删除"-O3"时问题就消失了).但是我不满意只使用"| ="解决方法,因为如果这个代码真的错了,那么我可能在其他地方犯了同样的错误并搞砸了我开发的所有内容!

值得注意的是"|" 运算符有问题,但"| ="没有.问题可能与从函数返回结构有关吗?但我认为返回一个结构自1990年以来一直有效.

// g++ -std=c++11 -mavx2 -O3 gcc_fail.cpp

#include "assert.h"
#include "immintrin.h" // AVX

class T {
public:
  __m256i _bits[8];
  inline bool& operator[](unsigned char c)       {return ((bool*)_bits)[c];}
  inline bool  operator[](unsigned char c) const {return ((bool*)_bits)[c];}
  inline          T()                   {}
  inline explicit T(char const*);
  inline T     operator| (T const& b) const;
  inline T &   operator|=(T const& b);
  inline bool  operator! ()           const;
};

T::T(char const* s)
{
  _bits[0] = _bits[1] = _bits[2] = _bits[3] = …
Run Code Online (Sandbox Code Playgroud)

c++ gcc avx2

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

C++隐式转换不起作用

一直在用g ++ 5.3.1尝试C++ 11 ......我以为我理解了隐式转换运算符.一般来说,如果我定义Class3::operator Class2()那么我可以Class3 直接传递给任何需要的函数Class2.这似乎在99%的时间都有效......但我遇到了一个简单的例子,其中并非如此.

class Class1 {};

class Class2 {
public:
  inline friend Class1 & operator<<(Class1 & a, Class2 const& c)
  {return a;}
};

class Class3 {
public:
  inline operator Class2() const {return Class2();}
};

void Foo(Class2 c) {}

int main()
{
  Class1 c1;
  Class3 c3;

  // g++ does not like this:
  // error: no match for 'operator<<' (operand types are 'Class1' and 'Class3')
  // c1 << c3;

  // g++ likes …
Run Code Online (Sandbox Code Playgroud)

c++ casting implicit-conversion c++11

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