我正在开发一个程序,使用DirectShow从媒体文件中获取音频数据.DirectShow使用线程将音频数据传递给我的程序中的回调函数,我让该回调函数调用Python中的另一个函数.
我使用Boost.Python包装我的库,回调函数:
class PythonCallback {
private:
object m_Function;
public:
PythonCallback(object obj)
: m_Function(obj)
{}
void operator() (double time, const AudioData &data) {
// Call the callback function in python
m_Function(time, data);
}
};
Run Code Online (Sandbox Code Playgroud)
问题来了,DirectShow的一个线程调用我的PythonCallback,即在Python中调用该函数.一旦调用,我的程序就崩溃了.我发现这应该是线程问题.然后我找到了这个文件:
http://docs.python.org/c-api/init.html
似乎我的程序不能直接从线程调用Python的函数,因为有Global Interpreter Lock.python的GIL非常复杂,我不知道它是如何工作的.对不起,我能做的就是问.我的问题是.在从线程调用Python函数之前和之后我应该怎么做?
它可能看起来像这样.
void operator() (double time, const AudioData &data) {
// acquire lock
m_Function(time, data);
// release lock
}
Run Code Online (Sandbox Code Playgroud)
谢谢.林维克.
我想让我的CALayer动画显示一段时间,然后淡出,这是我的代码
[_msgLayer removeAllAnimations];
[UIView animateWithDuration:10 delay:0 options:0 animations:^ {
_msgLayer.hidden = false;
NSLog(@"showing");
} completion:^(BOOL finished) {
NSLog(@"showing done, finished=%d", finished);
[UIView animateWithDuration:10 delay:40 options:0 animations:^ {
_msgLayer.hidden = true;
} completion:^(BOOL hideFinished) {
NSLog(@"hiding done, finished=%d", hideFinished);
}];
}];
Run Code Online (Sandbox Code Playgroud)
然而,动画根本无法正常工作,一切都几乎立即完成
2014-10-26 10:11:28.249 Foobar[91761:6827358] showing
2014-10-26 10:11:28.254 Foobar[91761:6827358] showing done, finished=1
2014-10-26 10:11:28.255 Foobar[91761:6827358] hiding done, finished=1
Run Code Online (Sandbox Code Playgroud)
我看到一些类似的问题,有些人说hidden不可动画,但文件说它是可动画的.我也试过opacity,然后同样的结果,动画仍然立即完成.这是为什么?我该如何解决?
该_msgLayer是我自己的类继承CALayer的,它有自己的绘画方法.这个动画是从网络事件中调用的,就像服务器向iPhone发送消息一样,然后我在屏幕上显示消息.
我正在构建一个基于PostgreSQL的锁定系统,我有两种方法,acquire并且release.
因为acquire,它的工作原理如下
BEGIN
while True:
SELECT id FROM my_locks WHERE locked = false AND id = '<NAME>' FOR UPDATE
if no rows return:
continue
UPDATE my_locks SET locked = true WHERE id = '<NAME>'
COMMIT
break
Run Code Online (Sandbox Code Playgroud)
并为 release
BEGIN
UPDATE my_locks SET locked = false WHERE id = '<NAME>'
COMMIT
Run Code Online (Sandbox Code Playgroud)
这看起来非常简单,但它不起作用.奇怪的是,我想
SELECT id FROM my_locks WHERE locked = false AND id = '<NAME>' FOR UPDATE
Run Code Online (Sandbox Code Playgroud)
应该只对收购目标行锁只有在目标行的locked是false.但实际上,它不是那样的.不知何故,即使没有locked = false行存在,它仍然会获得锁定.结果,我遇到了死锁问题.看起来像这样 …
我正在构建一个以特定顺序发送消息的Elixir模块.我写了这样的单元测试
MyModule.send_msgs(self())
assert_received {:event, 1}
assert_received {:event, 2}
assert_received {:event, 3}
Run Code Online (Sandbox Code Playgroud)
问题是,即使我改变assert_received顺序,测试仍然通过.
MyModule.send_msgs(self())
assert_received {:event, 2}
assert_received {:event, 1}
assert_received {:event, 3}
Run Code Online (Sandbox Code Playgroud)
似乎assert_received并不关心消息到达的顺序.不仅如此assert_received,据我记忆,receive也可能无法收到消息.所以,我的问题是,如果无法收到消息,您如何确保到达消息的顺序?
我想出售我的系统副本,需要将源代码传输给我的客户.我使用Mercurial作为VCS.我的代码中有一些机密数据.例如,Amazon访问密钥/ secert密钥,数据库密码和ssl私钥.这些密钥写在代码或配置文件中,如下所示:
# settings of Amazon S3 storage
s3.storages:
access_key: <secret>
secret_key: <secret>
Run Code Online (Sandbox Code Playgroud)
在我将代码传输给他们之前,我需要清除代码库中的所有机密数据.但所有这些都在历史上(变更集).有了Mercurial,我该如何清理这些秘密?
我正在处理包含\r\nSwift 4.2的字符串.我遇到了一些Swift索引的奇怪行为,它看起来\r\n会被Swift索引方法视为一个字符而不是两个字符.我写了一段代码来表达这种行为:
var text = "ABC\r\n\r\nDEF"
func printChar(_ lower: Int, _ upper: Int) {
let start = text.index(text.startIndex, offsetBy: lower)
let end = text.index(text.startIndex, offsetBy: upper)
print("\"" + text[start..<end] + "\"")
}
printChar(0, 1) // "A"
printChar(1, 2) // "B"
printChar(2, 3) // "C"
printChar(3, 4) // new line
printChar(4, 5) // new line (okay, what's going on here?)
printChar(5, 6) // "D"
printChar(6, 7) // "E"
printChar(7, 8) // "F"
Run Code Online (Sandbox Code Playgroud)
打印结果将是
"A"
"B"
"C"
" …Run Code Online (Sandbox Code Playgroud) 我正在设置一个 nginx 服务器。我创建一个用户 nginx 来运行服务器。我在另一个用户胜利者的家里有一些数据。我尝试设置ACL让nginx读取这些数据;这就是我所做的。
数据的位置:
/home/victor/web/folder/folder2/folder3/data
Run Code Online (Sandbox Code Playgroud)
我想让 nginx 读取这些文件,以便我创建一个文件夹
/home/victor/webshare/
Run Code Online (Sandbox Code Playgroud)
我在 victor 文件夹上设置了 ACL
# file: victor
# owner: victor
# group: victor
user::rwx
user:nginx:--x
group::---
mask::--x
other::---
Run Code Online (Sandbox Code Playgroud)
我不想让 nginx 看到 victor 文件夹下的其他内容,所以我将其设置为仅执行。我还在网络共享上设置了 ACL
# file: webshare
# owner: victor
# group: victor
user::rwx
user:nginx:r-x
group::---
mask::--x
other::---
Run Code Online (Sandbox Code Playgroud)
现在,我可以ls/home/victor/webshare/
[nginx@ home]#ls victor/webshare
hello static
Run Code Online (Sandbox Code Playgroud)
为了让 nginx 访问 data 中的文件,我创建了一个静态符号链接。
ln -s /home/victor/web/folder/folder2/folder3/data static
Run Code Online (Sandbox Code Playgroud)
我还设置了 ACL,让 nginx 可以访问数据文件夹;然而,它不起作用。
[nginx@ home]#ls victor/webshare/static
ls: victor/webshare/static: Permission denied
Run Code Online (Sandbox Code Playgroud)
为什么nginx帐户无法读取静态符号链接?如何在不暴露其他重要数据的情况下将数据暴露给 nginx?
我想写一个应用程序,它可以记录我们正在访问的wifi热点位置并在地图中显示它们.但问题是 - 如何获得wifi热点的位置?我想我可以使用wifi信号来获取wifi热点的位置,但第一次可能不是很准确.如果没有其他解决方案,我可以在第一次访问wifi热点时记录GPS的位置.
我试图将ReactiveCocoa的SignalType扩展到一个将导致约束错误的位置扩展到自定义ErrorType的地方,代码如下所示
enum MyError: ErrorType {
// .. cases
}
extension SignalType where Error: MyError {
// my exetensions her
}
Run Code Online (Sandbox Code Playgroud)
但是我一直这样出错
Type 'Error' constrained to non-protocol type 'MyError'
Run Code Online (Sandbox Code Playgroud)
如果您看一下ErrorType定义,这真的很奇怪
public protocol ErrorType {
}
Run Code Online (Sandbox Code Playgroud)
由于它是一个协议,那么为什么编译器会抱怨它是一个non-protocol类型,有什么想法?
我有一个聊天室系统,我想使用MongoDB作为后端数据库.以下是实体:
为了设计模式,我有一些想法:首先,3个集合 - 房间,用户和消息 - 并且在用户和消息文档中有一个父引用.
另一个想法是为每个房间创建集合.如
...
我想如果我可以将文档划分为不同的集合,那么查询会更有效.此外,我可以使用上限集合来限制每个房间中的消息数量.但是,我不熟悉MongoDB.我不确定这样做是否有任何副作用,或者是否存在创建大量集合的性能问题?是否有设计MongoDB架构的指南?
谢谢.
我正在构建一个多用户网络应用程序。每个用户都可以在我的应用程序下拥有自己的网站。我正在考虑如何允许用户修改模板而不存在安全问题?我评估了一些 python 模板引擎。例如,genshi,它是一个非常出色的模板引擎,但是允许用户修改genshi模板可能是危险的。它的语法如下:
<?python
?>
Run Code Online (Sandbox Code Playgroud)
这个语法允许你运行任何你想要 python 能做的事情。我注意到它似乎可以通过传递一些参数来关闭。但仍然存在很多潜在的问题。例如,用户可以访问内置函数和传递变量的方法。例如,如果我将 ORM 对象传递给模板。它可能包含一些我不想让用户触摸它的方法和变量。可能会喜欢这样:
site.metadata.connection.execute("drop table xxx")
Run Code Online (Sandbox Code Playgroud)
所以我的问题是如何允许用户修改其网站的模板而不出现安全问题?任何Python模板引擎都可以使用。
谢谢。
python ×2
acl ×1
android ×1
boost ×1
c++ ×1
changeset ×1
database ×1
deadlock ×1
elixir ×1
gps ×1
history ×1
ios ×1
linux ×1
location ×1
locking ×1
mercurial ×1
mongodb ×1
permissions ×1
postgresql ×1
schema ×1
sql ×1
string ×1
swift ×1
swift2 ×1
swift4 ×1
templates ×1
transactions ×1
web ×1
wifi ×1