小编dan*_*elv的帖子

AWS Lambda和Python的.pyc文件

我试图了解将.pyc文件与Python包一起包含在AWS Lambda中的确切效果.

我能够找到的极少数参考文献说没有必要在包中包含.pyc文件.但是,当我不包含这些文件时,我看到我的Lambda函数会有巨大的性能损失.

尝试在我的软件包中包含一个库(例如Jinja2),当省略它的.pyc文件时,它所用的时间import jinja2总是超过3秒.

当我提供.pyc文件时,第一次执行仍然需要3秒,但之后,它会下降到100-200ms(我想直到函数最终被卸载?).

我发现这个问题可能表明AWS Lambda无法保存自己编译的文件,这有意义吗?

我的问题是 - 是否有关于AWS Lambda上使用Python的.pyc文件的明确信息来源?有没有办法让AWS Lambda保存自己的.pyc文件?或者我应该继续将它们包含在我的包装中?

python performance aws-lambda

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

Sandboxed Mac应用程序耗尽了安全范围的URL资源

我正在开发一个Mac应用程序,它使用NSOpenPanel提示用户输入文件.应用程序是沙箱(在OSX 10.9.4上测试).我注意到如果我打开大量文件(~3000),打开的面板会开始向日志发出错误.如果我尝试在chucks中打开少量文件多次,也会发生这种情况.

在第一次出现错误之后,每次再次使用NSOpenPanel打开文件时,无论文件数量多少,都会再次生成这些错误(直到应用程序关闭).

错误消息如下所示:

TestPanel[98508:303] __41+[NSSavePanel _consumeSandboxExtensions:]_block_invoke: sandbox_consume_fs_extension failed
Run Code Online (Sandbox Code Playgroud)

我试图打开的每个文件一行.

我设法用一个简单的应用程序重现这种行为:一个带有单个按钮的沙盒应用程序调用以下代码:

NSOpenPanel* panel = [NSOpenPanel openPanel];
[panel setAllowsMultipleSelection:YES];
[panel setCanChooseDirectories:NO];
[panel setCanChooseFiles:YES];
[panel beginSheetModalForWindow:[self window] completionHandler:^(NSInteger result) {
    NSLog(@"%lu", [panel.URLs count]);
}];
Run Code Online (Sandbox Code Playgroud)

错误出现在代码到达完成处理程序之前.

似乎我仍然可以从完成处理程序中的面板中获取URL,但它确实污染了系统日志.

编辑:

似乎此问题与NSOpenPanel/NSSavePanel面板没有直接关系.使用drap/drop with files时会发生非常类似的事情.像这样的东西:

- (NSDragOperation)draggingEntered:(id <NSDraggingInfo>)sender {
    ...
    NSPasteboard *pboard = [sender draggingPasteboard];
    if ([[pboard types] containsObject:NSURLPboardType]) {
        NSArray *urls = [pboard readObjectsForClasses:@[[NSURL class]] options:nil];
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

拖动大量文件时会生成以下日志消息("魔术"数字似乎在2900左右):

Consume sandbox extension for itemIdentifier (2937) from pasteboard failed!
Run Code Online (Sandbox Code Playgroud)

与NSOpenPanel一样,在第一次出现之后,每个丢弃的文件都会在日志中生成相同的错误.

编辑2:

@mahal tertin的回复向我指出了正确的方向.问题确实存在于文件数量和安全范围URL资源有限的事实上.

但是,似乎找不到合理的解决方案.问题是,当用户在NSOpenPanel上单击"确定"(或删除拖放感知控件上的文件)时,操作系统已经尝试创建这些安全范围的URL并隐式调用startAccessingSecurityScopedResource您.因此,如果用户尝试打开的文件超过限制,则资源将耗尽,唯一的选择是关闭并重新启动应用程序. …

macos cocoa sandbox objective-c

13
推荐指数
2
解决办法
1038
查看次数

SVG &lt;symbol&gt; 的 refX/refX 属性并相对于其中心放置 &lt;symbol&gt;

根据SVG的符号文档,我可以向其添加refX / refY属性。

如果我理解正确,我可以使用这些属性在符号的坐标系中定义一个参考点,这样当我用<use>元素引用它时,它将相对于该参考点放置(而不是默认的左上角)。

但这些属性似乎并没有做到这一点,或者对符号的位置没有任何影响。我找不到有关这些属性(对于符号)或它们是否在任何浏览器中受支持的任何其他信息。

这就是 refX/refY 实际工作的方式吗?它们是否在任何浏览器中实现?

如果没有,是否有其他方法可以<use>在不提前知道/计算其实际宽度/高度的情况下,将具有相对于符号中心的元素的符号放置?

browser svg

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

AV 基础:AVCaptureVideoPreviewLayer 和帧持续时间

我正在使用 AV Foundation 处理来自摄像机的帧(iPhone 4s、iOS 6.1.2)。我正在根据 AV Foundation 编程指南设置 AVCaptureSession、AVCaptureDeviceInput、AVCaptureVideoDataOutput。一切都按预期进行,我能够在captureOutput:didOutputSampleBuffer:fromConnection:代表中收到帧。

我还有一个这样的预览图层集:

AVCaptureVideoPreviewLayer *videoPreviewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:_captureSession];
[videoPreviewLayer setFrame:self.view.bounds];
videoPreviewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[self.view.layer insertSublayer:videoPreviewLayer atIndex:0];
Run Code Online (Sandbox Code Playgroud)

问题是,我的帧处理不需要每秒 30 帧,而且无论如何我也无法如此快地处理它们。所以我使用此代码来限制帧持续时间:

// videoOutput is AVCaptureVideoDataOutput set earlier
AVCaptureConnection *conn = [videoOutput connectionWithMediaType:AVMediaTypeVideo];
[conn setVideoMinFrameDuration:CMTimeMake(1, 10)];
[conn setVideoMaxFrameDuration:CMTimeMake(1, 2)];
Run Code Online (Sandbox Code Playgroud)

这工作正常并限制captureOutput委托接收的帧。

但是,这也限制了预览层的每秒帧数,并且预览视频变得非常无响应。

我从文档中了解到,帧持续时间是在连接上独立设置的,并且预览层确实具有不同的 AVCaptureConnection。检查混合/最大帧持续时间[videoPreviewLayer connection]表明它确实设置为默认值(1/30 和 1/24),并且与 AVCaptureVideoDataOutput 连接上设置的持续时间不同。

那么,是否可以仅在帧捕获输出上限制帧持续时间,而在预览视频上仍然看到 1/24-1/30 帧持续时间?如何?

谢谢。

cocoa-touch objective-c avfoundation ios

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

JSDoc 重载函数不适用于 TypeScript

我正在使用其他问题和在线建议的 JSDoc 重载语法,不确定我是否正确,但这里是:

/**
 * @param {string} param
 * @returns {'string result'}
 *//**
* @param {number} param
* @returns {'number result'}
*/
function overloaded(param) {
  switch (typeof param) {
    case 'string': return 'string result';
    case 'number': return 'number result';
  }

  throw new Error(`Invalid type: ${typeof param}`);
}

overloaded('seven');
overloaded(7);
Run Code Online (Sandbox Code Playgroud)

string result如果输入参数的类型为 ,则此函数应准确返回,如果输入参数的类型为string,则应number result准确返回number。在普通的 TypeScript 中,这将是:

function overloaded2(param: string): 'string result';
function overloaded2(param: number): 'number result';
function overloaded2(param: string | number): 'string result' | …
Run Code Online (Sandbox Code Playgroud)

javascript jsdoc typescript visual-studio-code

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

当光标在视图外部时,在NSView中接收触摸事件

在我的应用程序中,我需要响应自定义NSView中的触控板触摸事件(touchesBeganWithEvent / touchesMovedWithEvent / touchesEndedWithEvent),我的代码可以正常工作。但是,当触摸开始时光标位于视图之外并且在这种情况下NSView不会收到这些事件时,我也需要这样做。

我正在探索的一个方向是子类化NSApplication并覆盖sendEvent。但是我不确定如何将适当的消息发送到我的NSView。仅仅通过sendEvent将这些事件转发到NSWindow似乎不起作用。

或者,还有更好的方法?有任何想法吗?

谢谢。

macos cocoa objective-c

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

使用绑定和格式化程序驯服 NSTextField 以使其正常运行

我想要一个需要接受一些用户输入的窗口,为此我有以下内容:

  • NSWindow从 nib 加载NSWindowController,这也是它的委托
  • 几个 的NSTextFieldNSNumberFormatter
  • 使用绑定,NSTextField' 被绑定到 中的整数属性NSWindowController(为了简单起见,我没有使用NSObjectController它,但可以根据需要添加它)
  • 用户完成后单击“完成”NSButton以接受更改并关闭窗口
  • 在控制器的windowShouldClose:方法中进行最终验证并决定是否可以关闭窗口

我想要实现的目标非常简单,但 Cocoa 坚持让这个变得具有挑战性:

  • NSTextField应该只接受一个数字作为其最终值,该值也大于零
  • 如果用户尝试插入非数字值或零,则应该出现警报,提示用户修复其输入
  • 当用户点击完成时:
    • 进行其他自定义验证(例如比较一个数字是否比另一个数字大)
    • 如果值正确,接受更改并关闭窗口(“模型”应该已经通过绑定更新为值)
    • 如果值不正确,则应提示用户选择是否修复条目(使窗口保持打开状态)或关闭窗口并放弃更改

够简单的。NSNumberFormatter 应该已经涵盖了大部分任务,并且与绑定一起,这应该很容易实现。

问题#1:

我找不到一种方法来更改当NSTextField失去焦点时在警报中向用户显示的错误消息,并且该值不正确,而是更具描述性。有什么办法可以做到这一点吗?或者我需要以某种方式实现我自己的 NSFormatter ?

问题#2:

当用户更改 中的值NSTextField并单击“完成”按钮时,Cocoa 不会将此视为更新NSTextField绑定模型值的触发器。这可能是标准的 OSX 行为,但没有任何意义。

我能够通过调用[window makeFirstResponder:nil]“完成”按钮的操作来强制NSTextField失去焦点并更新值来解决此问题,但我想知道这是否是实现此目的的正确方法。

问题#3:

这就是我真正摸不着头脑的地方。如果用户在 中输入不正确的值(例如非整数)并NSTextField单击“完成”按钮,则验证不会启动,并且NSTextField在模型未更新时将继续具有不正确的值。

我希望仍会显示“无效”警报,并且我有一些地方可以插入代码来决定是否关闭窗口,但我找不到任何方法来覆盖此行为。

达到这些要求的标准做法应该是什么?我是否应该放弃格式化程序和/或绑定,而只是使用操作手动完成这一切?

macos cocoa objective-c

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

拖动调整NSView(或其他对象)的大小

我正在尝试构建一个应用程序,允许用户使用可以调整大小的矩形边框来指定图像的多个区域.

到目前为止,我有一个NSScrollView包含一个,NSImageView所以用户可以放大图像并按需要滚动.我目前的想法是,我可以使用NSViews一种方式来提供一个边界框,用户可以定位和调整大小以覆盖所需的区域,将NSView帧转换为图像大小的百分比,然后存储这些值以供以后使用.

有一种addAreaToImage方法可以添加NSViewNSScrollView用户当前所在位置的中心位置.我想要的是让用户能够点击并拖动该区域的角落,以便在任何他们想要的地方调整大小/移动它.如果愿意,可以选择一个实时边界框.

阅读完文档之后,与拖动相关的大部分内容都是让NSView成为拖动其他内容(如图像)或调整大小的地方,因为调整了superview,这些都不是我想要做的.

我担心的是,这个问题的答案(或一组能够让我能够推出自己的解决方案的答案)是如此基本,以至于没有人想到它们,谷歌的最后几天几乎已经确认了为了我.

我来自iOS开发,所以这不是一个全新的领域,但NSView和UIView似乎有足够的差异到目前为止彻底迷惑我.

macos cocoa objective-c

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

在初始化闭包时访问“self”

在 Swift 3 中,dispatch_once 函数被移除,迁移指南建议使用初始化闭包:

let myGlobal = { ... global 在对闭包的调用中包含初始化 ... }()

_ = myGlobal // 使用 myGlobal 将仅在第一次使用时调用初始化代码。

我想从初始化闭包中访问“self”实例变量,如下所示:

class SomeClass {
    var other = SomeOtherClass()
    
    let initialize: () = {
        // self.other - this doesn't work, complains about unresolved identifier 'self'
        // how to access self.other here?
    } ()

    func doSomething() {
        // initialize will only be called once
        initialize
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么在闭包中无法访问“自我”,以及如何使其成为?

swift swift3

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

Google 的 API javascript 示例中的脚本 async/defer/onload 用法

在 Google 为其 API 提供的各种 javascript 示例(例如此处)中,他们使用以下代码从 html 加载脚本:

<script async defer src="https://apis.google.com/js/api.js" 
    onload="this.onload=function(){};handleClientLoad()" 
    onreadystatechange="if (this.readyState === 'complete') this.onload()">
</script>
Run Code Online (Sandbox Code Playgroud)

我的理解是async/defer告诉浏览器什么时候加载和执行脚本并且彼此有些矛盾。我有几个问题:

  1. 在这种情况下使用async和是什么意思defer
  2. 为什么 Google 选择使用这种技术?它有任何性能或其他好处吗?
  3. onload事件中,为什么他们function(){};在调用之前先为事件分配一个空函数 ( ) handleClientLoad()
  4. 如果我想将整个 javascript 移动到一个单独的 js 文件,加载这两个脚本的最佳方法是什么?由于新的js文件会依赖api.js,不能异步加载?

谢谢。

javascript google-api

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