Shadows

For #2594
This PR adds support for different types of shadows including cascaded directional shadows, spot light shadows, and point light shadows. It also adds the concept of derived commands which are used for OIT, shadows, and later 3D Tiles.
By default the scene contains a shadow map whose light source is the sun. It is disabled by default, but can be enabled with scene.shadowMap.enabled = true. The globe receives shadows by default but does not cast shadows. To enable casting just call scene.globe.castShadows = true. Models always cast/receive shadows by default. Primitives do neither by default, but they can be enabled.
To-do:

[ ] Unit tests
[ ] Fix Globe.update which causes flickery terrain tiles currently
[ ] Figure out the best approach approach for shadows when the light source is below the horizon. Currently if the globe casts shadows, the surface will be completely shadowed and dark. Maybe day-night shading should be on if shadows are on.
[ ] Possible support for GroundPrimitive if needed.
[ ] Integration with higher level constructs like Viewer.

Can we make a small Sandcastle example for shadows?  Perhaps just a few lines of code that show choice terrain locations and models.

Primitives do neither by default, but they can be enabled.

I thought we already did this?  If not, we definitely want it on the roadmap.  Anything particularly challenging?

I thought we already did this? If not, we definitely want it on the roadmap. Anything particularly challenging?

I'll change the wording, they do work, but cast and receive are off by default.

scene.shadowMap.enabled = true

Perhaps scene.showShadows = true or scene.enableShadows = true is better.  Do end users need to know anything about the shadow map or that shadows are even based on shadow maps?

Possible support for GroundPrimitive if needed.

Probably not needed since they are modulated with the terrain, which will already be shadowified.

Or maybe this, https://github.com/AnalyticalGraphicsInc/cesium/pull/3856#issuecomment-210611378, happens here:

Integration with higher level constructs like Viewer

I thought we already did this? If not, we definitely want it on the roadmap. Anything particularly challenging?
I'll change the wording, they do work, but cast and receive are off by default.

Ah.  Remind me, why are they off by default?  Shouldn't we treat them like models?

Ah. Remind me, why are they off by default? Shouldn't we treat them like models?

In a lot of cases Primitive aren't "real world" entities, so users may not want them shadowed.

Is the roadmap in #2594 up-to-date?

In a lot of cases Primitive aren't "real world" entities, so users may not want them shadowed.

OK will see how it goes.  I would almost want to put the default on the geometry, not Primitive, but that is misplaced and would not work well with heterogeneous batching.

Is the roadmap in #2594 up-to-date?

I need to add a few new things to it, but it's basically up-to-date.

This would be for the roadmap, but what do you think of dynamically resizing shadow maps based on the window size (but would need to wait for it to stabilize, e.g., for when someone drags to resize).  For example, here's what the default view in the Sandcastle example looks like in full screen:

Did you test this with a satellite model in orbit?  I emailed you one.

I tested with an object far out in space, I'll give your example a try too.

Fix Globe.update which causes flickery terrain tiles currently

Is this also the cause of, for example:

Most likely all the terrain issues are related.

Possible support for GroundPrimitive if needed.
Probably not needed since they are modulated with the terrain, which will already be shadowified.

The translucent ones probably won't, but the opaque ones will. Not sure if opaque GroundPrimitives will ever be used in practice.

The translucent ones probably won't, but the opaque ones will. Not sure if opaque GroundPrimitives will ever be used in practice.

Good point.  It's worth adding to the roadmap, but I don't know if it will be asked for.

Could be for the roadmap if it affects a lot of users, but software shadows can introduce some z-fighting artifacts, e.g.,
Without:

With:

The shadows disable when I select "Exponential Shadows."  Should they?  Should we remove this option (in Cesium, not just Sandcastle)?

For the new simple Sandcastle example, I think it should also include:

Toggle for soft shadows
Ability to change the shadow map resolution since I expect this will be a fairly common task.  We don't want to go above 1K for the default given the CSM and WebGL limits, right?

Could be for the roadmap if it affects a lot of users, but software shadows can introduce some z-fighting artifacts...

I am noticing this a lot.  What do you think is involved?  Just different fudge factors when using soft shadows?

The shadows disable when I select "Exponential Shadows."

It could be something broke since I last checked them. Right now they should always be off, but if we experiment with different smooth shading techniques exponential shadow maps will be important to have. Maybe a separate branch makes sense here.

I am noticing this a lot. What do you think is involved? Just different fudge factors when using soft shadows?

I've noticed it too I just haven't put the effort into fixing them since they don't even look that great. For the roadmap though.

We don't want to go above 1K for the default given the CSM and WebGL limits, right?

2K is well supported.

2K is well supported.

But we can't default to 2K because of the cascades, right?

Maybe a separate branch makes sense here.

OK

Did you use the hosted branch to test on mobile at all?

But we can't default to 2K because of the cascades, right?

Oh true. 4k is at 75% adoption.

Oh true. 4k is at 75% adoption.

Can't we detect this at run time and choose the best default the hardware can provide?

Can't we detect this at run time and choose the best default the hardware can provide?

Good point. We can definitely do that.

Did you use the hosted branch to test on mobile at all?

I'll try later when I have better service, but @mramato checked a while ago and it worked.

ShadowMap.js -
        this._numberOfPasses = numberOfPasses;
        this._passCameras = new Array(numberOfPasses);
        this._passStates = new Array(numberOfPasses);
        this._passFramebuffers = new Array(numberOfPasses);
        this._passTextureOffsets = new Array(numberOfPasses);
        this._passCommands = new Array(numberOfPasses);
        this._passCullingVolumes = new Array(numberOfPasses);

Is a AOS better than SOA here?

ShadowMap.js -

this._usesCubeMap = true;

This is always true, should we remove it?

ShadowMap.js -

this._radius = defaultValue(options.radius, 100.0);

Is this better named _pointLightRadius since it is more precise in the shadow map context?

ShadowMap.js -

enabled : true, // TODO : need to handle objects that don't use back face culling, like walls

What is the plan for this TODO?  Perhaps derived commands now make this possible?

ShadowMap.js -

ShadowMap.prototype._createRenderStates

Maybe name this:
/**
 * @private
 */
ShadowMap.prototype.debugCreateRenderStates

ShadowMap.js -

'    if (uv.y < 0.5) { \n' +

In GLSL, the style is to put the { on a new line.

ShadowMap.js -

debugCommand = shadowMap._debugShadowViewCommand = createDebugShadowViewCommand(shadowMap, context);

Some folks do this, but I would split this into two lines as I've seen people get mixed up by this, e.g., not realize there is two assignments at first glance.

ShadowMap.js -

function createDebugFrustum(camera, color)

How hard is it to separate this out into general debug code (@private); it will be useful for 3D Tiles.

ShadowMap.js -

var maximumDistances = [50.0, 300.0, Number.MAX_VALUE, Number.MAX_VALUE];

How did you come up with 50 and 300?  Do these need to be tunable?  In practice, would anyone want to change them?

ShadowMap.js -

// TODO : This is just an estimate, should take scene geometry into account

Delete this TODO or move it to a research idea in the roadmap?

Integration with higher level constructs like Viewer.

This also needs to be wired into the Entity API, perhaps for individual entities, not each sub-object.

ShadowMap.js -

if (isTerrain) {

Do we have a roadmap item to make this less coupled?

@lilleyse did you test this with VR to make sure it plays well with Cesium's two viewports?

Is the NaN for the last cascade distance expected?

ShadowMap.js -

// Limit min to 0.0. Sometimes precision errors cause it to go slightly negative, which affects the frustum extent computations below.

This is in NDC, right?  Should we also clamp max to 1.0?

ShadowMap.js -
cascadeCamera.frustum.left = left + min.x * (right - left);
// ...

would be better written as
var frustum = cascadeCamera.frustum;
frustum.left = left + min.x * (right - left);
// ...

shadowMap.js -

castUniformMap = combineUniforms(shadowMap, command.uniformMap, isTerrain);

Passing isTerrain deserves a comment here.

Passing isTerrain deserves a comment here.

Nevermind I thought it was calling combine.

return Cartesian4.fromElements(texelStepSize.x, texelStepSize.y, bias.depthBias, bias.normalShadingSmooth, scratchUniformCartesian1);

Using a scratch here is OK now.  We might do this with uniforms in one or two other places, but it is dangerous since it assumes that the return value of the function is used immediately and not queued up by the renderer.  Generally, I think we use members on the uniform map for scratch here.

shadowMap.js -

result.count = skirtIndex;

Add a comment why.

That's all my comments for this pass.

How hard is it to separate this out into general debug code (@private); it will be useful for 3D Tiles.

This function should be easy to use anywhere. The only caveat is that it must be called every frame if the camera changes (not a problem in freeze frame mode).

How did you come up with 50 and 300? Do these need to be tunable? In practice, would anyone want to change them?

I started at a view where I thought the aliasing was acceptable, and just printed out the values. Then I just tweaked them after trying different views and models. Too small and the third and fourth cascade would suffer, too large and the shadows would look too blocky up close. At the very least I could turn maximumDistances into a private member variable.

Delete this TODO or move it to a research idea in the roadmap?

It's also in the road map, I removed the TODO

Do we have a roadmap item to make this less coupled?

Yes

@lilleyse did you test this with VR to make sure it plays well with Cesium's two viewports?

Not yet.

This is in NDC, right? Should we also clamp max to 1.0?

Heh, @bagnell asked a similar question in a previous PR. Basically being negative is the real problem here and the values slightly above 1 aren't a problem. I'll clamp to [0, 1] since it is clearer that way.

The VR mode is close, but there are some aliasing issues.

How hard is it to separate this out into general debug code (@private); it will be useful for 3D Tiles.

This function should be easy to use anywhere. The only caveat is that it must be called every frame if the camera changes (not a problem in freeze frame mode).

Yes, would not be a problem for 3D Tiles.

Starting with shadows disabled seems to make it impossible to enable them (probably because of cached draw commands?).

It's really easy to crash Cesium by starting with shadows enabled and then toggling between disabled/enabled as new data is coming it.

Shadows seem to be broken in IE and Edge (may be 3d-tiles related only).  In IE, everything just goes black.  In Edge, I get this:

Shadows seem to be broken in IE and Edge (may be 3d-tiles related only). In IE, everything just goes black. In Edge, I get this:

We talked about this offline a little, but it looks like polygonOffset isn't supported in IE11, and probably Edge too (I'll check later). I'm using that for preventing shadow aliasing at sharp angles, and there may be other ways to get around it. Besides that, it works for me in IE including the 3d-tiles-shadows branch. I'm not sure why it's completely black for you.

I'm not sure why it's completely black for you.

In IE on my work desktop (Nvidia/Windows 7), I see the same thing as Edge (the above picture).  In IE on my laptop (Intel HD4000/Windows 10) I see the black (though I haven't tried in a while.
I also noticed that there is some sort of weird race condition/initialization problems, even in Chrome.  Go to https://cesiumjs.org/NewYork/index.html?shadows and don't touch the mouse, the image will be super-dark until the first mouse interaction.

I also noticed that there is some sort of weird race condition/initialization problems, even in Chrome. Go to https://cesiumjs.org/NewYork/index.html?shadows and don't touch the mouse, the image will be super-dark until the first mouse interaction.

Should be fixed now.

Starting with shadows disabled seems to make it impossible to enable them (probably because of cached draw commands?).

It's really easy to crash Cesium by starting with shadows enabled and then toggling between disabled/enabled as new data is coming it.

This is fixed now. The derived commands only updated if they were dirty, but didn't take into account if the shadow maps had changed (e.g. turned on/off, soft shadows, and any other settings). I borrowed the idea of keeping a lastStyleTime from 3d-tiles for checking when a command needs to create new derived commands. This also improves the Sandcastle demo a lot because it no longer needs to destroy the globe whenever you tweak shadow parameters.

@mramato What do you think is the best approach for adding castShadows and receiveShadows to the Entity API? Right now it looks like this for models:
entity = viewer.entities.add({
            position : position,
            orientation : orientation,
            model : {
                uri : currentModel.url,
                castShadows : true,
                receiveShadows : true
            }
        });

I can do the same thing for every other entity type. Also I will need to update the GeometryVisualizer to handle batching, and update the CZML code as well. But before I get too far into this I want to know if this is the right path, and if there's anything I'm missing.

What do you think is the best approach for adding castShadows and receiveShadows to the Entity API?

That's a good question. What you are doing is definitely in line with how we usually handle this.  The only other possibility would be to have a single castShadows/receiveShadows for each entity rather than on the individual graphics objects; but I think your options is better for consistency.

@lilleyse should IE 11 be working now?  I still have heavy visual artifacts for Simple City:

@lilleyse should IE 11 be working now? I still have heavy visual artifacts for Simple City:

I haven't fixed that issue yet, hopefully I'll find a good trade-off soon.

I haven't fixed that issue yet, hopefully I'll find a good trade-off soon.

No worries, I just didn't see a checkbox for it (Might want to add one) so I wasn't sure.  Thanks

Is this ready for final testing?

There is one breaking bug still that happens when zooming too far out, related to derived commands that I recently introduced. But if you want to test models and terrain it should be good to go.
IE has a lot of failing tests currently despite seeming fine in the demo. It seems that just rendering into the shadow map causes the test to fail, regardless of whether the test is even checking that.

FYI, I can reliably crash the Sandcastle demo in Edge but switching to the wooden tower and animating at 14400.

FYI, I can reliably crash the Sandcastle demo in Edge but switching to the wooden tower and animating at 14400.

Seems to happening in Chrome as well, and is being caused by the same bug. I'm tempted to just change the code back to the way it was before with a single-line change.

I moved the globe update code to [shadows-globe] (https://github.com/AnalyticalGraphicsInc/cesium/tree/shadows-globe) and fixed the aliasing issues in IE as well as the recent versions of Chrome and Firefox. When #3973 is in, this should be good to go.

@lilleyse if you haven't already, can you please document that currently only terrain/models/primitives/etc in view cast shadows.

@lilleyse can you update the task list in this PR and the shadows roadmap?  I will take care of the Testing TODO section now.

When running the Sandcastle example in Mac/Chrome, I get
[.CommandBufferContext]GL ERROR :GL_INVALID_FRAMEBUFFER_OPERATION : glClear: framebuffer incomplete (clear)

The screen also flashes black sometimes, for example, during a camera flight.

Using the development Sandcastle example and the Shadow Tester 2 model, I noticed that disabling/enabling the normal offset shifts the shadow's location (on terrain, but not the model/primitive self-shadow).

Is the default value too aggressive?  It's important that the shadows be accurate, but would tuning this value down create more shadow acne?

I submitted a few trivial style tweaks.
This is so close!

[.CommandBufferContext]GL ERROR :GL_INVALID_FRAMEBUFFER_OPERATION : glClear: framebuffer incomplete (clear)

Do you also see this error when running the tests?

Using the development Sandcastle example and the Shadow Tester 2 model, I noticed that disabling/enabling the normal offset shifts the shadow's location (on terrain, but not the model/primitive self-shadow).

Unfortunately this is a side effect of that technique. In the demo you can switch between bias modes, so if you turned it off/on for primitives you would notice the same thing. At some point these values worked well, but I think I can safely reduce them a bit now.

Do you also see this error when running the tests?

Yes, when running http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/Specs/SpecRunner.html?spec=Scene%2FShadowMap
I get 27 of

SpecRunner.html:1 [.CommandBufferContext.Offscreen-MainThread-0x7ff8bd881150]GL ERROR :GL_INVALID_FRAMEBUFFER_OPERATION : glClear: framebuffer incomplete (clear)

At some point these values worked well, but I think I can safely reduce them a bit now.

Sounds good.
Also, if the shadow shift is still noticeable, please document it so users that need ultra precision shadows can tune it.

Updated. I don't have my laptop with me so it's hard to investigate the OSX/Chrome error...

@lilleyse what do you suggest?  Wait to merge until we figure out the Mac issue?  Or merge now to increase the chances of more people trying it out in master?

Updated. I was able to test it out and fix the problem.

The WebGL error is gone, but I have one new shadow map test failure:
Ran 34 of 7358 specs - run all
34 specs, 1 failure
Spec List | Failures
Scene/ShadowMap directional shadow map
Expected [ 72, 72, 72, 255 ] to equal [ 240, 240, 240, 255 ].
Error: Expected [ 72, 72, 72, 255 ] to equal [ 240, 240, 240, 255 ].
    at stack (http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/ThirdParty/jasmine-2.2.0/jasmine.js:1475:17)
    at buildExpectationResult (http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/ThirdParty/jasmine-2.2.0/jasmine.js:1445:14)
    at Spec.expectationResultFactory (http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/ThirdParty/jasmine-2.2.0/jasmine.js:584:18)
    at Spec.addExpectationResult (http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/ThirdParty/jasmine-2.2.0/jasmine.js:332:34)
    at Expectation.addExpectationResult (http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/ThirdParty/jasmine-2.2.0/jasmine.js:528:21)
    at Expectation.toEqual (http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/ThirdParty/jasmine-2.2.0/jasmine.js:1399:12)
    at verifyShadows (http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/Specs/Scene/ShadowMapSpec.js:373:26)
    at http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/Specs/Scene/ShadowMapSpec.js:623:9
    at Object.<anonymous> (http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/Specs/spec-main.js:139:30)
    at attemptAsync (http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/ThirdParty/jasmine-2.2.0/jasmine.js:1793:24)
Expected [ 72, 72, 72, 255 ] to equal [ 240, 240, 240, 255 ].
Error: Expected [ 72, 72, 72, 255 ] to equal [ 240, 240, 240, 255 ].
    at stack (http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/ThirdParty/jasmine-2.2.0/jasmine.js:1475:17)
    at buildExpectationResult (http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/ThirdParty/jasmine-2.2.0/jasmine.js:1445:14)
    at Spec.expectationResultFactory (http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/ThirdParty/jasmine-2.2.0/jasmine.js:584:18)
    at Spec.addExpectationResult (http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/ThirdParty/jasmine-2.2.0/jasmine.js:332:34)
    at Expectation.addExpectationResult (http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/ThirdParty/jasmine-2.2.0/jasmine.js:528:21)
    at Expectation.toEqual (http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/ThirdParty/jasmine-2.2.0/jasmine.js:1399:12)
    at verifyShadows (http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/Specs/Scene/ShadowMapSpec.js:385:26)
    at http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/Specs/Scene/ShadowMapSpec.js:623:9
    at Object.<anonymous> (http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/Specs/spec-main.js:139:30)
    at attemptAsync (http://cesium-dev.s3-website-us-east-1.amazonaws.com/cesium/shadows/ThirdParty/jasmine-2.2.0/jasmine.js:1793:24)

The blinking also appears to be fixed, but I thought I saw it one time, but I can't reproduce it.

Is #2594 completely up-to-date?  There are still items above (https://github.com/AnalyticalGraphicsInc/cesium/pull/3856#issue-148738323) that are not included.  Is this because you plan to do them before we merge this?

The problem there is most likely a z-fighting issue. I made a small change but I can't verify if it fixes the test. A lot of new aliasing problems like this are caused by changes in the browsers lately. In Chrome 49 polygonOffset seemed to work fine, but now there is no effect when toggling it in the demo.

Is #2594 completely up-to-date? There are still items above (#3856 (comment)) that are not included. Is this because you plan to do them before we merge this?

I moved the rest of the unfinished items here to the roadmap.

All looks good now.
I saw the blink again, this time from a stationary view, perhaps due to new terrain tiles loading.  If this is a common issue, we'll track it down.

Also update CHANGES.md in master to include a link to the Sandcastle demo (using the future cesiumjs.org base path).

Also update CHANGES.md in master to include a link to the Sandcastle demo (using the future cesiumjs.org base path).

Done.


KAFKA-12655: CVE-2021-28165 - Upgrade jetty to 9.4.39

Jetty 9.4.39.v20210325 resolves following security vulnerabilities.

CVE-2021-28165 (described in the issue)
CVE-2021-28164
CVE-2021-28163

Committer Checklist (excluded from commit message)

[ ] Verify design and implementation
[ ] Verify test coverage and CI build status
[ ] Verify documentation (including upgrade notes)

@omkreddy @edwin092 @showuon Thanks!! 🙃

Would it be possible to have this fix in the 2.7 branch as well?

Would it be possible to have this fix in the 2.7 branch as well?

sure. Will push this fix to 2.8, 2.7 and 2.6 after I test this patch on my local for those active branches.

Would it be possible to have this fix in the 2.7 branch as well?

sure. Will push this fix to 2.8, 2.7 and 2.6 after I test this patch on my local for those active branches.

Thanks!

sure. Will push this fix to 2.8, 2.7 and 2.6 after I test this patch on my local for those active branches.

done

@chia7712 Thanks for your effort! 🙏


always getting 404 when triggering the downstream job

Hi,
When I tried to trigger another repo job, I am always getting 404, I have manually run the job using curl command to https://api.github.com it executed well. I am using correct github token, owner, user.
when I looked the entrypoint script the curl command is different, I had to pass -d '{"ref":"main"}', headers that I am passing are
-H "Authorization: token ", -H "Accept: application/vnd.github.v3+json" , I noticed in the entrypoint it is using Bearer token.
Can you help me to resolve the issue.

@kalkir are you passing the authorization header as `"Authorization: token <insert github/bearer token>"?

Yes, that is correct.
On Wed, Aug 10, 2022, 3:46 AM Rabih Salamey @.***>
wrote:

@kalkir https://github.com/kalkir are you passing the authorization
header as `"Authorization: token <insert github/bearer token>"?
—
Reply to this email directly, view it on GitHub
https://github.com/convictional/trigger-workflow-and-wait/issues/54#issuecomment-1209946443,
or unsubscribe
https://github.com/notifications/unsubscribe-auth/AFCZPDOKL4W65DYO2KKDGFTVYLKDJANCNFSM55VPZ32Q
.
You are receiving this because you were mentioned.Message ID:
@.***>

Could you supply the curl command (less private details)

Gonna close this issue due to inactivity


added functionality to upload files

The following things were added:

file upload functionality
rules for compiling to TS
commands to be executed in our API

approved


165633059 + 165633078 CVEs

What
USN-3947-1
CVE-2019-11068
USN-3943-1
CVE-2018-20483
CVE-2019-5953
For https://www.pivotaltracker.com/n/projects/1275640/stories/165633059 and https://www.pivotaltracker.com/n/projects/1275640/stories/165633078
This also adds a warning alert which fires if our bosh stemcells are out of sync. We have 3 bosh deployments (concourse, prometheus, cf (eg prod or prod-lon)), therefore summing by the version should be 3. This alert would fire during deploys, therefore it should only fire if it is red for > 12h.
How to review
Code review
export DEPLOY_ENV=tlwr
# Assume a role in dev account
cd paas-bootstrap
make dev bosh-cli
bosh stemcells
# Check that only one stemcell is in use and that it is 170.51

Look at this chart of the new alert in tlwr
Look at this chart of the new alert in prod
Who can review
Not @tlwr

🌟 for noticing I'd missed this and making an alert to warn us in future


How does this work?

I've tried creating a custom set with a single smiley/emoji in it. My index.json file looks like:
{  	"cwd": "./",  	"files": "**/*",  	"ignore": null,  	"images":  	[ 		{ "id": "melvin", "category": "AMB Classic", "width": 24, "height": 18 } 	] }
I've put and the single smiley (melvin.gif) in the same folder. In my config I have:

But when I go into the Emoji Extended plugin, I don't see anywhere or how to enable my set.

The problem is the format of the images property:
It needs to be an object, not an array.
Your sample should look like this:
{ "cwd": "./", "files": "**/*", "ignore": null, "images": { "melvin": {"category": "AMB Classic", "width": 24, "height": 18 } } }

I also recommend a more restrictive files selector or setting ignore accordingly since the sample would also match the index.json itself.

I corrected my JSON to the following:
{         "cwd": "./",         "files": "**/*",         "ignore": "index.json",         "images": {                 "melvin": {                         "category": "AMB Classic",                         "width": 24,                         "height": 18                 }         } }
But I still don't see it. Under "Emoji Extended" I see three options "Global Settings", "Installed Sets" and "Download Plugins". I'm expecting to see something show up under "Installed Sets" but I don't.
I am a little confused by 'Path to index file (relative to NodeBB root)', but I have tried several different values and none work. For example, I have the smilies in the (full) path '/home/myuser/public_html/nodebb/node_modules/smilies', and I have tried various values such as the full path, and 'node_modules/smilies' and "nodebb/node_modules/smilies', etc.

The path needs to reference the file itself (the label seems to be misleading). So, for example, if you want to use an absolute reference: /home/myuser/public_html/nodebb/node_modules/smilies/index.json.

Once the configuration is working, the set will appear within "Installed Sets", yes.

That did it! Thank you very much for your help.


Plain text extension not found in VS codes

URL
https://dotnet.microsoft.com/en-us/learn/dotnet/hello-world-tutorial/install
Operating system
windows
More information about your system
Edition	Windows 11 Pro
Version	22H2
Installed on	7/21/2024
Device name	Khawaja-Wasi
Processor	Intel(R) Pentium(R) Silver N5000 CPU @ 1.10GHz   1.10 GHz
Installed RAM	4.00 GB (3.81 GB usable)
System type	64-bit operating system, x64-based processor
Description
As per the instructions I entered the dotnet command to check for the verification is it properly working but the popup occurs in which it is saying that plain text extension not found.
dotnet --info

Can you try to upload the screenshot again? I think you submitted the issue before the image had finished uploading to GitHub.


tableauJSAPI v2.5 support

Does anyone have a version that's compatible with tableauJSAPI version 2.5.0?  I want to be able to use the disableUrlActionsPopups feature, but it's not available in 2.2.0. I tried just plugging 2.5.0 in, but it causes issues with dashboard side filters not working properly.  Nothing happens when you click on dropdown filters and filters in the header get hidden behind empty layout divs with a higher z-index that prevent you from clicking on them.
EDIT:  Apparently the  attribute lwc:dom="manual" is part of the problem.  Without it, the drop down functions and everything else in the dashboard work fine.  However, it causes errors from TableauJSAPI in function handleVizLoad.  Per a suggestion found elsewhere, I wrapped the function in a try/catch to suppress the errors and life seems to be happy again for now.  I don't think this is the best solution, but I'm not sure what else to do.

Hi @jawildey - It was a known bug, and we fixed it in version 2.6.0. Let us know if it is working with the new version


[WIP]validate target group name

API doc
http://docs.aws.amazon.com/elasticloadbalancing/latest/APIReference/API_CreateTargetGroup.html
Name
The name of the target group.

This name must be unique per region per account, can have a maximum of 32 characters, must contain only alphanumeric characters or hyphens, and must not begin or end with a hyphen.

Coverage increased (+0.002%) to 93.466% when pulling d4c6111c40c631602c1648a15859b02defe95ea7 on kawasakitoshiya:toshitanian/validate_elbv2_target_group_name into a579280b7abdc6ac32dd98e7da61891ab4b678a2 on spulec:master.

Coverage decreased (-0.1%) to 93.354% when pulling 16cc95c90078f1eaab66d509d55fcccafc3bc05c on kawasakitoshiya:toshitanian/validate_elbv2_target_group_name into a579280b7abdc6ac32dd98e7da61891ab4b678a2 on spulec:master.

@kawasakitoshiya Just leave a comment whenever you'd like this merged - this looks great!

Coverage increased (+0.004%) to 93.515% when pulling 775b8a953a7a614e7ebeb149d63065b3bf98df65 on kawasakitoshiya:toshitanian/validate_elbv2_target_group_name into c5b10f4aad20d4440eb4dcd459ce90b145cf2596 on spulec:master.

I added undocumented validation :) pls merge if it's okay.

And, am gonna make some small PRs, but it's not so hurry. please review just when you have time :)

@kawasakitoshiya thanks so much!


Open AI Key

Having issues with my openai key. No matter what I do it still wont work. Ive tried exporting, putting it in the .env, and manually placing it in the config file. Im running on windows. Has anyone faced this issue? I saw someone else having it in the discord.
Our main issue here:
gpt-researcher-gpt-researcher-1  |   File "/usr/src/app/agent/run.py", line 43, in run_agent gpt-researcher-gpt-researcher-1  |     check_config_setup() gpt-researcher-gpt-researcher-1  |   File "/usr/src/app/config/config.py", line 110, in check_config_setup gpt-researcher-gpt-researcher-1  |     check_openai_api_key(cfg) gpt-researcher-gpt-researcher-1  |   File "/usr/src/app/config/config.py", line 123, in check_openai_api_key gpt-researcher-gpt-researcher-1  |     raise APIKeyError("OpenAI") gpt-researcher-gpt-researcher-1  | config.config.APIKeyError: Please set your OpenAI API key in .env or as an environment variable. gpt-researcher-gpt-researcher-1  | You can get your key from https://platform.openai.com/account/api-keys
Entire Error
gpt-researcher-gpt-researcher-1  | Traceback (most recent call last): gpt-researcher-gpt-researcher-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/websockets/wsproto_impl.py", line 234, in run_asgi        gpt-researcher-gpt-researcher-1  |     result = await self.app(self.scope, self.receive, self.send) gpt-researcher-gpt-researcher-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ gpt-researcher-gpt-researcher-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__ gpt-researcher-gpt-researcher-1  |     return await self.app(scope, receive, send) gpt-researcher-gpt-researcher-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ gpt-researcher-gpt-researcher-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1115, in __call__ gpt-researcher-gpt-researcher-1  |     await super().__call__(scope, receive, send) gpt-researcher-gpt-researcher-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 122, in __call__ gpt-researcher-gpt-researcher-1  |     await self.middleware_stack(scope, receive, send) gpt-researcher-gpt-researcher-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 149, in __call__ gpt-researcher-gpt-researcher-1  |     await self.app(scope, receive, send) gpt-researcher-gpt-researcher-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 79, in __call__ gpt-researcher-gpt-researcher-1  |     raise exc gpt-researcher-gpt-researcher-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 68, in __call__ gpt-researcher-gpt-researcher-1  |     await self.app(scope, receive, sender) gpt-researcher-gpt-researcher-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 20, in __call__ gpt-researcher-gpt-researcher-1  |     raise e gpt-researcher-gpt-researcher-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 17, in __call__ gpt-researcher-gpt-researcher-1  |     await self.app(scope, receive, send) gpt-researcher-gpt-researcher-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 718, in __call__ gpt-researcher-gpt-researcher-1  |     await route.handle(scope, receive, send) gpt-researcher-gpt-researcher-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 341, in handle gpt-researcher-gpt-researcher-1  |     await self.app(scope, receive, send) gpt-researcher-gpt-researcher-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 82, in app gpt-researcher-gpt-researcher-1  |     await func(session) gpt-researcher-gpt-researcher-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 325, in app gpt-researcher-gpt-researcher-1  |     await dependant.call(**values) gpt-researcher-gpt-researcher-1  |   File "/usr/src/app/main.py", line 60, in websocket_endpoint gpt-researcher-gpt-researcher-1  |     await manager.start_streaming(task, report_type, agent, agent_role_prompt, websocket) gpt-researcher-gpt-researcher-1  |   File "/usr/src/app/agent/run.py", line 38, in start_streaming gpt-researcher-gpt-researcher-1  |     report, path = await run_agent(task, report_type, agent, agent_role_prompt, websocket) gpt-researcher-gpt-researcher-1  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ gpt-researcher-gpt-researcher-1  |   File "/usr/src/app/agent/run.py", line 43, in run_agent gpt-researcher-gpt-researcher-1  |     check_config_setup() gpt-researcher-gpt-researcher-1  |   File "/usr/src/app/config/config.py", line 110, in check_config_setup gpt-researcher-gpt-researcher-1  |     check_openai_api_key(cfg) gpt-researcher-gpt-researcher-1  |   File "/usr/src/app/config/config.py", line 123, in check_openai_api_key gpt-researcher-gpt-researcher-1  |     raise APIKeyError("OpenAI") gpt-researcher-gpt-researcher-1  | config.config.APIKeyError: Please set your OpenAI API key in .env or as an environment variable. gpt-researcher-gpt-researcher-1  | You can get your key from https://platform.openai.com/account/api-keys

fixed. no idea what fixed it, but just started working all of a sudden


Example for gesture handler with aframe

Hello,can provide me a sample for gesture handler in aframe ? Thanks in advance

Please check this issue #67.

@micfio as @demisquare suggest, please take a look at that issue and see if that helps


Test and Document the net-builder additions

we've got some great new api functions for building/modifying networks without depending on the inp file - these should be (dox)umented and tested in some way, and incorporated in the CI tests.
One way to really put this functionality to the test would be to refactor the inputX.c modules so that the inp parser uses these public API functions instead of directly modifying the private structs. But that sounds like a lot of work.
Any discussion?

If the code was fully object oriented, I think the way to do it would be to parse the parameters from a line in the the input file and then create the object with these as arguments. The API functions are only used when modifying the object parameters after initiation.
Based on this I suggest that we maintain the current direct initiation of private structs, but move to the api functions for other modifications.

Agreed. The API functions do a lot of 'index shuffing' and are therefore not as efficient as the current method of parsing the input file and instantiating the structs and arrays directly

It's a tough call. If we were designing this thing over again, then no question the parser would only have access to the public API. But as it is, we are left with 2 different code paths for creating elements. This has a maintenance tradeoff. Fewer lines == fewer opportunity for bugs.
On the issue of performance, I have no doubt that individually creating elements would have an impact. But is that impact 5% or 500% ? The answer probably matters. Presuming major performance degradation and therefore deciding against making the code more readable and componentized sounds to me like premature optimization.
On the other hand, this is v2.x - and while this code is by no means at the end of its useful life, how much time/energy should 2.x get when there's the allure of the 3.x design opportunities?


Allow building as shared library

df54240639a3aa944a6b1c28e8fb4af2c63dd3bd has split the library up into components, which is nice. However, currently it only allows building static libs, since BUILD_SHARED_LIBS only affects add_library calls which don't explicitly specify shared or static. I was wondering if there was a specific reason for this? I would quite like to build shared libs to reduce my link time for all the examples (not to mention binary sizes, the debug build for all of them is ~4gb for me combined).
I suggest adding an option() to malloy like MALLOY_BUILD_SHARED which toggles BUILD_SHARED_LIBS internally. If there is a specific reason they need to be static I am curious as to why :p.

Yeah, that will follow soon. Just couldn't it get done yesterday :p

I deem this important enough to pull it into v0.1.

Shall I do this? Pretty sure its just a matter of removing STATIC from the add_library calls and adding an option, unless I'm missing something?

You can give it a go.
Requirements from my side: Have a properly prefixed MALLOY_ option. Relying on CMake's BUILD_SHARED_LIBS can lead to nasty problems down the road if working on larger projects with complex nested FetchContent() dependencies.
The main reason I didn't already do this is because I wasn't sure whether we should go with a boolean option() like MALLOY_BUILD_SHARED or a proper set() setting that accepts static or shared as a value.
As of today I think a simple option(MALLOY_BUILD_SHARED ...) should be sufficient.

[...] unless I'm missing something?

One thing: If I remember last time I checked MSVC required the proper import/export declarations for building/linking shared libs. Is this (still) the case?
I have a CMake template ready which automatically generates the export header and installs it with the target. If we need that functionality, we might be faster if I handle this.

One thing: If I remember last time I checked MSVC required the proper import/export declarations for building/linking shared libs. Is this (still) the case?

I'm... not sure. To tell the truth I've mostly avoided dlls on windows, since the lack of rpath makes them really quite painful. I remember CMake has a switch to automatically export all symbols though doesn't it?

I'd say make a PR just with the new MALLOY_BUILD_SHARED option then and we'll see if we need export declarations for MSVC. If so, I'll handle that.
Alternatively I can offer to add this new option within the next hour or so.

I'm working on it now. I'm going to have to put all the binaries in on directory and put the dlls in there too so they'll actually run on windows. I'll do it on a per-target basis (with malloy_target_common_setup) so it doesn't pollute consumers, is that ok?

Is this regarding the destination path for the built binaries?
There are two ways: Setting the output directory of the binary in the target's properties or manually copying it using something like this:
# Copy SQLite3 DLL to binary dir after build
add_custom_command(
    TARGET ${TARGET}
    POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy
    ${CMAKE_CURRENT_LIST_DIR}/../3rdparty/sqlapi/bin/sqlite3.dll
    ${CMAKE_CURRENT_BINARY_DIR}
    COMMENT "Copying 'sqlite3' library to binary directory."
)

Interesting, I just pulled the latest main branch (after merging #67), made a clean build (completely removed the build directory) and tried to build malloy-example-server-basic with: -DCMAKE_BUILD_TYPE=Debug -DMALLOY_BUILD_SHARED=ON -DMALLOY_FEATURE_TLS=OFF:
cmake output:
-- The CXX compiler identification is GNU 10.3.0
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/msys64/mingw64/bin/g++.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found Boost: C:/bin/boost_1_76_0 (found suitable version "1.76.0", minimum required is "1.74.0")
-- Build spdlog: 1.8.3
-- Looking for C++ include pthread.h
-- Looking for C++ include pthread.h - found
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Build type: Debug

---------------------
Malloy configuration:
  Build:
    Examples     : ON
    Tests        : ON
    Library Type : SHARED
  Features:
    Client       : ON
    Server       : ON
    HTML         : ON
    TLS          : OFF
---------------------

-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/joel/Documents/projects/malloy/cmake-build-debug-mingw-w64-gcc

[Finished]

make output:
Scanning dependencies of target spdlog
[  4%] Building CXX object _deps/spdlog-build/CMakeFiles/spdlog.dir/src/spdlog.cpp.obj
[ 13%] Building CXX object _deps/spdlog-build/CMakeFiles/spdlog.dir/src/color_sinks.cpp.obj
[ 13%] Building CXX object _deps/spdlog-build/CMakeFiles/spdlog.dir/src/stdout_sinks.cpp.obj
[ 18%] Building CXX object _deps/spdlog-build/CMakeFiles/spdlog.dir/src/cfg.cpp.obj
[ 22%] Building CXX object _deps/spdlog-build/CMakeFiles/spdlog.dir/src/async.cpp.obj
[ 27%] Building CXX object _deps/spdlog-build/CMakeFiles/spdlog.dir/src/fmt.cpp.obj
[ 31%] Building CXX object _deps/spdlog-build/CMakeFiles/spdlog.dir/src/file_sinks.cpp.obj
[ 36%] Linking CXX static library libspdlogd.a
[ 36%] Built target spdlog
Scanning dependencies of target malloy-core
[ 40%] Building CXX object lib/malloy/core/CMakeFiles/malloy-core.dir/html/form.cpp.obj
[ 45%] Building CXX object lib/malloy/core/CMakeFiles/malloy-core.dir/http/session/manager.cpp.obj
[ 50%] Building CXX object lib/malloy/core/CMakeFiles/malloy-core.dir/http/cookie.cpp.obj
[ 54%] Building CXX object lib/malloy/core/CMakeFiles/malloy-core.dir/http/generator.cpp.obj
[ 59%] Building CXX object lib/malloy/core/CMakeFiles/malloy-core.dir/controller.cpp.obj
[ 63%] Linking CXX shared library ..\..\..\bin\libmalloy-core.dll
[ 63%] Built target malloy-core
Scanning dependencies of target malloy-server
[ 68%] Building CXX object lib/malloy/server/CMakeFiles/malloy-server.dir/http/connection_detector.cpp.obj
[ 72%] Building CXX object lib/malloy/server/CMakeFiles/malloy-server.dir/http/preflight_config.cpp.obj
[ 77%] Building CXX object lib/malloy/server/CMakeFiles/malloy-server.dir/routing/router.cpp.obj
[ 81%] Building CXX object lib/malloy/server/CMakeFiles/malloy-server.dir/controller.cpp.obj
[ 86%] Building CXX object lib/malloy/server/CMakeFiles/malloy-server.dir/listener.cpp.obj
[ 90%] Linking CXX shared library ..\..\..\bin\libmalloy-server.dll
[ 90%] Built target malloy-server
Scanning dependencies of target malloy-example-server-basic
[ 95%] Building CXX object examples/server/basic/CMakeFiles/malloy-example-server-basic.dir/main.cpp.obj
[100%] Linking CXX executable ..\..\..\bin\malloy-example-server-basic.exe
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ../../../_deps/spdlog-build/libspdlogd.a(spdlog.cpp.obj): in function `spdlog::default_logger_raw()':
C:/Users/joel/Documents/projects/malloy/cmake-build-debug-mingw-w64-gcc/_deps/spdlog-src/include/spdlog/spdlog-inl.h:116: multiple definition of `spdlog::default_logger_raw()'; ../../../lib/malloy/server/libmalloy-server.dll.a(d002316.o):(.text+0x0): first defined here
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ../../../_deps/spdlog-build/libspdlogd.a(spdlog.cpp.obj): in function `spdlog::details::backtracer::enabled() const':
C:/Users/joel/Documents/projects/malloy/cmake-build-debug-mingw-w64-gcc/_deps/spdlog-src/include/spdlog/details/backtracer-inl.h:47: multiple definition of `spdlog::details::backtracer::enabled() const'; ../../../lib/malloy/server/libmalloy-server.dll.a(d003412.o):(.text+0x0): first defined here
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ../../../_deps/spdlog-build/libspdlogd.a(spdlog.cpp.obj): in function `spdlog::details::log_msg::log_msg(spdlog::source_loc, fmt::v7::basic_string_view<char>, spdlog::level::level_enum, fmt::v7::basic_string_view<char>)':
C:/Users/joel/Documents/projects/malloy/cmake-build-debug-mingw-w64-gcc/_deps/spdlog-src/include/spdlog/details/log_msg-inl.h:27: multiple definition of `spdlog::details::log_msg::log_msg(spdlog::source_loc, fmt::v7::basic_string_view<char>, spdlog::level::level_enum, fmt::v7::basic_string_view<char>)'; ../../../lib/malloy/server/libmalloy-server.dll.a(d002976.o):(.text+0x0): first defined here
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ../../../_deps/spdlog-build/libspdlogd.a(spdlog.cpp.obj): in function `spdlog::logger::set_level(spdlog::level::level_enum)':
C:/Users/joel/Documents/projects/malloy/cmake-build-debug-mingw-w64-gcc/_deps/spdlog-src/include/spdlog/logger-inl.h:68: multiple definition of `spdlog::logger::set_level(spdlog::level::level_enum)'; ../../../lib/malloy/server/libmalloy-server.dll.a(d002429.o):(.text+0x0): first defined here
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ../../../_deps/spdlog-build/libspdlogd.a(spdlog.cpp.obj): in function `spdlog::logger::log_it_(spdlog::details::log_msg const&, bool, bool)':
C:/Users/joel/Documents/projects/malloy/cmake-build-debug-mingw-w64-gcc/_deps/spdlog-src/include/spdlog/logger-inl.h:167: multiple definition of `spdlog::logger::log_it_(spdlog::details::log_msg const&, bool, bool)'; ../../../lib/malloy/server/libmalloy-server.dll.a(d002426.o):(.text+0x0): first defined here
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ../../../_deps/spdlog-build/libspdlogd.a(spdlog.cpp.obj): in function `spdlog::logger::err_handler_(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
C:/Users/joel/Documents/projects/malloy/cmake-build-debug-mingw-w64-gcc/_deps/spdlog-src/include/spdlog/logger-inl.h:228: multiple definition of `spdlog::logger::err_handler_(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'; ../../../lib/malloy/server/libmalloy-server.dll.a(d002400.o):(.text+0x0): first defined here
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ../../../_deps/spdlog-build/libspdlogd.a(spdlog.cpp.obj): in function `spdlog::sinks::sink::set_level(spdlog::level::level_enum)':
C:/Users/joel/Documents/projects/malloy/cmake-build-debug-mingw-w64-gcc/_deps/spdlog-src/include/spdlog/sinks/sink-inl.h:18: multiple definition of `spdlog::sinks::sink::set_level(spdlog::level::level_enum)'; ../../../lib/malloy/server/libmalloy-server.dll.a(d002376.o):(.text+0x0): first defined here
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ../../../_deps/spdlog-build/libspdlogd.a(fmt.cpp.obj): in function `void fmt::v7::detail::vformat_to<char>(fmt::v7::detail::buffer<char>&, fmt::v7::basic_string_view<char>, fmt::v7::basic_format_args<fmt::v7::basic_format_context<fmt::v7::detail::buffer_appender<fmt::v7::type_identity<char>::type>, fmt::v7::type_identity<char>::type> >, fmt::v7::detail::locale_ref)':
C:/Users/joel/Documents/projects/malloy/cmake-build-debug-mingw-w64-gcc/_deps/spdlog-src/include/spdlog/fmt/bundled/format.h:3761: multiple definition of `void fmt::v7::detail::vformat_to<char>(fmt::v7::detail::buffer<char>&, fmt::v7::basic_string_view<char>, fmt::v7::basic_format_args<fmt::v7::basic_format_context<fmt::v7::detail::buffer_appender<fmt::v7::type_identity<char>::type>, fmt::v7::type_identity<char>::type> >, fmt::v7::detail::locale_ref)'; ../../../lib/malloy/server/libmalloy-server.dll.a(d000552.o):(.text+0x0): first defined here
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::winsock_init_base::startup(boost::asio::detail::winsock_init_base::data&, unsigned char, unsigned char)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/winsock_init.ipp:39: undefined reference to `__imp_WSAStartup'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::winsock_init_base::cleanup(boost::asio::detail::winsock_init_base::data&)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/winsock_init.ipp:56: undefined reference to `__imp_WSACleanup'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `int boost::asio::detail::socket_ops::call_setsockopt<int>(int boost::asio::detail::socket_ops::msghdr::*, unsigned long long, int, int, void const*, unsigned long long)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:1855: undefined reference to `__imp_setsockopt'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::socket_ops::shutdown(unsigned long long, int, boost::system::error_code&)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:460: undefined reference to `__imp_shutdown'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::socket_ops::set_user_non_blocking(unsigned long long, unsigned char&, bool, boost::system::error_code&)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:369: undefined reference to `__imp_ioctlsocket'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:369: undefined reference to `__imp_ioctlsocket'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::socket_ops::close(unsigned long long, unsigned char&, bool, boost::system::error_code&)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:315: undefined reference to `__imp_closesocket'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:333: undefined reference to `__imp_ioctlsocket'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::socket_ops::get_last_error(boost::system::error_code&, bool)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:87: undefined reference to `__imp_WSAGetLastError'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::socket_ops::send(unsigned long long, _WSABUF const*, unsigned long long, int, boost::system::error_code&)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:1376: undefined reference to `__imp_WSASend'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::socket_ops::recv(unsigned long long, _WSABUF*, unsigned long long, int, boost::system::error_code&)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:756: undefined reference to `__imp_WSARecv'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::win_iocp_socket_service_base::start_send_op(boost::asio::detail::win_iocp_socket_service_base::base_implementation_type&, _WSABUF*, unsigned long long, int, bool, boost::asio::detail::win_iocp_operation*)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/win_iocp_socket_service_base.ipp:400: undefined reference to `__imp_WSASend'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/bin/boost_1_76_0/boost/asio/detail/impl/win_iocp_socket_service_base.ipp:402: undefined reference to `__imp_WSAGetLastError'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::win_iocp_socket_service_base::start_receive_op(boost::asio::detail::win_iocp_socket_service_base::base_implementation_type&, _WSABUF*, unsigned long long, int, bool, boost::asio::detail::win_iocp_operation*)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/win_iocp_socket_service_base.ipp:455: undefined reference to `__imp_WSARecv'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/bin/boost_1_76_0/boost/asio/detail/impl/win_iocp_socket_service_base.ipp:458: undefined reference to `__imp_WSAGetLastError'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::socket_ops::send(unsigned long long, _WSABUF const*, unsigned long long, int, boost::system::error_code&)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:1376: undefined reference to `__imp_WSASend'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::socket_ops::socket(int, int, int, boost::system::error_code&)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:1810: undefined reference to `__imp_WSASocketW'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::socket_ops::host_to_network_long(unsigned long)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:3930: undefined reference to `__imp_htonl'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `int boost::asio::detail::socket_ops::call_bind<int>(int boost::asio::detail::socket_ops::msghdr::*, unsigned long long, sockaddr const*, unsigned long long)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:278: undefined reference to `__imp_bind'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `int boost::asio::detail::socket_ops::call_getsockname<int>(int boost::asio::detail::socket_ops::msghdr::*, unsigned long long, sockaddr*, unsigned long long*)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:2099: undefined reference to `__imp_getsockname'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::socket_ops::listen(unsigned long long, int, boost::system::error_code&)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:682: undefined reference to `__imp_listen'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `unsigned long long boost::asio::detail::socket_ops::call_accept<int>(int boost::asio::detail::socket_ops::msghdr::*, unsigned long long, sockaddr*, unsigned long long*)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:101: undefined reference to `__imp_accept'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::socket_ops::ioctl(unsigned long long, unsigned char&, int, unsigned long*, boost::system::error_code&)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:2128: undefined reference to `__imp_ioctlsocket'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:2128: undefined reference to `__imp_ioctlsocket'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `int boost::asio::detail::socket_ops::call_connect<int>(int boost::asio::detail::socket_ops::msghdr::*, unsigned long long, sockaddr const*, unsigned long long)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:469: undefined reference to `__imp_connect'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::socket_ops::select(int, fd_set*, fd_set*, fd_set*, timeval*, boost::system::error_code&)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:2197: undefined reference to `__imp_select'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::win_fd_set_adapter::is_set(unsigned long long) const':
C:/bin/boost_1_76_0/boost/asio/detail/win_fd_set_adapter.hpp:83: undefined reference to `__WSAFDIsSet'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::socket_ops::shutdown(unsigned long long, int, boost::system::error_code&)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:460: undefined reference to `__imp_shutdown'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::socket_ops::recv(unsigned long long, _WSABUF*, unsigned long long, int, boost::system::error_code&)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:756: undefined reference to `__imp_WSARecv'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::socket_ops::poll_read(unsigned long long, unsigned char, int, boost::system::error_code&)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:2234: undefined reference to `__imp_select'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::socket_ops::recv(unsigned long long, _WSABUF*, unsigned long long, int, boost::system::error_code&)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:756: undefined reference to `__imp_WSARecv'
C:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/10.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: CMakeFiles\malloy-example-server-basic.dir/objects.a(main.cpp.obj): in function `boost::asio::detail::socket_ops::poll_read(unsigned long long, unsigned char, int, boost::system::error_code&)':
C:/bin/boost_1_76_0/boost/asio/detail/impl/socket_ops.ipp:2234: undefined reference to `__imp_select'
collect2.exe: error: ld returned 1 exit status
mingw32-make[3]: *** [examples\server\basic\CMakeFiles\malloy-example-server-basic.dir\build.make:108: bin/malloy-example-server-basic.exe] Error 1
mingw32-make[2]: *** [CMakeFiles\Makefile2:1026: examples/server/basic/CMakeFiles/malloy-example-server-basic.dir/all] Error 2
mingw32-make[1]: *** [CMakeFiles\Makefile2:1033: examples/server/basic/CMakeFiles/malloy-example-server-basic.dir/rule] Error 2
mingw32-make: *** [Makefile:240: malloy-example-server-basic] Error 2

I didn't investigate yet.
It might be a good idea to extend the CI matrix to also do shared builds.

It might be a good idea to extend the CI matrix to also do shared builds.
🤦 Right, thats why the CI won't have complained if there was an issue with msvc

Update on this, I'm currently migrating a project to use the latest malloy and came across the issue. It seems no .lib file is generated for the dll, so I guess we do need the dllexport stuff after all.

I'll handle this (hopefully tomorrow).

Commit 1235e5827d1d11115d6d9c12d22c29f99d87521e adds the auto-generated export headers.
I'm a bit unclear as to whether each component should get its own export header (like it is now) - I guess time will tell :p

Basically we need to include the export header and use the MALLOY_EXPORT where needed (this gets automatically expanded to something like __declspec(dllexport) or whatever is appropriate for the platform/compiler (thank you cmake!).

@0x00002a Do you feel like taking it from here? 🙈

I'm going away this week/start of weekend (and don't have a windows laptop :p) but I'll have a look week after next. Does WINDOWS_EXPORT_ALL_SYMBOLS (docs) not do this automagically?

After 2f684ba76832eee94c57d7ac63f7b7d92eee1367 I am able to build successfully with -DMALLOY_BUILD_SHARED=ON on Windows with MinGW-w64/MSYS2.
Running the compiled example crashes immedately:
C:\Users\joel\Documents\projects\malloy\cmake-build-debug-mingw-w64-gcc\bin\malloy-example-server-routing-subrouters.exe

Process finished with exit code -1073741515 (0xC0000135)

If my memory is not failing 0xC0000135 indicates that a shared library couldn't be found. Can't investigate further right now.

Thinking of it, most likely it fails because it can't find the location of the spdlog shared library.

I though that cmake will take care of that when the library is linked using target_link_libraries()

iirc on non-windows it does. The problem on windows is lack of rpath. One hacky way around this could be to set CMAKE_BINARY_DIR globally at the top of the root cmakelists and then reset it at the end (so as not to pollute users, although if they are on windows they'd need this too)

@0x00002a since #81 was merged, do we actually still need to generate that malloy_export.hpp header using cmake's generate_export_header()? From what I can tell the answer is no - but I'd appreciate it if you could verify this on your end (Windows / MSVC).

From what I can tell this is still working just fine (also under Windows 10 & MSVC).


PDF Export: permalink Image not exported

Describe the Bug
An image is uploaded as attachment and inserted/linked on a page (e.g. https://bookstack.example/attachments/20200)
The image is displayed correctly on the page, but in the exported pdf it says "Image not found or type unknown".
Steps to Reproduce

Export --> PDF
pdf file: images with permalink URL --> "Image not found or type unknown"

Expected Behaviour
all images should be exported to the pdf: permalink images https://bookstack.example/attachments/20200 and https://bookstack.example/uploads/images/gallery/2022-12/example-image-eua3djve.png
Screenshots or Additional Context
No response
Browser Details
No response
Exact BookStack Version
v22.11
PHP Version
No response
Hosting Environment
Ubuntu 22.04

Hi @me-sp,
Images with PDFs are specifically handled to embed the data for creation.
We don't target attachment link-based images for this at all since it's generally not expected that attachments are used for in-content images, and I'm skeptical in thinking it'd be worthwhile to expand the system to support attachment images.
Can I ask why you are using attachments as in-content images rather than normal uploaded content images?

Okay, thanks for the info. I don't see it really being worth us implementing specific functionality to suit what is a workaround for another limitation, our focus should instead be on adding proper image APIs so the initial limitation does not exist.
Just an idea, although it's not ideal at all, you could push the unique images inline then fetch back out the page to get the image URLs to re-use. Of course, us adding proper image APIs would be the actual alternative.


Flutter[Web] : "Image.network" widget not loading images from some urls

Hi Flutter Geeks,
I am developing one app using Flutter Web. I want to load some images from network urls. "Image.network" widget is loading images from some urls but not loading from some other urls.
Below is my code :
Image.network(
 "https://godigi-bucket.s3.ap-south-1.amazonaws.com/images-1609178409204-509487688.jpg",
  errorBuilder: (context, object, stacktrace) {
  debugPrint("object : ${object.toString()}");
  debugPrint( "stacktrace : ${stacktrace.toString()}");
  return Text("Error");
 },
)

"Image.network" widget is loading image from url : https://picsum.photos/250?image=9
but unable to load image from url : https://godigi-bucket.s3.ap-south-1.amazonaws.com/images-1609178409204-509487688.jpg

@yogikorke
Please provide flutter doctor -v

@darshankawar ,
yogeshkorke@Yogeshs-MacBook-Air apps_kodemakers-vlocal-4d007792cc22 % flutter doctor -v
[✓] Flutter (Channel beta, 1.25.0-8.1.pre, on macOS 11.1 20C69 darwin-x64, locale en-IN)
• Flutter version 1.25.0-8.1.pre at /Users/yogeshkorke/Work/FlutterSDK/flutter
• Framework revision 8f89f6505b (13 days ago), 2020-12-15 15:07:52 -0800
• Engine revision 92ae191c17
• Dart version 2.12.0 (build 2.12.0-133.2.beta)
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
• Android SDK at /Users/yogeshkorke/Library/Android/sdk
• Platform android-30, build-tools 30.0.2
• ANDROID_HOME = /Users/yogeshkorke/Library/Android/sdk
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 12.2)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 12.2, Build version 12B45b
• CocoaPods version 1.9.3
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 4.0)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin version 49.0.2
• Dart plugin version 193.7547
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)
[✓] VS Code (version 1.52.1)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.18.0
[✓] Connected device (1 available)
• Chrome (web) • chrome • web-javascript • Google Chrome 87.0.4280.88
! Error: iPhone is not connected. Xcode will continue when iPhone is connected. (code -13)
• No issues found!

@yogikorke
Tried your code sample using latest beta and am able to load all images properly without any issues.

flutter doctor -v

[✓] Flutter (Channel beta, 1.25.0-8.1.pre, on Mac OS X 10.15.4 19E2269
    darwin-x64, locale en-IN)
    • Flutter version 1.25.0-8.1.pre at /Users/dhs/documents/Fluttersdk/flutter
    • Framework revision 8f89f6505b (13 days ago), 2020-12-15 15:07:52 -0800
    • Engine revision 92ae191c17
    • Dart version 2.12.0 (build 2.12.0-133.2.beta)

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.0)
    • Android SDK at /Users/dhs/Library/Android/sdk
    • Platform android-30, build-tools 30.0.0
    • Java binary at: /Applications/Android
      Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 12.0.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.0.1, Build version 12A7300
    • CocoaPods version 1.9.3

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

[✓] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6915495)

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

[✓] Connected device (3 available)
    • sdk gphone x86 arm (mobile)         • emulator-5554
      • android-x86    • Android 11 (API 30) (emulator)
    • iPhone SE (2nd generation) (mobile) • 6C85835D-FBFD-4AB3-8DE8-B4FAD35E5367
      • ios            • com.apple.CoreSimulator.SimRuntime.iOS-14-0 (simulator)
    • Chrome (web)                        • chrome
      • web-javascript • Google Chrome 87.0.4280.88

• No issues found!

I am closing this as non-issue. If you disagree, write in comments and I'll reopen it.
Thanks.

@darshankawar ,
I did few experiment and my observations are below :
Displaying network images when run using :

flutter run -d chrome
flutter run -d chrome —debug
flutter run -d chrome --release
flutter run -d chrome --web-renderer html --release

NOT displaying network images when run using :

flutter run -d chrome --web-renderer canvaskit --release
VS code > Run > “Start debugging”
VS code > Run > “Run without debugging”

Note : I have run “flutter clean” before every above step to avoid cache effects.

@darshankawar , awaiting for your reply.
Did you try loading that image using canvaskit web renderer ?

@darshankawar , awaiting for your reply.
Did you try loading that image using canvaskit web renderer ?

@darshankawar , awaiting for your reply.
Did you try loading that image using canvaskit web renderer ?

@darshankawar , awaiting for your reply.
Did you try loading that image using canvaskit web renderer ?

@yogikorke You are correct. The image in code sample isn't loading using canvaskit. Reopening.

@yogikorke You are correct. The image in code sample isn't loading using canvaskit. Reopening.

With flutter run -d chrome, the image is loading as mentioned earlier. https://github.com/flutter/flutter/issues/73081#issuecomment-752025315

With flutter run -d chrome --dart-define=FLUTTER_WEB_USE_SKIA=true, getting below:

flutter doctor -v
[✓] Flutter (Channel master, 1.26.0-2.0.pre.220, on Mac OS X 10.15.4 19E2269
    darwin-x64, locale en-IN)
    • Flutter version 1.26.0-2.0.pre.220 at
      /Users/dhs/documents/Fluttersdk/flutter
    • Framework revision 01babcac16 (85 minutes ago), 2021-01-06 22:34:03 -0500
    • Engine revision 1758eaa4ed
    • Dart version 2.12.0 (build 2.12.0-179.0.dev)

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.0)
    • Android SDK at /Users/dhs/Library/Android/sdk
    • Platform android-30, build-tools 30.0.0
    • Java binary at: /Applications/Android
      Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[!] Xcode - develop for iOS and macOS (Xcode 12.0.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.0.1, Build version 12A7300
    ! 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

[✓] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6915495)

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

[✓] Connected device (3 available)
    • sdk gphone x86 64 arm64 (mobile) • emulator-5554 • android-x64    •
      Android 11 (API 30) (emulator)
    • macOS (desktop)                  • macos         • darwin-x64     • Mac OS
      X 10.15.4 19E2269 darwin-x64
    • Chrome (web)                     • chrome        • web-javascript • Google
      Chrome 87.0.4280.88

! Doctor found issues in 1 category.

With flutter run -d chrome, the image is loading as mentioned earlier. https://github.com/flutter/flutter/issues/73081#issuecomment-752025315

With flutter run -d chrome --dart-define=FLUTTER_WEB_USE_SKIA=true, getting below:

flutter doctor -v
[✓] Flutter (Channel master, 1.26.0-2.0.pre.220, on Mac OS X 10.15.4 19E2269
    darwin-x64, locale en-IN)
    • Flutter version 1.26.0-2.0.pre.220 at
      /Users/dhs/documents/Fluttersdk/flutter
    • Framework revision 01babcac16 (85 minutes ago), 2021-01-06 22:34:03 -0500
    • Engine revision 1758eaa4ed
    • Dart version 2.12.0 (build 2.12.0-179.0.dev)

[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.0)
    • Android SDK at /Users/dhs/Library/Android/sdk
    • Platform android-30, build-tools 30.0.0
    • Java binary at: /Applications/Android
      Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6915495)
    • All Android licenses accepted.

[!] Xcode - develop for iOS and macOS (Xcode 12.0.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.0.1, Build version 12A7300
    ! 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

[✓] Android Studio (version 4.1)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build
      1.8.0_242-release-1644-b3-6915495)

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

[✓] Connected device (3 available)
    • sdk gphone x86 64 arm64 (mobile) • emulator-5554 • android-x64    •
      Android 11 (API 30) (emulator)
    • macOS (desktop)                  • macos         • darwin-x64     • Mac OS
      X 10.15.4 19E2269 darwin-x64
    • Chrome (web)                     • chrome        • web-javascript • Google
      Chrome 87.0.4280.88

! Doctor found issues in 1 category.

@yogikorke please check the console output. You should see the error details there as well as pointers to a solution. I'll close this for now, but if that doesn't help, feel free to reopen with more details.

@yogikorke please check the console output. You should see the error details there as well as pointers to a solution. I'll close this for now, but if that doesn't help, feel free to reopen with more details.

@yjbanov , on which flutter branch I will get console output ? I am using below beta branch as of now :
Flutter 1.25.0-8.3.pre • channel beta • https://github.com/flutter/flutter.git
Framework • revision 5d36f2e7f5 (6 days ago) • 2021-01-14 15:57:49 -0800
Engine • revision 7a8f8ca02c
Tools • Dart 2.12.0 (build 2.12.0-133.7.beta)

@yjbanov , on which flutter branch I will get console output ? I am using below beta branch as of now :
Flutter 1.25.0-8.3.pre • channel beta • https://github.com/flutter/flutter.git
Framework • revision 5d36f2e7f5 (6 days ago) • 2021-01-14 15:57:49 -0800
Engine • revision 7a8f8ca02c
Tools • Dart 2.12.0 (build 2.12.0-133.7.beta)

@yjbanov , I tested on both flutter master and dev branch. Not getting any error details or pointer to any solution.

@yjbanov , I tested on both flutter master and dev branch. Not getting any error details or pointer to any solution.

Got it now !
Trying to load an image from another domain? Find answers at:
https://flutter.dev/docs/development/platform-integration/web-images

Got it now !
Trying to load an image from another domain? Find answers at:
https://flutter.dev/docs/development/platform-integration/web-images

Solution for fixing CORS on files stored in firebase storage: https://stackoverflow.com/a/37765371/7809801
upload this to your bucket
[
  {
    "origin": ["{custom-domain}"],
    "method": ["GET"],
    "maxAgeSeconds": 3600
  }
]


When downloading new versions, how can I download only new pictures from list?

Hi, thank you always for your wonderful program. I have a question : after I install the latest versions downloader, is it possible to only download new images from pixiv(using 'download by list'), that I haven't downloaded from my previous versions?
So far, when I install the latest versions I had to run the 'download by list' all over again to get new images from listed artists that I haven't downloaded previously. But the problem with this is that it also re-downloads images that I've deleted. For example, even though I deleted a pic from an artist's folder, when I install the latest version and download's that artist's gallery(using list) the deleted file is back all over again. Also, if artists have changed their username, the new versions download their galleries all over again, leading to redundant files.
To conclude, is it possible to incorporate a 'database file', or 'download log' of sorts from previous downloader into new downloader? So as to prevent repetition of downloads.

That's called db.sqlite and it contains everything you want. Copy it over or extract new version over old one25 дек. 2018 г. 22:40 пользователь esotericer1<EMAIL_ADDRESS>написал:Hi, thank you always for your wonderful program. I have a question : after I install the latest versions downloader, is it possible to only download new images from pixiv(using 'download by list'), that I haven't downloaded from my previous versions?
So far, when I install the latest versions I had to run the 'download by list' all over again to get new images from listed artists that I haven't downloaded previously. But the problem with this is that it also re-downloads images that I've deleted. For example, even though I deleted a pic from an artist's folder, when I install the latest version and download's that artist's gallery(using list) the deleted file is back all over again. Also, if artists have changed their username, the new versions download their galleries all over again, leading to redundant files.
To conclude, is it possible to incorporate a 'database file', or 'download log' of sorts from previous downloader into new downloader? So as to prevent repetition of downloads.
—You are receiving this because you are subscribed to this thread.Reply to this email directly, view it on GitHub, or mute the thread.


removing the old errors package.

codebase leaned on a package that is no longer maintained.  This is a cleanup task.
Instead of a massive replace there was a thought to create our own proxy for error reporting, but I think this would be a tax we'd have to maintain for a long while so it's probably better to just do the replacement right now.

/test all

/test all

/test all

/test all

/lgtm


raise 429 Error instead of sleep

Hi!
I'm parsing Instagram from multiple servers, that are getting ig_names from master server. And I want to detect that current server is temporary down for new ig_names if it hits 429 status code. So I need to know if latest request from server to IG was with 429 status.
I'm using
L = instaloader.Instaloader(sleep=False,
                                    quiet=False,
                                    user_agent=ua.random,
                                    max_connection_attempts=0)
insta_profile = instaloader.Profile.from_username(L.context, link)

But if it hits 429 status - it sleeps and prints:
JSON Query to <ig-name>: 429 Too Many Requests: redirected to login [retrying; skip with ^C]
HTTP error code 429 was returned because too many queries occurred in
the last time. Please do not use Instagram in your browser or run
multiple instances of Instaloader in parallel.
GraphQL requests:
  other
    last 10 minutes: 1 requests
    last 11 minutes: 1 requests
    last 15 minutes: 1 requests
    last 20 minutes: 1 requests
    last 30 minutes: 1 requests
    last 60 minutes: 1 requests

How can I make it raise Exception instead of sleep behaviour ?

Instaloader always invokes its 429 handling logic when a 429 is encountered. You could change the corresponding code in instaloadercontext.py to make it raise some custom exception on a TooManyRequestsException:
https://github.com/instaloader/instaloader/blob/72d86533f25180bc7e1df467718c568ac2b77d53/instaloader/instaloadercontext.py#L439-L457


User is interested in identifying how many studies exist for a specific language

As a user I am interested in finding the studies that exist for a specific language

I use the language selection functionality next to the search box:

I expect to see studies in the selected language:

Some languages that can be selected in the drop down return no results. Try "Czech" for example. Is that an error in CDC?
If it is not an error, then I can write a test that selects a language (French, German, Finnish) that presumably returns some studies. Howeve, if CDC is not populated by studies with that language then the test will fail, because no results are found.

As far as I can see all the studies from the Czech archive is in English so it seems fair that there are no studies in Czech. However, I am not sure why there is the option to select Czech in the drop down menu if there are no studies in that language. Maybe @john-shepherdson knows if the Czech archive was or is planning to send any studies in Czech to CDC?


Fetch (isomorphic-fetch) default timeout

Hello,
I'm using your sdk with isomorphic-fetch and I encountered an issue.
The default value for an http timeout in node-fetch is 0 wich is equivalent to no timeout at all.
My application stayed stuck in a files list folder call for an obscure reason (the same call using curl was successfull though)
Would it be possible to add a default http timeout value or to allow us to configure it ?
Cheers

For what it's worth, I've also noticed that filesListFolder sometimes becomes 'stuck' with no error and no response. I haven't been able to reliably reproduce it so I've not yet filed an issue but it's possibly related. It seems to occur when I add a decently large number of files (~100) to a new folder, then try to list its contents. Possibly related to #174. Very frustrating, wish I could provide more information!

I know understand that the lack of http time out is not the real issue here.
https://github.com/dropbox/dropbox-sdk-js/pull/203 seems to fix the issue with large requests.
However, I can't use the latest version because of a typescript error :
node_modules/dropbox/dist/dropbox_types.d.ts(32,63): error TS2371: A parameter initializer is only allowed in a function or constructor implementation.

Thanks! I'm sending this along to the team to see if we can add some better timeout functionality/behavior like this.
Regarding the listFolder issues, I also suspect that's #174, but please do open another issue if you find something else.
The Typescript issue appears be #199.

Thanks a lot! I'm waiting for a fix for #199 then.

Closing as the related issue has been closed.


_TypeError - Battery Level - iOS 16.4

Platform
Dart
Obfuscation
Enabled
Debug Info
Disabled
Doctor
[✓] Flutter (Channel stable, 3.7.12, on macOS 13.2.1 22D68 darwin-arm64, locale en-PH)
• Flutter version 3.7.12 on channel stable at /Users/solstella/fvm/versions/stable
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 4d9e56e694 (3 weeks ago), 2023-04-17 21:47:46 -0400
• Engine revision 1a65d409c7
• Dart version 2.19.6
• DevTools version 2.20.1
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.0)
• Android SDK at /Users/solstella/Library/Android/sdk
• Platform android-33, build-tools 33.0.0
• Java binary at: /Applications/Android Studio.app/Contents/jbr/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 14.3)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Build 14E222b
• CocoaPods version 1.12.0
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 2022.1)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 11.0.15+0-b2043.56-8887301)
[✓] IntelliJ IDEA Ultimate Edition (version 2022.3.2)
• IntelliJ at /Applications/IntelliJ IDEA.app
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
[✓] VS Code (version 1.79.0-insider)
• VS Code at /Applications/Visual Studio Code - Insiders.app/Contents
• Flutter extension version 3.63.20230303
[✓] Connected device (3 available)
• iPhone (2) (mobile) • ef913248aabd81890dd7e6787045ddfa9b1f08f3 • ios            • iOS 16.4.1 20E252
• macOS (desktop)     • macos                                    • darwin-arm64   • macOS 13.2.1 22D68 darwin-arm64
• Chrome (web)        • chrome                                   • web-javascript • Google Chrome 113.0.5672.92
[✓] HTTP Host Availability
• All required HTTP hosts are available
• No issues found!
Version
7.5.2
Steps to Reproduce

Setup Sentry
Run normally and start capturing exceptions

Expected Result
There should be no exceptions in parsing SentryDevice. Especially the batteryLevel
Actual Result
2023-05-10 13:24:09.867025+0800 Enstack Beta[4444:354698] [Sentry] [debug] [SentryFileManager:423] Writing to file: /var/mobile/Containers/Data/Application/782968EC-446B-42E8-A5DA-7E56BE461125/Library/Caches/io.sentry/98bd54bd3f1d2068e656ac1f0a7b6ee840a12f4f/envelopes/1683696249.866968-00091-9ADA1973-12C7-4443-B82A-BC1E71551F4F.json
[sentry] _TypeError (type 'int' is not a subtype of type 'double?')
[sentry] #0      new SentryDevice.fromJson
sentry_device.dart:181
#1      new Contexts.fromJson
contexts.dart:38
#2      _LoadContextsIntegrationEventProcessor.apply
load_contexts_integration.dart:51
#3      SentryClient._runEventProcessors
sentry_client.dart:416
#4      SentryClient.captureEvent
sentry_client.dart:90
#5      Hub.captureMessage

Are you willing to submit a PR?
None

Seems like
https://github.com/getsentry/sentry-dart/blob/0006698792378635b2fa49c687765319710888de/dart/lib/src/protocol/sentry_device.dart#L181
should be
        batteryLevel: (data['battery_level'] as num)?.toInt(),

batteryLevel is a double?, so probably not parsing to toInt, we'd lose the precision if its a double.

@ueman maybe batteryLevel: (data['battery_level'] as num?)?.toDouble(),.

Can we somehow get this fix without all the other changes as a 7.5.3?

Can we somehow get this fix without all the other changes as a 7.5.3?

Is there a reason why not go to 7.6.x?
https://github.com/getsentry/sentry-dart/releases/tag/7.6.1
All the breaking changes are back-compatible anyway.

Yea, I just saw the namespace change had a guard, so it should be fine. Thanks!


Order of operation for going to Python 3

Here's an idea for what needs to happen to get us switched over to Python 3.  I'm still discussing some details with Lisa, but I think we should be able to move forward.  Once that happens, I'll email other developers to get them into the conversation.
I'd like to go ahead and work mostly on the first set of tasks, i.e. getting the current PmagPy Python 2 branch really robust and re-released.  @Caoimhinmg, if you find more bugs in the Python 3 branch that you want me to look at, I can jump back and forth.
Let me know if there are steps missing, or that seem out of order here...
Get Python 2 stuff set up and stable

Ensure that current PmagPy/PmagPy is nice and stable
Create PmagPy Python 2 branch off of master
Make new pip release
Make new standalone releases

Get Python 3 set up

Decide how best to have a Python 2 vs. Python 3 PmagPy pip package available
Finish quality control checking of Python 3 PmagPy branch
Merge Python 3 PmagPy branch into master
Provide check sheet for Python 2 vs. Python 3
Update all developers on how to do future development (Python 3)
Update the Cookbook with Python 2 vs. Python 3 install instructions

Business as usual

Continue development in Python 3
Fix bugs if needed on Python 2 PmagPy branch, maintain availability of Python 2 PmagPy release

@moonshoes87. This is a good list, though I think it will be best moved to the pull request forum once all of the first phase (1-4) is done. We can do the shout out to the other developers (just tag everyone) and the quality control checking from there as well. Because once the pull request is made it's almost like a branch of the main repo so it can be managed from the main repo and I don't have to add everyone as a contributor over here. Finally on the note of 8 I'm working on that a bit right now setting up a framework for a notebook explaining the details, though I can switch to making stand alone releases (4) once the main repo is declared stable and the python2 branch is made.

Ok great, I'm running through tests in the main repo now.  Things have been pretty stable, so that part is relatively simple.
Setuptools is giving me some crazy new errors, though, so I'm not sure exactly how long the pip release is going to take.

Finally got that resolved -- setuptools changed something, I guess, so that any absolute paths in setup.py broke everything.  Also, having stray files in data_files ( there was one called atrm_results.txt, I think), will break everything.
Anyway, I just made a new pmagpy/pmagpy-cli release.  Everything is working, as far as I can tell.
So, items 1, 2, and 3 are done.  The branch is creatively named Python2.  I will make and test an OS X standalone release tomorrow.  @Caoimhinmg, I now have my Windows virtual machine set up, so I should make sure I know how to do the Windows release before you drop off the map, but maybe after we deal with some more of the Python 3 stuff.  If you can do the Windows/Linux release, that would be great.

OS X release is up.


What back-ends does this integrate with / is this designed to integrate with?

Great library, but I'm not sure this format being output is compatible with any system I know of in NoSQL or SQL. Perhaps you could direct on the readme so people know the purpose.
Also the strategies for coming up with available fields is another thing that would be nice to think about / have thought about.
I Have a cut down version of this (without groups) in my software not using vue.js; we've stopped developing as nobody has had a business case for enhancing and not enough people use it. Are hooks in-place to measure via analytics?

We have used the generated JSON to construct SQL and it works well. For NoSQL I don't have test yet. But I believe that the compatible problem shouldn't matter as the generated JSON is just a combination of query criteria.
Available fields is a nice feature to have. I have come up with this idea before but I don't have time to implement it at that moment. Thanks for your advice. Let me introduce this feature in the next few commits.
What do you mean by hooks? Can you give more detailed description or an example on this?

Hi Thanks for getting back to me.
Hooks I use to describe designated integration points like callback or promises, so that values of complex input type's can be developed and plugged in, perhaps observers registered (the specific way to do this would depend on your preference).


Whitelisting of proprietary headers from RKeep GW (FS IF Frw)

fixes https://github.com/zalando/zally/issues/1181

Codecov Report

Merging #1184 into master will not change coverage.
The diff coverage is n/a.

@@            Coverage Diff            @@
##             master    #1184   +/-   ##
=========================================
  Coverage     88.04%   88.04%
  Complexity       85       85
=========================================
  Files            69       69
  Lines          1046     1046
  Branches         71       71
=========================================
  Hits            921      921
  Misses           88       88
  Partials         37       37

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update f7f83b0...963c0fb. Read the comment docs.

:+1:

👍