问题标签 [mandelbug]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - WakeLock 相关的 Mandelbug:WakeLock.acquire() 总是成功吗?
问题
我已经为 Android 开发了很长一段时间了。我开发的其中一个程序大量使用了WakeLocks。它通常是完美的(通常一次几天或几周,这是程序的要求),但我很少注意到这段代码中的特殊行为:
wherehasWakeLock()
简单地返回结果(wakeLock != null && wakeLock.isHeld())
并wakeLockManager.newPartialWakeLock(DEBUG_TAG)
封装了标准的“获取 PowerManager 然后返回唤醒锁”代码。出于测试的目的,断言语句是 JUnit 断言方法,所以我认为我们可以假设它们是正确的。
代码的问题是:最后的断言assertTrue(hasWakeLock())
- 似乎每隔几周就会失败一次,几乎没有解释。这意味着我在这里有三个可能的问题:(1)从未从 PowerManager 中检索到唤醒锁(2)我有一个并发问题,在极少数情况下,它在后置条件之前但在调用之后才生效acquire()
,或者(3)acquire()
有时是错误的。
问题调查
如上所述,我正在调查/已调查可能发生的三个潜在问题:
假设 1:未返回唤醒锁:
如果是这种情况,那么我会看到一个空指针异常。不可能这样。
假设 2:我有一个并发问题:
刚刚对所有涉及获取和释放的地方进行的形式验证证明wakeLock
强烈地让我相信情况并非如此。如果我的证明有问题,那么我可能会遇到并发问题,但它确实很隐蔽且很难找到。
假设 3: WakeLock.acquire() 是错误的,尽管文档说它有时可能无法获取锁:
我不喜欢这个假设,因为对于所有的 Android 用户,除了我自己之外,肯定有人已经注意到了这一点,而且几乎总是开发人员的代码,而不是库或操作系统代码有问题。再一次,奇怪的事情发生了,这可能是一个真正的 Android 错误,尽管很少出现。如果这个假设是真的,那么 acquire() 根本就没有获得唤醒锁,这将解释我所看到的行为。
那么 StackOverflow,是什么导致了这个问题?你觉得哪里不对?我是否遗漏了一些明显的东西,或者这可能是 Android 唤醒锁的真正问题?
python - 使用 NumPy 和 Pillow 绘制 Mandelbrot 时,程序输出明显的噪声
以前,我使用海龟在 python 中创建了一个 Mandelbrot 生成器。现在,我正在重新编写程序以使用 Python Imaging Library,以提高速度并减少对图像大小的限制。
但是,下面的程序只输出 RGB 废话,几乎是噪声。我认为这与 NumPy 和 PIL 处理数组的方式不同有关,因为在执行和时说l[x,y] = [1,1,1]
wherel = np.zeros((height,width,3))
不仅仅使 1 个像素变白。img = Image.fromarray(l)
img.show()
更新 1:
我意识到这个程序中的一个主要错误(我敢肯定有很多)是我使用 x,y 坐标作为复系数!所以,0 到 100 而不是 -1.25 到 1.25!我已经更改了这一点,因此代码现在使用变量 a,b 来描述它们,以我从海龟版本中的一些代码中窃取的方式递增。上面的代码已相应更新。由于当前已注释掉平滑着色算法代码以进行调试,因此该inf
变量已减小到2
大小。
更新 2:
我在一位优秀用户的帮助下编辑了 numpy 索引。当设置为 200 x 200 时,程序现在输出:
正如你所看到的,它确实显示了一些数学形状,但却充满了所有这些奇怪的红色、绿色和蓝色像素!为什么这些会在这里?我的程序只能将 RGB 值设置为默认值[1,1,1]
或将其保留为默认值[0,0,0]
。不可能是[1,0,0]
这样的——这一定是一个严重的缺陷……
更新 3:
我认为 NumPy 和 PIL 的集成存在错误。如果我l = np.zeros((100, 100, 3))
先声明然后声明l[0,0,:] = 1
,最后声明img = Image.fromarray(l)
& img.show()
,这就是我们得到的:
在这里,我们得到一系列彩色像素。这需要另一个问题。
更新 4:
我不知道以前发生了什么,但似乎有一个np.uint8
数组,Image.fromarray()
使用 0-255 的颜色值。有了这个智慧,我离了解这只曼德虫又近了一步!
现在,我确实得到了一些模糊的数学知识,但它仍然输出奇怪的东西。
这个点就是全部......如果我更改为np.uint16
,我会得到更奇怪的东西,我想是由于不同的字节形状和编码方案。