Fix bug when scaling canvas with CSS

Previously, setting the canvas width and height via CSS "width" and "height" properties
would create a scale multiplier that SignaturePad did not account for. This caused the
line to show up offset from where the user attempted to draw.
To reproduce, open in browser and set
canvas {
    width: 200px;
    height: 100px;
}

with those widths and heights differing from the actual canvas width and height. Then
attempt to draw.
With this commit, the scale multiplier is taken into account, and scaling the canvas with
CSS works just fine, with drawn lines appearing directly under the cursor.
STILL NEEDS MINIFICATION

Does the demo app also have this issue? Could you prepare a demo that reproduces this issue e.g. on jsfiddle?

The demo app doesn't display the bug because of the window.onresize that
you set in the app.js, which resizes the actual canvas.
Resizing the canvas like SignaturePad's app.js won't work for my
application, since the saved images need to be a certain dimension, and I'm
using CSS to fit SignaturePad into a responsive layout.
Here's the bug in action:
http://jsfiddle.net/7v31o00t/
On Sat, Apr 25, 2015 at 4:39 AM, Szymon Nowak<EMAIL_ADDRESS>wrote:

Does the demo app http://szimek.github.io/signature_pad/ also have this
issue? Could you prepare a demo that reproduces this issue e.g. on jsfiddle?
—
Reply to this email directly or view it on GitHub
https://github.com/szimek/signature_pad/pull/100#issuecomment-96157758.

I'd like to avoid adding any code that does something with canvas to the library, unless there's really good reason to. Would your change break the existing apps that use this library or would _getCanvasWidth/HeightScale return just 1 if somebody calls canvas.height = canvas.offsetHeight manually? It looks like you're using clientWidth/Height and the demo uses offsetWidth/Height - these probably would need to be the same to make sure nothing breaks.

Regarding images with certain dimension - can't you simply resize images to required size either on the client side (e.g. by rendering to offscreen canvas of required size) or server side?
I'm not really sure what responsive layout has to do with it - is the canvas resized when the window is resized as well? If that's the case, can't you simply handle it using window.onresize handler?

On Apr 25, 2015, at 12:50 PM, Szymon Nowak<EMAIL_ADDRESS>wrote:

I'd like to avoid adding any code that does something with canvas to the library, unless there's really good reason to. Would your change break the existing apps that use this library or would _getCanvasWidth/HeightScale return just 1 if somebody calls canvas.height = canvas.offsetHeight manually?

I don’t know. I’m not sure I understand your use case here.

It looks like you're using clientWidth/Height and the demo uses offsetWidth/Height - these probably would need to be the same to make sure nothing breaks.

Could be. I noticed several fields on the canvas object that had the identical “scaled” width / height values (as opposed to the true canvas width / height), and to be honest, I didn’t look under the hood or at the documentation to see which is most appropriate to use. I just picked the one that seemed to have a sensible name (“client” width. Seems like that should be the width of the canvas as displayed in the client...). Maybe I picked the wrong one. In any case, I think the underlying purpose of the patch is a sound one, even if I picked the wrong field out of haste.

Regarding images with certain dimension - can't you simply resize images to required size either on the client side (e.g. by rendering to offscreen canvas of required size) or server side?

It seems to me that the JSFiddle example I sent is glitchy. In my opinion, I should be able to do what I attempted to do in JSFiddle and have it work as expected. As a user of the library, I want it to be the case that when I draw, the ink goes where I click, and I want the library to handle that.
Having to handle this server-side is burdensome. I’m just saving out the data URLs to my database, which is a good solution for what I’m doing.

I'm not really sure what responsive layout has to do with it - is the canvas resized when the window is resized as well? If that's the case, can't you simply handle it using window.onresize handler?
By responsive layout, I just mean that when I stick a signature pad in a context that is likely to be scaled depending on the client viewport size, I still want things to work. In my case, I have a div containing the canvas, and the div has max-width set. The canvas inside has width set to 100% in CSS. Thus the canvas scales as the viewport shrinks.  But I still want that underlying canvas to be the same pixel dimensions, just as if it were any other image.

The browser does good work scaling images in the sub-optimal case that they must be scaled. I’d rather have the option of letting the browser do its work than having to redo things in my application code.
In SignaturePad, the user is drawing in client coordinates, and it seems natural that it should be SignaturePad’s job to convert client coordinates to canvas coordinates, since the library is managing the interaction between events (client coordinate space) and the canvas quite intimately.
-Richard

—
Reply to this email directly or view it on GitHub.

Just curious if there's any update on this.  We ran into this issue as well and the supplied patch resolves the issue we were seeing.

@jlambert121 Thanks for the report that it fixes your issue. I don't have much free time now and I'd really like to test it out thoroughly before I merge it to make sure it doesn't break anything and doesn't cause any slowdowns on older devices (as it needs to get canvas size when creating every point).

+1
This is vital for creating high res canvas elements on iOS devices. Otherwise everything is blurry. I could not find any issues yet. If you fear a performance issue, we could explore the options for caching this property. In case of an iOS device it is simple: canvas width and height are twice as big as the css width and height.

i tested this branch it works as advertised. The code from the example does not work if there is other js resizing the stuff around. This branch works always for me.

Just a small update - I'll try to take a look at it over the weekend.

@richardcpeterson I've prepared a jsfiddle that includes this fix - http://jsfiddle.net/jLm3nw2z/. Turns out that without scaling the canvas in any way, the width of lines is scaled instead. It might be something that you want or not, I'm not sure really. I'd expect lines to have the same width regardless of the canvas size.

@szimek The behavior in the fiddle is what I expect.
The lines, line thickness, and the whole canvas is scaled with CSS just like a regular image would be scaled, with everything that entails. For instance, if I create a 50px x 50px canvas, and scale it up using CSS to 500x500, I'm going to see some artifacts. The width of the lines should change appropriately, just like with any image. Everything should scale, just like with a PNG, etc.
However, what's now fixed is that you can still draw on it, and the tracking of the cursor takes into account this scaling. So the Fiddle represents what I consider to be a solution that gives the user of your plugin the most predictable and consistent results. They can scale the canvas with CSS if needed, and still draw just fine.

@richardcpeterson I'll have to check if it doesn't break anything else (the low/high DPI screen stuff is really confusing...). I don't really have any preference regarding this behaviour, but you're right that this fix at least allows users to draw on a canvas even if CSS and physical sizes don't match.

@richardcpeterson If you drawn something on a canvas where sizes don't match, save it as data URL and then try to read it back - is it drawn correctly?

I had no issues with reading / writing data URLs

@PerfectPixel Here's a demo: http://jsfiddle.net/szimek/L1cdekw6/2/. If you draw something on the first canvas, it will be copied after 5 seconds to the second one, but it will not look correctly.
I'm not sure if it won't be confusing that you can draw on a canvas with non-matching size, but then can't properly read it back on the same canvas.

@szimek Well I have two options for you: http://jsfiddle.net/L1cdekw6/3/ abolishes the ratio-scaling for width&height in loadFromDataURL or you need to properly size your canvas before using it http://jsfiddle.net/akxmz98o/
A small disclaimer though: I am sitting at a non-retina device at the moment and have a little headache. I can check it out at work tomorrow and give you feedback.

I have done some work on my fork of angular-signature to fix this issue. It's probably not the right place for it as the underlying library should handle all the high DPI / CSS scaling issue stuff.
Btw, Has there been any attempts to use SVG instead? Performance?

Closing this PR as stale


Adapter overview empty because of NPE in Adapter class

Describe the issue
Our DEV environment was not in use for a long time and we are going to use it for automated testing in the future. In preparation for this change we had a look at our environment and it seemed our database state was not as expected. I dropped all objects in the application schema, including the ibisconfig table containing all running configurations. At this point the adapter overview was still working.
I re-uploaded all configurations and pressed the reload config button on the "All" tab, after a while I got some warnings saying that some configurations didnt startup correctly because of missing propertes for DEV environment. The attached web application was able to call the services but in the adapter overview no adapters were shown at all.
When I opened F12 the API call to the adapters endpoint failed with a 500 error. In the logging I find the following NPE:

stacktrace-adapteroverview.txt
I tried restarting the JVM but no luck, this error still occurs after a JVM restart. We only see this kind of behaviour on our DEV environment after clearing all our tables.
Reporter
Laurens
To Reproduce
Steps to reproduce the behavior:
Not sure exactly, try as I wrote before.
Screenshots

Environment
FF! 7.7-20210525.083818: Ibis4Navigator
Running on srdzzapp0437.insim.biz using IBM WebSphere Application Server/8.5
Java Version: Java(TM) SE Runtime Environment (<IP_ADDRESS> - pxa6480sr6fp25-20210115_01(SR6 FP25))
Heap size: 843M, total JVM memory: 2048M
Free disk space: 1GB, total disk space: 2GB
Up since: 2021-06-22 11:20:59 (14m)

Additional Environment

DBMS: [e.g. Oracle, MSSQL, MariaDB, MySql, PostgreSQL] Oracle + MSSQL
Browser: [e.g. Chrome, Safari, Edge, Firefox] Chrome

Should have been fixed in #1853


phantomjs 1.9.1 crashed

I'm using phantomjs wrapper called phantom https://npmjs.org/package/node-phantom in nodejs
I suspect the crash's caused by callPhantom because remove following code won't crash phantom process
page.set('onInitialized',function(){
                        console.log('initialized');
                        page.evaluate(function(domContentLoadedMsg) {
                            document.addEventListener('DOMContentLoaded', function() {
                                window.callPhantom('DOMContentLoaded');
                            }, false);
                        });
                    })

                    page.set('onCallback',function(data) {
                        console.log('ready',context);
                    });

Operating system: Linux
                  0.0.0 Linux 3.2.0-48-generic #74-Ubuntu SMP Thu Jun 6 19:43:26 UTC 2013 x86_64
CPU: amd64
     family 6 model 23 stepping 6
     8 CPUs

Crash reason:  SIGSEGV
Crash address: 0xffffffffffffffc8

Thread 0 (crashed)
 0  0x7f479c2d8089
    rbx = 0x00007f47e1765268   r12 = 0x0000000000000200
    r13 = 0x00007f47e1765268   r14 = 0xffff000000000000
    r15 = 0xffff000000000002   rip = 0x00007f479c2d8089
    rsp = 0x00007fffd7aa3800   rbp = 0x00007fffd7aa38a0
    Found by: given as instruction pointer in context
 1  libc-2.15.so + 0x82fc4
    rip = 0x00007f47e392cfc5   rsp = 0x00007fffd7aa3840
    rbp = 0x00007fffd7aa38a0
    Found by: stack scanning
 2  phantomjs!JSC::Interpreter::executeCall [JITCode.h : 77 + 0x16]
    rip = 0x0000000000f2e376   rsp = 0x00007fffd7aa38b0
    Found by: stack scanning
 3  phantomjs!JSC::call [CallData.cpp : 38 + 0x21]
    rbx = 0x00007fffd7aa3ae0   r12 = 0x00007f47e09f6d48
    r13 = 0x00007f47e01d7990   r14 = 0x00007f47e4ffc150
    r15 = 0x00007f47e507e8f0   rip = 0x0000000000f7291d
    rsp = 0x00007fffd7aa3980   rbp = 0x00007f47985cec50
    Found by: call frame info
 4  phantomjs!JSC::Bindings::QtConnectionObject::execute [qt_runtime.cpp : 1863 + 0x17]
    rbx = 0x00007fffd7aa3ae0   r12 = 0x00007f47e09f6d48
    r13 = 0x00007f47e01d7990   r14 = 0x00007f47e4ffc150
    r15 = 0x00007f47e507e8f0   rip = 0x0000000000542ece
    rsp = 0x00007fffd7aa3990   rbp = 0x00007f47985cec50
    Found by: call frame info
 5  phantomjs!JSC::Bindings::QtConnectionObject::qt_metacall [qt_runtime.cpp : 1807 + 0xa]
    rbx = 0x0000000000000000   r12 = 0x00007fffd7aa3d60
    r13 = 0x00000000036f6cb0   r14 = 0x0000000000000004
    r15 = 0x00000000036dde10   rip = 0x000000000054390c
    rsp = 0x00007fffd7aa3c10   rbp = 0x0000000000000000
    Found by: call frame info
 6  phantomjs!QMetaObject::activate [qobject.cpp : 3555 + 0x1f]
    rbx = 0x0000000000000004   r12 = 0x0000000000000001
    r13 = 0x0000000000000000   r14 = 0x0000000000000004
    r15 = 0x00000000036dde10   rip = 0x0000000001cf7140
    rsp = 0x00007fffd7aa3c40   rbp = 0x00000000036f6cb0
    Found by: call frame info
 7  phantomjs!WebPage::javaScriptConsoleMessageSent [moc_webpage.cpp : 442 + 0x4]
    rbx = 0x0000000000000002   r12 = 0x0000000000000001
    r13 = 0x00007fffd7aa3da0   r14 = 0x00007fffd7aa3db0
    r15 = 0x00000000036d5c30   rip = 0x000000000046a103
    rsp = 0x00007fffd7aa3d60   rbp = 0x0000000000000000
    Found by: call frame info
 8  phantomjs!WebCore::ChromeClientQt::addMessageToConsole [ChromeClientQt.cpp : 309 + 0x16]
    rbx = 0x0000000000000002   r12 = 0x0000000000000001
    r13 = 0x00007fffd7aa3da0   r14 = 0x00007fffd7aa3db0
    r15 = 0x00000000036d5c30   rip = 0x00000000004b3009
    rsp = 0x00007fffd7aa3d80   rbp = 0x0000000000000000
    Found by: call frame info
 9  phantomjs!WebCore::Console::addMessage [Console.cpp : 191 + 0x25]
    rbx = 0x00007f4798156510   r12 = 0x0000000000000001
    r13 = 0x0000000000000001   r14 = 0x00007f477f885550
    r15 = 0x00007fffd7aa3e70   rip = 0x00000000008a43ef
    rsp = 0x00007fffd7aa3e20   rbp = 0x00007fffd7aa3e90
    Found by: call frame info
10  phantomjs!WebCore::Console::log [Console.cpp : 214 + 0x4]
    rbx = 0x00007f47e1765210   r12 = 0x00007f477f885550
    r13 = 0x0000000000000001   r14 = 0x00007f479850f5a0
    r15 = 0x0000000000000001   rip = 0x00000000008a51ca
    rsp = 0x00007fffd7aa3f10   rbp = 0x00007f47e166ee80
    Found by: call frame info
11  phantomjs!WebCore::jsConsolePrototypeFunctionLog [JSConsole.cpp : 203 + 0x11]
    rbx = 0x00007f47e1765210   r12 = 0x00007f477f885550
    r13 = 0x0000000000000001   r14 = 0x00007f479850f5a0
    r15 = 0x0000000000000001   rip = 0x00000000013f7394
    rsp = 0x00007fffd7aa3f50   rbp = 0x00007f47e166ee80
    Found by: call frame info
12  0x7f479c0001e7
    rbx = 0x00007f479c0a0c74   r12 = 0x0000000000000200
    r13 = 0x00007f47e17651b0   r14 = 0xffff000000000000
    r15 = 0xffff000000000002   rip = 0x00007f479c0001e8
    rsp = 0x00007fffd7aa3fd0   rbp = 0x00007fffd7aa4080
    Found by: call frame info
13  phantomjs!WebCore::jsStringOrUndefined [JSDOMBinding.cpp : 92 + 0x4]
    rip = 0x0000000000fed799   rsp = 0x00007fffd7aa4010
    rbp = 0x00007fffd7aa4080
    Found by: stack scanning
14  0x7f47981fcd6f
    rip = 0x00007f47981fcd70   rsp = 0x00007fffd7aa4020
    rbp = 0x00007fffd7aa4080
    Found by: call frame info
15  phantomjs!JSC::Interpreter::execute [JITCode.h : 77 + 0x7]
    rip = 0x0000000000f2c1eb   rsp = 0x00007fffd7aa4090
    Found by: stack scanning
16  phantomjs!JSC::evaluate [Completion.cpp : 64 + 0x1b]
    rbx = 0x00007f47e5093868   r12 = 0x00007f4798773550
    r13 = 0x00007fffd7aa4328   r14 = 0x00007f47e4ffc6c0
    r15 = 0x00007f47e012b9c0   rip = 0x00000000004f9538
    rsp = 0x00007fffd7aa4110   rbp = 0x00007f47e4ffc6d8
    Found by: call frame info
17  phantomjs!WebCore::ScriptController::evaluateInWorld [JSMainThreadExecState.h : 54 + 0x4]
    rbx = 0x0000000002af8d10   r12 = 0x0000000000000000
    r13 = 0x00007f47e0f21f18   r14 = 0x00007f47e0f21b00
    r15 = 0x00007f47e01c2f90   rip = 0x00000000005291da
    rsp = 0x00007fffd7aa41c0   rbp = 0x00007f47e4ffc6d8
    Found by: call frame info
18  phantomjs!WebCore::ScriptController::evaluate [ScriptController.cpp : 167 + 0x15]
    rbx = 0x00007fffd7aa4320   r12 = 0x00007f47e0f21f18
    r13 = 0x00007fffd7aa42d0   r14 = 0x00007f477fb57b78
    r15 = 0x00000000029101c0   rip = 0x00000000005294d2
    rsp = 0x00007fffd7aa42b0   rbp = 0x00007fffd7aa4320
    Found by: call frame info
19  phantomjs!WebCore::ScriptElement::executeScript [ScriptElement.cpp : 283 + 0x11]
    rbx = 0x00007f47e0d2c4e4   r12 = 0x00007f47e0d2c000
    r13 = 0x0000000000000001   r14 = 0x00007f477fb57b78
    r15 = 0x00000000029101c0   rip = 0x000000000106ed24
    rsp = 0x00007fffd7aa42d0   rbp = 0x00007fffd7aa4320
    Found by: call frame info
20  phantomjs!WebCore::ScriptElement::execute [ScriptElement.cpp : 306 + 0xa]
    rbx = 0x00007fffd7aa4320   r12 = 0x00007f477ff8cc00
    r13 = 0x00007f477e547b70   r14 = 0x00007f477fb57b78
    r15 = 0x00000000029101c0   rip = 0x0000000001070f53
    rsp = 0x00007fffd7aa4310   rbp = 0x00007f477e547b78
    Found by: call frame info
21  phantomjs!WebCore::ScriptRunner::timerFired [ScriptRunner.cpp : 114 + 0x12]
    rbx = 0x00007f477fb57b00   r12 = 0x0000000000000000
    r13 = 0x0000000000000000   r14 = 0x0000000000000001
    r15 = 0x00007fffd7aa4ba0   rip = 0x000000000067b197
    rsp = 0x00007fffd7aa43c0   rbp = 0x00007f477ff8cc00
    Found by: call frame info
22  phantomjs!WebCore::ThreadTimers::sharedTimerFiredInternal [ThreadTimers.cpp : 112 + 0x8]
    rbx = 0x00007f47984a86c8   r12 = 0x0000000000000000
    r13 = 0x000000000344cab0   r14 = 0x00000000000e53ad
    r15 = 0x00007fffd7aa4ba0   rip = 0x0000000000993983
    rsp = 0x00007fffd7aa4460   rbp = 0x00007f47e50a67a8
    Found by: call frame info
23  phantomjs!QObject::event [qobject.cpp : 1156 + 0x8]
    rbx = 0x00000000036816f0   r12 = 0x00007fffd7aa4ba0
    r13 = 0x000000000344cab0   r14 = 0x00000000000e53ad
    r15 = 0x00007fffd7aa4ba0   rip = 0x0000000001cefba4
    rsp = 0x00007fffd7aa44a0   rbp = 0x00000000036816f0
    Found by: call frame info
24  phantomjs!QApplicationPrivate::notify_helper [qapplication.cpp : 4562 + 0xc]
    rbx = 0x00007fffd7aa4e20   r12 = 0x00007fffd7aa4ba0
    r13 = 0x000000000344cab0   r14 = 0x00000000000e53ad
    r15 = 0x00007fffd7aa4ba0   rip = 0x00000000015decaf
    rsp = 0x00007fffd7aa4640   rbp = 0x00000000036816f0
    Found by: call frame info
25  phantomjs!QApplication::notify [qapplication.cpp : 4423 + 0x17]
    rbx = 0x00007fffd7aa4e20   r12 = 0x00007fffd7aa4ba0
    r13 = 0x00007fffd7aa4e20   r14 = 0x00000000000e53ad
    r15 = 0x00007fffd7aa4ba0   rip = 0x00000000015e793b
    rsp = 0x00007fffd7aa4670   rbp = 0x00000000036816f0
    Found by: call frame info
26  phantomjs!QCoreApplication::notifyInternal [qcoreapplication.cpp : 946 + 0x2]
    rbx = 0x000000000344a1c0   r12 = 0x00007fffd7aa4ba0
    r13 = 0x00007fffd7aa4e20   r14 = 0x00000000000e53ad
    r15 = 0x00007fffd7aa4ba0   rip = 0x0000000001cde3b4
    rsp = 0x00007fffd7aa4b40   rbp = 0x00000000036816f0
    Found by: call frame info
27  phantomjs!QTimerInfoList::activateTimers [qcoreapplication.h : 231 + 0x14]
    rbx = 0x000000000344e898   r12 = 0x0000000000000000
    r13 = 0x0000000000000000   r14 = 0x00000000000e53ad
    r15 = 0x00007fffd7aa4ba0   rip = 0x0000000001d07ead
    rsp = 0x00007fffd7aa4b90   rbp = 0x000000000001fd64
    Found by: call frame info
28  phantomjs!QEventDispatcherUNIX::processEvents [qeventdispatcher_unix.cpp : 941 + 0x7]
    rbx = 0x0000000000000002   r12 = 0x00007fffd7aa4c70
    r13 = 0x0000000003449560   r14 = 0x0000000000000000
    r15 = 0x000000000344a2d8   rip = 0x0000000001d080c0
    rsp = 0x00007fffd7aa4c20   rbp = 0x000000000344e030
    Found by: call frame info
29  phantomjs!QEventDispatcherQPA::processEvents [qeventdispatcher_qpa.cpp : 246 + 0x4]
    rbx = 0x00000000036d3a20   r12 = 0x0000000000000000
    r13 = 0x0000000003449560   r14 = 0x00007fffd7aa4cb0
    r15 = 0x000000000344a2d8   rip = 0x000000000163a6a4
    rsp = 0x00007fffd7aa4c70   rbp = 0x000000000344e030
    Found by: call frame info
30  phantomjs!QEventLoop::processEvents [qeventloop.cpp : 149 + 0x1]
    rbx = 0x00000000036d3a20   r12 = 0x00007fffd7aa4d40
    r13 = 0x00007fffd7aa4d50   r14 = 0x000000000344a230
    r15 = 0x000000000344a2d8   rip = 0x0000000001cdd495
    rsp = 0x00007fffd7aa4cb0   rbp = 0x00007fffd7aa4cf0
    Found by: call frame info
31  phantomjs!QEventLoop::exec [qeventloop.cpp : 200 + 0x4]
    rbx = 0x00000000036d3a20   r12 = 0x00007fffd7aa4d40
    r13 = 0x00007fffd7aa4d50   r14 = 0x000000000344a230
    r15 = 0x000000000344a2d8   rip = 0x0000000001cdd8f8
    rsp = 0x00007fffd7aa4ce0   rbp = 0x00007fffd7aa4e20
    Found by: call frame info
32  phantomjs!QCoreApplication::exec [qcoreapplication.cpp : 1218 + 0x4]
    rbx = 0x000000000344a1c0   r12 = 0x00007fffd7aa4e20
    r13 = 0x00007fffd7aa4fe0   r14 = 0x00007fffd7aa4d90
    r15 = 0x0000000000000000   rip = 0x0000000001cdf7ab
    rsp = 0x00007fffd7aa4d40   rbp = 0x000000000344a1c0
    Found by: call frame info
33  phantomjs!main [main.cpp : 121 + 0x4]
    rbx = 0x0000000003496460   r12 = 0x00007fffd7aa4e20
    r13 = 0x00007fffd7aa4fe0   r14 = 0x00007fffd7aa4d90
    r15 = 0x0000000000000000   rip = 0x0000000000427cb2
    rsp = 0x00007fffd7aa4d80   rbp = 0x00007fffd7aa4fb8
    Found by: call frame info
34  libc-2.15.so + 0x2176c
    rbx = 0x0000000000000000   r12 = 0x0000000000407cc0
    r13 = 0x00007fffd7aa4fb0   r14 = 0x0000000000000000
    r15 = 0x0000000000000000   rip = 0x00007f47e38cb76d
    rsp = 0x00007fffd7aa4ee0   rbp = 0x0000000000000000
    Found by: call frame info
35  phantomjs + 0x27a5f
    rip = 0x0000000000427a60   rsp = 0x00007fffd7aa4f00
    Found by: stack scanning

Thread 1
 0  libc-2.15.so + 0xbf84d
    rbx = 0x00007f47e2b65cf0   r12 = 0x0000000002ad0160
    r13 = 0x00007f477e258cc0   r14 = 0x0000000002ad81a0
    r15 = 0x0000000002ad8170   rip = 0x00007f47e396984d
    rsp = 0x00007f47e2b65c40   rbp = 0x00000000ffffffff
    Found by: given as instruction pointer in context
 1  libc-2.15.so + 0xbf6eb
    rip = 0x00007f47e39696ec   rsp = 0x00007f47e2b65c50
    Found by: stack scanning
 2  phantomjs + 0x18b5c4f
    rip = 0x0000000001cb5c50   rsp = 0x00007f47e2b65c58
    Found by: stack scanning
 3  libc-2.15.so + 0x109f7
    rip = 0x00007f47e38ba9f8   rsp = 0x00007f47e2b65c70
    Found by: stack scanning
 4  ld-2.15.so + 0xa522
    rip = 0x00007f47e4f80523   rsp = 0x00007f47e2b65cc8
    Found by: stack scanning
 5  libc-2.15.so + 0xbf858
    rip = 0x00007f47e3969859   rsp = 0x00007f47e2b65cd8
    Found by: stack scanning
 6  libpthread-2.15.so + 0xfcaf
    rip = 0x00007f47e448acb0   rsp = 0x00007f47e2b65ce8
    Found by: stack scanning
 7  libpthread-2.15.so + 0xb103
    rip = 0x00007f47e4486104   rsp = 0x00007f47e2b65d90
    Found by: stack scanning
 8  libc-2.15.so + 0xe54f
    rip = 0x00007f47e38b8550   rsp = 0x00007f47e2b65d98
    Found by: stack scanning
 9  ld-2.15.so + 0x15234
    rip = 0x00007f47e4f8b235   rsp = 0x00007f47e2b65dd0
    Found by: stack scanning
10  libpthread-2.15.so + 0xe9f9
    rip = 0x00007f47e44899fa   rsp = 0x00007f47e2b65de0
    Found by: stack scanning
11  libpthread-2.15.so + 0xbe17
    rip = 0x00007f47e4486e18   rsp = 0x00007f47e2b65df0
    Found by: stack scanning
12  phantomjs!WTF::TCMalloc_PageHeap::scavengerThread [FastMalloc.cpp : 2499 + 0x4]
    rip = 0x00000000004dda2e   rsp = 0x00007f47e2b65e20
    Found by: stack scanning
13  phantomjs!WTF::TCMalloc_PageHeap::runScavengerThread [FastMalloc.cpp : 1618 + 0x4]
    rbx = 0x0000000000000000   r12 = 0x00007f47e448c880
    r13 = 0x00007f47e2b669c0   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x00000000004ddc99
    rsp = 0x00007f47e2b65ea0   rbp = 0x0000000000000000
    Found by: call frame info
14  libpthread-2.15.so + 0x7e99
    rbx = 0x0000000000000000   r12 = 0x00007f47e448c880
    r13 = 0x00007f47e2b669c0   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x00007f47e4482e9a
    rsp = 0x00007f47e2b65eb0   rbp = 0x0000000000000000
    Found by: call frame info
15  libpthread-2.15.so + 0x1187f
    rip = 0x00007f47e448c880   rsp = 0x00007f47e2b65f58
    Found by: stack scanning
16  libc-2.15.so + 0xf3ccc
    rip = 0x00007f47e399dccd   rsp = 0x00007f47e2b65fc0
    Found by: stack scanning

Thread 2
 0  libc-2.15.so + 0xed033
    rbx = 0x0000000000000000   r12 = 0x00007f47e2364d80
    r13 = 0x0000000000000008   r14 = 0x00007f47dc000a98
    r15 = 0x00007f47dc000d30   rip = 0x00007f47e3997033
    rsp = 0x00007f47e2364b50   rbp = 0x00007f47dc0008e0
    Found by: given as instruction pointer in context
 1  phantomjs!qt_safe_select [qcore_unix.cpp : 83 + 0x15]
    rip = 0x0000000001d06307   rsp = 0x00007f47e2364b60
    Found by: stack scanning
 2  phantomjs!QEventDispatcherUNIXPrivate::doSelect [qeventdispatcher_unix.cpp : 223 + 0xd]
    rbx = 0x00007f47dc0012b0   r12 = 0x00007f47e2364d80
    r13 = 0x00007f47dc0008e0   r14 = 0x0000000000000000
    r15 = 0x00007f47dc000d30   rip = 0x0000000001d075c7
    rsp = 0x00007f47e2364bf0   rbp = 0x00007f47dc0008e0
    Found by: call frame info
 3  phantomjs!QEventDispatcherUNIX::processEvents [qeventdispatcher_unix.cpp : 937 + 0x4]
    rbx = 0x00007f47dc0012b0   r12 = 0x00007f47e2364d80
    r13 = 0x00007f47dc0008c0   r14 = 0x0000000000000001
    r15 = 0x00000000034939a8   rip = 0x0000000001d08072
    rsp = 0x00007f47e2364d30   rbp = 0x00007f47dc0008e0
    Found by: call frame info
 4  phantomjs!QEventLoop::processEvents [qeventloop.cpp : 149 + 0x1]
    rbx = 0x00007f47dc0012b0   r12 = 0x00007f47e2364e10
    r13 = 0x00007f47e2364e20   r14 = 0x000000000344a230
    r15 = 0x00000000034939a8   rip = 0x0000000001cdd495
    rsp = 0x00007f47e2364d80   rbp = 0x00007f47e2364dc0
    Found by: call frame info
 5  phantomjs!QEventLoop::exec [qeventloop.cpp : 200 + 0x4]
    rbx = 0x00007f47dc0012b0   r12 = 0x00007f47e2364e10
    r13 = 0x00007f47e2364e20   r14 = 0x000000000344a230
    r15 = 0x00000000034939a8   rip = 0x0000000001cdd8f8
    rsp = 0x00007f47e2364db0   rbp = 0x00007fffd7aa4e20
    Found by: call frame info
 6  phantomjs!QThread::exec [qthread.cpp : 542 + 0xc]
    rbx = 0x0000000003493920   r12 = 0x00000000034939a8
    r13 = 0x0000000000000001   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x0000000001bdfdd6
    rsp = 0x00007f47e2364e10   rbp = 0x00000000034939a8
    Found by: call frame info
 7  phantomjs!QThreadPrivate::start [qthread_unix.cpp : 338 + 0x9]
    rbx = 0x00000000034939a8   r12 = 0x00000000034a5240
    r13 = 0x0000000000000001   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x0000000001be2ca2
    rsp = 0x00007f47e2364e60   rbp = 0x0000000003669b60
    Found by: call frame info
 8  libpthread-2.15.so + 0x7e99
    rbx = 0x0000000000000000   r12 = 0x00007fffd7aa4300
    r13 = 0x00007f47e23659c0   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x00007f47e4482e9a
    rsp = 0x00007f47e2364eb0   rbp = 0x0000000000000000
    Found by: call frame info

Thread 3
 0  libc-2.15.so + 0xed033
    rbx = 0x00007f47e09dad30   r12 = 0x000000000001fd5b
    r13 = 0x000000000000000e   r14 = 0x00007f4794000a98
    r15 = 0x00007f4794000d30   rip = 0x00007f47e3997033
    rsp = 0x00007f47e09dab50   rbp = 0x000000000001b518
    Found by: given as instruction pointer in context
 1  phantomjs!qt_safe_select [qcore_unix.cpp : 93 + 0x16]
    rip = 0x0000000001d06208   rsp = 0x00007f47e09dab60
    Found by: stack scanning
 2  phantomjs!QEventDispatcherUNIXPrivate::doSelect [qeventdispatcher_unix.cpp : 223 + 0xd]
    rbx = 0x00007f47940012b0   r12 = 0x00007f47e09dad80
    r13 = 0x00007f47940008e0   r14 = 0x00007f47e09dad30
    r15 = 0x00007f4794000d30   rip = 0x0000000001d075c7
    rsp = 0x00007f47e09dabf0   rbp = 0x00007f47940008e0
    Found by: call frame info
 3  phantomjs!QEventDispatcherUNIX::processEvents [qeventdispatcher_unix.cpp : 937 + 0x4]
    rbx = 0x00007f47940012b0   r12 = 0x00007f47e09dad80
    r13 = 0x00007f47940008c0   r14 = 0x0000000000000001
    r15 = 0x00000000036d68a8   rip = 0x0000000001d08072
    rsp = 0x00007f47e09dad30   rbp = 0x00007f47940008e0
    Found by: call frame info
 4  phantomjs!QEventLoop::processEvents [qeventloop.cpp : 149 + 0x1]
    rbx = 0x00007f47940012b0   r12 = 0x00007f47e09dae10
    r13 = 0x00007f47e09dae20   r14 = 0x000000000344a230
    r15 = 0x00000000036d68a8   rip = 0x0000000001cdd495
    rsp = 0x00007f47e09dad80   rbp = 0x00007f47e09dadc0
    Found by: call frame info
 5  phantomjs!QEventLoop::exec [qeventloop.cpp : 200 + 0x4]
    rbx = 0x00007f47940012b0   r12 = 0x00007f47e09dae10
    r13 = 0x00007f47e09dae20   r14 = 0x000000000344a230
    r15 = 0x00000000036d68a8   rip = 0x0000000001cdd8f8
    rsp = 0x00007f47e09dadb0   rbp = 0x00007fffd7aa4e20
    Found by: call frame info
 6  phantomjs!QThread::exec [qthread.cpp : 542 + 0xc]
    rbx = 0x00000000036d6820   r12 = 0x00000000036d68a8
    r13 = 0x0000000000000001   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x0000000001bdfdd6
    rsp = 0x00007f47e09dae10   rbp = 0x00000000036d68a8
    Found by: call frame info
 7  phantomjs!QThreadPrivate::start [qthread_unix.cpp : 338 + 0x9]
    rbx = 0x00000000036d68a8   r12 = 0x00000000036d6960
    r13 = 0x0000000000000001   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x0000000001be2ca2
    rsp = 0x00007f47e09dae60   rbp = 0x0000000003694f30
    Found by: call frame info
 8  libpthread-2.15.so + 0x7e99
    rbx = 0x0000000000000000   r12 = 0x00007fffd7aa2130
    r13 = 0x00007f47e09db9c0   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x00007f47e4482e9a
    rsp = 0x00007f47e09daeb0   rbp = 0x0000000000000000
    Found by: call frame info

Thread 4
 0  libpthread-2.15.so + 0xc0fe
    rbx = 0x00007f4794005520   r12 = 0x000000000000000c
    r13 = 0x00007f479bffedc0   r14 = 0xffffffffffffff92
    r15 = 0x0000000000000000   rip = 0x00007f47e44870fe
    rsp = 0x00007f479bffed40   rbp = 0x00007f4794005840
    Found by: given as instruction pointer in context
 1  phantomjs!QWaitCondition::wait [qwaitcondition_unix.cpp : 84 + 0x7]
    rip = 0x0000000001be39b7   rsp = 0x00007f479bffeda0
    Found by: stack scanning
 2  phantomjs!QThreadPoolThread::run [qthreadpool.cpp : 141 + 0x1d]
    rbx = 0x00007f4794005440   r12 = 0x00007f47940054c9
    r13 = 0x0000000000000002   r14 = 0x00007f4788011f40
    r15 = 0x0000000000000003   rip = 0x0000000001bd781d
    rsp = 0x00007f479bffee20   rbp = 0x00007f4794005840
    Found by: call frame info
 3  phantomjs!QThreadPrivate::start [qthread_unix.cpp : 338 + 0x9]
    rbx = 0x00007f47900012b0   r12 = 0x00007f47940059e0
    r13 = 0x0000000000000001   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x0000000001be2ca2
    rsp = 0x00007f479bffee60   rbp = 0x00007f4794005840
    Found by: call frame info
 4  libpthread-2.15.so + 0x7e99
    rbx = 0x0000000000000000   r12 = 0x00007f47e09d9590
    r13 = 0x00007f479bfff9c0   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x00007f47e4482e9a
    rsp = 0x00007f479bffeeb0   rbp = 0x0000000000000000
    Found by: call frame info

Thread 5
 0  libc-2.15.so + 0xed033
    rbx = 0x00007f479b3d4d30   r12 = 0x000000000001fd64
    r13 = 0x0000000000000025   r14 = 0x00007f4788000a98
    r15 = 0x00007f4788000d30   rip = 0x00007f47e3997033
    rsp = 0x00007f479b3d4b50   rbp = 0x00000000000e5823
    Found by: given as instruction pointer in context
 1  phantomjs!qt_safe_select [qcore_unix.cpp : 93 + 0x16]
    rip = 0x0000000001d06208   rsp = 0x00007f479b3d4b60
    Found by: stack scanning
 2  phantomjs!QEventDispatcherUNIXPrivate::doSelect [qeventdispatcher_unix.cpp : 223 + 0xd]
    rbx = 0x00007f47880012b0   r12 = 0x00007f479b3d4d80
    r13 = 0x00007f47880008e0   r14 = 0x00007f479b3d4d30
    r15 = 0x00007f4788000d30   rip = 0x0000000001d075c7
    rsp = 0x00007f479b3d4bf0   rbp = 0x00007f47880008e0
    Found by: call frame info
 3  phantomjs!QEventDispatcherUNIX::processEvents [qeventdispatcher_unix.cpp : 937 + 0x4]
    rbx = 0x00007f47880012b0   r12 = 0x00007f479b3d4d80
    r13 = 0x00007f47880008c0   r14 = 0x0000000000000001
    r15 = 0x00000000036fb698   rip = 0x0000000001d08072
    rsp = 0x00007f479b3d4d30   rbp = 0x00007f47880008e0
    Found by: call frame info
 4  phantomjs!QEventLoop::processEvents [qeventloop.cpp : 149 + 0x1]
    rbx = 0x00007f47880012b0   r12 = 0x00007f479b3d4e10
    r13 = 0x00007f479b3d4e20   r14 = 0x000000000344a230
    r15 = 0x00000000036fb698   rip = 0x0000000001cdd495
    rsp = 0x00007f479b3d4d80   rbp = 0x00007f479b3d4dc0
    Found by: call frame info
 5  phantomjs!QEventLoop::exec [qeventloop.cpp : 200 + 0x4]
    rbx = 0x00007f47880012b0   r12 = 0x00007f479b3d4e10
    r13 = 0x00007f479b3d4e20   r14 = 0x000000000344a230
    r15 = 0x00000000036fb698   rip = 0x0000000001cdd8f8
    rsp = 0x00007f479b3d4db0   rbp = 0x00007fffd7aa4e20
    Found by: call frame info
 6  phantomjs!QThread::exec [qthread.cpp : 542 + 0xc]
    rbx = 0x00000000036fb610   r12 = 0x00000000036fb698
    r13 = 0x0000000000000001   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x0000000001bdfdd6
    rsp = 0x00007f479b3d4e10   rbp = 0x00000000036fb698
    Found by: call frame info
 7  phantomjs!QThreadPrivate::start [qthread_unix.cpp : 338 + 0x9]
    rbx = 0x00000000036fb698   r12 = 0x00000000036fb750
    r13 = 0x0000000000000001   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x0000000001be2ca2
    rsp = 0x00007f479b3d4e60   rbp = 0x00000000036fb5f0
    Found by: call frame info
 8  libpthread-2.15.so + 0x7e99
    rbx = 0x0000000000000000   r12 = 0x00007fffd7aa0150
    r13 = 0x00007f479b3d59c0   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x00007f47e4482e9a
    rsp = 0x00007f479b3d4eb0   rbp = 0x0000000000000000
    Found by: call frame info

Thread 6
 0  libpthread-2.15.so + 0xc0fe
    rbx = 0x00007f4794005520   r12 = 0x000000000000000a
    r13 = 0x00007f479a9cbdc0   r14 = 0xffffffffffffff92
    r15 = 0x0000000000000000   rip = 0x00007f47e44870fe
    rsp = 0x00007f479a9cbd40   rbp = 0x00007f478801b090
    Found by: given as instruction pointer in context
 1  phantomjs!QWaitCondition::wait [qwaitcondition_unix.cpp : 84 + 0x7]
    rip = 0x0000000001be39b7   rsp = 0x00007f479a9cbda0
    Found by: stack scanning
 2  phantomjs!QThreadPoolThread::run [qthreadpool.cpp : 141 + 0x1d]
    rbx = 0x00007f4794005440   r12 = 0x00007f47940054c9
    r13 = 0x0000000000000002   r14 = 0x00007f4788032970
    r15 = 0x0000000000000003   rip = 0x0000000001bd781d
    rsp = 0x00007f479a9cbe20   rbp = 0x00007f478801b090
    Found by: call frame info
 3  phantomjs!QThreadPrivate::start [qthread_unix.cpp : 338 + 0x9]
    rbx = 0x00007f478c0012b0   r12 = 0x00007f478801b480
    r13 = 0x0000000000000001   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x0000000001be2ca2
    rsp = 0x00007f479a9cbe60   rbp = 0x00007f478801b090
    Found by: call frame info
 4  libpthread-2.15.so + 0x7e99
    rbx = 0x0000000000000000   r12 = 0x00007f479b3d3590
    r13 = 0x00007f479a9cc9c0   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x00007f47e4482e9a
    rsp = 0x00007f479a9cbeb0   rbp = 0x0000000000000000
    Found by: call frame info

Thread 7
 0  libpthread-2.15.so + 0xc0fe
    rbx = 0x00007f4794005520   r12 = 0x000000000000000e
    r13 = 0x00007f479a1cadc0   r14 = 0xffffffffffffff92
    r15 = 0x0000000000000000   rip = 0x00007f47e44870fe
    rsp = 0x00007f479a1cad40   rbp = 0x00007f4788006a20
    Found by: given as instruction pointer in context
 1  phantomjs!QWaitCondition::wait [qwaitcondition_unix.cpp : 84 + 0x7]
    rip = 0x0000000001be39b7   rsp = 0x00007f479a1cada0
    Found by: stack scanning
 2  phantomjs!QThreadPoolThread::run [qthreadpool.cpp : 141 + 0x1d]
    rbx = 0x00007f4794005440   r12 = 0x00007f47940054c9
    r13 = 0x0000000000000002   r14 = 0x00007f4788014970
    r15 = 0x0000000000000003   rip = 0x0000000001bd781d
    rsp = 0x00007f479a1cae20   rbp = 0x00007f4788006a20
    Found by: call frame info
 3  phantomjs!QThreadPrivate::start [qthread_unix.cpp : 338 + 0x9]
    rbx = 0x00007f47800012b0   r12 = 0x00007f4788006e60
    r13 = 0x0000000000000001   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x0000000001be2ca2
    rsp = 0x00007f479a1cae60   rbp = 0x00007f4788006a20
    Found by: call frame info
 4  libpthread-2.15.so + 0x7e99
    rbx = 0x0000000000000000   r12 = 0x00007f479b3d3590
    r13 = 0x00007f479a1cb9c0   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x00007f47e4482e9a
    rsp = 0x00007f479a1caeb0   rbp = 0x0000000000000000
    Found by: call frame info

Thread 8
 0  libpthread-2.15.so + 0xc0fe
    rbx = 0x00007f4794005520   r12 = 0x0000000000000008
    r13 = 0x00007f47999c9dc0   r14 = 0xffffffffffffff92
    r15 = 0x0000000000000000   rip = 0x00007f47e44870fe
    rsp = 0x00007f47999c9d40   rbp = 0x00007f478800c920
    Found by: given as instruction pointer in context
 1  phantomjs!QWaitCondition::wait [qwaitcondition_unix.cpp : 84 + 0x7]
    rip = 0x0000000001be39b7   rsp = 0x00007f47999c9da0
    Found by: stack scanning
 2  phantomjs!QThreadPoolThread::run [qthreadpool.cpp : 141 + 0x1d]
    rbx = 0x00007f4794005440   r12 = 0x00007f47940054c9
    r13 = 0x0000000000000002   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x0000000001bd781d
    rsp = 0x00007f47999c9e20   rbp = 0x00007f478800c920
    Found by: call frame info
 3  phantomjs!QThreadPrivate::start [qthread_unix.cpp : 338 + 0x9]
    rbx = 0x00007f47840012b0   r12 = 0x00007f478800cbd0
    r13 = 0x0000000000000001   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x0000000001be2ca2
    rsp = 0x00007f47999c9e60   rbp = 0x00007f478800c920
    Found by: call frame info
 4  libpthread-2.15.so + 0x7e99
    rbx = 0x0000000000000000   r12 = 0x00007f479b3d3590
    r13 = 0x00007f47999ca9c0   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x00007f47e4482e9a
    rsp = 0x00007f47999c9eb0   rbp = 0x0000000000000000
    Found by: call frame info

Thread 9
 0  libpthread-2.15.so + 0xbd84
    rbx = 0x000000000372f6f0   r12 = 0x004189374bc6a7ef
    r13 = 0xffffffffffffffff   r14 = 0x000000000372f718
    r15 = 0x0000000003728b50   rip = 0x00007f47e4486d84
    rsp = 0x00007f47991c8d10   rbp = 0x00007f47e0b3d010
    Found by: given as instruction pointer in context
 1  phantomjs!QWaitCondition::wait [qwaitcondition_unix.cpp : 86 + 0xa]
    rip = 0x0000000001be39d5   rsp = 0x00007f47991c8d40
    rbp = 0x00007f47e0b3d010
    Found by: stack scanning
 2  phantomjs!WTF::ThreadCondition::timedWait [ThreadingQt.cpp : 253 + 0x12]
    rbx = 0x00007f47e0b3d008   r12 = 0x0000000000000001
    r13 = 0x00007f47e0b3d008   r14 = 0x00007f47e0b3d010
    r15 = 0x00007f47991c8e20   rip = 0x00000000004e70ea
    rsp = 0x00007f47991c8dc0   rbp = 0x00007f47e0b3d010
    Found by: call frame info
 3  phantomjs!WTF::MessageQueue<WebCore::LocalStorageTask>::waitForMessage [MessageQueue.h : 137 + 0x12]
    rbx = 0x0000000000000001   r12 = 0x0000000000000001
    r13 = 0x00007f47e0b3d008   r14 = 0x00007f47e0b3d010
    r15 = 0x00007f47991c8e20   rip = 0x0000000001185269
    rsp = 0x00007f47991c8de0   rbp = 0x00007f47e0b3d018
    Found by: call frame info
 4  phantomjs!WebCore::LocalStorageThread::threadEntryPoint [LocalStorageThread.cpp : 68 + 0xa]
    rbx = 0x00007f47e11fbb68   r12 = 0x00000000036f97d0
    r13 = 0x0000000000000001   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x0000000001185493
    rsp = 0x00007f47991c8e20   rbp = 0x00007f47e0b3d008
    Found by: call frame info
 5  phantomjs!WTF::ThreadPrivate::run [ThreadingQt.cpp : 66 + 0x6]
    rbx = 0x0000000003692760   r12 = 0x00000000036f97d0
    r13 = 0x0000000000000001   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x00000000004e68fb
    rsp = 0x00007f47991c8e50   rbp = 0x0000000003692760
    Found by: call frame info
 6  phantomjs!QThreadPrivate::start [qthread_unix.cpp : 338 + 0x9]
    rbx = 0x00000000036f7aa8   r12 = 0x00000000036f97d0
    r13 = 0x0000000000000001   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x0000000001be2ca2
    rsp = 0x00007f47991c8e60   rbp = 0x0000000003692760
    Found by: call frame info
 7  libpthread-2.15.so + 0x7e99
    rbx = 0x0000000000000000   r12 = 0x00007fffd7aa3370
    r13 = 0x00007f47991c99c0   r14 = 0x0000000000000000
    r15 = 0x0000000000000003   rip = 0x00007f47e4482e9a
    rsp = 0x00007f47991c8eb0   rbp = 0x0000000000000000
    Found by: call frame info

Loaded modules:
0x00400000 - 0x026e7fff  phantomjs  ???  (main)
0x7f477fdb1000 - 0x7f477fe46fff  DejaVuSans-BoldOblique.ttf  ???
0x7f479892e000 - 0x7f47989c8fff  DejaVuSansCondensed-Bold.ttf  ???
0x7f479a9cd000 - 0x7f479abd4fff  libnss_dns-2.15.so  ???
0x7f479b3d6000 - 0x7f479b5e2fff  libnss_files-2.15.so  ???
0x7f479b5e3000 - 0x7f479b7fcfff  libresolv-2.15.so  ???
0x7f47e000b000 - 0x7f47e00a8fff  DejaVuSansCondensed.ttf  ???
0x7f47e00a9000 - 0x7f47e00f9fff  DejaVuSerifCondensed.ttf  ???
0x7f47e2b67000 - 0x7f47e2dc3fff  libssl.so.1.0.0  ???
0x7f47e2dc5000 - 0x7f47e319bfff  libcrypto.so.1.0.0  ???
0x7f47e31a0000 - 0x7f47e3468fff  locale-archive  ???
0x7f47e3469000 - 0x7f47e3692fff  libexpat.so.1.5.2  ???
0x7f47e3693000 - 0x7f47e38a9fff  libz.so.<IP_ADDRESS>  ???
0x7f47e38aa000 - 0x7f47e3c63fff  libc-2.15.so  ???
0x7f47e3c69000 - 0x7f47e3e7efff  libgcc_s.so.1  ???
0x7f47e3e7f000 - 0x7f47e417afff  libm-2.15.so  ???
0x7f47e417b000 - 0x7f47e4465fff  libstdc++.so.6.0.16  ???
0x7f47e447b000 - 0x7f47e4693fff  libpthread-2.15.so  ???
0x7f47e4698000 - 0x7f47e489ffff  librt-2.15.so  ???
0x7f47e48a0000 - 0x7f47e4aa3fff  libdl-2.15.so  ???
0x7f47e4aa4000 - 0x7f47e4cd9fff  libfontconfig.so.1.4.4  ???
0x7f47e4cda000 - 0x7f47e4f75fff  libfreetype.so.6.8.0  ???
0x7f47e4f76000 - 0x7f47e4f97fff  ld-2.15.so  ???
0x7f47e518d000 - 0x7f47e5195fff  6d41288fd70b0be22e8c3a91e032eec0-le64.cache-3  ???
0x7fffd7b4d000 - 0x7fffd7b4dfff  linux-gate.so  ???

Please upgrade to PhantomJS 2.0. 1.9.x is no longer supported, and known to have many crasher bugs that are fixed in 2.0.


Support venv --prompt

Feature request:
Environment data

Extension Version: 1.0.0
OS Version: Darwin x64 17.7.0
VSCode version: 1.28.1
Python version (& distribution if applicable, e.g. Anaconda): cpython
Type of virtual environment used (N/A | venv | virtualenv | conda | ...): venv
Relevant/affected Python packages and their versions: venv, python3.5+

Actual behavior
If a virtual enviroment is selected, the folder name is used as a name

Expected  behavior
When a user creates a venv and supplies an argument to the --prompt option, display that name instead
Steps to reproduce:

create a virtual environment by running

python3 -m venv venv --prompt env_name

Select that environment
The selected environment will be ('venv':venv)

Unfortunately this information is not made available to tools to read (i.e. the --prompt value is hard-coded into the various activation scripts). If Python changed where venv stored that detail then we would happily use it.


New package: NirSoft.NK2Edit version 3.44

[X] Have you signed the Contributor License Agreement?
[X] Have you checked that there aren't other open pull requests for the same manifest update/change?

[X] Does your manifest conform to the 1.1 schema?

Microsoft Reviewers: Open in CodeFlow

2022-06-03 15:30:29.675 [CLI ] Generated temp download path: C:\Users\VALIDA~1\AppData\Local\Temp\WinGet\NirSoft.NK2Edit.3.44\a96e042f21e50397aa124d85cb6655a59958e82c5758d6aa2a9af53e9e15e6b2
2022-06-03 15:30:29.676 [CORE] Downloading to path: C:\Users\VALIDA~1\AppData\Local\Temp\WinGet\NirSoft.NK2Edit.3.44\a96e042f21e50397aa124d85cb6655a59958e82c5758d6aa2a9af53e9e15e6b2
2022-06-03 15:30:29.676 [CORE] DeliveryOptimization downloading from url: https://www.nirsoft.net/utils/nk2edit_setup.exe
2022-06-03 15:31:29.832 [FAIL] D:\a\_work\1\s\external\pkg\src\AppInstallerCommonCore\DODownloader.cpp(267)\WindowsPackageManager.dll!59794E3F: (caller: 59795594) Exception(1) tid(1b0c) 80D02002
2022-06-03 15:31:29.868 [CORE] Started applying motw to C:\Users\VALIDA~1\AppData\Local\Temp\WinGet\NirSoft.NK2Edit.3.44\a96e042f21e50397aa124d85cb6655a59958e82c5758d6aa2a9af53e9e15e6b2 with zone: 3
2022-06-03 15:31:29.876 [CORE] Finished applying motw
2022-06-03 15:31:29.876 [CORE] WinINet downloading from url: https://www.nirsoft.net/utils/nk2edit_setup.exe
2022-06-03 15:31:29.964 [FAIL] D:\a\_work\1\s\external\pkg\src\AppInstallerCommonCore\Downloader.cpp(47)\WindowsPackageManager.dll!597565FB: (caller: 59757528) Exception(2) tid(1b0c) 80072EE7     Msg:[InternetOpenUrl() failed.]

2022-06-03 15:31:30.144 [CLI ] Failed to download, waiting a bit and retry. Url: https://www.nirsoft.net/utils/nk2edit_setup.exe
2022-06-03 15:31:30.660 [CORE] Downloading to path: C:\Users\VALIDA~1\AppData\Local\Temp\WinGet\NirSoft.NK2Edit.3.44\a96e042f21e50397aa124d85cb6655a59958e82c5758d6aa2a9af53e9e15e6b2
2022-06-03 15:31:30.660 [CORE] DeliveryOptimization downloading from url: https://www.nirsoft.net/utils/nk2edit_setup.exe
2022-06-03 15:32:30.675 [FAIL] D:\a\_work\1\s\external\pkg\src\AppInstallerCommonCore\DODownloader.cpp(267)\WindowsPackageManager.dll!59794E3F: (caller: 59795594) Exception(3) tid(1b0c) 80D02002
2022-06-03 15:32:30.703 [CORE] Started applying motw to C:\Users\VALIDA~1\AppData\Local\Temp\WinGet\NirSoft.NK2Edit.3.44\a96e042f21e50397aa124d85cb6655a59958e82c5758d6aa2a9af53e9e15e6b2 with zone: 3
2022-06-03 15:32:30.705 [CORE] Finished applying motw
2022-06-03 15:32:30.705 [CORE] WinINet downloading from url: https://www.nirsoft.net/utils/nk2edit_setup.exe
2022-06-03 15:32:30.710 [FAIL] D:\a\_work\1\s\external\pkg\src\AppInstallerCommonCore\Downloader.cpp(47)\WindowsPackageManager.dll!597565FB: (caller: 59757528) Exception(4) tid(1b0c) 80072EE7     Msg:[InternetOpenUrl() failed.]

2022-06-03 15:32:30.754 [CLI ] Caught wil::ResultException: D:\a\_work\1\s\external\pkg\src\AppInstallerCommonCore\Downloader.cpp(47)\WindowsPackageManager.dll!597565FB: (caller: 59757528) Exception(4) tid(1b0c) 80072EE7     Msg:[InternetOpenUrl() failed.]


Implementation of a mapping-method

As discussed in our today's meeting we need a method that maps the coordinates of the ants to the correct pheromone in the pheromone-array (in the pheromone-class).
This could be done by taking the dimensions of the world and the dimensions of the array.
Example:
If you have a width (x-axis) of 1000 and the array has 500 columns an ants position would be mapped to one element of the array, if it is in between a size of 2. By this I mean that every array-element has a "width" of 2.
$\frac{1000}{500} = 2$

F.e. the x-coordinate of the ant is 1.5 then the ants position would be mapped to the first element of the array because this has the bounds 0 and <= 2.
F.e. if the x-coordinate of the ant is 2 the ants position would be mapped to the second element of the array because this has the bounds 2 and <= 4.

This has to be implemented simultaneously for the x- and y-axis to ensure to map the coordinates correctly.
Vice versa this should be able to be done in both directions:
From ant-coordinates to pheromone-array-indices (row, column)
(From pheromone-array-indices (row, column) to ant-coordinates) -> I guess this is not needed because we calculate the new position via the angle (see issue #83)

@AlhaririAnas Please refer to this:

(From pheromone-array-indices (row, column) to ant-coordinates) -> I guess this is not needed because we calculate the new position via the angle (see issue https://github.com/heyitsalina/ant_search_algorithm/issues/83)

Do you think we need this direction of the mapping too?

@tis22 no i dont think we need it because we only need the mapped coordinates to determine where the ant is located, i.e. which pheromone index (cell) it belongs to.


[Mobile, Web, Desktop] Putting ElevatedButtons inside Column will have top and bottom margins if run in mobile but appear without top and bottom margins if run in web and desktop.

When aligning ElevatedButtons on top of each other the display becomes different between mobile and web.
Please use the following code to reproduce this difference in mobile and web and look at the attached screenshots:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('My first App'),
),
body: Column(
children: [
Text("Elevated Buttons"),
ElevatedButton(
onPressed: null,
child: Text('Answer 1'),
),
ElevatedButton(
onPressed: null,
child: Text('Answer 2'),
),
ElevatedButton(
onPressed: null,
child: Text('Answer 3'),
),
],
),
),
);
}
}

![web](https://user-images.githubusercontent.com/80549397/111000618-69990800-8393-11eb-8db1-93afea5d4bea.jpg)
![mobile](https://user-images.githubusercontent.com/80549397/111000644-7a497e00-8393-11eb-8a67-5cef892e26ed.jpg)

Hi,
Have you checked what happens when you try to run it as a desktop app? It might have something to do with the visual density but I'm not sure.

@jordyvandomselaar I have checked on Windows desktop same issue too. For your information I am using Flutter 2 on Windows 10.

Thx!

@Ossabla I'm confident the issue is visualDensity then. What happens if you add visualDensity: VisualDensity.comfortable to your themeData?

@jordyvandomselaar Tried visualDensity, unfortunately same behavior.

Hmmm, that's odd. What happens if you manually add padding, do mobile devices get more padding?

@jordyvandomselaar Yes it adds!

That does sound like it's caused by the column widget 😅

I found out that if I change
   return Semantics(
      container: true,
      button: true,
      enabled: widget.enabled,
      child: _InputPadding(
        minSize: minSize,
        child: result,
      ),
    );

to
return Semantics(
      container: true,
      button: true,
      enabled: widget.enabled,
      child: result,
    );

In button_style_button.dart that makes it consistent.
If I change minSize: minSize, to minSize: Size.zero, that also works.
When I look further, I can see that minSize is calculated like this:
 final Size minSize;
    switch (resolvedTapTargetSize!) {
      case MaterialTapTargetSize.padded:
        minSize = Size(
          kMinInteractiveDimension + densityAdjustment.dx,
          kMinInteractiveDimension + densityAdjustment.dy,
        );
        assert(minSize.width >= 0.0);
        assert(minSize.height >= 0.0);
        break;
      case MaterialTapTargetSize.shrinkWrap:
        minSize = Size.zero;
        break;
    }

densityAdjustment is defined as final Offset densityAdjustment = resolvedVisualDensity!.baseSizeAdjustment; and finally resolvedVisualDensity is final VisualDensity? resolvedVisualDensity = effectiveValue((ButtonStyle? style) => style?.visualDensity);
As we can see here it does have something to do with visualDensity. Now I know Size.zero works because I tried hard-coding it. If we look at the switch statement above, it actually uses Size.zero if resolvedTapTargetSize equals MaterialTapTargetSize.shrinkWrap.
resolvedTapTargetSize is defined as follows:  final MaterialTapTargetSize? resolvedTapTargetSize = effectiveValue((ButtonStyle? style) => style?.tapTargetSize);
Here we see that ButtonStyle has a property called tapTargetSize which determines what the resolvedTapTargetSize is. Because it has to be MaterialTapTargetSize.shrinkWrap we can add it to our ElevatedButton like this:
  ElevatedButton(
              style:
                  ButtonStyle(tapTargetSize: MaterialTapTargetSize.shrinkWrap),
              onPressed: null,
              child: Text('Answer 1'),
            )

I've tested it, and now it looks the same on all platforms, without padding!
Hope that helps =)

@jordyvandomselaar Many many thanks for your efforts. Actually, this is excellent explanation and solution. Now all platforms display the buttons without margins/paddings.
Can you please tell me where this code is located
return Semantics(
container: true,
button: true,
enabled: widget.enabled,
child: _InputPadding(
minSize: minSize,
child: result,
),
);
Thanks in advance

@Ossabla I'm glad I could help =), I do think the Flutter team should have a look at this, I'd at least expect the padding to go away if I changed the visualDensity.

@jordyvandomselaar However, you did wonderful job in locating a workaround about this issue and I hope that Flutter team will take this into account.
Thanks again!


[WORKING] Forward calls to kubectl

// cc @gerred

Comment by gerred
This all looks really good to me. I wasn't yet sold on the wrapper idea, but I'm so far :+1:
The only thing I'm still really worried about is the tool breaking independently of kubectl, if kubectl is updated on someone's system and we haven't pushed a new kube-cluster binary. At least if we bring kubectl in-house (by adding kubernetes/kubernetes as a dependency and requiring the relevant files), we don't run into that problem.
I guess since it's a pass through it won't matter.

I think it is a very important aspect - we might need to make a decision about it.
I see these alternatives:
1 - don't worry, because we are just passing it through as it is - so it will never affect the end-user as long as he knows what he is doing.
2 - we can protect against not-yet-validated versions. Like tying kube-cluster version X with kubectl version Y. And refusing to run unless they match.
What do you think?

Some more options, inspired by how docker-machine and docker works:

Don't pass through or wrap, rather bake kubectl into kube-cluster. Then version X of kubectl is baked directly into version Y of kube-cluster, and we cut new releases when new Kubernetes API versions come out.

Make the tools independent. The downside with this is, honestly, kubectl is a REALLY hard to find tool, and I think reduces the ease of getting started. Presently, even brew install kubernetes-cli breaks for me on OSX 10.11.

Don't pass through or wrap, rather bake kubectl into kube-cluster. Then version X of kubectl is baked directly into version Y of kube-cluster, and we cut new releases when new Kubernetes API versions come out.

I think this is a go-to move for the near future, ie. baking each one of the calls into kube-cluster. The wrapper idea is to provide a head start towards this goal. So we can't start using kube-cluster right away.

Makes sense to me. :+1:

@gerred let's merge? :+1:

Merged.


Pin versions more closely.

Make sure latest versions available pinned as lower bound.

Changes Unknown when pulling a9738f61c6ba390412dd306bc192d8f34a73787f on release/1.0.3 into ** on master**.

Changes Unknown when pulling 08b176ff4040f18646c22490b108b6be1dd391a3 on release/1.0.3 into ** on master**.

Hell Yeah


⚠ Bofrost.at has degraded performance

In fc10211, Bofrost.at (https://www.bofrost.at) experienced degraded performance:

HTTP code: 200
Response time: 816 ms

Resolved: Bofrost.at performance has improved in 7b37156 after 12 minutes.


Ej/equation types

Purpose

To-do

Content

[ ] I have read and checked the items on the review checklist.

Currently a WIP; opening PR now to assist with collaboration.


Client generator generates code files with invalid/broken imports

Problem statement
The client generator has begun generated invalid code, pretty much out of the blue, and I can't figure out what's going on. It generates a client file that imports stuff that it doesn't need and also does not import the operations package, creating an error.
The reason why I say this is out of the blue is because I've only just begun experiencing this error. I managed to generate a working client before with v0.27.0, with the same specs. For about a week now the client generator no longer works.

Swagger specification
{
  "host": "secure.na1.adobesign.com",
  "basePath": "/api/rest/v6",
  "schemes": [
    "https"
  ],
  "swagger": "2.0",
  "info": {
    "title": "transientDocuments",
    "version": "6.0.0"
  },
  "paths": {
    "/transientDocuments": {
      "post": {
        "produces": [
          "application/json"
        ],
        "operationId": "createTransientDocument",
        "summary": "Uploads a document and obtains the document's ID.",
        "description": "The document uploaded through this call is referred to as transient since it is available only for 7 days after the upload. The returned transient document ID can be used in the API calls where the uploaded file needs to be referred. The transient document request is a multipart request consisting of three parts - filename, mime type and the file stream. You can only upload one file at a time in this request.",
        "consumes": [
          "multipart/form-data"
        ],
        "parameters": [
          {
            "in": "header",
            "description": "An OAuth Access Token with any of the following scopes:

agreement_write

agreement_sign

widget_write

library_write

in the format 'Bearer {accessToken}'.",
            "name": "Authorization",
            "required": true,
            "type": "string"
          },
          {
            "in": "header",
            "description": "The userId or email of API caller using the account or group token in the format userid:{userId} OR email:{email}. If it is not specified, then the caller is inferred from the token.",
            "name": "x-api-user",
            "required": false,
            "type": "string"
          },
          {
            "in": "header",
            "description": "The userId or email in the format userid:{userId} OR email:{email}. of the user that has shared his/her account",
            "name": "x-on-behalf-of-user",
            "required": false,
            "type": "string"
          },
          {
            "in": "formData",
            "description": "A name for the document being uploaded. Maximum number of characters in the name is restricted to 255.",
            "name": "File-Name",
            "required": false,
            "type": "string"
          },
          {
            "in": "formData",
            "description": "The mime type of the document being uploaded. If not specified here then mime type is picked up from the file object. If mime type is not present there either then mime type is inferred from file name extension.",
            "name": "Mime-Type",
            "required": false,
            "type": "string"
          },
          {
            "in": "formData",
            "description": "The file part of the multipart request for document upload. You can upload only one file at a time.",
            "name": "File",
            "required": true,
            "type": "file"
          }
        ],
        "responses": {
          "200": {
            "description": "No response was specified",
            "schema": {
              "$ref": "#/definitions/TransientDocumentResponse"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "agreement_write",
              "agreement_sign",
              "widget_write",
              "library_write"
            ]
          }
        ]
      }
    }
  },
  "definitions": {
    "TransientDocumentResponse": {
      "required": [
        "transientDocumentId"
      ],
      "properties": {
        "transientDocumentId": {
          "type": "string",
          "description": "The unique identifier of the uploaded document that can be used in an agreement or a bulk send or web form creation call"
        }
      }
    }
  }
}

Steps to reproduce
I run use the docker image to generate the client, the command looks like docker run --rm -it --user 1000:1000 -v /home/simon:/home/simon -w /home/simon/projects/nestoca/adobe-sign/swagger quay.io/goswagger/swagger:v0.27.0 generate client -f /home/simon/projects/nestoca/adobe-sign/swagger/2.0/transientDocuments.json -t /home/simon/projects/nestoca/adobe-sign/swagger/pkg/transientDocuments
Environment
swagger version: v0.27.0 , v0.26.1
go version: 1.16.5
OS:  Debian 10 amd64

Here's the log when I run generate client with v0.27.0:
2021/07/20 21:21:34 validating spec /home/simon/projects/nestoca/adobe-sign/swagger/2.0/transientDocuments.json
2021/07/20 21:21:35 preprocessing spec with option:  minimal flattening
2021/07/20 21:21:35 building a plan for generation
2021/07/20 21:21:35 generation target /home/simon/projects/nestoca/adobe-sign/swagger/pkg/transientDocuments
2021/07/20 21:21:35 planning definitions (found: 1)
2021/07/20 21:21:35 planning operations (found: 1)
2021/07/20 21:21:35 grouping operations into packages (packages: 1)
2021/07/20 21:21:35 operations for package packages "operations" (found: 1)
2021/07/20 21:21:35 planning meta data and facades
2021/07/20 21:21:35 rendering 1 templates for model TransientDocumentResponse
2021/07/20 21:21:35 name field TransientDocumentResponse
2021/07/20 21:21:35 package field models
2021/07/20 21:21:35 creating generated file "transient_document_response.go" in "/home/simon/projects/nestoca/adobe-sign/swagger/pkg/transientDocuments/models" as definition
2021/07/20 21:21:35 executed template asset:model
2021/07/20 21:21:35 rendering 2 templates for operation
2021/07/20 21:21:35 name field createTransientDocument
2021/07/20 21:21:35 package field operations
2021/07/20 21:21:35 creating generated file "create_transient_document_parameters.go" in "/home/simon/projects/nestoca/adobe-sign/swagger/pkg/transientDocuments/client/operations" as parameters
2021/07/20 21:21:35 executed template asset:clientParameter
2021/07/20 21:21:35 name field createTransientDocument
2021/07/20 21:21:35 package field operations
2021/07/20 21:21:35 creating generated file "create_transient_document_responses.go" in "/home/simon/projects/nestoca/adobe-sign/swagger/pkg/transientDocuments/client/operations" as responses
2021/07/20 21:21:35 executed template asset:clientResponse
2021/07/20 21:21:35 rendering 1 templates for operation group
2021/07/20 21:21:35 name field operations
2021/07/20 21:21:35 creating generated file "operations_client.go" in "/home/simon/projects/nestoca/adobe-sign/swagger/pkg/transientDocuments/client/operations" as client
2021/07/20 21:21:35 executed template asset:clientClient
2021/07/20 21:21:35 rendering 1 templates for application TransientDocuments
2021/07/20 21:21:35 name field TransientDocuments
2021/07/20 21:21:35 package field client
2021/07/20 21:21:35 creating generated file "transient_documents_client.go" in "/home/simon/projects/nestoca/adobe-sign/swagger/pkg/transientDocuments/client" as facade
2021/07/20 21:21:35 executed template asset:clientFacade
2021/07/20 21:21:36 Generation completed!

For this generation to compile you need to have some packages in your GOPATH:

	* github.com/go-openapi/errors
	* github.com/go-openapi/runtime
	* github.com/go-openapi/runtime/client
	* github.com/go-openapi/strfmt

You can get these now with: go get -u -f pkg/transientDocuments/...

What is your GOPATH and do you have a go module?

GOPATH is not provided to the container. The go module is github.com/nestoca/adobe-sign

I have seen the same issue. I used goimports binary to add/remove required go packages.
goimports -w *.go
Goimports : https://pkg.go.dev/golang.org/x/tools/cmd/goimports

What is the output of running "go get ./..." and "go vet ./..." in go mod folder?

duplicate of #2608
go imports got a fix recently golang/go#45398. I'll package a new release this weekend.

Seems fixed in 0.28.0

I have the same problem and it is still there in 0.28.0 from some experiments it looks like content of imports in this generated file is dependent on what packages I have in already GOPATH. and this is very wired behaviour.  Basically if I have the client package in the GOPATH for example if imported by some other project, then the code generation works correctly but if it is not in GOPATH then the client/operations package will not be imported


Do a nil check on self.presentedViewController before dismissing

Fixes #374
Make sure the presented view controller isn't nil before calling dismissViewController. Comparing two nils is true in the case of stats VC being presented modaly after selecting the blog in the today widget in WPiOS.
Needs Review: @aerych

Woot!  :shipit:

Thanks @aerych!


Changed ActivityTriggered data.category to data.categories.

Proposal for the change discussed in issue #55.

:+1:


Add search suggest functionality to searches

This PR adds support for elasticsearch suggesters on advanced queries. It is tied with the PR on the adapter at https://github.com/babenkoivan/elastic-adapter/pull/1.
I wasn't sure how to properly get the test environment running. But once I can do that, I don't mind adding a test or two to verify functionality.
Great package by the way!

Thank you! I left a comment in another PR.
I need to add the contributor notes :) To start test env you just need to execute make up wait.

Suggesters are added in v1.1.0


高速化とスタックオーバーフロー回避

高速化とスタックオーバーフロー回避
ちゃんとやればBytes含めてmutableじゃなくいけますね…

@omanuke Thank you for your PR! :wink:
This PR fails build..., although.

@omanuke I found that this broken build due to warnings which left return values no-ignored.
Delaying to modify return types of _unpackXX functions are O.K., but please ignore thier return values. :pray:
When CI tell us all green, I will merge this PR. :muscle:

@omanuke Some time has passed, and how are you?
As we discussed before, this PR should include only the features to make faster and avoid stack overflow, not to support PCL.
Does anything go wrong? Please tell me about it: :smiley:

@omanuke Sorry to be late for merging your PR... :crying_cat_face: Now merged it!!


Obsoletion: chemoattractant, chemorepellant

Suggest obsoleting 'chemoattractant activity ; GO:0042056' and
'chemorepellant activity ; GO:0045499'; both describe the activity
of inducing chemotaxis of some sort. Suggest annotating to
process terms 'induction of positive chemotaxis ; GO:new' and
'induction of negative chemotaxis ; GO:new', with the appropriate
parents also added:
chemotaxis
-i-negative chemotaxis
----p-regulation of negative chemotaxis
-------i-negative regulation of negative chemotaxis
-------i-positive regulation of negative chemotaxis
----------i-induction of negative chemotaxis
-i-positive chemotaxis
----p-regulation of positive chemotaxis
-------i-negative regulation of positive chemotaxis
-------i-positive regulation of positive chemotaxis
----------i-induction of positive chemotaxis
-p-regulation of chemotaxis
----i-+ve / -ve regulation of chemotaxis plus all those children
above.
If this proposal seems reasonable (and I feel it is very reasonable
myself), I'll implement it a week from now.
Reported by: girlwithglasses
Original Ticket: "geneontology/ontology-requests/1520":https://sourceforge.net/p/geneontology/ontology-requests/1520

thanks www.movied.org


[SPARK-22446][SQL][ML] Declare StringIndexerModel indexer udf as nondeterministic

What changes were proposed in this pull request?
UDFs that can cause runtime exception on invalid data are not safe to pushdown, because its behavior depends on its position in the query plan. Pushdown of it will risk to change its original behavior.
The example reported in the JIRA and taken as test case shows this issue. We should declare UDFs that can cause runtime exception on invalid data as non-determinstic.
This updates the document of deterministic property in Expression and states clearly an UDF that can cause runtime exception on some specific input, should be declared as non-determinstic.
How was this patch tested?
Added test. Manually test.

We may have other udfs in other ml models that have the same issue. If this approach is ok for the reviewers, we can make those udfs as non-deterministic then.

Test build #83471 has started for PR 19662 at commit d9bdf25.

Test build #83471 has finished for PR 19662 at commit d9bdf25.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/83471/
Test PASSed.

Although this touches ML codes and test, it is basically related to SQL stuff (udf). So cc @cloud-fan  for review.

Looks reasonable, have you check other places which have similar issue ?

I remember there are few places with similar udf. If this is ok, I will modify other places together.

LGTM

Test build #83577 has started for PR 19662 at commit dd672ac.

@WeichenXu123 I did a scan. Currently I only found VectorAssembler's udf may have similar issue. Fixed and added test for it too.

Test build #83580 has started for PR 19662 at commit d2ac83e.

Test build #83577 has finished for PR 19662 at commit dd672ac.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/83577/
Test PASSed.

Test build #83580 has finished for PR 19662 at commit d2ac83e.

This patch passes all tests.
This patch merges cleanly.
This patch adds no public classes.

Merged build finished. Test PASSed.

Test PASSed.
Refer to this link for build results (access rights to CI server needed):
https://amplab.cs.berkeley.edu/jenkins//job/SparkPullRequestBuilder/83580/
Test PASSed.

thanks, merging to master!


Cron methods called multiple times for long running deployments

It appears old cron methods are not being deactivated correctly, so on redeploy we end up with multiple calls.

I think this logic got lost in a refactor: https://github.com/TBD54566975/ftl/commit/8ce9fafd60953ca34a6d354b96eb1dd9fc305bde#diff-6ed83c343e05fdb52758a0311ad55be3fc913102be58e0f62722269a465950a6L369


[Bug]-[1185]:Table (v1) row selection is not retained when PrimaryKey is set & sorting applied

Is there an existing issue for this?

[X] I have searched the existing issues

Description
https://user-images.githubusercontent.com/91450662/172361472-48acd577-41cf-4210-b86c-d1e57a2d5e61.mov
Steps To Reproduce

Create a CRUD page , eg: from Postgres DS
Set the Primary Key of the data table (that is supposed to retain the selection of row)
Deploy the app & update some row fields from JSON Form
Observe : Row selection is retained & user doesnt loose track of the row where the change is made
Now - Apply some sort to the table
Update some row fields again
Observe: Row selection is not retained & some random rows are selected even when Primary column of the data_table remains set
Expected: Row selection should retain when Primary Key is set - after any action by user

Public Sample App
No response
Version
Prod/Release v1.7.1

Assuming all of users who set primary column id are impacted
Stats

Stat
Values

Reach
1185

Effort (months)
0.5

Just leaving my notes for triaging here

When sorting is applied and you update something and run the get query the table is re-rendered losing the applied sorting in the first place.
If the sort is server side, then updating and expecting the primary key to be retained means that data can be on a different page altogether now.

I don't know if we can solve this even without any server actions

unless you store the applied sorting when table re-loads.
or remove the sorting and highlight the right row, but the position may be different.

@sbalaji1192 please triage in the next meeting

@dilippitchika Currently we reset the sorting orders, and filters when the tableData changes. We compare the tableData as a whole including schema and row values. I guess we need to only reset the sorting order and filter if the schema changes. Need to think further about the edge cases
Removing this from the stability epic

Similar issue reported here:
https://community.appsmith.com/t/how-to-stay-on-selected-row-after-updating-data-of-row-in-a-table/1688
In this case, the user was not using sorting, or the PrimaryKey property. Once they added the PrimaryKey, the selectedRow retention started working again.

Not reproducible in Table V2. Assuming that this is fixed, I am closing this. Please re-open if you face this again.


KDE PIM Applications

Motivation
This would add the KDE PIM application suite to Nixpkgs.
Testing

[x] Tested using sandboxing
(nix.useSandbox on NixOS,
or option build-use-sandbox in nix.conf
on non-NixOS)
Built on platform(s)

[x] NixOS
[ ] macOS
[ ] Linux

[x] Tested via one or more NixOS test(s) if existing and applicable for the change (look inside nixos/tests)
[ ] Tested compilation of all pkgs that depend on this change using nix-shell -p nox --run "nox-review wip"
[ ] Tested execution of all binary files (usually in ./result/bin/)
[x] Fits CONTRIBUTING.md.

This is my second attempt. It is correctly rebased to master this time! Again, credit here should go to @vandenoever.

@ttuegel Wow, that's a lot of work again. I noticed today that this is now on top of the merged 'Unwrap Qt 5 packages' PR. I'll put a vm to work so I can test this.

It looks as if it's program output.

When I start kmail in  clean environment on a non-kde desktop (lumina), it crashes when doing the first run wizard. It says: "The Email program encountered a fatal error and will terminate now.
The error was:
Invalid parent"
Maybe it's due to the kuiserver not being found.

kmail has no icons. Installing oxygen with nix-env does not solve that issue.
I can run kmail for a second time and then it does not crash. I can then choose a maildir. This causes 1000's of messages to the console:
org.kde.pim.akonadicore: Resource id's don't match: "akonadi_maildir_resource_1" "akonadi.maildir_resource_0"

This is in a clean home directory.
The 'invalid parent' error also happens when running in a plasma5 environment.
In a plasma5 environment, the icons are present and I can configure a maildir and read mails there. This is more functionality than any previous attempt! In fact, it's better than kmail 1 because search works.

Installing oxygen with nix-env does not solve that issue.

oxygen is not used by KF5 applications. Does it work with breeze-icons? You will probably also have to set up a Qt 5 theme using, e.g. qt5ct to select a platform integration. The default platform integration shipped with Qt 5 doesn't use icons AFAICT.

The 'invalid parent' error also happens when running in a plasma5 environment.

Is this really the ultimate cause? When kmail starts, I get lots of warnings about "invalid parent" due to kwallet, but everything proceeds to start. I wonder if it is just reporting the last message as the "error".

Simply installing 'breeze-icons' does not give kmail icons.
'qt5ct' on lumina tells me 'The QT_QPA_PLATFORMTHEME environment variable is not set correctly'.
But most importantly, without the rest of kde, the maildir does not work. Probably other mail plugins also do not work.
One of the errors is "Error loading KCM plugin "kcm_kmail" "The shared library was not found."
The 'invalid parent' only happens the first time when logging into a fresh plasma and starting kmail for the first time.

Simply installing 'breeze-icons' does not give kmail icons.
'qt5ct' on lumina tells me 'The QT_QPA_PLATFORMTHEME environment variable is not set correctly'.

Yes, there is some special value you must set for QT_QPA_PLATFORMTHEME to have qt5ct work correctly. I don't remember the magic word, but it is in the documentation on the qt5ct homepage.
I am going to try to track down this error,

But most importantly, without the rest of kde, the maildir does not work. Probably other mail plugins also do not work.
One of the errors is "Error loading KCM plugin "kcm_kmail" "The shared library was not found."

assuming for the moment that the missing icons are not related to this problem, because I have gotten that error before, yet I see all the icons!

@ttuegel how can  I help get this merged?

/me is at akademy atm and could discuss any issues with kde pim people in person.

@vandenoever It’d be lovely if you could. KDE PIM is IMHO one of the few big things still missing in NixOS.
P.S. Say hi for me to everyone at Akademy. Sadly this year it clashes with a work retreat, so I can’t attend.

nix-shell -p kmail

gives
mkdir: cannot create directory ‘/home/oever/nixpkgs/__nix_qt5__/bin’: File exists

I do not know how to suppress that.
Then running kmail gives:
kmail(25316)/default unknown: This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".

Reinstalling the application may fix this problem.
Aborted

This is because all applications that use QtWebRender require X and the use of xcb is hardcoded even though the desktop maybe using a different QPA (Qt Platform Abstraction plugin).
https://cgit.kde.org/kmail.git/tree/src/main.cpp?h=v17.04.3#n108
One solution is to patch that out, another is to get xcb to work. xcb is currently installed.
/nix/store/*-qtbase-5.9.0-bin/lib/qt-5.9/plugins/platforms/libqxcb.so

I can get the GUI of kmail visible with this:
export QT_PLUGIN_PATH="/nix/store/4mr1rflvn9s25h9c6mykry7b422nxh0p-qtbase-5.9.0-bin/lib/qt-5.9/plugins"
kmail

which then gives this error:
The Email program encountered a fatal error and will terminate now. The error was: Unable to obtain agent type ''.

I tried patching kmail.nix:
diff --git a/pkgs/applications/kde/kmail.nix b/pkgs/applications/kde/kmail.nix
index ec8c989277..6eb7cca3c1 100644
--- a/pkgs/applications/kde/kmail.nix
+++ b/pkgs/applications/kde/kmail.nix
@@ -1,5 +1,5 @@
 {
-  mkDerivation, lib, kdepimTeam,
+  mkDerivation, makeWrapper, lib, kdepimTeam,
   extra-cmake-modules, kdoctools,
   akonadi-search, kbookmarks, kcalutils, kcmutils, kcompletion, kconfig,
   kconfigwidgets, kcoreaddons, kdelibs4support, kdepim-apps-libs,
@@ -18,6 +18,7 @@ mkDerivation {
   };
   nativeBuildInputs = [ extra-cmake-modules kdoctools ];
   buildInputs = [
+    makeWrapper
     akonadi-search kbookmarks kcalutils kcmutils kcompletion kconfig
     kconfigwidgets kcoreaddons kdelibs4support kdepim-apps-libs kguiaddons ki18n
     kiconthemes kinit kio kldap kmail-account-wizard kmailtransport
@@ -26,4 +27,10 @@ mkDerivation {
     libksieve mailcommon messagelib pim-sieve-editor qtscript qtwebengine
   ];
   propagatedUserEnvPkgs = [ kdepim-runtime kwallet ];
+  installPhase = ''
+    $preInstallHooks
+    wrapProgram $out/bin/kmail \
+        --prefix QT_PLUGIN_PATH "$qtbase/lib/qt-5.9/plugins"
+    $postInstallHooks
+  '';
 }

mv: cannot stat '/nix/store/vdvmzpfgw72vp7n3ggrjzn2qw0nwqky5-kmail-17.04.2/bin/kmail': No such file or directory
builder for ‘/nix/store/msvlp2ggmjzzc5mpj1ycdqf90dfxlrxl-kmail-17.04.2.drv’ failed with exit code 1
error: build of ‘/nix/store/msvlp2ggmjzzc5mpj1ycdqf90dfxlrxl-kmail-17.04.2.drv’ failed

It turns out that if you simply install kmail with nix-env -f. -i kmail, it almost works fine.
All that's needed is to add $kmail/share to XDG_DATA_DIRS to make the Settings > Configure KMail menu work.
This small snippet is a workaround for that.
XDG_DATA_DIRS="$(dirname "$(dirname "$(realpath "$(type -P kmail)")")")/share:$XDG_DATA_DIRS" kmail

The situation with Configure KMail is even weirder.
it works when kmail is started from KRunner or xterm, but not if it is started from konsole.
And sending mails does not work yet because the kio plugin for smtp is not found.
akonadi_maildispatcher_agent(589)/kf5.kio.core unknown: couldn't create slave: "klauncher said: Kon de plug-in 'kf5/kio/smtp' niet vinden.\n

The situation with Configure KMail is even weirder.
it works when kmail is started from KRunner or xterm, but not if it is started from konsole.
And sending mails does not work yet because the kio plugin for smtp is not found.
akonadi_maildispatcher_agent(589)/kf5.kio.core unknown: couldn't create slave: "klauncher said: Kon de plug-in 'kf5/kio/smtp' niet vinden.\n

I've now made one adaptation to my environment which makes this all work.
~/.config/plasma-workspace/env/env.sh
export KDE_FORK_SLAVES=1

@ttuegel: Maybe it's a good idea to use the following one-liner to rewrite the author to @vandenoever:
git filter-branch --env-filter 'export GIT_AUTHOR_NAME="Jos van den Oever"<EMAIL_ADDRESS>master..HEAD

Please update to 17.04.3 before  merging this. KMail has an annoying bug where moving multiple mails does not update the data model of the user interface.

Is this going to be merged before the 17.09 branch off?

I'd be in favor of that. i've been using this package for a few weeks now.
Probably even better would be if 17.09 could include KDE Applications 17.08.
https://community.kde.org/Schedules/Applications/17.08_Release_Schedule

Prepackages for 17.08 are here:
https://download.kde.org/unstable/applications/17.07.90/src/

I'm satisfied now that, while this is not perfect, the best way to move forward is to merge to get this into the hands of users.

🎉


Web: select dropdown widgets are not themed and look out of place

Testing #83296:
They feel like the only thing not being themed in the whole workspace...

Insiders:

Visual Studio Code - Insiders
Version: 1.40.0-insider
Commit: b7b21844e760e632f39bedf651da2bc93f54b0cc
Date: 2019-10-29T06:38:51.389Z
Browser: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:70.0) Gecko/20100101 Firefox/70.0

Is there any way to use our custom styling, like on Windows? I agree that we should at the very least make it look better for the worse ones.
Also, Safari's dropdown selector is bad but their list picker is fine:

@misolori as far as I know, we do not style the widget itself, only the dropdown list when expanded. Yes, we can enable that for Safari and FF, but I think this issue is more about the widget when it is collapsed.

I found no other way than changing the appearance of the dropdown to be of type button. This unfortunately removes the arrow (which we could possibly add back somehow), but makes it look nice and flat. I do not think there is a way to theme the arrow within the dropdown.
Before:

After:

Verified from source.

@bpasero do we set any css properties for FF/Safari? We could embed a chevron via the content property for those browsers, like content: "\f11e". It's not the prettiest but it's also the fewest amounts of code and we already do this with the list decorations (git dot).

@misolori sounds good to me, if you want to give it a try, fire up a PR and I can review + merge tomorrow.


Static analysis error/warning

Describe the bug
Issues found by Coverity on the analysis of 07c9c674875daa8be15368bb423159a18a3f7051.
Detail
See comments the issues.

Unchecked dynamic_cast

abst_to_ila.cc:438

Description
If the dynamic_cast fails, a null pointer dereference will occur; if the dynamic_cast cannot fail, using static_cast instead offers better performance.
In ilang::SynthAbsConverter::CnvtNodeToExprConst(ilasynth::Node const *): Dynamic_cast may fail and return null if the type cast is incompatible

Time of check time of use

fs.cc:43
fs.cc:49

Description
An attacker could change the filename's file association or other attributes between the check and use.
In ilang::os_portable_mkdir(std::__cxx11::basic_string<char, std::char_traits, std::allocator> const &): A check occurs on a file's attributes before the file is used in a privileged operation, but things may have changed

Uninitialized scalar field

ila_sim.h:185
ila_sim.h:186
ila_sim.h:192
ila_sim.cc:9

Description
The field will contain an arbitrary value left over from earlier computations.
In ilang::IlaSim::IlaSim(): A scalar field is not initialized by the constructor

Missing break in switch

verilog_analysis.cc:658
verilog_analysis.cc:660

Description
Execution falls through to the next case statement or default; this might indicate a common typo.
In ilang::VerilogAnalyzer::get_signal(std::__cxx11::basic_string<char, std::char_traits, std::allocator> const &): Missing break statement between cases in switch statement

Uninitialized scalar field

vtarget_gen_impl.h:135
single_target.cc:158
vtarget_gen_impl.h:137
single_target.cc:158

Description
The field will contain an arbitrary value left over from earlier computations.
In ilang::VlgSglTgtGen::VlgSglTgtGen(std::__cxx11::basic_string<char, std::char_traits, std::allocator> const &, std::shared_ptrilang::Instr const &, std::shared_ptrilang::InstrLvlAbs const &, ilang::VerilogGeneratorBase::VlgGenConfig const &, nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits, std::allocator>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer> &, nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits, std::allocator>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer> &, ilang::VerilogInfo *, std::__cxx11::basic_string<char, std::char_traits, std::allocator> const &, std::__cxx11::basic_string<char, std::char_traits, std::allocator> const &, std::__cxx11::basic_string<char, std::char_traits, std::allocator> const &, std::vector<std::__cxx11::basic_string<char, std::char_traits, std::allocator>, std::allocator<std::__cxx11::basic_string<char, std::char_traits, std::allocator>>> const &, std::vector<std::__cxx11::basic_string<char, std::char_traits, std::allocator>, std::allocator<std::__cxx11::basic_string<char, std::char_traits, std::allocator>>> const &, ilang::VlgVerifTgtGenBase::_vtg_config const &, ilang::VlgVerifTgtGenBase::backend_selector): A scalar field is not initialized by the constructor

Logically dead code

vtarget_gen_impl.cc:249
vtarget_gen_impl.cc:265
vtarget_gen_impl.cc:252
vtarget_gen_impl.cc:253

Description
The indicated dead code may have performed some action; that action will never occur.
In ilang::find_comments(std::__cxx11::basic_string<char, std::char_traits, std::allocator> const &): Code can never be reached because of a logical contradiction

fix by #148


Weekday end bound

Adds end bound checking to solve #11 .
Also fixes some issues with the weekday recurrence test where this issue was appearing but we weren't checking for it.
also fixes a misspelling: "utitlity" -> "utility"

Thinking about this more last night, I think the end date should be checked even if there is a bounds.end, since that bound could be beyond the edge of the event. I'll add this test and change the check tonight.

@darinh I believe this is now ready for your review.


KVStore: Fix exception in FAP worker

What problem does this PR solve?
Issue Number: close #8988
Problem Summary:
What is changed and how it works?
Check List
Tests

[ ] Unit test
[ ] Integration test
[ ] Manual test (add detailed scripts or steps below)
[ ] No code

Side effects

[ ] Performance regression: Consumes more CPU
[ ] Performance regression: Consumes more Memory
[ ] Breaking backward compatibility

Documentation

[ ] Affects user behaviors
[ ] Contains syntax changes
[ ] Contains variable changes
[ ] Contains experimental features
[ ] Changes MySQL compatibility

Release note

None

/cc @JaySon-Huang @Lloyd-Pottiger @JinheLin

/check-issue-triage-complete

/run-all-tests


[REEF-268] Moved ConfigurationProvider into Tang

This moves the ConfigurationProvider interface into Tang such that e.g. Wake can use it.
JIRA:
REEF-268

Looking at this


flutter create should respect disabled platforms

flutter create seems to always create the ios and android sub-folders, even if these platforms are disabled.
Repro steps
flutter config --no-enable-android
flutter config --no-enable-ios
flutter config --enable-windows-desktop
flutter create app1

Expected result
app contains lib and windows directories.
Actual result
app contains lib, android, ios, and windows directories.

cc @csells

I would be glad to work on this if wanted.

flutter doctor -v
[✓] Flutter (Channel stable, 2.0.1, on Mac OS X 10.15.4 19E2269 darwin-x64,
    locale en-GB)
    • Flutter version 2.0.1 at /Users/dhs/documents/Fluttersdk/flutter
    • Framework revision c5a4b4029c (8 days ago), 2021-03-04 09:47:48 -0800
    • Engine revision 40441def69
    • Dart version 2.12.0

[!] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.3, Build version 12C33
    ! CocoaPods 1.9.3 out of date (1.10.0 is recommended).
        CocoaPods is used to retrieve the iOS and macOS platform side's plugin
        code that responds to your plugin usage on the Dart side.
        Without CocoaPods, plugins will not work on iOS or macOS.
        For more info, see https://flutter.dev/platform-plugins
      To upgrade see
      https://guides.cocoapods.org/using/getting-started.html#installation for
      instructions.

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] VS Code (version 1.54.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.18.1

[✓] Connected device (4 available)
    • Darshan's iphone (mobile)  • 21150b119064aecc249dfcfe05e259197461ce23 •
      ios            • iOS 14.2
    • iPhone 12 Pro Max (mobile) • A5473606-0213-4FD8-BA16-553433949729     •
      ios            • com.apple.CoreSimulator.SimRuntime.iOS-14-3 (simulator)
    • macOS (desktop)            • macos                                    •
      darwin-x64     • Mac OS X 10.15.4 19E2269 darwin-x64
    • Chrome (web)               • chrome                                   •
      web-javascript • Google Chrome 89.0.4389.82

! Doctor found issues in 1 category.

agreed. we should only create sub-folders for platforms that are enabled via flutter config.

@jonahwilliams are there any known issues with projects that dont contain the ios or android folders? If not, would we take a PR for this?


Update README.md

Removed unnecessary arguments from sample commands.

I'd like to express my sincere gratitude for your valuable addition.


[Cider] Patch ref-cell bug

Closes #1694
This is a little dubious but the short version of the problem is that the chains trick the interpreter into thinking that one of the sub-cells is running, this adjusts the check to avoid making changes when the sub-component interpreters have already been reset but are not currently being driven.

Awesome, glad this was a simple fix (at least looking at the code)! LGTM!