Flow out of memory

This is with Flow version 0.29.0, in our CI environment, which admittedly is not as resource-rich as our development laptops. Flow was working fine in our CI environment, with the exact same resources, under v0.26.0.

Does this indicate that the machine needs more RAM?
Is it possible to make the type-checker run with less shared memory?

[2016-07-28 01:15:11] Initializing Server (This might take some time)
[2016-07-28 01:15:11] executable=/usr/src/app/node_modules/flow-bin/vendor/flow
[2016-07-28 01:15:11] version=0.29.0
[2016-07-28 01:15:11] Parsing
[2016-07-28 01:15:13] Building package heap
[2016-07-28 01:15:13] Loading libraries
[2016-07-28 01:15:13] Running local inference
SharedMem.Out_of_shared_memory

i also got this problem in my laptop (osx, el capitan). Running flow will make the swapfiles getting bigger and bigger until i'm running out of disk space, I think it must be some kind of memory leak. The problem occured when using flow v0.27.0, v0.28.0 and v0.29.0. When using v0.26.0 there wasn't any problem

Could you check with master? cc @gabelevi, who fixed a memory bug that will be in 0.30. Might be related...

@avikchaudhuri, yes, I will check later today.

The bin built against master seems to fix the memory issue. When will you be releasing 0.30.0?

@opensrcken Awesome! 0.30 should go out early next week.

Hmm... A colleague and me are currently running into the same problem with 0.30.0. We have flow on our dev machines, and it just consumes all memory and swap until the HDDs are full and we need to reboot.  Which operating system? How much physical memory is available? And how much swap was getting used?

We're on latest Mac OS. I have 16GB of memory and my colleague 8.. Swap grows, till our HDDs run out of memory. I've seen 60GB of swap being used, but also 80GB on other machines..

I'm seeing this too on Ubuntu 16.04, 8GB RAM, RES grows till I have to reboot.
0.26 works, however, with just 43M RES.

still got this issue even when using 0.32.0 (osx el capitan)

I think I finally know what's going on. I'm fixing it, expect something
pretty soon.
On Wednesday, September 21, 2016, dej611<EMAIL_ADDRESS>wrote:

Me too.
Flow 0.32.0 on OsX El Capitan.
Available RAM 4 GB.
When running the flow process grows up to 10 GB of memory during the
parsing task, then drop to 5 and raise again to 10 GB before producing
the output.
—
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub
https://github.com/facebook/flow/issues/2152#issuecomment-248564041, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AFFNMQXlN6yYcwJ8wxgnloR7wL6VrHqPks5qsP3ngaJpZM4JWx77
.

Still there with flow 0.33 :(

@dej611 can you describe your problem again? It's normal for flow to use
and release memory, the problem in other cases seemed to be memory leaking
forever. While there's still work to be done (and will be done), much of
the memory leak issue should be mitigated in 0.33.
On Friday, September 30, 2016, dej611<EMAIL_ADDRESS>wrote:

Still there with flow 0.33 :(
—
You are receiving this because you modified the open/close state.
Reply to this email directly, view it on GitHub
https://github.com/facebook/flow/issues/2152#issuecomment-250694337, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AFFNMbQParjivWIEfE16C1w9T6LQtRnCks5qvM6zgaJpZM4JWx77
.

@avikchaudhuri  0.33.0 fixed the memory error. Thanks a lot!

@avikchaudhuri
Currently I have flow going up to 10 GB of memory, then drop to 2 GB before starting raise again to 10 GB during the analysis. I want to isolate the issue, create a clean project so I can report something more more precise number for it this weekend.

I've tried to reproduce this issue at home on two different projects on another MacBook Air but no luck.
Will try again in the office where I had this problem to isolate the issue with a simple project.

I am still experiencing this issue in Flow 0.33.0. I have 8GB RAM and it climbed to 18.3GB RAM in MacOS Activity Monitor. I am using built-in Flow support that comes with WebStorm 2016.3 EAP, so it may be attributed to the EAP's bugginess.

@KylePalko I have the same issue using Webstorm EAP and Flow, did u opened an issue there?

@sibelius Good idea, I will do that now.

@KylePalko could u link the webstorm issue here?
I wanna add some logs to it

I have the same issue when using Sublime Flow IDE and Nuclide in atom, so I think this is related to the autocomplete or type-at-pos commands which webstorm also presumably relies upon. If I disable the editor integrations I can't seem to replicate the issue by simply running flow manually.

On v0.32.0, I was seeing the SharedMem.Out_of_shared_memory issue. Now on 0.34.0, I no longer see that issue but instead see Worker exited (code: 16) after the 'Running local inference' step.
(Macbook pro running El Capitan 10.11.6)

in the latest Webstorm EAP flow is working fine
\o/

I experienced this today while using Flow in WebStorm 2016.3
Errors were not shown in WebStorm.

I love flow. But disk consumption can be an issue.
My MBP has only a 128 Go SSD (8Go RAM).
I'ld like to force flow to stop eating disk space indefinitely (=defining memory consumption limits?).
Problem increases obviously when you have to keep opened more than 1 project at a time (more flow tasks).
When processing, I'm nearly ok (a bit too much space but...ok)...

But when flow tasks ends, it would be nice to be able to force flow to flush all disk space eaten.

I suspect that processing all node_modules content does not help. But as far as I know it is necessary for flow (so that it knows about modules imported in the project)

Until now to free absolutely all space (closing all flow tasks is not effective), the only working solution is to reboot my computer.

Having the same issue on OSX Sierra 10.12

Please edit your comments to add the value for $ flow version.

I'm seeing the same issue.
Sierra 10.12, VSCode 1.10.2 (happened with 1.10.1 too)
$ flow version
Flow, a static type checker for JavaScript, version 0.40.0

@nickyhajal try the newest version of Flow and report back. 0.41 is the newest version.

in mac 10.12.2, when i use vscode to edit js file, flow will out of my mac memory and all processes are terminated，this is my screenshot:

I tried v0.44 today but got same issue again.... had to hard reset my AsusROG(128SSD/8Go/Windows10).
Maybe these infos can help:

Same issue. OSX Sierra 10.12

This also happens to me with the latest version (v0.44) on Bash on Windows. Tried version 0.26 and it works.

0.43 has this issue as well on my MacBook Pro with OSX 10.12.4.

We've been using this workaround https://github.com/facebook/flow/issues/3143#issuecomment-270946030
# .flowconfig
[options]
sharedmemory.hash_table_pow=21

Running flow in my fairly small project on OSX causes the entire OS to lock up and programs to start pausing because there's no memory left.

Same here. Attempting to use Flow version 0.45.0 with IntelliJ version 2017.1.2 but this issue is making it completely unusable.
As soon as I open any JavaScript file, Flow sits at around 10-12% CPU usage (6 cores) and steadily consumes memory until none is left. If I kill the process another one just starts up and does the same thing.

Flow's about to blow (up my computer).

Same here...I'm using atom and it's totally unusable as is...

I was running into the same issue with flow 0.46.0, adding sharedmemory.hash_table_pow=21 as suggested fixed it for now. Previously it was just constantly restarting the server and using up swap (62GB was the max I saw it go before freezing my computer) until I had to restart my computer because everything started crashing.

Sitting here with VS Code open.  No files being checked as far as I can tell.

sharedmemory.hash_table_pow=21 didn't help for me. I'm running flow 0.50.0, just updated from .49.0 trying to solve the issue. I find it interesting though, that it was working normally, and now it doesn't even start the server, well... it does start a server and then goes to town with memory and never completes local inference.
I can't recall doing any serious changes on the .flowconfig but I can't help but think that a recent change in my code could be causing this, considering it was working fine just yesterday.
Any suggestions on what I could be looking for in the code (or anywhere else) that could be driving flow crazy?
How could I get more details about flow execution? Anything that would help me debug.
[ignore]
.*/node_modules/*
.*/specs/preProcessWebpackAlias.js
.*/coverage/*

[include]

[libs]

[options]
all=true
module.name_mapper='^actions\/\(.*\)$' -> '<PROJECT_ROOT>/src/app/actions/\1'
module.name_mapper='^components\/\(.*\)$' -> '<PROJECT_ROOT>/src/app/components/\1'
module.name_mapper='^containers\/\(.*\)$' -> '<PROJECT_ROOT>/src/app/containers/\1'
module.name_mapper='^middlewares\/\(.*\)$' -> '<PROJECT_ROOT>/src/app/middlewares/\1'
module.name_mapper='^models\/\(.*\)$' -> '<PROJECT_ROOT>/src/app/models/\1'
module.name_mapper='^reducers\/\(.*\)$' -> '<PROJECT_ROOT>/src/app/reducers/\1'
module.name_mapper='^sagas\/\(.*\)$' -> '<PROJECT_ROOT>/src/app/sagas/\1'
module.name_mapper='^services\/\(.*\)$' -> '<PROJECT_ROOT>/src/app/services/\1'
module.name_mapper='^store\/\(.*\)$' -> '<PROJECT_ROOT>/src/app/store/\1'
module.name_mapper='^mocks\/\(.*\)$' -> '<PROJECT_ROOT>/mocks/\1'

Update
In my case, it was a silly problem. I was not ignoring my public directory, so flow was trying to infer the bundles.
running flow check --verbose is what helped me identify what it was doing. Hope this helps.

Deleting my local copy and cloning a new version resolved this issue for me. I'll try to add more details if I run into this again.

I am running flow-bin v0.56.0 on Windows 10 and node v.8.4.0
Until shortly I used atom and everything was fine.
Since I use vscode though, flow regularly consumes all my ram:

This issue makes my capable computer unusable. I will have to stop using flow :-(

But that is no good Idea: I would have to change a lot of code in all projects. Any alternatives?

I just realized that this issue is 16 months old. Any chance this will be tackled?

When I open vscode, flow starts grabbing cpu and ram.
It takes a several minutes but I need do nothing inside vscode to see flow's ram usage rise to over 11 gigabytes, by which time 96% of ram is in use.
CPU usage rises to about 14% too (by far the highest of any process).
Often additional flow processes appear, though they do not seem to use many ressources.
When I close vscode all the flow processes remain open and keep consuming all system ressources.
This seems to happen every time I open or close vscode.
Is there any way I can help debug this?

If I close vscode when flow has grabbed for instance 200 MB, that does not prevent flow from going on grabbing all the remaining ram.

Flow is - so far - much less obtrusive when I open the same project in Atom. So I guess this forces me to switch back from vscode to Atom.

@barbalex vscode flow plugins do not kill flow when you exit vscode, and start new ones when vscode starts. You can verify this with ps aux | grep flow after closing VSCode. Because Flow bricks computers I would not recommend using it for any projects.

Flow version 0.54.1
Mac OS 10.12.6
Node v8.4.0
using the Atom editor with nuclide

I get the same issue. I debugged it a little bit, and find out, that when i delete next string from my code, everything works perfect:
if (nextHeight !== anchor.blockHeight) {
  errors = [...errors, { tx, message: `Error text: ${nextHeight}` }]
}

I started to experimented with that string, and find out that even next strings leads to error:
errors = [...errors]

But these stings works fine:
let test = [...test, {test: 'test'}]
errors = [errors]
errors.push({ tx, message: `Error text: ${nextHeight}` })

Also, interesting, if remove if construction, then everything works fine.
Maybe it's help to understand reason of this issue.

Meanwhile this happens on my Windows 10 PC not only when using vscode but also when using atom.
The flow processes completely use up all system ressources. Which leads to very weird errors on all levels of apps and windows. I just spent an hour chasing ghost errors on all levels and restarting windows several times. Until I finally realized that flow was the cause behind this behaviour.
I am now completely out of options:

all of my projects use flow
flow makes my PC unusable

As this problem does not seem to be adressed it seems that my only option is one of these:

stop using static typing > cry, then change thousands of lines of code
use a different method of static typing

With the second option my hardest problem is: how to integrate typescript into create-react-app.
Is there an option that works with create-react-app out of the box?

This seems to be rather prominent in the issues. Maybe related issues found after a five minute search:

https://github.com/facebook/flow/issues/5271
https://github.com/facebook/flow/issues/4370
https://github.com/facebook/flow/issues/4070
https://github.com/facebook/flow/issues/4046
https://github.com/facebook/flow/issues/3565
https://github.com/facebook/flow/issues/3370

same issue 0.52.0... I cannot use flow anymore on my laptop...

same issue on 0.55.0 also on latest 0.59.0

Flow 59 is much better on this issue

Flow 59 is much better on this issue

That could actually be true. At least it does not happen all the time any more.

After working for an hour I have not had flow using all memory any more :-)
What still happens is that not all flow processes are killed when vscode is closed:

If this remains I am one happy man

@barbalex The issue with vscode was not an issue with Flow. It is fixed in the latest version of vscode.

@levrik I had this problem also when using Atom. And on Windows as well as on macOS.
Now the problem does not seem to occur when using Atom any more either. Only remaining (in comparison minuscule) issue are the processes that remain after closing Atom:

@barbalex In vscode it takes about 15 seconds on my machine before the flow processes get killed.

@levrik They remain on my machine, even after today's update of vscode

@barbalex 1.17 is an outdated version. The latest version with the fix included is 1.18.

@levrik thanks
Still happening in v1.18.0 though.
But I really am happy as this does not bother me :-)

@barbalex Mhh that's weird. Doesn't happen to me anymore since the upgrade to 1.18.

Well, I don't know why but since a few days flow now uses all memory again on both my computers :-(
I am using:

flow 0.59.0
vscode 1.18.1

Sorry to say: flow is misbehaving again.
As this happens also on the notebook it kills it's batteries in no time.
Not to mention my poor nerves :-(
I have never said anything as rude sounding before in an open source project. But this is a high profile project that has an extremely serious flaw.
I know it is open source and I should really offer a pull request. But that would unfortunately be completely out of my league. Sorry.

@barbalex One thing that worked for me was carefully going over the project I was working on and making sure I was ignoring the right directories/files. For instance there was a file of uglified packaged js code, and flow was trying to parse/type check that whole thing.
I am NOT a maintainer, but I would guess that there is something going on with your project config otherwise this would be a much more widespread problem.

@dmueller39 thanks a lot for your tip.
I am using create-react-app for all my projects and have this .flowconfig file in my root folder:
[ignore]
<PROJECT_ROOT>/build/.*

Plus one of my projects was never even built yet.
So I believe that flow does not check build residues.
The weird thing is that flow does not plague me 100% of the time. More like 60%. Once it seemed to work fine for about one week. Now it usually starts using all memory - but not always immediately.
So it is more likely to be caused by something in my code that does not always exist/run. Or something else on my system.

I see no one has actually pasted any code here, so it's hard to conclude, but I have discovered one area that causes problems and that's reduce operations. Specifically reduce on arrays of objects that of potentially unknown shape - e.g. API responses. So for instance this will probably memory leak:
const result = apiResponse.reduce((running, entry) => {
  return [...running, entry]
}, [])

However if you apply types to both function arguments the memory leaks go away
type ApiResponseEntryType = {
  a: string,
  b: string,
}

const obj1 = apiResponse.reduce((
  running: Array<ApiResponseEntryType>,
  entry: ApiResponseEntryType
) => {
  return [ ...running, entry ]
}, [])

(Apologies if the code doesn't compute or actually trigger as I'm coding in the browser. But my point is 100% reproducible in all instances in my project)

Great point @JofArnold, have you identified the same problem with other operations(map, filter, etc)?

Just reduce.

It's not an issue with how type annotations are added to any particular source file. It's an issue with the number of source files that are being checked. This is why nobody can post source code that demonstrates the issue.
The issue can be reproduced by doing this.
Create a directory containing a single JavaScript file.
Create a sibling directory containing several hundred JavaScript files.
Do not create a .flowconfig file in either of those directories or in any of their ancestor directories.
Now run flow in the original directory containing the single JavaScript file.
Flow will search upward for .flowconfig and not find one.
When it reaches your home directory, Flow will begin checking every JavaScript file below your home directory.
It will be really slow when it hits the directory containing hundreds of JavaScript files.
It should not be checking those files.

That's definitely not the case for me. I've [ignore]'d all files, whitelisted just one, and actually only have one single source file where in I can turn the issue on and off by using what I mention in my comment above. The issue is 100% reproducible by running flow-bin 0.65.0 on the command line automatically in vim. It is, for me, solely due to reduce. I'll see if I can post a project/test in due course 👍

Note that your issue is real (I remember hitting it a while ago) but unrelated to my note above. I may raise a separate issue and test actually. Main thing is that people will discover my comment via Google Search for now

@JofArnold can u create a repro of this?
@calebmer how can we provide breaking js tests to make sure flow does not have this kind of regressions?

No problem; I'll have a go tomorrow (Saturday) if I get chance.

@sibelius @calebmer Here is a minimal repo that replicates the issue. https://github.com/JofArnold/flow-memory-leak-test
Note: there's a huge amount of stuff in node_modules. Sorry for that.
So the cause seems to be a type file including enough type file combined with a reduce. If you remove the two type files and where those types are used I believe the reduce doesn't trigger the bug.

Nooooooo. I've somehow managed to make it no fail.... Gah.

I.e. that repo works :(

Fixed. Turns out it needs moduleNameMapper in the package.json too. Let me know if you have issues 👍

@JofArnold
I tried your fix and it works great for me.
Thank you for the problem identification and furthermore for the fix.
:+1:

@JofArnold
Thanks! Had memory leak in my flow extension for vs-code. After I added types to .reduce method, it had gone.

I have the same problem, flow eating up all my ram, only killall flow helps.
I use flow 0.87.0 and have no reduce() in my code.
Is there any easy way to debug it, to help pinpointing this issue? I was not able to reproduce it with a small repo.
This holds us from using flow at all as it freezes our computers completely.

We've just today run into a similar issue where flow was using over 10 GB of ram on one of our Windows 10 dev machines; computer was extremely slow. We were using Visual Studio Code v131.1, Flow-language-support 1.1.0. I have to agree with my fellow team members that is a great detriment to using Flow to have to kill it when the computer starts becoming slow on Windows, even if it gives very helpful messages and annotations. It would be reassuring for our own usage of Flow to know when, or even if high memory usage for large node_modules folders are a priority to fix.

I am running flow on a read-only file system and getting this issue on very trivial JS file.
Input:
// @flow

import type test from './something'

Error:
{
  "flowVersion":"0.108.0",
  "exit":{
    "code":15,
    "reason":"Out_of_shared_memory",
    "msg":"Out of shared memory:\nRaised at file \"map.ml\", line 135, characters 10-25\nCalled from file \"hack/utils/collections/myMap.ml\", line 15, characters 26-36\nRe-raised at file \"src/core/lwt.ml\", line 2999, characters 20-29\nCalled from file \"src/unix/lwt_main.ml\", line 26, characters 8-18\nCalled from file \"src/commands/checkCommands.ml\", line 159, characters 29-88\nCalled from file \"src/commands/commandUtils.ml\", line 13, characters 4-32\n"
  }
}

I tried to use --sharedmemory-dirs=/tmp as well as --temp-dir=/tmp and flow is still returning me this error. It looks like something is trying to write to the disk but unsuccessfully. Is there any other option I can change to /tmp that is the only writable?

We've made a lot of performance improvements in the past couple of years. Please feel free to open a new issue with details if you have a new out of memory issue.


Create Amara_Metu.md

As a technical writer, I specialize in creating clear, concise, and accurate documentation to help users understand and effectively utilize complex products and services. My role involves researching and gathering information from various sources, such as subject matter experts and technical materials, to develop user manuals, guides, tutorials, and other instructional content. I focus on translating technical jargon into easily comprehensible language for a diverse audience. Additionally, I collaborate with engineers, developers, and product managers to ensure the documentation is up-to-date and aligns with the latest product updates. My goal is to bridge the gap between complex technical information and user-friendly content, enhancing the overall user experience.

Closing this PR as the technical writer hiring period is now closed


Compressed three notes into one note in web sites choice topic

Compressed three notes into one note in the topic "Windows Azure Web Sites, Cloud Services, and VMs: When to use which?"

@rothja Thank you for raising this issue.  We're closing old issues.  If you feel this issue should remain open, please comment to let us know that the issue should be reopened.


Pdb freezes rest of neovim

When entering the debug mode (it reads "(IPy) (Pdb)" on the lowest line in neovim), the rest of neovim is frozen. It would be nice if it was still possible at least scroll in other buffers. Is that possible?

We could add a an option where stdin request doesn't use the modal input() function, instead the prompt would be echoed to the output and the next IPyRun command will be sent as input.


addChild improperly coded?  returns 1 child only

I was trying to 'properly' extend a Container using Typescript when I ran across the following:
The Container.addChild routine is a bit weird.
I never used to add multiple children with 1 addChild call, but was forced to look at it when extending the container and Typescript complained.
When you add 1 child, it returns the added child.
When you add multiple children, it still only returns only 1 child.
That is a bit odd.
(also, I have no clue how to properly do override this in Typescript, see [https://github.com/pixijs/pixi-typescript/issues/57] )
I don't know how much this multiple-child-adding is used. but wouldn't it be better to have 1 addChild function and 1 addChildren?   the one returning the same child, or array of children if multiple are added?

I never use the return of an addchild myself, so thats fine.
Still.   separate functions for addChild, and addMultipleChildren ?

@whizzkid Good idea. yes.

Multiple methods for adding a single child or multiple children is unnecessary. Argument spread is useful for just this reason. I think this comes down to convenience:
// This is convenient
var sprite = container.addChild(new Sprite());

// This is slightly less convenient
var sprite = new Sprite();
container.addChild(sprite);

When adding multiple children, I don't think the return value is that useful.
// This is convenient
container.addChild(new Graphics(), new Container(), new Sprite());

// This is slightly less convenient
container.addChild(new Graphics());
container.addChild(new Container());
container.addChild(new Sprite());

If you don't care about the return value, then like Ivan said, consider it void.

Having multiple methods also has a small speed advantage.
I've never used the multiple children method. so for every addChild, an unneccesary arguments.length and an if-statement gets executed.
And when you use z-sorting for example, you'll be doing a lot of addChild's  every frame. so PIXI could be a little faster if it had a separate function :)

Hello @whizzkid, absolutly understand your perf concerns. Good news is this function has been speed tested a lot as initially we were concerned about possible implications of accessing arguments. As it turns out there are specific ways of dealing with it that end up having zero impact on perf.
If you are doing a lot of depth sorting, I would recommend accessing the children and applying a sort function directly to the array - its super fast!

Good tip, thanks.

So just to confirm! Nothing is changing on the pixi front?
The signature is essentially:
addChild(...child: DisplayObject[]): DisplayObject
But I think that needs to be specifically explained in the Doc.  I have passed over the code, and looked at 2 tickets and I still don't know what this does.  It is not obvious.
container.addChild(c1, c2).addChild(c3)

Can someone make a PR for that already?

I'm going to close this issue. Comments about the addChild usage (i.e., documentation) can be added to #2602


Update connect-zendesk-to-microsoft-cloud-app-security.md with change of admin permissions.

@idbasre : Thanks for your contribution! The author(s) have been notified to review your proposed change.

@idbasre : Thanks for your contribution! The author(s) have been notified to review your proposed change.

Commit again with the required changes.

@dcurwin : Thanks for your contribution! The author(s) have been notified to review your proposed change.


freeimage (3.17.0)

fix for gcc-5 and corrected patches in makefiles.

This should be sent upstream to Homebrew if it addresses compiler errors with GCC 5 on Mac as well as Linux.

it's not only that! it's also changes of .dylib to .so in patches. So the one you have in Linuxbrew is not working irrespectively of gcc version.

i submitted gcc related stuff here: https://github.com/Homebrew/homebrew/pull/44612

This patch is too big for me to merge into Linuxbrew. My recommendation would be to pull the inline patch out into gist and send what portion of this patch upstream to Homebrew/homebrew that isn't specific to Linux. Send the remaining portion that's specific to Linux here to Homebrew/linuxbrew.

i already send the gcc-related part to homebrew (see link above). Once it's merged/resolved there, i will update the PR here.

Great. Thanks, Denis. Blocked on Homebrew/homebrew#44612

fixed in upstream. After you merge it I will rebase this PR.

Thanks, Denis. The merge will come in the new year.

I've merged Homebrew into Linuxbrew.

i've rebased

This patch is too large for Linuxbrew.
Does it work to simply change
  patch :DATA

to
  patch :DATA if OS.mac?

are you sure you are looking at the right version? The patch is roughly the same number of lines as the one in Homebrew. I just modified it to work on Linux.

Yep. Showing  1 changed file  with 20 additions and 56 deletions.
Does it work if you simply disable this patch as above?

i don't need to disable it to see that it will not work otherwise ;-)
seriously, just see what it does to Makefile which grants a working installation.

That whole patch appears to be Mac specific. Try disabling it.

these and these and these lines in the patch have nothing to do with MAC and as I said they grant working installation.
The mac-version is similar in that sense.

to close this topic once and forever, ignoring the patch gives:
Last 15 lines from /home/davydden/Library/Logs/Homebrew/freeimage/02.make:
2016-01-07 10:52:19 +0100

make
-f
Makefile.gnu
install
PREFIX=/home/davydden/.linuxbrew/Cellar/freeimage/3.17.0

install -d //usr/include //usr/lib
install -m 644 -o root -g root Source/FreeImage.h //usr/include
install: cannot create regular file ‘//usr/include/FreeImage.h’: Permission denied
make: *** [install] Error 1

Okay. Have you sent this patch to the upstream author? https://github.com/davydden/linuxbrew/blob/freeimage_linuxbrew/Library/Formula/freeimage.rb#L45-L127

upstream is already fine. I have not changed this part of the patch in the upstream, it was working without any issues. On the contrary, I adjusted this patch to work for Linux. That's what the whole PR is about...

I wasn't clear enough. I meant have you sent this patch upstream to the freeimage author.
I don't want to merge this patch as it is now for two reasons. One, it breaks the build on Mac OS and Linuxbrew aims to be compatible with both Mac and Linux. Two, if Homebrew changes the patch for Mac it will create merge conflicts when I merge Homebrew into Linuxbrew.
I suggest gist-ing your patch for Linux, and patching this formula like so:
if OS.mac?
  patch :DATA
else
  patch do
    …
  end
end

it does not have to be sent upstream to freeimage. It mostly settings for makefile, it does not fix any bugs.

I will shift it to the gist later....

@sjackman i shifted it to the gist

Thanks for your contribution, Davy. For future contributions, the preferred commit log message is
freeimage 3.17.0: Fix for Linuxbrew

@sjackman I am Denis :smile:

:blush: My apologies, Denis.


Kong doesn't remove old Cassandra nodes

Summary
Kong keeps trying to send requests to old Cassandra peers that have left the cluster, resulting in slow responses as it waits for the request to timeout. If the Cassandra nodes don't have static IPs (or the cluster is simply shrunk) Kong instances will accumulate these old peers, increasing the percentage of requests that have to be retried.
After a quick look into lua-cassandra, I think the issue is that Kong never calls refresh() on the cluster after initial initialisation.
Steps To Reproduce

Remove/replace a Cassandra node from the cluster, such that an IP that previously had a node no longer does,
Make requests that require talking to Cassandra (e.g. GET /apis/) until one takes ~10s,
Check logs for messages like [lua] cluster.lua:146: set_peer_down(): [lua-cassandra] setting host at {old_node_ip} DOWN.

Additional Details & Logs

Kong version: 0.10.3

Yes indeed, that is a known issue that has surfaced from time to time but stays in our backlog. It affects both scaling up and down of the Cassandra cluster.
Eventually, such a refresh operation should probably be triggered manually from the Admin API as it can be quite expensive (there is no way as of today to notify Kong from Cassandra that the cluster has been scaled up or down).

For a bit of context, we're running Kong in a Kubernetes cluster, currently backed by Postgres (also in Kubernetes). We were hoping to switch to Cassandra to make it HA - we use Kong for auth so can't tolerate DB downtime.
Cassandra is also deployed in Kubernetes, which means that the nodes get a new IP each time they restart (updates, failures, node maintenance, etc.), even though the hostnames remain the same.
For the purposes of HA, manually triggering refresh doesn't seem like it would be feasible. It could be managed when doing planned upgrades/maintenance, but requiring a manual step to recover after a failure leaves too much opportunity for subsequent failures to ruin your day before the manual step can be performed.
Plus, the current reconnection policy results in dead nodes being used for subsequent real requests after a fixed interval, despite the node never passing a health check in the meantime. While these requests are retried, the extra 10s delay can cause the downstream request to time out (or simply be unacceptably slow).
If it's too expensive to trigger a refresh whenever a node times out, is it feasible to do an explicit health check before marking them as up, rather than effectively using real requests as health checks? That would at least minimise the requests hit with the delay of trying a down node until refresh can be called.
To take that further, could we set a period after which if a node is still down, refresh is called automatically?

Hi, any news on this issue ?

Hi,
When are you going to have the final solution of this problem? Is it possible to implement an automatic cassandra cluster refresh? As I understood, the solution #3752 is only manual action.
Best Regards

Hi @braedon, @thibaultcha,
I also found this issue in Kong Enterprise (v. 0.34) that Kong always tries to talk to the cassandra nodes which it discovered during startup and does not recognise Cassandra scaling if it happened later.
As a workaround for this problem I am sending a SIGHUP to all Kong containers once Cassandra cluster has been scaled.
My deployment structure is:
I'm running:

N PODs with Kong Proxy (k8s label app=kong-proxy)
N PODs with Kong Ingress Controller + Kong Admin
M Cassandra PODs in a form of K8s StatefulSet.

I'm using the below script for that.
A few important notes:

You need to have your Kong running as PID 1 inside your containers (usual docker best-practice).
In the below script you will need to change labels like app=kong-proxy and app=kong-ingress-controller and specify a correct k8s namespace (-n apig-$ENVIRONMENT_NAME).

Essentially, I've proven that Kong process does re-discovery of the scaled Cassandra cluster after receiving SIGHUP. So the approach works fine at the moment.
But ultimately, I guess Kong must implement a correct Cassandra discovery inside its own code.
The script:
# This script is to send SIGHUP (reload configs) Linux signal
# to Kong containers running inside k8s cluster

PODS=$(kubectl -n apig-$ENVIRONMENT_NAME get pods -l app=kong-proxy -o name | sed 's/pod\///g')
for POD in $PODS
do
  kubectl -n apig-$ENVIRONMENT_NAME exec $POD -c kong-proxy -- kill -1 1
  echo "Result status $?"
done

PODS=$(kubectl -n apig-$ENVIRONMENT_NAME get pods -l app=kong-ingress-controller -o name | sed 's/pod\///g')
for POD in $PODS
do
  kubectl -n apig-$ENVIRONMENT_NAME exec $POD -c kong-admin -- kill -1 1
  echo "Result status $?"
done

I just opened a PR introducing a new cassandra_refresh_frequency property, please have a look: https://github.com/Kong/kong/pull/5071

Thanks @thibaultcha, refreshing the topology periodically seems like a good step forward! The code PR looks sane to me, but I'm not familiar enough with Lua/Kong to really review it.

I just opened a PR introducing a new cassandra_refresh_frequency property, please have a look: #5071

@thibaultcha
Thanks a lot for that.
Hopefully this will eventually be incorporated into Kong EE soon.


Enhance extensibility for composition locals

Currently, the LocalIndication can be overridden using the indication property in ComposeTheme. However, overriding other CompositionLocal values requires wrapping the theme manually, which might lead to additional boilerplate. For example:
private val BaseTheme = buildComposeTheme {
    TODO()
}

val Theme = buildComposeTheme {
    extend { content ->
        BaseTheme {
            CompositionLocalProvider(
                LocalTextSelectionColors provides MyTextSelectionColors,
            ) {
                content()
            }
        }
    }
}

This approach works but could be streamlined. To simplify and enhance this mechanism, would you consider adding an API to directly specify CompositionLocal values? For example:
val Theme = buildComposeTheme {
    compositionLocals = CompositionLocals(
        LocalIndication provides MyIndication,
        LocalTextSelectionColors provides MyTextSelectionColors,
    )
}

It aligns with the existing flexibility of buildComposeTheme, which already supports design tokens and properties. Let me know if this aligns with the project's direction or if there are considerations I may have overlooked. I'd be happy to make a PR.

Thanks for creating this issue.
I wasn't aware of those specific Locals. They seem to be part of foundation so not tied to a specific theme (like Material).
Just to clarify, are you trying to customize those values in your new Compose Theme?

Yes, I'm creating a black & white theme and here's what I'm doing.
private val lightColor = Color(0xfff8f8f8)
private val darkColor = Color(0xff222222)
private val lightColorToken = DesignToken<Color>("light")
private val darkColorToken = DesignToken<Color>("dark")

private val textSelectionColor = Color(0xff888888)
private val TextSelectionColors = TextSelectionColors(
    handleColor = textSelectionColor,
    backgroundColor = textSelectionColor.copy(alpha = 0.35f),
)

private val BaseTheme = buildComposeTheme {
    colors = DesignTokens(
        lightColorToken to lightColor,
        darkColorToken to darkColor,
    )

    // Other tokens and indication omitted for brevity
}

val Theme = buildComposeTheme {
    extend { content ->
        BaseTheme {
            CompositionLocalProvider(
                LocalTextSelectionColors provides TextSelectionColors,
                LocalIndication provides
            ) {
                content()
            }
        }
    }
}

val DesignTokens<Color>.light
    @Composable @ReadOnlyComposable get() = get(lightColorToken)
val DesignTokens<Color>.dark
    @Composable @ReadOnlyComposable get() = get(darkColorToken)

thank you for clarifying. Instead of using the Composition Local Provider, I could provide a way to pass the text selection colors you need via the buildComposeTheme {}
ie:
val Theme = buildComposeTheme {
    textSelectionColors = TextSelectionColors(
    handleColor = textSelectionColor,
    backgroundColor = textSelectionColor.copy(alpha = 0.35f),
)
}

would that fit what you are trying to do?

Yes, that would work.
However, since I’m building the theme incrementally, I’m unsure if I might encounter other CompositionLocal values that I need to override or even define my own when necessary. Doing this directly within the buildComposeTheme() block feels like the most fitting place to handle it, which is why I proposed a more extensible approach. That said, I completely understand if this isn’t something you’d want to add.

I'm happy to support any customization options that belong to Foundation.
Let me check what else I might have missed and see how I can include accordingly.
I don't want to provide a way to work with composition locals directly though as ComposeTheme does not expose any and that would change the API.


In CHEN12 dataset, there is no develop data file

Could you shared the develop data file? thank you

The official Chen12 dataset doesn't have dev splits. We perform hyperparameter selection by cross-validation, i.e., create multiple train-dev folds from the training set.


math inside math breaks mathml generation

If math is used inside math, e.g.
\DocumentMetadata{uncompress,pdfversion=2.0,pdfstandard=ua-2,testphase={phase-III,math}}
\documentclass{book}
\usepackage{unicode-math}
\begin{document}
$ a=b \mbox{$x$} $

\ExplSyntaxOn
%$ a=b \mbox{$\luamml_flag_ignore: x$} $
\ExplSyntaxOff

\end{document}

the generated mathml contains duplicated entries with the same hash but different content

\mml 1

$a=b \mbox {$x$}$

09AFE0B55E68D79A4BC7841C2B4B7CCB

<math xmlns="http://www.w3.org/1998/Math/MathML">
 <mi>
 𝑥
 </mi>
</math>

\mml 1

$a=b \mbox {$x$}$

09AFE0B55E68D79A4BC7841C2B4B7CCB

<math xmlns="http://www.w3.org/1998/Math/MathML">
 <mi>
 𝑎
 </mi>
 <mo lspace="0.278em" rspace="0.278em">
 =
 </mo>
 <mi>
 𝑏
 </mi>
 <mtext>
 <math xmlns="http://www.w3.org/1998/Math/MathML">
 <mi>
 𝑥
 </mi>
 </math>
 </mtext>
</math>

This is a serious problem, as e.g. hyperref inserts a \smash which produces four empty mathml fragments through the mathpalette command ;-(. This can be avoided by adding a \luamml_flag_ignore: (then the inner math is a simple 𝑥 inside an mtext) but perhaps it is also possible to process the inner math but suppress the writing of the chunk.
@zauguin  @davidcarlisle  what would be the best option to handle this?

Sorry that I am neither.
Is this not just one of the many problem cases that occur with the use of boxes within mathmode?
There are also, of course, many other things legal in mathmode that will cause problems (maybe cross-reference/links stuff, and line-breaking within inline maths?).

We could presumably fix the counting and md5 hash if we want to generate mathml for the nested cases, but it seems the current momentum is towards just attaching AF to the outer math, which is then responsible for making a mathml-html-mathml version of the whole formula.  In which case we need to lose the inner math chunks completely.

@davidcarlisle  yes I agree that we do not want the inner chunks to create fragments. But how do we want them to be represented inside the outer mathml? As
<mtext>
 <math xmlns="http://www.w3.org/1998/Math/MathML">
 <mi>
 𝑥
 </mi>
 </math>
 </mtext>

or as
<mtext>
 𝑥
 </mtext>

?  (Assuming that the inner math is real, fake math should probably be handled differently)

<mtext><math><mi>x  I think. that is mtext containing inline html with further nested math. <math> directly nested inside <mtext. isn't valid and the option of <mtext> 𝑥 </mtext> is only available in trivial cases like $x$ if there was any structure at all , $x^2$ or $\frac{a}{b}$ you would need markup.

That second seems semantically incorrect.
It is not text but math, I assume!
Apologising again for not be the correct person to reply here.

@davidcarlisle I had assumed that mtext was for non-math text, not for further math??

@davidcarlisle ok. So we need @zauguin to tell use how 1) one can add a span and 2) how to prevent luamml to write a mathml chunk while still processing the inner math.

@davidcarlisle I had assumed that mtext was for non-math text, not for further math??

in html,  mtext has content model text or any html flow elements, so you can have a span and within that span you can have any inline html including further <math> so it directly models \[ .... \mbox{... $x$  where you can nest the math inside math so long as you have a text construct between them.  It's same here you can not nest a <math>  (or any mathml element) directy in an <mtext> but you can have an html  which contains a <math>

well of the two options originally suggested one was invalid (so not mathml)  conversely <mtext> 𝑥 </mtext> is valid but relies on Unicode rather than element tagging to provide the mathematical semantics for  U+1D465 MATHEMATICAL ITALIC SMALL X` so it means "text consisting of a math italic x"  . Whether or not that is the same as "math consisting of x" I leave to philosphers.

@car222222  I don't think this is so different from
<mtext>مرحبا بالعالم</mtext>

ideally the text would have element markup giving language and directional and language information, but if you just have plain text and rely on the Unicode bidi algorithm to set the direction, it's not wrong.
Similarly you might prefer the nested math structure to be fully marked up, but if it's not then if it is valid you still have to handle it.

Who has to handle what, and when?

It may not be different, but that does not make it good!
Why not always more clearly distinguish "text" and math?
Even "text within math"!
Maybe it does not matter in HTML or LaTeX how these things are marked-up, but in general it is not "semantically appropriate" to mix e erything up like this, or is it?

More constructively, should therefore:
mbox in mathmode   always translate to   mtext > span

A better example for explaining what this us all,about might be:
x + y
Can this also now be encoded without using mathmode? . . . provided the "correct, but unknown to most of us, slots" are used for the x and the y (not to mention the +, but that is easier to remember/access!).

More constructively, should therefore: mbox in mathmode always translate to mtext > span

I think a qualified answer is "yes" for any \mbox that an author might have added.
So the typical  ... f(x)=0  \mbox{ if $x<0$}  cases.
Hidden \hbox like \boldsymbol{x}  being essentially \mbox{\boldmath$x$} should stay hidden, but as ever, distinguishing which case you are in in practice isn't always easy.


Gulp Plugin Error

Gulp Plugin site error
http://gulpjs.com/plugins/
error : angular is not defined

In my case there is no such error. Where do you get this exactly and what did you do?

In my case, i use chrome browser. and when i click plugins on the button, the site return timeout
GET http://gulpjs.com/plugins/js/vendor.js net::ERR_CONNECTION_RESET
app.js:1 Uncaught ReferenceError: angular is not defined
I thought it cannot load vendor.js file. Please check the file and whether correct module or not
vendor.js	(failed)	script	(index):49	8.3 KB	2.1 min

I'm unable to replicate this. Is it still happening for you?
Also, where are you trying to access the site from? (country)

Maybe it is also possible that you cached an older vendor.js. Try to open it on another browser, incognito mode or delete your cache.

Now I didn't delete cache in my browser but it's done. I don't know why it is unable to open this site before.
Thanks for your comment ^^

@kingsae1 Glad to hear that. Please close this issue, as it is solved.


database.compact() failed assertion

I have a 227 GB redb file and tried compacting it:
thread 'main' panicked at 'assertion failed: `(left != right)`
  left: `996063`,
 right: `996063`', /home/admin/.cargo/registry/src/index.crates.io-6f17d22bba15001f/redb-1.0.5/src/tree_store/page_store/base.rs:76:9
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

real	6m21.195s
user	0m14.096s
sys	0m50.920s

I'm using redb version 1.0.5.

Oh, they're not meant to be equal... Now I see

I ran it again to get a backtrace:
thread 'main' panicked at 'assertion failed: `(left != right)`
  left: `996063`,
 right: `996063`', /home/admin/.cargo/registry/src/index.crates.io-6f17d22bba15001f/redb-1.0.5/src/tree_store/page_store/base.rs:76:9
stack backtrace:
   0: rust_begin_unwind
             at /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/std/src/panicking.rs:578:5
   1: core::panicking::panic_fmt
             at /rustc/90c541806f23a127002de5b4038be731ba1458ca/library/core/src/panicking.rs:67:14
   2: core::panicking::assert_failed_inner
   3: core::panicking::assert_failed
   4: redb::tree_store::btree::UntypedBtreeMut::relocate_helper
   5: redb::tree_store::btree::UntypedBtreeMut::relocate_helper
   6: redb::tree_store::btree::UntypedBtreeMut::relocate_helper
   7: redb::tree_store::btree::UntypedBtreeMut::relocate_helper
   8: redb::tree_store::btree::UntypedBtreeMut::relocate_helper
   9: redb::tree_store::table_tree::TableTree::compact_tables
  10: redb::transactions::WriteTransaction::compact_pages
  11: redb::db::Database::compact
  12: ord::subcommand::compact::run
  13: ord::subcommand::Subcommand::run
  14: ord::main
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.

real	6m8.841s
user	0m14.704s
sys	0m49.394s

Uh oh. Do you have any way of reproducing it?

I've been able to reproduce it with the fuzzer. Not sure exactly what's wrong yet, but I'll take a look

Oh, are you using persistent savepoints? I think there's a bug where compact() will panic if there are any persistent savepoints in the db :/

Oh, are you using persistent savepoints? I think there's a bug where compact() will panic if there are any persistent savepoints in the db :/

I'm not using any savepoints at all.
I have been trying to make a smaller database that demonstrates the issue. I deleted all but one of the tables, and deleted 90% of the 66 million rows from the remaining table, and it still fails when I try to compact it.
The problem is that none of this deletion has decreased the database file at all, and when I gzip the database file it is actually bigger now than when I gzipped it before I started deleting things from it.
I guess since you have been able to reproduce the issue I don't need to keep trying to.


python312Packages.zeversolar: init at 0.3.2

Module to interact with the local CGI provided by ZeverSolar
https://github.com/kvanzuijlen/zeversolar

Things done

Built on platform(s)

[ ] x86_64-linux
[ ] aarch64-linux
[ ] x86_64-darwin
[ ] aarch64-darwin

For non-Linux: Is sandboxing enabled in nix.conf? (See Nix manual)

[ ] sandbox = relaxed
[ ] sandbox = true

[ ] Tested, as applicable:

NixOS test(s) (look inside nixos/tests)
and/or package tests
or, for functions and "core" functionality, tests in lib/tests or pkgs/test
made sure NixOS tests are linked to the relevant packages

[ ] Tested compilation of all packages that depend on this change using nix-shell -p nixpkgs-review --run "nixpkgs-review rev HEAD". Note: all changes have to be committed, also see nixpkgs-review usage
[ ] Tested basic functionality of all binary files (usually in ./result/bin/)
24.11 Release Notes (or backporting 23.11 and 24.05 Release notes)

[ ] (Package updates) Added a release notes entry if the change is major or breaking
[ ] (Module updates) Added a release notes entry if the change is significant
[ ] (Module addition) Added a release notes entry if adding a new NixOS module

[ ] Fits CONTRIBUTING.md.

Add a :+1: reaction to pull requests you find important.

nixpkgs-review result
Generated using nixpkgs-review.
Command: nixpkgs-review pr 351416

x86_64-linux

:white_check_mark: 9 packages built:

home-assistant-component-tests.zeversolar
python311Packages.retry2
python311Packages.retry2.dist
python311Packages.zeversolar
python311Packages.zeversolar.dist
python312Packages.retry2
python312Packages.retry2.dist
python312Packages.zeversolar
python312Packages.zeversolar.dist


Unnecessary properties in primKey and indexes in schema

TLDR
primKey is always considered unique and cannot be multi-value. Indexes cannot be marked as auto-increment. Why leave those properties in there?
Background
I'm trying to dynamically create objectStores/tables (Storage app, each warehouse needs their own table, added through the UI). I've been playing around with the sample code in #988. I added a console.log(db.tables) at the end of the playAround() function.
When I add a new entry in that function when calling the changeSchema function, using &id, the newly created table shows primKey with a unique: true property. Expected behavior, the Dexie newbie in me thought.
Adding a new entry and running it again, now shows both tables. However, unique for the primKey of the first table is now set to false, while for the new table is true. Rinse and repeat, and all older tables have it set to false, while only the newly created table contains the property set true.
This kinda confused and worried me, so I spent all morning trying to understand what is happening here.
Turns out that it's explicitly set to false in line 315 here https://github.com/dexie/Dexie.js/blob/f088a7df990b9eb697f73e98603a01e4fe95dd65/src/classes/version/schema-helpers.ts#L312-L320 when db.open() is called (via readGlobalSchema).
In contrast, when creating the store using db.version().stores(), it just takes the first of the indexes and converts that to the primKey, only checking if primKey.multi is true. See https://github.com/dexie/Dexie.js/blob/f088a7df990b9eb697f73e98603a01e4fe95dd65/src/classes/version/version.ts#L25-L38
I believe the behavior should be consistent: either show unique as false everywhere, or show it as true. Or... remove it completely for the primKey, since its uniqueness is implied.
And while we're at it: since only the primKey is allowed to have auto set, why not remove it from the indexes? I'm thinking the same for primKey and multi-value.
IMHO, as it is now, it can cause unnecessary confusion for (especially new) developers looking into Dexie.

Primary key is also an index and there are reasons to reuse much of the code between the two. When dexie reverse-engineers the schema, it might be setting the orimKey's uniqueness flag to false in error. However, this does not affect the behavior since the primary key is always unique.
So basically this is a bug but IMHO not of certian high prio. A PR is welcome to change line 315 in schema-helpers and make other adjustments needed for unit tests to pass (if nescessary).

My PR-fu is very weak, virtually non-existent, but I might give it a shot.


Intermittent 401 errors while sending typing activity

Versions
NodeJS v10.16.3
BotBuilder NodeJS SDK v4.6.2
OS Ubuntu
Describe the bug
Given below is a snippet of our code responsible for sending typing activity
server.post(msgEndpointPath, (req, res, next) => {
                res.send(200);
                next();
                adapter.processActivity(req, res, async (turnContext) => {
                    if (turnContext.activity.type === ActivityTypes.Message) {
                        await turnContext.sendActivity({type: ActivityTypes.Typing});
                    }
                    await bot.run(turnContext);
                });
            });

But our bot service's adapter's onTurnError listener is receiving directline related errors intermittently. Given below is one of the errors logged.
2020-02-28T04:32:42.581Z ERROR xxxxx xxxxxx 62zUdcKct3z8WXcE RfFDsO5gJSu6IVH3 root [UserId:fwAQinABNqPpUQcEmktH ConvId:3gK67i5yMrHEH9WbkaHPNP-h] Error ocurred. Error: { Error
    at new RestError (/usr/src/app/node_modules/@azure/ms-rest-js/dist/msRest.node.js:1397:28)
    at /usr/src/app/node_modules/@azure/ms-rest-js/dist/msRest.node.js:1849:37
    at process._tickCallback (internal/process/next_tick.js:68:7)
  code: undefined,
  statusCode: 401,
  request:
   WebResource {
     streamResponseBody: false,
     url:
      'https://directline.botframework.com/v3/conversations/3gK67i5yMrHEH9WbkaHPNP-h/activities/3gK67i5yMrHEH9WbkaHPNP-h%7C0000000',
     method: 'POST',
     headers: HttpHeaders { _headersMap: [Object] },
     body:
      '{"type":"typing","serviceUrl":"https://directline.botframework.com/","channelId":"directline","from":{"id":"xxxxxx@V2ghQot8Lko","name":"xxxxx"},"conversation":{"id":"3gK67i5yMrHEH9WbkaHPNP-h"},"recipient":{"id":"fwAQinABNqPpUQcEmktH","name":"XXXX"},"replyToId":"3gK67i5yMrHEH9WbkaHPNP-h|0000000"}',
     query: undefined,
     formData: undefined,
     withCredentials: false,
     abortSignal: undefined,
     timeout: 0,
     onUploadProgress: undefined,
     onDownloadProgress: undefined,
     operationSpec:
      { httpMethod: 'POST',
        path: 'v3/conversations/{conversationId}/activities/{activityId}',
        urlParameters: [Array],
        requestBody: [Object],
        responses: [Object],
        serializer: [Serializer] } },
  response:
   { body: '',
     headers: HttpHeaders { _headersMap: [Object] },
     status: 401 },
  body: undefined }

This is breaking the experience for users because onTurnError handler sends an failure message to user. So please guide us in fixing this asap.

@bhushanvadgave, which version of Ubuntu are you using? And, have you been able to identify any particular action or activity taking place that is associated or happening with the type activity (i.e. an adaptive card always follows it, etc.)?

@stevkan
Our bot service runs inside docker container of OS (Debian GNU/Linux 8 jessie). Sorry I did not mention this in the issue description. Also, we do not see any pattern (like adaptive card, etc) when this error occurs.

Thank you for the updated info. I'll begin trying to repro the setup and issue.
In the meantime, can you also post your code regarding the typing indicator and where it is implemented in your bot?
Thanks!

@stevkan
I have shared the code snippet responsible for posting the typing event in the issue description above. Let me know if you require anything more.
Just so you know, this error has occurred 21 times in the last 2 days (7th,8th March).

@stevkan do we have any update on this?

Can you try moving the send typing activity to one of the activity handlers (onMessage(), for example)? Because it's placed directly in the adapter, it is responding to everything that comes in. I suspect that there is some bit of data that should be incoming, but shouldn't necessarily be something the typing activity should be acting on.
If you can try moving and test, that would be great.

@stevkan The errors are still occurring even after moving typing sendActivity to onMessage handler.

@bhushanvadgave, I just noticed you are sending res.(200) as a first action in your server.post(). We won't know until you test, but if this isn't the problem it may mitigate other unknown problems. When I include the res.send(200) in my code, I get an exception error in my Application Insights logs. The reason being is a 200 response is already sent back as part of the adapter's process. The exception comes because a 200 response was already received and, therefore, can't be set a second time. It's my suspicion that this is interfering with the typing indicator.
Try removing both the res.send(200) and the next() bits of code and test for errors.

@stevkan Yes, we added res.send(200) and next() calls to fix other issue where our bot service's /api/message endpoint was timing out.
I partially remember that we were facing typing activity issues even before making the above changes. But I will try reverting the changes and see if that fixes this issue.

Closing due to lack of activity. If the issue persists, please feel free to re-open.


Flake: py27_gevent.test.unit._metadata_test.MetadataTest Run

https://source.cloud.google.com/results/invocations/305ba304-efa0-4c8f-ae66-5a7c570117ed/targets/github%2Fgrpc%2Fpython_linux_opt_gevent/tests

This was fixed in #15758


issue when compiling for tomcat 7

hi i have the latest build of xampp running, installed tomcat 7 & latest java JRE, wen to load up this src ip:8080/cah/WebContent click on take me to the game then i get this thrown at me. not sure what to do, some help would be great thanks.
HTTP Status 500 - Unable to compile class for JSP:
type Exception report
message Unable to compile class for JSP:
description The server encountered an internal error that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: [15] in the generated java file: [C:\xampp\tomcat\work\Catalina\localhost\cah\org\apache\jsp\WebContent\game_jsp.java]
Only a type can be imported. net.socialgamer.cah.data.GameOptions resolves to a package
An error occurred at line: 413 in the jsp file: /WebContent/game.jsp
GameOptions.MIN_SCORE_LIMIT cannot be resolved to a type
410:       Score limit:
411:
412:         <%
413:           for (int i = GameOptions.MIN_SCORE_LIMIT; i <= GameOptions.MAX_SCORE_LIMIT; i++) {
414:         %>
415:           <option <%= i == GameOptions.DEFAULT_SCORE_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
416:         <% } %>
An error occurred at line: 413 in the jsp file: /WebContent/game.jsp
GameOptions.MAX_SCORE_LIMIT cannot be resolved to a type
410:       Score limit:
411:
412:         <%
413:           for (int i = GameOptions.MIN_SCORE_LIMIT; i <= GameOptions.MAX_SCORE_LIMIT; i++) {
414:         %>
415:           <option <%= i == GameOptions.DEFAULT_SCORE_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
416:         <% } %>
An error occurred at line: 415 in the jsp file: /WebContent/game.jsp
GameOptions.DEFAULT_SCORE_LIMIT cannot be resolved to a type
412:         <%
413:           for (int i = GameOptions.MIN_SCORE_LIMIT; i <= GameOptions.MAX_SCORE_LIMIT; i++) {
414:         %>
415:           <option <%= i == GameOptions.DEFAULT_SCORE_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
416:         <% } %>
417:
418:
An error occurred at line: 423 in the jsp file: /WebContent/game.jsp
GameOptions.MIN_PLAYER_LIMIT cannot be resolved to a type
420:       <select id="player_limit_template" class="player_limit"
421:           aria-label="Player limit. Having more than 10 players may cause issues both for screen readers and traditional browsers.">
422:         <%
423:           for (int i = GameOptions.MIN_PLAYER_LIMIT; i <= GameOptions.MAX_PLAYER_LIMIT; i++) {
424:         %>
425:           <option <%= i == GameOptions.DEFAULT_PLAYER_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
426:         <% } %>
An error occurred at line: 423 in the jsp file: /WebContent/game.jsp
GameOptions.MAX_PLAYER_LIMIT cannot be resolved to a type
420:       <select id="player_limit_template" class="player_limit"
421:           aria-label="Player limit. Having more than 10 players may cause issues both for screen readers and traditional browsers.">
422:         <%
423:           for (int i = GameOptions.MIN_PLAYER_LIMIT; i <= GameOptions.MAX_PLAYER_LIMIT; i++) {
424:         %>
425:           <option <%= i == GameOptions.DEFAULT_PLAYER_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
426:         <% } %>
An error occurred at line: 425 in the jsp file: /WebContent/game.jsp
GameOptions.DEFAULT_PLAYER_LIMIT cannot be resolved to a type
422:         <%
423:           for (int i = GameOptions.MIN_PLAYER_LIMIT; i <= GameOptions.MAX_PLAYER_LIMIT; i++) {
424:         %>
425:           <option <%= i == GameOptions.DEFAULT_PLAYER_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
426:         <% } %>
427:
428:       Having more than 10 players may get cramped!
An error occurred at line: 434 in the jsp file: /WebContent/game.jsp
GameOptions.MIN_SPECTATOR_LIMIT cannot be resolved to a type
431:       <select id="spectator_limit_template" class="spectator_limit"
432:           aria-label="Spectator limit.">
433:         <%
434:           for (int i = GameOptions.MIN_SPECTATOR_LIMIT; i <= GameOptions.MAX_SPECTATOR_LIMIT; i++) {
435:         %>
436:           <option <%= i == GameOptions.DEFAULT_SPECTATOR_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
437:         <% } %>
An error occurred at line: 434 in the jsp file: /WebContent/game.jsp
GameOptions.MAX_SPECTATOR_LIMIT cannot be resolved to a type
431:       <select id="spectator_limit_template" class="spectator_limit"
432:           aria-label="Spectator limit.">
433:         <%
434:           for (int i = GameOptions.MIN_SPECTATOR_LIMIT; i <= GameOptions.MAX_SPECTATOR_LIMIT; i++) {
435:         %>
436:           <option <%= i == GameOptions.DEFAULT_SPECTATOR_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
437:         <% } %>
An error occurred at line: 436 in the jsp file: /WebContent/game.jsp
GameOptions.DEFAULT_SPECTATOR_LIMIT cannot be resolved to a type
433:         <%
434:           for (int i = GameOptions.MIN_SPECTATOR_LIMIT; i <= GameOptions.MAX_SPECTATOR_LIMIT; i++) {
435:         %>
436:           <option <%= i == GameOptions.DEFAULT_SPECTATOR_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
437:         <% } %>
438:
439:       Spectators can watch and chat, but not actually play. Not even as Czar.
An error occurred at line: 458 in the jsp file: /WebContent/game.jsp
GameOptions.MIN_BLANK_CARD_LIMIT cannot be resolved to a type
455:
456:         Also include
457:         <%
458:           for (int i = GameOptions.MIN_BLANK_CARD_LIMIT; i <= GameOptions.MAX_BLANK_CARD_LIMIT; i++) {
459:         %>
460:           <option <%= i == GameOptions.DEFAULT_BLANK_CARD_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
461:         <% } %>
An error occurred at line: 458 in the jsp file: /WebContent/game.jsp
GameOptions.MAX_BLANK_CARD_LIMIT cannot be resolved to a type
455:
456:         Also include
457:         <%
458:           for (int i = GameOptions.MIN_BLANK_CARD_LIMIT; i <= GameOptions.MAX_BLANK_CARD_LIMIT; i++) {
459:         %>
460:           <option <%= i == GameOptions.DEFAULT_BLANK_CARD_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
461:         <% } %>
An error occurred at line: 460 in the jsp file: /WebContent/game.jsp
GameOptions.DEFAULT_BLANK_CARD_LIMIT cannot be resolved to a type
457:         <%
458:           for (int i = GameOptions.MIN_BLANK_CARD_LIMIT; i <= GameOptions.MAX_BLANK_CARD_LIMIT; i++) {
459:         %>
460:           <option <%= i == GameOptions.DEFAULT_BLANK_CARD_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
461:         <% } %>
462:          blank white cards.
463:
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:366)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:485)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:379)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:354)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:341)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:657)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:395)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:339)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.56 logs.

Having the same issue. looks like it's trying to import something (first error?) "Only a type can be imported. net.socialgamer.cah.data.GameOptions resolves to a package"

Something sounds wrong in your setup.  If you export a WAR file and then install that, then you should be browsing to http://ip:port/cah/, which will then take you to http://ip:port/cah/game.jsp once you click through the initial page.  In particular WebContent should not be a path that exists on a live server, IIRC.
I've had CAH running quite happily on (probably an older version of) Tomcat 7 for quite a while, although admittedly I haven't updated my copy in a few months.

hrmm i might go back to an earlier version, and see what happens how do i do the WAR? there aint that great of documentation for this, im a php dude lol

I fixed my problem with cleaning the workspace, building the maven project
first (maven package) and building it again.
On Wed, Mar 4, 2015 at 3:44 AM, dualznz<EMAIL_ADDRESS>wrote:

hrmm i might go back to an earlier version, and see what happens how do i
do the WAR? there aint that great of documentation for this, im a php dude
lol
—
Reply to this email directly or view it on GitHub
https://github.com/ajanata/PretendYoureXyzzy/issues/140#issuecomment-77087383
.

ahh kk how do u build the maven project

ok so i imported it into eclipse, then exported WAR, even created a tomcat server within eclipse and i still get this error thopwn at me

I had a similar problem with Eclipse marking those errors in the jsp files. I believe I fixed that by updating the build path. I don't know why Tomcat would be having a problem.
At this point, you're probably better off using Maven to make the war: mvn clean package war:war
If that has similar problems I can try to take a look at it, but I am about to go on vacation, followed by a busy month of other things. It definitely is working in Tomcat for me, making the war in the manner described: that is how my servers are running.

ok, im going to try it in debian to see if it makes any difference, its annoying though

Are you using eclipse: http://books.sonatype.com/m2eclipse-book/reference/running-sect-running-maven-builds.html
Then just export -> EE -> WAR file and it should export ok.

I have the same problem with Eclipse...
I tried to compile with maven, but Tomcat doesn't start anymore :
FAIL - Application at context path /cah could not be started

yup im getting that exact same issue with tomcat Fail to start..

Are you using the latest Tomcat7 version?

I think I am. I use the tomcat7 of debian repo.

Last time I checked the tomcat on ubuntu was outdated and also didn't launch. I had to manually download the latest version. It may be the same on debian

I will try to compile the last version of tomcat7 this week-end.

ok so i have it all figured out about getting it setup, tired like 10 times on different machines and OS BUT there is an issue in the jsp file game.jsp cant find the resource GAMEOPTIONS. so not sure whats going on there.

now let eclipse build the war using 'export' and it should work (WEB-INF should contain the files)

well i got it all working with no isses in the end just took much longer than i thought, im gonna work on a visual upgrade to this great resource, going to introduce bootstrap into the interface, spice it up abit.
thanks for all ya helps

Please close the issue if it has been fixed :smile:, And good luck with the upgrade!

How did you fix this? , as I can't clearly see how you have fixed it? as im having the same issue after i get past the agree page I get unable to compile class for jsp
this is what I get :
HTTP Status 500 - Unable to compile class for JSP: An error occurred at line: 15 in the generated java file Only a type can be imported. net.socialgamer.cah.data.GameOptions resolves to a package An error occurred at line: 413 in the jsp file: /game.jsp GameOptions.MIN_SCORE_LIMIT cannot be resolved to a type 410: Score limit: 411:  412: <% 413: for (int i = GameOptions.MIN_SCORE_LIMIT; i <= GameOptions.MAX_SCORE_LIMIT; i++) { 414: %> 415: <option <%= i == GameOptions.DEFAULT_SCORE_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 416: <% } %> An error occurred at line: 413 in the jsp file: /game.jsp GameOptions.MAX_SCORE_LIMIT cannot be resolved to a type 410: Score limit: 411:  412: <% 413: for (int i = GameOptions.MIN_SCORE_LIMIT; i <= GameOptions.MAX_SCORE_LIMIT; i++) { 414: %> 415: <option <%= i == GameOptions.DEFAULT_SCORE_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 416: <% } %> An error occurred at line: 415 in the jsp file: /game.jsp GameOptions.DEFAULT_SCORE_LIMIT cannot be resolved to a type 412: <% 413: for (int i = GameOptions.MIN_SCORE_LIMIT; i <= GameOptions.MAX_SCORE_LIMIT; i++) { 414: %> 415: <option <%= i == GameOptions.DEFAULT_SCORE_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 416: <% } %> 417:  418:  An error occurred at line: 423 in the jsp file: /game.jsp GameOptions.MIN_PLAYER_LIMIT cannot be resolved to a type 420: <select id="player_limit_template" class="player_limit" 421: aria-label="Player limit. Having more than 10 players may cause issues both for screen readers and traditional browsers."> 422: <% 423: for (int i = GameOptions.MIN_PLAYER_LIMIT; i <= GameOptions.MAX_PLAYER_LIMIT; i++) { 424: %> 425: <option <%= i == GameOptions.DEFAULT_PLAYER_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 426: <% } %> An error occurred at line: 423 in the jsp file: /game.jsp GameOptions.MAX_PLAYER_LIMIT cannot be resolved to a type 420: <select id="player_limit_template" class="player_limit" 421: aria-label="Player limit. Having more than 10 players may cause issues both for screen readers and traditional browsers."> 422: <% 423: for (int i = GameOptions.MIN_PLAYER_LIMIT; i <= GameOptions.MAX_PLAYER_LIMIT; i++) { 424: %> 425: <option <%= i == GameOptions.DEFAULT_PLAYER_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 426: <% } %> An error occurred at line: 425 in the jsp file: /game.jsp GameOptions.DEFAULT_PLAYER_LIMIT cannot be resolved to a type 422: <% 423: for (int i = GameOptions.MIN_PLAYER_LIMIT; i <= GameOptions.MAX_PLAYER_LIMIT; i++) { 424: %> 425: <option <%= i == GameOptions.DEFAULT_PLAYER_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 426: <% } %> 427:  428: Having more than 10 players may get cramped! An error occurred at line: 434 in the jsp file: /game.jsp GameOptions.MIN_SPECTATOR_LIMIT cannot be resolved to a type 431: <select id="spectator_limit_template" class="spectator_limit" 432: aria-label="Spectator limit."> 433: <% 434: for (int i = GameOptions.MIN_SPECTATOR_LIMIT; i <= GameOptions.MAX_SPECTATOR_LIMIT; i++) { 435: %> 436: <option <%= i == GameOptions.DEFAULT_SPECTATOR_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 437: <% } %> An error occurred at line: 434 in the jsp file: /game.jsp GameOptions.MAX_SPECTATOR_LIMIT cannot be resolved to a type 431: <select id="spectator_limit_template" class="spectator_limit" 432: aria-label="Spectator limit."> 433: <% 434: for (int i = GameOptions.MIN_SPECTATOR_LIMIT; i <= GameOptions.MAX_SPECTATOR_LIMIT; i++) { 435: %> 436: <option <%= i == GameOptions.DEFAULT_SPECTATOR_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 437: <% } %> An error occurred at line: 436 in the jsp file: /game.jsp GameOptions.DEFAULT_SPECTATOR_LIMIT cannot be resolved to a type 433: <% 434: for (int i = GameOptions.MIN_SPECTATOR_LIMIT; i <= GameOptions.MAX_SPECTATOR_LIMIT; i++) { 435: %> 436: <option <%= i == GameOptions.DEFAULT_SPECTATOR_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 437: <% } %> 438:  439: Spectators can watch and chat, but not actually play. Not even as Czar. An error occurred at line: 458 in the jsp file: /game.jsp GameOptions.MIN_BLANK_CARD_LIMIT cannot be resolved to a type 455:  456: Also include  457: <% 458: for (int i = GameOptions.MIN_BLANK_CARD_LIMIT; i <= GameOptions.MAX_BLANK_CARD_LIMIT; i++) { 459: %> 460: <option <%= i == GameOptions.DEFAULT_BLANK_CARD_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 461: <% } %> An error occurred at line: 458 in the jsp file: /game.jsp GameOptions.MAX_BLANK_CARD_LIMIT cannot be resolved to a type 455:  456: Also include  457: <% 458: for (int i = GameOptions.MIN_BLANK_CARD_LIMIT; i <= GameOptions.MAX_BLANK_CARD_LIMIT; i++) { 459: %> 460: <option <%= i == GameOptions.DEFAULT_BLANK_CARD_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 461: <% } %> An error occurred at line: 460 in the jsp file: /game.jsp GameOptions.DEFAULT_BLANK_CARD_LIMIT cannot be resolved to a type 457: <% 458: for (int i = GameOptions.MIN_BLANK_CARD_LIMIT; i <= GameOptions.MAX_BLANK_CARD_LIMIT; i++) { 459: %> 460: <option <%= i == GameOptions.DEFAULT_BLANK_CARD_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 461: <% } %> 462:  blank white cards. 463:  Stacktrace:
type Exception report
message Unable to compile class for JSP: An error occurred at line: 15 in the generated java file Only a type can be imported. net.socialgamer.cah.data.GameOptions resolves to a package An error occurred at line: 413 in the jsp file: /game.jsp GameOptions.MIN_SCORE_LIMIT cannot be resolved to a type 410: Score limit: 411:  412: <% 413: for (int i = GameOptions.MIN_SCORE_LIMIT; i <= GameOptions.MAX_SCORE_LIMIT; i++) { 414: %> 415: <option <%= i == GameOptions.DEFAULT_SCORE_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 416: <% } %> An error occurred at line: 413 in the jsp file: /game.jsp GameOptions.MAX_SCORE_LIMIT cannot be resolved to a type 410: Score limit: 411:  412: <% 413: for (int i = GameOptions.MIN_SCORE_LIMIT; i <= GameOptions.MAX_SCORE_LIMIT; i++) { 414: %> 415: <option <%= i == GameOptions.DEFAULT_SCORE_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 416: <% } %> An error occurred at line: 415 in the jsp file: /game.jsp GameOptions.DEFAULT_SCORE_LIMIT cannot be resolved to a type 412: <% 413: for (int i = GameOptions.MIN_SCORE_LIMIT; i <= GameOptions.MAX_SCORE_LIMIT; i++) { 414: %> 415: <option <%= i == GameOptions.DEFAULT_SCORE_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 416: <% } %> 417:  418:  An error occurred at line: 423 in the jsp file: /game.jsp GameOptions.MIN_PLAYER_LIMIT cannot be resolved to a type 420: <select id="player_limit_template" class="player_limit" 421: aria-label="Player limit. Having more than 10 players may cause issues both for screen readers and traditional browsers."> 422: <% 423: for (int i = GameOptions.MIN_PLAYER_LIMIT; i <= GameOptions.MAX_PLAYER_LIMIT; i++) { 424: %> 425: <option <%= i == GameOptions.DEFAULT_PLAYER_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 426: <% } %> An error occurred at line: 423 in the jsp file: /game.jsp GameOptions.MAX_PLAYER_LIMIT cannot be resolved to a type 420: <select id="player_limit_template" class="player_limit" 421: aria-label="Player limit. Having more than 10 players may cause issues both for screen readers and traditional browsers."> 422: <% 423: for (int i = GameOptions.MIN_PLAYER_LIMIT; i <= GameOptions.MAX_PLAYER_LIMIT; i++) { 424: %> 425: <option <%= i == GameOptions.DEFAULT_PLAYER_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 426: <% } %> An error occurred at line: 425 in the jsp file: /game.jsp GameOptions.DEFAULT_PLAYER_LIMIT cannot be resolved to a type 422: <% 423: for (int i = GameOptions.MIN_PLAYER_LIMIT; i <= GameOptions.MAX_PLAYER_LIMIT; i++) { 424: %> 425: <option <%= i == GameOptions.DEFAULT_PLAYER_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 426: <% } %> 427:  428: Having more than 10 players may get cramped! An error occurred at line: 434 in the jsp file: /game.jsp GameOptions.MIN_SPECTATOR_LIMIT cannot be resolved to a type 431: <select id="spectator_limit_template" class="spectator_limit" 432: aria-label="Spectator limit."> 433: <% 434: for (int i = GameOptions.MIN_SPECTATOR_LIMIT; i <= GameOptions.MAX_SPECTATOR_LIMIT; i++) { 435: %> 436: <option <%= i == GameOptions.DEFAULT_SPECTATOR_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 437: <% } %> An error occurred at line: 434 in the jsp file: /game.jsp GameOptions.MAX_SPECTATOR_LIMIT cannot be resolved to a type 431: <select id="spectator_limit_template" class="spectator_limit" 432: aria-label="Spectator limit."> 433: <% 434: for (int i = GameOptions.MIN_SPECTATOR_LIMIT; i <= GameOptions.MAX_SPECTATOR_LIMIT; i++) { 435: %> 436: <option <%= i == GameOptions.DEFAULT_SPECTATOR_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 437: <% } %> An error occurred at line: 436 in the jsp file: /game.jsp GameOptions.DEFAULT_SPECTATOR_LIMIT cannot be resolved to a type 433: <% 434: for (int i = GameOptions.MIN_SPECTATOR_LIMIT; i <= GameOptions.MAX_SPECTATOR_LIMIT; i++) { 435: %> 436: <option <%= i == GameOptions.DEFAULT_SPECTATOR_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 437: <% } %> 438:  439: Spectators can watch and chat, but not actually play. Not even as Czar. An error occurred at line: 458 in the jsp file: /game.jsp GameOptions.MIN_BLANK_CARD_LIMIT cannot be resolved to a type 455:  456: Also include  457: <% 458: for (int i = GameOptions.MIN_BLANK_CARD_LIMIT; i <= GameOptions.MAX_BLANK_CARD_LIMIT; i++) { 459: %> 460: <option <%= i == GameOptions.DEFAULT_BLANK_CARD_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 461: <% } %> An error occurred at line: 458 in the jsp file: /game.jsp GameOptions.MAX_BLANK_CARD_LIMIT cannot be resolved to a type 455:  456: Also include  457: <% 458: for (int i = GameOptions.MIN_BLANK_CARD_LIMIT; i <= GameOptions.MAX_BLANK_CARD_LIMIT; i++) { 459: %> 460: <option <%= i == GameOptions.DEFAULT_BLANK_CARD_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 461: <% } %> An error occurred at line: 460 in the jsp file: /game.jsp GameOptions.DEFAULT_BLANK_CARD_LIMIT cannot be resolved to a type 457: <% 458: for (int i = GameOptions.MIN_BLANK_CARD_LIMIT; i <= GameOptions.MAX_BLANK_CARD_LIMIT; i++) { 459: %> 460: <option <%= i == GameOptions.DEFAULT_BLANK_CARD_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 461: <% } %> 462:  blank white cards. 463:  Stacktrace:
description The server encountered an internal error (Unable to compile class for JSP: An error occurred at line: 15 in the generated java file Only a type can be imported. net.socialgamer.cah.data.GameOptions resolves to a package An error occurred at line: 413 in the jsp file: /game.jsp GameOptions.MIN_SCORE_LIMIT cannot be resolved to a type 410: Score limit: 411:  412: <% 413: for (int i = GameOptions.MIN_SCORE_LIMIT; i <= GameOptions.MAX_SCORE_LIMIT; i++) { 414: %> 415: <option <%= i == GameOptions.DEFAULT_SCORE_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 416: <% } %> An error occurred at line: 413 in the jsp file: /game.jsp GameOptions.MAX_SCORE_LIMIT cannot be resolved to a type 410: Score limit: 411:  412: <% 413: for (int i = GameOptions.MIN_SCORE_LIMIT; i <= GameOptions.MAX_SCORE_LIMIT; i++) { 414: %> 415: <option <%= i == GameOptions.DEFAULT_SCORE_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 416: <% } %> An error occurred at line: 415 in the jsp file: /game.jsp GameOptions.DEFAULT_SCORE_LIMIT cannot be resolved to a type 412: <% 413: for (int i = GameOptions.MIN_SCORE_LIMIT; i <= GameOptions.MAX_SCORE_LIMIT; i++) { 414: %> 415: <option <%= i == GameOptions.DEFAULT_SCORE_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 416: <% } %> 417:  418:  An error occurred at line: 423 in the jsp file: /game.jsp GameOptions.MIN_PLAYER_LIMIT cannot be resolved to a type 420: <select id="player_limit_template" class="player_limit" 421: aria-label="Player limit. Having more than 10 players may cause issues both for screen readers and traditional browsers."> 422: <% 423: for (int i = GameOptions.MIN_PLAYER_LIMIT; i <= GameOptions.MAX_PLAYER_LIMIT; i++) { 424: %> 425: <option <%= i == GameOptions.DEFAULT_PLAYER_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 426: <% } %> An error occurred at line: 423 in the jsp file: /game.jsp GameOptions.MAX_PLAYER_LIMIT cannot be resolved to a type 420: <select id="player_limit_template" class="player_limit" 421: aria-label="Player limit. Having more than 10 players may cause issues both for screen readers and traditional browsers."> 422: <% 423: for (int i = GameOptions.MIN_PLAYER_LIMIT; i <= GameOptions.MAX_PLAYER_LIMIT; i++) { 424: %> 425: <option <%= i == GameOptions.DEFAULT_PLAYER_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 426: <% } %> An error occurred at line: 425 in the jsp file: /game.jsp GameOptions.DEFAULT_PLAYER_LIMIT cannot be resolved to a type 422: <% 423: for (int i = GameOptions.MIN_PLAYER_LIMIT; i <= GameOptions.MAX_PLAYER_LIMIT; i++) { 424: %> 425: <option <%= i == GameOptions.DEFAULT_PLAYER_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 426: <% } %> 427:  428: Having more than 10 players may get cramped! An error occurred at line: 434 in the jsp file: /game.jsp GameOptions.MIN_SPECTATOR_LIMIT cannot be resolved to a type 431: <select id="spectator_limit_template" class="spectator_limit" 432: aria-label="Spectator limit."> 433: <% 434: for (int i = GameOptions.MIN_SPECTATOR_LIMIT; i <= GameOptions.MAX_SPECTATOR_LIMIT; i++) { 435: %> 436: <option <%= i == GameOptions.DEFAULT_SPECTATOR_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 437: <% } %> An error occurred at line: 434 in the jsp file: /game.jsp GameOptions.MAX_SPECTATOR_LIMIT cannot be resolved to a type 431: <select id="spectator_limit_template" class="spectator_limit" 432: aria-label="Spectator limit."> 433: <% 434: for (int i = GameOptions.MIN_SPECTATOR_LIMIT; i <= GameOptions.MAX_SPECTATOR_LIMIT; i++) { 435: %> 436: <option <%= i == GameOptions.DEFAULT_SPECTATOR_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 437: <% } %> An error occurred at line: 436 in the jsp file: /game.jsp GameOptions.DEFAULT_SPECTATOR_LIMIT cannot be resolved to a type 433: <% 434: for (int i = GameOptions.MIN_SPECTATOR_LIMIT; i <= GameOptions.MAX_SPECTATOR_LIMIT; i++) { 435: %> 436: <option <%= i == GameOptions.DEFAULT_SPECTATOR_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 437: <% } %> 438:  439: Spectators can watch and chat, but not actually play. Not even as Czar. An error occurred at line: 458 in the jsp file: /game.jsp GameOptions.MIN_BLANK_CARD_LIMIT cannot be resolved to a type 455:  456: Also include  457: <% 458: for (int i = GameOptions.MIN_BLANK_CARD_LIMIT; i <= GameOptions.MAX_BLANK_CARD_LIMIT; i++) { 459: %> 460: <option <%= i == GameOptions.DEFAULT_BLANK_CARD_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 461: <% } %> An error occurred at line: 458 in the jsp file: /game.jsp GameOptions.MAX_BLANK_CARD_LIMIT cannot be resolved to a type 455:  456: Also include  457: <% 458: for (int i = GameOptions.MIN_BLANK_CARD_LIMIT; i <= GameOptions.MAX_BLANK_CARD_LIMIT; i++) { 459: %> 460: <option <%= i == GameOptions.DEFAULT_BLANK_CARD_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 461: <% } %> An error occurred at line: 460 in the jsp file: /game.jsp GameOptions.DEFAULT_BLANK_CARD_LIMIT cannot be resolved to a type 457: <% 458: for (int i = GameOptions.MIN_BLANK_CARD_LIMIT; i <= GameOptions.MAX_BLANK_CARD_LIMIT; i++) { 459: %> 460: <option <%= i == GameOptions.DEFAULT_BLANK_CARD_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %> 461: <% } %> 462:  blank white cards. 463:  Stacktrace:) that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: 15 in the generated java file
Only a type can be imported. net.socialgamer.cah.data.GameOptions resolves to a package
An error occurred at line: 413 in the jsp file: /game.jsp
GameOptions.MIN_SCORE_LIMIT cannot be resolved to a type
410:       Score limit:
411:
412:         <%
413:           for (int i = GameOptions.MIN_SCORE_LIMIT; i <= GameOptions.MAX_SCORE_LIMIT; i++) {
414:         %>
415:           <option <%= i == GameOptions.DEFAULT_SCORE_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
416:         <% } %>
An error occurred at line: 413 in the jsp file: /game.jsp
GameOptions.MAX_SCORE_LIMIT cannot be resolved to a type
410:       Score limit:
411:
412:         <%
413:           for (int i = GameOptions.MIN_SCORE_LIMIT; i <= GameOptions.MAX_SCORE_LIMIT; i++) {
414:         %>
415:           <option <%= i == GameOptions.DEFAULT_SCORE_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
416:         <% } %>
An error occurred at line: 415 in the jsp file: /game.jsp
GameOptions.DEFAULT_SCORE_LIMIT cannot be resolved to a type
412:         <%
413:           for (int i = GameOptions.MIN_SCORE_LIMIT; i <= GameOptions.MAX_SCORE_LIMIT; i++) {
414:         %>
415:           <option <%= i == GameOptions.DEFAULT_SCORE_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
416:         <% } %>
417:
418:
An error occurred at line: 423 in the jsp file: /game.jsp
GameOptions.MIN_PLAYER_LIMIT cannot be resolved to a type
420:       <select id="player_limit_template" class="player_limit"
421:           aria-label="Player limit. Having more than 10 players may cause issues both for screen readers and traditional browsers.">
422:         <%
423:           for (int i = GameOptions.MIN_PLAYER_LIMIT; i <= GameOptions.MAX_PLAYER_LIMIT; i++) {
424:         %>
425:           <option <%= i == GameOptions.DEFAULT_PLAYER_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
426:         <% } %>
An error occurred at line: 423 in the jsp file: /game.jsp
GameOptions.MAX_PLAYER_LIMIT cannot be resolved to a type
420:       <select id="player_limit_template" class="player_limit"
421:           aria-label="Player limit. Having more than 10 players may cause issues both for screen readers and traditional browsers.">
422:         <%
423:           for (int i = GameOptions.MIN_PLAYER_LIMIT; i <= GameOptions.MAX_PLAYER_LIMIT; i++) {
424:         %>
425:           <option <%= i == GameOptions.DEFAULT_PLAYER_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
426:         <% } %>
An error occurred at line: 425 in the jsp file: /game.jsp
GameOptions.DEFAULT_PLAYER_LIMIT cannot be resolved to a type
422:         <%
423:           for (int i = GameOptions.MIN_PLAYER_LIMIT; i <= GameOptions.MAX_PLAYER_LIMIT; i++) {
424:         %>
425:           <option <%= i == GameOptions.DEFAULT_PLAYER_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
426:         <% } %>
427:
428:       Having more than 10 players may get cramped!
An error occurred at line: 434 in the jsp file: /game.jsp
GameOptions.MIN_SPECTATOR_LIMIT cannot be resolved to a type
431:       <select id="spectator_limit_template" class="spectator_limit"
432:           aria-label="Spectator limit.">
433:         <%
434:           for (int i = GameOptions.MIN_SPECTATOR_LIMIT; i <= GameOptions.MAX_SPECTATOR_LIMIT; i++) {
435:         %>
436:           <option <%= i == GameOptions.DEFAULT_SPECTATOR_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
437:         <% } %>
An error occurred at line: 434 in the jsp file: /game.jsp
GameOptions.MAX_SPECTATOR_LIMIT cannot be resolved to a type
431:       <select id="spectator_limit_template" class="spectator_limit"
432:           aria-label="Spectator limit.">
433:         <%
434:           for (int i = GameOptions.MIN_SPECTATOR_LIMIT; i <= GameOptions.MAX_SPECTATOR_LIMIT; i++) {
435:         %>
436:           <option <%= i == GameOptions.DEFAULT_SPECTATOR_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
437:         <% } %>
An error occurred at line: 436 in the jsp file: /game.jsp
GameOptions.DEFAULT_SPECTATOR_LIMIT cannot be resolved to a type
433:         <%
434:           for (int i = GameOptions.MIN_SPECTATOR_LIMIT; i <= GameOptions.MAX_SPECTATOR_LIMIT; i++) {
435:         %>
436:           <option <%= i == GameOptions.DEFAULT_SPECTATOR_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
437:         <% } %>
438:
439:       Spectators can watch and chat, but not actually play. Not even as Czar.
An error occurred at line: 458 in the jsp file: /game.jsp
GameOptions.MIN_BLANK_CARD_LIMIT cannot be resolved to a type
455:
456:         Also include
457:         <%
458:           for (int i = GameOptions.MIN_BLANK_CARD_LIMIT; i <= GameOptions.MAX_BLANK_CARD_LIMIT; i++) {
459:         %>
460:           <option <%= i == GameOptions.DEFAULT_BLANK_CARD_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
461:         <% } %>
An error occurred at line: 458 in the jsp file: /game.jsp
GameOptions.MAX_BLANK_CARD_LIMIT cannot be resolved to a type
455:
456:         Also include
457:         <%
458:           for (int i = GameOptions.MIN_BLANK_CARD_LIMIT; i <= GameOptions.MAX_BLANK_CARD_LIMIT; i++) {
459:         %>
460:           <option <%= i == GameOptions.DEFAULT_BLANK_CARD_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
461:         <% } %>
An error occurred at line: 460 in the jsp file: /game.jsp
GameOptions.DEFAULT_BLANK_CARD_LIMIT cannot be resolved to a type
457:         <%
458:           for (int i = GameOptions.MIN_BLANK_CARD_LIMIT; i <= GameOptions.MAX_BLANK_CARD_LIMIT; i++) {
459:         %>
460:           <option <%= i == GameOptions.DEFAULT_BLANK_CARD_LIMIT ? "selected='selected' " : "" %>value="<%= i %>"><%= i %>
461:         <% } %>
462:          blank white cards.
463:
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:331)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:469)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:378)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:646)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.28 logs.
Apache Tomcat/7.0.28

Compile with maven and it should work (mvn package war)

Look im a real noob in this area so what do i open in Eclipse to change to Maven and how do i get Maven to work?


CB-22304, remove Ranger Admin instance from, EDL bluprint. We stil ha…

…ve two RangerAdmin instance on the Master nodes
See detailed description in the commit message.

Why is this needed for 2.72?

I don't think we are going to do a hotfix just for this.


pull request for e2e test at 12/13/2016 19:26:03

:white_check_mark: Validation status: passed
For more details, please refer to the build report.
Note: If you changed an existing file name or deleted a file, broken links in other files to the deleted or renamed file are listed only in the full build report.


Update curator/admin status from the API

Is your feature request related to a problem? Please describe.
Currently need to edit the DB to set curator and admin. This is not good.
Describe the solution you'd like
New API endpoints that do the following:

Curators can use the API to add curators
Admins can use the API to add curators or admins

┆Issue is synchronized with this Jira Story
┆Issue Type: Story
┆Fix Versions: Dockstore 2.X
┆Sprint: Sprint 40 Octopus
┆Issue Number: DOCK-1425
┆Epic: Organization Improvements

Verified on dev as of API - 1.10.0-alpha.0-SNAPSHOT

Curators can use the API to add curators (but not admins)
Admins can use the API to add curators or admins
could not edit own permissions


Where is the contract code for factoryaddress? thank you

https://blockscout.com/xdai/mainnet/address/0xC2d5A532cf69AA9A1378737D8ccDEF884B6E7420/contracts
Factoryaddress I can't find the contract code for factory. Can you tell me where to find it?

Maybe somewhere in https://github.com/ethersphere/swap-swear-and-swindle

You can find the factory address in https://github.com/ethersphere/bee/blob/master/pkg/config/chain.go.

Duplicate #2381


Failure when no stations available

Singularity workflow fails when no COOPS stations are found in the 34kt windswath. This happens in the case of marco 2020
Thanks to @FariborzDaneshvar-NOAA for pointing this out.

Yes, I will close it. Thanks


Unexpected input(s) 'commit'

I'm running v1.6 and provided a git sha as shown in the README.
However, I get the following warning:
Warning: Unexpected input(s) 'commit', valid inputs are ['entryPoint', 'args', 'github_token', 'check_name', 'files', 'report_individual_runs', 'deduplicate_classes_by_file_name', 'hide_comments', 'comment_on_pr', 'log_level']

Right, commit is an "undocumented" argument (though it is in the README). This is just a warning in the logs.
What is your use-case, maybe it is worth "documenting" it in the actions.yml.

Ah, gotcha.
Well for use case I'm using slash command dispatch to dispatch some jest tests. The comment is made on the PR (you would actually comment /test on the PR), and want to report the results of the test. Since the test command is technically launched from a repository_dispatch, there's no reference to the PR I want to comment on. I got around this by adding the git sha (of the HEAD of the PR branch) to the commit argument so that way this publish package knew where to publish the reports.
This is the result:

I would be happy to post a simple example YAML of my workflow if that helps illustrate my example more.

Very interesting use-case, please add an example YAML file to see how this all wires together (especially the commit sha).

File that runs the jest tests:
name: Run jest tests

on:
  repository_dispatch:
    types: [e2e-command]

jobs:
  test_local:
    needs: build_local
    runs-on: ubuntu-latest
    steps:
    # repository_dispatch doesn't have the correct $GITHUB_REF so we need to provide it
    # first, get the name of the branch from the PR
    - name: Github API Request
      if: github.event_name == 'repository_dispatch'
      id: request
      uses<EMAIL_ADDRESS>      with:
        route: ${{ github.event.client_payload.github.payload.issue.pull_request.url }}
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

    # then, check it out
    - uses: actions/checkout@v2
      with:
        ref: ${{ fromJson(steps.request.outputs.data).head.ref }}

    - name: Set up Node.js v13
      uses: actions/setup-node@v1
      with:
        node-version: '13.x'
    - name: Node install dependencies
      uses: bahmutov/npm-install@v1

    - name: Run tests
      run: |
        npm run serve &
        npm test ${{ github.event.client_payload.slash_command.args.unnamed.all }}

    - name: Publish test results
      uses<EMAIL_ADDRESS>      if: github.event_name == 'repository_dispatch'
      with:
        github_token: ${{ secrets.GITHUB_TOKEN }}
        files: test/results/*.xml
        report_individual_runs: true
        commit: ${{ fromJson(steps.request.outputs.data).head.sha }}

Dispatch file:
name: Slash Command Dispatch
on:
  issue_comment:
    types: [created]
jobs:
  slashCommandDispatch:
    runs-on: ubuntu-latest
    steps:
      - name: Slash Command Dispatch
        uses: peter-evans/slash-command-dispatch@v2
        with:
          token: ${{ secrets.PAT }}
          commands: |
            e2e

Then, in a PR, you can comment /e2e xxx to run npm test xxx.

@RyanSchw any chance to test the action from this branch?

I lost access to the repo that was running that CICD pipeline. I think the warning went away when it ran, though. Sorry I can’t be more helpful.

Thanks for insights, fix is merged!

can I get reports in comment for a workflow_dispatch event? I've also mentioned the commit parameter as head SHA of PR? Should I mentioning it as head of workflow event?


Documentation: The Code examples could use some comments

Just saying that the code examples for expanding could use some more comments. Just to illustrate what exactly is going on.

Ok thank you, I'll add some comments!


Fix 509 : Guide.manual_color_key

Hi, I'm still getting this error. I'm using julia v0.3.1 and the latest gadfly on ijulia. Do I need a newer version of julia for this fix to work? Thanks Marc


Tool: refactor context/expand/implementation in point of traversaling typed defs

In point of traversaling typed defs, context/expand/implementation has duplicate code. This PR refactored it.
Another effect, we can look up context/implementation inside file private classes and defs now.

Thanks @MakeNowJust 🙇


Pass lighthouse audits

https://github.com/binyamin/binyam.in/blob/044d3ea7a201bfe2d67915ccdb0d0f354e8d2fd7/.lighthouserc.yml#L17-L22

fixed by 7560efdf3793c0bc6a164a59a29f6d05bb9d6388


Add Buildkite::Builder::Github.pull_request

Adds additional GitHub integration to retrieve  information on the pull request in question.
Reference: https://docs.github.com/en/rest/pulls/pulls#get-a-pull-request

Closing this as we are looking to make BKB source-control agnostic