例如,在Travis 中,通过打印travis_fold:start:<section-name>和travis_fold:end:<section-name>,其行为类似于 Travis 的转义码,它将折叠文本。请参阅此处有关 Travis 折叠的信息。例如,请参阅此输出。
对于 Linux/Unix 终端,这通常非常有用。是否有任何ANSI 转义序列/代码扩展可以做这样的事情(当然还有相应的终端模拟器来处理这些)?
现有的转义码(和扩展):
我想为 CPU 和 GPU(在 CUDA 中)编写一个自定义操作(在 C++ 中)。这非常简单,除了:我如何调用 BLAS (s)gemm(在这两种情况下,对于 CPU 和 GPU)?
我稍微浏览了一下操作LSTMBlock(lstm_ops.h、lstm_ops.cc、lstm_ops_gpu.cu.cc、blas_gemm.h、blas_gemm.cc),似乎在 CPU 情况下使用 Eigen,ctx->op_device_context()->stream()->ThenBlasGemm()在 GPU 情况下则使用 Eigen。
ThenBlasGemm如果API 也可用于 CPU 就好了,但它似乎仅适用于 GPU。(也许我应该为此提出一个功能请求?)
但是对于 CPU 情况使用 Eigen(或者一般情况下使用 gemm)似乎并不是在所有情况下都是最好的选择。我正在查看MatMul操作(matmul_op.h,matmul_op.cc,mkl_matmul_op.cc,gemm_functors.h),似乎有很多特殊情况(例如使用 gemm 或 gemv,使用 MKL 如果可用等)。我认为尝试复制所有这些(主要是复制和粘贴代码)不是一个好主意。
是否有任何易于使用的 APImatmul可以在我的自定义操作中使用?(也许我应该为此提出一个功能请求?)
或者也许,有没有办法调用MatMulOp::Compute我自己的操作中现有的?
我有一个这样的宏:
#define assert_cmp(a, cmp, b) \
if(!((a) cmp (b))) { \
std::cerr << "Assertion failed: " << a << " " << #cmp << " " << b << std::endl; \
assert((a) cmp (b)); \
}
Run Code Online (Sandbox Code Playgroud)
(是的,我也许应该解决do { ... } while(0)这个问题......)
然后我可以使用它,例如:
void f(int a) {
assert_cmp(a, <=, 42);
// ...
}
Run Code Online (Sandbox Code Playgroud)
效果很好。然而现在,我想对一些 CUDA 代码也使用相同的宏,但我只能printf在那里使用。(CUDA 与这个问题并不真正相关,只是我必须使用printf。)
如何翻译宏来printf代替std::cerr?这并不那么简单,因为参数a和b可以是任何类型(尽管如果我们现在只关心数字类型也可以)。
也许是这样的:
#define assert_cmp(a, cmp, b) \
if(!((a) cmp (b))) …Run Code Online (Sandbox Code Playgroud) 我想知道复制文件的有效方法(在Linux上,在支持写时复制(COW)的FS上)。\n具体来说,我希望我的实现如果可能的话使用写时复制,但否则回退到其他有效的变体。具体来说,我还关心服务器端复制(由SMB、NFS等支持),以及零复制(即如果可能的话绕过 CPU 或内存)。
\n(这个问题并不是特定于任何编程语言。它可以是 C 或 C++,也可以是任何其他语言,如 Python、Go 或任何与操作系统系统调用绑定的语言,或者有任何方法进行系统调用。如果这让您感到困惑你只需回答C即可。)
\n看起来ioctl_ficlonerange,ioctl_ficlone(即ioctl使用FICLONE或FICLONERANGE)支持写时复制(COW)。具体FICLONE由 GNU 使用cp(此处,via --reflink)。
然后还有copy_file_range,它似乎也支持 COW 和服务器端复制。\n( LWN about copy_file_range。)
听起来好像copy_file_range更通用(例如,它支持服务器端复制;不确定是否支持FICLONE)。
但是,copy_file_range似乎存在一些问题。\n例如 保罗·艾格特在这里评论道:
\n\n[copy_file_range] 的手册页表示它使用 size_t (而不是 off_t)来计算要复制的字节数,这对于文件复制 API 来说是一个奇怪的选择。
\n
是否存在FICLONE比 …
我有一些文本(str, bytes; 实际上压缩在磁盘上的文件中),可以通过ast.literal_eval.
(它由一个字典列表组成,其中字典键是字符串,值是字符串、int 或 float。但也许这个问题对于任何可以通过 解析的字符串都是通用的ast.literal_eval。)
它很大:未压缩时约为 22MB。
解析它的最快方法是什么?
我当然可以使用ast.literal_eval,但这看起来很慢。标准eval稍微快一些(有趣的是,但可能正如预期的那样,取决于您对 Python 的了解程度;请参阅 的实现ast.literal_eval),但仍然很慢。
相比之下,当我将相同的数据序列化为 JSON,然后加载 JSON ( json.loads) 时,速度要快得多(>10 倍)。所以这表明原则上应该可以同样快地解析它。
一些统计数据:
Gunzip + read time: 0.15111494064331055
Size: 22035943
compile: 3.1023156170000004
parse: 3.3381092380000004
eval: 3.0252232049999996
ast.literal_eval: 3.765798232
json.loads: 0.2657175249999994
Run Code Online (Sandbox Code Playgroud)
可以找到此基准测试脚本以及生成此类虚拟文本文件的脚本:此处
(也许答案是:“这需要更快的 C 实现;目前还没有人实现过”)
好吧,发完这篇文章后,我发现了一些相关的问题。不过我没有通过谷歌找到它们(也许我的搜索词“fasterliteral_eval”不好)。
这部分回答了这个问题。
对于Boost,是否有任何MacOSX通用二进制文件(至少i386/ppc为> = macosx10.3)?
我们有以下场景:我们的游戏OpenLieroX有几个基本版本; 现在0.57,0.58和0.59.对于每个基本版本,我们都有一个单独的分支.每个这样的基本版本都有几个版本(如0.57 beta1-beta8和rc1,0.58 beta1-beta9).
当我们正在研究新的东西时,我们正在最高的基础版本分支(现在是0.59).当我们修复一些报告的错误时,我们会在最早的版本(大多数为0.58)中执行此操作.有时,我们总是将0.58中的所有更改合并到0.59(只要我们仍然维护并对旧分支进行更改).
这一切都很好,直到我们想要只有0.58而不是0.59的一些变化.这种情况仅发生在目前为止的一个案例中:版本号.我们有一些Version.cpp文件(以及一些其他文件),其中包含版本号.因此,当我们想要推出0.58的新版本时,我们将那里的versionstring更改为"0.58 beta10"(或其他).现在,当我们通常从0.58合并到0.59时,也会应用此更改.我们现在通过使用正确的版本号再次覆盖它来修复此类情况(或者在其他错误提交的情况下,可能是恢复).
关于这些不必要的变化的这个细节对我来说似乎有点难看.我们管理这种方式一般是不好/不常见的?如何最简单的方法来获得相同的结果?樱桃采摘0.59中0.58的所有提交将是更多的工作.
还有一个细节可能使它更复杂:在处理代码时,我必须设置即将到来的版本号.这是因为我们有一个网络引擎,我们可能已经引入了一些新功能,并且代码中有检查,如'if(client-> version()> = Version(X,Y,Z))...'.现在,当我们介绍新的东西时,通常它在某些方面也意味着这样的检查.(但我们正试图避免旧分支中的这些变化.)
另一个问题是我们不只是计算版本(如0.58.1,0.58.2 ......),但我们计算如下:0.58 beta1,0.58 beta2,...,0.58 betaX,0.58 rc1 ,. ..,0.58,0.58.1,0.58.2,......这是因为我们希望将其标记为开始时的实验(β阶段),然后将其标记为大多数稳定或稳定.在一些罕见的情况下,即使在两个不同的beta版本之间也可能发生严重的变化(可能是网络协议)(当然,我们试图避免它们,但有时候不可能没有).
这段代码:
class RawStringIterator {
java.util.Stack<State> stateStack = new java.util.Stack<State>();
RawStringIterator(RawStringIterator i) {
stateStack = (java.util.Stack<State>) i.stateStack.clone();
}
/* ... */
}
Run Code Online (Sandbox Code Playgroud)
给了我这个警告:
Type safety: Unchecked cast from Object to Stack<Utils.OperatorTree.RawStringIterator.State>
Run Code Online (Sandbox Code Playgroud)
我想我可以忽略这里的警告.但我想知道如何使用clone()一般?@SuppressWarnings("unchecked")每次使用时我总是要使用clone()吗?或者我应该总是进行完全冗余的额外检查吗?
我想创建一个简单的Mac应用程序包,它调用一个简单的Python脚本.我想用Python做到这一点.
有一个简单的方法吗?
我尝试使用py2app,但不知怎的失败,例如:
from setuptools import setup
setup(app=["foo.py"], setup_requires=["py2app"])
Run Code Online (Sandbox Code Playgroud)
得到:
---------------------------------------------------------------------------
SystemExit Traceback (most recent call last)
/Users/az/<ipython console> in <module>()
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/core.pyc in setup(**attrs)
138 ok = dist.parse_command_line()
139 except DistutilsArgError, msg:
--> 140 raise SystemExit, gen_usage(dist.script_name) + "\nerror: %s" % msg
141
142 if DEBUG:
SystemExit: usage: ipython [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
or: ipython --help [cmd1 cmd2 ...]
or: ipython --help-commands
or: ipython cmd --help
error: no commands supplied
Type %exit or %quit to exit IPython (%Exit …Run Code Online (Sandbox Code Playgroud) 我在另一个物理网络上的另一个远程系统上有一个服务,它的多播包没有到我的本地系统,因此我看不到它的DNS-SD发布服务.
我有办法在本地机器上手动注册它,以便只显示DNS-SD发现服务的应用程序显示它吗?