小编jma*_*jma的帖子

尽管在右侧有例外,但C++中的赋值仍然发生

我有一些(C++ 14)代码,如下所示:

map<int, set<string>> junk;
for (int id : GenerateIds()) {
    try {
        set<string> stuff = GetStuff();
        junk[id] = stuff;
    } catch (const StuffException& e) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这有效.有时GetStuff()抛出一个异常,这很好,因为如果它,我不想在垃圾地图中的值.

但起初我在循环中写了这个,这不起作用:

junk[id] = GetStuff();
Run Code Online (Sandbox Code Playgroud)

更确切地说,即使GetStuff()抛出异常,junk[id]也会创建(并分配一个空集).

这不是我所期望的:我希望它们以相同的方式运行.

我在这里误解了C++的原理吗?

c++ c++14

72
推荐指数
3
解决办法
4065
查看次数

大熊猫分散绘图日期时间

我有一个包含两列datetime.time的数据框.我想分散他们的情节.我也希望轴能够显示时间,理想情况下.但

df.plot(kind='scatter', x='T1', y='T2')
Run Code Online (Sandbox Code Playgroud)

转储一堆内部绘图错误,以'T1'上的KeyError结尾.

或者,我试试

plt.plot_date(x=df.loc[:,'T1'], y=df.loc[:,'T2'])
plt.show()
Run Code Online (Sandbox Code Playgroud)

我得到'Tkinter回调中的异常',结尾的堆栈爬行很长

return _from_ordinalf(x, tz)
  File "/usr/lib/python3/dist-packages/matplotlib/dates.py", line 224, in _from_ordinalf
microsecond, tzinfo=UTC).astimezone(tz)
TypeError: tzinfo argument must be None or of a tzinfo subclass, not type 'str'
Run Code Online (Sandbox Code Playgroud)

有什么指针吗?

python matplotlib python-3.x pandas

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

Docker:收听容器,不回答外面的问题

我有一个在其说明中使用"EXPOSE 8000"构建的docker容器.我开始这样的过程:

sudo docker run -t -i -P imagename
Run Code Online (Sandbox Code Playgroud)

容器中的进程正在监听8000.

# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 localhost:8000          *:*                     LISTEN     
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
# 
Run Code Online (Sandbox Code Playgroud)

在主机(即容器外),我看到端口49164绑定到容器端口8000:

[S-22]jeff@siegfried:~ $ sudo docker ps 
CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS                     NAMES
0b0e333c6ec9        lkz:latest                 "/bin/bash"         About an hour ago   Up 6 minutes        0.0.0.0:49164->8000/tcp   lkxyz__2015-01-18_202737   
[S-22]jeff@siegfried:~ $ 
Run Code Online (Sandbox Code Playgroud)

Inded,docker inspect说(除其他外) …

docker

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

为什么std :: shuffle采用右值引用?

从C++ 11开始,std::shuffle()对随机位生成器进行右值引用:

template<class RandomIt, class URBG>
void shuffle(RandomIt first, RandomIt last, URBG&& g);
Run Code Online (Sandbox Code Playgroud)

所以我可以这么称呼它:

std::vector<int> v = {...};
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(v.begin(), v.end(), g);
Run Code Online (Sandbox Code Playgroud)

这揭示了我对C++的理解错误,我今天早上通过阅读无法满足:在这里使用右值引用可以获得什么?换句话说,为什么不这样做

template<class RandomIt, class URBG>
void shuffle(RandomIt first, RandomIt last, URBG& g);
Run Code Online (Sandbox Code Playgroud)

c++ rvalue c++11

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

rvalue在C++中的绑定混淆

我有三个函数调用,我认为应该对它们进行相同的处理,但显然它们不是.我试图理解为什么三个中的一个不编译(g ++ -std = c ++ 0x).

// Minimal example to reproduce a compile bug I want to understand.

#include <iostream>
#include <string>

using namespace std;


void bar(const string &&x) { cout << "bar: " << x << endl; }

string returns_a_string() { return string("cow"); }

int main( int argc, char *argv[] )
{
    bar(string("horse"));     // ok
    bar(returns_a_string());  // ok
    string aardvark = "aardvark";
    bar(aardvark);            // not ok, fails to compile, error in next comment
    /*
      rvalue-min.cpp:29:22: error: cannot bind …
Run Code Online (Sandbox Code Playgroud)

c++ rvalue rvalue-reference lvalue-to-rvalue c++11

8
推荐指数
2
解决办法
7848
查看次数

docker nginx部署入口点

我有一个dockerized nginx,如果我运行一个shell,效果很好,但(自然而然)如果我将"nginx start"本身作为入口点,它只是守护并立即退出,因为没有等待的进程.

我倾向于做这样的事情:

pid=$(cat /run/nginx.pid)
while ps ax | awk '{print $1}' | grep -q $pid; do
    sleep 60
done
Run Code Online (Sandbox Code Playgroud)

虽然这看起来像是一个黑客.但是当我以google为例时,我看到有人在运行bash.

有什么指针吗?

nginx docker

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

django-tinymce不显示格式工具栏

TL; DR - Tinymce的格式工具栏不显示.django生成的一行html似乎很可疑,但我不确定它为何就是这样.这是python 3.4和django 1.8.

我这样做了:

settings.py

我正在使用django-tinymce默认值.

INSTALLED_APPS = (
    ...,
    'django.contrib.staticfiles',
    ...,
    'tinymce',
    ...
)
Run Code Online (Sandbox Code Playgroud)

urls.py

...
url(r'^tinymce/', include('tinymce.urls'))
...

if settings.DEBUG:
    urlpatterns += patterns('django.views.static',
                            (r'^media/(?P<path>.*)',
                             'serve',
                             {'document_root': settings.MEDIA_ROOT}),)
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Run Code Online (Sandbox Code Playgroud)

models.py

from tinymce.models import HTMLField

class BlogEntry(models.Model):
    ...
    #article_body = HTMLField()
    article_body = models.TextField()
Run Code Online (Sandbox Code Playgroud)

(文档建议HTMLField.其他来源建议使用TextField.到目前为止,结果是相同的.)

form.py

from tinymce.widgets import TinyMCE

class BlogEntryForm(forms.ModelForm)
    article_body = forms.CharField(
        widget=TinyMCE(#mce_attrs={
            #'plugin_preview_pageurl': reverse('tinymce-preview', "blog")},
                       attrs={
                           'cols': 80, 'rows': 30,
                           'placeholder': 'contenu',
                           'class': 'lkz-input'}),)
Run Code Online (Sandbox Code Playgroud)

模板

{% …
Run Code Online (Sandbox Code Playgroud)

django tinymce django-tinymce

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

未定义的符号X509_free引用

我正在尝试使用mongodb遗留C++驱动程序.(这里的"遗产"意味着生产版本,fwiw.)在使用clang ++ 3.6和boost 1.55(来自ubuntu软件包存储库)并使用mongo-cxx-driver pull form git的ubuntu 15.04主机上,我编译了驱动程序然后尝试编译测试程序.

$ clang++ -std=c++14 mongo.cc -pthread -lmongoclient -lboost_thread \
  -lboost_system -lboost_regex -lssl -o mo
Run Code Online (Sandbox Code Playgroud)

我看到这个错误:

clang++ -std=c++14 mongo.cc -pthread -lmongoclient -lboost_thread -lboost_system -lboost_regex -lssl -lcrypt -o mo
/usr/bin/ld: /usr/local/lib/libmongoclient.a(ssl_manager.o): undefined reference to symbol 'X509_free@@OPENSSL_1.0.0'
/lib/x86_64-linux-gnu/libcrypto.so.1.0.0: error adding symbols: DSO missing from command line
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)

显然我很想念X509_free(),但似乎应该在libssl中(这是openSSL1.0.0,dpkg和库符号链接本身说).

非常感谢任何提示.

我认为这不重要,但这是mongo.cc:

#include <cstdlib>
#include <iostream>
#include "mongo/client/dbclient.h" // for the driver

void …
Run Code Online (Sandbox Code Playgroud)

c++ mongodb

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

具有模板化函数的C++调度表

我在一些C++代码中有一个调度表.它将标记映射到可以处理这些标记的函数.在第一个版本中,它接受接受两个字符串并返回字符串的函数.字符串是序列化的protobufs.

map<string, function<string(const string& serialised_1,
                            const string& serialised_2)>> converters = {
...
{ 'dog', ProcessTwoDogs },
{ 'cat', ProcessTwoCats },
...
};
Run Code Online (Sandbox Code Playgroud)

转换器功能在这里看起来像这样

string ProcessTwoDogs(const string& dog_1_str, const string& dog_2_str);
Run Code Online (Sandbox Code Playgroud)

在实现了相当多的这些转换器后,我意识到它们经常超过一半样板:错误检查,反序列化,序列化等等.所以我写了一个快速模板,大大简化了我的代码:

template <typename ProtoT>
std::string ConvertProtos(
    const std::string& proto_str_a,
    const std::string& proto_str_b,
    std::function<ProtoT(const ProtoT&, const ProtoT&)> convert_proto) {
    ProtoT proto_a = ...;
    ProtoT probo_b = ...;
    // and various error checks.
    ProtoT proto_out = convert_proto(proto_a, proto_b);
    // some more checks, and serialise to proto_out_str.
    return proto_out_str;
}
Run Code Online (Sandbox Code Playgroud)

现在convert_proto()看起来像这样: …

c++

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

grafana/influx 说“没有数据点”,但只是有时

我有一些带有图表的 grafana 仪表板,有时会显示“无数据点”。我知道有数据,因为有时我会在同一页面上看到图表和其他图表显示来自相同测量的其他结果。另外,我可以直接在influxdb中查询数据。

有趣的是,似乎较长的时间段比较短的时间段更有可能导致这种失败(即,30 天有时会失败,1 天很少会失败)。这是每隔几秒钟的数据,如系统统计信息。

我怀疑(数据不足)influxdb 有时响应时间太长,grafana 超时,或者由于相对于可用资源的数据过多,influxdb 彻底失败查询。OTOH,直接查询 influxdb 工作正常(见下文),尽管我一次只抛出一个查询。如果我在仪表板更新时查询,则查询需要更长的时间,就像我在等待工作线程来处理我的查询一样。

但在我开始发展硬件之前,我想拥有的不仅仅是一种预感。我没有那么多数据。然而 influx 和 grafana 日志并没有向我展示任何非常有趣的东西(例如 OOM、超时或查询失败)。

有什么建议?

顺便说一句,grafana 中的示例查询是这样的:

SELECT percentile("usage_system", 95) FROM "cpu"
WHERE "host" =~ /^$host$/ AND $timeFilter
GROUP BY time($__interval), "host"
Run Code Online (Sandbox Code Playgroud)

如果我直接查询 influxdb,查询结果几乎会立即返回,而在 grafana 中,我会等待很长时间并显示微调器。(如果我在更新仪表板的同时进行查询,则查询需要一些时间,这与等待工作线程处理我的查询一致。)

select percentile(usage_system, 95) from cpu
WHERE host = 'seine3'
AND time >= 1519216559000000000 AND time <= 1521808559000000000
GROUP BY time(1h), host
Run Code Online (Sandbox Code Playgroud)

或者

select percentile(usage_system, 95) from cpu
WHERE host = 'seine3'
AND time >= '2018-02-23T00:00:00Z' AND time <= …
Run Code Online (Sandbox Code Playgroud)

influxdb grafana grafana-templating

5
推荐指数
0
解决办法
1771
查看次数