display:none
将完全隐藏元素,就像它现在的宽度和高度为零一样visibility:hidden
另一方面,将隐藏元素,但在文档中保留元素原始宽度和高度的矩形.有没有办法通过纯CSS,隐藏一个元素,使其占据零高度,但其原始宽度?将其高度设置为零不起作用,因为我不知道将元素设置到哪个高度,我想再次显示它.
具体来说,我想实现以下目标:
#top ul {take up zero height but original width}
#top:hover ul {restore original dimensions}
Run Code Online (Sandbox Code Playgroud)
编辑:解决了!想法是设置height:auto
恢复原始高度.
请参阅http://jsfiddle.net/yP59s/获取完整版本或此处的css:
ul {margin:0px}
#top {border:1px solid}
#top ul {height:0px;overflow:hidden}
#top:hover ul {height:auto;}
Run Code Online (Sandbox Code Playgroud)
和HTML:
<div id="top">
<h1>foobar</h1>
<ul>
<li>foo</li>
<li>bar</li>
</ul>
</div>
blubber
Run Code Online (Sandbox Code Playgroud) 我希望能够将证书传递给Python的ssl库,而无需临时文件.似乎Python的ssl模块不能这样做.
要解决此问题,我想从本机模块中检索SSL_CTX
存储在ssl._ssl._SSLContext
类中的基础结构_ssl
.使用ctypes然后我可以SSL_CTX_*
使用该上下文从libssl 手动调用相应的函数.这里显示了如何在C中执行此操作,我将通过ctypes执行相同的操作.
不幸的是,我陷入了我设法挂钩load_verify_locations
函数的地步,ssl._ssl._SSLContext
但似乎无法获得ssl._ssl._SSLContext
结构实例的正确内存地址.load_verify_locations
看到的所有函数都是父ssl.SSLContext
对象.
我的问题是,如何从ssl.SSLContext
对象的实例到本机基类的内存ssl._ssl._SSLContext
?如果我愿意,我可以轻松访问其ctx
成员.
到目前为止,这是我的代码.关于如何将本机Python模块进行monkeypatch的信用转到Lincoln Clarete的禁果项目
Py_ssize_t = hasattr(ctypes.pythonapi, 'Py_InitModule4_64') and ctypes.c_int64 or ctypes.c_int
class PyObject(ctypes.Structure):
pass
PyObject._fields_ = [
('ob_refcnt', Py_ssize_t),
('ob_type', ctypes.POINTER(PyObject)),
]
class SlotsProxy(PyObject):
_fields_ = [('dict', ctypes.POINTER(PyObject))]
class PySSLContext(ctypes.Structure):
pass
PySSLContext._fields_ = [
('ob_refcnt', Py_ssize_t),
('ob_type', ctypes.POINTER(PySSLContext)),
('ctx', ctypes.c_void_p),
]
name = …
Run Code Online (Sandbox Code Playgroud) 我有一些地理数据(下面的图像显示了河流的路径为红点),我想用多段三次贝塞尔曲线近似.通过对计算器等问题,在这里和这里我发现由Philip J.施耐德从"图形宝石"的算法.我成功地实现了它并且可以报告即使有数千个点它也非常快.不幸的是,速度带来了一些缺点,即装配非常不合适.请考虑以下图形:
红点是我的原始数据,蓝线是由Schneider算法创建的多段贝塞尔曲线.如您所见,算法的输入是一个容差,至少与绿线表示的一样高.然而,该算法创建了具有太多急转弯的贝塞尔曲线.你也会在图像中看到这些不必要的急转弯.很容易想象,对于所示数据,具有较小急转弯的贝塞尔曲线,同时仍保持最大公差条件(仅将贝塞尔曲线稍微推向品红色箭头的方向).问题似乎是算法从我的原始数据中选取数据点作为各个贝塞尔曲线的终点(品红箭头指示一些嫌疑人).由于贝塞尔曲线的端点受到限制,很明显该算法有时会产生相当尖锐的曲率.
我正在寻找的是一种算法,它使用具有两个约束的多段贝塞尔曲线来近似我的数据:
我发现可以创造更好拟合的解决方案或者仅适用于单个贝塞尔曲线(并且省略了如何在多段贝塞尔曲线中找到每个贝塞尔曲线的良好起点和终点的问题)或者不允许最小曲率约束.我认为最小曲率约束是这里的棘手条件.
这是另一个例子(这是手绘而不是100%精确):
让我们假设图1显示了两者,曲率约束(圆必须适合整个曲线)以及任何数据点与曲线的最大距离(恰好是绿色圆的半径).图2中红色路径的成功近似显示为蓝色.该近似值符合曲率条件(圆可以在整个曲线内滚动并在任何地方触摸它)以及距离条件(以绿色显示).图3显示了路径的不同近似值.虽然它符合距离条件但很明显圆圈不再适合曲率.图4显示了一条不可能用给定约束近似的路径,因为它太尖了.该示例应该说明为了正确地近似路径中的一些尖转弯,算法必须选择不属于路径的控制点.图3显示,如果选择沿路径的控制点,则不能再满足曲率约束.此示例还显示算法必须退出某些输入,因为无法使用给定的约束来近似它.
这个问题是否存在解决方案?解决方案不一定要快.如果需要一天时间来处理1000点,那就没问题了.解决方案也不必是最佳的,因为它必须导致最小二乘拟合.
最后,我将用C和Python实现它,但我也可以阅读大多数其他语言.
我想写一个非ascii字符,让我们说?
标准输出.棘手的部分似乎是我想要连接到该字符串的一些数据是从json读取的.考虑以下简单的json文档:
{"foo":"bar"}
Run Code Online (Sandbox Code Playgroud)
我包括这个因为如果我只是想打印?
那么它似乎足以简单地写:
print("?")
Run Code Online (Sandbox Code Playgroud)
它将在python2和python3中做正确的事情.
所以我想打印foo
与非ascii字符一起的值?
.我发现这样做的唯一方法就是它在python2和python3中都有效:
getattr(sys.stdout, 'buffer', sys.stdout).write(data["foo"].encode("utf8")+u"?".encode("utf8"))
Run Code Online (Sandbox Code Playgroud)
要么
getattr(sys.stdout, 'buffer', sys.stdout).write((data["foo"]+u"?").encode("utf8"))
Run Code Online (Sandbox Code Playgroud)
重要的是不要错过u
前面的?
因为否则UnicodeDecodeError
将被python2抛出.
使用这样的print
功能:
print((data["foo"]+u"?").encode("utf8"), file=(getattr(sys.stdout, 'buffer', sys.stdout)))
Run Code Online (Sandbox Code Playgroud)
似乎没有用,因为python3会抱怨TypeError: 'str' does not support the buffer interface
.
我找到了最好的方法还是有更好的选择?我可以使打印功能起作用吗?
我注意到,当我运行我的程序与perl -MDevel::Cover=-silent,-nogcov foo.pl
收集覆盖率信息foo.pl
,我从我的节目的部分越来越庞大的减速是fork和exec非Perl程序一样tar
,gzip
或dpkg-deb
。感谢这个问题,我想出了如何有选择地禁用 Devel::Cover,所以我现在写:
my $is_covering = !!(eval 'Devel::Cover::get_coverage()');
my $pid = fork();
if ($pid == 0) {
eval 'Devel::Cover::set_coverage("none")' if $is_covering;
exec 'tar', '-cf', ...
}
Run Code Online (Sandbox Code Playgroud)
这样做,每个测试减少了五分钟的运行时间,对于 122 个测试,我节省了 10 小时的计算时间。
不幸的是,我不能总是将此 eval 语句添加到分叉子进程中。例如,当我使用system()
. 我想避免将每次system()
调用都重写为手册fork/exec
。
有没有办法为我的分叉进程或基本上所有不是我的脚本的进程禁用 Devel::Cover foo.pl
?
谢谢!
编辑:将foo_t更改为foo作为typename,因为POSIX保留以_t EDIT结尾的类型:将_foo_s更改为foo_s,因为C声明以下划线开头的名称
我很困惑,最好的方法是同时拥有以下内容:
我对此的第一次尝试是做以下事情:
foo.h(为简洁省略包含保护):
typedef struct foo_s foo;
struct foo_s;
foo* foo_create(void);
void foo_do_something(foo *foo);
Run Code Online (Sandbox Code Playgroud)
foo.c的:
#include "foo.h"
struct foo_s {
/* some_hidden_members */
};
foo* foo_create() {
/* allocate memory etc */
}
void foo_do_something(foo *foo) {
/* do something with foo */
}
Run Code Online (Sandbox Code Playgroud)
这似乎与gcc一起使用.每个人foo.h
只看到匿名前向声明和真正的布局struct foo_s
只有在foo.c
.
当我尝试使用include-what-you-use使用clang时,我开始闻到上述的奇怪之处.当我用它来检查foo.c
它时告诉我不foo.h
应该包含前向声明struct foo_s
.我认为这是iwyu中的一个错误,因为很明显这对任何包含的人来说都不是问题foo.h
.
在这一点上,让我从一开始就提出我的第二个要求.foo.c
包括,foo.h
以便编译器可以确保声明的每个函数foo.h
匹配实现foo.c
.我想我需要这个,因为我经常遇到分段错误,因为我的实现的函数签名与其他代码使用的头文件中的函数签名不匹配.
后来我尝试用clang编译代码(我编译-Wall -Wextra -Werror …
我正在尝试将多个ogg vorbis文件连接成一个.
我知道理论上它应该足够了:
cat 1.ogg 2.ogg > combined.ogg
Run Code Online (Sandbox Code Playgroud)
但这有缺点:
我不想放松质量,所以我可以将它们重新编码为像flac这样的无损格式,但这会让文件大小爆炸.
似乎没有工具可以做到这一点.例如,oggCat将重新编码音频,从而导致质量轻微下降,并且ffmpeg concat demuxer不适用于所有输入文件.我打开这个超级用户的问题来找到一个工具,但当我发现没有工具时写了我自己的工具.
所以我尝试使用libogg和libvorbis手动将输入文件中的ogg数据包连接到输出文件的ogg页面.假设是,所有ogg输入文件都使用完全相同的参数进行编码.
我想出了以下代码:
#include <ogg/ogg.h>
#include <vorbis/codec.h>
#include <stdio.h>
#include <unistd.h>
#include <stdbool.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <time.h>
int read_page(int fd, ogg_sync_state *state, ogg_page *page)
{
int ret;
ssize_t bytes;
while(ogg_sync_pageout(state, page) != 1) {
char *buffer = ogg_sync_buffer(state, 4096);
if (buffer == NULL) {
fprintf(stderr, "ogg_sync_buffer failed\n");
return -1;
}
bytes = read(fd, buffer, 4096);
if …
Run Code Online (Sandbox Code Playgroud) 如何mount
从perl完成系统调用?下列:
$ret = syscall(&SYS_mount, "/proc", "/path/to/my/mount/point", 0, 0, 0);
Run Code Online (Sandbox Code Playgroud)
结果是:
Modification of a read-only value attempted at ...
Run Code Online (Sandbox Code Playgroud)
我无法调用mount
程序,system
因为我需要进行程序似乎不具备的mount()
系统调用mount
.更具体地说,我需要打电话:
mount("/proc", "/path/to/my/mpoint/point", NULL, MS_REC|MS_PRIVATE|MS_BIND, NULL);
Run Code Online (Sandbox Code Playgroud)
但是如果我尝试使用非特权的非共享mount linux命名空间运行以下命令:
mount --make-rprivate --bind /proc /path/to/my/mountpoint
Run Code Online (Sandbox Code Playgroud)
然后我收到以下错误:
mount: wrong fs type, bad option, bad superblock on /proc,
missing codepage or helper program, or other error
In some cases useful info is found in syslog - try
dmesg | tail or so.
Run Code Online (Sandbox Code Playgroud)
使用strace
揭示mount …
我正在寻找一种逐行读取文件句柄的方法(然后在每一行上执行一个函数),具有以下转折:我想要视为"行"的东西应该通过改变字符来终止,而不仅仅是我定义为的单个字符$/
.我现在$INPUT_RECORD_SEPARATOR
或$/
不支持正则表达式或传递一个字符列表作为行终止符,这就是我的问题所在.
我的文件句柄来自进程的stdout.因此,我无法在文件句柄内寻找并且完整内容不能立即获得,而是在执行过程时逐位产生.我希望能够使用我handler
在示例中调用的函数将时间戳附加到进程生成的每个"行" .每一行都应该在程序生成后立即处理.
不幸的是,我只能提出一种方法,既可以handler
立即执行函数,但看起来非常低效,或者使用缓冲区的方式,但只会导致handler
函数的"分组"调用,从而产生错误的时间戳.
事实上,在我的具体情况下,我的正则表达式甚至会非常简单并且只是阅读/\n|\r/
.因此,对于这个特殊问题,我甚至不需要完整的正则表达式支持,而只需要将多个字符视为行终止符.但$/
不支持这一点.
有没有一种有效的方法来解决Perl中的这个问题?
下面是一些快速的伪perl代码来演示我的两种方法:
这看起来像这样:
my $acc = "";
while (read($fd, my $b, 1)) {
$acc .= $b;
if ($acc =~ /someregex$/) {
handler($acc);
$acc = "";
}
}
Run Code Online (Sandbox Code Playgroud)
这里的优点是,handler
一旦读取了足够的字节,就会立即调度.缺点是,我们执行字符串追加并检查我们读取的每个字节的正则表达式$fd
.
这看起来像这样:
my $acc = "";
while (read($fd, my $b, $bufsize)) {
if ($b =~ /someregex/) {
my @parts = split /someregex/, $b;
# for brevity …
Run Code Online (Sandbox Code Playgroud) 我想要一个函数返回一个文件对象,我可以用它将二进制数据写入标准输出.在python2中sys.stdout
就是这样一个对象.在python3中它是sys.stdout.buffer
.
检索这样一个对象的最优雅/首选方法是什么,以便它对python2和python3解释器都有效?
是检查sys.stdout.buffer
(可能使用inspect
模块)存在的最佳方法,如果存在,则返回它,如果不存在,则假设我们在python2上并返回sys.stdout
?
假设我有以下XML:
<data>
<foos>
<foo id="1" checked="yes" />
<foo id="2" />
<foo id="3" />
<foo id="4" checked="yes" />
</foos>
<bars>
<bar for="1" name="blub" />
<bar for="2" name="bla" />
<bar for="3" name="baz" />
<bar for="4" name="plim" />
</bars>
</data>
Run Code Online (Sandbox Code Playgroud)
现在我想打印name
那些bar
指向foo
具有该属性的元素的元素的所有属性checked
.所以对于上面的例子,我的xslt会输出blub
和plim
.
到目前为止,我所尝试的只是检查是否可以打印每个id
属性所属的foo
元素的属性bar
:
<xsl:template match="/">
<xsl:for-each select="//bars/bar">
<xsl:value-of select="../../foos/foo[@id=./@for]/@id" />
</xsl:for-each>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
但无济于事.我认为问题是,该检查foo[@id=./@for]
将同时选择@id
并@for
从foo
元素.那么我怎么能说我想要@for
来自for循环当前元素的属性,而不是@id
来自另一个 …
以下Python代码演示了我想在Perl中做什么:
def runner(cmd, arg):
print("runner:", arg)
cmd()
def run_hooks1(arg):
def work():
print("work", arg)
if (arg):
work()
else:
runner(work, "hello")
run_hooks1(True)
run_hooks1(False)
Run Code Online (Sandbox Code Playgroud)
输出:
work True
runner: hello
work False
Run Code Online (Sandbox Code Playgroud)
我认为把它移植到Perl会很简单.所以我开始使用这段代码:
sub runner(&$) {
my $cmd = shift;
my $arg = shift;
print STDOUT "runner: $arg\n";
&{$cmd}();
}
sub run_hooks1($) {
my $arg = shift;
sub work() {
print STDOUT "work: $arg\n";
}
if ($arg) {
work();
} else {
runner \&work, "hello";
}
}
run_hooks1(0);
run_hooks1(1);
Run Code Online (Sandbox Code Playgroud)
不幸的是,这会导致:
Variable "$arg" will not …
Run Code Online (Sandbox Code Playgroud)