Support for $addToSet: {$each ....}

Hi,
I have a use case in my app where I need to add multiple items to an array field for an existing document. I use the $addToSet: {arrField: {$each: [someObject, anotherObject]}} update modifier to do the update in single atomic MongoDB operation.
Now I am in the process of integrating meteor-transactions into my app, I realised that  modifiers of this form do not work.  Looking in the code, I can see there is no explicit support for any of the $addToSet array modifiers. There are two issues:

When meteor-transactions tries to save the resulting tx.Transactions document, it fails with a MongoDB error because some of the field keys (in the update and inverse command objects) have a key that starts with $ (the $each key in the original update modifier)
The inverse command is not correct (it changes the $addToSet command to a $pull command, but $each is not supported as a $pull modifier.  Actually, I don't think you can inverse $addToSet with $pull so easily, because addToSet only adds more objects if they do not already exist in the array being modified. So , when inversing, you have to be careful not to delete array items that were in the addToSet modifier, but were already in the array before then. Phew!

After working on this today, I think I have a solution for number 2.  I think the inverse operation of $addToSet should be a $set of the complete state of the array field prior to the $addToSet. It's a brute force approach vs unpicking it with $pull, but should work for any $addToSet operation. Penalty is storing a larger amount of data in tx.Transactions. I my own use case, I will only max 100 items in these array fields, with each array item object object just being a couple of small strings.
I have started working on number 1, but am currently stuck somewhere in the packaging / unpackaging methods. Basically, need to ensure that any field keys starting with $ get replaced with something else before saving, and then un-replaced when the tx.Transaction doc is read back out of the db again.
Will update this issue when I have made some more progress.

Oh man ... I can see I'm going to have to up my game a bit.
When it comes to mongo operators, there's support for almost nothing in this package -- maybe half a dozen operators total.
Yes, for the $addToSet inverse operation, $set on the whole array will work. In fact $set probably works well as an inverse for just about any change.  The only trouble is, if two users are adding elements to the same array in a doc in quick succession, this might happen:

there is a field with an empty array: []
user 1 adds one element so array looks like: ['user 1']
user 2 adds two elements so array becomes: ['user 1','user 2 - 1','user 2 - 2']
user 1 clicks undo.

With current implementation the array becomes: ['user 2 - 1','user 2 - 2'] and both users are fairly happy with the result.  Using $set as the inverse, the array becomes [] and both users are confused.
User 1: "I thought clicking undo only removed the things I added. Why did the other two things disappear."
User 2: "Hey.  I just added some things.  Where did they go?"
It's weighing the possibility of this happening against the scenario you describe where someone adds an element to an array that's already there, then does an undo and the element disappears, leaving the state of the array changed, which is the opposite of what you'd expect when clicking undo.
My preferred method of handling this would be to check for existence of the array element when doing an $addToSet and setting the inverse action to nothing if the element already exists. I think that would cover both cases.  I'll look into this.
If you can figure out the $each thing -- I'll totally accept a pull request!  The problem of using mongo operators as field names is what the _unpackageForUpdate and _packageForStorage methods solve for basic first level mongo operators, but I wasn't very forward thinking when I put this package together, so I don't really have a pattern in mind for supporting operators like $each.  I'm open to suggestions.

Thanks for the reply.
I think meteor-transactions is a potentially important part of the Meteor ecosystem ... I haven't spent hours scouring Atmosphere for similar packages, and only a couple of days working with it so far, but this package looks like a serious attempt at solving an important but complex problem.  I would have imagined most serious production Meteor apps would need to look at this a some point , at least for multi-document 2 - phase commit + rollback support. For me, the user-visible undo / redo is a nice-to-have side-effect. A 25 year career spent in large enterprise software development has taught me you need to get the basics down first, and this is one of them!  That's why I am happy to put a bit of time and effort in to help out here  :-)
re: your multi-user scenario.  Agreed this is tricky, if you isolate one user's edit for another user's edit of the same doc. I currently intend to solve that by exposing a single list of undo-able actions to all users who look at the same document.  In your example, if user 1 wants to roll back, they will need to also rollback user 2's edit first. This is more an event - sourcing model, where there is a single stream of time-ordered transactions, which can only be rolled back in contiguous sequence, instead of cherry - picking which events to reverse.  I haven't got onto that bit yet, as I hit the other issues I have reported first :-)  Probably some gnarly issues around ensuring the server code enforces the sequencing .. haven't looked at that yet.  One step at a time ....
Right, back to figuring out the package / unpackage code ....

Ah!  I like the sound of that approach where you have to roll back the subsequent commits by other users first.  That said, this package wasn't designed with that in mind, so it may be difficult to achieve without a substantial re-write.
I'm glad that you see this package as a serious attempt to solve an important problem. I'm using it extensively in a big, complex app that's been in production for almost 2 years and will be for years to come, so I'm committed to maintaining it as best I can. (I'm also secretly pleased, and kind of surprised, that it's been one of the most reliable components of the system, even though it puts some limitations on how I can do my writes to mongo.)
Time has taught me to view the "multi-document 2 - phase commit + rollback support" as the package's most essential function, although (full disclosure) when I wrote it, I just wanted a reliable user-visible undo/redo and saw the rest of it as being necessary to achieve this end.
You see, my brother (15 year career in large enterprise software development) was supposed to be helping me architect the trickier components of my app (he wrote my RBAC, for instance). But he was too busy playing some computer game during our brief window of collaboration, so I (high school mathematics teacher) ended up writing the whole transactions package myself.
But that was two years ago and I've learnt a lot since then.
So now, "2-phase commits" is the next major milestone on my roadmap to getting this package ready (in all good conscience) for widespread adoption.
I'm kind of surprised that a solution for multi-document transactions wasn't one of the first packages in the Meteor ecosystem.  The only other serious attempt at this sort of thing for Meteor (as far as I'm aware) was mrt:versioning, the development of which was discontinued two years ago.  We did look into adopting/adapting it at the time, but it takes a substantially different approach to mine and wasn't quite what I was after.
Anyway... this is comment is turning into a novella, so let me just conclude by saying that I'm very grateful to have someone with your experience actively helping to improve the codebase.

I forgot to say earlier, when you mentioned "Penalty is storing a larger amount of data in tx.Transactions" that the transactions collection in the database of my production app is 10x larger than the next largest collection (in terms of disk space). For this reason, I'm thinking of making the package automatically clean out old transactions -- like 6 months old (by default) -- configurable to never remove old transactions with tx.purgeAfter = 0;.

Can i suggest you raise a new Issue about the archiving idea ... my own 1st Meteor app hasn't even gone live yet, so I don't yet have that problem, but I know it will bite at some point.
Perhaps you might just provide a tx object method to archive all transactions older than a supplied date. Then apps can use their own trigger mechanism (e,.g,. using synced-cron package, REST - triggered authenticated command etc). Or, I guess, apps could just remove documents from the tx.Transactions collection themselves, right ? Is there any need for having a tx method to do that (other than for encapsulation purposes?)
Look forward to seeing the 2-phase commit taking shape  :-)

Just added #15.

Updated proposed code, for further discussion, for inverting an $addToSet update operation:
          case '$pull' :
            // Brute force approach to ensure previous array is restored on undo
            // even if $addToSet uses sub-modifiers like $each / $slice
            _.each(_.keys(updateMap), function (keyName) {
               var formerVal = self._drillDown(existingDoc,keyName);
               if (typeof formerVal !== 'undefined') {
                inverseCommand = '$set';
                formerValues[keyName] = formerVal;
               } else {
                // Reset to empty array. Really should be an $unset
                inverseCommand = '$set';
                formerValues[keyName] = [];
               }
            })
            // formerValues = updateMap;
            break;

Instead of using $unset in the else block (which needs support for list of inverse commands, not just a single one), just use another $set to reset to an empty array.  Ideally, it should completely remove the property if the it was previously undefined.

Oh, also updated my transactions bug test repo with related tests:
https://github.com/rjsmith/meteor-transactions-bug-repo/commits/master

Thanks for this, Richard.  Am I right that something similar will need to be written for $addToSet?

Yes, I think so.
A $pull removes all instances of documents that match the given value or query.  So there could be multiple same-valued items removed in a single $pull. In order to restore the same number of items again, you would have to use $push with the right number of duplicated values .. yuk.
So, I think we would have to adopt the same brute force method as for $addToSet and store the entire original array to be restored with a $set.
Will need a test to ensure that multiple same-valued items removed with a $pull get restored properly  :-)

These transaction records could get very large, storing whole arrays. I guess there's no simple alternative.

Yes, but is totally dependent on storage capacity etc.
One thing would be to document the default strategies for computing inverse operations and point out possible issues.  Then, package users can make an informed decision if they wish to override the default with their own custom inverse functions (I haven't tried that myself, but I believe this package enables that, correct?)   Maybe you could even give an example alternative (e.g. use $addToSet / $pull instead of the default $set approach), and document pros / cons.

I agree that this stuff should be documented to allow the user to make informed choices.  It's pretty involved stuff to explain though.  I'll do my best. :-)

Hi @JackAdams. I have completed re-factoring all of the collection mutation code in my application using a local fork of meteor-transactions with the changes discussed above, and added a whole bunch of sanjo:jasmine tests to test undo / redo operations for each action.  So far, so good!
Have you had any time to look at the changes discussed above?
Here's the relevant code from my local fork at the moment:
        switch (inverseCommand) { // In case we need to do something special to make the inverse happen
          case '$inc' :
          case '$unset' :
          case '$set' :
            _.each(_.keys(updateMap), function(keyName) {
              var formerVal = self._drillDown(existingDoc,keyName);
              if (typeof formerVal !== 'undefined') {
                formerValues[keyName] = formerVal;
              }
              else {
                inverseCommand = '$unset';
                formerValues[keyName] = '';
              }
            });
            break;
          case '$pull' :
            // Brute force approach to ensure previous array is restored on undo
            // even if $addToSet uses sub-modifiers like $each / $slice
            _.each(_.keys(updateMap), function (keyName) {
               var formerVal = self._drillDown(existingDoc,keyName);
               if (typeof formerVal !== 'undefined') {
                inverseCommand = '$set';
                formerValues[keyName] = formerVal;
               } else {
                // Reset to empty array. Really should be an $unset
                inverseCommand = '$set';
                formerValues[keyName] = [];
               }
            })
            break;
          /*case '$push' :
            formerValues = updateMap;
            break;*/
          case '$addToSet' :
            formerValues = updateMap;
            break;
          case '$pullAll' :
            // TODO
            break;
          case '$pushAll' :
            // TODO
            break;
          default :
            // TODO
            break;
        }

I've thought about it a fair bit, but I haven't tried anything code-wise.  I'm still kind of torn between the robustness of the approach above and wanting the granularity of adding and removing single elements to prevent my confusing-for-both-users scenario from playing out.
That said, it's nice to have code that is passing a whole bunch of tests.  So I'm ready to commit this and release a new version if you think it's ready.
(I was trying to think my way through how to undo $pull and $addToSet without using $set but, as you said, it gets "yuk" real quick.  And you're right, if needed for an app, the dev can use custom inverse operations.)

How about leaving it unchanged in the code right now, but, similar to the tx.onTransactionExpired and tx.permissionCheck override functions, provide a tx.updateInverse function that is used, if defined.   That way, for example, I could provide my own 'brute-force' code, used for all tx - aware updates in my codebase.

So, I came with this, I think this perhaps the best compromise.  But it still keeps the door open to improve the default inverse strategy over time:
First the declaration of the default implementation at the top of the transactions_common.js file:
  // Function to work out the inverse operation that will reverse a single collection update command.
  // This default implementation attempts to reverse individual array $set and $addToSet operations with
  // corresponding $pull operations, but this may not work in some cases, eg:
  // 1.  if a $set operation does nothing because the value is already in the array, the inverse $pull will remove that value freom the array, even though
  //     it was there before the $set action
  // 2.  if a $addToSet operation had a $each qualifier (to add multiple values), the default inverse $pull operation will fail because $each is not suported for $pull operations
  //
  // You may wish to provide your own implementation that addresses these issues if they affect your own application.
  // For example, store the entire state of the array being mutated by a $set / $addToSet or $pull operation, and then restore it using a inverse $set operation.
  // The tx.inverse function is called with the tx object as the `this` data context.
  //
  this.inverse = function (collection, existingDoc, command, updateMap, opt) {
    var self = this;
    var inverseCommand = this._inverseOps[command];
    var formerValues = {};
    switch (inverseCommand) { // In case we need to do something special to make the inverse happen
      default :
        // TODO
      case '$inc' :
      case '$unset' :
      case '$set' :
        _.each(_.keys(updateMap), function(keyName) {
          var formerVal = self._drillDown(existingDoc,keyName);
          if (typeof formerVal !== 'undefined') {
            formerValues[keyName] = formerVal;
          }
          else {
            inverseCommand = '$unset';
            formerValues[keyName] = '';
          }
        });
        break;
      case '$pull' :
        formerValues = updateMap;
        break;
      /*case '$push' :
        formerValues = updateMap;
        break;*/
      case '$addToSet' :
        formerValues = updateMap;
        break;
      case '$pullAll' :
        // TODO
        break;
      case '$pushAll' :
        // TODO
        break;
    }
    return {command:inverseCommand,data:formerValues}; // console.log("inverse op: ",JSON.stringify(inverse));
  }

Then this code in the Transact.prototype.update function:
      var inverse;
      if (typeof opt === 'undefined' || typeof opt.inverse === 'undefined') {
        // var fieldName = _.keys(actionField[0][1])[0]; // console.log(fieldName);
        if (typeof opt === 'undefined') {
          opt = {};
        }

        inverse = this.inverse.call(self, collection, existingDoc, command, updateMap, opt);

      }
      else {
        // This "opt.inverse" thing is only used if you need to define some tricky inverse operation, but will probably not be necessary in practice
        // a custom value of opt.inverse needs to be an object of the form:
        // {command:"$set",data:{fieldName:value}}
        inverse = opt.inverse;
      }

Happy to put a PR together for this, with some documentation in README if you prefer this approach.

I like this.  It's cleaner than the big mess I have in tx.update at the moment too.  Will happily accept a PR. :-)

I was just thinking as I rode to school ...
The tx.inverse hash has a set of strings representing the various inverse operations.  What about refactoring so that the hash is now a set of minimalist functions that accepts the operation (string) and updateMap and returns the inverse action and formerValues?
This way, the dev doesn't have to overwrite the whole tx.inverse function, but can overwrite the inverses for individual operations.  It would mean breaking up tx.inverse and distributing it to tx.inverseOperations.

OK, working on a PR.
BUT, I have got stuck with another issue .. I really hope you can help. If a single collection update has 2 commands (say set and addToSet), the code here adds a doUpdate call to the execution stack for each command (in the actionField loop).  But, the doUpdate function uses the contents of the updates object to actually perform the updates.  This means it repeats the same update twice.  And the second update appears to be using updates argument that has gone through the packaging function first.
Not sure if this helps, but here's debug output from my application from within the Transact.prototype.update function:
command: $addToSet
updateMap: {"designs":{"designRequirementId":"CLhp6sGoC4aNNhYAT"},"impactTable":{"$each":[{"requirementId":"eCtJkZSMAggJF2cYb","baselineParameterId":"2r8LmehNPLMvwCqq5","targetParameterId":"KJtqBSWonwekwK6Qo","designRequirementId":"CLhp6sGoC4aNNhYAT","impactTargetParameterId":"RLwik7WcsjcCSSLpW"}]}}
Pushed update command to stack: zNTFPkbWGh43brWCm
command: $set
updateMap: {"lastUpdated":"2015-03-24T12:28:33.987Z","lastUpdatedBy":"s7EZgcK8FgjpKYx65"}
Pushed update command to stack: zNTFPkbWGh43brWCm

It shows it is adding 2 update commands to the execution stack from the same atomic collection update.
But, logging in doUpdate at the point it actually applies the updates shows it is doing the same thing twice:
Beginning commit with transaction_id: zNTFPkbWGh43brWCm
updating with updates:{"$addToSet":{"designs":{"designRequirementId":"CLhp6sGoC4aNNhYAT"},"impactTable":{"$each":[{"requirementId":"eCtJkZSMAggJF2cYb","baselineParameterId":"2r8LmehNPLMvwCqq5","targetParameterId":"KJtqBSWonwekwK6Qo","designRequirementId":"CLhp6sGoC4aNNhYAT","impactTargetParameterId":"RLwik7WcsjcCSSLpW"}]}},"$set":{"lastUpdated":"2015-03-24T12:28:33.987Z","lastUpdatedBy":"s7EZgcK8FgjpKYx65","transaction_id":"zNTFPkbWGh43brWCm"}}
Executed update
updating with updates:{"$addToSet":{"designs":{"designRequirementId":"CLhp6sGoC4aNNhYAT"},"impactTable":{"＄each":[{"requirementId":"eCtJkZSMAggJF2cYb","baselineParameterId":"2r8LmehNPLMvwCqq5","targetParameterId":"KJtqBSWonwekwK6Qo","designRequirementId":"CLhp6sGoC4aNNhYAT","impactTargetParameterId":"RLwik7WcsjcCSSLpW"}]}},"$set":{"lastUpdated":"2015-03-24T12:28:33.987Z","lastUpdatedBy":"s7EZgcK8FgjpKYx65","transaction_id":"zNTFPkbWGh43brWCm"}}
Executed update
Commit reset transaction manager to clean state

Either the doUpdate should be called once per invocation of Transact.prototype.update, or doUpdate should act on the updateData argument (which is different for each invocation).

I think I've got the solution to this.  Just testing now.  Will merge the PR soon.  Thank you for that, by the way -- it's just how I'd imagined it in my head (but also with documentation!).

I've just committed what I believe to be a fix for the doUpdate problem with multiple updates in a single update.  Let me know if it's still not working.  This was a quick, didn't-think-very-hard-about-it, didn't-test-it-properly fix. :-p

Thanks. I commented on the commit .. there is a problem with the anonymous function signature having two arguments with the same name.

Okay.  I think I've got it right this time.

OK, that seems to be much closer now, thanks, .. except when using a $each modifier for an $addToSet operation (to do with the $ - prefixed property again).. I have fixed part of it , but now it is failing when it then tries to store the updates object in the transactions collection again. Let me see if I can track that down.
Here's my fix:
        (function(updateData,inverse,execute) {
          this._executionStack.push(function() {
            doUpdate(collection,_id,restoreKeysIf1stCharacterWas$(updates),updateData,inverse,false,opt,callback,execute);
            self.log("Executed update");
          });
          this.log("Pushed update command to stack: " + this._transaction_id); //  + ' (Auto: ' + this._autoTransaction + ')'
        }).call(this,updateData,inverse,(i === (actionFieldsCount - 1)) ? true : false);

and the error I now get:
**updates:{"$addToSet":{"designs":{"designRequirementId":"iRtn3zBvEfu5mDqni"},"impactTable":{"$each":[{"requirementId":"BK3xrPKS9EJwZdvht","baselineParameterId":"TsNx9s8SeS69w4ddc","targetParameterId":"keM85Egd7DyuJKKai","designRequirementId":"iRtn3zBvEfu5mDqni","impactTargetParameterId":"Wqwd2PiAB8rrASzEZ"}]}},"$set":{"lastUpdated":"2015-03-25T08:03:25.042Z","lastUpdatedBy":"ww7r8rJt5fKk4vzmu","transaction_id":"RHzZdR4zjQm9fTrwt"}}
Executed update
{ [MongoError: The dollar ($) prefixed field '$each' in 'items.updated.0.update.data.1.value.$each' is not valid for storage.] stack: [Getter] }
Rolling back changes
Rollback reset transaction manager to clean state
{ [Error: Error: An error occurred, so transaction was rolled back. [error] [failed-to-attach-design]]
  error: 'failed-to-attach-design',
  reason:
   { [Error: An error occurred, so transaction was rolled back. [error]]
     error: 'error',
     reason: 'An error occurred, so transaction was rolled back.',
     details: { [MongoError: The dollar ($) prefixed field '$each' in 'items.updated.0.update.data.1.value.$each' is not valid for storage.] stack: [Getter] },
     message: 'An error occurred, so transaction was rolled back. [error]',
     errorType: 'Meteor.Error' },
  details: undefined,
  message: 'Error: An error occurred, so transaction was rolled back. [error] [failed-to-attach-design]',
  errorType: 'Meteor.Error' }

Ah yes... I think I can see what's happening here.  I'll try to solve it too.

It's all to do with trying to workround saving object keys with $ in them.  The recursive functions I wrote modify the argument .. so when I use it here: restoreKeysIf1stCharacterWas$(updates), it's modifying the updates object directly, instead of acting on a clone.
I was wondering perhaps there is a different way. In the _packageForStorage / unpackageForStorage functions, instead of storing the $ - modified object itself in the transactions collection, use JSON.stringify / JSON.parse to serialise the  commands to and from strings.

That would sure be a whole lot easier.  I'm totally open to exploring this possibility.
Interestingly, two different people have just released meteor packages for versioning in the last two days (after nothing happening in this space for two years):
https://atmospherejs.com/mickaelfm/vermongo and https://atmospherejs.com/todda00/collection-revisions
I haven't had a good look at them, but the vermongo package uses shadow collections (one for each collection) and the collection-revisions package stores revisions on the actual document itself.
So there we have it: three different approaches to undo/redo.  Of the three though, I think this is the only package attempting to do multi-document transactions.

This is the code I am working on now:
// This turns the data that has been stored in an array of key-value pairs into an object that mongo can use in an update

Transact.prototype._unpackageForUpdate = function(data) {
  var objForUpdate = {};
  _.each(data, function(val) {
    var unpackagedValue;
    if (val.value.json) {
      unpackagedValue = JSON.parse(val.value.json);
    } else {
      unpackagedValue = val.value;
    }
    objForUpdate[val.key] = unpackagedValue;
  });
  return objForUpdate;
}

// This turns the data that is given as a mongo update into an array of key-value pairs that can be stored

Transact.prototype._packageForStorage = function(update) {
  var arrForStorage = [];
  _.each(update.data, function(value,key) {
    var packagedValue;
    if (_.isObject(value) || _.isArray(value)) {
      packagedValue = {json:JSON.stringify(value)};
    } else {
      packagedValue = value;
    }
    arrForStorage.push({key:key,value:packagedValue});
  });
  return {command:update.command,data:arrForStorage};

}

This seems to be working nicely so far, all my tests are now passing (doesn't mean to say those tests are testing the right thing though!). It neatly bypasses needing to do the $ - handling.
However, I am concerned that the _unpackageForUpdate will be backwardly compatible with existing transactions collection documents in an existing system ...

Yeah. Might need some notes on the next release about compatibility. But I think this approach is easier to maintain and more robust than the one I had.
In most apps, I imagine the transactions collection can be blown away with impunity.
Sent from my iPad

On 25/03/2015, at 6:13 pm, Richard Smith<EMAIL_ADDRESS>wrote:
This is the code I am working on now:
// This turns the data that has been stored in an array of key-value pairs into an object that mongo can use in an update
Transact.prototype._unpackageForUpdate = function(data) {
var objForUpdate = {};
_.each(data, function(val) {
var unpackagedValue;
if (val.value.json) {
unpackagedValue = JSON.parse(val.value.json);
} else {
unpackagedValue = val.value;
}
objForUpdate[val.key] = unpackagedValue;
});
return objForUpdate;
}
// This turns the data that is given as a mongo update into an array of key-value pairs that can be stored
Transact.prototype._packageForStorage = function(update) {
var arrForStorage = [];
.each(update.data, function(value,key) {
var packagedValue;
if (.isObject(value) || _.isArray(value)) {
packagedValue = {json:JSON.stringify(value)};
} else {
packagedValue = value;
}
arrForStorage.push({key:key,value:packagedValue});
});
return {command:update.command,data:arrForStorage};
}
This seems to be working nicely so far, all my tests are now passing (doesn't mean to say those tests are testing the right thing though!). It neatly bypasses needing to do the $ - handling.
However, I am concerned that the _unpackageForUpdate will be backwardly compatible with existing transactions collection documents in an existing system ...
—
Reply to this email directly or view it on GitHub.

Cool. I will carry on testing for rest of today and send a PR by end of my day today (UK time), or give another update here .. thanks for your support.

Yes, I would love some help with bootstrapping a test repo. Is this best set up as a separate repo, or within the package repo?  For jasmine tests, it should be a separate repo/app, right?  And tiny-test unit tests should go in the package, right?  Please excuse my ignorance -- this is my first (long-overdue) foray into testing code.

I'll get back to you tomorrow, possibly with a PR :-)  I think there is a trick where you can set up a test app in the same repo, and point it's local meteor-transactions package to the same repo. It would be great to have it in the same repo, so commits can include source code changes and corresponding test changes together, for true TDD goodness.

Hi Richard, I've set up: https://github.com/JackAdams/meteor-transactions-tests
It's a public repo and it does have a file in there with this at the top:
/* Copyright (c) RSBA Technology Ltd 2015 - All Rights Reserved
 * Unauthorized copying of this file, via any medium is strictly prohibited
 * Proprietary and confidential
 */

Please let me know if I should remove this file. :-)

He he .. let me see if I can get the local testapp idea working tomorrow.... past my bedtime now :-0


Add userlimit to the channel struct

I'd add the ApplicationID, OwnerID and LastPinTimeStamp but I'm doing this in the web editor.

Thanks for the PR!


it is sometimes necessary to run latex three times

in order to get correct page numbers after generating the table of contents.

@morganthomas
Could give me a brief overview of why running it three times specifically is the solution? It seems an odd approach.

@DarthPJB , this is the de facto way to use LaTeX when your markup contains forward references. What do I mean by a forward reference? Here are some examples: a reference to a numbered equation which appears later than the reference; a citation which refers to a bibliography item declared after the citation; the page number of a section heading, included in the table of contents, earlier in the document than the section heading. Every forward reference is markup whose rendering depends on something later in the document. The thing is, TeX is very old software built for very old machines, and it is for this reason a single pass compiler, which means that there is no way to correctly implement forward references in a single run of TeX. Instead, you need to do a first run which generates some information that can be used to resolve forward references on a second run.
Sometimes a third run is necessary when the effect of inserting the forward references changes how those references should be rendered. For example, suppose the document contains a table of contents. The table of contents will not be rendered on the first run due to the lack of forward reference information available. On the second run, the table of contents will be rendered with the section headings and associated page numbers generated on the first run. The associated page numbers will likely be wrong on the second run, because the table of contents is part of the document, and inserting it may cause some or all of the page numbers where the section headings appear to change. That is why a third run is sometimes necessary.

Well, this seems to be valid explanation..
https://www.systutorials.com/why-do-i-need-to-run-latex-bibtex-three-times-to-make-everything-look-good/
So LGTM (look good to me + lets get this merged)


Update Starburst Presto to 323e

Relates to https://github.com/GoogleCloudPlatform/dataproc-initialization-actions/pull/703
cc @ChethanUK

/gcbrun

/gcbrun


default null value on nullable types caused errors

DefaultValue Null on Nullable types caused errors
This PR fixes the issues #2920 and  #2937
When serializing the default  value on a Nullable type on System.Text.Json the library was trying to serialize it as the not nullable type, this was not possible on STJ because it gave an exception.

Codecov Report
All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 90.10%. Comparing base (824253d) to head (2410717).

:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files
@@           Coverage Diff           @@
##           master    #2941   +/-   ##
=======================================
  Coverage   90.10%   90.10%
=======================================
  Files          72       72
  Lines        2730     2730
  Branches      432      432
=======================================
  Hits         2460     2460
  Misses        270      270

Flag
Coverage Δ

Linux
90.10% <100.00%> (ø)

Windows
?

macOS
?

Flags with carried forward coverage won't be shown. Click here to find out more.

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

@martincostello The two issues which are referencec in this PR are still open. Can they be closed now that this PR is merged?


Linting a binary files results in an exception

cfn-lint version: (cfn-lint --version)
0.7.2
Description of issue.
Attempting to lint a binary files results in an exception:
Please provide as much information as possible:

Template linting issues:

cfn-lint CloudFormationEndpointSignals.zip resulted in:
Traceback (most recent call last):
  File "/usr/local/bin/cfn-lint", line 11, in <module>
    load_entry_point('cfn-lint==0.7.2', 'console_scripts', 'cfn-lint')()
  File "/usr/local/lib/python3.6/site-packages/cfn_lint-0.7.2-py3.6.egg/cfnlint/__main__.py", line 30, in main
    (template, rules, template_matches) = cfnlint.core.get_template_rules(filename, args)
  File "/usr/local/lib/python3.6/site-packages/cfn_lint-0.7.2-py3.6.egg/cfnlint/core.py", line 245, in get_template_rules
    (template, matches) = cfnlint.decode.decode(filename, args.ignore_bad_template)
  File "/usr/local/lib/python3.6/site-packages/cfn_lint-0.7.2-py3.6.egg/cfnlint/decode/__init__.py", line 40, in decode
    template = cfnlint.decode.cfn_yaml.load(filename)
  File "/usr/local/lib/python3.6/site-packages/cfn_lint-0.7.2-py3.6.egg/cfnlint/decode/cfn_yaml.py", line 206, in load
    return loads(fp.read(), filename)
  File "/usr/local/lib/python3.6/site-packages/cfn_lint-0.7.2-py3.6.egg/cfnlint/decode/cfn_yaml.py", line 191, in loads
    loader = MarkedLoader(yaml_string, fname)
  File "/usr/local/lib/python3.6/site-packages/cfn_lint-0.7.2-py3.6.egg/cfnlint/decode/cfn_yaml.py", line 140, in __init__
    Reader.__init__(self, stream)
  File "/usr/local/lib/python3.6/site-packages/yaml/reader.py", line 74, in __init__
    self.check_printable(stream)
  File "/usr/local/lib/python3.6/site-packages/yaml/reader.py", line 144, in check_printable
    'unicode', "special characters are not allowed")
yaml.reader.ReaderError: unacceptable character #x0000: special characters are not allowed
  in "<unicode string>", position 0

cfn-lint CloudFormationEndpointSignals.zip
2018-10-26 00:51:40,695 - cfnlint.decode - ERROR - Cannot read file contents: CloudFormationEndpointSignals.zip
E0000 Cannot read file contents: CloudFormationEndpointSignals.zip
CloudFormationEndpointSignals.zip:1:1

So clean!

Resolved with #373


always opens the filedialog to save eveytime

Type: Bug
i am a python developer , earlier whenever i edit and file and run it and just directly run in the terminal in the app, But nowadays whenever i run my edited file it first asks me to save the file somewhere(opening the filedialog) again and again each time.This has become real frustating
VS Code version: Code 1.78.1 (6a995c4f4cc2ced6e3237749973982e751cb0bf9, 2023-05-04T09:48:08.683Z)
OS version: Windows_NT x64 10.0.19045
Modes:
Sandboxed: No

System Info

Item
Value

CPUs
Intel(R) Core(TM) i5-3210M CPU @ 2.50GHz (4 x 2494)

GPU Status
2d_canvas: enabledcanvas_oop_rasterization: disabled_offdirect_rendering_display_compositor: disabled_off_okgpu_compositing: enabledmultiple_raster_threads: enabled_onopengl: enabled_onrasterization: enabledraw_draw: disabled_off_okvideo_decode: enabledvideo_encode: unavailable_offvulkan: disabled_offwebgl: enabledwebgl2: enabledwebgpu: enabled

Load (avg)
undefined

Memory (System)
3.90GB (0.32GB free)

Process Argv
--crash-reporter-id 5b1521ae-ab63-48fd-b9ee-0ac8475e9d2a

Screen Reader
no

VM
0%

Extensions (16)

Extension
Author (truncated)
Version

exe-runner
bra
0.2.1

gc-excelviewer
Gra
4.2.57

bash-ide-vscode
mad
1.36.0

vscode-pdf
mat
0.0.6

isort
ms-
2022.8.0

python
ms-
2023.9.11302322

vscode-pylance
ms-
2023.5.20

jupyter
ms-
2023.4.1011241018

jupyter-keymap
ms-
1.1.0

jupyter-renderers
ms-
1.0.15

vscode-jupyter-cell-tags
ms-
0.1.8

vscode-jupyter-slideshow
ms-
0.1.5

remote-wsl
ms-
0.78.4

puppet-vscode
pup
1.4.0

vscode-yaml
red
1.12.2

LiveServer
rit
5.7.9

A/B Experiments
vsliv368:30146709
vsreu685:30147344
python383:30185418
vspor879:30202332
vspor708:30202333
vspor363:30204092
vslsvsres303:30308271
vserr242cf:30382550
pythontb:30283811
vsjup518:30340749
pythonptprofiler:30281270
vshan820:30294714
vstes263:30335439
pythondataviewer:30285071
vscod805:30301674
binariesv615:30325510
bridge0708:30335490
bridge0723:30353136
cmake_vspar411:30581797
vsaa593:30376534
pythonvs932:30410667
cppdebug:30492333
vsclangdc:30486549
c4g48928:30535728
dsvsc012:30540252
pynewext54:30695312
azure-dev_surveyone:30548225
282f8724:30602487
pyind779:30671433
89544117:30613380
pythonsymbol12:30671437
showlangstatbar:30737416
vsccsb:30705552
azdwalk:30721579
pythonms35:30701012
pythonfmttext:30731395
pythoncmvfstr:30731969
fixshowwlkth:30730052
hidesbindicator:30730055

Fix should be out in the pre-release version of the extension in a day, use the following to try it out:

Make sure to be using VSCode Insiders: https://code.visualstudio.com/insiders/

Because we have not heard back with the information we requested, we are closing this issue for now. If you are able to provide the info later on, then we will be happy to re-open this issue to pick up where we left off.


New Package: Microsoft.WindowsAppRuntime.1.1 version 1.1.5

- [X] Have you signed the Contributor License Agreement?

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

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

Microsoft Reviewers: Open in CodeFlow

@wingetbot waivers Add Validation-Executable-Error Validation-Domain


Respect implicit encoding of thorfiles

🌈  fixes #776

PS this has the #780 PR in it - will need to rebase once it has been merged.

@dorner @deivid-rodriguez I've rebased this on main, now it's (mostly) green


Moving custom_css/js to plugins_css/js causes inconvenience to submodule workflow

Hi,
In a recent break change https://github.com/gcushen/hugo-academic/issues/867, custom_css/js were renamed to plugins_css/js and now custom JS/CSS will be loaded from assets/ instead of static/.
However, this brings some inconveniences. I guess many people, just like me, clone academic theme as a submodule in their git repo. But now we can only place custom.css in this very submodule directory, i.e. REPO_DIR/theme/hugo-academic/assets/css/, and leave an unclean git status.
I've tried to place custom.css under REPO_DIR/assets/css/ or REPO_DIR/static/css/ and modified plugins_css = ["custom"] in params.toml, but hugo just reported an error: "themes/hugo-academic/assets/css/custom.css: no such file or directory".
Well, of course I can manually deal with the submodule git status every time I do update. I just wonder if there is a better solution.
I'm very new to hugo, so if there is any misunderstanding please let me know.
And thanks very much for this brilliant theme.

The plugins should not be placed in the themes/ directory. As per the docs, they should be placed in the REPO_DIR/assets/css folder (creating it if it doesn't exist).
You can see custom CSS working live on the Documentation site: https://github.com/sourcethemes/academic-www/tree/master/assets/css .
If there are still issues, create a fresh install with the latest version and try adding the CSS plugin. Also, consider the support forums.

Follow up:
I tried to place custom css under REPO_DIR/assets/css before and have tried that again, it still reported "no such file or directory" error.
In order to get a reproducible example, I created a fresh directory as suggested. However, both academic-kickstart and RStudio's blogdown::new_site() approaches work fine. So I guess I've probably messed up something during my customization. After removing the public/ and re-building, custom css works as expected now.
Thanks.


vcpkg_apply_patches fails to apply patch

Hi,
I am trying to write my first portfile for LMDB as stated in issue #385.
However, I have an issue where vcpkg_apply_patches fails to apply the patch with the following error message: fatal: git apply: bad git-diff - expected /dev/null on line 4. The error seems to be related to the fact that the patch file has CRLF line endings since when I change them to LF everything works fine.
The LMDB release zip archive contains LF line endings so I tried to replace those with CRLF to see if this would also fix the issue but it does not.
I can think of two ways to fix this issue:

Patch the patch file with some shell or CMake command before applying it
Use .gitattributes to force all .patch files to have LF line endings on checkout.

However, most patches have CRLF line endings and do apply correctly so there must something I am doing wrong. Any ideas on what this could be?
The port file can be found at https://github.com/willyd/vcpkg/tree/lmdb

The issue seems to occur only when there are new (and potentially deleted) files. For some reason I don't understand the line /dev/null (specifying that there is no file to compare to) did not like to end with CRLF.
Is the expected? Currently my workaround is to use a patch for existing files and copy the new files using a file(COPY) command in the portfile.

I haven't seen this issue before. Thanks for opening it, you've suggested a good workaround.
If someone else hits this issue, we can investigate further. It might be a bug in git's patch implementation, in which case a good fix would be for us to add patching as a builtin vcpkg function that we can address problems in.

in #9966 I had to add: -c core.autocrlf=false to vcpkg_apply_patches
complete command:
COMMAND ${GIT} --work-tree=. --git-dir=.git -c core.autocrlf=false apply "${ABSOLUTE_PATCH}" --ignore-whitespace --whitespace=nowarn --verbose

This sholud not be a problem now, currently core.autocrlf=false has configured to vcpkg_apply_patches.


Modularize C++ shards build

Shards should be split into separate "modules" that can be individually enabled/disabled.
Configuring could look like cmake -Bbuild -DSHARDS_IMGUI=ON -DSHARDS_HTTP=OFF -DSHARDS_PROFILING=ON
CMake config could look like:
add_shards(imgui
  context.cpp
  elements/label.cpp
  ...
)
add_shards_dependency(imgui graphics)

The system will then take care of shard registration and dependency management
For example we can enable/disable imgui when we no longer need to ship it but want to keep the implementation around

Hey team! Please add your planning poker estimate with ZenHub @inabe-a @Kryptos-FR @sinkingsugar


fix(TDI-47122): Metadata details are not loaded from Snowflake

What is the current behavior? (You can also link to an open issue here)
https://jira.talendforge.org/browse/TDI-47122
What is the new behavior?
https://jira.talendforge.org/browse/TDI-47122
Please check if the PR fulfills these requirements

[x] The commit message follows Talend standard
[ ] Tests for the changes have been added (for bug fixes / features)
[ ] Docs have been added / updated (for bug fixes / features) ?
[ ] The code coverage on new code >75%
[ ] The new code does not introduce new technical issues (sonar / eslint)

What kind of change does this PR introduce?

[x] Bugfix
[ ] Feature
[ ] Code style update (formatting, local variables)
[ ] Refactoring (no functional changes, no api changes)
[ ] Build / CI related changes
[ ] Other... Please describe:

Does this PR introduce a breaking change?

[ ] Yes
[x] No

Pull request test result: failure :x:

Pull request test result: failure :x:

Pull request test result: failure :x:

https://jenkins-connectors.datapwn.com/job/components/job/build/job/wwang-talend%252FTDI-47122/ pass test


Link to upgrading to Shake 0.16

https://tech-blog.capital-match.com/posts/5-upgrading-shake.html has a lot of useful information about custom rules. Should something along that be in the test suite? Should it be linked to from the docs?

Done.


Exposing the event recorder to allow other controllers to create events

Solves #1097 for the ALB controller use case

This change is

Coverage increased (+0.009%) to 44.75% when pulling d0e4ddc1fd33f148a94673f1b0be6cda02f434bb on Ticketmaster:recorder into 198c926bb91ea08af673114b491b5d31535769df on kubernetes:master.

/lgtm

@bigkraig thanks!


Add ALWAYS_INCLUDE_CLIPBOARD option

For those who might want it, I added a bool option for always including the clipboard content (defaults to False).
To reduce the risk of the AI chattering about the clipboard content when the user asks about something else, I also edited the passed-along text to include (ignore if user doesn't mention it), which makes a clear improvement for Llama 3 8B.

Oh, I should also mention: the reason I reduced THE USER HAS THIS TEXT COPIED TO THEIR CLIPBOARD to just CLIPBOARD CONTENT is because the AI (Llama 3 8B) tended to say things like "The user seems to have text copied to their clipboard" and so on. I felt it responded more naturally after making that change.


Add travis test suite

Add travis test suite for the repo

closed via https://github.com/hipster-labs/generator-jhipster-entity-audit/commit/62f6328e07c0a1a465c9e08e5f70c12e449b0b04


Bump Bleep to 1.5.6-sc-4

https://github.com/scala-cli/bloop-core/releases/tag/v1.5.6-sc-4

Should fix #1781 right?

Yes, so I linked this issue into this PR.


attempt to add pypi upload

add pypi upload for windows for tagged master

Codecov Report

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

@@           Coverage Diff           @@
##           master      #86   +/-   ##
=======================================
  Coverage   67.09%   67.09%
=======================================
  Files          14       14
  Lines         699      699
=======================================
  Hits          469      469
  Misses        230      230

Continue to review full report at Codecov.

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

closing: decided to switch our deployment strategy


Fixed #23155: Added request argument to user_login_failed

https://code.djangoproject.com/ticket/23155

Looks good. Any concerns with these edits? http://dpaste.com/32TMW7M
(in particular, can you spot any problems with making _request an explicit argument of authenticate()? I don't think there's any backwards compatibility concerns since the function doesn't accept position args.

The disadvantage of making it an explicit argument is that now it can be
passed as the first positional argument. This has caused confusing errors
for me in the past when I mistakenly pass a keyword argument as a
positional argument.
I thought about using the python3 keyword-only argument syntax in the docs,
to make the request argument more clear:
authenticate(*, _request=None, **credentials)

But I'm not sure if that's acceptable because it's specific to python 3.

I guess I'd rather have a more self-explanatory function signature than obfuscate the code a bit and have to scan the function to see what kwargs are popped off, but other opinions are welcome.
I'm not familiar with that syntax you proposed, so I think it would probably cause some confusion.

I'd prioritize good error messages, but it's up to you.

The discussion continues on the ticket. Gavin, maybe you want to assign it to yourself so you get notified of comments.

Closing due to inactivity and the alternate direction proposed on the ticket.

Rebased following 4b9330ccc04575f9e5126529ec355a450d12e77c and merged in f0f3de3c96694fd3602541fa6074930667509ac8, thanks!


LaTeX/TikZ output appears to be missing required style definitions

The LaTeX/TikZ output from this script is a forest environment, but it uses three style keys that appear to have no definition: index, outdex, and move=canonical.
Would you be able to share how those are expected to be defined?
Thanks.

This is an example of a full-fledged .tex file with styles defined (these are taken from Graf et al. 2017) - adding this to next release, thanks (remember not to leave empty lines between "]" and "\draw"...)
sample_forest_tree.zip


[ros_comm/test_roslaunch] test_roslaunch.rosunit-roslaunch_command_line_online/test_roslaunch [ERROR]

[noop.launch] is neither a launch file in package [roslaunch] nor is [roslaunch] a launch file name
[test_roslaunch.rosunit-roslaunch_command_line_online/test_roslaunch][ERROR]----
Command '['roslaunch', '--wait', 'roslaunch', 'noop.launch']' returned non-zero exit status 1
File "C:\opt\python27amd64\lib\unittest\case.py", line 329, in run
testMethod()
File "D:\a\1\a_ws\src\ros_comm\test\test_roslaunch\test\test_roslaunch_command_line_online.py", line 62, in test_roslaunch
check_call([cmd, '--wait', 'roslaunch', 'noop.launch'])
File "C:\opt\python27amd64\lib\subprocess.py", line 190, in check_call
raise CalledProcessError(retcode, cmd)

https://github.com/ms-iot/ros_comm/pull/33
added the noop.launch file as part of the test_roslaunch package


Create User Guide for CS2101

Create User Guide for CS2101 with slightly modified tone and language
Update images
Update Quick Start section

close #284


Uncaught initial bisect points must have opposite signs

I have been having a problem with an exception being thrown from venn.js with various datasets. These datasets appear to be valid sets.
I have create a JSFiddle with a simplified example that generates the exception:
http://jsfiddle.net/mpelikan/F8cL3

Hello,
I have the same error with the following data on the current master branch code:
Group1 : 66
Group2 : 86
Group3 : 573
Group1,Group2 : 9
Group1,Group3 : 66
Group2,Group3 : 86
Group1,Group2,Group3 : 9
It's related to the "Group1,Group3" which fully overlap the Group1. If put 65 as value for "Group1,Group3", I get rid of the error.
Regards

Its working for me =(. This code:
var sets = [
{sets: ['Group1'], size: 66},
{sets: ['Group2'], size: 86},
{sets: ['Group3'], size: 573},
{sets: ['Group1','Group2'], size: 9},
{sets: ['Group1','Group3'], size: 66},
{sets: ['Group2','Group3'], size: 86},
{sets: ['Group1','Group2','Group3'], size: 9}]

var chart = venn.VennDiagram();
d3.select("#venn").datum(sets).call(chart);

Produces this output:

Hello,
my mistake indeed. I figured out that the conversion of my data to the variable sets was setting the size value as an array with the size value instead of a integer directly.
I apologize for that and thanks.

For future reference, this error could also be generated when you are passing your data as strings in the "Size" parameter:
{sets: ['Group1'], size: "66" }, => generates : Uncaught initial bisect points must have opposite signs
Make sure : size: 66


Compiling haxelib server on Haxe 4

Issue to keep track of things that are forcing us to continue building the haxelib server with Haxe 3:

[x] record-macros - see: https://github.com/HaxeFoundation/record-macros/pull/62
[ ] ufront-mvc - see: https://github.com/ufront/ufront-mvc/pull/72
[ ] ufront-ufadmin - see: https://github.com/ufront/ufront-ufadmin/pull/5
[ ] ufront-easyauth - see: https://github.com/ufront/ufront-easyauth/pull/9
[ ] ufront-mail - see: https://github.com/ufront/ufront-mail/pull/4

A lot of these projects are no longer maintained so we may need to create forks.

I have merged all of these PRs, let me know if you need anything else ufront-wise!

Thanks!


feat(alert): [alert] Add unlimited theme switching function to adapt to alert unlimited themes

… unlimited themes
PR
PR Checklist
Please check if your PR fulfills the following requirements:

[ ] The commit message follows our Commit Message Guidelines
[ ] Tests for the changes have been added (for bug fixes / features)
[ ] Docs have been added / updated (for bug fixes / features)

PR Type
What kind of change does this PR introduce?

[ ] Bugfix
[ ] Feature
[ ] Code style update (formatting, local variables)
[ ] Refactoring (no functional changes, no api changes)
[ ] Build related changes
[ ] CI related changes
[ ] Documentation content changes
[ ] Other... Please describe:

What is the current behavior?

Issue Number: N/A
What is the new behavior?
Does this PR introduce a breaking change?

[ ] Yes
[ ] No

Other information


Diffrent result using REST API 'api.parse.com' and 'Local parse server'

I try to migrate my local server.
Migration was success.
But I have a problem while use REST API and same parameter.
These are parameters.
include:companyId.logo
limit:100
order:-createdAt
where:{"createdAt":{"$gte":"2016-02-17T15:00:00.000Z"},"visible":{"$ne":false}}
This is url for api.parse.com.
https://api.parse.com/1/classes/Job?include=companyId.logo&limit=100&order=-createdAt&where={"createdAt"%3A{"%24gte"%3A"2016-02-17T15%3A00%3A00.000Z"}%2C"visible"%3A{"%24ne"%3Afalse}}
This is url for local server.
http://www.easyk.co.kr/parse/classes/Job?include=companyId.logo&limit=100&order=-createdAt&where={"createdAt"%3A{"%24gte"%3A"2016-02-17T15%3A00%3A00.000Z"}%2C"visible"%3A{"%24ne"%3Afalse}}
Response is OK.
But results are not same.
Another case, results are same.
These are parameters.
include:companyId.logo
limit:200
order:-createdAt
where:{"expired_at":{"$gte":{"__type":"Date","iso":"2016-02-17T15:00:00.000Z"}},"visible":{"$ne":false}}
This is url for api.parse.com.
https://api.parse.com/1/classes/Job?include=companyId.logo&limit=200&order=-createdAt&where={"expired_at"%3A{"%24gte"%3A{"__type"%3A"Date"%2C"iso"%3A"2016-02-17T15%3A00%3A00.000Z"}}%2C"visible"%3A{"%24ne"%3Afalse}}
This is url for local server.
http://www.easyk.co.kr/parse/classes/Job?include=companyId.logo&limit=200&order=-createdAt&where={"expired_at"%3A{"%24gte"%3A{"__type"%3A"Date"%2C"iso"%3A"2016-02-17T15%3A00%3A00.000Z"}}%2C"visible"%3A{"%24ne"%3Afalse}}
These results are same.
Why not same upper case?
I don't know..
Parse server not fully support REST API?
Thanks,
p.s
I try change to Parse Javascript SDK. This way is OK. I think that 'createdAt' has problem using REST API.

Can you put the actual output in a gist or a text file and attach it here, since we can't quite see the difference based on URLs, since the api keys/app ids are not specified.

It doesn't look like the URLs are different, so lets not focus there... If you're still having an issue with the latest version, please open a new issue and describe the differences in the results.  Thanks.

Hi ,
Issue is there for me too. See the attachments . Obviously there is an entry after date 2017-01-02T04:58:01.157Z , greater than query returns nothing . Please help.

@shebinceino Hi, I have a solution for this problem.
I changed query below.
{"createdAt":{"$gte":today},"visible":{"$ne":false}}
-> {"createdAt":{"$gte":{"__type":"Date", "iso":today}},"visible":{"$ne":false}}
I hope it helps ^^

Thanks. Its working


Migrate to beam fully.

Remove mentions of previous repo.
Reference datatractor stuff where possible.

Yeah, I forgot those moved too.


Oops something went wrong (Message to /p dispose confirmar)

Issue description
If you delete a parcel with the command of / p dispose confirm, it appears in Spanish "Ups something went wrong" but that message should only appear when something has not worked well, in this case if you delete the user's parcel, only the displayed text is wrong

Expected result: That the message of dispose.success=La parcela se ha eliminado
Actual result: That the message of error=Ups! Algo salió mal

Steps to reproduce the issue

Buy a plot
Use /p dispose confirmar
Message appears

OS and versions

Plugin Version: Dev731
PocketMine-MP: 3.22.0
PHP: 7.4
Game version: Win10

Other Plugins
Some plugins are private

If you remove all other plugins, does the issue still occur? I didnt test it because i dont have more servers
If the issue is not reproducible without other plugins:

Have you asked for help in the community discord before creating an issue?
Can you provide sample, minimal reproducing code for the issue? If so, paste it in the bottom section.

Console error, backtrace or other files

Is this issue still present with the latest build?

Fix issue #423 because Myplot won't load and I can't test it
@jasonwynn10

Still happening in version 751
@jasonwynn10

Does the command sender had the admin permission for dispose?

Does the command sender had the admin permission for dispose?

Yes i got op


request: trim headers values also when there is no name

As is done by libhtp-rs
Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=59750&q=label%3AProj-libhtp

Information: QA ran without warnings.
Pipeline 20471

Merged in #424, thanks!


Sentinel deployment

Creating a pull request of the new code into main repo.

Merge to include the new ingestion.


Exported Curseforge packs are not compatible with ATLauncher

When trying to import a zip file generated by packwiz curseforge export, it fails with the error:
com.atlauncher.network.DownloadException: https://api.curseforge.com/v1/mods/0 request wasn't successful: Response{protocol=http/1.1, code=404, message=Not Found, url=https://api.curseforge.com/v1/mods/0}

This is due to this line in the manifest.json, directly below "author", above "files":
  "projectID": 0,

Deleting that line makes it work. I have not tested other launchers.

You can specify which project ID your curseforge pack has in pack.toml, with the following format:
[export.curseforge]
project-id = 1234

I believe packs without a project ID (or with a project ID of 0) do still work in the CurseForge launcher though - this could still be fixed in ATLauncher, you shouldn't need to upload a pack to CurseForge to import it.


The side menu is empty if the templateUrl content include inner directives

Hi @dbtek , great job.
I'm trying to use this library, but if I include directives in the templateUrl content- the side menu is empty.
The directive I'm trying to use in the templateUrl content is Accordion which is part of the augular-ui library.
any help will be great.
Idanb11

Hi @idanb11,
I think it's related to something else. I successfully used accordion inside aside. You can see it in this plunk.

OK, I see.
My problem is because I'm trying to access something from the main controller scope inside the templateUrl content


I don't find weighted Triplet loss with Softmargin in the code

For the fine-grained classification tasks (Stanford-cars and Oxford-Flowers) I don't find weighted Triplet loss with Softmargin in the code

We don't intend to share our Triplet loss code.

Oh, but when I train on standford-cars, using this commond python  ./train.py /hdata/Stanford_Cars/devkit/ -b=190 --lr=0.6 --model-ema --aa=rand-m9-mstd0.5-inc1  --amp --model=tresnet_m --epochs=300 --mixup=0.2 --sched='cosine' --reprob=0.4 --remode=pixel, I get Acc@1 94.915 and Acc@5 99.215. It is very impressive just using the middle model

it is impressive, but sorry, the triplet code is a commercial propriety, I cannot release it.
try increasing resolution and using the larger model, maybe you can beat my 96.0%


Add background-color: #fff to .avatar-child

Recommendation from a support request; should ensure any child avatar in the pairing is visible even with a transparent background.

Why not on .avatar? I think that all .avatar-child are like this class="avatar avatar-child"

@jonrohan I didn't want to unnecessarily style all avatars given most of them appear on white anyway. If we need to later, I'm down to redo this and extend it to more avatars.


How to process audio signal using Simulink

Topic Suggestion
How to process audio signal using Simulink
Writing sample(s):
https://www.section.io/engineering-education/how-to-use-edge-histogram-descriptor-to-retrieve-images-in-matlab/
How to process audio signal using Simulink
Proposed article introduction
Simulink is a dynamic and software Matlab integrated simulation and model design system. Simulink is a graphical programming language data flow tool for modelling, simulating and analyzing models. It’s essentially a diagrammatical framework with customizable block library packages, product style control, traceability criteria, and application coverage analysis. Using this software, we can create models to process audio signals.
This tutorial presents some basic processing of Audio signals using Simulink. We are implementing FIR low pass filter to remove white Gaussian noise in an audio signal. Also, a graphic equalizer is implemented to produce various sound effects such as Pop, Rock, Jazz, etc. Few other popular sound effects such as Echo, Flange and Reverb are also realized in SIMULINK.
Key takeaways

Basic Filtering: Low Pass FIR filter to remove white Gaussian noise.
How to perform graphic Equalizer of 10bands using Simulink.
The echo, flange, and reverb effect using Simulink.
Simulink simulation of these processes.

Article quality
This article shows how to simulate different models to process audio signals using Simulink. The simulations are well explained, and the different blocks to use.

Good afternoon and thank you for submitting your topic to the EngEd program.
After some careful consideration it struck us that this topic may be a bit over saturated throughout other blog sites and official documentations. We typically refrain from publishing content that is covered widely on the net or other blogs. We're more interested in original, practitioner-focused content that takes a deeper dive into programming-centric concepts.
But in order to approve the topic it has to serve value to the larger developer community at large. Please feel free to suggest an alternate topic to explore. 🚀
An option and a great way to write this as an in-depth article and make it more add value to the greater developer community at large would be to walk the reader through the USE of methods and functions by building a unique, different, useful project.
If you believe your article is unique enough - please present your case to explain how it will be different from what is currently out there?
https://www.google.com/search?q=audio+signal+using+Simulink&rlz=1C1CHBF_enUS891US891&sourceid=chrome&ie=UTF-8


Find a way to cache reposts per account instead of globally

https://github.com/YNedderhoff/citytweets/pull/191


[WIP] Allow Free Variables anywhere

DON'T PANIC - ALPHA QUALITY CODE
This is a refactor to allow free variable to be defined anywhere outside the quoted blocked. The code is a little bit messy yet and there are a few things to do. But I want your opinion before moving forward.
Fixes #302
Problem
We should be able to use free variables as free as possible.
Examples:
With inlined quotation
val freeVariable = Product(0L, "test1", 1L)
db.run(quote { product.insert(_.sku -> freeVariable.sku, _.description -> freeVariable.description) })

With quotetaion defined outside of run
val freeVariable = Product(0L, "test1", 1L)
val q = quote { product.insert(_.sku -> freeVariable.sku, _.description -> freeVariable.description) }
db.run(q)

Or with method
def productInsert(prd: Product) = quote {
    product.insert(_.description -> prd.description, _.sku -> prd.sku)
}
val freeVariable = Product(0L, "test1", 1L)
val q = quote { productInsert(freeVariable) }
db.run(q)

Solution

Extract the free variable from the quoted block using Traverser see
Refactor Parsing to allow passing a free variable list [see] (https://github.com/getquill/quill/blob/free-vars-anywhere/quill-core/src/main/scala/io/getquill/quotation/Quotation.scala#L29)
During parsing, create CompileTimeBinding with the tree reference to the free variable
Convert CompileTimeBinding to Binding during Lifting. see
In Quotation.quote, define binding methods (def binding_$key) to the Free Variables. see
In SourceMacro.run, extract bindings defined during quotation through reflection see

Notes
Checklist

[ ] Unit test all changes
[ ] Update README.md if applicable
[x] Add [WIP] to the pull request title if it's work in progress
[ ] Squash commits that aren't meaningful changes
[ ] Run sbt scalariformFormat test:scalariformFormat to make sure that the source files are formatted
[ ] Fix issue with dynamic quotation

@getquill/maintainers

@getquill/maintainers This PR is ready for testing, can you guys take a look and test it if possible? Thanks.

Sorry for the late feedback, the last weeks have been very busy to me. The approach seems great and requires less changes than I thought. 👏
I think we don't need to change Parsing to use a stack, traveling the AST two times is a simpler solution.
@jilen @lvicentesanchez Would you have some time to test this branch? I won't be able to test it in the next days. :(

@fwbrasil I will be able to test it tonight or tommrrow. Note that I am living in timezone GMT +8, day and night may differs.

    def test0(i: Int, j: String) = {
      val q = quote(query[Person].filter(_.id == i).filter(_.name == j))
      QDB.run(q).futureValue shouldBe a[List[_]]
    }

    def test1(i: Int, j: String) = {
      val q1 = quote(query[Person].filter(_.id == i))
      val q2 = quote(q1.filter(_.name == j))
      println(QDB.run(q2).futureValue)
    }

    def test2(p: PersonQuery) = {
      var q: Quoted[EntityQuery[Person]] = quote(query[Person])
      p.name.foreach { n =>
        q = quote(q.filter(_.name == n))
      }
      p.id.foreach { i =>
        q = quote(q.filter(_.id == i))
      }
      QDB.run(q).futureValue shouldBe a[List[_]]
    }

    def test3(id: Long, p: Person) = {
      //QDB.run(query[Person].filter(_.id == id).update(p)) not compile
      QDB.run(query[Person].filter(_.id == id).update)(p)
    }

    def test4(name1: String, name2: String) = {
      val q1 = quote(query[Person].filter(_.name == name1))
      val q2 = quote(query[Person].filter(_.name == name2))
      val q = quote {q1.join(q2).on { (p1, p2) =>
        p1.id == p2.id
      }
      }
      QDB.run(q)
    }
    test0(1, "foo") //OK
    test1(1, "foo") // [info]   java.util.NoSuchElementException: key not found: 350392579
    test2(PersonQuery(name = Some("foo"), id = Some(1))) // java.lang.StackOverflowError
    test3(1, Person(1, "ffffffff",  111)) // Number of bindings doesn't match the question marks.
    test4("foo", "bar") // Number of bindings doesn't match the question marks

Above five queries all compile, but only first one runs fine.

@jilen thanks for testing, I think I know what is happenning.

@jilen except for dynamic quotation, the other examples shoud be working now.

@gustavoamigo Do you plan to support such kind of dynamic query ?

@jilen I am working on supporting dynamic queries.

@jilen supporting dynamic queries won't be easy.

@gustavoamigo If it need too much work, we could do it in another pr

@getquill/maintainers This PR should be ready for merging. There are two issues that were not solved though:

tech-debt: Replace FreeVarTraverser with FreeVariables transformation in order to avoid using Scala's Macro Api.
Dynamic Queries with Free Variables is not yet possible. At first glance, it seems to be not so easy to solve this issue.

👍 please make sure to open issues for the pending work

:+1:

Sorry for not giving feedback sooner (I have been quite busy lately and I have moved to a new flat where I still don't have internet).
I have found a couple of issues with this that I don't know if they are expected or not. This CQL query,
  def playerScoreForLevel(playerId: PlayerID, level: Level) =
    quote {
      query[Score].filter(
        score => score.custId == playerId && score.level == level
      )
    }

is returning these two errors.
error] /Users/luissanchez/development/repositories/github/lvicentesanchez/cassie/src/main/scala/io/github/lvicentesanchez/db/queries/ScoreQueries.scala:11: Result type in structural refinement may not refer to a user-defined value class
[error]     quote {
[error]           ^
[error] /Users/luissanchez/development/repositories/github/lvicentesanchez/cassie/src/main/scala/io/github/lvicentesanchez/repos/ScoreRepo.scala:31: exception during macro expansion:
[error] java.lang.IllegalStateException: Invalid cql: 'playerId'

If I make Level and PlayerId non-value classes, you only get:
[error] /Users/luissanchez/development/repositories/github/lvicentesanchez/cassie/src/main/scala/io/github/lvicentesanchez/repos/ScoreRepo.scala:31: exception during macro expansion:
[error] java.lang.IllegalStateException: Invalid cql: 'playerId'

Should this have work? Do we have to implement something in the idioms? Let me know if this is indeed a bug and I will create the issue.

And... another thing:
    quote {
      query[Score].filter(
        score => score.custId == PlayerID("23") && score.level == Level("1")
      )
    }

Should something like that work?
Right now the error I'm getting is:
[error] /Users/luissanchez/development/repositories/github/lvicentesanchez/cassie/src/main/scala/io/github/lvicentesanchez/repos/ScoreRepo.scala:31: exception during macro expansion:
[error] java.lang.IllegalStateException: Cql doesn't support functions. Found: 'io.github.lvicentesanchez.data.PlayerID.apply("23")'
[error] 	at io.getquill.util.Messages$.fail(Messages.scala:8)

@lvicentesanchez  I think both are new cases, can you open an issue for each problem?


UX: Launch a REPL with libraries in the classpath in a single command

It would be great if coursier could launch a REPL with some libraries in the classpath in a single command, something like:

cs repl -v 2.13.5 -l 'org.typelevel::cats-core:2.6.0'

It probably should also support setting scalac and jvm flags... but I think most people would be more than ok with just setting the version of the REPL and adding some libraries.
Note that as of today this is possible but requires multiple manual steps like installing the REPL and setting the classpath.

It's already possible to do that kind of things using the launch command, and passing either the scala or ammonite applications first, like
$ cs launch ammonite org.typelevel::cats-core:2.6.0
Loading...
Welcome to the Ammonite Repl 2.3.8-65-0f0d597f (Scala 2.13.5 Java 11.0.7)
@ import cats._
import cats._

@ Bye!

$ cs launch scala org.typelevel::cats-core:2.6.0
Welcome to Scala 2.13.4 (OpenJDK 64-Bit Server VM, Java 11.0.7).
Type in expressions for evaluation. Or try :help.

scala> import cats._
import cats._

scala>
:quit

Both commands accept an explicit Scala version, using the --scala option, like --scala 2.13.5.

@alexarchambault coursier never ceases to amaze me. 😮
Thanks for the pointer and for the amazing tool!
May I just say that this example should be in the docs? I think many people would also benefit from it.

May I just say that this example should be in the docs? I think many people would also benefit from it.

Definitely. Feel free to add it, in a new "Examples" page under "Command-line" for example.


Feature idea for E2, Templates for fresh E2s

I was told to go here for this feature idea after i asked about it on the discord!
Its a simple idea really, its just the ability to have templates open, so you dont always start with the basic "@name @inputs" etc, but instead you can choose freely, so i.e i'd choose to start with "@name @inputs W A S D if(first()|dupefinished()) {} " and what not, it feels like a useful idea, because i rarely dont use the if first statement, so it'd be nice to have it always there :)

Want to do that, so I've asked him to create an issue here, so it doesn't get lost.
Basic implementation idea (once I'm done with popup lib):
New auto-gen file: _templates/default.txt to where the current default e2 content goes.
On new e2 created - if there is more then 1 file in _templates > dialog opens (that can be blocked, and then unblocked from settings) that prompts user to selected template to choose from.
Also examples and tutorials can go there in _tutorials or whatever subfolder

Yes, yes, and with templates we can stop people from using if(first()) and force @trigger none...

Yes, yes, and with templates we can stop people from using if(first()) and enforce @trigger none...

I feel targeted by this comment... ( ͡° ͜ʖ ͡°)

On new e2 created - if there is more then 1 file in _templates > dialog opens (that can be blocked, and then unblocked from settings) that prompts user to selected template to choose from.

I don't know how viable it is with the setup we have, but I feel like ideally templates would be loaded by a hyperlink in the editor.
Maybe instead we could make a landing page? Meh.
Landing page example

Either of these suggestions make me want to try and see how bad an HTML E2 editor could be.

Maybe instead we could make a landing page? Meh.
Such page would be nice on first opened file. But not when you want to create a new file, that's for sure.

"not a bug" isnt used for suggestions. convert it to a discussion

Oh yeah


tsconfig exclude not adhered to in subdirectories of a monorepo

Current Behavior
When using a monorepo, I'd like to minify the amount tsconfig I am defining per package. To that end, the value of the exclude property at the root config is being ignored when building TSDX packages in their own subdirectories.
You can test for yourself thru this example project by doing:
yarn install
yarn workspace @innocuous/components add @innocuous/hooks
yarn workspace @innocuous/hooks run build
yarn workspace @innocuous/components run build

and noticing that storybook files are compiled, despite being ignored from the root config extended by the package's config.
It seems like running tsc with my tsconfigs works as expected, but the build step continues to compile things I am excluding.
Expected behavior
In the example repo, stories are not compiled.
Suggested solution(s)
Unsure... I'd love to resolve this myself. @agilgur5 has DMs disabled on Twitter, but I was curious if anybody would be down to pair for a short chat about how files/folders are chosen for the build step in tsdx.
Additional context
Similar issue resolved: https://github.com/jaredpalmer/tsdx/issues/61
Your environment

Software
Version(s)

TSDX
latest

TypeScript
latest

Browser
Chrome latest

npm/Yarn
yarn latest

Node
node latest

Operating System
MacOS latest

This is a follow-up from https://github.com/jaredpalmer/tsdx/pull/646#issuecomment-609078762

how files/folders are chosen for the build step in tsdx.

There's nothing special, the source code just adds some defaults and passes to rpts2:
https://github.com/jaredpalmer/tsdx/blob/f58de19871a03c15a84bb0da1ba97b374e846c2a/src/createRollupConfig.ts#L146-L177
I'd need to check your repo and see how tsc was working, but if this is really a bug, it'd be upstream in rpts2 since TSDX doesn't do anything fancy. Afaik in the rpts2 source code (I've contributed a small bit to fix issues here), it doesn't do much with include / exclude either and passes that to the TS API.
Which is why I'm surprised if it doesn't handle exactly like tsc

Yeah. I was surprised as well. Sure enough running TSC won’t compile storybook files, but TSDX build will.


Add google drive to new racer page.

https://wmrra.com/race/new-racer-information/
Jason Pierce has asked that files from google drive https://drive.google.com/drive/u/0/folders/1Hs4HVXwj8818XKt0wttb_QKQtjhsuqvQ be shared under the New Racer Information page

Fixed by #33


Added language dependent lucene analyzers

so that the swedish region and regionar  gets the same number of hits.
You need to set appsettings.json/LuceneConfiguration/UseStandardAnalyzer to false for the change to take effect.
New langs needs to by added manually

@runejo @likp I think I'm done :-)


Not able to Use json-schema-form to form data in table

I am using angular2-json-schema-form, to form html page. Some of the data i want to represent in the table using the attribute "format": "table". I am getting the following error: "unknown format "table" ignored in schema".
Do i need to install any table module using npm ?
"YextCategoryList": {
"type": "array",
"format": "table",
"addable" : false,
"removable":false,
"orderable": false,
"title": "Yext Category List",
"items": {
"type": "object",
"properties": {
"yextCategoryId": {
"title": "Yext Category Id",
"type": "string",
"readonly": true,
"default": "",
"examples": [ "123456" ]
},
"addedBy": {
"title": "Added By",
"type": "string",
"readonly": true,
"default": "",
"examples": [ "koushk01" ]
},
"addedDate": {
"title": "Added Date",
"readonly": true,
"default": "",
"examples": [ "2017-12-20T16:44:04.000Z" ]
},
"updatedBy": {
"title": "Updated By",
"type": "string",
"readonly": true,
"default": "",
"examples": [ "koushk01" ]
},
"updatedDate": {
"title": "Updated Date",
"tyre": "string",
"readonly": true,
"default": "",
"examples": [ "2017-12-20T16:44:04.000Z" ]
}
}
}
}

Hi. Pretty sure you've got the wrong repo here.

Can help us know the right repo, as we are using this schema for json to html. As mentioned above using angular2-json-schema-form.

This repo is for a Python implementation and has nothing to do with HTML or angular.

http://json-schema.org/implementations.html


Add CBMC as dependency to nix

Right now we are assuming that the user has installed:

CBMC: https://www.cprover.org/cbmc/
https://github.com/model-checking/cbmc-viewer
Litani: https://github.com/awslabs/aws-build-accumulator

This PR moves that into the nix dependencies, so the developer can just type nix develop to install it.
It also allows us to make sure alle developers are running the same versions of these tools (and we can install updates when needed).

I think we should build CBMC from source as well to have an easier time updating the version as the CBMC responds to issues we find (Rod has already reported a few things I think).

@potsrevennil points out that this is going to be easy by using pkgs.cbmc.overrideAttrs with a new version or commit hash from the repo. You can ping us once you actually need a newer version and we can change it. We won't need to write our own build script.
We've done something similar for astyle as the most recent version is buggy: https://github.com/mkannwischer/mlkem-c-aarch64/blob/d9f9300c52f1e38aea1a172916edf80aa9ca0eca/flake.nix#L23

@potsrevennil points out that this is going to be easy by using pkgs.cbmc.overrideAttrs with a new version or commit hash from the repo. You can ping us once you actually need a newer version and we can change it. We won't need to write our own build script.

Sounds great. Can you still set this up with 5.95.1 (obtained from the repo) for now?

It is 5.95.1 (actually it always was - the comment was just wrong)

@mkannwischer Yes, I understand, but I was wondering if you could still set things up in such a way that one can specify version or hash from the repository.


Feature/build back office entities crud pages

Purpose
Description...
Proposal
Description...

[] item 1...
[] item 2...

split in multiple PR


XRangeProcessor parses missing patch version as range.

Semver("2.0.3").satisfies("2.0") returns true due to the XRangeProcessor:
https://github.com/semver4j/semver4j/blob/3a28eb6df364ee292069af31caa8e3a2d5661f67/src/main/java/org/semver4j/internal/range/processor/XRangeProcessor.java#L39-L41
https://github.com/semver4j/semver4j/blob/3a28eb6df364ee292069af31caa8e3a2d5661f67/src/main/java/org/semver4j/internal/range/processor/RangesUtils.java#L18-L20
In this example the patch is null and is therefore parsed with the X_RANGE_MARKER, resulting in the range (>=2.0.0 and <2.1.0).
Is this the expected behavior?
https://github.com/npm/node-semver#x-ranges-12x-1x-12- doesn't specify this case.

Here is example:
1.2 := 1.2.x := >=1.2.0 <1.3.0-0
Your case respectively:
2.0 := 2.0.x := >=2.0.0 <2.1.0-0
IMHO this works ok.

Thanks. Missed that from the documentation.


Filter by the field of a second table

I would like to perform a request like this with moor:
SELECT * FROM tablea AS a INNER JOIN tableb as b ON a.id=b.fk_id WHERE b.name LIKE '%name%' AND a.date='2020-08-19'
I tried with aliases but it doesn't work.

Can you post the code you tried? Using this should get you close:
final a = alias(tableA, 'a');
final b = alias(tableB, 'b'):

final query = select(a).join([innerJoin(b, a.id.equalsExp(b.fkId))]);
query.where(b.name.like('%name%') & a.date.equals('2020-08-19'));

If you prefer, you cal always write SQL with moor and get it checked at compile time.

thank you.

@dartflo Does this work for you too? Feel free to re-open if it doesn't of if you have more questions, thanks!


3458 Rename create to publish throughout the notifications code

Context
We have launched the notification feature. This PR tidies up some inconsistencies that we introduced as we developed the feature.
Changes proposed in this pull request

Rename UserNotification#course_create to course_publish throughout. The email is sent when a course is published not created
Rename Courses::PublishService to NotificationService::CoursePublished. The service only sends a notification currently so this naming is more consistent with its function.
Rename Courses::UpdateNotificationService to NotificationService::CourseUpdated to make it consistent with above.
Refactor the services to make them consistent with the pattern we've introduced in Publish. Use the ServicePattern module.
Refactor some specs to reduce the number of DB objects required to run them.
Remove some code that was used in earlier implementations of this feature but is no longer required (UserNotification.find_or_initialize)

Guidance to review
Checklist

[x] Make sure all information from the Trello card is in here
[x] Attach to Trello card
[x] Rebased master
[x] Cleaned commit history
[ ] Tested by running locally

 [M] Rename create to publish throughout the notifications code

@gpeng @defong Did we test this on QA?

@karthikdfe Not yet. I'm going to merge and do that this morning. We can 'finesse' it on there before I deploy :)

@gpeng any reason why we not testing this on QA before merging into master?

@karthikdfe Only that it's a faff to deploy the branch and then have to deploy master and we don't have review apps for this repo. I don't envisage there being a massive problem, I just need to see how the azure template works with the environment variables I can deploy it as a branch if you prefer. 🤷

The branch has been tested on QA and the pipeline changes are working.


cell phone sideways (rotate)

Hi guys,
I'm pretty new with programing and this platform.  So, sorry for my basic question.
But I was trying the examples and when you put your cell phone sideways (rotate), the view is not correct anymore.  You can only see the camera image in the lowerleft corner of the browser.   The problem appears when you change from one orientation to another (vertical to horizontal for example).
Here I attached an image.
Does it happen to you?   How can I solve this?
Thank you very much for your help.

The library doesn't handle window rotation properly. Yes, definitely something need to be fixed.

Hi hiukim , thank for your answer.   Do you think you are going to fix it?  Is it complicate?  Thanks...

Yes, I will fix it. sorry, I'm a bit occupied these days.

Yes, I will fix it. sorry, I'm a bit occupied these days.

Thank you a lot @hiukim !!   Regards!!

Might be fixed by #83

fixed in latest release.

Hello hiukim , thanks for such a great job.
Quick note, I am afraid that the problem persists. I tested on Safari, Chrome and Firefox, using an iPhone.


The plugin causes a crash after a few seconds

this could be a compatibility issue with another plugin

If you want to test it on your machine with my plugins:
plugins.zip

it seems like if there are more then 36 plugins then discord crashes

can't reproduce on discord stable, installed all your 36 plugins and nitrospoof works (besides some random errors in console that happens even without nitrospoof)

if there are more then 36 plugins then discord crashes

works for me


Subject: Request: Include Server Requirements in README

Hi there,
Great job on the project! I have a quick suggestion: can we add the hardware requirements to the README.txt? It would be super helpful for users.
Thanks a bunch!
Best,
Martin.

A link to palworld's own dedicated server documentation would probably be better since their requirements are likely to evolve as it gets developed.

Done!


Only list 4 collections

Origin page
Only list 4 collections, instead of 13:

https://github.com/webcomponents/beta/issues/472


DOC: Cleaner command line doc

I find it not so easy to read our command-line docs:

Basically I tried to compromise between:

Compactness
Readability
Our API doc style/sections
What's standard in command-line utils, which is:larsoner@bunk:~/python/mne-python/doc$ grep --help
Usage: grep [OPTION]... PATTERN [FILE]...
Search for PATTERN in each FILE.

This is the result:

Rendered doc: https://12025-1301584-gh.circle-artifacts.com/0/dev/generated/commands.html

Looks great!

Tweaked slightly: https://12027-1301584-gh.circle-artifacts.com/0/dev/generated/commands.html

great !
+1 for merge when CIs are green

Two +1's so in it goes, thanks for the quick reviews


Reporting security vulnerabilities

Is there a good place to report security vulnerabilities? I've found a few overflows, as well as a bug in how connect tokens are generated. I'd rather not post the specifics in a public github issue.
Max

@maxweisel can you confirm the severity of the issues you found, and if they're present in netcode.c or one of the demo implementations? It's concerning that there is no fix in master.

@maxweisel I told you to email me<EMAIL_ADDRESS>No email... why report vague security vulnerabilities without providing details to the person who wrote the code?

Hey @pushrax  & @gafferongames,
My apologies, I was planning to write up a detailed explanation and proof of concept before submitting. The last time I reported an overflow on yojimbo, I was only met with comments about the software being improperly configured. It wasn't until I had spent months debugging it myself that I found the actual cause of the issue and it turns out, it was not my config as @gafferongames claimed multiple times, it was an overflow. Call it a difference of opinion, but I was using the default config, and I don't believe it should be possible for default configuration to cause an overflow.
This time around, I figured I would put a repro project together beforehand to avoid any confusion. However, in working on this repro project, I came to the conclusion that I do not believe it is possible to properly secure yojimbo / netcode, and I removed it as a dependency from my project entirely.
As such, I have not had the time to finish this repro project (again the last one took a long time to reproduce reliably), but I am able to reliably crash netcode with a fuzzer. All length / size checks are written using netcode_assert, which gets compiled to a no-op in production builds: https://github.com/networkprotocol/netcode.io/blob/master/netcode.h#L253.
Personally, I think this is unacceptable. Production builds should not be allowed to overflow. That said, even if you change release builds to call exit(), I do not believe our software should quit when given malformed data, it should be able to handle those cases correctly and continue running.
I hope this is helpful, sorry for the salty message...
Max

@maxweisel The solution to your problems is really simple. Submit a PR with a fix. It's the least you can do, when you sell a commercial networking library based on open source software that took years for me to develop.

This time around, I figured I would put a repro project together beforehand to avoid any confusion. However, in working on this repro project, I came to the conclusion that I do not believe it is possible to properly secure yojimbo / netcode, and I removed it as a dependency from my project entirely.

This is a ludicrous assertion, and I can see clearly you are here simply to spread FUD to promote your commercial library.
 Banned.


creationFlags are not supported on linux/osx

Avalon is using creationFlags to launch subprocess via its launch() function. CreationFlags are supported only on Windows in Python. It is therefor failing on linux and macos.
What's changed?
I've just added condition to use it only on Windows.

Looking good. Does it behave as expected in that condition for Linux/Mac. For example, as CREATE_NEW_CONSOLE is defined does it launch in a separate console/process (e.g. detaching itself).

well no, there is no easy way to do it. If you are running from terminal, there is really no concept of detaching. Running under desktop environment, there you would need to specify what terminal emulator you are using, what shell you are using and then spawn it and run subprocess. This is by my opinion too much hustle to do. Now it doesn't detach iself but I don't think it affect usability very much - I've ran into it when trying to launch Python action from Launcher. Now the Python interpreter will start in the same terminal we used to start avalon.

Ah ok, the only caveat then is that the CREATE_NEW_CONSOLE environment variable might be misleading on Mac OS / Linux as it wouldn't actually do so. Not sure if a problem, we just need to make sure anyone using it is aware of it.
Should we maybe mention it in a comment in the code too?

True, I've added comment there explaining behaviour. We could probably later add such functionality for linux, but it would require lots of code I don't think is worth to invest there. Those flags were until now show-stopper on linux so this little change will stop crashes there albeit without full functionality as on Windows.

This is not problem with CREATE_NEW_CONSOLE but with setting creationgflags at all, they are not recongized at all on Linux and lead to crash and traceback stating so.

Looks good, thanks!

Add another note for future referencing :)
https://stackoverflow.com/a/25124003/4145300


We need testers!

We are searching for testers for:
The 4.x rewrite
If you want to test the 4.x rewrite, you can already do that by changing the version constraint to flutter_web_auth_2: ^4.0.0-alpha.5
See also here: https://pub.dev/packages/flutter_web_auth_2/versions/4.0.0-alpha.5
Please note the migration guide
Android
I am using this package in production in an app - so I am very sure about its reliability here!
Web
Most of my "quick" tests are done in Edge and Firefox - should also be pretty stable.
Apple
I do not have any devices by Apple. I have no idea how stable the current implementation is. Most testing is necessary here.
Linux
Should be pretty stable, but I only test this occasionally.
Windows
Should be pretty stable, but I only test this occasionally.

@niteshsh4rma Do you perhaps have any Apple devices to test the current state of this fork on Apple devices? :)
Also, I should have invited you to join this project in case you are still interested in maintaining this library!

Sorry to say, but I only have Linux and Windows machine. But I am interested to work on this.

Damn, we need to find someone who is able to test this on Apple devices. Otherwise, we need to publish the package without these tests and fix things after first bug reports come in.
I have already tested basic functionality on Android. Let's see if some other platform is causing any problems.
Also, I am thinking about including even more PRs from the original project here (such as the big plugin refactor and so on).
Thanks again for volunteering, also! :)

@ThexXTURBOXx, i have iPad and i can make some tests if you provide me what exactly need to test.

@AndreiRoze That would be great! Just running the example and seeing if it compiles, runs, and successfully authenticates you would be very nice :)
Thanks in advance!

@ThexXTURBOXx, I finished tests, looks like it work correct, "preferEphemeral" option also work correct. I tested with your example and also i tested with GitHub Oauth2.
Screenshots from test with example:

Screenshots from test with GitHub:

If you need another iOS/android tester, I am open to it. I have been looking for an update to this plugin for a long time and want to see it succeed! I was tempted to fiddle with the code myself since authentication on android didn't work for me.

@AndreiRoze Thank you very much! Very nice that it instantly works. That gives me hope :)
@ElDuderini If you want, you can of course also test it :)
As soon as I got confirmations for all the currently supported platforms, I will publish the first version of flutter_web_auth_2 to pub.dev

I will postpone #2 because I am unsure if I want to finish it anyways.
Let's see what the future brings. For now, I am planning on publishing the first version of this package today

1.0.0 has just been published!

Any reason this is still open? We just deployed an app with version 2.02 and IOS support, everything seems to be working fine ATM.

It's always good to have people that can test changes that (could) affect Apple products since I don't have access to any :)

@ThexXTURBOXx I was able to setup a full E2E testing pipeline using patrol and a digital ocean VPS. I run waydroid on debian. Waydroid is a simulator which requires far less CPU/mem compared to adb emulator. Therefore I am able to run the entire app on a 8CPU 16GB ram vps and have room for spare. Speed is decent. I can see and interact with the screen via wayvnc. Additionally I used a ssh script to detect when a chrome process is opened. It then taps on the login button. Which in turn returns control back to the flutter app. From there on my typical test suite runs. So overall fully automating android testing is possible including the auth client. Not sure what can be done for iOS in this fashion. Would this setup help you for testing purposes? I can provide a setup guide/presentation.

Thank you very much for your offer! For my tests, I am basically just testing it on the physical devices I own (or even use on a day-to-day basis).
I own a Windows computer, a Linux laptop, two Android devices and I have several Web browsers installed on these.
So, most platforms should be pretty stable. With the exception of Apple.
The best solution would obviously be me buying some MacBook and iPhone (both do not even need to be the newest models), but even that is a bit too expensive for me since I would only need them to properly test this package.
Hence, my current focus would be testers for the 4.x pre-release, but especially users/devs that can test on iOS and MacOS.
But, again, thank you very much anyway! :)

I'm replying from a Mac M1. I can run the basic tests. I also have a colleague that can take a spot if I'm not available. As for iOS I don't have one myself, but I'll have to have one to test my own flutter app. Until then I could test on my gf phone. I need to test my own app soon anyway. Might as well help you on this one.

Perfect, thank you very much! Your help would be much appreciated - especially when I try to solve #104. Should be a pretty straightforward change, but I fear that I will break something in the process

@ThexXTURBOXx I mainly dev on macOS/iOS. What do you want done to test this? I need WASM support, so having version 4 released as stable would be ideal.

@Rexios80 Thanks for volunteering! :)
It would be nice if one could just try out the basic functionality of the package on Apple devices, i.e., changing some of the options and see if they are applied correctly.
Now with 4.x being rather stable, one could also try out the new Universal links support (#117).
And no, I didn't forget also your PR (#26) which laid out the groundwork for Universal links ;)
As soon as someone can verify that everything seems to be working rather smoothly on these platforms, I will be more than happy to release a stable 4.0.0 version (after revisiting the migration guide - maybe I forgot to mention something...)

How feasible would it be to write integration tests for this functionality? That would make outsourcing testing a lot easier.

If someone wants to write them, go ahead! Sadly, I am already rather busy already maintaining all my projects here on GitHub to keep them alive and don't have time to implement them myself

I'm implementing this in an iOS/Android/web app this month, so it should be tested pretty thoroughly in a couple weeks. If I don't get back to you please mention me to ask for an update.


release: Bindings NodeJS CI - x86_64-unknown-linux-gnu failed

error This project's package.json defines "packageManager"<EMAIL_ADDRESS>However the current global version of Yarn is 1.22.21.

Presence of the "packageManager" field indicates that the project is meant to be used with Corepack, a tool included by default with all official Node.js distributions starting from 16.9 and 14.19.
Corepack must currently be enabled by running corepack enable in your terminal. For more information, check out https://yarnpkg.com/corepack.
Error: Process completed with exit code 1.

https://github.com/apache/incubator-opendal/actions/runs/7136979272/job/19436561223
cc @Xuanwo

What a headache!


Injection problem

At present, I still enter the 2.6 version of the and enter it through the melloader. However, pressing F9 still fails to inject the camera mod. Is there a solution?

Go to your MelonLoader folder, find a file called Latest or Latest.log and upload it here.

At present, I still enter the 2.6 version of the and enter it through the melloader. However, pressing F9 still fails to inject the camera mod. Is there a solution?

At present, I still enter the 2.6 version of the and enter it through the melloader. However, pressing F9 still fails to inject the camera mod. Is there a solution?

Where did you find the 2.6 version and a working Melonloader for it?

It's been a few days without any response, so I am assuming your problem has been solved. Feel free to re-open if you need further help.