add node-oracledb support

this look like working,could someone test?
thanks @KhalilTN

this look like working

These files must be created in the /src directory and compiled to generate /lib.

could someone test?

I don't know much about oracle or oracledb, so hopefully someone more knowledgable can weight in.

Hello,
any chance this getting merged ?

There are basically no other tests, but only schema building for this. Maybe you could still add test oracledb client to test/unit/query/builder.js and make sure that queries are generated correctly, especially in those cases where oracledb driver works differently from base implementation.

@elhigu done ! i'm writting and sql adapter for waterline using this code for oracle,all test passed except blob because oracledb driver has a curious way to insert blob... they plan to simplify it and i'll update my code then.

I think this looks fine (from a viewpoint not knowing anything about those dialects).
Only thing that is bothering me is that it looks mostly copy-paste of the old oracle client. There might be possibility to share codebase of the clients. e.g. websql is sqlite3 derivate so that could be used as an example.
However this is not breaking anything and I suppose it works... so it would be ok for me to merge this as is and do the refactoring later on :) @rhys-vdw  what do you think?

Hey @atiertant, thanks for the PR. It's challenging to review this PR because the changes are hidden in the duplicated code. Using inheritance here makes more sense than copy paste - not just for maintainability, but also for readability. The diff should show just the changes that pertain to OracleDB.
Ideally we'd do something like creating an AbstractOracleClient (supporting all the Oracle stuff) and then have each Oracle dialect inherit from this. Each inheriting Oracle dialect module should be quite thin and just override the sections pertaining to the API of its oracle module.
I understand the pressing need for this support - but I don't want to merge a PR containing wholesale duplication of files. There has to be clean up here before the merge. Do you think this will be possible, @atiertant?

@rhys-vdw hi, there is only one oracle database,and there were many drivers before oracle start writting their own driver for their database.
why would you like to maintain a dialect for an old and no more maintained driver (This library is not maintained. Oracle has made there own driver. see https://github.com/joeferner/node-oracle) ? i could move this changes directly in oracle dialect if you want... what do you think of it?

@atiertant strong-oracle is except for the initialization identical to the old oracle driver.

so this should be correct ...

Hey @atiertant, thanks for your patience.

why would you like to maintain a dialect for an old and no more maintained driver
I wasn't aware that the project was unmaintained until now - cheers. It's a good point.

i could move this changes directly in oracle dialect if you want... what do you think of it?

I would support using oracle as the client name for oracledb and renaming the unsupported driver to node-oracle - that way it seems more 'default'. But why remove the support? We have the module and there's no harm in keeping it (for now at least).

so this should be correct ...

Take a look. It inherits from the Oracle driver.
I can't see any benefit in introducing that much duplication into the database. It's a liability. It's not fair on future contributors to have to know to make fixes in two places - and it's more work for collaborators. (I'm not really sure what you've changed because it's just a huge copy+paste - but on my cursory reading it looked almost identical.)
I appreciate the work, but I can't merge it until it's DRY.

@rhys-vdw thanks for your review,
it's true that my first commit duplicated all dialect' code and that was not a good idea...
i removed all unnecessary duplicated code to make futur fixes at only one places.
of course the code staying is a copy paste of the original oracle with some little changes but
keep in mind all current oracle drivers are based on joeferner works and i woudn't like to reinvent the wheel but oracle made a lot of changes and api is now different.
this is the list of changes:

add bindOutString function to oracle and oracledb formatter dialect (oracledb binding params are differents)
Client_Oracledb.prototype._driver (driver is not the same)

the way to deal with connections is a bit different:

Client_Oracledb.prototype.acquireRawConnection
Client_Oracledb.prototype.destroyRawConnection

the results are returned into a different format:

Client_Oracledb.prototype._query

Client_Oracledb.prototype.processResponse

oracledb driver correct a bug in timestamp so we must use 'timestamp with local time zone' that affect time,datetime and timestamp of the ColumnCompiler.

now all this changes concert only the way the dialect deals with driver.

:+1:

@rhys-vdw does this arguments convince you or should i emulate old driver functions? please let me know the way you want to do it...

It seems great ! Good work @atiertant ! :+1:
Could someone merge it ?

We are anxious to use this in our project.  Is there any plan to merge this in?

Yep, will look to get this in later this week - thanks for your patience

lmk if you think you need more testing on this one. Count me in!

@atiertant Are you using this in your branch right now? Want me to use it too to help test? I wanted to use it so I could leverage knex transactions and Oracle :)

@mrchess yes we are using this branch, simple request are working, we didn't tryed transactions, i don't know if it's working... we are working on blob insertion.
it would be great to list every test you've done with the status (working or error encountered)

@squarejaw thanks for the review ! i use it only one time... i will remove it.

@atiertant could you also fix the conflicts? that way it will be easier to just merge this after the final review :)

Guys I really need this fast for a project. Is there a workaround to get it? Can I build it from a branch?

@serkanberksoy the strong-oracle dialect might still be an option for you.

@serkanberksoy if you want use oracle corporate driver, you could use https://github.com/Atlantis-Software/knex.git for now blob can't be insert or update, we are working on it...

now we can insert blob !
@squarejaw: async removed.
we are now working on update with blob.

@atiertant We are having an issue where we get this error: Cannot read property 'rowsAffected' of undefined when inserting rows into a table. On line 139 of lib/dialects/oracledb/index.js, if we change it using this patch, then the insert works for us:
--- a/lib/dialects/oracledb/index.js
+++ b/lib/dialects/oracledb/index.js
@@ -136,7 +136,7 @@
     return connection.executeAsync(obj.returningSql, rowIds);
   }).then(function (response) {
     obj.response = response.rows;
-    obj.rowsAffected = response.rows.rowsAffected;
+    obj.rowsAffected = response.rowsAffected;
     return obj;
   });
 };

@jrop thanks for your tests but this bug as already been corrected
please
git clone https://github.com/Atlantis-Software/knex.git
cd knex
npm install
npm run babel

before use to recompil

Hey, anyway I can help?

@lumberj yes you can test this branch and give us feedback.
@elhigu confilct solved, a travis job should be restart to pass (it's a mysql error)
now update and insert works with blob and returning !
next job transaction...

@atiertant this should work right?
npm install Atlantis-Software/knex

Pulled down this branch and ran npm install then npm link which should run build. I get this error at the end:
WARNING in ./~/oracledb/lib/oracledb.js
Module not found: Error: Cannot resolve 'file' or 'directory' ../build/Release/oracledb in /Users/alan/Projects/knex/node_modules/oracledb/lib
 @ ./~/oracledb/lib/oracledb.js 27:18-54

ERROR in ./~/oracledb/lib/oracledb.js
Module not found: Error: Cannot resolve 'file' or 'directory' ../build/Debug/oracledb in /Users/alan/Projects/knex/node_modules/oracledb/lib
 @ ./~/oracledb/lib/oracledb.js 30:19-53

Also tried running unit tests for github.com/interledger/five-bells-ledger with this branch. I didn't expect it to work, and it didn't:
Knex:warning - Can't take lock to run migrations: connection.setAutoCommit is not a function
Knex:warning - If you are sure migrations are not running you can release the lock manually by deleting all the rows from migrations lock table: migrations_lock

The remaining db tests fail.

Hi lumberj !
Your first error sounds like the build didn't work, try :
npm run babel
As for your second problem, it seems that you use transactions, which are not yet supported, but i'm working on it, it should be available soon.

@lumberj npm install Atlantis-Software/knex doesn't work.
you should use:
git clone https://github.com/Atlantis-Software/knex.git
cd knex
npm install
npm run babel

if you wouldn't like install git you could download master.zip then extract and :
cd knex
npm install
npm run babel

Hey @atiertant, sorry I've been unresponsive. I'm assuming the PR is still ready to be merged?

@rhys-vdw ,it's ok. yes this could be merged, now we only commit src to avoid conflicts but i suppose npm run babel is done before publish...
we are now working on transactions and optimising returning sql but this could be done in an other PR.

now all is working with transaction and lob.
@rhys-vdw this is now fully ready to merge, all file has been commit without any conflict.

Just tried running again with the latest changes. This error message starts streaming in the terminal:
Knex:warning - Pool2 - Error: ORA-00923: FROM keyword not found where expected

Running against:
https://github.com/interledger/five-bells-ledger

@lumberj you re right ! there was a bug on oracle dialect in tgriesser/knex master i rebased, in https://github.com/tgriesser/knex/pull/1296 that as been merged.
the pool ping function do SELECT 1 that should be change to SELECT 1 FROM DUAL, we fixed it at https://github.com/Atlantis-Software/knex/pull/7/commits/0da1c773a01db85fa9a609ef9265e6d564fc5896#diff-c8ff07bea2af41f7c0247b860dbd9d39L174
@elhigu could you restart the job in travis (one more time mysql error)

Tests passing for me now

That's so much for this @atiertant ! Quick question: I need to use fetchAsString for oracledb.DATE and oracledb.NUMBER, but is there a way to configure this? Right now, I'm adding:
oracledb.fetchAsString = [ oracledb.DATE, oracledb.NUMBER ]; to https://github.com/tgriesser/knex/pull/990/files#diff-a86ace7e0baa34caa6f981181dc544e2R32 and it works great

@AiNoKame knex return Date object for date and number for number ...maybe using fetchAsString is not the only way to do what you want. couldn't you use .toString() to data before use?
this code doesn't pass any options from config to driver, i don't know if other dialect do...
this is out of this PR scope, but you could propose a PR when this one has been merged.

@atiertant Sure thing! I just want to list some use cases for wanting to have the option to configure the use of fetchAsString for Date and Number as core functionality:
Date - Currently, node-oracledb only supports two Oracle Date datatypes: DATE and TIMESTAMP, both of which don't have a timezone (:scream:). If your oracle schema has columns of types TIMESTAMP WITH TIMEZONE or TIMESTAMP WITH LOCAL TIMEZONE, a node-oracldedb fetch with that column selected just fails with an unsupported datatype error (Error: select * from "db_schema_versions" order by "created_at" desc - NJS-010: unsupported data type in select list), so the only current workaround is using fetchAsString.
Number - Here's an issue that @lumberj posted at strong-oracle's github: https://github.com/strongloop/strong-oracle/issues/63. Databases that support values with 16+ significant digits, when fetched from the database as a Number causes a Javascript rounding error.
As for passing options from config to driver, I'm using connection.requestTimeout for mssql, so it can work :smile_cat: Although, I tried doing a const oracleDb = require('oracledb') and adding connection.fetchAsString = [ oracledb.DATE, oracledb.NUMBER ] to my oracle connection config, but it didn't work :cry:
(Sorry for the long post!)

@AiNoKame There is still the option to use the oracle cast function e.g. CAST(<COLNAME> as varchar2(<count>)) in the query to convert the unsupported/overflowing column to a string.

@AiNoKame it looks like all date are fetched as TIMESTAMP WITH LOCAL TIMEZONE, look at doc result-type-mapping.
for const oracleDb = require('oracledb'), i will look at mssql code...

Is this still in progress? I'm very interested :-)

@codyzu we are now testing this in our projects

@atiertant great! glad to hear it.
The failure on travis seems to be a timeout error (related to mysql). Do you think this will be merged into the master (and installable with npm) any time soon???
Do you need help?

@codyzu we need some time to test transactions but all other features are working.

@atiertant When you're ready, please rebase your changes and remove /lib etc? We no longer track the built files.

@rhys-vdw do you mean git rm /lib ?

@rhys-vdw @atiertant Sorry to be a pain, but I really want to use this in our project. Any news? Do you need some help?
As mentioned in the comments above, we can't install directly with npm due to the babel compile... I'm thinking of cloning the entire branch, and either adding a postinstall script to package.json to do the babel compile or checking in the compiled sources. This would allow my project to use the branch as is (by pointing npm to my repo). Good idea? Of course, I would rather see this PR merged... so don't hesitate to ask if you need help!

I believe the way to do this is to only check in the uncompiled sources to
git, and then add a prepublish hook to package.json that compiles the
sources and only publishes the result to npm.  But build artifacts should
generally not be checked in to source control.
On May 27, 2016 4:12 AM, "Cody Zuschlag"<EMAIL_ADDRESS>wrote:

@rhys-vdw https://github.com/rhys-vdw @atiertant
https://github.com/atiertant Sorry to be a pain, but I really want to
use this in our project. Any news? Do you need some help?
As mentioned in the comments above, we can't install directly with npm due
to the babel compile... I'm thinking of cloning the entire branch, and
either adding a postinstall script to package.json to do the babel compile
or checking in the compiled sources. This would allow my project to use the
branch as is (by pointing npm to my repo). Good idea? Of course, I would
rather see this PR merged... so don't hesitate to ask if you need help!
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/tgriesser/knex/pull/990#issuecomment-222098937, or mute
the thread
https://github.com/notifications/unsubscribe/ABVslY2lf6PkpN_1SR5mZq4kU1JGwNxyks5qFrWVgaJpZM4GBijT
.

@codyzu we are working on transactions and internal tests, we hope finnish it next week.
the problem in installation with node-oracledb could be solved by installing node-oracledb in global mode : npm install -g oracledb or install it after knex. you could clone our branch to start your dev but i think it it would be better to wait merge in knex for production environment.

@atiertant first of all , tanks for you hard work on this feature.
do you need help to finish the PR?

@rhys-vdw ready to merge !

Awesome. A lot of people excited about this. I'm still a bit intimidated by the support issue with the duplication, but I'm happy to put that aside in the interest of getting this popular feature merged.
So I've just checked out this branch and it's hitting over 100 linter errors. We need 0 errors, 0 warnings before merging. I used esnext, but it's mostly replacement of var with let/const as appropriate so it might be fine to do it by hand.
Then this branch should be rebased onto master.
I have no access to Oracle, but thanks to @williamgueiros in #1491, we should have the ability to test on Travis. So we can pull in his PR and see those tests run live.
So, steps in summary (anybody is able to do this btw, not just @atiertant):

Create a new PR with a single (or at least fewer) commits rebased onto current master HEAD.
Correct for linter warnings.
Merge in williamgueiros/knex#1
Ensure tests run successfully
Merge

PS. If somebody is planning to tackle the above task - please make sure to comment here first to avoid double handling.

I'd be happy to clean up the linter errors if someone else isn't already
doing so.
On Tuesday, June 14, 2016, Rhys van der Waerden<EMAIL_ADDRESS>wrote:

PS. If somebody is planning to tackle the above task - please make sure to
comment here first to avoid double handling.
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/tgriesser/knex/pull/990#issuecomment-225843640, or mute
the thread
https://github.com/notifications/unsubscribe/ACGSZkW2mLmvOhPqkY7q2am8AWhTQz3Mks5qLoRMgaJpZM4GBijT
.

@ramirezd42 Great. I think we can safely assume that nobody is doing it at this stage. Perhaps just fork from atiertant's branch and merge in master from knex. We can sort out squashing etc later.

I fixed all of the linter issues in a PR to @atiertant 's fork here: https://github.com/Atlantis-Software/knex/pull/11.
I can make a separate PR if necessary, but it seemed easier to just wait for @atiertant to accept changes into that PR to keep the conversation in this thread.
All of the tests pass except for one mariadb test which didn't pass for me on tgriesser/knex master either so I can't imagine it was related:
1) Integration Tests mariadb | mariasql "before all" hook:      Error: Pool is destroyed       at Pool.acquire (node_modules/pool2/lib/pool.js:166:12)       at ../src/client.js:2:32       at Client.acquireConnection (../src/client.js:2:32)       at ../src/runner.js:1:41   From previous event:       at ../src/runner.js:1:41   From previous event:       at Runner.ensureConnection (../src/runner.js:1:41)       at Runner.run (../src/runner.js:1:41)       at SchemaBuilder.Target.then (../src/interface.js:2:20)       at Migrator.forceFreeMigrationsLock (lib/migrate/index.js:9:6636)       at Context.<anonymous> (test/integration/migrate/index.js:15:25)

I fixed all of the linter issues in a PR to @atiertant 's fork

Excellent. Nice one.

All of the tests pass except for one mariadb test which didn't pass for me on tgriesser/knex master either so I can't imagine it was related

All good. I think that test will pass if we keep re-running the tests. (That's a problem, but not related to this PR).
We're at a point now where I could just pull all this stuff in manually and merge in the CI test branch. But I'll give @atiertant a chance to respond to your PR first.

@rhys-vdw so what's next? whould you like to merge in the CI test branch?

Hey @atiertant. I want to get #1503 sorted so we know everything's functioning as expected. Hopefully we'll have an elegant solution for testing Oracle soon.

Merged this branch as were discussed on contributor chat... If there are issues to be fixed in tests when oracle CI is setup those will be fixed as part of CI enabling pull request. Thanks @atiertant and everyone else 👍

Hi for all
i ask if there is an exemple connecting to knex with oracledb.
doesn t work for me
thanks

Any idea when the next release that will include this will be? Would like to use knex for Oracle, but can't until this is released.

@mrodrig Looks like we can still do minor release 0.11.8 to release this. I skimmed through latest merges and there didn't seem to be incompatible changes, except bug fixes. Just need to write changelog, bump the version and publish. If I don't have anything important this night I can do it... not making promises though 👍

@mrodrig 0.11.8 is now released with this included

Awesome- Thank you @elhigu!


React 17  bump update

New versions on react 17 are not being able to use this code.
npm ERR! While resolving<EMAIL_ADDRESS>
npm ERR! Found<EMAIL_ADDRESS>
npm ERR! node_modules/react
npm ERR<EMAIL_ADDRESS>from the root project
npm ERR!
npm ERR! Could not resolve dependency:
npm ERR! peer<EMAIL_ADDRESS>from<EMAIL_ADDRESS>
npm ERR! node_modules/reaptcha
npm ERR!   reaptcha@"*" from the root project

Hi @sarneeh
Please check it ok pull request to allow REACT 17 versions.
https://github.com/sarneeh/reaptcha/pull/220

Thanks! Released in 1.7.3.

Anytime 👍


Listen to 'textDocument/definition' results

Hi, I'm trying to listen to the event of the results of go-to-definition coming in to the language-client.
I used the example here (not the browser one), connected it to a python-language-server and it is working as expected, go-to definition returns the wanted files.
My problem is that I want to listen to the results coming in and use them.
I have 2 options as I see:

use monaco.languages.registerDefinitionProvider() and .then it, but that requires me to implement the go-to-definition by my own but:

I want to use the default langauge-client implementation, for easier support
If I'd try to implement on my own, I see in the browser example that it is possible to be done by using the getLanguageService of vs-code-json-langservice but I have no idea if that's possible to integrate with the first example (+ is that relevant for other language other than JSON?)

Instead of implementing the function, I am looking for a way to subscribe to the event of the results coming in.
I tried using onRequest / onNotification:

languageClient.onReady().then(() => {
            console.log("Client ready")

            languageClient.onRequest('textDocument/definition', (...params: any[]) => {
                console.log("got definitions!, params: "+ params)
                }
            )
        })

But that doesn't work unfortunately, as the log doesn't happen although the results coming in perfectly.
Thank you.

Hi
Maybe you can try using the middleware:
  const client = new MonacoLanguageClient({
    ...
    clientOptions: {
      ...
      middleware: {
        provideDefinition: (document, position, token, next) => {
          const definition = next(document, position, token)

          return definition
        }
      }
    }
  })

I think languageClient.onRequest doesn't work because it's not a request, it's a response

Hi
Maybe you can try using the middleware:
  const client = new MonacoLanguageClient({
    ...
    clientOptions: {
      ...
      middleware: {
        provideDefinition: (document, position, token, next) => {
          const definition = next(document, position, token)

          return definition
        }
      }
    }
  })

I think languageClient.onRequest doesn't work because it's not a request, it's a response


trim space

fix the newly added EditorConfig Checker on CI

I just reverted that PR. Not dealing with this


Fixed annoying valgrind false positive

Initialized act.sa_flags to 0
Initialized act.sa_mask to empty set
** Vim cleaned up all whitespaces around the file -_-

Hi,
is there a way to reproduce the valgrind false positive that you mention?

It's caused in conjuction with libxml2,
I will try to narrow it down for a test case but I'm afraid I will be able to free time for this only in a week

Oh, that is fine. Do it when you can. It's just good to have a test case just so the bug doesn't reoccur in the future.

Thanks for the contribution osleg. In the end however I merged @895d08c instead since it did not include the whitespace changes. Cheers!


Infra views with bad client key spins forever in roles / environments

Describe the bug
In the infra views feature if you try to view the roles or environment data with an invalid client key you get a warning that appears, but the role and environment spinners continue to load forever. In other views they prompt you to reset your admin key.
To Reproduce
Steps to reproduce the behavior:

Reset your client key on the Chef Infra Server so automate has an invalid key
Go to the Infrastructure tab
Click Chef Infra Servers
Click Roles
Notice it spins forever

Expected behavior

It should stop spinning and tell you to update your key

Screenshots

Versions (please complete the following information):

OS: macOS
Browser: Firefox 89
Automate Build Number:<PHONE_NUMBER>0048

This issue is acceptance currently and will be part of the 26th April Release.

This does appear to be fixed now


Dependency build errors "Duplicate class org.hamcrest..." in Android Studio project, for Espresso UI Tests

I tried to use the Awaitility library in an Android Studio 3.6 project, to help with Espresso UI testing:
dependencies {
   ...
   androidTestImplementation 'org.awaitility:awaitility:4.0.3'
}

But when I add this dependency, it causes 2 build errors for the assembleAndroidTest task:
> Task ':app:mergeDebugAndroidTestNativeLibs' UP-TO-DATE
> Transform artifact awaitility.jar (org.awaitility:awaitility:4.0.3) with DexingNoClasspathTransform

Default interface methods are only supported starting with Android N (--min-api 24): void org.awaitility.core.ConditionEvaluationListener.beforeEvaluation(org.awaitility.core.StartEvaluationEvent)

Execution failed for task ':app:checkDebugAndroidTestDuplicateClasses'.
> 1 exception was raised by workers:
  java.lang.RuntimeException: java.lang.RuntimeException: Duplicate class org.hamcrest.BaseDescription found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.BaseMatcher found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.Condition found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.Condition$1 found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.Condition$Matched found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.Condition$NotMatched found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.Condition$Step found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.CoreMatchers found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.CustomMatcher found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.CustomTypeSafeMatcher found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.Description found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.Description$NullDescription found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.DiagnosingMatcher found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.FeatureMatcher found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.Matcher found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.MatcherAssert found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.Matchers found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.SelfDescribing found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.StringDescription found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.TypeSafeDiagnosingMatcher found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.TypeSafeMatcher found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.beans.HasProperty found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.beans.HasPropertyWithValue found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.beans.HasPropertyWithValue$1 found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.beans.HasPropertyWithValue$2 found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.beans.PropertyUtil found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.beans.SamePropertyValuesAs found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.beans.SamePropertyValuesAs$PropertyMatcher found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.collection.IsArray found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.collection.IsArrayContainingInAnyOrder found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.collection.IsArrayContainingInOrder found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.collection.IsArrayWithSize found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.collection.IsCollectionWithSize found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.collection.IsEmptyCollection found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.collection.IsEmptyIterable found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.collection.IsIn found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.collection.IsIterableContainingInAnyOrder found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.collection.IsIterableContainingInAnyOrder$Matching found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.collection.IsIterableContainingInOrder found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.collection.IsIterableContainingInOrder$MatchSeries found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.collection.IsIterableWithSize found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.collection.IsMapContaining found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.core.AllOf found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.core.AnyOf found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.core.CombinableMatcher found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.core.CombinableMatcher$CombinableBothMatcher found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.core.CombinableMatcher$CombinableEitherMatcher found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.core.DescribedAs found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.core.Every found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.core.Is found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.core.IsAnything found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.core.IsCollectionContaining found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.core.IsEqual found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.core.IsInstanceOf found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.core.IsNot found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.core.IsNull found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.core.IsSame found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.core.ShortcutCombination found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.core.StringContains found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.core.StringEndsWith found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.core.StringStartsWith found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.core.SubstringMatcher found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.internal.ArrayIterator found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.internal.ReflectiveTypeFinder found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.internal.SelfDescribingValue found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.internal.SelfDescribingValueIterator found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-core-1.3.jar (org.hamcrest:hamcrest-core:1.3)
  Duplicate class org.hamcrest.number.BigDecimalCloseTo found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.number.IsCloseTo found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.number.OrderingComparison found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.object.HasToString found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.object.IsCompatibleType found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.object.IsEventFrom found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.text.IsEmptyString found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.text.IsEqualIgnoringCase found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.text.StringContainsInOrder found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.xml.HasXPath found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)
  Duplicate class org.hamcrest.xml.HasXPath$1 found in modules hamcrest-2.1.jar (org.hamcrest:hamcrest:2.1) and hamcrest-library-1.3.jar (org.hamcrest:hamcrest-library:1.3)

I can fix the first error by using this guide: https://stackoverflow.com/questions/49512629/default-interface-methods-are-only-supported-starting-with-android-n
android {
  ...
  compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
  ...
}

But I'm not able to fix the second error. The various guides from here do not work:

https://stackoverflow.com/questions/59085448/duplicate-class-org-hamcrest-basedescription-found-in-modules-jetified-hamcrest
https://stackoverflow.com/questions/57645919/duplicate-hamcrest-and-junit-classes-after-updating-gradle-and-android-studio-to
https://stackoverflow.com/questions/35478071/duplicate-entry-during-android-gradle-build-in-task-transformclasseswithjarmerg

For example, none of these changes (either individually or combined) will fix the second error:
androidTestImplementation('org.awaitility:awaitility:4.0.3') {
    exclude group: 'org.hamcrest', module: 'hamcrest-core'
}

configurations {
    all*.exclude group: 'org.hamcrest', module: 'hamcrest-core'
}

// OR

configurations.all {
    resolutionStrategy {
        force 'org.hamcrest:hamcrest-junit:2.1'
    }
}

// OR

configurations {
    compile.exclude group: "junit", module: "junit"
}

dependencies {
   ...
}

Any idea how to fix the duplicate Hamcrest class problem?

I believe I have found the solution: Use the older version of Awaitility (3.x instead of 4.x), from Jan 2019:
dependencies {
  androidTestImplementation 'org.awaitility:awaitility:3.1.6'
}

The explanations are here:

https://stackoverflow.com/questions/55288415/how-do-i-use-3rd-party-programs-plugins-on-android-studio
https://stackoverflow.com/questions/63637633/duplicate-class-org-hamcrest -- "The problem is that the hamcrest classes are bundled in junit also. So "org.hamcrest.BaseDescription" and the other classes exist on the classpath twice."
https://raw.githubusercontent.com/awaitility/awaitility/master/changelog.txt

The older versions of Awaitility use Hamcrest 1.3, which is the same version that JUnit 4.x uses, so it's intrinsically compatible. The newer 4.x version of Awaitility moved to Hamcrest 2.1 and also Java 8 (as shown in the changelog), which is not compatible.

There is another solution here: https://github.com/awaitility/awaitility/issues/222


istanbul: 1.0.0-alpha.2 : "ERROR: No coverage files found."

The problem with removing the root: ./src from .istanbul.yml is that the istanbul cover command runs significantly slower on my machine: ~3 seconds with property set, ~20 seconds without. My suspicion is that istanbul scans the node_modules folder if this attribute is not set. I am unsure if this is an issue or if it's something I've missed in the configuration of istanbul.
Leif Olsen

Further investigation shows that if I move the root property from .istanbul.yml to my test:coverage script, then both the test:coverage and check-coverage scripts works:
"test:coverage": "./node_modules/.bin/babel-node ./node_modules/.bin/istanbul cover --root ./src ./node_modules/.bin/_mocha -- --opts ./mocha.opts  -r .istanbul-mocha.config.js './test/**/*.spec.js'"
´´´

Thanks for the comment, helped me enforce my coverage in a similar way.
"check-coverage": "istanbul check-coverage --root coverage --statement 100 --branch 100 --function 100 --line 100"

Okay, although I've now managed to enforce 100% coverage... it is not calculating the coverage correctly it seems.
=============================== Coverage summary ===============================
Statements   : 100% ( 167/167 )
Branches     : 100% ( 101/101 )
Functions    : 100% ( 42/42 )
Lines        : 100% ( 165/165 )
================================================================================

> istanbul check-coverage --root coverage --statement 100 --branch 100 --function 100 --line 100

ERROR: Coverage for branches (97.35%) does not meet global threshold (100%)

Here's my npm scripts:
"check-coverage": "istanbul check-coverage --root coverage --statement 100 --branch 100 --function 100 --line 100",
"test": "istanbul cover node_modules/.bin/_mocha -- --compilers js:babel-core/register --require tests/helpers/test-setup.js --bail --recursive 'tests/**/*.test.js'",

And my instanbul.yml
verbose: false
instrumentation:
    root: 'src'
    extensions:
        - .js
    default-excludes: true
    excludes: []
    include-all-sources: true

And my dependencies / environment
node: 6.2.1
npm: 3.9.3
instanbul: 1.1.0-alpha.1
mocha: 3.1.2
babel-core: 6.18.0

Seems this is a known issue, and as suggested in https://github.com/gotwarlost/istanbul/issues/631 I will try out nyc for my cli.


state subscribe storage

That RPC subscribes to the changes of the certain key. Example:
----> `
{"id":13,"jsonrpc":"2.0","method":"state_subscribeStorage","params":[["0xcc956bdb7605e3547539f321ac2bc95c"]]}
`
todo: add response example
Aha! Link: https://soramitsucoltd.aha.io/requirements/PRE-44-2

https://github.com/w3f/PSPs/blob/psp-rpc-api/psp-002.md#state_subscribestorage-pubsub


Remove DEQMAP_TIER2CHEM from SGID

Summary

Internal Dataset Name: SGID.ENVIRONMENT.DEQMAP_TIER2CHEM
External Dataset Name: Does not exist in Open SGID
ArcGIS Online Url: https://utah.maps.arcgis.com/home/item.html?id=6e462ff8d93044c7bf58dddd8d0fbc2b

A short summary of the situation.
We have confirmed with DEQ DERR and IT staff that the Enviro "Interactive Map" does not utilize data from this table but, rather, from views directly from a DEQ database; therefore, there is lacking justification to host the table in the SGID any longer. DEQ staff agree.
Migration Guide
A short summary of how users affected by this deprecation can modify their workflows and projects to continue to get similar or improved functionality
Data in this table are available directly from enviro.utah.gov by filtering for the parent data set and exploring the resulting table(s) of related data.
Action items

Assign a person who should complete the task by replacing name with their github @name.
Check [x] the box when the task is completed and add the date of completion.
~Strike~ out all items that do not apply.

Soft Delete
The purpose of the soft delete is to ensure that all of our users and applications have gracefully migrated off of the dataset. Soft deletes will remain in effect for 14 days. During this time, we will have the ability to restore the dataset to its original SGID offering(s). After these 14 days, the item is then ready for a hard delete.
Note: If this dataset is being replaced, then wait until the new data is publicly available before completing these steps:

[x] Prepend "(Mature Support)" to the end of the item title (@nathankota , completed: 2022/03/28)
[x] Remove all tags other than "Deprecated" (@nathankota , completed: 2022/03/28)
[x] Add note to ArcGIS Online description and default popup noting when layer will be deleted and any replacement layer (@nathankota , completed: 2022/03/28)
[x] Unshare item from Open Data (@nathankota , completed: 2022/03/28)
~[ ] Update the SGID Index row as deprecated by pasting the related Porter issue URL in the Deprecated field (name, completed: 2022/00/00)~ NO STEWARDSHIP TABLE RECORD
[x] Mark ArcGIS Online item as deprecated in preparation for future deletion (@nathankota , completed: 2022/03/28)

[x] Change Authoritative field to d in SGID.META.AGOLItems to automatically set the Deprecated AGOL flag. Allow the d to persist through one run of Auditor - currently, Auditor runs daily at 5:00am (@nathankota , completed: 2022/03/28)

[x] After one successful run of Auditor, remove the row from the SGID.META.AGOLItems table. This will trigger the removal of this item in Open SGID (@stdavis, completed: 2022/04/01)

Hard Delete
Hard deletes are final. It is recommended to complete the soft delete process before moving on to these steps. If you decide to skip the soft delete, note that you will need to incorporate some of those steps here.

[ ] Manually remove data from the Internal SGID (@ZachBeck, completed: 2022/00/00)

~Deprecated database layers can be backup up on Google Drive > AGRC Share > Team Projects > SGID > [deprecated layers]~

[ ] Remove ArcGIS Online item: (@nathankota , completed: 2022/00/00)

Manually delete the AGOL item
~-OR-~
~Unshare by changing the AGOL_ITEM_ID field in SGID.META.AGOLItems to something other than an Item ID and manaually changing the sharing settings (remove the item from all SGID groups, remove Public sharing),~
~-OR-~
~Shelve the data by copying the row from SGID.META.AGOLItems to the AGOLItems_shelved table in AGOL and changing the AGOL_ITEM_ID field in SGID.META.AGOLItems to shelved or some other note.~
~Deprecated AGOL items can be backup on Google Drive > AGRC Share > Team Projects > SGID > deprecated layers.~

~[ ] Remove Farm from AGOL connection (name, completed: 2022/00/00)~

~[ ] Update relevant gis.utah.gov data pages (name, completed: 2022/00/00)~

~[ ] Add this porter url to the Deprecated field of the Stewardship record (name, completed: 2022/00/00)~ NO STEWARDSHIP TABLE RECORD

~[ ] Update SGID.META.AGOLItems table (name, completed: 2022/00/00)~

~cut and paste row to AGOLItems_shelved table if shelving (see below)~
~set the AGOL_ITEM_ID field to hosted by <agency> for Farm from AGOL~
~set the AGOL_ITEM_ID field to exclude from AGOL to not publish to ArcGIS Online~

~[ ] Delete Google Drive data (name, completed: 2022/00/00)~

[x] Remove row from SGID.META.ChangeDetection (@stdavis , completed: 2022/04/01)

[x] Remove data from forklift hashing and receiving (@stdavis , completed: 2022/04/01)

[x] Remove row from data/hashed/changedetection.gdb/TableHashes (@stdavis , completed: 2022/04/01)

~Shelve/Static~
~Choose one based on situation.~

~[ ] Upload to UtahAGRC/AGRC_Shelved folder in AGOL (New shelved item not already in AGOL) (name, completed: 2022/00/00)~
~[ ] Move existing AGOL item to AGRC_Shelved AGOL folder (shelving an item already in AGOL) (name, completed: 2022/00/00)~
~[ ] Upload to appropriate UtahAGRC/{SGID Category} folder in AGOL (for static datasets) (name, completed: 2022/00/00)~

~Add record to table.~

~[ ] Add record to AGOLItems_shelved table in ArcGIS Online  with shelved or static in the CATEGORY field (name, completed: 2022/00/00)~

:robot: Automation validation

Assign yourself or someone to check the item by replacing name with their github @name.
Check [x] the box and add the date of verification 2020/01/01 when the task is verified.
~Strike~ out all items that do not apply.

[x] Remove data from Open SGID (@steveoh on 2022/03/28)
[ ] sgid-index (@steveoh on 2022/00/00)
[x] Auditor sets appropriate shelved/static/Deprecated information (@jacobdadams on 2022/03/29)

Are there service dependencies

Does an application depend on this data? No
[x] Are clients querying this data with the WebAPI? (@steveoh on 2022/03/28)

Notification

[x] Twitter (@steveoh)

Group Task Assignments

Check [x] the box when you have assigned all the tasks relevant to your group.

[x] Data Team (@nathankota)
[x] Dev Team (@nathankota )
~[ ] Cadastre Team (@rkelson)~

conductor results for tasks - 193

check
status

@nathankota has completed 8 out of 9 tasks
:no_entry:

stdavis has completed 4 out of 4 tasks
:+1:

@ZachBeck has completed 0 out of 1 tasks
:no_entry:

@steveoh has completed 3 out of 4 tasks
:no_entry:

jacobdadams has completed 1 out of 1 tasks
:+1:

conductor results for ENVIRONMENT.DEQMAP_TIER2CHEM

check
status

internal sgid
:no_entry:

meta table
:+1:

stewardship
:no_entry: Did not find ENVIRONMENT.DEQMAP_TIER2CHEM in the worksheet

conductor results for tasks - 193

check
status

@nathankota has completed 8 out of 9 tasks
:no_entry:

stdavis has completed 4 out of 4 tasks
:+1:

ZachBeck has completed 1 out of 1 tasks
:+1:

@steveoh has completed 3 out of 4 tasks
:no_entry:

jacobdadams has completed 1 out of 1 tasks
:+1:

conductor results for ENVIRONMENT.DEQMAP_TIER2CHEM

check
status

internal sgid
:+1:

meta table
:+1:

stewardship
:no_entry: Did not find ENVIRONMENT.DEQMAP_TIER2CHEM in the worksheet

AGOL item and service def deleted.


Add dropdown of tags to choose from

Currently the user has to know all the tags to use the autocomplete and select one.
Inform the user of the progress: 148584

Yeah, this is a problem for our users, we keep ending up with extra misspelled tags.


Stuck at fetching resource list: http://localhost:9000/docs/swagger.json; Please wait.

I am a newbie to swagger and i am stuck after doing the following things on an error:
I am using the following dependencies:
"com.iheart" %% "play-swagger" % "0.2.1-PLAY2.5",
"org.webjars" % "swagger-ui" % "2.1.4"
Following are the routes:

Following is the expected response type:
case class Output(response: JsValue)
This is the screenshot of where i am getting struck:

This is what i get in the auto generated json file(where it gets struck with error : fetching resource list):
{"paths":{"/assets/{file}":{"get":{"tags":["routes"],"parameters":[{"name":"path","type":"string","required":true,"in":"query"},{"name":"file","type":"asset","required":true,"in":"path"}]}},"/docs/swagger.json":{"get":{"tags":["routes"],"summary":"swagger definition","description":"for swagger UI to consume"}},"/client/view":{"get":{"tags":["routes"],"responses":{"200":{"description":"success","schema":{"$ref":"#/definitions/models.Output"}}}}}},"definitions":{"models.Output":{"properties":{"response":{"type":"play.api.libs.json.jsvalue","required":true}},"required":["response"]}},"tags":[{"name":"routes"}]}
and this is my default swagger.json file(which i have created) :
{
"swagger": "2.0",
"info": {
"version": "1.0.0",
"title": "Weather API",
"description": "A sample API that uses a Mashape weather API as an example to demonstrate features in the swagger-2.0 specification",
"termsOfService": "http://helloreverb.com/terms/",
"contact": {
"name": "Tom Johnson",
"email"<EMAIL_ADDRESS>"url": "localhost:9000"
},
"license": {
"name": "MIT",
"url": "http://opensource.org/licenses/MIT"
}
},
"host": "localhost:9000",
"basePath" : "localhost:9000",
"schemes": [
"https"
],
"consumes": [
"application/json"
],
"produces": [
"application/text"
]
}

Hmm,  it's not obvious to me why you are getting that error from swagger ui. Do you want to click into that js error to see the code that throws the "cannot read property definitions of null"?

Heres the js statements which is throwing this error :

Can you please share the controllers code which you have mentioned in the documentation:
->  /api/cards    cards.Routes
It will be very helpful.

I can't tell from this code where the error "the property definitions of null" comes from
in your screenshot it was swagger-ui.js?
The controller code doesn't matter (plus I don't have that code available). PlaySwagger doesn't try to parse controller.

Yes the error is coming from swagger-ui.js. For more reference i have created a simple demo project to use swagger. Following is the link to the repository:
https://github.com/SangeetaGulia/testSwagger
and i am getting the same error in this code too when i try to hit the url to get swagger-ui.
Any help will be appreciated.

from your example, I noticed that you are using an old version of play swagger, would you mind update to the 0.4.0 first? No need for the PLAY2.5 suffix any more.

Updated the version, but the same problem still persists :(
Anything else that i need to do???

Can you try with a minimum swagger base json? Keep only the required fields.

I am going to setup an example project in the next couple of days. If you can wait that might help too.

In the demo project : https://github.com/SangeetaGulia/testSwagger (this is the same project whose link i have mentioned earlier),
I have used only :
{
"swagger": "2.0",
"info": {
"version": "1.0.0",
"title": "Weather API",
"description": "A sample API that uses a Mashape weather API as an example to demonstrate features in the swagger-2.0 specification",
},
"host": "localhost:9000",
"basePath": "/docs",
"schemes": [
"https",
"http"
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
]
}
as minimum swagger base json.
Is there anything which i am missing???

Actually i need to do it in next two days. You can use the demo project i have created, it may help me too to get the solution earlier. May be i am missing out something important.

Hey,
The error is resolved. After putting swagger.json into conf folder of the project the problem is resolved.
Thanks for your help too.
I just want to ask one more question is there any way to configure on what can be the location to store swagger.json?

play-swagger reads swagger.json from resources. currently there is no way in play-swagger json to read from a location outside resources. I am glad that you resolved the issue. Thanks for the feedback!


fix: reconnect modal google sheets

https://www.notion.so/appsmith/Reconnect-Datasource-Modal-is-broken-62201e5b77834410a114801dd80ce752?pvs=4#5fcc5745b17e43f7a7a641e90125c062
https://www.notion.so/appsmith/Reconnect-Datasource-Modal-is-broken-62201e5b77834410a114801dd80ce752?pvs=4#6a03b3688f274dda8fd350ff3e63992a
Update z index for UI fix.
The picker doesn't have focus at all as when the ads modal is visible all pointer events are disabled elsewhere which includes the filepicker, fixed this by adding pointer events auto to the file picker.
This also means we have to handle closing of modal ourselves, so I am checking if the user clicks on the overlay around the modal or the close button and then closing the modal.
https://www.notion.so/appsmith/The-list-of-pages-in-submenu-in-entity-explorer-are-not-visible-and-no-scroll-present-28a0e21491a44abbb1d18a5b14c8359b?pvs=4#9991ff86ac954e368cd4eead2154f6b0
Updated max height

/build-deploy-preview

/build-deploy-preview

/build-deploy-preview

/build-deploy-preview

/build-deploy-preview

/build-deploy-preview

/build-deploy-preview

/build-deploy-preview

/build-deploy-preview

/build-deploy-preview

/build-deploy-preview

/build-deploy-preview

/build-deploy-preview

/build-deploy-preview

/ok-to-test sha=48d43dc

I am still able to reproduce the below two issues:
https://www.notion.so/appsmith/Reconnect-Datasource-Modal-is-broken-62201e5b77834410a114801dd80ce752?pvs=4#5fcc5745b17e43f7a7a641e90125c062
https://www.notion.so/appsmith/Reconnect-Datasource-Modal-is-broken-62201e5b77834410a114801dd80ce752?pvs=4#6a03b3688f274dda8fd350ff3e63992a
Please find the recording of the same:
https://github.com/appsmithorg/appsmith/assets/39921438/c7aee3dd-af8b-4637-8803-321b4396e364
The 3rd issue (list of pages in the sub menu) is fixed.

All the above reported issues in this PR are fixed.
However if while trying to authorise multiple GSheets Datasources at once, only one gets authorised & not all. Please have a look at the below Loom:
https://www.loom.com/share/18e09fd87c2a4623b70158e1e91749d7


First missing positive Leetcode problem in C++

Want to add the C++ solution of this problem. pls assign me.

Want to add the C++ solution of this problem. pls assign me.

Yes Proceed

https://github.com/risingstar-bit/Compose-Community/pull/178#issue-1416425692 pls have a look @risingstar-bit

@risingstar-bit


Docs for relational inheritance mapping

Keywords: TPT, TPC, TPH

Also mention the Metadata overloads that take a StoreObjectIdentifier

Is this how EF Core knows what type to instantiate if you load the entities from a base type table? I'm currently playing with TPT in EF Core 5.0 RC2 and I'm curious how it does that.

@NickStrupat More or less. We store the mapped table on each entity type and then use that to query the entities. The StoreObjectIdentifier overloads are used to store other table-specific information, such as different column names for each table a property is mapped to (the key properties in TPT).

Ah ok, thanks.
So when I store a Derived entity and then load it from the Set<Base>(), EF seems to instantiate a Derived correctly. I'm curious how it achieves that since I don't see a discriminator column on the base table. Specifically, I'm curious of the Big-O of the performance of that mechanism. Thanks in advance if you can help me out!

We generate an additional column for each type that has a bool indicating whether the row contains said type, see https://github.com/dotnet/efcore/issues/2266#issuecomment-653661902
The processing of the query results is O(n*m) where n is the number of rows and m is the number of types in the queried hierarchy. I can't speak to the performance of the query itself. Perhaps @smitpatel or @roji can help out if you have additional questions.


Suddenly high CPU usage

Placeholder ticket to investigate high cpu usage in some cases with the code in develop branch vs master (or even vs a version way back?) reported by BlazerFlamewing and the_SaltySpitoon
Chat extract from discord:

i encountered this issue when i was first developing the extension, it's actually the reason i used the old DI code vs. the new code
because randomly after periods of time it would enter some kind of infinite loop where it just hammers on the cpu
sometimes it takes 30 minutes, sometimes it takes 2 hours
but it's happening in the main memory reading function from what i could tell
only happens in the develop branch code, not the old code
never figured out what was causing it
@Zutatensuppe
it happened to blazer tonight on his stream
oops i thought all of those messages were about that
well i think blazer is going to message you about it
i think i have a VS profile of it in action but it's like 300MB because it took so long for it to enter that state
i'll see if i can find it

this may have be solved from v0.5 onwards, let me know if you still experience the problem


Update rebranch scheme to include new llvm-project stable/20240405 br…

…anch
(cherry picked from commit 2d919ee3bceecb607563f1ca473bb8c138d26b86)

We should have an automerger from main -> rebranch, let me check what's going on here.

the auto mergers were disabled, they are now re-enabled.

No longer necessary with the AM.


GRAND stack is cool

Step 1
I took two hours to carefully read code here, the Grandstack book, docs on grandstack.io.
Step 2
I read docs on graphl-yoga and created my graphql with all the context for a couple of hours.
Step 3
I brought in my resolvers to do some basic stuff including mutations
Step 4
Finally I got a hang of the seed-db
Step 5
I got my hands dirty with firebase + firebase admin SDK with everything learnt.
Step 6
I now see GrandStack at the end of the tunnel

I am new with Neo4j and Graphql. These both as a combination is very toxic as I cannot stop thinking about anything more for my react apps

Just want to add that I appreciate the increased activity on this repository and the recent series of Twitch videos. I do have the Grandstack book but hadn't been paying attention to this repository for a while. Adding Netlify Functions integration really lowers the entry barrier, and the Twitch videos (several of which are now on YouTube) are an amazing learning resource.


CanonicalizePath: Remove kMaxComponents limit

This patch refactors the CanonicalizePath() function to fix two issues and improve performance. This is achieved through the following:

Remove the kMaxComponents limit entirely, which fixes ninja-build#1732, by dropping the components array entirely, in favor of back-tracking the destination pointer.

Properly handle / and \\ which were incorrectly converted into an empty string. This fixes ninja-build#2008.

Skip initial ../ components in relative paths, as these are common when referencing source files in build plans, and doing so make the loop after this step run faster in practice since most source files do not need adjustments.

Simplify the inner loop logic by handling the last component (which is not followed by a trailing directory separator) separately.
This noticeably improves performance because the inner loop becomes smaller with less branch mis-predictions in the general case.

Never access or copy the character after the end of the input string.

Use memchr() to find the next / on Posix, which allows the use of SIMD implementations provided by the C runtime (e.g. through IFUNC functions on Linux), resulting in very noticeable speedup. This is also why a statically Ninja executable will be slower than one that links to the C library dynamically :-/

Avoid performing any writes when the input path doesn't need any adjustment, which is also quite common.

Note that this patch does not remove the 64-bit limit for the slash_bits  value, which is only used on Win32.
Benchmarking was done in several ways:

On Linux, running hyperfine canon-perftest to run the canonicalization benchmark program and measure its total running time. Three compilers were used to generate dynamically-linked executables.
             BEFORE (ms)  AFTER (ms)

GCC 13.2.0      651         369
Clang 14.0      591         402
Clang 18,0      653         400

On Windows, running canon-perftest 5 times and keeping the best reported average result. The number are slower since they only measure the benched function.
                BEFORE (ms)  AFTER (ms)

Mingw64 GCC 12      246         195

On Linux, run hyperfine ninja -C out/default -n --quiet on a large Fuchsia build plan, once with 70000+ pending commands, and once after the build (i.e. ninja: no work to do).
            BEFORE (s)  AFTER (s)

pre_build       8.789    8.647
post_build      6.703    6.590
```

Note that this PR replaces and deprecates https://github.com/ninja-build/ninja/pull/2108 that I had uploaded a long time ago to only fix one of the issues handled here.

Ping. I believe the requested changes have been applied 3 weeks ago. Let me know if you need more.


Return to my tweets list (X button) not working

Good Twitter worked perfectly until late last night.
I do my twitter sessions from a private twitter list. In old-twitter and (until last night with Good Twittter), after opening a thread the X button at the upper-right of the screen would take me back to the that tweet in my list. In other words, I wouldn't lose my place in the listing.
Now the X button is taking me to the profile page of the person who posted the tweet. At if instead I use the browser's Back feature, my list is reloaded and I lose my place.
I have new-Twitter running in another browser. I that one, the is a "<- Tweet" button at the top of a thread, and that does take me back to my place in my list. So Twitter hasn't lost this functionality; it's just that for some reason Good Twitter isn't accessing that function.
I hope this can be fixed! I had really been enjoying Good Twitter.

Many of us are having the same issue. I clicked on the update tonight (Sunday) and I haven't noticed anything different. I don't use tabs. Only one window. But clicking on the x in the upper right corner changes the whole page away from my feed. And onto the feed of the tweet I'm looking at.

Sign out of Twitter (Good Twitter) - then sign back in. Worked for me. Don't know how long it will last. But for now, it's great.

This userscript fixed this for me without the need for a relogin: https://twitter.com/byuu_san/status/1156467463900413952
Perhaps the fix can be integrated into this extension?


Fix server crash when a user is not logged in

Currently broken :(
Seems the session can't save a struct
Fixes #1

Currently I try to store the whole StoreUser struct, I guess I could fix this by getting every field from the user struct from the session separately and the rebuilding it as a StoreUser in GetUserFromStore.
Issue seems to come from https://github.com/tinylib/msgp/blob/2236701c6f34628354cce940448f7476e0bed221/msgp/write_bytes.go#L342-L350 which the session lib uses to save data, and it can not store structs.


Allow configuration of NodeBuilderFlags.AllowNodeModulesRelativePaths for un-distributed mono repos

Search Terms

AllowNodeModulesRelativePaths
The inferred type of ... cannot be named without a reference to ...
#29808
https://github.com/microsoft/TypeScript/issues/30858
https://github.com/microsoft/TypeScript/pull/27340

Suggestion
Allow the optional use of AllowNodeModulesRelativePaths during declaration creation
Use Cases
I understand why @weswigham added https://github.com/microsoft/TypeScript/pull/27340 and it is correct for most consumers, especially those that publish packages for consumption on NPM.
However, it seems like for npm style mono-repos where packages are only consumed locally and not published to a registry, it is valid to have seemingly non-portable TS references (lerna, pnpm, rush, yarn workspaces). A relative path to a node_module may still be valid as long as the structure stays consistent, which it does for this style of mono repo with a single node_modules directory.
I am using a mono repo managed by Bazel and rules_nodejs and users are experiencing issues with the creation of declaration files that otherwise would contain relative paths to node_module files. https://github.com/bazelbuild/rules_nodejs/issues/1013
(The conversation in https://github.com/microsoft/TypeScript/issues/30858 was helpful, however, it seemed to still be focusing on resolving portable types, which is only necessary when distributing the declaration files. If they are consumed locally, portability is not a concern.
Examples
I'm not sure the best way (or standard way) for these flags to be set, however, I imagine an entry in the TSConfig Compiler Options would make the most sense:
interface CompilerOptions {
  ...
+  allowUnportableDeclarationImports: true
}

Currently I am patching Typescript to toggle on this  behavior and it appears it is working just as expected.
typescript+3.7.3.patch.txt
Checklist
My suggestion meets these guidelines:

[X] This wouldn't be a breaking change in existing TypeScript/JavaScript code
[X] This wouldn't change the runtime behavior of existing JavaScript code
[X] This could be implemented without emitting different JS based on the types of the expressions
[X] This isn't a runtime feature (e.g. library functionality, non-ECMAScript syntax with JavaScript output, etc.)
[X] This feature would agree with the rest of TypeScript's Design Goals.

@weswigham I'm interested to hear your thoughts on this

@joeljeske you only want this for incremental builds, right? Since if you trigger this error there's no way you're shipping the resulting .d.ts file as a redistributable.

Well no actually. I am using bazel with rules nodejs, but let me describe how it works.  The build consists of many packages that link to each other via tsconfig path mappings (not via symlinking into node modules). Each package is built independently and only sees the type declarations of other local dependencies. The local dependencies all share a common top level node modules directory. In this way, if a package generates a declaration file with a relative import path into the node modules dir then downstream local packages that depend on that declaration file would still be able to resolve that import.
Does that make much sense?

Sure; but what are the declaration files being built for? It's certainly not for publishing for consumption if you're OK with paths like this (since there's absolutely no way these paths could ever be shipped), so the only other use would be incremental style (similar to --incremental or --build mode) builds. As far as I know, bazel's default mode of operation, too, is incremental in nature.

Sure; but what are the declaration files being built for? It's certainly not for publishing for consumption if you're OK with paths like this (since there's absolutely no way these paths could ever be shipped outside a specialized environment), so the only other use would be incremental style (similar to --incremental or --build mode) builds. As far as I know, bazel's default mode of operation, too, is incremental in nature.

The declaration files are used for type checking against other local packages. They never leave the repo.
Example: local module A depends on local module B. The generated declaration files of B are used during the compilation of A.
Yes bazel is incremental, but not in the sense of using —incremental as far as I know. It is incremental in the sense that module A will only be recompiled if the declaration files (public api) of module B changes.
My mono repo has many small Packages in typescript that are used in a variety of places.  The end product of the mono repo is a set of compiled JS applications ready for runtime- they d ts files are only used in the intermediary build process as described.

The declaration files are used for type checking against other local packages. They never leave the repo.

Right - pretty much the definition of an incremental build. I can see removing the error when incremental is set but declaration is not expressly set, however directly exposing an internal like this is not something I'd be comfortable with.

Yea I guess i was thinking about an incremental build from the standpoint of a single package. In my case each package is fully rebuilt at a time, not using the incremental TS option. But looking from the standpoint of the entire repo, yes it is incremental; some packages will have TSC invoked on them and some will not.
Regardless of the terminology, I can say that I am not using TS incremental option and I am explicitly requesting the declaration files. I do respect concern of exposing implementation details, however, I feel like I have a valid use case here that does not fit into your limited exception:

when incremental is set but declaration is not expressly set

I definitely agree, that @joeljeske has a valid use case here.
Especially, I do not think it would hurt anybody if it is disabled by default and can be enabled in the compiler options when needed.

@weswigham @RyanCavanaugh, do y'all have any additional thoughts regarding my use case? Would any supporting examples or additional use case explanations be of help?

@weswigham we would really appreciate your help in prioritising a proper solution for this. Yes, the d.ts files are intermediate artefacts as part of a larger incremental build.
FWIW we are trying to move our company-wide monorepo to bazel, and though we currently have a workaround in a patch provided by @flolu and @joeljeske, we strongly feel this needs to be properly supported by vanilla tsc.
Note that:

This will affect anyone who uses bazel and the ts_library rule, AND who uses type inference.
This is fully reproducible in the official Angular repo, which uses bazel and ts_library. By checking out and changing the code so that tsc has to add an import for an inferred type, you will encounter the error. They seem to have either gotten lucky or deliberately worked around by avoiding any need for type inference, which I find very surprising. So - this is not a weird edge case type issue, but affects existing consumers of tsc and bazel in large, popular codebases.

It looks like this feature has been delayed. Are there any good workarounds other than casting the failures with any type or sucking it up & explicitly typing all failures?

I hope this can be addressed soon. Like the other commenters above, this proved so problematic when trying to transition our build system to Bazel that we had to resort to patching the compiler.
@weswigham, I'm sure you have a lot on your plate and I know the challenge of juggling competing priorities, but if there's any possibility of getting an option that would disable this error into an upcoming TypeScript release, it would be super helpful to Bazel users.

I hope this can be addressed soon. Like the other commenters above, this proved so problematic when trying to transition our build system to Bazel that we had to resort to patching the compiler.
@weswigham, I'm sure you have a lot on your plate and I know the challenge of juggling competing priorities, but if there's any possibility of getting an option that would disable this error into an upcoming TypeScript release, it would be super helpful to Bazel users.


Kwapi with no Grid'5000 dependencies

Here is a simple version of our kwapi fork with no Grid'5000 dependencies.

Thank you for contributing to stackforge/kwapi!
stackforge/kwapi uses Gerrit for code review.
Please visit
http://docs.openstack.org/infra/manual/developers.html#development-workflow
and follow the instructions there to upload your change to Gerrit.


[tool_crash] WipError

Command
flutter run

Steps to Reproduce

...
...
...

Logs
WipError

[!] Flutter (Channel stable, 3.19.3, on Microsoft Windows [Version 10.0.19045.4170], locale en-US)
    • Flutter version 3.19.3 on channel stable at F:\flutter
    ! The flutter binary is not on your path. Consider adding F:\flutter\bin to your path.
    ! The dart binary is not on your path. Consider adding F:\flutter\bin to your path.
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision ba39319843 (4 weeks ago), 2024-03-07 15:22:21 -0600
    • Engine revision 2e4ba9c6fb
    • Dart version 3.3.1
    • DevTools version 2.31.1
    • If those were intentional, you can disregard the above warnings; however it is recommended to use "git" directly
      to perform update checks and upgrades.

[✓] Windows Version (Installed version of Windows is version 10 or higher)

[!] Android toolchain - develop for Android devices (Android SDK version 34.0.0)
    • Android SDK at C:\Users\USER\AppData\Local\Android\sdk
    ✗ cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    ✗ Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/windows#android-setup for more details.

[✓] Chrome - develop for the web
    • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe

[✗] Visual Studio - develop Windows apps
    ✗ Visual Studio not installed; this is necessary to develop Windows apps.
      Download at https://visualstudio.microsoft.com/downloads/.
      Please install the "Desktop development with C++" workload, including all of its default components

[✓] Android Studio (version 2023.1)
    • Android Studio at C:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 17.0.7+0-b2043.56-10550314)

[✓] Connected device (3 available)
    • Windows (desktop) • windows • windows-x64    • Microsoft Windows [Version 10.0.19045.4170]
    • Chrome (web)      • chrome  • web-javascript • Google Chrome 123.0.6312.86
    • Edge (web)        • edge    • web-javascript • Microsoft Edge 123.0.2420.65

[✓] Network resources
    • All expected network resources are available.

! Doctor found issues in 3 categories.

Flutter Application Metadata
Type: app
Version: 1.0.0+1
Material: true
Android X: false
Module: false
Plugin: false
Android package: null
iOS bundle identifier: null
Creation channel: stable
Creation framework version: ba393198430278b6595976de84fe170f553cc728
Plugins
cloud_firestore-4.16.0
cloud_firestore_web-3.11.0
firebase_core-2.28.0
firebase_core_web-2.14.0
firebase_storage-11.7.0
firebase_storage_web-3.9.0
flutter_credit_card-4.0.1
flutter_inappwebview-6.0.0
flutter_inappwebview_android-1.0.13
flutter_inappwebview_ios-1.0.13
flutter_inappwebview_macos-1.0.11
flutter_inappwebview_web-1.0.8
fluttertoast-8.2.4
path_provider_linux-2.2.1
path_provider_windows-2.2.1
shared_preferences-2.2.2
shared_preferences_android-2.2.1
shared_preferences_foundation-2.3.5
shared_preferences_linux-2.3.2
shared_preferences_web-2.3.0
shared_preferences_windows-2.3.2
url_launcher-6.2.5
url_launcher_android-6.3.0
url_launcher_ios-6.2.5
url_launcher_linux-3.1.1
url_launcher_macos-3.1.0
url_launcher_web-2.3.0
url_launcher_windows-3.1.1

Closing this as a duplicate of https://github.com/flutter/flutter/issues/56458


Changing Gems to crushed variants

    sieve('flint', 0.1, sand, 'gtceu:green_sapphire_crushed:ore', false);     sieve('flint', 0.1, sand, 'gtceu:sapphire_cushed_ore', false);     sieve('flint', 0.1, sand, 'gtceu:ruby_crushed_ore', false);     // sieve('flint', 0.1, sand, 'gtceu:raw_opal', false);     sieve('flint', 0.1, sand, 'minecraft:coal', false);     sieve('flint', 0.1, sand, 'gtceu:quartzite_crushed_ore', false);     sieve('flint', 0.1, sand, 'gtceu:certus_quartz_crushed_ore', false);     sieve('flint', 0.1, sand, 'gtceu:salt_crushed_ore', false);     sieve('flint', 0.1, sand, 'gtceu:rock_salt_crushed_ore', false);     sieve('flint', 0.1, sand, 'gtceu:saltpeter_crushed_ore', false);     sieve('flint', 0.1, sand, 'gtceu:realgar_crushed_ore', false);
I would change the Gems to crushed gems, due to more uses for them this way you could easily use the sifter block from GT:M since they are pretty much not used.
Also it gives access to vanadium since there is no way to get it.
With the crushed ore you can make ruby/green and blue sapphire slurry to get a source of Vanadium.
(Vanadium is required to cut silicon boule since it requires an MV cuttingmachine which requires vanadium steel blade)

I had forgotten about vanadium

I had forgotten about vanadium

no worries this is why i test stuff xD


[6.0]

Explanation: Introduce more syntactic refactorings "Add documentation" and "Add Codable structs for JSON"
Original PR: https://github.com/apple/sourcekit-lsp/pull/1205, https://github.com/apple/sourcekit-lsp/pull/1206
Risk: Low. Adds a few more syntactic refactorings.
Radar/issue: rdar://127143627
Reviewed by: @ahoppen
Testing: New tests.

@swift-ci please test

I’m cherry-picking PRs from main to release/6.0 as part of https://github.com/apple/sourcekit-lsp/pull/1236, so this shouldn’t be needed.


⚠ WSINGRESOS - GENERICO has degraded performance

In 3832d22, WSINGRESOS - GENERICO (https://srvshyweb.yucatan.gob.mx/cgi-bin/wspd_cgi.sh/WService=wsingresos/internet/servicios/wsGenericoPagosWeb.r) experienced degraded performance:

HTTP code: 200
Response time: 2171 ms

Resolved: WSINGRESOS - GENERICO performance has improved in 79218f5 after 1 hour, 2 minutes.


IntelliJ code coverage tools don't show coverage per-line using source maps

I am trying to measure and improve test coverage in an Angular Dart project (the Dart CI results feed at https://dart.googlesource.com/dart_ci/+/refs/heads/master/results_feed/)
The Intellij coverage tools work adequately to run tests written using
  import 'package:angular_test/angular_test.dart';
  import 'package:pageloader/html.dart';
  import 'package:test/test.dart';

and produce coverage reports for the Dart source files that seem correct.
The source file coverage does not show line-by-line coverage, though, which is
needed to find out where which functions aren't being covered, and add tests.
The data file stored by intellij for this dart2js coverage data is in [home]/.IntelliJIdea2019.3/system/coverage, and is a .dat file with data like:
SF:/src/dart/dart_ci/results_feed/lib/src/services/filter_service.dart DA:8,1 DA:9,1 DA:10,1 DA:12,1 DA:13,1 DA:14,0 DA:15,1 DA:17,1 DA:21,0 DA:22,0 DA:23,0 DA:24,0 DA:25,0 DA:26,0 DA:27,0
I can look at that by hand, and see what lines are covered, but the IntelliJ UI components to show it are missing when looking at this type of coverage report, which is called "WipPresentableName Coverage" in the Choose Coverage Suite IntelliJ IDEA dialog.  There is no color highlighing of the lines, or option to export the data.
The tests that I run on the Dart VM, because they are unit tests with no UI, have a different type of coverage data called "Dart Coverage", which is stored as a .json file in the coverage directory
and has similar data, like
{"source":"package:intl/src/intl/date_format.dart","script":{"type":"@Script","fixedId":true,"id":"libraries/1/scripts/package%3Aintl%2Fsrc%2Fintl%2Fdate_format.dart","uri":"package:intl/src/intl/date_format.dart","_kind":"library"},"hits":[579,3,643,3,690,0,702,0,710,3,240,1,246,2,247,1,411,0,412,0,413,0,414,0,415,0,416,0,417,0,418,0,419,0,420,0,421,0,422,0,423,0,424,0,425,0,426,0,427,0,428,0,429,0,430,0,431,0,432,0,433,0,434,0,435,0,436,0,437,0,438,0,439,0,440,0,441,0,442,0,443,0,444,0,445,0,446,0,447,0 ...
do show line-by-line coverage highlighting in the IntelliJ IDEA ui.
If I run the app or tests directly in the Chrome browser, and use its devtools coverage tools, I do get line-by-line coverage highlighting in the Dart source files, though I'm not confident of its accuracy, as long as the source files can be fetched by the browser.  I have a hard time running the web tests directly in the browser, though - if I load the test HTML page, it seems not to run the tests.
What is our expected workflow for looking at test code coverage in Angular apps?  An issue filed against the Angular Dart repository a year ago was closed as not their job:
https://github.com/dart-lang/angular/issues/1654
Can we get the IDEA ui to show the line-by-line coverage?  And how accurate are the source maps and their use for coverage data from browser execution?  Some of the results I've seen don't really look right.

@grouma @jacob314 Does the Dart - Flutter axis have any work that would help in coverage of web Dart code?

Externally we don't have support for web coverage. There is a very long discussion which captures some approaches in https://github.com/dart-lang/test/issues/36. It hasn't been a large enough priority for us to tackle unfortunately.

Closing because AngularDart is in maintenance mode.


HxGrid - System Aggregate Exception

First of all I have you thank your team for such an incredible amount of work and excellent documentation! It really is superb!
I am currently using the HxGrid without it being wrapped in an "if data is not null" block  because i loved the loading skeleton you guys provide. It currently shows the nice "loading" skeleton:

but i get an issue in the console:
Error: System.AggregateException: One or more errors occurred. (Value cannot be null. (Parameter 'source'))
---> System.ArgumentNullException: Value cannot be null. (Parameter 'source')
at System.Linq.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument)
at System.Linq.Enumerable.Count[TSource](IEnumerable`1 source)
at Havit.Blazor.Components.Web.Bootstrap.HxGrid1.InvokeDataProviderInternal(GridDataProviderRequest1 request)
at Havit.Blazor.Components.Web.Bootstrap.HxGrid`1.RefreshPaginationDataCoreAsync(Boolean renderOnSuccess)
at Havit.Blazor.Components.Web.Bootstrap.HxGrid`1.OnAfterRenderAsync(Boolean firstRender)
--- End of inner exception stack trace ---
I am loading the data for the grid like this:
    protected override async Task OnInitializedAsync()
    {
        vm.data = await _ctx.GetTradeStatistics();
    }

Notes

If i wrap the razor grid in an "if data exists" block it works, but i miss out on your skeleton loading.
The data feeding this grid  is a slow running query (approx 2 second average)  and returns 700 rows if that helps solve it..

Hi @DaleCam,
thanks for the feedback on our component library and documentation.
The exception you met is caused by the fact that the method you use as <HxGrid DataProvider="SomeMethod" /> returns GridDataProviderResult where the Data property is null. This should never happen (we will probably add some internal check to the code and throw a more helpful exception) as the DataProvider should always return the data to display (It's why it is async to be able to await the data and render the progress in the meantime. If there are no data, it should return empty enumerable with TotalCount of 0.)
As of your code... I do not have your DataProvider-method, but I guess it just uses the vm.Data to return the result. The situation is that DataProvider gets called by the HxGrid before your OnInitializedAsync method sets the vm.Data and at that point in time the vm.Data is still null.
If you want to use vm.Data you should not rely on OnInitializedAsync to be finished before the data is needed. One of the acceptable patterns might be:
private async Task EnsureDataAsync()
{
  vm.Data ??= await _ctx.GetTradeStatistics();
}
protected override async Task OnInitializedAsync() // this might not be needed at all if don't use the vm.Data elsewhere
{
   await EnsureDataAsync();
}
private async Task<GridDataProviderResult<YourItemType>> YourDataProviderMethod(GridDataProviderRequest<YourItemType> request)
{
  await EnsureDataAsync();
  return request.ApplyTo(vm.Data);
}

(Note: In some setups you should prevent parallel loading of the data from two triggers. Add protection of your choice to the EnsureDataAsync method.)

Ahh thank you so much that makes so much sense now! Thank you for your fantastic explanation and example code - its now working a treat. My apologies to create you more work!
(If you get to Budapest any time soon let me know and drinks on me :)


0 error(s), 0 warning(s)

Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped.

We could have a badge for the passing build, also I got 100% coverage, pretty cool!


C# class validation fails with filenames that include a period

Tested versions
Reproducible in v4.3.beta2.mono.official [b75f0485b]
System information
Windows 11 - v4.3.beta2.mono.official [b75f0485b]
Issue description
I like to use web filenesting in Visual Studio's editor to keep what is likely an abomination of a file structure managed by the IDE like so:
Project.cs
Project.BaseClass1.cs
Project.BaseClass1.SubClass1.cs
Project.BaseClass1.SubClass2.cs
Godot's file manger on creation of a C# file doesn't like making a file this way, with any additional period in the filename causing it to report a bad extension.
I suspect the part of Godot's file manager that reads the extension is reading the extension left-to-right from the first period in the filename, instead of reading from the end of the string up to the first period right-to-left.
Steps to reproduce
Attempt to create a new C# script with the name TestName.Test.cs
Minimal reproduction project (MRP)
N/A.
Note for C# users understood, N/A.

I've updated the title to reflect what's actually happening, and will be opening a PR shortly with a change that should fix it. I'm building now to verify before submitting.

For C# scripts the filename must match the name of the C# class, and C# class names can't have periods.
That said, if the dialog is complaining about the extension then that's a bit unexpected. I would expect to see Class name must be a valid identifier.

I do see the class name error you named, apologies for the confusion.
I use partial classes a lot in library code  so something like a SaveFile class would look like:
namespace Test;

public partial class BaseGame
{
    public partial class System
    {
        public class SaveFile
        {
            public int BlahBlah { get; }

            public SaveFile() => BlahBlah = 1;
        }
    }
}

would get the filename BaseGame.System.SaveFile.cs, where there exists already a BaseGame.System.cs and a BaseGame.cs.
I am doing this already in VS2022 with library code, but I don't know if adapting the existing class check to separate the string using the period into multiple strings and iterating over them each as class names is useful or not.
As a side-note, the function that does the check is currently only used for this dialogue with C#.

IMHO, the file manager in Godot should only handle Godot objects. And thus refuse file names that don't make sense in this context (even when they might be valid outside of this context).

I am very much just starting out with Godot, but I do plan on using partial classes until I'm dead in the ground where it makes sense, and C# allows me to do this without too much fuss just with a partial keyword.
A workflow that implements this would look like:
Godot object is created in the editor ->
Script is worked on ->
Script gets too big ->
Parts of the script can be broken out into a partial class file, say a single really big method gets its own file.
So I may start with Player.cs that maps to a Player node in the editor, but decide later to add a Player.DoComplexThing() method, or Player.FamilyTree subclass. Partial classes make organizing these easier and allow for larger codebases to be split in a way that's easier to handle (to my mind). The fact that my IDE, VS2022, includes a "web" filenesting mode that keeps things tidy specifically when using this file convention, is a massive benefit to me.
As a side-note, GDscript currently allows for this naming convention, "Testing.Testname.gd" is totally valid in the newest beta. My change brings closer parity to the way that GDscript is currently handled.

As a side-note, GDscript currently allows for this naming convention, "Testing.Testname.gd" is totally valid in the newest beta. My change brings closer parity to the way that GDscript is currently handled.

GDScript and C# are different languages that have different rules. For example, a GDScript doesn't even need to have a class name, but C# scripts are C# classes so they all have names. As a result, the generated C# script from the template would be invalid if the provided filename is not also a valid C# identifier.
This check was added in https://github.com/godotengine/godot/pull/74330 to prevent generating invalid C# scripts.
For your use case it sounds like using the IDE to create these partial files would solve it. Your IDE probably also has refactoring tools that allow you to move these big methods to a newly created file in one step.

This check was added in https://github.com/godotengine/godot/pull/74330 to prevent generating invalid C# scripts.

I could only find a call to this check in the file creation dialog, but I think my main sticking point is that "test.class.cs" is a valid name for a C# script and Godot currently doesn't allow for it.

For your use case it sounds like using the IDE to create these partial files would solve it. Your IDE probably also has refactoring tools that allow you to move these big methods to a newly created file in one step.

That is true, and as it is a use-case that the language supports I am of the opinion that Godot should similarly support it. Not the fancy one-click refactoring as a whole  but just the general "allow you to make the file from within Godot" part.

I think my main sticking point is that "test.class.cs" is a valid name for a C# script and Godot currently doesn't allow for it.

Right, because of the limitations I mentioned of the C# scripting language implementation in Godot. I think it's preferable to disallow names that can result in confusing behavior.
In the context of creating scripts, it makes sense to disallow anything that can't be a valid script. A file with the name "test.class.cs" can't be a script, the C# class would have to be named test.class which is an invalid identifier. Disallowing this name avoids confusion when the user tries to attach it to a Node/Resource.

I am of the opinion that Godot should similarly support it. [...] just the general "allow you to make the file from within Godot" part.

While I think creating C# files from the IDE is better for your use-case. You can still create any file you want from within Godot if you use the Create New > TextFile... option:

This allows you to circumvent the script creation checks. But keep in mind that you may be shooting yourself in the foot, be aware of the limitations of using C# as a scripting language in Godot.

The class TestClass.TestSubClass is a perfectly valid C# class and you can use it like you are doing in that example, but you can't use it as a Godot script (as in attaching the file to a Node or Resource).

I apologize again if I'm being dumb here, unless there's another reason that it can't be used, PR #94134 exists to address the inability to attach it to a Node or Resource. Unfortunately, I haven't yet had the chance to test directly with creation of a new project with a new scene and a new script named "testscript.scripts.cs" or something silly to full build (dotnet dependencies and limited time between work responsibilities are stopping me from fully testing), but script creation seems OK and the Godot Editor doesn't seem to have a problem with it with the PR applied.

So in my head, this would look like:
If a user wanted to create MainGame.Test.cs, Godot would only really care about "Test" as the actual class name.
User creates MainGame.Test.cs, Godot generates:
using Godot;
using System;

public partial class Test : Node2D
{
    // Called when the node enters the scene tree for the first time.
    public override void _Ready()
    {
    }

    // Called every frame. 'delta' is the elapsed time since the previous frame.
    public override void _Process(double delta)
    {
    }
}

PR updated with this in mind.

Would a potential solution here that would allow for the creation of complex class names be to use the last section of a split filename as the name of the actual class?

That would still not allow you to attach this file to a Node or Resource, since the name of the .cs file does not match the name of the class.
As mentioned earlier, I think it'd be preferable to disallow creating invalid scripts (files that can't be attached) when creating them from Godot. And advanced use cases can use an external file manager or IDE already.


Changes

I guess this pull request can be closed?

Could we merge it? I don't have access to repository, so was pushing to my fork all the time.


Documentation should mention that cache files must not be older than refresh_delay

Windows 7, SP1, 64bit, english language
dnscrypt 2.0.0 worked
dnscrypt 2.0.4 does not work
public-resolvers.md and public-resolvers.md.minisig and mybase.txt were manually downloaded and put into that folder
dnscrypt-proxy.zip
What is wrong with that config?
dnscrypt 2.0.4 works if I use this config (I added the .txt to make it upload to github)
dnscrypt-proxy.toml.txt
Sorry for my english!

#182 might be related

Your cache files expired.
Bump refresh_delay up or update them (or at least the files dates).

Thank you! Everything works now with the dnscrypt-proxy.zip above.
What I did:
$ touch public-resolvers.md public-resolvers.md.minisig
Why it happened:
I used wget to download those files, which copied the server time of the files, which was too old.
I apologize I did not manage to debug this on my own. Thank you for your help, you are awesome and dnscrypt is a great software.