小编Gle*_*Low的帖子

观察CALayer中的动画属性更改

我有一个CABasicAnimation动画的属性,CALayer例如bounds.origin.我希望能够观察到随着时间的推移而变化的属性,但还没有找到一种100%有效的方法.

  1. 我试图在使用国际志愿者组织(键值观察)presentationLayerbounds.origin的keyPath.系统抱怨在释放观察者之前释放了对象,这使我认为表示层只是临时的.观察presentationLayer.bounds.origin为密钥路径不起作用.

  2. 我尝试在另一个图层上创建一个属性并为其设置动画,例如通过声明@property@dynamic在该图层上创建它.但是,只有在访问表示层时(例如,在动画结束时)才会更改此新属性,但在动画运行时它似乎不会更新.

  3. needsDisplayForKey在#2中使用了属性,它在动画期间触发更新,但对于这些问题:

    • 它仅在CALayer具有非零帧时才有效.由于该层可能是CAShapeLayer或子类,因此它可能具有零帧.
    • 看起来它触发setNeedsDisplay了该层,但由于我实际上并没有绘制该层只监视属性更改,我不想让它重绘.
  4. 我试过安排一个NSTimer,并在定时器回调样本中presentationLayer.这也适用于这些问题:

    • 计时器可能与动画更新略有不同步.
    • 由于偶尔会有原始动画被另一个动画抢占,因此在动画运行时以及仅在动画运行时才能实际触发定时器.

有什么建议?所有这些都将在iPhoneOS 3.0/3.1上.

iphone macos core-animation objective-c calayer

27
推荐指数
2
解决办法
4510
查看次数

正确解码zip条目文件名 - CP437,UTF-8或?

我最近写了一个名为zipzap的zip文件I/O库,但我正在努力正确解码任意zip文件中的zip条目文件名.

现在,PKWARE规范指出:

D.1 ZIP格式历史上只支持原始的IBM PC字符编码集,通常称为IBM Code Page 437 ...

D.2如果未设置通用位11,则文件名和注释应符合原始ZIP字符编码.如果设置了通用位11,则文件名和注释必须使用UTF-8存储规范定义的字符编码格式支持Unicode标准版本4.1.0或更高版本...

这意味着符合的zip文件将文件名编码为CP437,除非设置了EFS位,在这种情况下文件名为UTF-8.

不幸的是,似乎许多zip工具要么没有正确设置EFS位(例如Mac CLI,GUI zip),要么使用其他一些编码,通常是默认的系统编码(例如WinZip?).如果您知道WinZip,7-Zip,Info-Zip,PKZIP,Java JAR/Zip,.NET zip,dotnetzip等如何编码文件名以及他们将"版本制作"字段设置为压缩时,请告诉我.

特别是,Info-Zip在解压缩时会尝试这样做:

  • 文件系统= MS-DOS(0)=> CP437
    • 除外:版本= 2.5,2.6,4.0 => ISO 8859-1
  • 文件系统= HPFS(6)=> CP437
  • 文件系统= NTFS(10)和版本= 5.0 => CP437
  • 否则,ISO 8859-1

如果我想支持检查或从任意zip文件中提取并在没有EFS标志的情况下合理地尝试文件名编码,我还能找到什么?

zip jar 7zip zipfile winzip

10
推荐指数
2
解决办法
6731
查看次数

如何通过decltype声明迭代器的值

在C++ 98中,我通常使用以下命令在迭代器的值类型中声明一个变量:

typename std::iterator_traits<Iterator>::value_type value;
Run Code Online (Sandbox Code Playgroud)

在C++ 11中我们有decltype并且我认为推导值类型的最简单方法是:

decltype(*iterator) value;
Run Code Online (Sandbox Code Playgroud)

不幸的是,对于大多数迭代器,*iterator的类型是value_type&而不是value_type.任何想法,没有类型修改类,如何按摩上面产生value_type(而不是任何参考)?


我不认为这个问题是不合理的,因为以下内容相当稳健但最终会创建另一个变量.

auto x = *iterator;
decltype(x) value;
Run Code Online (Sandbox Code Playgroud)

另请注意,我真的想要推导出的类型,而不仅仅是一个实例,例如,如果我想声明这些值的std :: vector.

c++ iterator decltype type-traits c++11

8
推荐指数
1
解决办法
3188
查看次数

libuv工作线程或工作队列健康检查?

在libuv中,最终可能会因为工作量太大或代码错误而将工作线程占用.是否有一个简单的函数可以检查工作线程或线程队列的运行状况?它不一定是100%确定性的,毕竟不可能确定工作线程是挂在慢速代码还是无限循环上.

因此,以下任何启发式方法都会很好:

  • 尚未处理的排队项目数.如果这个太大,则可能意味着工作线程忙或挂.

  • libuv是否有任何线程查杀机制,如果工作线程在n秒内没有检查,它会被终止吗?

c++ events multithreading node.js libuv

7
推荐指数
1
解决办法
940
查看次数

强制C++ 11 lambda捕获变量

假设复制变量具有所需的副作用.我想声明一个复制变量但不使用该变量的lambda.这样做的最低要求是什么?

Copiable copyable;

auto lambda1 = [=](){};
auto lambda2 = [copyable](){};
auto lambda3 = [=](){ copyable; }
auto lambda4 = [=](){ volatile copy = copyable; }
Run Code Online (Sandbox Code Playgroud)

lambda1使用隐式捕获,并且由于正文没有提及copyable,我不相信它实际上是复制它.

lambda2使用显式捕获,似乎根据这个,它应该通过副本捕获.是否允许编译器删除副本?有关此问题的另一个讨论,请参阅

lambda3使用隐式捕获,但身体提到copyable.这是否构成了一种使用方式copyable

lambda4使用隐式捕获并强制另一个volatile副本.我确信这实际上会有效,但它的副本数量超过了最低限度.

激励案例:我需要在完成任意数量的lambda调用后运行清理,可能在不同的线程中.我可以通过使用一个std::shared_ptr运行清理的自定义删除器来实现这一点,并以某种方式将其传递给每个lambda.然后,当所有共享ptrs超出范围时,清理将运行.

编辑:lambda3并且lambda4错过了=隐式捕获.

c++ lambda c++11

7
推荐指数
1
解决办法
1329
查看次数

zip文件可以稀疏/不连续吗?

zip文件格式以中央目录部分结尾,然后指向文件中的各个zip条目.这似乎允许zip条目出现在zip文件本身的任何地方.实际上,自解压zip文件就是一个很好的例子:它们以可执行文件开头,所有zip条目都在可执行字节之后.

问题是:zip文件格式是否真的允许稀疏或非连续的zip条目?例如,如果zip条目之间有空或其他未说明的字节?最终的PK笔记和维基百科文章似乎都允许这样做.所有/大多数典型的zip实用程序都可以使用这种稀疏的zip文件吗?

用例是这样的:我希望能够删除或替换zip文件中的zip条目.为此,典型的minizip等库要求您复制整个zip文件,而不是复制已删除或替换的zip条目,这似乎浪费和缓慢.

过度分配,例如1.5x的条目存储不是更好,然后当删除或替换条目时,你可以找出未分配的字节在哪里并直接使用它们?使用1.5x存储意味着如果zip条目线性增长,则重新分配也应该线性地摊销.它类似于文件系统块分配,但可能不那么复杂.

这也有助于很多基于zip的文件格式.而不是必须在某个地方(甚至在内存中)使用临时解压缩的文件进行编辑/更改然后必须将批次重新压缩回文件格式的某个临时目录,这将减少重新拉链和重写部分zip的需要文件.

是否有任何C/C++库可以做到这一点?

c c++ compression zip archive

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

tbb::concurrent_unordered_map::unsafe_erase 是否会使任何现有的迭代器失效?

我看到它tbb::concurrent_unordered_map非常接近,std::unordered_map同时对于并发来说是安全的。我也知道这unsafe_erase不是并发安全的insert等等。迭代器文档还指出任何现有的迭代器仍然有效insertfind等等。

问题是,除了要求擦除的迭代器之外是否unsafe_erase会使任何其他迭代器失效?

std::unordered_map并且std::map肯定有这种行为,但它没有在concurrent_unordered_map任何地方的文档中指定。

c++ concurrency hashmap tbb thread-safety

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

等待Kubernetes或Google Container Engine中的作业/ pod完成

在Kubernetes或Google Container Engine中等待作业或pod完成的最佳方法是什么?

特别是,最好是通知而不是轮询状态kubectl,但我会对一个相当有效的循环感到满意,而且裂缝之间没有任何滑动.本质上,我喜欢相当于普通的,docker run因为直到命令终止才会阻塞,但在这种情况下我不想直接使用docker.

我看了Github问题#1899,但它看起来尚未解决.

docker kubernetes google-kubernetes-engine

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

iOS 应用程序的 Google Cloud Platform API 密钥限制如何运作?

根据:

https://cloud.google.com/speech/docs/common/auth

我们可以为 GCP 资源(例如 Google Maps、Speech、Translate)创建一个 API 密钥,该资源受“iOS 应用”限制为特定包 ID。原则上这很好,但 GCP 是如何实现这一点的呢?GCP 如何确定客户端的包 ID,因为只有客户端只向 GCP 发出标准 HTTP 请求——大概它没有在标头中报告其包 ID?

我想为 API 密钥启用此功能,但不想突然关闭我的 iOS 客户端,因为不知何故它没有报告其包 ID。

google-translate google-maps-api-3 ios google-cloud-platform google-speech-api

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

Google Container Engine上的跨区域负载均衡+路由

如何在Google Container Engine上实现跨区域负载平衡?

我将在几个地区的每个区域拥有一个Kubernetes集群,我需要将流量从单个域名路由到地理上最接近的集群.

我调查过的一些选项:

  • Kubernetes LoadBalancers似乎仅限于一个集群.
  • 我不确定你如何让Kubernetes Ingress与不同的集群交流.(听起来这个对象是由Compute Engine HTTP负载平衡器支持的.)
  • 与暴露的集群通信的计算引擎HTTP负载均衡器听起来是正确的,但我引用的链接似乎有一些旧的术语gcloud beta.
  • 而不是所有这些,我真的可以让Kubernetes集群跨越不同的地区吗?

现在,如果我想将不同的URL路径路由到pod中的不同容器,我该怎么做?如果它处于Ingress或HTTP负载均衡器级别,那么我没有足够的粒度来处理特定容器.这是否意味着我必须为每个不同的URL路径使用不同的pod +服务?

load-balancing google-compute-engine docker kubernetes google-kubernetes-engine

3
推荐指数
1
解决办法
1231
查看次数