小编F.X*_*.X.的帖子

NSURLConnection didReceiveData未被调用

我已经阅读了大量的消息再次说同样的事情:当你使用NSURLConnection时,不会调用委托方法.我理解Apple的文档是不完整的并且引用了弃用的方法,这是一种耻辱,但我似乎无法找到解决方案.

请求代码在那里:

// Create request
NSURL *urlObj = [NSURL URLWithString:url];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:urlObj cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];
[request setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"];

if (![NSURLConnection canHandleRequest:request]) {
    NSLog(@"Can't handle request...");
    return;
}

// Start connection
dispatch_async(dispatch_get_main_queue(), ^{
    self.connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; // Edited
});
Run Code Online (Sandbox Code Playgroud)

...代理方法的代码在这里:

- (void) connection:(NSURLConnection *)_connection didReceiveResponse:(NSURLResponse *)response {
    NSLog(@"Receiving response: %@, status %d", [(NSHTTPURLResponse*)response allHeaderFields], [(NSHTTPURLResponse*) response statusCode]);
    self.data = [NSMutableData data];
}

- (void) connection:(NSURLConnection *)_connection didFailWithError:(NSError *)error {
    NSLog(@"Connection failed: %@", error); …
Run Code Online (Sandbox Code Playgroud)

objective-c nsurlconnection ios

6
推荐指数
2
解决办法
8821
查看次数

iOS CGPath性能

UPDATE

通过使用OpenGL绘制所有内容,我克服了CG的局限性.还是有一些小故障,但到目前为止它工作得更快,更快.

一些有趣的观点:

  • GLKView:这是一个特定于iOS的视图,它在设置OpenGL上下文和渲染循环方面有很大帮助.如果你不在iOS上,我担心你是独自一人.
  • 着色器精度:当前版本的OpenGL ES(2.0)中着色器变量的精度为16位.这对我来说有点低,所以我模拟了32位算术,其中包含16位变量对.
  • GL_LINES:OpenGL ES可以原生地绘制简单的线条.不是很好(没有关节,没有帽子,请看下面屏幕截图顶部的紫色/灰色线条),但为了改善你必须编写一个自定义着色器,将每一行转换成三角形条并祈祷它作品!(据说当浏览器告诉你Canvas2D是GPU加速时,浏览器会这样做)

                                                      示例渲染

  • 画得尽可能少.我认为这是有道理的,但你可以经常避免渲染事物,例如,在视口之外.
  • OpenGL ES 不支持填充多边形,因此您必须自己进行测试.考虑使用iPhone-GLU:这是MESA代码的一个端口,它非常好,虽然它有点难以使用(没有标准的Objective-C接口).

原始问题

我正在尝试在drawRect滚动视图的方法中绘制大量CGPath(通常超过1000),当用户用手指平移时刷新.我在浏览器的JavaScript中使用相同的应用程序,我正在尝试将其移植到iOS本机应用程序.

iOS测试代码是(100行操作,path是预先制作的CGMutablePathRef):

- (void) drawRect:(CGRect)rect {
    // Start the timer
    BSInitClass(@"Renderer");
    BSStartTimedOp(@"Rendering");

    // Get the context
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 2.0);
    CGContextSetFillColorWithColor(context, [[UIColor redColor] CGColor]);
    CGContextSetStrokeColorWithColor(context, [[UIColor blueColor] CGColor]);
    CGContextTranslateCTM(context, 800, 800);

    // Draw the points
    CGContextAddPath(context, path);
    CGContextStrokePath(context);

    // Display the elapsed time
    BSEndTimedOp(@"Rendering"); …
Run Code Online (Sandbox Code Playgroud)

drawing drawrect ios

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

Linux上的Firefox使用Canvas2D表现不佳

在使用Canvas2D做一些相当密集的渲染时,我只是特别难以调试.我使用各种各样的东西,从globalCompositeOperation多个屏幕外画布,中间有一些drawImage魔法.

它的工作完美无缺:

  • Chrome(26)[OSX 10.7.5]
  • Safari(6.0.2)[OSX 10.7.5]
  • Firefox(18和20极光)[OSX 10.7.5]
  • Chrome(24)[Windows 7]
  • Firefox(12)[Windows 7]
  • 铬(24)[Archlinux,Gnome 3]

编辑:为Windows 7添加了测试.奇怪的是,它适用于FF12(我的双启动时有旧版本),但升级到FF18后有一定的性能影响.它在Windows上并不像在Linux上那么糟糕,而且OSX上的相同版本完美无瑕.回归可能吗?

出于某种原因,在Firefox和Linux上(我尝试了18和20 Aurora),在同时拖动和渲染时我的渲染性能很差.

如果我发射并忘记动画,它与Chrome/Safari相同,但如果我拖动并渲染,我经常最终只能在释放拖动后看到结束帧.

  • requestAnimationFrame鼠标事件处理程序上的直接呈现都不起作用.
  • 在分析之后,报告的渲染部分的时序在可接受的范围内(在绝对最差的情况下最多100ms),并且绝对不符合我在屏幕上看到的内容.
  • 我尝试通过删除一些东西减少负载,最终报告的渲染时间低于15ms,但我看到的并没有改变.

令我感到困惑的是,除了 Linux上的Firefox 之外,它几乎可以在其他任何地方使用.知道我应该在哪里看,错误报告或我的问题的解决方案?

performance html5 canvas

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

在Cython中创建PyCObject指针

一些SciPy函数(如scipy.ndimage.interpolation.geometric_transform)可以将指向C函数的指针作为参数,以避免在输入数组的每个点上调用Python可调用.

简而言之 :

  • my_function在C模块中定义一个名为somewhere 的函数
  • 返回一个PyCObject与&my_function指针和(任选地)一个void*指针到围绕通过一些全局数据

相关的API方法是PyCObject_FromVoidPtrAndDesc,您可以在C中阅读扩展ndimage以查看它的实际效果.

我对使用Cython来保持我的代码更易于管理非常感兴趣,但我不确定我应该如何创建这样的对象.任何,好吧......指针?

c python cython scipy

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

忽略ActiveRecord中的列

我正在尝试将旧的,传统的Rails 3应用程序合并到更新的Django应用程序中.

这两个应用程序曾经使用过不同的数据库,这些数据库被合并到两个应用程序都可用的唯一数据库中 Django应用程序将从迁移开始慢慢接管旧Rails应用程序的功能.

Django在其迁移中强制执行严格的数据库约束(例如,NOT NULL具有默认值的字段).两个应用程序使用的表上的任何新字段都将阻止Rails更新该表上的记录,因为ActiveRecord强制插入NULL值而不是默认值.

由于我们不会向Rails应用程序添加新功能,因此我希望它坚持使用字段列表并忽略任何新添加的字段.

在以下的答案必须使用default_scope中断其它的范围,所以我想,以避免它.

触发器是一个选项,但我并不热衷于在Django应用程序中添加cruft,只是为了处理Rails应用程序中的遗留代码.

因此:我可以手动定义模型中的列,而不是让ActiveRecord自动检查数据库吗?

postgresql activerecord ruby-on-rails-3

6
推荐指数
2
解决办法
2303
查看次数

Unicode和Javascript:无效的字节序列

一些字节序列在Unicode编码中显然是无效的,我知道某些语言(Python for one)在发生这种情况时会抛出错误.

我的问题是:在一个XMLHttpRequest或多个中接收这样的序列时,Javascript会发生什么XDomainRequest?结果字符串是:

  1. 发生这种情况时会被截断吗?
  2. 跳过坏序列并从下一个字节开始?
  3. 继续解码,只显示替换 字符?

如果是3,那么该charCodeAt函数是否返回有效的字符代码?

javascript unicode utf-8

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

调试Python/NumPy内存泄漏

我试图在使用C/Cython扩展和Python的Python/NumPy程序中找到令人讨厌的内存泄漏的起源multiprocessing.

每个子进程处理一个图像列表,并且每个子进程将输出数组(通常大约200-300MB)通过a Queue发送到主进程.相当标准的地图/减少设置.

正如你可以想象的那样,内存泄漏可能会占据巨大的数量,并且当他们只需要5-6GB就会让多个进程快乐地超过20GB内存......这很烦人.

  • 我已经尝试通过Valgrind运行Python的调试版本,并对内存泄漏进行四重检查,但没有发现任何内容.

  • 我检查了我的Python代码是否悬挂了对我的数组的引用,还使用了NumPy的分配跟踪器来检查我的数组是否确实已经发布.他们是.

我做的最后一件事就是将GDB附加到我的一个进程上(这个坏男孩现在正以27GB RAM运行并计数)并将大部分堆转储到磁盘上.令我惊讶的是,转储的文件充满了零!大约7G的零值.

这是Python/NumPy中的标准内存分配行为吗?我是否遗漏了一些明显的东西,可以解释为什么没有这么多的记忆?如何正确管理内存?


编辑:为了记录,我正在运行NumPy 1.7.1和Python 2.7.3.

编辑2:我一直在监视进程strace,似乎它一直在增加每个进程的断点(使用brk()系统调用).

CPython实际上是否正确释放内存?那么C扩展,NumPy数组呢?谁决定何时调用brk(),是Python本身还是底层库(libc,......)?

下面是一个带有注释的strace日志示例,来自一次迭代(即一个输入图像集).请注意,断点不断增加,但我确保(在objgraph)Python解释器中没有保留有意义的NumPy数组.

# Reading .inf files with metadata
# Pretty small, no brk()
open("1_tif_all/AIR00642_1.inf", O_RDONLY) = 6
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9387fff000
munmap(0x7f9387fff000, 4096)            = 0
open("1_tif_all/AIR00642_2.inf", O_RDONLY) = 6
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f9387fff000
munmap(0x7f9387fff000, 4096)            = 0
open("1_tif_all/AIR00642_3.inf", O_RDONLY) = 6
mmap(NULL, …
Run Code Online (Sandbox Code Playgroud)

python memory-leaks numpy scipy objgraph

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

在ActiveRecord 3中添加自定义SELECT

我试图使用自定义查询的结果(两个地理点之间的距离)作为模型属性.最终目标是能够使用该列过滤和排序行,例如:

Model.with_distance(point).order(:distance).first
Run Code Online (Sandbox Code Playgroud)

我最初以为我可以select在范围内使用; 这是一个没有消毒的较短版本:

scope :with_distance, ->(point) { select("ST_DISTANCE(models.point_in_model, ST_GeographyFromText('#{point.to_s}')) AS distance") }
Run Code Online (Sandbox Code Playgroud)

但是,该范围仅选择distance列,而不检索模型属性:

> Model.with_distance(point)
[#<Model >, #<Model >,...]
Run Code Online (Sandbox Code Playgroud)

添加models.*到select调用可以解决问题,代价是强制检索每个查询中的整行并忽略其他select调用.

如何添加SELECT子句而不是替换所有子句?

postgresql activerecord postgis ruby-on-rails ruby-on-rails-3.2

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

在Scala中调用基于模板类型的方法

我正试图找出一种从Scala调用Java API的方法.基本上,有一个ContentValues是有几个类似的方法对象getAsString,getAsLong每个都具有各自不同的返回类型.

我可以换ContentValues入另一个对象,以便我可以添加一个根据T get[T]调用正确getAsXXX方法的方法吗?

我尝试了什么(没有用,抱怨含糊不清的隐式解决方案):

object SContentValuesConversions {

  case class SContentGetter[ScalaType](val check: String => Boolean, val getter: String => ScalaType) {
    def getTyped(key: String): Option[ScalaType] = {
      if (!check(key)) None
      else Some(getter(key))
    }
  }

  implicit def SIntContentValues(cv: ContentValues) =
    SContentGetter((cv containsKey _), (cv getAsInteger _))

  implicit def SLongContentValues(cv: ContentValues) =
    SContentGetter((cv containsKey _), (cv getAsLong _))

  implicit def SStringContentValues(cv: ContentValues) =
    SContentGetter((cv containsKey _), (cv getAsString _))
}
Run Code Online (Sandbox Code Playgroud)

generics scala

4
推荐指数
1
解决办法
543
查看次数

Matplotlib和多处理RuntimeError

我正在尝试一起使用多处理和matplotlib.

我正在创建一个标准Pool,添加工作apply_async并使用apply_async回调函数更新GUI ,该函数在Pool的父进程上运行(我验证了这一点os.getpid()).示例:

from pylab import *
from numpy import *
from numpy.random import random
from multiprocessing import Pool

# Output image
global out_all
out_all = zeros((256, 256))

# Only does something to in_image, doesn't access anything else
def do_work(in_image):
    for x in xrange(100000):
        out_image = in_image[::-1, ::-1]
    return out_image

# Update the output image and display if needed
def do_update(out_image):
    global out_all
    print ("Updating")
    out_all += out_image
    clf()
    imshow(out_all)
    show()

# …
Run Code Online (Sandbox Code Playgroud)

python tk-toolkit matplotlib multiprocessing

4
推荐指数
1
解决办法
7953
查看次数